crewly 1.8.9 → 1.8.12
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/constants.d.ts.map +1 -0
- package/config/index.d.ts.map +1 -0
- package/config/roles/_common/memory-instructions.md +6 -5
- package/config/roles/_common/wiki-instructions.md +49 -0
- package/config/roles/architect/prompt.md +2 -2
- package/config/roles/backend-developer/prompt.md +2 -2
- package/config/roles/designer/prompt.md +2 -2
- package/config/roles/developer/prompt.md +2 -2
- package/config/roles/frontend-developer/prompt.md +2 -2
- package/config/roles/fullstack-dev/prompt.md +2 -2
- package/config/roles/generalist/prompt.md +2 -2
- package/config/roles/ops/prompt.md +2 -2
- package/config/roles/orchestrator/prompt.md +135 -11
- package/config/roles/product-manager/prompt.md +2 -2
- package/config/roles/qa/prompt.md +2 -2
- package/config/roles/qa-engineer/prompt.md +2 -2
- package/config/roles/researcher/prompt.md +15 -6
- package/config/roles/sales/prompt.md +2 -2
- package/config/roles/support/prompt.md +2 -2
- package/config/roles/team-leader/prompt.md +17 -2
- package/config/roles/tpm/prompt.md +2 -2
- package/config/roles/ux-designer/prompt.md +2 -2
- package/config/skills/orchestrator/wiki-cleanup/SKILL.md +89 -0
- package/config/skills/orchestrator/wiki-cleanup/execute.sh +139 -0
- package/config/skills/orchestrator/wiki-lint/SKILL.md +75 -0
- package/config/skills/orchestrator/wiki-lint/execute.sh +66 -0
- package/config/skills/orchestrator/wiki-migrate/SKILL.md +103 -0
- package/config/skills/orchestrator/wiki-migrate/execute.sh +82 -0
- package/config/skills/orchestrator/wiki-process-queue/SKILL.md +9 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +169 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +1779 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +63 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +5 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +109 -0
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +419 -4
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +11 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +78 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/index.js.orc-bak-20260529 +3130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +513 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +1568 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +86 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +147 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +74 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +140 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +279 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +340 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +1176 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +145 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +16 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +16 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +141 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +310 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +135 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +1937 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +1 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +429 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +852 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +171 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js +725 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +50 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- 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 +45 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +34 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +118 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +326 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts +72 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +186 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +27 -4
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +133 -10
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +18 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +15 -4
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts +160 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +399 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts +182 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +505 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +232 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +1416 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +102 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +104 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +229 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +90 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +190 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +164 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +675 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +65 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/auto-assign.types.js +136 -0
- package/dist/backend/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/backend/backend/src/types/cron-task.types.d.ts +16 -1
- package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +111 -0
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js +124 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +220 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +37 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +56 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +91 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +304 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +115 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +215 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +78 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.js +179 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +1 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +331 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.js +814 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +1 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +171 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.js +725 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +45 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
- package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/cli/cli/src/index.js +0 -0
- package/frontend/dist/assets/{index-db3f5041.css → index-068bb4f6.css} +10 -1
- package/frontend/dist/assets/index-c24ceb15.js +4960 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/config/skills/agent/core/query-knowledge/SKILL.md +0 -87
- package/config/skills/agent/core/query-knowledge/execute.sh +0 -30
- package/config/skills/orchestrator/query-knowledge/SKILL.md +0 -75
- package/config/skills/orchestrator/query-knowledge/execute.sh +0 -30
- package/frontend/dist/assets/index-cc115bb4.js +0 -4926
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAiB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAA0B,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAWL,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Bridge
|
|
3
|
+
*
|
|
4
|
+
* Converts external MCP server tools into Crewly Agent ToolDefinitions
|
|
5
|
+
* so they can be used alongside built-in tools during agent execution.
|
|
6
|
+
* All MCP-sourced tools default to 'sensitive' classification for audit
|
|
7
|
+
* purposes unless explicitly overridden.
|
|
8
|
+
*
|
|
9
|
+
* @module services/agent/crewly-agent/mcp-tool-bridge
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import type { McpClientService, McpToolInfo, McpServerConfig } from '../../mcp-client.js';
|
|
13
|
+
import type { ToolDefinition, ToolSensitivity } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Prefix applied to MCP tool names to avoid collisions with built-in tools.
|
|
16
|
+
*/
|
|
17
|
+
export declare const MCP_TOOL_PREFIX: "mcp_";
|
|
18
|
+
/**
|
|
19
|
+
* Default sensitivity for MCP-sourced tools.
|
|
20
|
+
* External tools are classified as 'sensitive' because they interact
|
|
21
|
+
* with systems outside the agent's direct control.
|
|
22
|
+
*/
|
|
23
|
+
export declare const MCP_DEFAULT_SENSITIVITY: ToolSensitivity;
|
|
24
|
+
/**
|
|
25
|
+
* Configuration for MCP tool sensitivity overrides.
|
|
26
|
+
* Maps `serverName:toolName` or just `toolName` to a sensitivity level.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const overrides: McpSensitivityOverrides = {
|
|
31
|
+
* 'filesystem:read_file': 'safe',
|
|
32
|
+
* 'github:create_issue': 'sensitive',
|
|
33
|
+
* 'admin:drop_database': 'destructive',
|
|
34
|
+
* };
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export type McpSensitivityOverrides = Record<string, ToolSensitivity>;
|
|
38
|
+
/**
|
|
39
|
+
* Convert a JSON Schema object from an MCP tool into a Zod schema.
|
|
40
|
+
*
|
|
41
|
+
* MCP tools declare their input using JSON Schema. The AI SDK expects
|
|
42
|
+
* Zod schemas. This function creates a z.object({}) passthrough schema
|
|
43
|
+
* that accepts any object — actual validation is done server-side by
|
|
44
|
+
* the MCP server itself.
|
|
45
|
+
*
|
|
46
|
+
* @param inputSchema - JSON Schema from the MCP tool definition
|
|
47
|
+
* @returns A Zod schema that passes through any object
|
|
48
|
+
*/
|
|
49
|
+
export declare function jsonSchemaToZodPassthrough(inputSchema: Record<string, unknown>): z.ZodType;
|
|
50
|
+
/**
|
|
51
|
+
* Build the namespaced tool name for an MCP tool.
|
|
52
|
+
*
|
|
53
|
+
* Format: `mcp_{serverName}_{toolName}` to prevent collisions
|
|
54
|
+
* with built-in Crewly tools and tools from other MCP servers.
|
|
55
|
+
*
|
|
56
|
+
* @param serverName - Name of the MCP server
|
|
57
|
+
* @param toolName - Original tool name from the MCP server
|
|
58
|
+
* @returns Namespaced tool name
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildMcpToolName(serverName: string, toolName: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the sensitivity level for an MCP tool.
|
|
63
|
+
*
|
|
64
|
+
* Checks overrides in order of specificity:
|
|
65
|
+
* 1. `serverName:toolName` (most specific)
|
|
66
|
+
* 2. `toolName` (tool-level default)
|
|
67
|
+
* 3. Falls back to MCP_DEFAULT_SENSITIVITY ('sensitive')
|
|
68
|
+
*
|
|
69
|
+
* @param serverName - Name of the MCP server
|
|
70
|
+
* @param toolName - Original tool name
|
|
71
|
+
* @param overrides - Optional sensitivity overrides map
|
|
72
|
+
* @returns Resolved sensitivity level
|
|
73
|
+
*/
|
|
74
|
+
export declare function resolveSensitivity(serverName: string, toolName: string, overrides?: McpSensitivityOverrides): ToolSensitivity;
|
|
75
|
+
/**
|
|
76
|
+
* Convert a single MCP tool into a Crewly ToolDefinition.
|
|
77
|
+
*
|
|
78
|
+
* The resulting tool definition:
|
|
79
|
+
* - Has a namespaced name (`mcp_{server}_{tool}`)
|
|
80
|
+
* - Uses a passthrough Zod schema for input validation
|
|
81
|
+
* - Delegates execution to McpClientService.callTool()
|
|
82
|
+
* - Defaults to 'sensitive' classification for auditing
|
|
83
|
+
*
|
|
84
|
+
* @param mcpClient - The MCP client service for executing tool calls
|
|
85
|
+
* @param toolInfo - Tool metadata from the MCP server
|
|
86
|
+
* @param overrides - Optional sensitivity overrides
|
|
87
|
+
* @returns A ToolDefinition compatible with the Crewly Agent runtime
|
|
88
|
+
*/
|
|
89
|
+
export declare function convertMcpTool(mcpClient: McpClientService, toolInfo: McpToolInfo, overrides?: McpSensitivityOverrides): ToolDefinition;
|
|
90
|
+
/**
|
|
91
|
+
* Load all tools from connected MCP servers and convert them to ToolDefinitions.
|
|
92
|
+
*
|
|
93
|
+
* This is the primary entry point for integrating MCP tools into the agent
|
|
94
|
+
* runtime. It queries all connected MCP servers, converts their tools to
|
|
95
|
+
* the Crewly ToolDefinition format, and returns a map ready to merge with
|
|
96
|
+
* the built-in tool registry.
|
|
97
|
+
*
|
|
98
|
+
* @param mcpClient - The MCP client service with active server connections
|
|
99
|
+
* @param overrides - Optional sensitivity overrides
|
|
100
|
+
* @returns Map of namespaced tool name -> ToolDefinition
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const mcpClient = new McpClientService();
|
|
105
|
+
* await mcpClient.connectServer('filesystem', config);
|
|
106
|
+
* const mcpTools = loadMcpTools(mcpClient);
|
|
107
|
+
* // mcpTools = { mcp_filesystem_read_file: {...}, mcp_filesystem_write_file: {...} }
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare function loadMcpTools(mcpClient: McpClientService, overrides?: McpSensitivityOverrides): Record<string, ToolDefinition>;
|
|
111
|
+
/**
|
|
112
|
+
* Connect to MCP servers and load their tools in one step.
|
|
113
|
+
*
|
|
114
|
+
* Convenience function that handles the full lifecycle:
|
|
115
|
+
* 1. Connects to all configured MCP servers (tolerates failures)
|
|
116
|
+
* 2. Loads and converts all available tools
|
|
117
|
+
* 3. Returns tools ready to merge into the agent's tool registry
|
|
118
|
+
*
|
|
119
|
+
* @param mcpClient - The MCP client service instance
|
|
120
|
+
* @param serverConfigs - Map of server name -> server configuration
|
|
121
|
+
* @param overrides - Optional sensitivity overrides
|
|
122
|
+
* @returns Object with loaded tools and any connection errors
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const { tools, errors } = await connectAndLoadMcpTools(mcpClient, {
|
|
127
|
+
* filesystem: { command: 'npx', args: ['-y', '@anthropic/mcp-filesystem'] },
|
|
128
|
+
* });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function connectAndLoadMcpTools(mcpClient: McpClientService, serverConfigs: Record<string, McpServerConfig>, overrides?: McpSensitivityOverrides): Promise<{
|
|
132
|
+
tools: Record<string, ToolDefinition>;
|
|
133
|
+
errors: Map<string, Error>;
|
|
134
|
+
}>;
|
|
135
|
+
//# sourceMappingURL=mcp-tool-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-bridge.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/mcp-tool-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,MAAe,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,eAA6B,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,CAAC,CAAC,OAAO,CAeX;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,uBAAuB,GAClC,eAAe,CAYjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,WAAW,EACrB,SAAS,CAAC,EAAE,uBAAuB,GAClC,cAAc,CAwChB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,SAAS,CAAC,EAAE,uBAAuB,GAClC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAUhC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC9C,SAAS,CAAC,EAAE,uBAAuB,GAClC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,CAAC,CAIhF"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Bridge
|
|
3
|
+
*
|
|
4
|
+
* Converts external MCP server tools into Crewly Agent ToolDefinitions
|
|
5
|
+
* so they can be used alongside built-in tools during agent execution.
|
|
6
|
+
* All MCP-sourced tools default to 'sensitive' classification for audit
|
|
7
|
+
* purposes unless explicitly overridden.
|
|
8
|
+
*
|
|
9
|
+
* @module services/agent/crewly-agent/mcp-tool-bridge
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* Prefix applied to MCP tool names to avoid collisions with built-in tools.
|
|
14
|
+
*/
|
|
15
|
+
export const MCP_TOOL_PREFIX = 'mcp_';
|
|
16
|
+
/**
|
|
17
|
+
* Default sensitivity for MCP-sourced tools.
|
|
18
|
+
* External tools are classified as 'sensitive' because they interact
|
|
19
|
+
* with systems outside the agent's direct control.
|
|
20
|
+
*/
|
|
21
|
+
export const MCP_DEFAULT_SENSITIVITY = 'sensitive';
|
|
22
|
+
/**
|
|
23
|
+
* Convert a JSON Schema object from an MCP tool into a Zod schema.
|
|
24
|
+
*
|
|
25
|
+
* MCP tools declare their input using JSON Schema. The AI SDK expects
|
|
26
|
+
* Zod schemas. This function creates a z.object({}) passthrough schema
|
|
27
|
+
* that accepts any object — actual validation is done server-side by
|
|
28
|
+
* the MCP server itself.
|
|
29
|
+
*
|
|
30
|
+
* @param inputSchema - JSON Schema from the MCP tool definition
|
|
31
|
+
* @returns A Zod schema that passes through any object
|
|
32
|
+
*/
|
|
33
|
+
export function jsonSchemaToZodPassthrough(inputSchema) {
|
|
34
|
+
// Extract property names from JSON Schema for documentation,
|
|
35
|
+
// but use a passthrough object since the MCP server validates inputs.
|
|
36
|
+
const properties = inputSchema.properties;
|
|
37
|
+
if (properties && typeof properties === 'object') {
|
|
38
|
+
const shape = {};
|
|
39
|
+
for (const key of Object.keys(properties)) {
|
|
40
|
+
shape[key] = z.unknown().optional().describe(String(properties[key]?.description || key));
|
|
41
|
+
}
|
|
42
|
+
return z.object(shape).passthrough();
|
|
43
|
+
}
|
|
44
|
+
// Fallback: accept any object
|
|
45
|
+
return z.record(z.unknown());
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build the namespaced tool name for an MCP tool.
|
|
49
|
+
*
|
|
50
|
+
* Format: `mcp_{serverName}_{toolName}` to prevent collisions
|
|
51
|
+
* with built-in Crewly tools and tools from other MCP servers.
|
|
52
|
+
*
|
|
53
|
+
* @param serverName - Name of the MCP server
|
|
54
|
+
* @param toolName - Original tool name from the MCP server
|
|
55
|
+
* @returns Namespaced tool name
|
|
56
|
+
*/
|
|
57
|
+
export function buildMcpToolName(serverName, toolName) {
|
|
58
|
+
return `${MCP_TOOL_PREFIX}${serverName}_${toolName}`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the sensitivity level for an MCP tool.
|
|
62
|
+
*
|
|
63
|
+
* Checks overrides in order of specificity:
|
|
64
|
+
* 1. `serverName:toolName` (most specific)
|
|
65
|
+
* 2. `toolName` (tool-level default)
|
|
66
|
+
* 3. Falls back to MCP_DEFAULT_SENSITIVITY ('sensitive')
|
|
67
|
+
*
|
|
68
|
+
* @param serverName - Name of the MCP server
|
|
69
|
+
* @param toolName - Original tool name
|
|
70
|
+
* @param overrides - Optional sensitivity overrides map
|
|
71
|
+
* @returns Resolved sensitivity level
|
|
72
|
+
*/
|
|
73
|
+
export function resolveSensitivity(serverName, toolName, overrides) {
|
|
74
|
+
if (!overrides)
|
|
75
|
+
return MCP_DEFAULT_SENSITIVITY;
|
|
76
|
+
// Check server-specific override first
|
|
77
|
+
const serverSpecific = overrides[`${serverName}:${toolName}`];
|
|
78
|
+
if (serverSpecific)
|
|
79
|
+
return serverSpecific;
|
|
80
|
+
// Check tool-level override
|
|
81
|
+
const toolLevel = overrides[toolName];
|
|
82
|
+
if (toolLevel)
|
|
83
|
+
return toolLevel;
|
|
84
|
+
return MCP_DEFAULT_SENSITIVITY;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Convert a single MCP tool into a Crewly ToolDefinition.
|
|
88
|
+
*
|
|
89
|
+
* The resulting tool definition:
|
|
90
|
+
* - Has a namespaced name (`mcp_{server}_{tool}`)
|
|
91
|
+
* - Uses a passthrough Zod schema for input validation
|
|
92
|
+
* - Delegates execution to McpClientService.callTool()
|
|
93
|
+
* - Defaults to 'sensitive' classification for auditing
|
|
94
|
+
*
|
|
95
|
+
* @param mcpClient - The MCP client service for executing tool calls
|
|
96
|
+
* @param toolInfo - Tool metadata from the MCP server
|
|
97
|
+
* @param overrides - Optional sensitivity overrides
|
|
98
|
+
* @returns A ToolDefinition compatible with the Crewly Agent runtime
|
|
99
|
+
*/
|
|
100
|
+
export function convertMcpTool(mcpClient, toolInfo, overrides) {
|
|
101
|
+
const sensitivity = resolveSensitivity(toolInfo.serverName, toolInfo.name, overrides);
|
|
102
|
+
return {
|
|
103
|
+
description: toolInfo.description
|
|
104
|
+
? `[MCP:${toolInfo.serverName}] ${toolInfo.description}`
|
|
105
|
+
: `[MCP:${toolInfo.serverName}] ${toolInfo.name}`,
|
|
106
|
+
inputSchema: jsonSchemaToZodPassthrough(toolInfo.inputSchema),
|
|
107
|
+
sensitivity,
|
|
108
|
+
execute: async (args) => {
|
|
109
|
+
try {
|
|
110
|
+
const result = await mcpClient.callTool(toolInfo.serverName, toolInfo.name, args);
|
|
111
|
+
// Flatten text content for simpler tool results
|
|
112
|
+
if (!result.isError && result.content.length === 1
|
|
113
|
+
&& result.content[0].type === 'text' && 'text' in result.content[0]) {
|
|
114
|
+
return { success: true, text: result.content[0].text };
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
success: !result.isError,
|
|
118
|
+
content: result.content,
|
|
119
|
+
...(result.isError && { error: 'MCP tool returned an error' }),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
error: `MCP tool call failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Load all tools from connected MCP servers and convert them to ToolDefinitions.
|
|
133
|
+
*
|
|
134
|
+
* This is the primary entry point for integrating MCP tools into the agent
|
|
135
|
+
* runtime. It queries all connected MCP servers, converts their tools to
|
|
136
|
+
* the Crewly ToolDefinition format, and returns a map ready to merge with
|
|
137
|
+
* the built-in tool registry.
|
|
138
|
+
*
|
|
139
|
+
* @param mcpClient - The MCP client service with active server connections
|
|
140
|
+
* @param overrides - Optional sensitivity overrides
|
|
141
|
+
* @returns Map of namespaced tool name -> ToolDefinition
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* const mcpClient = new McpClientService();
|
|
146
|
+
* await mcpClient.connectServer('filesystem', config);
|
|
147
|
+
* const mcpTools = loadMcpTools(mcpClient);
|
|
148
|
+
* // mcpTools = { mcp_filesystem_read_file: {...}, mcp_filesystem_write_file: {...} }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export function loadMcpTools(mcpClient, overrides) {
|
|
152
|
+
const tools = {};
|
|
153
|
+
const mcpToolInfos = mcpClient.listTools();
|
|
154
|
+
for (const toolInfo of mcpToolInfos) {
|
|
155
|
+
const toolName = buildMcpToolName(toolInfo.serverName, toolInfo.name);
|
|
156
|
+
tools[toolName] = convertMcpTool(mcpClient, toolInfo, overrides);
|
|
157
|
+
}
|
|
158
|
+
return tools;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Connect to MCP servers and load their tools in one step.
|
|
162
|
+
*
|
|
163
|
+
* Convenience function that handles the full lifecycle:
|
|
164
|
+
* 1. Connects to all configured MCP servers (tolerates failures)
|
|
165
|
+
* 2. Loads and converts all available tools
|
|
166
|
+
* 3. Returns tools ready to merge into the agent's tool registry
|
|
167
|
+
*
|
|
168
|
+
* @param mcpClient - The MCP client service instance
|
|
169
|
+
* @param serverConfigs - Map of server name -> server configuration
|
|
170
|
+
* @param overrides - Optional sensitivity overrides
|
|
171
|
+
* @returns Object with loaded tools and any connection errors
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const { tools, errors } = await connectAndLoadMcpTools(mcpClient, {
|
|
176
|
+
* filesystem: { command: 'npx', args: ['-y', '@anthropic/mcp-filesystem'] },
|
|
177
|
+
* });
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
export async function connectAndLoadMcpTools(mcpClient, serverConfigs, overrides) {
|
|
181
|
+
const errors = await mcpClient.connectAll(serverConfigs);
|
|
182
|
+
const tools = loadMcpTools(mcpClient, overrides);
|
|
183
|
+
return { tools, errors };
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=mcp-tool-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-bridge.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/mcp-tool-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Agent Model Manager
|
|
3
|
+
*
|
|
4
|
+
* Multi-provider model factory that creates AI SDK model instances
|
|
5
|
+
* from configuration. Supports Anthropic, OpenAI, Google, DeepSeek, and
|
|
6
|
+
* Ollama providers.
|
|
7
|
+
*
|
|
8
|
+
* API keys for cloud providers are resolved through the settings service
|
|
9
|
+
* (skill → runtime → global → env var) and injected into process.env so the
|
|
10
|
+
* provider SDKs can pick them up:
|
|
11
|
+
* - ANTHROPIC_API_KEY
|
|
12
|
+
* - OPENAI_API_KEY
|
|
13
|
+
* - GOOGLE_GENERATIVE_AI_API_KEY
|
|
14
|
+
* - DEEPSEEK_API_KEY (DeepSeek; served via OpenAI-compatible API)
|
|
15
|
+
*
|
|
16
|
+
* Ollama runs locally and does not require an API key.
|
|
17
|
+
* Configure the Ollama base URL via OLLAMA_BASE_URL (default: http://localhost:11434).
|
|
18
|
+
*
|
|
19
|
+
* @module services/agent/crewly-agent/model-manager
|
|
20
|
+
*/
|
|
21
|
+
import type { LanguageModel } from 'ai';
|
|
22
|
+
import { type ModelConfig, type ModelProvider } from './types.js';
|
|
23
|
+
/**
|
|
24
|
+
* Factory for creating AI SDK language model instances from configuration.
|
|
25
|
+
*
|
|
26
|
+
* Uses dynamic imports to avoid loading provider SDKs that aren't needed,
|
|
27
|
+
* keeping the startup cost minimal when only one provider is used.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const manager = new ModelManager();
|
|
32
|
+
* const model = await manager.getModel({ provider: 'anthropic', modelId: 'claude-sonnet-4-20250514' });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class ModelManager {
|
|
36
|
+
/** Cached provider module references to avoid re-importing */
|
|
37
|
+
private providerCache;
|
|
38
|
+
/**
|
|
39
|
+
* Per-instance buffer of parsed DeepSeek-R1 reasoning_content from in-flight
|
|
40
|
+
* and recently-completed HTTP calls. Each `streamText` call to a DeepSeek
|
|
41
|
+
* model triggers one or more fetch calls (one per agentic step); each fetch
|
|
42
|
+
* appends its parsed reasoning to this buffer. Consumer (agent-runner) reads
|
|
43
|
+
* via `consumeDeepseekReasoning()` after `await streamResult` and the buffer
|
|
44
|
+
* resets to `''` on read.
|
|
45
|
+
*
|
|
46
|
+
* **Concurrency:** AgentRunner uses one ModelManager per session and calls
|
|
47
|
+
* streamText serially per session (the rate limiter enforces this).
|
|
48
|
+
* Cross-session concurrency is not a concern because each AgentRunner gets
|
|
49
|
+
* its own ModelManager via `new ModelManager()` in the constructor.
|
|
50
|
+
*/
|
|
51
|
+
private deepseekReasoningBuffer;
|
|
52
|
+
/** Tracks in-flight parsed-SSE handles so we can wait for drain on consume. */
|
|
53
|
+
private deepseekParsedHandles;
|
|
54
|
+
/**
|
|
55
|
+
* Get an AI SDK language model instance for the given configuration.
|
|
56
|
+
*
|
|
57
|
+
* Resolves API keys from settings (with override chain) and injects them
|
|
58
|
+
* into the environment before creating the model, so provider SDKs can find them.
|
|
59
|
+
*
|
|
60
|
+
* @param config - Model configuration specifying provider and model ID
|
|
61
|
+
* @returns AI SDK LanguageModel instance ready for use with generateText
|
|
62
|
+
* @throws Error if the provider is unknown or the SDK is not installed
|
|
63
|
+
*/
|
|
64
|
+
getModel(config?: ModelConfig): Promise<LanguageModel>;
|
|
65
|
+
/**
|
|
66
|
+
* Get provider function, using cache for repeated calls.
|
|
67
|
+
*
|
|
68
|
+
* @param provider - Provider name
|
|
69
|
+
* @returns Function that creates a model from a model ID string
|
|
70
|
+
*/
|
|
71
|
+
private getProviderFunction;
|
|
72
|
+
/**
|
|
73
|
+
* Check which providers have API keys configured (settings + env vars).
|
|
74
|
+
*
|
|
75
|
+
* @returns Object indicating which providers are available
|
|
76
|
+
*/
|
|
77
|
+
getAvailableProviders(): Promise<Record<ModelProvider, boolean>>;
|
|
78
|
+
/**
|
|
79
|
+
* Map model provider name to API key provider name.
|
|
80
|
+
* Only applicable for cloud providers wired through the settings service
|
|
81
|
+
* (anthropic, openai, google, deepseek). Ollama runs locally and is
|
|
82
|
+
* excluded.
|
|
83
|
+
*
|
|
84
|
+
* @param provider - Cloud model provider
|
|
85
|
+
* @returns Corresponding ApiKeyProvider name
|
|
86
|
+
*/
|
|
87
|
+
private static providerToApiKeyProvider;
|
|
88
|
+
/**
|
|
89
|
+
* Ensure the API key for a provider is available in process.env
|
|
90
|
+
* by resolving it from settings if not already present.
|
|
91
|
+
*
|
|
92
|
+
* No-op for 'ollama' (runs locally, no key required). All other providers —
|
|
93
|
+
* including 'deepseek' — flow through the settings service so users can
|
|
94
|
+
* configure them from the UI without touching env vars.
|
|
95
|
+
*
|
|
96
|
+
* @param provider - The model provider
|
|
97
|
+
*/
|
|
98
|
+
private ensureApiKeyInEnv;
|
|
99
|
+
/**
|
|
100
|
+
* Clear the provider cache (useful for testing or reconfiguration).
|
|
101
|
+
* Also clears any buffered DeepSeek reasoning so a fresh test/run starts clean.
|
|
102
|
+
*/
|
|
103
|
+
clearCache(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Build the custom fetch wrapper for the DeepSeek provider.
|
|
106
|
+
*
|
|
107
|
+
* Returns a function with the same signature as `globalThis.fetch` that:
|
|
108
|
+
* 1. Calls native fetch with the supplied input/init.
|
|
109
|
+
* 2. If the response is a streaming SSE body, tees it and parses one branch
|
|
110
|
+
* for `delta.reasoning_content`, accumulating into `this.deepseekReasoningBuffer`.
|
|
111
|
+
* 3. Returns a new Response wrapping the un-tampered passthrough branch as
|
|
112
|
+
* its body, so AI SDK consumes exactly the bytes DeepSeek sent.
|
|
113
|
+
*
|
|
114
|
+
* If the response is not an SSE stream (e.g. error JSON, no body), it is
|
|
115
|
+
* returned unchanged.
|
|
116
|
+
*
|
|
117
|
+
* **Why a method, not a free function:** the wrapper closes over `this` to
|
|
118
|
+
* append to the per-instance reasoning buffer. Each ModelManager instance
|
|
119
|
+
* has its own buffer (one per AgentRunner per session).
|
|
120
|
+
*/
|
|
121
|
+
private makeDeepseekFetch;
|
|
122
|
+
/**
|
|
123
|
+
* Drain any in-flight DeepSeek SSE parser branches and return the accumulated
|
|
124
|
+
* `reasoning_content` string. Resets the buffer to `''` on each call (consume
|
|
125
|
+
* semantics).
|
|
126
|
+
*
|
|
127
|
+
* **Caller contract:** call AFTER `await streamResult` resolves in agent-runner.
|
|
128
|
+
* The AI SDK consumer branch must have been fully drained for the parser branch
|
|
129
|
+
* (which lags slightly due to tee buffering) to have caught up.
|
|
130
|
+
*
|
|
131
|
+
* **Multi-step accumulation:** if a single `streamText` call made multiple HTTP
|
|
132
|
+
* calls (one per agentic step), reasoning from all steps is concatenated in
|
|
133
|
+
* call order — not separated by step boundary. This matches the user-facing
|
|
134
|
+
* mental model of "what was the model's full chain of thought for this turn."
|
|
135
|
+
*
|
|
136
|
+
* **Returns `null` if no reasoning was captured.** Empty string means a fetch
|
|
137
|
+
* happened but produced no reasoning content (e.g. non-R1 DeepSeek model).
|
|
138
|
+
*/
|
|
139
|
+
consumeDeepseekReasoning(): Promise<string | null>;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=model-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-manager.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/model-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAyB,MAAM,YAAY,CAAC;AAazF;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,8DAA8D;IAC9D,OAAO,CAAC,aAAa,CAAgE;IAErF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,uBAAuB,CAAM;IAErC,+EAA+E;IAC/E,OAAO,CAAC,qBAAqB,CAA2B;IAExD;;;;;;;;;OASG;IACG,QAAQ,CAAC,MAAM,GAAE,WAAiD,GAAG,OAAO,CAAC,aAAa,CAAC;IAQjG;;;;;OAKG;YACW,mBAAmB;IAwEjC;;;;OAIG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAoBtE;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAIvC;;;;;;;;;OASG;YACW,iBAAiB;IA0B/B;;;OAGG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;;;;;;;;;;;;;;OAgBG;IACG,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAqBzD"}
|