crewly 1.6.0 → 1.6.2
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/orchestrator/fragments/role-boundary.md +4 -1
- package/config/roles/orchestrator/prompt.md +53 -0
- package/config/roles/orchestrator/soul.md +47 -10
- package/config/skills/_common/lib.sh +28 -0
- package/config/skills/agent/core/cancel-followup/execute.sh +0 -19
- package/config/skills/agent/core/get-my-active-work/SKILL.md +101 -0
- package/config/skills/agent/core/get-my-active-work/execute.sh +122 -0
- package/config/skills/agent/core/list-my-followups/execute.sh +0 -19
- package/config/skills/agent/core/record-learning/SKILL.md +29 -0
- package/config/skills/agent/core/reply-channel/SKILL.md +41 -0
- package/config/skills/agent/core/reply-channel/execute.sh +165 -0
- package/config/skills/agent/core/reply-channel/execute.test.sh +148 -0
- package/config/skills/agent/core/schedule-followup/execute.sh +0 -19
- package/config/skills/agent/core/watch-for-event/execute.sh +0 -19
- package/config/skills/agent/remote-browser/execute.sh +296 -14
- package/config/skills/agent/remote-browser/execute.test.sh +482 -0
- package/config/skills/orchestrator/credential-manager/execute.test.sh +88 -0
- package/config/skills/orchestrator/send-message/SKILL.md +30 -7
- package/config/skills/orchestrator/team-health-scan/SKILL.md +98 -0
- package/config/skills/orchestrator/team-health-scan/execute.sh +44 -0
- package/config/skills/registry.json +62 -1
- package/config/sops/developer/git-workflow.md +38 -3
- package/dist/backend/backend/src/config/oauth.config.d.ts +33 -0
- package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -0
- package/dist/backend/backend/src/config/oauth.config.js +45 -0
- package/dist/backend/backend/src/config/oauth.config.js.map +1 -0
- package/dist/backend/backend/src/constants.d.ts +69 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +69 -2
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts +53 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +92 -0
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +18 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +68 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +233 -5
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +10 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.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 +8 -3
- 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 +132 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +401 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +29 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +39 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.d.ts +8 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.js +8 -0
- package/dist/backend/backend/src/controllers/chat-v2/index.js.map +1 -0
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts +0 -26
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.js +47 -184
- package/dist/backend/backend/src/controllers/credentials/credentials.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.js +2 -1
- package/dist/backend/backend/src/controllers/credentials/credentials.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts +40 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +162 -0
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +13 -13
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +74 -234
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.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 +4 -6
- package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/skill/skill.controller.js +1 -0
- package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +43 -0
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +200 -72
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +46 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts +59 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.js +127 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts +13 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.js +20 -0
- package/dist/backend/backend/src/controllers/team-health/team-health.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +9 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +256 -4
- 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 +43 -6
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +498 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +759 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +25 -0
- 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 +193 -57
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +9 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +35 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +8 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js +2 -1
- package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js +2 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +148 -3
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +241 -2
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +30 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.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 +17 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +161 -0
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +382 -2
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +105 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +232 -13
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +178 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +254 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts +25 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js +23 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +254 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +467 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts +43 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js +54 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/config.d.ts +100 -0
- package/dist/backend/backend/src/services/chat-v2/config.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/config.js +174 -0
- package/dist/backend/backend/src/services/chat-v2/config.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/index.d.ts +11 -0
- package/dist/backend/backend/src/services/chat-v2/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/index.js +12 -0
- package/dist/backend/backend/src/services/chat-v2/index.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +114 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +194 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +100 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +351 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +132 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +281 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +295 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/types.js +61 -0
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +113 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +179 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +131 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +227 -0
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/config.service.js +3 -3
- package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +15 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +69 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +118 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +275 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +736 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -2
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +123 -29
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.js +304 -0
- package/dist/backend/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +24 -4
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.d.ts +46 -2
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +216 -211
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +254 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +285 -0
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +174 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +375 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +19 -4
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts +16 -5
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js +32 -5
- package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +157 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js +229 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +141 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.js +18 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.types.js.map +1 -0
- package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js +1 -1
- package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/task.service.js +5 -0
- package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +41 -0
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.js +136 -7
- package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +17 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +39 -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 +158 -26
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +248 -6
- 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 +531 -51
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/team-health/index.d.ts +16 -0
- package/dist/backend/backend/src/services/team-health/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/index.js +16 -0
- package/dist/backend/backend/src/services/team-health/index.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts +52 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js +161 -0
- package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts +53 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js +88 -0
- package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts +44 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js +83 -0
- package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts +92 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.js +328 -0
- package/dist/backend/backend/src/services/team-health/team-health-alert-router.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.d.ts +41 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.js +213 -0
- package/dist/backend/backend/src/services/team-health/team-health-config.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts +46 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.js +347 -0
- package/dist/backend/backend/src/services/team-health/team-health-detector.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.d.ts +154 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.js +94 -0
- package/dist/backend/backend/src/services/team-health/team-health-types.js.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts +111 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js +226 -0
- package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +148 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +545 -0
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +499 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +1105 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts +22 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +71 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +1 -0
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.js +22 -6
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +19 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +43 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +22 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/review-reason.types.d.ts +63 -0
- package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/review-reason.types.js +50 -0
- package/dist/backend/backend/src/types/review-reason.types.js.map +1 -0
- package/dist/backend/backend/src/types/skill.types.d.ts +9 -0
- package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/skill.types.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +4 -1
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +18 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +1 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- 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 +25 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts +41 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.js +44 -0
- package/dist/backend/backend/src/utils/google-userinfo.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/team.utils.d.ts +38 -0
- package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/team.utils.js +45 -0
- package/dist/backend/backend/src/utils/team.utils.js.map +1 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +195 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js +401 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -0
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +37 -2
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +106 -5
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.d.ts +33 -0
- package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -0
- package/dist/cli/backend/src/config/oauth.config.js +45 -0
- package/dist/cli/backend/src/config/oauth.config.js.map +1 -0
- package/dist/cli/backend/src/constants.d.ts +69 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +69 -2
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/core/config.service.js +3 -3
- package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +15 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -2
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +123 -29
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +24 -4
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.d.ts +46 -2
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +216 -211
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +254 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +285 -0
- package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -0
- package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts +18 -0
- package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/skill/skill-executor.service.js +7 -9
- package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +22 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/skill.types.d.ts +9 -0
- package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/skill.types.js.map +1 -1
- 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 +25 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts +41 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.js +44 -0
- package/dist/cli/backend/src/utils/google-userinfo.utils.js.map +1 -0
- package/frontend/dist/assets/{index-9e6d97d1.js → index-7a4e7df5.js} +328 -326
- package/frontend/dist/assets/index-b7e59b2b.css +33 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -1
- package/config/skills/orchestrator/recall/SKILL.md +0 -47
- package/config/skills/orchestrator/recall/execute.sh +0 -13
- package/config/skills/orchestrator/record-learning/SKILL.md +0 -47
- package/config/skills/orchestrator/record-learning/execute.sh +0 -13
- package/config/skills/orchestrator/remember/SKILL.md +0 -55
- package/config/skills/orchestrator/remember/execute.sh +0 -15
- package/frontend/dist/assets/index-6aaa0630.css +0 -33
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSS team-membership validator for `ChatV2Service.validateTeamMembership`.
|
|
3
|
+
*
|
|
4
|
+
* Phase C F2b (issue #333) — outer-ring tenant defense for type='channel'
|
|
5
|
+
* channel creation. The chat service's optional `validateTeamMembership`
|
|
6
|
+
* dependency is invoked when a caller binds a channel to a `teamId`; if
|
|
7
|
+
* the principal is not authorized for that team, the service throws
|
|
8
|
+
* `forbidden_team` (HTTP 403) before persisting the row.
|
|
9
|
+
*
|
|
10
|
+
* In OSS single-user mode there is no per-user tenant binding — the
|
|
11
|
+
* single user owns every team in their workspace. The right semantic is
|
|
12
|
+
* therefore "the team must exist" (you cannot bind a channel to a team
|
|
13
|
+
* id you fabricated). Cloud Portal Phase E swaps in a tenant-aware
|
|
14
|
+
* validator that checks the user's tenant membership against the team's
|
|
15
|
+
* tenant.
|
|
16
|
+
*
|
|
17
|
+
* Implementation: `existsSync` of `<teamsDir>/<teamId>/config.json`. Sync
|
|
18
|
+
* by design — `ChatV2Service.createChannel` runs inside the synchronous
|
|
19
|
+
* `runHandler` controller wrapper. Async refactors are a Phase E concern.
|
|
20
|
+
*
|
|
21
|
+
* @module services/chat-v2/chat-v2.team-membership
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync } from 'fs';
|
|
24
|
+
import * as path from 'path';
|
|
25
|
+
import { StorageService } from '../core/storage.service.js';
|
|
26
|
+
/**
|
|
27
|
+
* Build the OSS validator. Captures the StorageService instance lazily so
|
|
28
|
+
* the singleton resolves correctly even when `getInstance()` lands later
|
|
29
|
+
* in module-init order (matches the existing `loadTeams` injection
|
|
30
|
+
* pattern in chat-v2 wiring).
|
|
31
|
+
*
|
|
32
|
+
* @param deps - Optional dependency overrides for tests.
|
|
33
|
+
* @returns A sync validator suitable for `ChatV2ServiceOptions.validateTeamMembership`.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* const validator = createOssTeamMembershipValidator();
|
|
37
|
+
* const service = getChatV2Service({ validateTeamMembership: validator });
|
|
38
|
+
*/
|
|
39
|
+
export function createOssTeamMembershipValidator(deps = {}) {
|
|
40
|
+
const getTeamDir = deps.getTeamDir ??
|
|
41
|
+
((teamId) => StorageService.getInstance().getTeamDir(teamId));
|
|
42
|
+
const fileExists = deps.fileExists ?? existsSync;
|
|
43
|
+
return (_principal, teamId) => {
|
|
44
|
+
// Defensive: a blank teamId never points to a real team. The service
|
|
45
|
+
// already rejects with VALIDATION before reaching the validator, so
|
|
46
|
+
// this is belt-and-suspenders.
|
|
47
|
+
if (typeof teamId !== 'string' || teamId.trim().length === 0) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const configPath = path.join(getTeamDir(teamId), 'config.json');
|
|
51
|
+
return fileExists(configPath);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=chat-v2.team-membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-v2.team-membership.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.team-membership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAKI,EAAE;IAEN,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;QACf,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;IAEjD,OAAO,CAAC,UAAyB,EAAE,MAAc,EAAW,EAAE;QAC5D,qEAAqE;QACrE,oEAAoE;QACpE,+BAA+B;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat V2 — Configuration constants.
|
|
3
|
+
*
|
|
4
|
+
* Loads Phase 1 defaults (from spec §15) and honors
|
|
5
|
+
* `CREWLY_CHAT_*` environment overrides. Pure functions;
|
|
6
|
+
* no disk I/O here.
|
|
7
|
+
*
|
|
8
|
+
* @module services/chat-v2/config
|
|
9
|
+
*/
|
|
10
|
+
/** Full Chat V2 runtime config. All durations in ms, sizes in bytes. */
|
|
11
|
+
export interface ChatV2Config {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
/** Hard cap on message body size in UTF-8 bytes after NFC normalization. */
|
|
14
|
+
maxMessageBytes: number;
|
|
15
|
+
maxAttachmentBytes: number;
|
|
16
|
+
maxAttachmentsPerMessage: number;
|
|
17
|
+
allowedAttachmentMimes: readonly string[];
|
|
18
|
+
/** Max chars on channel name (validated at controller). */
|
|
19
|
+
maxChannelNameChars: number;
|
|
20
|
+
/** Max chars on optional channel purpose. */
|
|
21
|
+
maxPurposeChars: number;
|
|
22
|
+
/** Max bytes in message metadata JSON blob. */
|
|
23
|
+
maxMetadataBytes: number;
|
|
24
|
+
rateLimits: {
|
|
25
|
+
messagesPerSec: number;
|
|
26
|
+
messagesPerMin: number;
|
|
27
|
+
uploadsPerSec: number;
|
|
28
|
+
uploadsPerMin: number;
|
|
29
|
+
wsFramesPerSec: number;
|
|
30
|
+
};
|
|
31
|
+
websocket: {
|
|
32
|
+
heartbeatIntervalMs: number;
|
|
33
|
+
idleTimeoutMs: number;
|
|
34
|
+
pongTimeoutMs: number;
|
|
35
|
+
replayCap: number;
|
|
36
|
+
maxFrameBytes: number;
|
|
37
|
+
};
|
|
38
|
+
offlineQueue: {
|
|
39
|
+
maxPendingPerAgent: number;
|
|
40
|
+
maxAgeMs: number;
|
|
41
|
+
drainBatchSize: number;
|
|
42
|
+
drainPauseMs: number;
|
|
43
|
+
};
|
|
44
|
+
presence: {
|
|
45
|
+
pollIntervalMs: number;
|
|
46
|
+
};
|
|
47
|
+
portal: {
|
|
48
|
+
/** Name of the env var holding the Cloud-OSS shared service token. */
|
|
49
|
+
sharedSecretEnv: string;
|
|
50
|
+
};
|
|
51
|
+
storage: {
|
|
52
|
+
dbPath: string;
|
|
53
|
+
attachmentsDir: string;
|
|
54
|
+
uploadsStagingDir: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a path containing a leading `~` or `~/` to the user's home directory.
|
|
59
|
+
*
|
|
60
|
+
* @param input - Path possibly prefixed with `~` or `~/`
|
|
61
|
+
* @returns Absolute path with `~` expanded
|
|
62
|
+
*/
|
|
63
|
+
export declare function expandHomePath(input: string): string;
|
|
64
|
+
/** Phase 1 defaults — source of truth is the tech spec §15. */
|
|
65
|
+
export declare const CHAT_V2_DEFAULTS: ChatV2Config;
|
|
66
|
+
/**
|
|
67
|
+
* Parse a positive integer from an env-string, falling back to a default.
|
|
68
|
+
*
|
|
69
|
+
* @param raw - Raw env-var value or undefined
|
|
70
|
+
* @param fallback - Default if raw is missing/invalid/non-positive
|
|
71
|
+
* @returns The parsed positive integer
|
|
72
|
+
*/
|
|
73
|
+
export declare function parsePositiveInt(raw: string | undefined, fallback: number): number;
|
|
74
|
+
/**
|
|
75
|
+
* Parse a boolean env-var supporting `true`/`false`/`1`/`0` (case-insensitive).
|
|
76
|
+
*
|
|
77
|
+
* @param raw - Raw env-var value or undefined
|
|
78
|
+
* @param fallback - Default if raw is missing
|
|
79
|
+
* @returns The parsed boolean
|
|
80
|
+
*/
|
|
81
|
+
export declare function parseBoolean(raw: string | undefined, fallback: boolean): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Build a fully-resolved config from defaults + environment overrides.
|
|
84
|
+
*
|
|
85
|
+
* Env vars honored (all optional):
|
|
86
|
+
* - `CREWLY_CHAT_ENABLED` — master switch
|
|
87
|
+
* - `CREWLY_CHAT_MAX_MESSAGE_BYTES` — per-message byte cap
|
|
88
|
+
* - `CREWLY_CHAT_MAX_ATTACHMENT_BYTES` — per-attachment byte cap
|
|
89
|
+
* - `CREWLY_CHAT_WS_HEARTBEAT_MS` — client-ping interval
|
|
90
|
+
* - `CREWLY_CHAT_WS_IDLE_TIMEOUT_MS` — server idle close
|
|
91
|
+
* - `CREWLY_CHAT_DB_PATH` — SQLite DB path (expands `~`)
|
|
92
|
+
* - `CREWLY_CHAT_ATTACHMENTS_DIR` — committed attachment dir (expands `~`)
|
|
93
|
+
* - `CREWLY_CHAT_UPLOADS_STAGING_DIR` — pre-commit upload dir (expands `~`)
|
|
94
|
+
* - `CREWLY_HOME` — when set and DB/path env vars are not, rebases storage under this dir
|
|
95
|
+
*
|
|
96
|
+
* @param env - The environment object to read from (defaults to `process.env`)
|
|
97
|
+
* @returns A fully-resolved, immutable ChatV2Config
|
|
98
|
+
*/
|
|
99
|
+
export declare function loadChatV2Config(env?: NodeJS.ProcessEnv): ChatV2Config;
|
|
100
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,2DAA2D;IAC3D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,YAAY,EAAE;QACZ,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,MAAM,EAAE;QACN,sEAAsE;QACtE,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,YA6Cb,CAAC;AAMnB;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAMhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CA6DnF"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat V2 — Configuration constants.
|
|
3
|
+
*
|
|
4
|
+
* Loads Phase 1 defaults (from spec §15) and honors
|
|
5
|
+
* `CREWLY_CHAT_*` environment overrides. Pure functions;
|
|
6
|
+
* no disk I/O here.
|
|
7
|
+
*
|
|
8
|
+
* @module services/chat-v2/config
|
|
9
|
+
*/
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Defaults (spec §15)
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a path containing a leading `~` or `~/` to the user's home directory.
|
|
17
|
+
*
|
|
18
|
+
* @param input - Path possibly prefixed with `~` or `~/`
|
|
19
|
+
* @returns Absolute path with `~` expanded
|
|
20
|
+
*/
|
|
21
|
+
export function expandHomePath(input) {
|
|
22
|
+
if (input === '~')
|
|
23
|
+
return os.homedir();
|
|
24
|
+
if (input.startsWith('~/'))
|
|
25
|
+
return path.join(os.homedir(), input.slice(2));
|
|
26
|
+
return input;
|
|
27
|
+
}
|
|
28
|
+
/** Phase 1 defaults — source of truth is the tech spec §15. */
|
|
29
|
+
export const CHAT_V2_DEFAULTS = Object.freeze({
|
|
30
|
+
enabled: true,
|
|
31
|
+
maxMessageBytes: 32768,
|
|
32
|
+
maxAttachmentBytes: 10 * 1024 * 1024,
|
|
33
|
+
maxAttachmentsPerMessage: 4,
|
|
34
|
+
allowedAttachmentMimes: Object.freeze([
|
|
35
|
+
'image/png',
|
|
36
|
+
'image/jpeg',
|
|
37
|
+
'image/gif',
|
|
38
|
+
'image/webp',
|
|
39
|
+
]),
|
|
40
|
+
maxChannelNameChars: 128,
|
|
41
|
+
maxPurposeChars: 512,
|
|
42
|
+
maxMetadataBytes: 2048,
|
|
43
|
+
rateLimits: Object.freeze({
|
|
44
|
+
messagesPerSec: 10,
|
|
45
|
+
messagesPerMin: 60,
|
|
46
|
+
uploadsPerSec: 3,
|
|
47
|
+
uploadsPerMin: 20,
|
|
48
|
+
wsFramesPerSec: 20,
|
|
49
|
+
}),
|
|
50
|
+
websocket: Object.freeze({
|
|
51
|
+
heartbeatIntervalMs: 30000,
|
|
52
|
+
idleTimeoutMs: 60000,
|
|
53
|
+
pongTimeoutMs: 5000,
|
|
54
|
+
replayCap: 200,
|
|
55
|
+
maxFrameBytes: 65536,
|
|
56
|
+
}),
|
|
57
|
+
offlineQueue: Object.freeze({
|
|
58
|
+
maxPendingPerAgent: 100,
|
|
59
|
+
maxAgeMs: 24 * 60 * 60 * 1000,
|
|
60
|
+
drainBatchSize: 50,
|
|
61
|
+
drainPauseMs: 2000,
|
|
62
|
+
}),
|
|
63
|
+
presence: Object.freeze({
|
|
64
|
+
pollIntervalMs: 10000,
|
|
65
|
+
}),
|
|
66
|
+
portal: Object.freeze({
|
|
67
|
+
sharedSecretEnv: 'CREWLY_CLOUD_OSS_SERVICE_TOKEN',
|
|
68
|
+
}),
|
|
69
|
+
storage: Object.freeze({
|
|
70
|
+
dbPath: '~/.crewly/chat.db',
|
|
71
|
+
attachmentsDir: '~/.crewly/chat-attachments',
|
|
72
|
+
uploadsStagingDir: '~/.crewly/chat-uploads-staging',
|
|
73
|
+
}),
|
|
74
|
+
});
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Env-override loader
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
/**
|
|
79
|
+
* Parse a positive integer from an env-string, falling back to a default.
|
|
80
|
+
*
|
|
81
|
+
* @param raw - Raw env-var value or undefined
|
|
82
|
+
* @param fallback - Default if raw is missing/invalid/non-positive
|
|
83
|
+
* @returns The parsed positive integer
|
|
84
|
+
*/
|
|
85
|
+
export function parsePositiveInt(raw, fallback) {
|
|
86
|
+
if (raw === undefined || raw === '')
|
|
87
|
+
return fallback;
|
|
88
|
+
const n = Number.parseInt(raw, 10);
|
|
89
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
90
|
+
return fallback;
|
|
91
|
+
return n;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parse a boolean env-var supporting `true`/`false`/`1`/`0` (case-insensitive).
|
|
95
|
+
*
|
|
96
|
+
* @param raw - Raw env-var value or undefined
|
|
97
|
+
* @param fallback - Default if raw is missing
|
|
98
|
+
* @returns The parsed boolean
|
|
99
|
+
*/
|
|
100
|
+
export function parseBoolean(raw, fallback) {
|
|
101
|
+
if (raw === undefined)
|
|
102
|
+
return fallback;
|
|
103
|
+
const trimmed = raw.trim().toLowerCase();
|
|
104
|
+
if (trimmed === 'true' || trimmed === '1')
|
|
105
|
+
return true;
|
|
106
|
+
if (trimmed === 'false' || trimmed === '0')
|
|
107
|
+
return false;
|
|
108
|
+
return fallback;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Build a fully-resolved config from defaults + environment overrides.
|
|
112
|
+
*
|
|
113
|
+
* Env vars honored (all optional):
|
|
114
|
+
* - `CREWLY_CHAT_ENABLED` — master switch
|
|
115
|
+
* - `CREWLY_CHAT_MAX_MESSAGE_BYTES` — per-message byte cap
|
|
116
|
+
* - `CREWLY_CHAT_MAX_ATTACHMENT_BYTES` — per-attachment byte cap
|
|
117
|
+
* - `CREWLY_CHAT_WS_HEARTBEAT_MS` — client-ping interval
|
|
118
|
+
* - `CREWLY_CHAT_WS_IDLE_TIMEOUT_MS` — server idle close
|
|
119
|
+
* - `CREWLY_CHAT_DB_PATH` — SQLite DB path (expands `~`)
|
|
120
|
+
* - `CREWLY_CHAT_ATTACHMENTS_DIR` — committed attachment dir (expands `~`)
|
|
121
|
+
* - `CREWLY_CHAT_UPLOADS_STAGING_DIR` — pre-commit upload dir (expands `~`)
|
|
122
|
+
* - `CREWLY_HOME` — when set and DB/path env vars are not, rebases storage under this dir
|
|
123
|
+
*
|
|
124
|
+
* @param env - The environment object to read from (defaults to `process.env`)
|
|
125
|
+
* @returns A fully-resolved, immutable ChatV2Config
|
|
126
|
+
*/
|
|
127
|
+
export function loadChatV2Config(env = process.env) {
|
|
128
|
+
const defaults = CHAT_V2_DEFAULTS;
|
|
129
|
+
// Optionally rebase storage paths under CREWLY_HOME when explicit storage envs are absent.
|
|
130
|
+
const crewlyHome = env['CREWLY_HOME'];
|
|
131
|
+
const crewlyHomeResolved = crewlyHome ? expandHomePath(crewlyHome) : null;
|
|
132
|
+
const rebase = (defaultRelative) => {
|
|
133
|
+
// `defaults.storage.*` are `~/.crewly/...` style; strip `~/.crewly/` → relative.
|
|
134
|
+
if (!crewlyHomeResolved)
|
|
135
|
+
return expandHomePath(defaultRelative);
|
|
136
|
+
const marker = '~/.crewly/';
|
|
137
|
+
if (defaultRelative.startsWith(marker)) {
|
|
138
|
+
return path.join(crewlyHomeResolved, defaultRelative.slice(marker.length));
|
|
139
|
+
}
|
|
140
|
+
return expandHomePath(defaultRelative);
|
|
141
|
+
};
|
|
142
|
+
const dbPathEnv = env['CREWLY_CHAT_DB_PATH'];
|
|
143
|
+
const attachmentsDirEnv = env['CREWLY_CHAT_ATTACHMENTS_DIR'];
|
|
144
|
+
const stagingDirEnv = env['CREWLY_CHAT_UPLOADS_STAGING_DIR'];
|
|
145
|
+
return Object.freeze({
|
|
146
|
+
enabled: parseBoolean(env['CREWLY_CHAT_ENABLED'], defaults.enabled),
|
|
147
|
+
maxMessageBytes: parsePositiveInt(env['CREWLY_CHAT_MAX_MESSAGE_BYTES'], defaults.maxMessageBytes),
|
|
148
|
+
maxAttachmentBytes: parsePositiveInt(env['CREWLY_CHAT_MAX_ATTACHMENT_BYTES'], defaults.maxAttachmentBytes),
|
|
149
|
+
maxAttachmentsPerMessage: defaults.maxAttachmentsPerMessage,
|
|
150
|
+
allowedAttachmentMimes: defaults.allowedAttachmentMimes,
|
|
151
|
+
maxChannelNameChars: defaults.maxChannelNameChars,
|
|
152
|
+
maxPurposeChars: defaults.maxPurposeChars,
|
|
153
|
+
maxMetadataBytes: defaults.maxMetadataBytes,
|
|
154
|
+
rateLimits: defaults.rateLimits,
|
|
155
|
+
websocket: Object.freeze({
|
|
156
|
+
...defaults.websocket,
|
|
157
|
+
heartbeatIntervalMs: parsePositiveInt(env['CREWLY_CHAT_WS_HEARTBEAT_MS'], defaults.websocket.heartbeatIntervalMs),
|
|
158
|
+
idleTimeoutMs: parsePositiveInt(env['CREWLY_CHAT_WS_IDLE_TIMEOUT_MS'], defaults.websocket.idleTimeoutMs),
|
|
159
|
+
}),
|
|
160
|
+
offlineQueue: defaults.offlineQueue,
|
|
161
|
+
presence: defaults.presence,
|
|
162
|
+
portal: defaults.portal,
|
|
163
|
+
storage: Object.freeze({
|
|
164
|
+
dbPath: dbPathEnv ? expandHomePath(dbPathEnv) : rebase(defaults.storage.dbPath),
|
|
165
|
+
attachmentsDir: attachmentsDirEnv
|
|
166
|
+
? expandHomePath(attachmentsDirEnv)
|
|
167
|
+
: rebase(defaults.storage.attachmentsDir),
|
|
168
|
+
uploadsStagingDir: stagingDirEnv
|
|
169
|
+
? expandHomePath(stagingDirEnv)
|
|
170
|
+
: rebase(defaults.storage.uploadsStagingDir),
|
|
171
|
+
}),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat V2 service module barrel.
|
|
3
|
+
*
|
|
4
|
+
* @module services/chat-v2
|
|
5
|
+
*/
|
|
6
|
+
export { ChatV2Service, type ChatV2ServiceOptions } from './chat-v2.service.js';
|
|
7
|
+
export { loadChatV2Config, CHAT_V2_DEFAULTS, type ChatV2Config } from './config.js';
|
|
8
|
+
export { openChatDatabase, type ChatDatabase } from './sqlite/chat-db.js';
|
|
9
|
+
export { CHAT_ERROR_CODES, CHAT_CONTENT_TYPES, CHAT_SENDER_TYPES, ChatError, type ChatChannelDTO, type ChatMessageDTO, type ChatAttachmentDTO, type ChatPrincipal, type ChatContentType, type ChatSenderType, type ChatAgentPresenceStatus, type ChatErrorCode, } from './types.js';
|
|
10
|
+
export { ChatV2MentionResolver, type MentionTarget, type MentionTargetKind, type MentionResolverContext, type MentionResolverDeps, } from './chat-v2.mention-resolver.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat V2 service module barrel.
|
|
3
|
+
*
|
|
4
|
+
* @module services/chat-v2
|
|
5
|
+
*/
|
|
6
|
+
export { ChatV2Service } from './chat-v2.service.js';
|
|
7
|
+
export { loadChatV2Config, CHAT_V2_DEFAULTS } from './config.js';
|
|
8
|
+
export { openChatDatabase } from './sqlite/chat-db.js';
|
|
9
|
+
export { CHAT_ERROR_CODES, CHAT_CONTENT_TYPES, CHAT_SENDER_TYPES, ChatError, } from './types.js';
|
|
10
|
+
// Phase C BE.2 — mention dispatch routing scaffolding.
|
|
11
|
+
export { ChatV2MentionResolver, } from './chat-v2.mention-resolver.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAA6B,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GASV,MAAM,YAAY,CAAC;AACpB,uDAAuD;AACvD,OAAO,EACL,qBAAqB,GAKtB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChannelStore — CRUD for `chat_channels`.
|
|
3
|
+
*
|
|
4
|
+
* All authorization is handled at a higher layer (`ChatV2Service`);
|
|
5
|
+
* this store only enforces DB-level invariants (FKs, unique indexes).
|
|
6
|
+
*
|
|
7
|
+
* @module services/chat-v2/sqlite/channel.store
|
|
8
|
+
*/
|
|
9
|
+
import { type ChatChannelRow, type ChatChannelType } from '../types.js';
|
|
10
|
+
import type { ChatDatabase } from './chat-db.js';
|
|
11
|
+
/** Payload for `ChannelStore.create`. */
|
|
12
|
+
export interface ChannelCreateInput {
|
|
13
|
+
/**
|
|
14
|
+
* Wire-level session binding. For `type='dm'` (default), this is the
|
|
15
|
+
* agent's session ID and the partial unique index enforces 1:1 binding.
|
|
16
|
+
* For `type='channel'`, callers should pass the empty string `''` —
|
|
17
|
+
* channel rows are excluded from the dm-binding unique index by design.
|
|
18
|
+
*/
|
|
19
|
+
agentSession: string;
|
|
20
|
+
ownerUserId: string;
|
|
21
|
+
name: string;
|
|
22
|
+
purpose?: string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Phase A (SEALED §3.1) — channel type. Defaults to `'dm'` to preserve
|
|
25
|
+
* the Phase 1 / Week 2 contract for callers that omit this field.
|
|
26
|
+
*/
|
|
27
|
+
type?: ChatChannelType;
|
|
28
|
+
/** Phase A — required when `type='channel'`; null/empty for DMs. */
|
|
29
|
+
teamId?: string | null;
|
|
30
|
+
/** Phase A — optional project link for project-scoped channels. */
|
|
31
|
+
projectId?: string | null;
|
|
32
|
+
/** Phase A — for `type='dm'`, the resolved member-ID being DM'd. */
|
|
33
|
+
targetMemberId?: string | null;
|
|
34
|
+
/** Override the clock (tests). */
|
|
35
|
+
nowMs?: number;
|
|
36
|
+
/** Override the generated id (tests / deterministic callers). */
|
|
37
|
+
id?: string;
|
|
38
|
+
}
|
|
39
|
+
/** SQLite-backed store for chat channels. */
|
|
40
|
+
export declare class ChannelStore {
|
|
41
|
+
private readonly db;
|
|
42
|
+
constructor(db: ChatDatabase);
|
|
43
|
+
/**
|
|
44
|
+
* Create a new channel. Enforces the 1:1 agent-binding by catching
|
|
45
|
+
* the SQLite unique-constraint error and surfacing it as a
|
|
46
|
+
* `ChatError(agent_already_bound, 409)`.
|
|
47
|
+
*
|
|
48
|
+
* @param input - The channel creation payload
|
|
49
|
+
* @returns The inserted channel row
|
|
50
|
+
* @throws {ChatError} `agent_already_bound` (409) if the agent is already bound
|
|
51
|
+
* to another active channel.
|
|
52
|
+
*/
|
|
53
|
+
create(input: ChannelCreateInput): ChatChannelRow;
|
|
54
|
+
/**
|
|
55
|
+
* Look up a channel by its id (active or archived).
|
|
56
|
+
*
|
|
57
|
+
* @param id - The channel id
|
|
58
|
+
* @returns The row, or null if not found
|
|
59
|
+
*/
|
|
60
|
+
getById(id: string): ChatChannelRow | null;
|
|
61
|
+
/**
|
|
62
|
+
* Find the single active channel bound to an agent session, if any.
|
|
63
|
+
* Uses the partial unique index, so at most one row is returned.
|
|
64
|
+
*
|
|
65
|
+
* @param agentSession - The agent session id
|
|
66
|
+
* @returns The active channel row, or null
|
|
67
|
+
*/
|
|
68
|
+
findActiveByAgentSession(agentSession: string): ChatChannelRow | null;
|
|
69
|
+
/**
|
|
70
|
+
* List channels owned by a user.
|
|
71
|
+
*
|
|
72
|
+
* Phase C — extended with `type` + `teamId` filter options so the
|
|
73
|
+
* `GET /api/chat/channels` endpoint can serve the channel-rail's
|
|
74
|
+
* grouped/workspace-scoped views without shipping every row to the
|
|
75
|
+
* client. Filters compose with AND; passing `undefined` for either is
|
|
76
|
+
* a no-op (the existing all-channels behavior).
|
|
77
|
+
*
|
|
78
|
+
* @param ownerUserId - The user_id whose channels to return
|
|
79
|
+
* @param options - Listing options
|
|
80
|
+
* @param options.includeArchived - When false (default), filter out archived rows
|
|
81
|
+
* @param options.limit - Max rows to return (capped at 100)
|
|
82
|
+
* @param options.type - Phase C: when set, filter rows to this channel type
|
|
83
|
+
* (`'dm'` or `'channel'`). Useful for the channel-rail's "DMs only" /
|
|
84
|
+
* "Channels only" views.
|
|
85
|
+
* @param options.teamId - Phase C: when set, filter rows whose `team_id`
|
|
86
|
+
* matches. Used by the workspace-scoped Channels group; empty / null
|
|
87
|
+
* `team_id` rows are excluded by this filter on purpose (DMs and
|
|
88
|
+
* workspace-less rows belong to no team).
|
|
89
|
+
* @returns Channel rows sorted by `last_message_at DESC, created_at DESC`
|
|
90
|
+
*/
|
|
91
|
+
listByOwner(ownerUserId: string, options?: {
|
|
92
|
+
includeArchived?: boolean;
|
|
93
|
+
limit?: number;
|
|
94
|
+
type?: ChatChannelType;
|
|
95
|
+
teamId?: string;
|
|
96
|
+
}): ChatChannelRow[];
|
|
97
|
+
/**
|
|
98
|
+
* Mark a channel as archived (soft-delete). No-op if already archived.
|
|
99
|
+
*
|
|
100
|
+
* @param id - The channel id
|
|
101
|
+
* @param nowMs - Optional override for the archive timestamp
|
|
102
|
+
* @returns True if a row was updated (was active), false otherwise
|
|
103
|
+
*/
|
|
104
|
+
archive(id: string, nowMs?: number): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Bump `last_message_at` to a provided timestamp if it is greater than
|
|
107
|
+
* the current value. Safe to call many times.
|
|
108
|
+
*
|
|
109
|
+
* @param id - The channel id
|
|
110
|
+
* @param timestampMs - The timestamp to record
|
|
111
|
+
*/
|
|
112
|
+
touchLastMessageAt(id: string, timestampMs: number): void;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=channel.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.store.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/chat-v2/sqlite/channel.store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAqBjD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD,6CAA6C;AAC7C,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE7C;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc;IA6DjD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAW1C;;;;;;OAMG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAgBrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,eAAe,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,cAAc,EAAE;IAgCnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAW5C;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAU1D"}
|