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
|
@@ -64,10 +64,12 @@ export interface CrewlyMcpServerConfig {
|
|
|
64
64
|
*/
|
|
65
65
|
export declare class CrewlyMcpServer {
|
|
66
66
|
private server;
|
|
67
|
-
private storage;
|
|
68
|
-
private memory;
|
|
67
|
+
private readonly storage;
|
|
68
|
+
private readonly memory;
|
|
69
69
|
private transport;
|
|
70
70
|
private stdioTransportCtor;
|
|
71
|
+
private geminiCliHelper;
|
|
72
|
+
private getGeminiCliHelper;
|
|
71
73
|
/**
|
|
72
74
|
* Creates a new CrewlyMcpServer instance.
|
|
73
75
|
*
|
|
@@ -78,6 +80,14 @@ export declare class CrewlyMcpServer {
|
|
|
78
80
|
* Register MCP request handlers for tool listing and tool calling.
|
|
79
81
|
*/
|
|
80
82
|
private registerHandlers;
|
|
83
|
+
/**
|
|
84
|
+
* Build the Server + transport + handlers from already-loaded SDK modules.
|
|
85
|
+
* Returns false if any expected SDK symbol is missing (so the caller can
|
|
86
|
+
* decide whether to throw or silently fall back). Both `ensureInitialized`
|
|
87
|
+
* (dynamic import) and `tryInitializeWithRequire` (CommonJS require) feed
|
|
88
|
+
* their loaded modules through here.
|
|
89
|
+
*/
|
|
90
|
+
private installSdkModules;
|
|
81
91
|
private ensureInitialized;
|
|
82
92
|
private tryInitializeWithRequire;
|
|
83
93
|
/**
|
|
@@ -88,6 +98,14 @@ export declare class CrewlyMcpServer {
|
|
|
88
98
|
* @returns Tool result with content blocks
|
|
89
99
|
*/
|
|
90
100
|
private handleToolCall;
|
|
101
|
+
/**
|
|
102
|
+
* Format a TeamMember for an MCP response. Three variants share the
|
|
103
|
+
* same base (id/name/role/agentStatus/workingStatus); `includeRuntime`
|
|
104
|
+
* adds `runtimeType` + `sessionName`, and `includeTickets` adds
|
|
105
|
+
* `currentTickets`. Keeping all three paths in one place so that a
|
|
106
|
+
* field added to the member shape only needs to be surfaced once.
|
|
107
|
+
*/
|
|
108
|
+
private formatMember;
|
|
91
109
|
/**
|
|
92
110
|
* Handle crewly_get_teams: list all teams and their members.
|
|
93
111
|
*
|
|
@@ -134,6 +152,32 @@ export declare class CrewlyMcpServer {
|
|
|
134
152
|
* @returns Confirmation with message ID
|
|
135
153
|
*/
|
|
136
154
|
private handleSendMessage;
|
|
155
|
+
/**
|
|
156
|
+
* Handle crewly_credential_list: return credential metadata (no values).
|
|
157
|
+
*/
|
|
158
|
+
private handleCredentialList;
|
|
159
|
+
/**
|
|
160
|
+
* Handle crewly_credential_add_api_key: store an API key.
|
|
161
|
+
*/
|
|
162
|
+
private handleCredentialAddApiKey;
|
|
163
|
+
/**
|
|
164
|
+
* Handle crewly_credential_oauth_import_gemini_cli: capture the current
|
|
165
|
+
* gemini-cli-workspace extension login into an encrypted Crewly credential.
|
|
166
|
+
*/
|
|
167
|
+
private handleCredentialImportGeminiCli;
|
|
168
|
+
/**
|
|
169
|
+
* Handle crewly_credential_clear_gemini_cli_file: delete the extension's
|
|
170
|
+
* cached token file so the next extension login captures a fresh account.
|
|
171
|
+
*/
|
|
172
|
+
private handleCredentialClearGeminiCliFile;
|
|
173
|
+
/**
|
|
174
|
+
* Handle crewly_credential_delete: remove a credential.
|
|
175
|
+
*/
|
|
176
|
+
private handleCredentialDelete;
|
|
177
|
+
/**
|
|
178
|
+
* Handle crewly_execute_skill: run a skill with optional credential bindings.
|
|
179
|
+
*/
|
|
180
|
+
private handleExecuteSkill;
|
|
137
181
|
/**
|
|
138
182
|
* Create a success result with JSON-serialized content.
|
|
139
183
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B,sDAAsD;;;;;IAKtD,uCAAuC;;CAE/B,CAAC;AAIX;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,eAAe,CAAyC;IAEhE,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;gBACS,MAAM,CAAC,EAAE,qBAAqB;IAM1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;YA2BX,iBAAiB;IAc/B,OAAO,CAAC,wBAAwB;IAsBhC;;;;;;OAMG;YACW,cAAc;IAyC5B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAuBpB;;;;;OAKG;YACW,cAAc;IA4B5B;;;;;OAKG;YACW,gBAAgB;IA8D9B;;;;;;;;;OASG;YACW,gBAAgB;IA4C9B;;;;;OAKG;YACW,eAAe;IAqD7B;;;;;OAKG;YACW,kBAAkB;IAiChC;;;;;OAKG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,oBAAoB;IA6BlC;;OAEG;YACW,yBAAyB;IAqBvC;;;OAGG;YACW,+BAA+B;IA8B7C;;;OAGG;YACW,kCAAkC;IAKhD;;OAEG;YACW,sBAAsB;IAapC;;OAEG;YACW,kBAAkB;IA8BhC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;OAIG;IACH,SAAS,IAAI,GAAG;CAGjB"}
|
|
@@ -21,6 +21,10 @@
|
|
|
21
21
|
import { StorageService } from './core/storage.service.js';
|
|
22
22
|
import { MemoryService } from './memory/memory.service.js';
|
|
23
23
|
import { v4 as uuidv4 } from 'uuid';
|
|
24
|
+
import { getCredentialStoreService } from './credential/credential-store.service.js';
|
|
25
|
+
import { GeminiCliWorkspaceHelper } from './credential/helpers/gemini-cli-workspace.helper.js';
|
|
26
|
+
import { getSkillExecutorService } from './skill/skill-executor.service.js';
|
|
27
|
+
import { TOOL_DEFINITIONS } from './mcp-tool-definitions.js';
|
|
24
28
|
// ========================= Constants =========================
|
|
25
29
|
/**
|
|
26
30
|
* MCP Server configuration constants.
|
|
@@ -34,156 +38,8 @@ export const MCP_SERVER_CONSTANTS = {
|
|
|
34
38
|
/** Tool name prefix for namespacing */
|
|
35
39
|
TOOL_PREFIX: 'crewly',
|
|
36
40
|
};
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
* MCP tool definitions for Crewly capabilities.
|
|
40
|
-
* Each tool has a name, description, and JSON Schema for its input.
|
|
41
|
-
*/
|
|
42
|
-
const TOOL_DEFINITIONS = [
|
|
43
|
-
{
|
|
44
|
-
name: 'crewly_get_teams',
|
|
45
|
-
description: 'List all Crewly teams and their members with current status. ' +
|
|
46
|
-
'Returns team names, member roles, agent status, and working status.',
|
|
47
|
-
inputSchema: {
|
|
48
|
-
type: 'object',
|
|
49
|
-
properties: {
|
|
50
|
-
teamId: {
|
|
51
|
-
type: 'string',
|
|
52
|
-
description: 'Optional: filter to a specific team by ID',
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: 'crewly_create_team',
|
|
59
|
-
description: 'Create a new Crewly team with the specified members. ' +
|
|
60
|
-
'Each member needs a name, role, and runtime type.',
|
|
61
|
-
inputSchema: {
|
|
62
|
-
type: 'object',
|
|
63
|
-
properties: {
|
|
64
|
-
name: {
|
|
65
|
-
type: 'string',
|
|
66
|
-
description: 'Team name (e.g. "Backend Squad")',
|
|
67
|
-
},
|
|
68
|
-
description: {
|
|
69
|
-
type: 'string',
|
|
70
|
-
description: 'Optional team description',
|
|
71
|
-
},
|
|
72
|
-
members: {
|
|
73
|
-
type: 'array',
|
|
74
|
-
description: 'Array of team members to create',
|
|
75
|
-
items: {
|
|
76
|
-
type: 'object',
|
|
77
|
-
properties: {
|
|
78
|
-
name: { type: 'string', description: 'Member name' },
|
|
79
|
-
role: {
|
|
80
|
-
type: 'string',
|
|
81
|
-
description: 'Member role (developer, qa, product-manager, designer, etc.)',
|
|
82
|
-
},
|
|
83
|
-
runtimeType: {
|
|
84
|
-
type: 'string',
|
|
85
|
-
enum: ['claude-code', 'gemini-cli', 'codex-cli', 'crewly-agent'],
|
|
86
|
-
description: 'AI runtime to use (default: claude-code)',
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
required: ['name', 'role'],
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
required: ['name', 'members'],
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
name: 'crewly_assign_task',
|
|
98
|
-
description: 'Assign a task to a specific agent by sending it a message via the ' +
|
|
99
|
-
'message queue. The agent will receive the task content as input.',
|
|
100
|
-
inputSchema: {
|
|
101
|
-
type: 'object',
|
|
102
|
-
properties: {
|
|
103
|
-
teamId: {
|
|
104
|
-
type: 'string',
|
|
105
|
-
description: 'ID of the team the agent belongs to',
|
|
106
|
-
},
|
|
107
|
-
memberId: {
|
|
108
|
-
type: 'string',
|
|
109
|
-
description: 'ID of the member to assign the task to',
|
|
110
|
-
},
|
|
111
|
-
task: {
|
|
112
|
-
type: 'string',
|
|
113
|
-
description: 'Task description/instructions for the agent',
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
required: ['teamId', 'memberId', 'task'],
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
name: 'crewly_get_status',
|
|
121
|
-
description: 'Get the current status of a specific team or agent. Returns agent ' +
|
|
122
|
-
'status (active/inactive), working status (idle/in_progress), and ' +
|
|
123
|
-
'runtime type.',
|
|
124
|
-
inputSchema: {
|
|
125
|
-
type: 'object',
|
|
126
|
-
properties: {
|
|
127
|
-
teamId: {
|
|
128
|
-
type: 'string',
|
|
129
|
-
description: 'Optional: filter to a specific team',
|
|
130
|
-
},
|
|
131
|
-
memberId: {
|
|
132
|
-
type: 'string',
|
|
133
|
-
description: 'Optional: filter to a specific member within a team',
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
name: 'crewly_recall_memory',
|
|
140
|
-
description: 'Search team memory and knowledge base for relevant information. ' +
|
|
141
|
-
'Uses keyword and semantic matching to find stored learnings, ' +
|
|
142
|
-
'patterns, decisions, and documents.',
|
|
143
|
-
inputSchema: {
|
|
144
|
-
type: 'object',
|
|
145
|
-
properties: {
|
|
146
|
-
query: {
|
|
147
|
-
type: 'string',
|
|
148
|
-
description: 'Search query for the memory/knowledge system',
|
|
149
|
-
},
|
|
150
|
-
agentId: {
|
|
151
|
-
type: 'string',
|
|
152
|
-
description: 'Optional: agent ID to scope the recall',
|
|
153
|
-
},
|
|
154
|
-
projectPath: {
|
|
155
|
-
type: 'string',
|
|
156
|
-
description: 'Optional: project path to scope the recall',
|
|
157
|
-
},
|
|
158
|
-
scope: {
|
|
159
|
-
type: 'string',
|
|
160
|
-
enum: ['agent', 'project', 'both'],
|
|
161
|
-
description: 'Memory scope to search (default: both)',
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
required: ['query'],
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
name: 'crewly_send_message',
|
|
169
|
-
description: 'Send a message to the orchestrator via the message queue. ' +
|
|
170
|
-
'The message will be queued and processed by the orchestrator.',
|
|
171
|
-
inputSchema: {
|
|
172
|
-
type: 'object',
|
|
173
|
-
properties: {
|
|
174
|
-
message: {
|
|
175
|
-
type: 'string',
|
|
176
|
-
description: 'Message content to send',
|
|
177
|
-
},
|
|
178
|
-
conversationId: {
|
|
179
|
-
type: 'string',
|
|
180
|
-
description: 'Optional: conversation ID for threading (auto-generated if omitted)',
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
required: ['message'],
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
];
|
|
41
|
+
// Tool definitions live in `./mcp-tool-definitions.ts` so this file can stay
|
|
42
|
+
// focused on routing, lifecycle, and handler implementations.
|
|
187
43
|
// ========================= Service =========================
|
|
188
44
|
/**
|
|
189
45
|
* CrewlyMcpServer exposes Crewly team management capabilities as MCP tools.
|
|
@@ -216,6 +72,13 @@ export class CrewlyMcpServer {
|
|
|
216
72
|
memory;
|
|
217
73
|
transport = null;
|
|
218
74
|
stdioTransportCtor = null;
|
|
75
|
+
geminiCliHelper = null;
|
|
76
|
+
getGeminiCliHelper() {
|
|
77
|
+
if (!this.geminiCliHelper) {
|
|
78
|
+
this.geminiCliHelper = new GeminiCliWorkspaceHelper(getCredentialStoreService());
|
|
79
|
+
}
|
|
80
|
+
return this.geminiCliHelper;
|
|
81
|
+
}
|
|
219
82
|
/**
|
|
220
83
|
* Creates a new CrewlyMcpServer instance.
|
|
221
84
|
*
|
|
@@ -248,30 +111,39 @@ export class CrewlyMcpServer {
|
|
|
248
111
|
return result;
|
|
249
112
|
});
|
|
250
113
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Build the Server + transport + handlers from already-loaded SDK modules.
|
|
116
|
+
* Returns false if any expected SDK symbol is missing (so the caller can
|
|
117
|
+
* decide whether to throw or silently fall back). Both `ensureInitialized`
|
|
118
|
+
* (dynamic import) and `tryInitializeWithRequire` (CommonJS require) feed
|
|
119
|
+
* their loaded modules through here.
|
|
120
|
+
*/
|
|
121
|
+
installSdkModules(serverModule, stdioModule, typesModule) {
|
|
258
122
|
const ServerCtor = serverModule.Server ?? serverModule.default?.Server;
|
|
259
123
|
const StdioTransportCtor = stdioModule.StdioServerTransport ?? stdioModule.default?.StdioServerTransport;
|
|
260
124
|
const listTools = typesModule.ListToolsRequestSchema;
|
|
261
125
|
const callTool = typesModule.CallToolRequestSchema;
|
|
262
126
|
if (!ServerCtor || !StdioTransportCtor || !listTools || !callTool) {
|
|
263
|
-
|
|
127
|
+
return false;
|
|
264
128
|
}
|
|
265
129
|
this.server = new ServerCtor({
|
|
266
130
|
name: MCP_SERVER_CONSTANTS.SERVER_INFO.NAME,
|
|
267
131
|
version: MCP_SERVER_CONSTANTS.SERVER_INFO.VERSION,
|
|
268
|
-
}, {
|
|
269
|
-
capabilities: {
|
|
270
|
-
tools: {},
|
|
271
|
-
},
|
|
272
|
-
});
|
|
132
|
+
}, { capabilities: { tools: {} } });
|
|
273
133
|
this.stdioTransportCtor = StdioTransportCtor;
|
|
274
134
|
this.registerHandlers({ listTools, callTool });
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
async ensureInitialized() {
|
|
138
|
+
if (this.server && this.stdioTransportCtor) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const serverModule = (await import('@modelcontextprotocol/sdk/server/index.js'));
|
|
142
|
+
const stdioModule = (await import('@modelcontextprotocol/sdk/server/stdio.js'));
|
|
143
|
+
const typesModule = (await import('@modelcontextprotocol/sdk/types.js'));
|
|
144
|
+
if (!this.installSdkModules(serverModule, stdioModule, typesModule)) {
|
|
145
|
+
throw new Error('Failed to load MCP server SDK modules');
|
|
146
|
+
}
|
|
275
147
|
}
|
|
276
148
|
tryInitializeWithRequire() {
|
|
277
149
|
if (this.server && this.stdioTransportCtor) {
|
|
@@ -285,23 +157,7 @@ export class CrewlyMcpServer {
|
|
|
285
157
|
const serverModule = req('@modelcontextprotocol/sdk/server/index.js');
|
|
286
158
|
const stdioModule = req('@modelcontextprotocol/sdk/server/stdio.js');
|
|
287
159
|
const typesModule = req('@modelcontextprotocol/sdk/types.js');
|
|
288
|
-
|
|
289
|
-
const StdioTransportCtor = stdioModule.StdioServerTransport ?? stdioModule.default?.StdioServerTransport;
|
|
290
|
-
const listTools = typesModule.ListToolsRequestSchema;
|
|
291
|
-
const callTool = typesModule.CallToolRequestSchema;
|
|
292
|
-
if (!ServerCtor || !StdioTransportCtor || !listTools || !callTool) {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
this.server = new ServerCtor({
|
|
296
|
-
name: MCP_SERVER_CONSTANTS.SERVER_INFO.NAME,
|
|
297
|
-
version: MCP_SERVER_CONSTANTS.SERVER_INFO.VERSION,
|
|
298
|
-
}, {
|
|
299
|
-
capabilities: {
|
|
300
|
-
tools: {},
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
this.stdioTransportCtor = StdioTransportCtor;
|
|
304
|
-
this.registerHandlers({ listTools, callTool });
|
|
160
|
+
this.installSdkModules(serverModule, stdioModule, typesModule);
|
|
305
161
|
}
|
|
306
162
|
catch {
|
|
307
163
|
// Ignore in environments where `require` cannot load ESM SDK modules.
|
|
@@ -330,6 +186,18 @@ export class CrewlyMcpServer {
|
|
|
330
186
|
return await this.handleRecallMemory(args);
|
|
331
187
|
case 'crewly_send_message':
|
|
332
188
|
return await this.handleSendMessage(args);
|
|
189
|
+
case 'crewly_credential_list':
|
|
190
|
+
return await this.handleCredentialList(args);
|
|
191
|
+
case 'crewly_credential_add_api_key':
|
|
192
|
+
return await this.handleCredentialAddApiKey(args);
|
|
193
|
+
case 'crewly_credential_oauth_import_gemini_cli':
|
|
194
|
+
return await this.handleCredentialImportGeminiCli(args);
|
|
195
|
+
case 'crewly_credential_clear_gemini_cli_file':
|
|
196
|
+
return await this.handleCredentialClearGeminiCliFile();
|
|
197
|
+
case 'crewly_credential_delete':
|
|
198
|
+
return await this.handleCredentialDelete(args);
|
|
199
|
+
case 'crewly_execute_skill':
|
|
200
|
+
return await this.handleExecuteSkill(args);
|
|
333
201
|
default:
|
|
334
202
|
return this.errorResult(`Unknown tool: ${name}`);
|
|
335
203
|
}
|
|
@@ -339,6 +207,31 @@ export class CrewlyMcpServer {
|
|
|
339
207
|
return this.errorResult(`Tool "${name}" failed: ${message}`);
|
|
340
208
|
}
|
|
341
209
|
}
|
|
210
|
+
// ========================= Member formatters =========================
|
|
211
|
+
/**
|
|
212
|
+
* Format a TeamMember for an MCP response. Three variants share the
|
|
213
|
+
* same base (id/name/role/agentStatus/workingStatus); `includeRuntime`
|
|
214
|
+
* adds `runtimeType` + `sessionName`, and `includeTickets` adds
|
|
215
|
+
* `currentTickets`. Keeping all three paths in one place so that a
|
|
216
|
+
* field added to the member shape only needs to be surfaced once.
|
|
217
|
+
*/
|
|
218
|
+
formatMember(m, opts = {}) {
|
|
219
|
+
const base = {
|
|
220
|
+
id: m.id,
|
|
221
|
+
name: m.name,
|
|
222
|
+
role: m.role,
|
|
223
|
+
agentStatus: m.agentStatus,
|
|
224
|
+
workingStatus: m.workingStatus,
|
|
225
|
+
};
|
|
226
|
+
if (opts.includeRuntime) {
|
|
227
|
+
base.runtimeType = m.runtimeType;
|
|
228
|
+
base.sessionName = m.sessionName;
|
|
229
|
+
}
|
|
230
|
+
if (opts.includeTickets) {
|
|
231
|
+
base.currentTickets = m.currentTickets;
|
|
232
|
+
}
|
|
233
|
+
return base;
|
|
234
|
+
}
|
|
342
235
|
// ========================= Tool Handlers =========================
|
|
343
236
|
/**
|
|
344
237
|
* Handle crewly_get_teams: list all teams and their members.
|
|
@@ -364,15 +257,7 @@ export class CrewlyMcpServer {
|
|
|
364
257
|
name: team.name,
|
|
365
258
|
description: team.description,
|
|
366
259
|
memberCount: team.members.length,
|
|
367
|
-
members: team.members.map((m) => ({
|
|
368
|
-
id: m.id,
|
|
369
|
-
name: m.name,
|
|
370
|
-
role: m.role,
|
|
371
|
-
agentStatus: m.agentStatus,
|
|
372
|
-
workingStatus: m.workingStatus,
|
|
373
|
-
runtimeType: m.runtimeType,
|
|
374
|
-
sessionName: m.sessionName,
|
|
375
|
-
})),
|
|
260
|
+
members: team.members.map((m) => this.formatMember(m, { includeRuntime: true })),
|
|
376
261
|
projectIds: team.projectIds,
|
|
377
262
|
}));
|
|
378
263
|
return this.successResult(result);
|
|
@@ -386,10 +271,14 @@ export class CrewlyMcpServer {
|
|
|
386
271
|
async handleCreateTeam(args) {
|
|
387
272
|
const name = args.name;
|
|
388
273
|
const description = args.description;
|
|
389
|
-
const
|
|
390
|
-
if (!name
|
|
391
|
-
return this.errorResult('Team name
|
|
274
|
+
const rawMembers = args.members;
|
|
275
|
+
if (!name) {
|
|
276
|
+
return this.errorResult('Team name is required');
|
|
277
|
+
}
|
|
278
|
+
if (!Array.isArray(rawMembers) || rawMembers.length === 0) {
|
|
279
|
+
return this.errorResult('At least one member is required (members must be a non-empty array)');
|
|
392
280
|
}
|
|
281
|
+
const memberSpecs = rawMembers;
|
|
393
282
|
const teamId = uuidv4();
|
|
394
283
|
const now = new Date().toISOString();
|
|
395
284
|
const members = memberSpecs.map((spec) => {
|
|
@@ -454,8 +343,9 @@ export class CrewlyMcpServer {
|
|
|
454
343
|
if (!member) {
|
|
455
344
|
return this.errorResult(`Member not found: ${memberId} in team "${team.name}"`);
|
|
456
345
|
}
|
|
457
|
-
// Add task to member's ticket list
|
|
458
|
-
|
|
346
|
+
// Add task to member's ticket list. Include a uuid tail so two
|
|
347
|
+
// assignments in the same millisecond can't collide.
|
|
348
|
+
const ticketId = `mcp-task-${Date.now()}-${uuidv4().slice(0, 8)}`;
|
|
459
349
|
if (!member.currentTickets) {
|
|
460
350
|
member.currentTickets = [];
|
|
461
351
|
}
|
|
@@ -492,16 +382,10 @@ export class CrewlyMcpServer {
|
|
|
492
382
|
}
|
|
493
383
|
return this.successResult({
|
|
494
384
|
team: { id: team.id, name: team.name },
|
|
495
|
-
member: {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
agentStatus: member.agentStatus,
|
|
500
|
-
workingStatus: member.workingStatus,
|
|
501
|
-
runtimeType: member.runtimeType,
|
|
502
|
-
sessionName: member.sessionName,
|
|
503
|
-
currentTickets: member.currentTickets,
|
|
504
|
-
},
|
|
385
|
+
member: this.formatMember(member, {
|
|
386
|
+
includeRuntime: true,
|
|
387
|
+
includeTickets: true,
|
|
388
|
+
}),
|
|
505
389
|
});
|
|
506
390
|
}
|
|
507
391
|
return this.successResult({
|
|
@@ -510,13 +394,7 @@ export class CrewlyMcpServer {
|
|
|
510
394
|
name: team.name,
|
|
511
395
|
memberCount: team.members.length,
|
|
512
396
|
},
|
|
513
|
-
members: team.members.map((m) => (
|
|
514
|
-
id: m.id,
|
|
515
|
-
name: m.name,
|
|
516
|
-
role: m.role,
|
|
517
|
-
agentStatus: m.agentStatus,
|
|
518
|
-
workingStatus: m.workingStatus,
|
|
519
|
-
})),
|
|
397
|
+
members: team.members.map((m) => this.formatMember(m)),
|
|
520
398
|
});
|
|
521
399
|
}
|
|
522
400
|
// Summary of all teams
|
|
@@ -586,6 +464,133 @@ export class CrewlyMcpServer {
|
|
|
586
464
|
});
|
|
587
465
|
}
|
|
588
466
|
// ========================= Helpers =========================
|
|
467
|
+
// ========================= Credential handlers =========================
|
|
468
|
+
/**
|
|
469
|
+
* Handle crewly_credential_list: return credential metadata (no values).
|
|
470
|
+
*/
|
|
471
|
+
async handleCredentialList(args) {
|
|
472
|
+
const type = args.type;
|
|
473
|
+
const provider = args.provider;
|
|
474
|
+
const store = getCredentialStoreService();
|
|
475
|
+
let credentials = await store.listCredentials();
|
|
476
|
+
if (type)
|
|
477
|
+
credentials = credentials.filter((c) => c.type === type);
|
|
478
|
+
if (provider)
|
|
479
|
+
credentials = credentials.filter((c) => c.provider === provider);
|
|
480
|
+
return this.successResult(credentials.map((c) => ({
|
|
481
|
+
id: c.id,
|
|
482
|
+
name: c.name,
|
|
483
|
+
type: c.type,
|
|
484
|
+
provider: c.provider,
|
|
485
|
+
helper: c.helper,
|
|
486
|
+
scopes: c.scopes,
|
|
487
|
+
accountEmail: c.accountEmail,
|
|
488
|
+
status: c.status,
|
|
489
|
+
createdAt: c.createdAt,
|
|
490
|
+
lastUsedAt: c.lastUsedAt,
|
|
491
|
+
expiresAt: c.expiresAt,
|
|
492
|
+
})));
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Handle crewly_credential_add_api_key: store an API key.
|
|
496
|
+
*/
|
|
497
|
+
async handleCredentialAddApiKey(args) {
|
|
498
|
+
const name = args.name;
|
|
499
|
+
const provider = args.provider;
|
|
500
|
+
const value = args.value;
|
|
501
|
+
if (!name || !provider || !value) {
|
|
502
|
+
return this.errorResult('name, provider, and value are required');
|
|
503
|
+
}
|
|
504
|
+
const cred = await getCredentialStoreService().addApiKey({ name, provider, value });
|
|
505
|
+
return this.successResult({
|
|
506
|
+
id: cred.id,
|
|
507
|
+
name: cred.name,
|
|
508
|
+
provider: cred.provider,
|
|
509
|
+
type: cred.type,
|
|
510
|
+
createdAt: cred.createdAt,
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Handle crewly_credential_oauth_import_gemini_cli: capture the current
|
|
515
|
+
* gemini-cli-workspace extension login into an encrypted Crewly credential.
|
|
516
|
+
*/
|
|
517
|
+
async handleCredentialImportGeminiCli(args) {
|
|
518
|
+
const name = args.name;
|
|
519
|
+
if (!name) {
|
|
520
|
+
return this.errorResult('name is required');
|
|
521
|
+
}
|
|
522
|
+
try {
|
|
523
|
+
const payload = await this.getGeminiCliHelper().captureFromFile();
|
|
524
|
+
const cred = await getCredentialStoreService().addOAuth({
|
|
525
|
+
name,
|
|
526
|
+
provider: 'google',
|
|
527
|
+
helper: 'gemini-cli-workspace',
|
|
528
|
+
payload,
|
|
529
|
+
});
|
|
530
|
+
return this.successResult({
|
|
531
|
+
id: cred.id,
|
|
532
|
+
name: cred.name,
|
|
533
|
+
accountEmail: cred.accountEmail,
|
|
534
|
+
scopes: cred.scopes,
|
|
535
|
+
type: cred.type,
|
|
536
|
+
helper: cred.helper,
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
catch (err) {
|
|
540
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
541
|
+
return this.errorResult(message);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Handle crewly_credential_clear_gemini_cli_file: delete the extension's
|
|
546
|
+
* cached token file so the next extension login captures a fresh account.
|
|
547
|
+
*/
|
|
548
|
+
async handleCredentialClearGeminiCliFile() {
|
|
549
|
+
await this.getGeminiCliHelper().clearExtensionFile();
|
|
550
|
+
return this.successResult({ cleared: true });
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Handle crewly_credential_delete: remove a credential.
|
|
554
|
+
*/
|
|
555
|
+
async handleCredentialDelete(args) {
|
|
556
|
+
const id = args.id;
|
|
557
|
+
if (!id)
|
|
558
|
+
return this.errorResult('id is required');
|
|
559
|
+
try {
|
|
560
|
+
await getCredentialStoreService().deleteCredential(id);
|
|
561
|
+
return this.successResult({ deleted: true, id });
|
|
562
|
+
}
|
|
563
|
+
catch (err) {
|
|
564
|
+
return this.errorResult(err instanceof Error ? err.message : String(err));
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Handle crewly_execute_skill: run a skill with optional credential bindings.
|
|
569
|
+
*/
|
|
570
|
+
async handleExecuteSkill(args) {
|
|
571
|
+
const skillId = args.skillId;
|
|
572
|
+
if (!skillId)
|
|
573
|
+
return this.errorResult('skillId is required');
|
|
574
|
+
const credentialBindings = args.credentialBindings;
|
|
575
|
+
const context = {
|
|
576
|
+
agentId: args.agentId || 'mcp-agent',
|
|
577
|
+
roleId: args.roleId || 'default',
|
|
578
|
+
userInput: args.userInput,
|
|
579
|
+
credentialBindings,
|
|
580
|
+
};
|
|
581
|
+
try {
|
|
582
|
+
const result = await getSkillExecutorService().executeSkill(skillId, context);
|
|
583
|
+
return this.successResult({
|
|
584
|
+
success: result.success,
|
|
585
|
+
output: result.output,
|
|
586
|
+
error: result.error,
|
|
587
|
+
durationMs: result.durationMs,
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
catch (err) {
|
|
591
|
+
return this.errorResult(err instanceof Error ? err.message : String(err));
|
|
592
|
+
}
|
|
593
|
+
}
|
|
589
594
|
/**
|
|
590
595
|
* Create a success result with JSON-serialized content.
|
|
591
596
|
*
|