crewly 1.8.9 → 1.8.11

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.
Files changed (241) hide show
  1. package/config/constants.d.ts.map +1 -0
  2. package/config/index.d.ts.map +1 -0
  3. package/config/roles/_common/memory-instructions.md +6 -5
  4. package/config/roles/_common/wiki-instructions.md +49 -0
  5. package/config/roles/architect/prompt.md +2 -2
  6. package/config/roles/backend-developer/prompt.md +2 -2
  7. package/config/roles/designer/prompt.md +2 -2
  8. package/config/roles/developer/prompt.md +2 -2
  9. package/config/roles/frontend-developer/prompt.md +2 -2
  10. package/config/roles/fullstack-dev/prompt.md +2 -2
  11. package/config/roles/generalist/prompt.md +2 -2
  12. package/config/roles/ops/prompt.md +2 -2
  13. package/config/roles/orchestrator/prompt.md +135 -11
  14. package/config/roles/product-manager/prompt.md +2 -2
  15. package/config/roles/qa/prompt.md +2 -2
  16. package/config/roles/qa-engineer/prompt.md +2 -2
  17. package/config/roles/researcher/prompt.md +15 -6
  18. package/config/roles/sales/prompt.md +2 -2
  19. package/config/roles/support/prompt.md +2 -2
  20. package/config/roles/team-leader/prompt.md +17 -2
  21. package/config/roles/tpm/prompt.md +2 -2
  22. package/config/roles/ux-designer/prompt.md +2 -2
  23. package/config/skills/orchestrator/wiki-cleanup/SKILL.md +89 -0
  24. package/config/skills/orchestrator/wiki-cleanup/execute.sh +139 -0
  25. package/config/skills/orchestrator/wiki-lint/SKILL.md +75 -0
  26. package/config/skills/orchestrator/wiki-lint/execute.sh +66 -0
  27. package/config/skills/orchestrator/wiki-migrate/SKILL.md +103 -0
  28. package/config/skills/orchestrator/wiki-migrate/execute.sh +82 -0
  29. package/config/skills/orchestrator/wiki-process-queue/SKILL.md +9 -1
  30. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +169 -0
  31. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -0
  32. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +1779 -0
  33. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -0
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +18 -0
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +63 -0
  37. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +5 -1
  40. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  41. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +109 -0
  42. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +418 -4
  44. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  46. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +11 -1
  47. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  48. package/dist/backend/backend/src/index.d.ts.map +1 -1
  49. package/dist/backend/backend/src/index.js +64 -0
  50. package/dist/backend/backend/src/index.js.map +1 -1
  51. package/dist/backend/backend/src/index.js.orc-bak-20260529 +3130 -0
  52. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +513 -0
  53. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
  54. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +1568 -0
  55. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
  56. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +86 -0
  57. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +1 -0
  58. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +147 -0
  59. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +1 -0
  60. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
  61. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
  63. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
  64. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
  65. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
  66. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
  67. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
  68. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +74 -0
  69. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +1 -0
  70. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +140 -0
  71. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +1 -0
  72. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
  73. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +279 -0
  75. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
  76. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +340 -0
  77. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +1176 -0
  79. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
  80. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +79 -0
  81. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +145 -0
  83. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +1 -0
  84. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
  85. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
  86. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
  87. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
  88. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +16 -0
  89. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
  90. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +16 -0
  91. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
  92. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
  93. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
  94. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
  95. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
  96. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +141 -0
  97. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
  98. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +310 -0
  99. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
  100. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
  101. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
  102. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
  103. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
  104. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
  105. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
  106. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
  107. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
  108. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
  109. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
  110. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
  111. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
  112. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
  113. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
  114. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
  115. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
  116. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +135 -0
  117. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
  118. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +1937 -0
  119. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
  120. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +1 -1
  121. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +429 -0
  122. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +1 -0
  123. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +852 -0
  124. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +1 -0
  125. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +171 -0
  126. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
  127. package/dist/backend/backend/src/services/project/task-tracking.service.js +725 -0
  128. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -0
  129. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +50 -0
  131. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  132. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
  133. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +45 -0
  135. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  136. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +34 -1
  138. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +118 -0
  140. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +1 -0
  141. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +326 -0
  142. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +1 -0
  143. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts +72 -0
  144. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -0
  145. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +186 -0
  146. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -0
  147. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +4 -1
  148. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
  149. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +24 -1
  150. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
  151. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
  152. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
  153. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
  154. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
  155. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts +160 -0
  156. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -0
  157. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +399 -0
  158. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -0
  159. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts +182 -0
  160. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -0
  161. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +505 -0
  162. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -0
  163. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +232 -0
  164. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -0
  165. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +1416 -0
  166. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -0
  167. package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
  168. package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
  169. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +102 -0
  170. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
  171. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +84 -0
  172. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -0
  173. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +156 -0
  174. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -0
  175. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +90 -0
  176. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
  177. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +190 -0
  178. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -0
  179. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +164 -0
  180. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -0
  181. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +675 -0
  182. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -0
  183. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  184. package/dist/backend/backend/src/services/workflow/cron-task.service.js +65 -0
  185. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  186. package/dist/backend/backend/src/types/auto-assign.types.d.ts +271 -0
  187. package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +1 -0
  188. package/dist/backend/backend/src/types/auto-assign.types.js +136 -0
  189. package/dist/backend/backend/src/types/auto-assign.types.js.map +1 -0
  190. package/dist/backend/backend/src/types/cron-task.types.d.ts +16 -1
  191. package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
  192. package/dist/backend/backend/src/utils/esm-require.utils.d.ts +111 -0
  193. package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +1 -0
  194. package/dist/backend/backend/src/utils/esm-require.utils.js +124 -0
  195. package/dist/backend/backend/src/utils/esm-require.utils.js.map +1 -0
  196. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +220 -0
  197. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -0
  198. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +37 -0
  199. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -0
  200. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +56 -0
  201. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +1 -0
  202. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +91 -0
  203. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +1 -0
  204. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
  205. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
  206. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +304 -0
  207. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
  208. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +115 -0
  209. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +1 -0
  210. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +215 -0
  211. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +1 -0
  212. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +78 -0
  213. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +1 -0
  214. package/dist/cli/backend/src/services/memory/embedding-provider.js +179 -0
  215. package/dist/cli/backend/src/services/memory/embedding-provider.js.map +1 -0
  216. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +331 -0
  217. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +1 -0
  218. package/dist/cli/backend/src/services/memory/vector-store.service.js +814 -0
  219. package/dist/cli/backend/src/services/memory/vector-store.service.js.map +1 -0
  220. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +171 -0
  221. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
  222. package/dist/cli/backend/src/services/project/task-tracking.service.js +725 -0
  223. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -0
  224. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
  225. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  226. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +45 -0
  227. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  228. package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
  229. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
  230. package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
  231. package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
  232. package/dist/cli/cli/src/index.js +0 -0
  233. package/frontend/dist/assets/{index-db3f5041.css → index-068bb4f6.css} +10 -1
  234. package/frontend/dist/assets/index-c24ceb15.js +4960 -0
  235. package/frontend/dist/index.html +2 -2
  236. package/package.json +1 -1
  237. package/config/skills/agent/core/query-knowledge/SKILL.md +0 -87
  238. package/config/skills/agent/core/query-knowledge/execute.sh +0 -30
  239. package/config/skills/orchestrator/query-knowledge/SKILL.md +0 -75
  240. package/config/skills/orchestrator/query-knowledge/execute.sh +0 -30
  241. 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"}