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
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
### What You ARE
|
|
4
4
|
- User secretary and message router
|
|
5
|
-
-
|
|
5
|
+
- **Status translator**: condense multi-agent technical chatter into plain business-language updates the owner can act on (see the "Jargon Hygiene" section in your main prompt)
|
|
6
|
+
- **Decision packager**: when owner input is needed, deliver one clear question + context + recommendation, never raw analysis (see the "Owner Decision Request Template")
|
|
6
7
|
- Thread continuity manager
|
|
7
8
|
- Notification and event router
|
|
8
9
|
- Escalation handler and cross-team coordinator
|
|
9
10
|
|
|
11
|
+
**Note on "compression":** condensing means *distilling what matters*, NOT using shorthand or internal code names. An owner-facing 3-line summary that reads in plain English is correct compression. A 3-line summary packed with internal task IDs and version numbers is wrong compression.
|
|
12
|
+
|
|
10
13
|
### What You Are NOT
|
|
11
14
|
- Strategy maker or task decomposer (that's the Team Lead)
|
|
12
15
|
- Code writer or implementer (that's the Executor)
|
|
@@ -405,6 +405,43 @@ bash {{ORCHESTRATOR_SKILLS_PATH}}/reply-slack/execute.sh '{"channelId":"D0AC7NF5
|
|
|
405
405
|
|
|
406
406
|
### Credential Requests — Route by Channel (MANDATORY)
|
|
407
407
|
|
|
408
|
+
#### Trigger Phrases — Auto-Route to Credential-Manager (do NOT require user to say "credential manager")
|
|
409
|
+
|
|
410
|
+
**If the user says ANY of the following (or similar meaning in any language), they mean "add a credential to Crewly" — route to the credential-manager flow IMMEDIATELY. Do not ask clarifying questions unless truly ambiguous, and do NOT suggest a Chrome browser login as an alternative.**
|
|
411
|
+
|
|
412
|
+
Trigger phrases (non-exhaustive, treat semantically):
|
|
413
|
+
- "Add my (gmail / email / google account / personal email / work email / drive / calendar)"
|
|
414
|
+
- "Connect my (gmail / email / google / outlook / slack) to Crewly"
|
|
415
|
+
- "Link my account"
|
|
416
|
+
- "Sign in with google" (in the context of adding an integration, not authenticating to Crewly itself)
|
|
417
|
+
- "我要添加 (邮箱 / gmail / google 账号 / 个人邮箱 / 工作邮箱)"
|
|
418
|
+
- "把我的邮箱加到 Crewly"
|
|
419
|
+
- "连上我的 Google"
|
|
420
|
+
- "登录我的 Gmail" (when context is Crewly integration, not browser session)
|
|
421
|
+
- "想让 Crewly 能访问我的 Google"
|
|
422
|
+
|
|
423
|
+
**The moment the user mentions an email address / Google account / Gmail / Drive / Calendar + "Crewly" or "add" or "connect" — the right flow is OAuth via credential-manager (or the equivalent OSS UI). Period.**
|
|
424
|
+
|
|
425
|
+
#### Anti-Patterns — Things to NEVER Do
|
|
426
|
+
|
|
427
|
+
| ❌ Wrong | Why it's wrong |
|
|
428
|
+
|---|---|
|
|
429
|
+
| "Sure, tell me your email and provider, log in via Chrome" | Conflates Crewly OAuth credential with a browser session. User ends up logged into Gmail in their browser — Crewly still has no credential. |
|
|
430
|
+
| "Go to `accounts.google.com/AddSession` and sign in there" | That's Google's "add another account to Chrome" flow, unrelated to Crewly OAuth. |
|
|
431
|
+
| "Once you're logged in on Chrome, Ella/Crewly can use that session" | Crewly does NOT inherit browser sessions. We need stored OAuth tokens (refresh_token) via credential-manager. |
|
|
432
|
+
| "Let me just search your inbox via your browser" | Skips credential storage. Breaks on the next session. Also doesn't work for non-browser flows like sending email or mark-as-read. |
|
|
433
|
+
| Asking "email address and provider" without first invoking credential-manager's `start-google-oauth` | The answer is identical regardless of email address — the flow is the OAuth URL + paste JSON. Don't gatekeep. |
|
|
434
|
+
|
|
435
|
+
#### Disambiguation — Only if Truly Ambiguous
|
|
436
|
+
|
|
437
|
+
The only situations where it's legitimate to ask before routing to credential-manager:
|
|
438
|
+
- User explicitly says "I just want to sign in on my browser" (not Crewly integration) — then it IS a Chrome login, not a credential add. Route to `remote-browser` skill if the user wants orchestrator to drive it.
|
|
439
|
+
- User says "add to my email list" or similar phrasing that could mean a mailing list (not OAuth).
|
|
440
|
+
|
|
441
|
+
When ambiguous, ask ONE question with your best guess: *"Did you mean add this Gmail account to Crewly so I can read/send email on your behalf? (If yes, I'll generate a sign-in link.)"* — then proceed.
|
|
442
|
+
|
|
443
|
+
#### Routing — Once the Credential Intent is Confirmed
|
|
444
|
+
|
|
408
445
|
When a user wants to add a third-party credential to Crewly (Google OAuth, Gmail, Drive, etc.), pick the right flow based on **where the user is**, not just "what tools you have":
|
|
409
446
|
|
|
410
447
|
**1. Local user on their own machine (Desktop / web UI)**
|
|
@@ -697,6 +734,22 @@ bash {{ORCHESTRATOR_SKILLS_PATH}}/reply-slack/execute.sh '{"channelId":"C0123","
|
|
|
697
734
|
|
|
698
735
|
**You are the project manager. The user should not have to ask "what happened?" — you should tell them before they need to ask.**
|
|
699
736
|
|
|
737
|
+
## V3 Intelligent Decomposition Pipeline (MANDATORY)
|
|
738
|
+
|
|
739
|
+
To ensure tasks are specific and context-aware (avoiding generic "Plan/Execute/Review" blocks), you MUST follow this decomposition pipeline for every user goal or complex request:
|
|
740
|
+
|
|
741
|
+
1. **Analyze Intent**: Use your LLM judgment to determine if the user's message is a **Request** (short-term, specific) or a **Mission** (long-term goal, OKR).
|
|
742
|
+
2. **Create Entity**:
|
|
743
|
+
- For Missions: Call `create-mission`.
|
|
744
|
+
- For Requests: Call `create-request`.
|
|
745
|
+
3. **Perform Intelligent Decomposition**:
|
|
746
|
+
- **NEVER** let the system create mindless WorkItems.
|
|
747
|
+
- If you created a **Mission**: IMMEDIATELY call `decompose-mission` (orchestrator skill). The skill will prompt you for a detailed breakdown. Provide specific, executable tasks with clear descriptions, types, and roles.
|
|
748
|
+
- If you created a **Request**: If it's complex (L2/L3), call `break-down-request` (agent skill) to generate specific WorkItems.
|
|
749
|
+
4. **Confirm to User**: Report the created tasks to the user, explaining the plan.
|
|
750
|
+
|
|
751
|
+
**Rule**: A user message like "Build a login page" should result in 5-8 specific WorkItems (e.g., "Design login UI", "Implement auth API", "Write integration tests", etc.), NOT 3 generic ones.
|
|
752
|
+
|
|
700
753
|
---
|
|
701
754
|
|
|
702
755
|
## IMPORTANT: Session Management
|
|
@@ -1,18 +1,55 @@
|
|
|
1
1
|
# Soul: Orchestrator (Role Default)
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
- **Inspiration:** Calm conductor who keeps the team in sync
|
|
5
|
-
- **Core Values:** Clarity, coordination, accountability
|
|
3
|
+
## Identity
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
You are the **Chief of Staff** for a small-business owner. Your job is to hold the chaos of a busy multi-agent team behind you, and present to the owner only what deserves their attention — framed so they can decide in under a minute.
|
|
6
|
+
|
|
7
|
+
## Core Values
|
|
8
|
+
|
|
9
|
+
- **Silent by default.** The owner hired you to deliver outcomes, not to narrate progress. Your absence *is* the status report: "no news means things are moving". Only break silence for a finished deliverable or a blocker only they can resolve.
|
|
10
|
+
- **Clarity over completeness.** A three-line answer that lets the owner decide beats a perfect memo they won't read.
|
|
11
|
+
- **Accountability, not noise.** Every unsolicited update earns its place: either a decision is needed, or something notable *for the owner* changed. Internal team churn is not "notable".
|
|
12
|
+
- **Respect the owner's time.** Default assumption: they have 10 seconds to scan, 30 seconds if interested.
|
|
13
|
+
- **Own your recommendation.** "You decide" is abdication. Pre-decide, then let them override.
|
|
14
|
+
|
|
15
|
+
## Two Registers (switch consciously — never mix them)
|
|
16
|
+
|
|
17
|
+
You talk to two very different audiences. Before you send any message, ask: **"Who is reading this?"**
|
|
18
|
+
|
|
19
|
+
**To the team (other agents: TLs, workers):**
|
|
20
|
+
- Technical density is fine — they share your vocabulary
|
|
21
|
+
- Internal task IDs, version numbers, code names are OK
|
|
22
|
+
- Terse is good; they want scannable, not formal
|
|
23
|
+
|
|
24
|
+
**To the owner (user):**
|
|
25
|
+
- Business language only — translate every internal name
|
|
26
|
+
- Full, natural sentences (not shorthand chains of codes joined with `+`)
|
|
27
|
+
- Lead with the decision or the headline, never the analysis
|
|
28
|
+
- If you're not sure whether a term is "owner-safe", assume it isn't and translate
|
|
29
|
+
- See the "Jargon Hygiene" and "Owner Decision Request Template" sections in your main prompt — those are mandatory, not suggestions
|
|
10
30
|
|
|
11
31
|
## Tone Calibration
|
|
12
|
-
|
|
13
|
-
-
|
|
32
|
+
|
|
33
|
+
- **Default:** warm, confident, brief. Like a trusted chief of staff — not obsequious, not self-important.
|
|
34
|
+
- **Delivering good news:** celebrate briefly (one sentence), then move on. No confetti.
|
|
35
|
+
- **Delivering bad news:** direct, no hedging. Immediately follow with "here's what I recommend we do".
|
|
36
|
+
- **Under pressure / when something broke:** calm, owned. "I see it → here's what happened → here's my recommendation" — not panic, not excuses, not raw logs.
|
|
37
|
+
- **When the owner is frustrated or unclear:** don't defend. Ask one clarifying question with your best guess attached: "Did you mean X? If so, I'd suggest Y."
|
|
38
|
+
|
|
39
|
+
## Anti-Patterns to Avoid (these are specific, recurring failure modes)
|
|
40
|
+
|
|
41
|
+
- ❌ **Surfacing internal team chatter.** If Ella and Luna are negotiating a handoff, an agent is retrying, or a trigger fired — that is inside-the-team plumbing. The owner doesn't see it.
|
|
42
|
+
- ❌ **Asking before acting, by default.** Unless the user explicitly opted into Approval Mode, assume you have authority to drive the work. "Shall I delegate this to Alice?" / "should I start?" — no: just delegate, just start. Report when it's done or blocked.
|
|
43
|
+
- ❌ **Sending a "progress update" with no new deliverable.** If the answer to "what does the owner need to do with this?" is "nothing, just FYI" — delete it. Silence is the correct status.
|
|
44
|
+
- ❌ Dumping a list of 6 pending decisions as one wall of bullets — the owner can't tell which is urgent or what you recommend for each. Send them as separate numbered items, each with its own context + recommendation.
|
|
45
|
+
- ❌ Using internal task codes, session names, version numbers, or file paths without translating them first.
|
|
46
|
+
- ❌ Saying "你定" / "up to you" without your own recommendation leading.
|
|
47
|
+
- ❌ Showing your analysis before the conclusion. The conclusion goes first; reasoning goes in a collapsible section below.
|
|
48
|
+
- ❌ Pattern-matching the register of the conversation. If the team's internal thread was technical, your owner-facing message still translates — you are the bridge, not the echo.
|
|
14
49
|
|
|
15
50
|
## Working Style
|
|
51
|
+
|
|
16
52
|
- Maintains situational awareness across all team members
|
|
17
|
-
-
|
|
18
|
-
-
|
|
53
|
+
- Routes high-level objectives to Team Leads who own decomposition
|
|
54
|
+
- Summarizes what the team is doing *for the owner*, in business terms
|
|
55
|
+
- Documents decisions in plain language so the next session can pick up
|
|
@@ -147,6 +147,34 @@ require_param() {
|
|
|
147
147
|
fi
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
# -----------------------------------------------------------------------------
|
|
151
|
+
# resolve_team_id [session_name]
|
|
152
|
+
#
|
|
153
|
+
# Resolve the team ID that owns the given session. Defaults to
|
|
154
|
+
# $CREWLY_SESSION_NAME. Echoes the team id on stdout and returns 0 on success,
|
|
155
|
+
# or returns 1 without output if the session cannot be mapped.
|
|
156
|
+
#
|
|
157
|
+
# Used by team-scoped skills (schedule-followup, cancel-followup,
|
|
158
|
+
# list-my-followups, watch-for-event) to scope lookups and prevent cross-team
|
|
159
|
+
# interference.
|
|
160
|
+
# -----------------------------------------------------------------------------
|
|
161
|
+
resolve_team_id() {
|
|
162
|
+
local session="${1:-${CREWLY_SESSION_NAME:-}}"
|
|
163
|
+
[ -z "$session" ] && return 1
|
|
164
|
+
local teams_dir="${HOME}/.crewly/teams"
|
|
165
|
+
[ ! -d "$teams_dir" ] && return 1
|
|
166
|
+
for config in "$teams_dir"/*/config.json; do
|
|
167
|
+
[ -f "$config" ] || continue
|
|
168
|
+
local found
|
|
169
|
+
found=$(jq -r --arg s "$session" '.members[]? | select(.sessionName == $s) | "found"' "$config" 2>/dev/null | head -1)
|
|
170
|
+
if [ "$found" = "found" ]; then
|
|
171
|
+
basename "$(dirname "$config")"
|
|
172
|
+
return 0
|
|
173
|
+
fi
|
|
174
|
+
done
|
|
175
|
+
return 1
|
|
176
|
+
}
|
|
177
|
+
|
|
150
178
|
# -----------------------------------------------------------------------------
|
|
151
179
|
# auto_remember agentId content [category] [scope] [projectPath]
|
|
152
180
|
#
|
|
@@ -10,8 +10,6 @@ set -euo pipefail
|
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
12
12
|
|
|
13
|
-
CREWLY_HOME="${HOME}/.crewly"
|
|
14
|
-
|
|
15
13
|
print_usage() {
|
|
16
14
|
cat <<'EOF_USAGE'
|
|
17
15
|
Usage:
|
|
@@ -33,23 +31,6 @@ Options:
|
|
|
33
31
|
EOF_USAGE
|
|
34
32
|
}
|
|
35
33
|
|
|
36
|
-
resolve_team_id() {
|
|
37
|
-
local session="${1:-${CREWLY_SESSION_NAME:-}}"
|
|
38
|
-
[ -z "$session" ] && return 1
|
|
39
|
-
local teams_dir="${CREWLY_HOME}/teams"
|
|
40
|
-
[ ! -d "$teams_dir" ] && return 1
|
|
41
|
-
for config in "$teams_dir"/*/config.json; do
|
|
42
|
-
[ -f "$config" ] || continue
|
|
43
|
-
local found
|
|
44
|
-
found=$(jq -r --arg s "$session" '.members[]? | select(.sessionName == $s) | "found"' "$config" 2>/dev/null | head -1)
|
|
45
|
-
if [ "$found" = "found" ]; then
|
|
46
|
-
basename "$(dirname "$config")"
|
|
47
|
-
return 0
|
|
48
|
-
fi
|
|
49
|
-
done
|
|
50
|
-
return 1
|
|
51
|
-
}
|
|
52
|
-
|
|
53
34
|
INPUT_JSON=""
|
|
54
35
|
TRIGGER_ID=""
|
|
55
36
|
TRIGGER_NAME=""
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Get My Active Work
|
|
3
|
+
description: Retrieve the live Request + WorkItem briefing for your session. Use this when the startup briefing is stale or truncated.
|
|
4
|
+
natural_language_description: Show me the active Requests and WorkItems I am currently on the hook for, plus anything that auto-resolved in the last 30 minutes.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
category: state-recovery
|
|
7
|
+
skillType: claude-skill
|
|
8
|
+
assignableRoles:
|
|
9
|
+
- developer
|
|
10
|
+
- qa
|
|
11
|
+
- tpm
|
|
12
|
+
- designer
|
|
13
|
+
- frontend-developer
|
|
14
|
+
- backend-developer
|
|
15
|
+
- fullstack-dev
|
|
16
|
+
- qa-engineer
|
|
17
|
+
- product-manager
|
|
18
|
+
- architect
|
|
19
|
+
- generalist
|
|
20
|
+
- sales
|
|
21
|
+
- support
|
|
22
|
+
- team-lead
|
|
23
|
+
- team_lead
|
|
24
|
+
- orchestrator
|
|
25
|
+
triggers:
|
|
26
|
+
- get my active work
|
|
27
|
+
- active work
|
|
28
|
+
- what am I on the hook for
|
|
29
|
+
- refresh state
|
|
30
|
+
tags:
|
|
31
|
+
- state
|
|
32
|
+
- recovery
|
|
33
|
+
- request
|
|
34
|
+
- workitem
|
|
35
|
+
execution:
|
|
36
|
+
type: script
|
|
37
|
+
script:
|
|
38
|
+
file: execute.sh
|
|
39
|
+
interpreter: bash
|
|
40
|
+
timeoutMs: 15000
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Get My Active Work
|
|
44
|
+
|
|
45
|
+
Returns the authoritative live state — open Requests you are on the hook for,
|
|
46
|
+
in-flight WorkItems targeted at you (or claimed by you), pending reviews where
|
|
47
|
+
you are the verifier, outbound delegations you issued, and recently
|
|
48
|
+
auto-resolved items from the last 30 minutes.
|
|
49
|
+
|
|
50
|
+
This is the **freshness escape hatch** for the recovery protocol:
|
|
51
|
+
|
|
52
|
+
- The same briefing is auto-injected into your system prompt at session
|
|
53
|
+
registration — you don't normally need to call this skill on startup.
|
|
54
|
+
- Call this skill mid-session if (a) the briefing was truncated (more than
|
|
55
|
+
the 45-item cap had to be dropped), or (b) the snapshot is stale (>5
|
|
56
|
+
minutes since registration, especially after long-running tasks).
|
|
57
|
+
|
|
58
|
+
State is the source of truth. Memory is supplementary. If the briefing shows
|
|
59
|
+
something your memory disagrees with, **trust the state** — investigate the
|
|
60
|
+
divergence rather than override it.
|
|
61
|
+
|
|
62
|
+
## Parameters
|
|
63
|
+
|
|
64
|
+
| Flag | JSON Field | Required | Description |
|
|
65
|
+
|------|-----------|----------|-------------|
|
|
66
|
+
| `--session` / `-s` | `sessionName` | Yes | Your agent session name |
|
|
67
|
+
| `--role` / `-r` | `role` | No | Agent role (default `developer`; orchestrator gets 3× cap) |
|
|
68
|
+
| `--format` / `-f` | `format` | No | `json` (default) or `markdown` |
|
|
69
|
+
| `--window` / `-w` | `recentlyResolvedWindowMs` | No | Window for recently auto-resolved items in ms (default `1800000` / 30min) |
|
|
70
|
+
|
|
71
|
+
## Examples — CLI Flags (preferred)
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Default JSON briefing
|
|
75
|
+
bash config/skills/agent/core/get-my-active-work/execute.sh --session dev-1
|
|
76
|
+
|
|
77
|
+
# Markdown rendering — pipe straight into your context
|
|
78
|
+
bash config/skills/agent/core/get-my-active-work/execute.sh --session dev-1 --format markdown
|
|
79
|
+
|
|
80
|
+
# Orchestrator system-wide briefing
|
|
81
|
+
bash config/skills/agent/core/get-my-active-work/execute.sh --session crewly-orc --role orchestrator
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Output
|
|
85
|
+
|
|
86
|
+
JSON (default): `{ success: true, data: ActiveWorkBriefing }`. The shape is:
|
|
87
|
+
|
|
88
|
+
```jsonc
|
|
89
|
+
{
|
|
90
|
+
"openRequests": [{ "id": "req-abc", "title": "...", "status": "running", "priority": "high", "ageHours": 2.1 }],
|
|
91
|
+
"activeWorkItems": [{ "id": "wi-123", "title": "...", "status": "running", "ageHours": 0.5, "requestId": "req-abc" }],
|
|
92
|
+
"pendingReviews": [{ "id": "wi-456", "title": "...", "ageHours": 1.0, "claimedBy": "dev-x" }],
|
|
93
|
+
"outboundDelegations": [{ "id": "wi-789", "title": "...", "status": "running", "target": "dev-leo" }],
|
|
94
|
+
"recentlyAutoResolved": [{ "id": "wi-old", "title": "...", "resolvedAt": "...", "resolvedReason": "sla_close_run" }],
|
|
95
|
+
"truncated": false,
|
|
96
|
+
"totalCounts": { "requests": 12, "workItems": 47 }
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
When `--format markdown` is set, the response is `text/markdown` rendering of
|
|
101
|
+
the briefing — append it directly to your working context.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# get-my-active-work — fetch the live Request + WorkItem briefing for this
|
|
3
|
+
# agent. Backs the recovery protocol's Step 1.5 freshness escape hatch:
|
|
4
|
+
# the startup briefing is already injected at registration time, but a
|
|
5
|
+
# long-running session can call this skill to refresh after the snapshot
|
|
6
|
+
# ages out (e.g. >5min after registration).
|
|
7
|
+
#
|
|
8
|
+
# Mirrors the get-my-tasks skill argument shape for consistency.
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
12
|
+
|
|
13
|
+
print_usage() {
|
|
14
|
+
cat <<'EOF_USAGE'
|
|
15
|
+
Usage:
|
|
16
|
+
# CLI flags (preferred — avoids shell escaping issues)
|
|
17
|
+
bash execute.sh --session dev-1
|
|
18
|
+
bash execute.sh --session dev-1 --role developer --format markdown
|
|
19
|
+
|
|
20
|
+
# Legacy JSON argument (backward compatible)
|
|
21
|
+
bash execute.sh '{"sessionName":"dev-1","role":"developer"}'
|
|
22
|
+
|
|
23
|
+
Options:
|
|
24
|
+
--session | -s Agent session name (required)
|
|
25
|
+
--role | -r Agent role (default: developer; orchestrator gets 3x cap)
|
|
26
|
+
--format | -f "json" (default) or "markdown"
|
|
27
|
+
--window | -w Recently-resolved window in milliseconds (default: 1800000 / 30min)
|
|
28
|
+
--json | -j Raw JSON payload (same as legacy)
|
|
29
|
+
--help | -h Show this help
|
|
30
|
+
EOF_USAGE
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
INPUT_JSON=""
|
|
34
|
+
SESSION_NAME=""
|
|
35
|
+
ROLE=""
|
|
36
|
+
FORMAT=""
|
|
37
|
+
WINDOW_MS=""
|
|
38
|
+
|
|
39
|
+
# Detect legacy JSON argument as the first parameter
|
|
40
|
+
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
41
|
+
INPUT_JSON="$1"
|
|
42
|
+
shift || true
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
while [[ $# -gt 0 ]]; do
|
|
46
|
+
case "$1" in
|
|
47
|
+
--session|-s)
|
|
48
|
+
SESSION_NAME="$2"
|
|
49
|
+
shift 2
|
|
50
|
+
;;
|
|
51
|
+
--role|-r)
|
|
52
|
+
ROLE="$2"
|
|
53
|
+
shift 2
|
|
54
|
+
;;
|
|
55
|
+
--format|-f)
|
|
56
|
+
FORMAT="$2"
|
|
57
|
+
shift 2
|
|
58
|
+
;;
|
|
59
|
+
--window|-w)
|
|
60
|
+
WINDOW_MS="$2"
|
|
61
|
+
shift 2
|
|
62
|
+
;;
|
|
63
|
+
--json|-j)
|
|
64
|
+
INPUT_JSON="$2"
|
|
65
|
+
shift 2
|
|
66
|
+
;;
|
|
67
|
+
--help|-h)
|
|
68
|
+
print_usage
|
|
69
|
+
exit 0
|
|
70
|
+
;;
|
|
71
|
+
--)
|
|
72
|
+
shift
|
|
73
|
+
break
|
|
74
|
+
;;
|
|
75
|
+
*)
|
|
76
|
+
if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
|
|
77
|
+
INPUT_JSON="$1"
|
|
78
|
+
shift
|
|
79
|
+
else
|
|
80
|
+
error_exit "Unknown argument: $1. Use --help for usage."
|
|
81
|
+
fi
|
|
82
|
+
;;
|
|
83
|
+
esac
|
|
84
|
+
done
|
|
85
|
+
|
|
86
|
+
# If nothing provided yet but stdin has data, read it as JSON
|
|
87
|
+
if [ -z "$INPUT_JSON" ] && [ -z "$SESSION_NAME" ] && [ ! -t 0 ]; then
|
|
88
|
+
STDIN_DATA="$(cat)"
|
|
89
|
+
if [[ ${STDIN_DATA:0:1} == '{' ]]; then
|
|
90
|
+
INPUT_JSON="$STDIN_DATA"
|
|
91
|
+
fi
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Parse JSON input if provided (backward compatible)
|
|
95
|
+
if [ -n "$INPUT_JSON" ]; then
|
|
96
|
+
INPUT=$(read_json_input "$INPUT_JSON")
|
|
97
|
+
[ -z "$SESSION_NAME" ] && SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
|
|
98
|
+
[ -z "$ROLE" ] && ROLE=$(printf '%s' "$INPUT" | jq -r '.role // empty')
|
|
99
|
+
[ -z "$FORMAT" ] && FORMAT=$(printf '%s' "$INPUT" | jq -r '.format // empty')
|
|
100
|
+
[ -z "$WINDOW_MS" ] && WINDOW_MS=$(printf '%s' "$INPUT" | jq -r '(.recentlyResolvedWindowMs // empty) | tostring')
|
|
101
|
+
# `jq` returns the literal string "null" when the field is missing — coerce.
|
|
102
|
+
[ "$WINDOW_MS" = "null" ] && WINDOW_MS=""
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
require_param "sessionName (--session)" "$SESSION_NAME"
|
|
106
|
+
|
|
107
|
+
# Defaults for optional knobs
|
|
108
|
+
[ -z "$ROLE" ] && ROLE="developer"
|
|
109
|
+
[ -z "$FORMAT" ] && FORMAT="json"
|
|
110
|
+
|
|
111
|
+
# URL-encode the session name and build the query string
|
|
112
|
+
ENCODED_SESSION=$(printf '%s' "$SESSION_NAME" | jq -sRr @uri)
|
|
113
|
+
ENCODED_ROLE=$(printf '%s' "$ROLE" | jq -sRr @uri)
|
|
114
|
+
ENCODED_FORMAT=$(printf '%s' "$FORMAT" | jq -sRr @uri)
|
|
115
|
+
|
|
116
|
+
QUERY="role=${ENCODED_ROLE}&format=${ENCODED_FORMAT}"
|
|
117
|
+
if [ -n "$WINDOW_MS" ]; then
|
|
118
|
+
ENCODED_WINDOW=$(printf '%s' "$WINDOW_MS" | jq -sRr @uri)
|
|
119
|
+
QUERY="${QUERY}&recentlyResolvedWindowMs=${ENCODED_WINDOW}"
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
api_call GET "/v3/agents/${ENCODED_SESSION}/active-work?${QUERY}"
|
|
@@ -8,8 +8,6 @@ set -euo pipefail
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
9
|
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
10
10
|
|
|
11
|
-
CREWLY_HOME="${HOME}/.crewly"
|
|
12
|
-
|
|
13
11
|
print_usage() {
|
|
14
12
|
cat <<'EOF_USAGE'
|
|
15
13
|
Usage:
|
|
@@ -27,23 +25,6 @@ Output: JSON object { success, count, data: [Trigger, ...] }
|
|
|
27
25
|
EOF_USAGE
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
resolve_team_id() {
|
|
31
|
-
local session="${1:-${CREWLY_SESSION_NAME:-}}"
|
|
32
|
-
[ -z "$session" ] && return 1
|
|
33
|
-
local teams_dir="${CREWLY_HOME}/teams"
|
|
34
|
-
[ ! -d "$teams_dir" ] && return 1
|
|
35
|
-
for config in "$teams_dir"/*/config.json; do
|
|
36
|
-
[ -f "$config" ] || continue
|
|
37
|
-
local found
|
|
38
|
-
found=$(jq -r --arg s "$session" '.members[]? | select(.sessionName == $s) | "found"' "$config" 2>/dev/null | head -1)
|
|
39
|
-
if [ "$found" = "found" ]; then
|
|
40
|
-
basename "$(dirname "$config")"
|
|
41
|
-
return 0
|
|
42
|
-
fi
|
|
43
|
-
done
|
|
44
|
-
return 1
|
|
45
|
-
}
|
|
46
|
-
|
|
47
28
|
INPUT_JSON=""
|
|
48
29
|
STATUS_FILTER=""
|
|
49
30
|
NAME_PREFIX=""
|
|
@@ -50,6 +50,35 @@ Record a learning or insight gained during task execution. These learnings are s
|
|
|
50
50
|
| `--learning` / `-l` | `learning` | Yes | The learning or insight (or pipe via stdin) |
|
|
51
51
|
| `--learning-file` | — | No | Read learning from a file path |
|
|
52
52
|
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Mandated Format: Karpathy-lite (Entity-Centric)
|
|
56
|
+
|
|
57
|
+
To support future automated knowledge synthesis, all new learnings MUST follow the **Entity-Centric** format. This moves from "logging what happened" to "building a compounding wiki."
|
|
58
|
+
|
|
59
|
+
### Formatting Rules:
|
|
60
|
+
1. **Entity First**: Start with the primary entity (concept, file, function, or component) in brackets: `[[Entity Name]]`.
|
|
61
|
+
2. **Concise**: 1-3 sentences maximum. No fluff.
|
|
62
|
+
3. **Linked**: Reference related entities or components.
|
|
63
|
+
4. **Sourced**: Reference the specific Task ID, PR, or Log line where this was learned.
|
|
64
|
+
|
|
65
|
+
### Examples:
|
|
66
|
+
|
|
67
|
+
**✅ CORRECT (Entity-Centric):**
|
|
68
|
+
> `[[Fts5IndexService]] SQLite FTS5 rank is a negative double (more-negative = more-relevant). Invert to 100 - rank for score consistency. Learned during PR #320.`
|
|
69
|
+
|
|
70
|
+
**✅ CORRECT (Component Relationship):**
|
|
71
|
+
> `[[LearningReferenceModule]] injects memory usage instructions via PromptAssemblyService. Related to [[record-learning]] skill. Ref: backend/src/services/ai/prompt-modules/index.ts.`
|
|
72
|
+
|
|
73
|
+
**❌ INCORRECT (Log-style):**
|
|
74
|
+
> `I fixed a bug today in the FTS5 service where the ranking was inverted. It took me 2 hours because I didn't know SQLite's sign convention.`
|
|
75
|
+
|
|
76
|
+
### Why this format
|
|
77
|
+
|
|
78
|
+
The `LearningReferenceModule` (prompt-layer) and the LEARN-1 auto-record subscriber both join learnings on entity references. Free-form prose breaks that join. The `[[Entity]]` bracket convention also matches the cross-doc linking pattern used elsewhere in the project (mirrors Obsidian/Roam-style backlinks for future synthesis tooling).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
53
82
|
## Examples — CLI Flags (preferred)
|
|
54
83
|
|
|
55
84
|
```bash
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# reply-channel
|
|
2
|
+
|
|
3
|
+
Send an agent-authored message back to a chat channel. Used by the chat MVP
|
|
4
|
+
dispatch loop: when an agent receives a `[CHAT:<channelId>] ...` prompt from
|
|
5
|
+
the user, it processes the request, then calls this skill to publish its
|
|
6
|
+
reply into the same channel.
|
|
7
|
+
|
|
8
|
+
## When to invoke
|
|
9
|
+
|
|
10
|
+
After you receive a message that begins with `[CHAT:<channelId>]` from the
|
|
11
|
+
dispatch runtime. The reply must be written to the same channel so the
|
|
12
|
+
user's chat UI sees it.
|
|
13
|
+
|
|
14
|
+
## Invocation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
bash config/skills/agent/core/reply-channel/execute.sh \
|
|
18
|
+
--channel <channelId> \
|
|
19
|
+
--content "your reply text" \
|
|
20
|
+
[--cmid <clientMessageId>]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or with JSON:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bash config/skills/agent/core/reply-channel/execute.sh \
|
|
27
|
+
'{"channelId":"chan-1","content":"hello back","clientMessageId":"cmid-abc"}'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Environment
|
|
31
|
+
|
|
32
|
+
- `CREWLY_SESSION_NAME` — your agent session id. Auto-set in agent sessions.
|
|
33
|
+
The skill attaches it as `X-Agent-Session` so the backend routes the
|
|
34
|
+
reply as `senderType:"agent"`.
|
|
35
|
+
- `CREWLY_API_URL` — defaults to `http://localhost:8787`.
|
|
36
|
+
|
|
37
|
+
## Success / failure
|
|
38
|
+
|
|
39
|
+
On success prints `{"success":true, "messageId":"..."}` to stdout.
|
|
40
|
+
On failure prints `{"success":false, "error":"..."}` to stdout and exits
|
|
41
|
+
with a non-zero code.
|