- Refactor monolithic index.js (2646 lines) into src/{webex,integrations,
cards,flows,commands,services} modules; replace node-fetch/form-data
with native fetch/FormData; move all secrets to .env via dotenv
- Add dockerized remote SIW agent (docker/remote-agent/) with cross-arch
buildx packaging (arm64 Mac -> linux/amd64), idempotent install.sh
deploy bundle, and docker-free ZIP inspector for arch verification
- Bot hosts a WebSocket server; agent proxies SIW requests with a
per-request insecure:true flag, replacing the process-wide
NODE_TLS_REJECT_UNAUTHORIZED bypass
- Add ESLint flat config + Prettier, rewrite Dockerfile as non-root
multi-stage node:22-alpine build, README covering setup / deploy /
remote agent workflow
- Fix parseStoreArg to read trigger.prompt correctly (was indexing past
the framework's post-match slice); register /help as regex (string
matcher only compares the first token); switch catch-all to /.+/
(previous /.*/gim was stateful due to the g flag); remove
/fixDisplayNames command and its flow/card
Co-authored-by: Cursor <cursoragent@cursor.com>
30 lines
942 B
Docker
30 lines
942 B
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
# --- build stage: install production dependencies only ---
|
|
FROM node:22-alpine AS deps
|
|
WORKDIR /app
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci --omit=dev --no-audit --no-fund
|
|
|
|
# --- runtime stage: minimal image with just what's needed to run ---
|
|
FROM node:22-alpine AS runtime
|
|
ENV NODE_ENV=production
|
|
WORKDIR /app
|
|
|
|
# Bring in dependencies (owned by the built-in `node` user).
|
|
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
|
|
|
|
# Application code.
|
|
COPY --chown=node:node package.json package-lock.json ./
|
|
COPY --chown=node:node src ./src
|
|
COPY --chown=node:node greetings ./greetings
|
|
|
|
# Directory the token-refresh cron writes to. Mount a volume here in prod.
|
|
RUN mkdir -p /app/config && chown node:node /app/config
|
|
|
|
# WebSocket port the on-prem SIW agent connects back to. Override at runtime
|
|
# via -e WS_PORT and -p host:container.
|
|
EXPOSE 8080
|
|
|
|
USER node
|
|
CMD ["node", "src/index.js"]
|