crewly 1.20.193 → 1.20.195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/roles/auditor/prompt.md +2 -2
- package/config/roles/orchestrator/fragments/communication.md +1 -1
- package/config/roles/orchestrator/prompt.md +15 -505
- package/config/skills/agent/computer-use/SKILL.md +6 -0
- package/config/skills/agent/core/experiment-card/SKILL.md +101 -0
- package/config/skills/agent/core/experiment-card/execute.sh +149 -0
- package/config/skills/agent/core/experiment-card/execute.test.sh +97 -0
- package/config/skills/agent/desktop-app-control/execute.sh +5 -2
- package/config/skills/orchestrator/send-message/execute.sh +19 -2
- package/config/skills/orchestrator/send-message/execute.test.sh +80 -0
- package/config/skills/registry.json +7 -5
- package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
- package/config/skills/team-leader/signal-digest/execute.sh +173 -0
- package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
- package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
- package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
- package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
- package/dist/backend/backend/src/constants.d.ts +191 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +194 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +6 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +3 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +27 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
- package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
- package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
- package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +47 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js +169 -0
- package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +66 -20
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +14 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +6 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.js +5 -0
- package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +78 -2
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +210 -26
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +14 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +28 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +7 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +88 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +350 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js +908 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +88 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +162 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +67 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +133 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +5 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +11 -3
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +24 -7
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +5 -0
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +12 -3
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts +42 -5
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.js +80 -5
- package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -1
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts +5 -4
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/grant-sharing.js +12 -4
- package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -1
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts +71 -13
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/people/people-directory.service.js +164 -27
- package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +2 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
- package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts +33 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +14 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +30 -10
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
- package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +31 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +52 -7
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
- package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +195 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js +432 -0
- package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +42 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js +146 -0
- package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +290 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js +669 -0
- package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts +269 -0
- package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace-store.js +602 -0
- package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +118 -0
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/trace/trace.types.js +85 -0
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +4 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +22 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.d.ts +155 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/experiment.types.js +32 -0
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts +6 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
- package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
- package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +4 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/security.d.ts +2 -0
- package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/security.js +3 -1
- package/dist/backend/backend/src/utils/security.js.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +191 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +194 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +6 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat/chat.service.d.ts +185 -0
- package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat/chat.service.js +558 -0
- package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +14 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +28 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
- package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +11 -3
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +24 -7
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts +42 -5
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/people/acting-for.service.js +80 -5
- package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -1
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts +71 -13
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/people/people-directory.service.js +164 -27
- package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +2 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +14 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +30 -10
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +31 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +52 -7
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +195 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js +432 -0
- package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
- package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
- package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +290 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js +669 -0
- package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts +269 -0
- package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace-store.js +602 -0
- package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +118 -0
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/trace/trace.types.js +85 -0
- package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +4 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.d.ts +6 -0
- package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +4 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/security.d.ts +196 -0
- package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/security.js +538 -0
- package/dist/cli/backend/src/utils/security.js.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
- package/frontend/dist/assets/{index-465d1f8f.js → index-800118ca.js} +274 -274
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides security-related validation and sanitization functions
|
|
5
|
+
* for protecting against common vulnerabilities like command injection,
|
|
6
|
+
* path traversal, and dangerous control sequences.
|
|
7
|
+
*
|
|
8
|
+
* @module security
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
/** Longest text {@link validateTerminalInput} accepts by default (characters). */
|
|
13
|
+
export const TERMINAL_INPUT_MAX_LENGTH = 10000;
|
|
14
|
+
/**
|
|
15
|
+
* Characters that are dangerous in shell commands and should be escaped or removed
|
|
16
|
+
* from user input that will be used in shell operations.
|
|
17
|
+
*/
|
|
18
|
+
export const SHELL_DANGEROUS_CHARS = [
|
|
19
|
+
'`', // Command substitution
|
|
20
|
+
'$', // Variable expansion / command substitution
|
|
21
|
+
'\\', // Escape character
|
|
22
|
+
'"', // String delimiter
|
|
23
|
+
"'", // String delimiter
|
|
24
|
+
';', // Command separator
|
|
25
|
+
'&', // Background execution / AND operator
|
|
26
|
+
'|', // Pipe operator
|
|
27
|
+
'>', // Output redirection
|
|
28
|
+
'<', // Input redirection
|
|
29
|
+
'\n', // Newline (command separator)
|
|
30
|
+
'\r', // Carriage return
|
|
31
|
+
'\0', // Null byte
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Dangerous control sequences that should not be allowed in terminal input.
|
|
35
|
+
* These can be used for terminal escape attacks or to manipulate terminal state.
|
|
36
|
+
*/
|
|
37
|
+
export const DANGEROUS_CONTROL_SEQUENCES = [
|
|
38
|
+
'\x1b', // ESC - Start of ANSI escape sequences
|
|
39
|
+
'\x07', // BEL - Bell character (can trigger actions)
|
|
40
|
+
'\x08', // BS - Backspace (can manipulate display)
|
|
41
|
+
'\x7f', // DEL - Delete character
|
|
42
|
+
'\x9b', // CSI - Control Sequence Introducer (8-bit)
|
|
43
|
+
'\x90', // DCS - Device Control String
|
|
44
|
+
'\x9d', // OSC - Operating System Command
|
|
45
|
+
'\x9e', // PM - Privacy Message
|
|
46
|
+
'\x9f', // APC - Application Program Command
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Regex pattern to match ANSI escape sequences
|
|
50
|
+
*/
|
|
51
|
+
const ANSI_ESCAPE_PATTERN = /\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\x1b[PX^_][^\x1b]*\x1b\\|\x1b[@-Z\\^_]|\x9b[0-9;]*[a-zA-Z]/g;
|
|
52
|
+
/**
|
|
53
|
+
* Regex pattern to match Operating System Command sequences
|
|
54
|
+
* These can be used to change terminal title, clipboard, etc.
|
|
55
|
+
*/
|
|
56
|
+
const OSC_PATTERN = /\x1b\](?:[0-9]+;[^\x07\x1b]*)?(?:\x07|\x1b\\)/g;
|
|
57
|
+
/**
|
|
58
|
+
* Sanitizes a string for safe use in shell commands, specifically for
|
|
59
|
+
* git commit messages. Removes or escapes characters that could be used
|
|
60
|
+
* for command injection.
|
|
61
|
+
*
|
|
62
|
+
* @param input - The raw input string to sanitize
|
|
63
|
+
* @param options - Sanitization options
|
|
64
|
+
* @param options.maxLength - Maximum allowed length (default: 1000)
|
|
65
|
+
* @param options.allowNewlines - Whether to allow newlines (default: true for commit messages)
|
|
66
|
+
* @returns SanitizationResult with the sanitized string and metadata
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const result = sanitizeForShell('Fix bug; rm -rf /');
|
|
71
|
+
* // result.sanitized === 'Fix bug rm -rf /'
|
|
72
|
+
* // result.wasModified === true
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export function sanitizeForShell(input, options = {}) {
|
|
76
|
+
const { maxLength = 1000, allowNewlines = true } = options;
|
|
77
|
+
const removedPatterns = [];
|
|
78
|
+
let sanitized = input;
|
|
79
|
+
let wasModified = false;
|
|
80
|
+
// Truncate if too long
|
|
81
|
+
if (sanitized.length > maxLength) {
|
|
82
|
+
sanitized = sanitized.substring(0, maxLength);
|
|
83
|
+
wasModified = true;
|
|
84
|
+
removedPatterns.push(`truncated from ${input.length} to ${maxLength} chars`);
|
|
85
|
+
}
|
|
86
|
+
// Remove null bytes
|
|
87
|
+
if (sanitized.includes('\0')) {
|
|
88
|
+
sanitized = sanitized.replace(/\0/g, '');
|
|
89
|
+
wasModified = true;
|
|
90
|
+
removedPatterns.push('null bytes');
|
|
91
|
+
}
|
|
92
|
+
// Handle newlines based on option
|
|
93
|
+
if (!allowNewlines) {
|
|
94
|
+
if (sanitized.includes('\n') || sanitized.includes('\r')) {
|
|
95
|
+
sanitized = sanitized.replace(/[\r\n]+/g, ' ');
|
|
96
|
+
wasModified = true;
|
|
97
|
+
removedPatterns.push('newlines');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Remove backtick command substitution patterns
|
|
101
|
+
const backtickPattern = /`[^`]*`/g;
|
|
102
|
+
const backtickReplaced = sanitized.replace(backtickPattern, '');
|
|
103
|
+
if (backtickReplaced !== sanitized) {
|
|
104
|
+
sanitized = backtickReplaced;
|
|
105
|
+
wasModified = true;
|
|
106
|
+
removedPatterns.push('backtick command substitution');
|
|
107
|
+
}
|
|
108
|
+
// Remove $() command substitution
|
|
109
|
+
const dollarParenPattern = /\$\([^)]*\)/g;
|
|
110
|
+
const dollarParenReplaced = sanitized.replace(dollarParenPattern, '');
|
|
111
|
+
if (dollarParenReplaced !== sanitized) {
|
|
112
|
+
sanitized = dollarParenReplaced;
|
|
113
|
+
wasModified = true;
|
|
114
|
+
removedPatterns.push('$() command substitution');
|
|
115
|
+
}
|
|
116
|
+
// Remove shell variable expansion $VAR or ${VAR}
|
|
117
|
+
const varPattern = /\$\{[^}]*\}|\$[A-Za-z_][A-Za-z0-9_]*/g;
|
|
118
|
+
const varReplaced = sanitized.replace(varPattern, '');
|
|
119
|
+
if (varReplaced !== sanitized) {
|
|
120
|
+
sanitized = varReplaced;
|
|
121
|
+
wasModified = true;
|
|
122
|
+
removedPatterns.push('shell variable expansion');
|
|
123
|
+
}
|
|
124
|
+
// Remove dangerous shell operators (but preserve the text around them)
|
|
125
|
+
const dangerousOps = [';', '&&', '||', '|', '>', '<', '>>', '<<'];
|
|
126
|
+
for (const op of dangerousOps) {
|
|
127
|
+
if (sanitized.includes(op)) {
|
|
128
|
+
// Replace operator with space to preserve word boundaries
|
|
129
|
+
sanitized = sanitized.split(op).join(' ');
|
|
130
|
+
wasModified = true;
|
|
131
|
+
if (!removedPatterns.includes('shell operators')) {
|
|
132
|
+
removedPatterns.push('shell operators');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Clean up multiple consecutive spaces (but preserve newlines if allowed)
|
|
137
|
+
if (allowNewlines) {
|
|
138
|
+
// Only clean up multiple spaces on the same line
|
|
139
|
+
const cleanedSpaces = sanitized.replace(/[ \t]{2,}/g, ' ');
|
|
140
|
+
if (cleanedSpaces !== sanitized) {
|
|
141
|
+
sanitized = cleanedSpaces;
|
|
142
|
+
// Don't mark as modified just for whitespace cleanup
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Clean up all multiple whitespace
|
|
147
|
+
const cleanedSpaces = sanitized.replace(/\s{2,}/g, ' ').trim();
|
|
148
|
+
if (cleanedSpaces !== sanitized) {
|
|
149
|
+
sanitized = cleanedSpaces;
|
|
150
|
+
// Don't mark as modified just for whitespace cleanup
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
sanitized,
|
|
155
|
+
wasModified,
|
|
156
|
+
removedPatterns: removedPatterns.length > 0 ? removedPatterns : undefined,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Sanitizes a git commit message by removing potentially dangerous characters
|
|
161
|
+
* while preserving the semantic content of the message.
|
|
162
|
+
*
|
|
163
|
+
* @param message - The raw commit message
|
|
164
|
+
* @param options - Sanitization options
|
|
165
|
+
* @param options.maxLength - Maximum message length (default: 5000)
|
|
166
|
+
* @returns SanitizationResult with the sanitized message
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const result = sanitizeGitCommitMessage('feat: add feature $(whoami)');
|
|
171
|
+
* // result.sanitized === 'feat: add feature'
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
export function sanitizeGitCommitMessage(message, options = {}) {
|
|
175
|
+
const { maxLength = 5000 } = options;
|
|
176
|
+
// Use shell sanitization with newlines allowed (for multi-line commit messages)
|
|
177
|
+
return sanitizeForShell(message, { maxLength, allowNewlines: true });
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validates that terminal input does not contain dangerous control sequences
|
|
181
|
+
* that could be used for terminal escape attacks.
|
|
182
|
+
*
|
|
183
|
+
* @param input - The terminal input to validate
|
|
184
|
+
* @param options - Validation options
|
|
185
|
+
* @param options.allowBasicFormatting - Allow basic ANSI formatting codes (colors, etc.)
|
|
186
|
+
* @param options.maxLength - Maximum input length (default: 10000)
|
|
187
|
+
* @returns Object with isValid flag and optional error message
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const result = validateTerminalInput('echo hello');
|
|
192
|
+
* // result.isValid === true
|
|
193
|
+
*
|
|
194
|
+
* const result2 = validateTerminalInput('\x1b]0;malicious\x07');
|
|
195
|
+
* // result2.isValid === false
|
|
196
|
+
* // result2.error === 'Input contains Operating System Command sequences'
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export function validateTerminalInput(input, options = {}) {
|
|
200
|
+
const { allowBasicFormatting = false, maxLength = TERMINAL_INPUT_MAX_LENGTH } = options;
|
|
201
|
+
// Check length
|
|
202
|
+
if (input.length > maxLength) {
|
|
203
|
+
return {
|
|
204
|
+
isValid: false,
|
|
205
|
+
error: `Input exceeds maximum length of ${maxLength} characters`,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Check for null bytes
|
|
209
|
+
if (input.includes('\0')) {
|
|
210
|
+
return {
|
|
211
|
+
isValid: false,
|
|
212
|
+
error: 'Input contains null bytes',
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// Check for OSC (Operating System Command) sequences which can:
|
|
216
|
+
// - Change terminal title
|
|
217
|
+
// - Access clipboard
|
|
218
|
+
// - Execute commands on some terminals
|
|
219
|
+
// Check this BEFORE checking for ESC to give more specific error
|
|
220
|
+
if (OSC_PATTERN.test(input)) {
|
|
221
|
+
return {
|
|
222
|
+
isValid: false,
|
|
223
|
+
error: 'Input contains Operating System Command sequences',
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// If basic formatting is not allowed, reject any ANSI escape sequences
|
|
227
|
+
if (!allowBasicFormatting && ANSI_ESCAPE_PATTERN.test(input)) {
|
|
228
|
+
return {
|
|
229
|
+
isValid: false,
|
|
230
|
+
error: 'Input contains ANSI escape sequences',
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// Check for dangerous control characters (check after ANSI patterns for specific errors)
|
|
234
|
+
for (const seq of DANGEROUS_CONTROL_SEQUENCES) {
|
|
235
|
+
if (seq === '\x1b' && (allowBasicFormatting || ANSI_ESCAPE_PATTERN.test(input) || OSC_PATTERN.test(input))) {
|
|
236
|
+
// Skip ESC if we already handled it above
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (input.includes(seq)) {
|
|
240
|
+
return {
|
|
241
|
+
isValid: false,
|
|
242
|
+
error: 'Input contains dangerous control sequences',
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// If basic formatting is allowed, check for dangerous escape sequences
|
|
247
|
+
// that go beyond simple color/formatting codes
|
|
248
|
+
if (allowBasicFormatting) {
|
|
249
|
+
// DCS (Device Control String) - can be used for Sixel injection
|
|
250
|
+
if (/\x1bP[^\\]*\x1b\\/.test(input) || /\x90[^\x9c]*\x9c/.test(input)) {
|
|
251
|
+
return {
|
|
252
|
+
isValid: false,
|
|
253
|
+
error: 'Input contains Device Control String sequences',
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
// Check for cursor positioning that could be used to overwrite displayed content
|
|
257
|
+
// to deceive users (allowed: colors, bold, etc. Disallowed: cursor movement)
|
|
258
|
+
const cursorMovePattern = /\x1b\[[0-9;]*[ABCDEFGHJ]/gi;
|
|
259
|
+
if (cursorMovePattern.test(input)) {
|
|
260
|
+
return {
|
|
261
|
+
isValid: false,
|
|
262
|
+
error: 'Input contains cursor manipulation sequences',
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { isValid: true };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Sanitizes terminal input by removing dangerous control sequences while
|
|
270
|
+
* preserving safe content.
|
|
271
|
+
*
|
|
272
|
+
* @param input - The terminal input to sanitize
|
|
273
|
+
* @param options - Sanitization options
|
|
274
|
+
* @param options.preserveNewlines - Keep newline characters (default: true)
|
|
275
|
+
* @param options.maxLength - Maximum output length (default: 10000)
|
|
276
|
+
* @returns SanitizationResult with the sanitized input
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```typescript
|
|
280
|
+
* const result = sanitizeTerminalInput('hello\x1b]0;title\x07world');
|
|
281
|
+
* // result.sanitized === 'helloworld'
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
export function sanitizeTerminalInput(input, options = {}) {
|
|
285
|
+
const { preserveNewlines = true, maxLength = 10000 } = options;
|
|
286
|
+
const removedPatterns = [];
|
|
287
|
+
let sanitized = input;
|
|
288
|
+
let wasModified = false;
|
|
289
|
+
// Truncate if too long
|
|
290
|
+
if (sanitized.length > maxLength) {
|
|
291
|
+
sanitized = sanitized.substring(0, maxLength);
|
|
292
|
+
wasModified = true;
|
|
293
|
+
removedPatterns.push(`truncated from ${input.length} to ${maxLength} chars`);
|
|
294
|
+
}
|
|
295
|
+
// Remove null bytes
|
|
296
|
+
if (sanitized.includes('\0')) {
|
|
297
|
+
sanitized = sanitized.replace(/\0/g, '');
|
|
298
|
+
wasModified = true;
|
|
299
|
+
removedPatterns.push('null bytes');
|
|
300
|
+
}
|
|
301
|
+
// Remove OSC sequences
|
|
302
|
+
if (OSC_PATTERN.test(sanitized)) {
|
|
303
|
+
sanitized = sanitized.replace(OSC_PATTERN, '');
|
|
304
|
+
wasModified = true;
|
|
305
|
+
removedPatterns.push('OSC sequences');
|
|
306
|
+
}
|
|
307
|
+
// Remove all ANSI escape sequences
|
|
308
|
+
if (ANSI_ESCAPE_PATTERN.test(sanitized)) {
|
|
309
|
+
sanitized = sanitized.replace(ANSI_ESCAPE_PATTERN, '');
|
|
310
|
+
wasModified = true;
|
|
311
|
+
removedPatterns.push('ANSI escape sequences');
|
|
312
|
+
}
|
|
313
|
+
// Remove other dangerous control characters
|
|
314
|
+
const controlCharPattern = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F]/g;
|
|
315
|
+
if (controlCharPattern.test(sanitized)) {
|
|
316
|
+
sanitized = sanitized.replace(controlCharPattern, '');
|
|
317
|
+
wasModified = true;
|
|
318
|
+
removedPatterns.push('control characters');
|
|
319
|
+
}
|
|
320
|
+
// Handle newlines
|
|
321
|
+
if (!preserveNewlines) {
|
|
322
|
+
if (sanitized.includes('\n') || sanitized.includes('\r')) {
|
|
323
|
+
sanitized = sanitized.replace(/[\r\n]+/g, ' ');
|
|
324
|
+
wasModified = true;
|
|
325
|
+
removedPatterns.push('newlines');
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
sanitized,
|
|
330
|
+
wasModified,
|
|
331
|
+
removedPatterns: removedPatterns.length > 0 ? removedPatterns : undefined,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Validates a file path to prevent path traversal attacks.
|
|
336
|
+
* Ensures the resolved path is within the allowed base directory.
|
|
337
|
+
*
|
|
338
|
+
* @param inputPath - The path to validate (can be relative or absolute)
|
|
339
|
+
* @param baseDirectory - The allowed base directory (must be absolute)
|
|
340
|
+
* @param options - Validation options
|
|
341
|
+
* @param options.allowSymlinks - Whether to allow symlinks (default: false for security)
|
|
342
|
+
* @returns PathValidationResult with validation status and normalized path
|
|
343
|
+
*
|
|
344
|
+
* @example
|
|
345
|
+
* ```typescript
|
|
346
|
+
* const result = validatePath('../../../etc/passwd', '/home/user/projects');
|
|
347
|
+
* // result.isValid === false
|
|
348
|
+
* // result.error === 'Path traversal detected'
|
|
349
|
+
*
|
|
350
|
+
* const result2 = validatePath('src/index.ts', '/home/user/projects');
|
|
351
|
+
* // result2.isValid === true
|
|
352
|
+
* // result2.normalizedPath === '/home/user/projects/src/index.ts'
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
export function validatePath(inputPath, baseDirectory, options = {}) {
|
|
356
|
+
const { allowSymlinks = false } = options;
|
|
357
|
+
// Input validation
|
|
358
|
+
if (!inputPath || typeof inputPath !== 'string') {
|
|
359
|
+
return {
|
|
360
|
+
isValid: false,
|
|
361
|
+
error: 'Path is required and must be a string',
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
if (!baseDirectory || typeof baseDirectory !== 'string') {
|
|
365
|
+
return {
|
|
366
|
+
isValid: false,
|
|
367
|
+
error: 'Base directory is required and must be a string',
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
// Base directory must be absolute
|
|
371
|
+
if (!path.isAbsolute(baseDirectory)) {
|
|
372
|
+
return {
|
|
373
|
+
isValid: false,
|
|
374
|
+
error: 'Base directory must be an absolute path',
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
// Check for null bytes (can bypass path checks in some systems)
|
|
378
|
+
if (inputPath.includes('\0') || baseDirectory.includes('\0')) {
|
|
379
|
+
return {
|
|
380
|
+
isValid: false,
|
|
381
|
+
error: 'Path contains null bytes',
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
// Normalize the base directory
|
|
385
|
+
const normalizedBase = path.normalize(baseDirectory);
|
|
386
|
+
// Resolve the input path relative to the base directory
|
|
387
|
+
let resolvedPath;
|
|
388
|
+
if (path.isAbsolute(inputPath)) {
|
|
389
|
+
resolvedPath = path.normalize(inputPath);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
resolvedPath = path.normalize(path.join(normalizedBase, inputPath));
|
|
393
|
+
}
|
|
394
|
+
// Check if the resolved path starts with the base directory
|
|
395
|
+
// Add trailing separator to prevent partial directory name matches
|
|
396
|
+
// e.g., /home/user matching /home/username
|
|
397
|
+
const baseWithSep = normalizedBase.endsWith(path.sep)
|
|
398
|
+
? normalizedBase
|
|
399
|
+
: normalizedBase + path.sep;
|
|
400
|
+
const resolvedWithSep = resolvedPath.endsWith(path.sep)
|
|
401
|
+
? resolvedPath
|
|
402
|
+
: resolvedPath + path.sep;
|
|
403
|
+
// The resolved path must either equal the base or be a subdirectory of it
|
|
404
|
+
const isWithinBase = resolvedPath === normalizedBase || resolvedWithSep.startsWith(baseWithSep);
|
|
405
|
+
if (!isWithinBase) {
|
|
406
|
+
return {
|
|
407
|
+
isValid: false,
|
|
408
|
+
error: 'Path traversal detected: path resolves outside the allowed directory',
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
// Check for common path traversal patterns in the original input
|
|
412
|
+
// This catches attempts that might not be caught by normalization alone
|
|
413
|
+
const traversalPatterns = [
|
|
414
|
+
/\.\.[\/\\]/, // ../
|
|
415
|
+
/[\/\\]\.\./, // /..
|
|
416
|
+
/^\.\.$/, // just ..
|
|
417
|
+
/%2e%2e/i, // URL encoded ..
|
|
418
|
+
/%252e%252e/i, // Double URL encoded ..
|
|
419
|
+
/\.%2e/i, // Mixed encoding
|
|
420
|
+
/%2e\./i, // Mixed encoding
|
|
421
|
+
];
|
|
422
|
+
for (const pattern of traversalPatterns) {
|
|
423
|
+
if (pattern.test(inputPath)) {
|
|
424
|
+
return {
|
|
425
|
+
isValid: false,
|
|
426
|
+
error: 'Path traversal pattern detected in input',
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// Note: Symlink checking should be done at the filesystem level
|
|
431
|
+
// when actually accessing the file, as the symlink might not exist yet
|
|
432
|
+
// or the check could be subject to TOCTOU (time-of-check-time-of-use) issues
|
|
433
|
+
return {
|
|
434
|
+
isValid: true,
|
|
435
|
+
normalizedPath: resolvedPath,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Validates a project path ensuring it is within allowed directories
|
|
440
|
+
* (user's home directory or explicitly allowed paths).
|
|
441
|
+
*
|
|
442
|
+
* @param projectPath - The project path to validate
|
|
443
|
+
* @param allowedBasePaths - Additional allowed base paths (default: [os.homedir()])
|
|
444
|
+
* @returns PathValidationResult with validation status
|
|
445
|
+
*
|
|
446
|
+
* @example
|
|
447
|
+
* ```typescript
|
|
448
|
+
* const result = validateProjectPath('/home/user/projects/myapp');
|
|
449
|
+
* // result.isValid === true
|
|
450
|
+
*
|
|
451
|
+
* const result2 = validateProjectPath('/etc/passwd');
|
|
452
|
+
* // result2.isValid === false
|
|
453
|
+
* ```
|
|
454
|
+
*/
|
|
455
|
+
export function validateProjectPath(projectPath, allowedBasePaths) {
|
|
456
|
+
// Default to home directory if no allowed paths specified
|
|
457
|
+
const basePaths = allowedBasePaths ?? [os.homedir()];
|
|
458
|
+
// Input validation
|
|
459
|
+
if (!projectPath || typeof projectPath !== 'string') {
|
|
460
|
+
return {
|
|
461
|
+
isValid: false,
|
|
462
|
+
error: 'Project path is required and must be a string',
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
// Check for null bytes
|
|
466
|
+
if (projectPath.includes('\0')) {
|
|
467
|
+
return {
|
|
468
|
+
isValid: false,
|
|
469
|
+
error: 'Path contains null bytes',
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
// Normalize the project path
|
|
473
|
+
const normalizedProjectPath = path.normalize(path.isAbsolute(projectPath) ? projectPath : path.resolve(projectPath));
|
|
474
|
+
// Check if the path is within any of the allowed base paths
|
|
475
|
+
for (const basePath of basePaths) {
|
|
476
|
+
const result = validatePath(normalizedProjectPath, basePath);
|
|
477
|
+
if (result.isValid) {
|
|
478
|
+
return {
|
|
479
|
+
isValid: true,
|
|
480
|
+
normalizedPath: result.normalizedPath,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
// Also allow the current working directory
|
|
485
|
+
const cwdResult = validatePath(normalizedProjectPath, process.cwd());
|
|
486
|
+
if (cwdResult.isValid) {
|
|
487
|
+
return {
|
|
488
|
+
isValid: true,
|
|
489
|
+
normalizedPath: cwdResult.normalizedPath,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
isValid: false,
|
|
494
|
+
error: 'Project path is outside allowed directories',
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Validates a session name to ensure it contains only safe characters.
|
|
499
|
+
*
|
|
500
|
+
* @param sessionName - The session name to validate
|
|
501
|
+
* @param options - Validation options
|
|
502
|
+
* @param options.maxLength - Maximum session name length (default: 100)
|
|
503
|
+
* @returns Object with isValid flag and optional error message
|
|
504
|
+
*
|
|
505
|
+
* @example
|
|
506
|
+
* ```typescript
|
|
507
|
+
* const result = validateSessionName('my-session_123');
|
|
508
|
+
* // result.isValid === true
|
|
509
|
+
*
|
|
510
|
+
* const result2 = validateSessionName('session; rm -rf /');
|
|
511
|
+
* // result2.isValid === false
|
|
512
|
+
* ```
|
|
513
|
+
*/
|
|
514
|
+
export function validateSessionName(sessionName, options = {}) {
|
|
515
|
+
const { maxLength = 100 } = options;
|
|
516
|
+
if (!sessionName || typeof sessionName !== 'string') {
|
|
517
|
+
return {
|
|
518
|
+
isValid: false,
|
|
519
|
+
error: 'Session name is required and must be a string',
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
if (sessionName.length > maxLength) {
|
|
523
|
+
return {
|
|
524
|
+
isValid: false,
|
|
525
|
+
error: `Session name exceeds maximum length of ${maxLength} characters`,
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
// Only allow alphanumeric characters, hyphens, and underscores
|
|
529
|
+
const validPattern = /^[a-zA-Z0-9_-]+$/;
|
|
530
|
+
if (!validPattern.test(sessionName)) {
|
|
531
|
+
return {
|
|
532
|
+
isValid: false,
|
|
533
|
+
error: 'Session name contains invalid characters. Only alphanumeric characters, hyphens, and underscores are allowed.',
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
return { isValid: true };
|
|
537
|
+
}
|
|
538
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../../backend/src/utils/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,15 @@ export declare class ChatGateway {
|
|
|
41
41
|
* legacy ChatService EventEmitter wiring.
|
|
42
42
|
*/
|
|
43
43
|
private setupChatV2Listeners;
|
|
44
|
+
/**
|
|
45
|
+
* Forward the events that only the legacy ChatService façade emits —
|
|
46
|
+
* `conversation_updated` (chat-v2 has no channel-touched event yet) and
|
|
47
|
+
* `chat_typing` — to WebSocket clients. `chat_message` is deliberately
|
|
48
|
+
* NOT forwarded from the façade: chat-v2 already emits it for every
|
|
49
|
+
* write (see {@link setupChatV2Listeners}), so forwarding both would
|
|
50
|
+
* double-broadcast.
|
|
51
|
+
*/
|
|
52
|
+
private setupChatServiceListeners;
|
|
44
53
|
/**
|
|
45
54
|
* Set up WebSocket event handlers for chat-specific events.
|
|
46
55
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.gateway.d.ts","sourceRoot":"","sources":["../../../../../backend/src/websocket/chat.gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,cAAc,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.gateway.d.ts","sourceRoot":"","sources":["../../../../../backend/src/websocket/chat.gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,cAAc,EAAU,MAAM,WAAW,CAAC;AAY7D,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EAGX,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,EAAE,EAAE,cAAc;IAM9B;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+D9B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;;;;;OAUG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAyC9B;;;;;;;;;;;;OAYG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAyC9B;;;;;;;OAOG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIvE;;;;;;OAMG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAevB;;;;OAIG;IACH,aAAa,IAAI,OAAO;CAGzB;AAQD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { getChatV2Service } from '../services/chat-v2/chat-v2.singleton.js';
|
|
10
10
|
import { SYSTEM_PRINCIPAL, v2MessageToLegacy, v2ChannelToLegacy, senderToV2, } from '../services/chat-v2/legacy-dto.utils.js';
|
|
11
|
+
import { getChatService } from '../services/chat/chat.service.js';
|
|
11
12
|
import { LoggerService } from '../services/core/logger.service.js';
|
|
12
13
|
/**
|
|
13
14
|
* Chat Gateway class for WebSocket-based chat messaging.
|
|
@@ -43,6 +44,7 @@ export class ChatGateway {
|
|
|
43
44
|
if (this.initialized)
|
|
44
45
|
return;
|
|
45
46
|
this.setupChatV2Listeners();
|
|
47
|
+
this.setupChatServiceListeners();
|
|
46
48
|
this.setupWebSocketHandlers();
|
|
47
49
|
this.initialized = true;
|
|
48
50
|
this.logger.info('ChatGateway initialized');
|
|
@@ -63,6 +65,30 @@ export class ChatGateway {
|
|
|
63
65
|
});
|
|
64
66
|
});
|
|
65
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Forward the events that only the legacy ChatService façade emits —
|
|
70
|
+
* `conversation_updated` (chat-v2 has no channel-touched event yet) and
|
|
71
|
+
* `chat_typing` — to WebSocket clients. `chat_message` is deliberately
|
|
72
|
+
* NOT forwarded from the façade: chat-v2 already emits it for every
|
|
73
|
+
* write (see {@link setupChatV2Listeners}), so forwarding both would
|
|
74
|
+
* double-broadcast.
|
|
75
|
+
*/
|
|
76
|
+
setupChatServiceListeners() {
|
|
77
|
+
const chatService = getChatService();
|
|
78
|
+
chatService.on('conversation_updated', (event) => {
|
|
79
|
+
this.logger.debug('Broadcasting conversation_updated', {
|
|
80
|
+
conversationId: event.data.id,
|
|
81
|
+
});
|
|
82
|
+
this.broadcast('conversation_updated', {
|
|
83
|
+
type: 'conversation_updated',
|
|
84
|
+
data: event.data,
|
|
85
|
+
timestamp: new Date().toISOString(),
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
chatService.on('chat_typing', (event) => {
|
|
89
|
+
this.broadcastTyping(event.data.conversationId, event.data.sender, event.data.isTyping);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
66
92
|
/**
|
|
67
93
|
* Set up WebSocket event handlers for chat-specific events.
|
|
68
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.gateway.js","sourceRoot":"","sources":["../../../../../backend/src/websocket/chat.gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GACX,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,aAAa,EAAmB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.gateway.js","sourceRoot":"","sources":["../../../../../backend/src/websocket/chat.gateway.ts"],"names":[],"mappings":"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"}
|