@cjhyy/code-shell-core 0.5.0-rc.2 → 0.6.0-rc.1

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 (387) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +3 -0
  3. package/dist/agent/agent-definition-registry.js +3 -1
  4. package/dist/agent/agent-definition.d.ts +15 -0
  5. package/dist/agent/agent-definition.js +27 -3
  6. package/dist/arena/context/context-tools.js +47 -4
  7. package/dist/arena/ledger.js +9 -1
  8. package/dist/arena/strategies/utils.d.ts +1 -4
  9. package/dist/arena/strategies/utils.js +7 -84
  10. package/dist/automation/cron-expr.d.ts +10 -0
  11. package/dist/automation/cron-expr.js +23 -5
  12. package/dist/automation/runner.d.ts +21 -4
  13. package/dist/automation/runner.js +48 -12
  14. package/dist/automation/scheduler.d.ts +38 -0
  15. package/dist/automation/scheduler.js +89 -12
  16. package/dist/automation/store.js +5 -2
  17. package/dist/capability-control/disabled-lists.d.ts +25 -0
  18. package/dist/capability-control/disabled-lists.js +57 -0
  19. package/dist/capability-control/overlay.d.ts +15 -0
  20. package/dist/capability-control/overlay.js +27 -0
  21. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  22. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  23. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  24. package/dist/cc-orchestrator/cc-capability.js +53 -0
  25. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  26. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  27. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  28. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  29. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  30. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  31. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  32. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  33. package/dist/cc-orchestrator/index.d.ts +8 -0
  34. package/dist/cc-orchestrator/index.js +8 -0
  35. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  36. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  37. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  38. package/dist/cc-orchestrator/session-discovery.js +125 -0
  39. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  40. package/dist/cc-orchestrator/session-history.js +67 -0
  41. package/dist/cli/agent-server-stdio.d.ts +15 -1
  42. package/dist/cli/agent-server-stdio.js +115 -17
  43. package/dist/cli/agent-server-tcp.js +40 -26
  44. package/dist/context/compaction.d.ts +56 -0
  45. package/dist/context/compaction.js +186 -0
  46. package/dist/context/manager.js +25 -4
  47. package/dist/cost-tracker.js +5 -61
  48. package/dist/credentials/cipher.d.ts +49 -0
  49. package/dist/credentials/cipher.js +45 -0
  50. package/dist/credentials/cookie-jar.d.ts +24 -0
  51. package/dist/credentials/cookie-jar.js +40 -0
  52. package/dist/credentials/index.d.ts +7 -0
  53. package/dist/credentials/index.js +5 -0
  54. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  55. package/dist/credentials/inject-credential-tool.js +130 -0
  56. package/dist/credentials/store.d.ts +72 -0
  57. package/dist/credentials/store.js +184 -0
  58. package/dist/credentials/types.d.ts +56 -0
  59. package/dist/credentials/use-credential-tool.d.ts +29 -0
  60. package/dist/credentials/use-credential-tool.js +205 -0
  61. package/dist/credentials/use-gate.d.ts +56 -0
  62. package/dist/credentials/use-gate.js +52 -0
  63. package/dist/data/model-metadata.d.ts +77 -0
  64. package/dist/data/model-metadata.js +56 -0
  65. package/dist/data/model-metadata.json +216 -0
  66. package/dist/data/openrouter-models.d.ts +18 -7
  67. package/dist/data/openrouter-models.js +35 -8
  68. package/dist/engine/aux-key.d.ts +10 -0
  69. package/dist/engine/aux-key.js +11 -0
  70. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  71. package/dist/engine/dynamic-tool-defs.js +36 -0
  72. package/dist/engine/engine.d.ts +267 -138
  73. package/dist/engine/engine.js +957 -191
  74. package/dist/engine/friendly-error.d.ts +18 -0
  75. package/dist/engine/friendly-error.js +63 -0
  76. package/dist/engine/goal.d.ts +145 -0
  77. package/dist/engine/goal.js +144 -0
  78. package/dist/engine/image-policy.d.ts +13 -0
  79. package/dist/engine/image-policy.js +24 -0
  80. package/dist/engine/model-connections-pool.d.ts +17 -0
  81. package/dist/engine/model-connections-pool.js +66 -0
  82. package/dist/engine/model-facade.d.ts +10 -0
  83. package/dist/engine/model-facade.js +25 -0
  84. package/dist/engine/patch-orphaned-tools.js +3 -0
  85. package/dist/engine/resolve-llm-config.d.ts +16 -0
  86. package/dist/engine/resolve-llm-config.js +44 -0
  87. package/dist/engine/runtime.js +2 -1
  88. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  89. package/dist/engine/sandbox-cache-key.js +9 -0
  90. package/dist/engine/sandbox-config.d.ts +31 -0
  91. package/dist/engine/sandbox-config.js +38 -0
  92. package/dist/engine/session-usage.d.ts +19 -0
  93. package/dist/engine/session-usage.js +25 -0
  94. package/dist/engine/steer-queue.d.ts +32 -0
  95. package/dist/engine/steer-queue.js +26 -0
  96. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  97. package/dist/engine/streaming-tool-queue.js +50 -10
  98. package/dist/engine/turn-loop.d.ts +67 -3
  99. package/dist/engine/turn-loop.js +292 -41
  100. package/dist/engine/types.d.ts +175 -0
  101. package/dist/engine/types.js +13 -0
  102. package/dist/external-agents/config.d.ts +2 -0
  103. package/dist/external-agents/config.js +15 -0
  104. package/dist/external-agents/types.d.ts +31 -0
  105. package/dist/external-agents/types.js +1 -0
  106. package/dist/git/utils.js +11 -6
  107. package/dist/git/worktree.d.ts +48 -0
  108. package/dist/git/worktree.js +86 -10
  109. package/dist/hooks/goal-stop-hook.d.ts +28 -0
  110. package/dist/hooks/goal-stop-hook.js +186 -9
  111. package/dist/hooks/registry.d.ts +8 -0
  112. package/dist/hooks/registry.js +19 -0
  113. package/dist/hooks/shell-runner.js +10 -21
  114. package/dist/index.d.ts +49 -6
  115. package/dist/index.js +60 -4
  116. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  117. package/dist/llm/capabilities/param-specs.js +62 -0
  118. package/dist/llm/capabilities/rules.js +4 -0
  119. package/dist/llm/capabilities/types.d.ts +10 -0
  120. package/dist/llm/client-base.d.ts +28 -1
  121. package/dist/llm/client-base.js +119 -13
  122. package/dist/llm/model-cache.js +4 -2
  123. package/dist/llm/model-pool.d.ts +14 -0
  124. package/dist/llm/model-pool.js +13 -0
  125. package/dist/llm/provider-auth.d.ts +41 -0
  126. package/dist/llm/provider-auth.js +76 -0
  127. package/dist/llm/provider-catalog.d.ts +4 -0
  128. package/dist/llm/providers/anthropic.js +64 -14
  129. package/dist/llm/providers/openai.d.ts +36 -0
  130. package/dist/llm/providers/openai.js +257 -51
  131. package/dist/llm/reasoning-setting.d.ts +3 -3
  132. package/dist/llm/reasoning-setting.js +9 -1
  133. package/dist/llm/stream-watchdog.js +5 -1
  134. package/dist/llm/token-counter.js +9 -2
  135. package/dist/llm/types.d.ts +4 -0
  136. package/dist/logging/sanitize-messages.js +22 -0
  137. package/dist/lsp/manager.d.ts +1 -1
  138. package/dist/lsp/manager.js +40 -10
  139. package/dist/model-catalog/builtin.d.ts +12 -0
  140. package/dist/model-catalog/builtin.js +407 -0
  141. package/dist/model-catalog/gen-connections.d.ts +20 -0
  142. package/dist/model-catalog/gen-connections.js +28 -0
  143. package/dist/model-catalog/index.d.ts +41 -0
  144. package/dist/model-catalog/index.js +90 -0
  145. package/dist/model-catalog/params.d.ts +20 -0
  146. package/dist/model-catalog/params.js +45 -0
  147. package/dist/model-catalog/resolve.d.ts +48 -0
  148. package/dist/model-catalog/resolve.js +33 -0
  149. package/dist/model-catalog/save-entry.d.ts +32 -0
  150. package/dist/model-catalog/save-entry.js +104 -0
  151. package/dist/model-catalog/types.d.ts +561 -0
  152. package/dist/model-catalog/types.js +93 -0
  153. package/dist/model-catalog/upsert.d.ts +9 -0
  154. package/dist/model-catalog/upsert.js +8 -0
  155. package/dist/onboarding.d.ts +12 -82
  156. package/dist/onboarding.js +61 -326
  157. package/dist/plugins/gitOps.d.ts +19 -0
  158. package/dist/plugins/gitOps.js +73 -4
  159. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  160. package/dist/plugins/installer/checkUpdate.js +32 -0
  161. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  162. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  163. package/dist/plugins/installer/codex/convertMcp.d.ts +5 -2
  164. package/dist/plugins/installer/codex/convertMcp.js +45 -5
  165. package/dist/plugins/installer/install.js +25 -1
  166. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  167. package/dist/plugins/installer/installFromArchive.js +134 -0
  168. package/dist/plugins/installer/installFromSource.js +8 -2
  169. package/dist/plugins/installer/loadPluginAgents.js +6 -2
  170. package/dist/plugins/installer/loadPluginMcp.d.ts +9 -2
  171. package/dist/plugins/installer/loadPluginMcp.js +35 -2
  172. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  173. package/dist/plugins/installer/pruneDisabled.js +73 -0
  174. package/dist/plugins/installer/types.d.ts +5 -2
  175. package/dist/plugins/installer/types.js +1 -0
  176. package/dist/plugins/installer/uninstall.js +4 -0
  177. package/dist/plugins/installer/unzip.d.ts +14 -0
  178. package/dist/plugins/installer/unzip.js +82 -0
  179. package/dist/plugins/installer/update.d.ts +14 -0
  180. package/dist/plugins/installer/update.js +53 -21
  181. package/dist/plugins/loadPluginHooks.d.ts +47 -1
  182. package/dist/plugins/loadPluginHooks.js +73 -1
  183. package/dist/plugins/marketplaceManager.d.ts +7 -0
  184. package/dist/plugins/marketplaceManager.js +20 -0
  185. package/dist/plugins/pluginCommandHook.js +4 -18
  186. package/dist/plugins/pluginContent.d.ts +30 -0
  187. package/dist/plugins/pluginContent.js +83 -0
  188. package/dist/plugins/pluginInstaller.d.ts +13 -0
  189. package/dist/plugins/pluginInstaller.js +42 -8
  190. package/dist/plugins/schemas.js +1 -0
  191. package/dist/plugins/types.d.ts +6 -0
  192. package/dist/preset/index.d.ts +7 -1
  193. package/dist/preset/index.js +96 -6
  194. package/dist/product/types.d.ts +1 -1
  195. package/dist/prompt/composer.d.ts +27 -0
  196. package/dist/prompt/composer.js +67 -21
  197. package/dist/prompt/instruction-scanner.js +5 -3
  198. package/dist/prompt/section-loader.js +1 -0
  199. package/dist/prompt/sections/base.md +1 -0
  200. package/dist/prompt/sections/browser.md +10 -0
  201. package/dist/prompt/sections/coding.md +4 -0
  202. package/dist/protocol/chat-session-manager.d.ts +8 -2
  203. package/dist/protocol/chat-session-manager.js +36 -0
  204. package/dist/protocol/chat-session.d.ts +65 -0
  205. package/dist/protocol/chat-session.js +94 -2
  206. package/dist/protocol/client.d.ts +27 -0
  207. package/dist/protocol/client.js +38 -0
  208. package/dist/protocol/server.d.ts +112 -0
  209. package/dist/protocol/server.js +586 -16
  210. package/dist/protocol/transport.js +3 -2
  211. package/dist/protocol/types.d.ts +46 -0
  212. package/dist/protocol/types.js +16 -0
  213. package/dist/quota/credentials.d.ts +3 -0
  214. package/dist/quota/credentials.js +80 -0
  215. package/dist/quota/index.d.ts +36 -0
  216. package/dist/quota/index.js +155 -0
  217. package/dist/quota/types.d.ts +48 -0
  218. package/dist/quota/types.js +13 -0
  219. package/dist/review/review-prompt.d.ts +28 -0
  220. package/dist/review/review-prompt.js +81 -0
  221. package/dist/run/FileRunStore.js +8 -3
  222. package/dist/run/RunApprovalBackend.js +25 -5
  223. package/dist/run/RunManager.d.ts +12 -0
  224. package/dist/run/RunManager.js +35 -0
  225. package/dist/run/factory.d.ts +1 -1
  226. package/dist/runtime/background-shell.d.ts +139 -0
  227. package/dist/runtime/background-shell.js +495 -0
  228. package/dist/runtime/output-clean.d.ts +24 -0
  229. package/dist/runtime/output-clean.js +41 -0
  230. package/dist/runtime/ring-file.d.ts +64 -0
  231. package/dist/runtime/ring-file.js +174 -0
  232. package/dist/runtime/safe-spawn.js +15 -34
  233. package/dist/runtime/spawn-common.d.ts +148 -0
  234. package/dist/runtime/spawn-common.js +303 -0
  235. package/dist/runtime/truncate-output.d.ts +22 -0
  236. package/dist/runtime/truncate-output.js +49 -0
  237. package/dist/runtime/utf8-cut.d.ts +11 -0
  238. package/dist/runtime/utf8-cut.js +23 -0
  239. package/dist/services/auto-dream.d.ts +4 -0
  240. package/dist/services/auto-dream.js +26 -26
  241. package/dist/services/diagnostics.d.ts +1 -2
  242. package/dist/services/diagnostics.js +12 -7
  243. package/dist/services/extract-memories.d.ts +14 -1
  244. package/dist/services/extract-memories.js +45 -6
  245. package/dist/services/memory-orchestrator.d.ts +21 -0
  246. package/dist/services/memory-orchestrator.js +125 -50
  247. package/dist/services/session-memory.js +24 -12
  248. package/dist/session/file-history.d.ts +124 -1
  249. package/dist/session/file-history.js +222 -6
  250. package/dist/session/memory.d.ts +116 -2
  251. package/dist/session/memory.js +250 -28
  252. package/dist/session/session-manager.d.ts +40 -0
  253. package/dist/session/session-manager.js +113 -3
  254. package/dist/session/simple-diff.d.ts +23 -0
  255. package/dist/session/simple-diff.js +84 -0
  256. package/dist/session/transcript.d.ts +25 -1
  257. package/dist/session/transcript.js +35 -2
  258. package/dist/session/undo-target.d.ts +67 -0
  259. package/dist/session/undo-target.js +144 -0
  260. package/dist/settings/disk-defaults.d.ts +9 -2
  261. package/dist/settings/disk-defaults.js +11 -2
  262. package/dist/settings/feature-flags.d.ts +64 -0
  263. package/dist/settings/feature-flags.js +61 -0
  264. package/dist/settings/manager.d.ts +68 -1
  265. package/dist/settings/manager.js +266 -29
  266. package/dist/settings/migrate-config.d.ts +45 -0
  267. package/dist/settings/migrate-config.js +125 -0
  268. package/dist/settings/schema-export.d.ts +25 -0
  269. package/dist/settings/schema-export.js +38 -0
  270. package/dist/settings/schema.d.ts +1186 -771
  271. package/dist/settings/schema.js +268 -97
  272. package/dist/skills/scanner.d.ts +9 -0
  273. package/dist/skills/scanner.js +30 -2
  274. package/dist/stt/resolve-transcribe.d.ts +31 -0
  275. package/dist/stt/resolve-transcribe.js +108 -0
  276. package/dist/stt/transcribe.d.ts +51 -0
  277. package/dist/stt/transcribe.js +65 -0
  278. package/dist/tool-system/browser-bridge.d.ts +226 -0
  279. package/dist/tool-system/browser-bridge.js +163 -0
  280. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  281. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  282. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  283. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  284. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  285. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  286. package/dist/tool-system/builtin/agent-registry.d.ts +12 -0
  287. package/dist/tool-system/builtin/agent-registry.js +8 -0
  288. package/dist/tool-system/builtin/agent.d.ts +21 -1
  289. package/dist/tool-system/builtin/agent.js +489 -42
  290. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  291. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  292. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  293. package/dist/tool-system/builtin/apply-patch/index.js +0 -15
  294. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  295. package/dist/tool-system/builtin/background-jobs.js +124 -0
  296. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  297. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  298. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  299. package/dist/tool-system/builtin/background-work.js +86 -0
  300. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  301. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  302. package/dist/tool-system/builtin/bash.d.ts +5 -2
  303. package/dist/tool-system/builtin/bash.js +98 -62
  304. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  305. package/dist/tool-system/builtin/browser-tools.js +312 -0
  306. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  307. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  308. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  309. package/dist/tool-system/builtin/check-quota.js +34 -0
  310. package/dist/tool-system/builtin/config.js +7 -0
  311. package/dist/tool-system/builtin/cron.d.ts +7 -0
  312. package/dist/tool-system/builtin/cron.js +55 -3
  313. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  314. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  315. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  316. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  317. package/dist/tool-system/builtin/edit.js +20 -16
  318. package/dist/tool-system/builtin/eol.d.ts +29 -0
  319. package/dist/tool-system/builtin/eol.js +37 -0
  320. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  321. package/dist/tool-system/builtin/file-cache.js +8 -0
  322. package/dist/tool-system/builtin/generate-image.d.ts +35 -0
  323. package/dist/tool-system/builtin/generate-image.js +278 -50
  324. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  325. package/dist/tool-system/builtin/generate-video.js +361 -0
  326. package/dist/tool-system/builtin/glob.js +0 -7
  327. package/dist/tool-system/builtin/grep.js +6 -8
  328. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  329. package/dist/tool-system/builtin/image-providers.js +190 -0
  330. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  331. package/dist/tool-system/builtin/image-uploader.js +74 -0
  332. package/dist/tool-system/builtin/index.d.ts +7 -1
  333. package/dist/tool-system/builtin/index.js +249 -25
  334. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  335. package/dist/tool-system/builtin/memory.js +45 -7
  336. package/dist/tool-system/builtin/notebook-edit.js +0 -7
  337. package/dist/tool-system/builtin/powershell.js +4 -1
  338. package/dist/tool-system/builtin/read.js +10 -10
  339. package/dist/tool-system/builtin/repl.js +4 -1
  340. package/dist/tool-system/builtin/skill.js +9 -0
  341. package/dist/tool-system/builtin/sleep.js +3 -2
  342. package/dist/tool-system/builtin/tool-search.js +25 -7
  343. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  344. package/dist/tool-system/builtin/video-providers.js +235 -0
  345. package/dist/tool-system/builtin/web-fetch.js +12 -2
  346. package/dist/tool-system/builtin/web-search.js +21 -7
  347. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  348. package/dist/tool-system/builtin/worktree.js +31 -4
  349. package/dist/tool-system/builtin/write.js +0 -6
  350. package/dist/tool-system/context.d.ts +154 -6
  351. package/dist/tool-system/executor.d.ts +3 -1
  352. package/dist/tool-system/executor.js +172 -88
  353. package/dist/tool-system/investigation-guard.js +1 -1
  354. package/dist/tool-system/mcp-manager.d.ts +42 -4
  355. package/dist/tool-system/mcp-manager.js +186 -20
  356. package/dist/tool-system/path-policy.d.ts +5 -0
  357. package/dist/tool-system/path-policy.js +307 -8
  358. package/dist/tool-system/permission.d.ts +36 -1
  359. package/dist/tool-system/permission.js +281 -69
  360. package/dist/tool-system/plan-mode-allowlist.d.ts +13 -2
  361. package/dist/tool-system/plan-mode-allowlist.js +24 -2
  362. package/dist/tool-system/registry.d.ts +1 -0
  363. package/dist/tool-system/registry.js +16 -2
  364. package/dist/tool-system/sandbox/index.d.ts +8 -0
  365. package/dist/tool-system/sandbox/index.js +7 -2
  366. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  367. package/dist/tool-system/validate-tool-metadata.js +63 -0
  368. package/dist/types.d.ts +217 -6
  369. package/dist/updater.js +20 -9
  370. package/dist/utils/envUtils.d.ts +0 -9
  371. package/dist/utils/envUtils.js +3 -28
  372. package/dist/utils/exec.d.ts +40 -0
  373. package/dist/utils/exec.js +144 -0
  374. package/dist/utils/json.d.ts +12 -0
  375. package/dist/utils/json.js +92 -0
  376. package/dist/utils/theme.d.ts +1 -1
  377. package/dist/utils/theme.js +1 -1
  378. package/dist/utils/toolDisplay.js +0 -1
  379. package/package.json +13 -7
  380. package/dist/agent/coordinator.d.ts +0 -49
  381. package/dist/agent/coordinator.js +0 -77
  382. package/dist/settings/manager.test.js +0 -73
  383. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  384. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  385. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  386. package/dist/tool-system/builtin/send-message.js +0 -47
  387. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Cross-platform executable resolution.
3
+ *
4
+ * Node's `child_process.spawn`/`execFile` on Windows do NOT walk PATHEXT for a
5
+ * bare command name unless `shell:true` — so `execFile("git", …)` finds
6
+ * `git.exe` but NOT a `git.cmd`/`gh.cmd` shim (common for tools installed via
7
+ * scoop/npm/chocolatey). On POSIX a bare name in PATH works fine.
8
+ *
9
+ * `resolveExecutable` does an explicit PATH × PATHEXT lookup on Windows and
10
+ * returns the first existing match's absolute path; on POSIX (or when nothing
11
+ * is found) it returns the command unchanged, so callers can always pass the
12
+ * result straight to execFile/spawn.
13
+ */
14
+ import { accessSync, constants, statSync } from "node:fs";
15
+ import { delimiter, extname, isAbsolute, join } from "node:path";
16
+ /**
17
+ * The names to probe for `command` on the current platform: the bare name on
18
+ * POSIX (or when it already has an extension), plus each PATHEXT variant
19
+ * (command.exe / .cmd / .bat …) on Windows.
20
+ */
21
+ export function commandCandidateNames(command, env = process.env) {
22
+ if (process.platform !== "win32" || extname(command))
23
+ return [command];
24
+ const pathext = (env.PATHEXT || ".COM;.EXE;.BAT;.CMD")
25
+ .split(";")
26
+ .map((ext) => ext.trim())
27
+ .filter(Boolean);
28
+ return [command, ...pathext.map((ext) => `${command}${ext}`)];
29
+ }
30
+ function isExecutableFile(filePath) {
31
+ try {
32
+ const st = statSync(filePath);
33
+ if (!st.isFile())
34
+ return false;
35
+ if (process.platform !== "win32")
36
+ accessSync(filePath, constants.X_OK);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Resolve `command` to an absolute executable path on Windows (walking
45
+ * PATH × PATHEXT so .cmd/.bat shims are found). Returns `command` unchanged on
46
+ * POSIX, when it already has a path separator/extension, or when no match is
47
+ * found (let spawn surface the ENOENT then).
48
+ */
49
+ const resolveCache = new Map();
50
+ export function resolveExecutable(command, env = process.env) {
51
+ if (process.platform !== "win32")
52
+ return command;
53
+ const trimmed = command.trim();
54
+ if (!trimmed)
55
+ return command;
56
+ const cached = resolveCache.get(trimmed);
57
+ if (cached !== undefined)
58
+ return cached;
59
+ const result = resolveExecutableUncached(trimmed, env);
60
+ resolveCache.set(trimmed, result);
61
+ return result;
62
+ }
63
+ /** Test seam: drop the resolution cache. */
64
+ export function _clearExecutableCache() {
65
+ resolveCache.clear();
66
+ }
67
+ /**
68
+ * Find `command` as a real, runnable executable. Unlike {@link resolveExecutable}
69
+ * (which returns the bare name unchanged when nothing is found, so spawn can
70
+ * surface its own ENOENT), this returns the absolute path if a binary exists or
71
+ * `null` if it genuinely cannot be found — works on POSIX too (probes PATH).
72
+ * Use it to *detect* a missing tool up front (e.g. is git installed?).
73
+ */
74
+ export function findExecutable(command, env = process.env) {
75
+ const trimmed = command.trim();
76
+ if (!trimmed)
77
+ return null;
78
+ const hasSep = trimmed.includes("/") || trimmed.includes("\\") || isAbsolute(trimmed);
79
+ if (hasSep) {
80
+ for (const name of commandCandidateNames(trimmed, env)) {
81
+ if (isExecutableFile(name))
82
+ return name;
83
+ }
84
+ return null;
85
+ }
86
+ for (const dir of (env.PATH ?? "").split(delimiter)) {
87
+ if (!dir)
88
+ continue;
89
+ for (const name of commandCandidateNames(trimmed, env)) {
90
+ const full = join(dir, name);
91
+ if (isExecutableFile(full))
92
+ return full;
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ // ─── git executable: optional user override + availability probe ───────────
98
+ //
99
+ // codeshell shells out to `git` for marketplace clones, worktrees, and diffs.
100
+ // A GUI launch may not inherit the user's PATH (classic Windows/macOS issue),
101
+ // so we let the user point us at a git binary explicitly via the `git.path`
102
+ // setting — mirrors VS Code's `git.path`. The desktop host reads that setting
103
+ // and calls setGitPathOverride() at startup / on settings change.
104
+ let gitPathOverride = null;
105
+ /** Set (or clear, with null/"") the user-configured git binary path. */
106
+ export function setGitPathOverride(path) {
107
+ gitPathOverride = path && path.trim() ? path.trim() : null;
108
+ }
109
+ /**
110
+ * The git command to spawn: the user override if set, else `git` resolved
111
+ * through PATH×PATHEXT. Always returns something spawnable (callers still get
112
+ * a structured spawn-failure if it's wrong).
113
+ */
114
+ export function resolveGit(env = process.env) {
115
+ if (gitPathOverride)
116
+ return resolveExecutable(gitPathOverride, env);
117
+ return resolveExecutable("git", env);
118
+ }
119
+ /** Is a usable git binary available (override path, or git on PATH)? */
120
+ export function isGitAvailable(env = process.env) {
121
+ return findExecutable(gitPathOverride ?? "git", env) !== null;
122
+ }
123
+ function resolveExecutableUncached(trimmed, env) {
124
+ const command = trimmed;
125
+ // Already a path (absolute or relative with a separator): resolve extension.
126
+ const hasSep = trimmed.includes("/") || trimmed.includes("\\");
127
+ if (hasSep || isAbsolute(trimmed)) {
128
+ for (const name of commandCandidateNames(trimmed, env)) {
129
+ if (isExecutableFile(name))
130
+ return name;
131
+ }
132
+ return command;
133
+ }
134
+ for (const dir of (env.PATH ?? "").split(delimiter)) {
135
+ if (!dir)
136
+ continue;
137
+ for (const name of commandCandidateNames(trimmed, env)) {
138
+ const full = join(dir, name);
139
+ if (isExecutableFile(full))
140
+ return full;
141
+ }
142
+ }
143
+ return command;
144
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Generic JSON extraction from LLM text output — strip markdown fences and
3
+ * pull out the first balanced object/array. These are provider-agnostic and
4
+ * have no Arena dependency; they live here (not in arena/strategies/utils.ts)
5
+ * so non-Arena consumers (e.g. services/memory-orchestrator) can use them
6
+ * without dragging in the Arena subsystem. Arena re-exports them for
7
+ * back-compat.
8
+ */
9
+ /** Extract JSON from text that might have markdown fences or surrounding text. */
10
+ export declare function extractJSON(text: string): string;
11
+ /** Extract a JSON array from text. */
12
+ export declare function extractJSONArray(text: string): string;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Generic JSON extraction from LLM text output — strip markdown fences and
3
+ * pull out the first balanced object/array. These are provider-agnostic and
4
+ * have no Arena dependency; they live here (not in arena/strategies/utils.ts)
5
+ * so non-Arena consumers (e.g. services/memory-orchestrator) can use them
6
+ * without dragging in the Arena subsystem. Arena re-exports them for
7
+ * back-compat.
8
+ */
9
+ /** Extract JSON from text that might have markdown fences or surrounding text. */
10
+ export function extractJSON(text) {
11
+ // Try fenced code blocks — use GREEDY match to handle nested backticks
12
+ const fenced = text.match(/```(?:json)?\s*\n([\s\S]*)\n\s*```/);
13
+ if (fenced)
14
+ return fenced[1].trim();
15
+ // Try to find the outermost { ... } pair with balanced braces
16
+ const start = text.indexOf("{");
17
+ if (start !== -1) {
18
+ let depth = 0;
19
+ let inString = false;
20
+ let escape = false;
21
+ for (let i = start; i < text.length; i++) {
22
+ const ch = text[i];
23
+ if (escape) {
24
+ escape = false;
25
+ continue;
26
+ }
27
+ if (ch === "\\") {
28
+ escape = true;
29
+ continue;
30
+ }
31
+ if (ch === '"') {
32
+ inString = !inString;
33
+ continue;
34
+ }
35
+ if (inString)
36
+ continue;
37
+ if (ch === "{")
38
+ depth++;
39
+ else if (ch === "}") {
40
+ depth--;
41
+ if (depth === 0)
42
+ return text.slice(start, i + 1);
43
+ }
44
+ }
45
+ // Unbalanced — return from start to end as best effort
46
+ return text.slice(start);
47
+ }
48
+ return text;
49
+ }
50
+ /** Extract a JSON array from text. */
51
+ export function extractJSONArray(text) {
52
+ const fenced = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
53
+ if (fenced)
54
+ return fenced[1].trim();
55
+ // Return the FIRST balanced top-level array. A greedy /\[[\s\S]*\]/ spanned
56
+ // to the last ']', merging two arrays (or trailing prose) into one invalid
57
+ // blob. Scan for bracket balance, ignoring brackets inside strings.
58
+ const balanced = firstBalancedArray(text);
59
+ if (balanced)
60
+ return balanced;
61
+ return text;
62
+ }
63
+ function firstBalancedArray(text) {
64
+ const start = text.indexOf("[");
65
+ if (start === -1)
66
+ return undefined;
67
+ let depth = 0;
68
+ let inString = false;
69
+ let escaped = false;
70
+ for (let i = start; i < text.length; i++) {
71
+ const ch = text[i];
72
+ if (inString) {
73
+ if (escaped)
74
+ escaped = false;
75
+ else if (ch === "\\")
76
+ escaped = true;
77
+ else if (ch === '"')
78
+ inString = false;
79
+ continue;
80
+ }
81
+ if (ch === '"')
82
+ inString = true;
83
+ else if (ch === "[")
84
+ depth++;
85
+ else if (ch === "]") {
86
+ depth--;
87
+ if (depth === 0)
88
+ return text.slice(start, i + 1);
89
+ }
90
+ }
91
+ return undefined; // unbalanced
92
+ }
@@ -85,7 +85,7 @@ export declare const THEME_SETTINGS: readonly ["auto", "dark", "light", "light-d
85
85
  export type ThemeSetting = (typeof THEME_SETTINGS)[number];
86
86
  export declare function getTheme(themeName: ThemeName): Theme;
87
87
  /**
88
- * Converts a theme color to an ANSI escape sequence for use with asciichart.
88
+ * Converts a theme color to an ANSI escape sequence for use in chart rendering.
89
89
  *
90
90
  * Apple Terminal doesn't handle 24-bit (true-color) escape sequences well, so
91
91
  * on that terminal we downgrade to the nearest xterm-256 color index instead.
@@ -500,7 +500,7 @@ export function getTheme(themeName) {
500
500
  }
501
501
  }
502
502
  /**
503
- * Converts a theme color to an ANSI escape sequence for use with asciichart.
503
+ * Converts a theme color to an ANSI escape sequence for use in chart rendering.
504
504
  *
505
505
  * Apple Terminal doesn't handle 24-bit (true-color) escape sequences well, so
506
506
  * on that terminal we downgrade to the nearest xterm-256 color index instead.
@@ -58,7 +58,6 @@ const TOOL_ARG_KEYS = {
58
58
  TodoWrite: ["todos"],
59
59
  Sleep: ["seconds"],
60
60
  EnterWorktree: ["slug"],
61
- SendMessage: ["to"],
62
61
  CronCreate: ["name", "schedule"],
63
62
  LSP: ["action", "file_path"],
64
63
  NotebookEdit: ["action", "file_path"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cjhyy/code-shell-core",
3
- "version": "0.5.0-rc.2",
3
+ "version": "0.6.0-rc.1",
4
4
  "description": "Core engine for code-shell — agent orchestration, tool execution, hooks, protocol. UI-agnostic.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,14 +16,15 @@
16
16
  "./dist/data/*.json",
17
17
  "./dist/prompt/sections/*.md"
18
18
  ],
19
+ "//files": "LICENSE/README intentionally omitted: npm/bun always include them in a publish regardless of this list, so the published tarball is unchanged — but listing them makes electron-builder (which follows the workspace symlink when packaging the desktop app) try to copy them from packages/core, tripping its 'file must be under <app>' guard (electron-builder#3238). dist is all the desktop bundle needs.",
19
20
  "files": [
20
- "dist",
21
- "README.md",
22
- "LICENSE"
21
+ "dist"
23
22
  ],
24
23
  "scripts": {
25
- "build": "tsc -p tsconfig.json && mkdir -p dist/prompt/sections dist/data && cp src/prompt/sections/*.md dist/prompt/sections/ && cp src/data/*.json dist/data/",
26
- "clean": "rm -rf dist"
24
+ "build": "tsc -p tsconfig.json && bun run copy-assets",
25
+ "copy-assets": "node ../../scripts/copy-assets.mjs dist/prompt/sections src/prompt/sections/*.md && node ../../scripts/copy-assets.mjs dist/data src/data/*.json",
26
+ "dev": "bun run copy-assets && tsc -p tsconfig.json --watch --preserveWatchOutput",
27
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
27
28
  },
28
29
  "dependencies": {
29
30
  "@anthropic-ai/sdk": "^0.39.0",
@@ -37,7 +38,9 @@
37
38
  "smol-toml": "^1.6.1",
38
39
  "strip-ansi": "^7.2.0",
39
40
  "yaml": "^2.7.0",
40
- "zod": "^3.24.2"
41
+ "yauzl": "^3.4.0",
42
+ "zod": "^3.24.2",
43
+ "zod-to-json-schema": "^3.25.2"
41
44
  },
42
45
  "engines": {
43
46
  "node": ">=20.10"
@@ -69,5 +72,8 @@
69
72
  ],
70
73
  "publishConfig": {
71
74
  "access": "public"
75
+ },
76
+ "devDependencies": {
77
+ "@types/yauzl": "^3.4.0"
72
78
  }
73
79
  }
@@ -1,49 +0,0 @@
1
- /**
2
- * Agent coordinator — agent registry + message bus for multi-agent communication.
3
- */
4
- /** A registered named agent. */
5
- export interface AgentInfo {
6
- id: string;
7
- name: string;
8
- status: "running" | "completed" | "failed";
9
- description: string;
10
- startedAt: number;
11
- completedAt?: number;
12
- result?: string;
13
- }
14
- /** A message between agents. */
15
- export interface AgentMessage {
16
- from: string;
17
- to: string;
18
- content: string;
19
- timestamp: number;
20
- }
21
- /**
22
- * Singleton agent registry and message bus.
23
- */
24
- declare class AgentCoordinator {
25
- private agents;
26
- private inbox;
27
- /** Register a named agent. */
28
- register(id: string, name: string, description: string): void;
29
- /** Mark an agent as completed. */
30
- complete(name: string, result?: string): void;
31
- /** Mark an agent as failed. */
32
- fail(name: string): void;
33
- /** Get agent info by name. */
34
- get(name: string): AgentInfo | undefined;
35
- /** List all agents. */
36
- list(): AgentInfo[];
37
- /** List active (running) agents. */
38
- listActive(): AgentInfo[];
39
- /** Send a message to a named agent. */
40
- send(from: string, to: string, content: string): boolean;
41
- /** Read messages for a named agent (drains the inbox). */
42
- receive(name: string): AgentMessage[];
43
- /** Peek at messages without draining. */
44
- peek(name: string): AgentMessage[];
45
- /** Reset all state. */
46
- reset(): void;
47
- }
48
- export declare const agentCoordinator: AgentCoordinator;
49
- export {};
@@ -1,77 +0,0 @@
1
- /**
2
- * Agent coordinator — agent registry + message bus for multi-agent communication.
3
- */
4
- /**
5
- * Singleton agent registry and message bus.
6
- */
7
- class AgentCoordinator {
8
- agents = new Map();
9
- inbox = new Map();
10
- /** Register a named agent. */
11
- register(id, name, description) {
12
- this.agents.set(name, {
13
- id,
14
- name,
15
- status: "running",
16
- description,
17
- startedAt: Date.now(),
18
- });
19
- if (!this.inbox.has(name)) {
20
- this.inbox.set(name, []);
21
- }
22
- }
23
- /** Mark an agent as completed. */
24
- complete(name, result) {
25
- const agent = this.agents.get(name);
26
- if (agent) {
27
- agent.status = "completed";
28
- agent.completedAt = Date.now();
29
- agent.result = result;
30
- }
31
- }
32
- /** Mark an agent as failed. */
33
- fail(name) {
34
- const agent = this.agents.get(name);
35
- if (agent) {
36
- agent.status = "failed";
37
- agent.completedAt = Date.now();
38
- }
39
- }
40
- /** Get agent info by name. */
41
- get(name) {
42
- return this.agents.get(name);
43
- }
44
- /** List all agents. */
45
- list() {
46
- return [...this.agents.values()];
47
- }
48
- /** List active (running) agents. */
49
- listActive() {
50
- return [...this.agents.values()].filter((a) => a.status === "running");
51
- }
52
- /** Send a message to a named agent. */
53
- send(from, to, content) {
54
- if (!this.agents.has(to))
55
- return false;
56
- const messages = this.inbox.get(to) ?? [];
57
- messages.push({ from, to, content, timestamp: Date.now() });
58
- this.inbox.set(to, messages);
59
- return true;
60
- }
61
- /** Read messages for a named agent (drains the inbox). */
62
- receive(name) {
63
- const messages = this.inbox.get(name) ?? [];
64
- this.inbox.set(name, []);
65
- return messages;
66
- }
67
- /** Peek at messages without draining. */
68
- peek(name) {
69
- return this.inbox.get(name) ?? [];
70
- }
71
- /** Reset all state. */
72
- reset() {
73
- this.agents.clear();
74
- this.inbox.clear();
75
- }
76
- }
77
- export const agentCoordinator = new AgentCoordinator();
@@ -1,73 +0,0 @@
1
- import { describe, test, expect, beforeEach, afterEach } from "bun:test";
2
- import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { tmpdir } from "node:os";
5
- import { SettingsManager } from "./manager.js";
6
- /**
7
- * Scope isolation tests. We point HOME at a temp dir (userHome() reads
8
- * process.env.HOME first) and use a separate temp cwd, then seed each of the
9
- * four disk layers with a uniquely-named mcpServers entry. mcpServers is a
10
- * record merged key-by-key, so every layer that was actually read leaves its
11
- * own key in the merged result — letting us detect which layers were read
12
- * (unlike arrays, which deep-merge replaces wholesale).
13
- */
14
- describe("SettingsManager scope", () => {
15
- let home;
16
- let cwd;
17
- let prevHome;
18
- function serverFor(tag) {
19
- return { [tag]: { name: tag, command: "echo", transport: "stdio" } };
20
- }
21
- function writeSettings(dir, file, tag) {
22
- mkdirSync(join(dir, ".code-shell"), { recursive: true });
23
- writeFileSync(join(dir, ".code-shell", file), JSON.stringify({ mcpServers: serverFor(tag) }), "utf-8");
24
- }
25
- function layersIn(sm) {
26
- return Object.keys(sm.get().mcpServers ?? {}).sort();
27
- }
28
- beforeEach(() => {
29
- prevHome = process.env.HOME;
30
- home = mkdtempSync(join(tmpdir(), "cs-home-"));
31
- cwd = mkdtempSync(join(tmpdir(), "cs-cwd-"));
32
- process.env.HOME = home;
33
- writeSettings(home, "settings.managed.json", "MANAGED");
34
- writeSettings(home, "settings.json", "USER");
35
- writeSettings(cwd, "settings.json", "PROJECT");
36
- writeSettings(cwd, "settings.local.json", "LOCAL");
37
- });
38
- afterEach(() => {
39
- process.env.HOME = prevHome;
40
- rmSync(home, { recursive: true, force: true });
41
- rmSync(cwd, { recursive: true, force: true });
42
- });
43
- test("full reads all four disk layers", () => {
44
- expect(layersIn(new SettingsManager(cwd, "full"))).toEqual([
45
- "LOCAL",
46
- "MANAGED",
47
- "PROJECT",
48
- "USER",
49
- ]);
50
- });
51
- test("project (default) reads project+local, never user/managed", () => {
52
- expect(layersIn(new SettingsManager(cwd, "project"))).toEqual(["LOCAL", "PROJECT"]);
53
- });
54
- test("default scope is project", () => {
55
- expect(layersIn(new SettingsManager(cwd))).toEqual(["LOCAL", "PROJECT"]);
56
- });
57
- test("isolated reads no disk layers", () => {
58
- expect(layersIn(new SettingsManager(cwd, "isolated"))).toEqual([]);
59
- });
60
- test("flag overrides apply even under isolated", () => {
61
- const sm = new SettingsManager(cwd, "isolated");
62
- sm.load({ mcpServers: serverFor("FLAG") });
63
- expect(layersIn(sm)).toEqual(["FLAG"]);
64
- });
65
- test("non-full scope never triggers user-file model migration write-back", () => {
66
- // Legacy models[] in the user file would normally be migrated (and the
67
- // file rewritten with a .bak). Under project/isolated we must not touch
68
- // the user file at all.
69
- writeFileSync(join(home, ".code-shell", "settings.json"), JSON.stringify({ models: [{ id: "legacy", provider: "x" }] }), "utf-8");
70
- new SettingsManager(cwd, "project").get();
71
- expect(existsSync(join(home, ".code-shell", "settings.json.bak"))).toBe(false);
72
- });
73
- });
@@ -1,6 +0,0 @@
1
- /**
2
- * RemoteTriggerTool — trigger remote agents/workflows.
3
- */
4
- import type { ToolDefinition } from "../../types.js";
5
- export declare const remoteTriggerToolDef: ToolDefinition;
6
- export declare function remoteTriggerTool(args: Record<string, unknown>): Promise<string>;
@@ -1,54 +0,0 @@
1
- /**
2
- * RemoteTriggerTool — trigger remote agents/workflows.
3
- */
4
- export const remoteTriggerToolDef = {
5
- name: "RemoteTrigger",
6
- description: "Trigger a remote agent or workflow to execute a task. " +
7
- "The agent runs asynchronously and results can be checked later.",
8
- inputSchema: {
9
- type: "object",
10
- properties: {
11
- name: {
12
- type: "string",
13
- description: "The name/identifier of the remote trigger to execute",
14
- },
15
- prompt: {
16
- type: "string",
17
- description: "The task prompt to send to the remote agent",
18
- },
19
- config: {
20
- type: "object",
21
- description: "Optional configuration for the remote execution",
22
- },
23
- },
24
- required: ["name", "prompt"],
25
- },
26
- };
27
- export async function remoteTriggerTool(args) {
28
- const name = args.name;
29
- const prompt = args.prompt;
30
- const config = args.config;
31
- // Remote triggers are dispatched via the cron scheduler or external API
32
- try {
33
- const { existsSync, readFileSync, writeFileSync, mkdirSync } = await import("node:fs");
34
- const { join } = await import("node:path");
35
- const { homedir } = await import("node:os");
36
- // Store trigger request for pickup by external scheduler
37
- const triggerDir = join(homedir(), ".code-shell", "triggers");
38
- mkdirSync(triggerDir, { recursive: true });
39
- const trigger = {
40
- id: `trigger_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
41
- name,
42
- prompt,
43
- config,
44
- createdAt: new Date().toISOString(),
45
- status: "pending",
46
- };
47
- const triggerFile = join(triggerDir, `${trigger.id}.json`);
48
- writeFileSync(triggerFile, JSON.stringify(trigger, null, 2), "utf-8");
49
- return `Remote trigger "${name}" dispatched (ID: ${trigger.id}).\nStored at: ${triggerFile}`;
50
- }
51
- catch (err) {
52
- return `Remote trigger error: ${err.message}`;
53
- }
54
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * SendMessage tool — send messages between named agents.
3
- */
4
- import type { ToolDefinition } from "../../types.js";
5
- export declare const sendMessageToolDef: ToolDefinition;
6
- export declare function sendMessageTool(args: Record<string, unknown>): Promise<string>;
@@ -1,47 +0,0 @@
1
- /**
2
- * SendMessage tool — send messages between named agents.
3
- */
4
- import { agentCoordinator } from "../../agent/coordinator.js";
5
- export const sendMessageToolDef = {
6
- name: "SendMessage",
7
- description: "Send a message to another named agent. The target agent must have been " +
8
- "spawned with a 'name' parameter via the Agent tool. " +
9
- "Use this for coordinating work between multiple agents.",
10
- inputSchema: {
11
- type: "object",
12
- properties: {
13
- to: {
14
- type: "string",
15
- description: "The name of the target agent",
16
- },
17
- content: {
18
- type: "string",
19
- description: "The message content to send",
20
- },
21
- },
22
- required: ["to", "content"],
23
- },
24
- };
25
- export async function sendMessageTool(args) {
26
- const to = args.to;
27
- const content = args.content;
28
- const from = args.__agentName ?? "main";
29
- if (!to)
30
- return "Error: 'to' is required";
31
- if (!content)
32
- return "Error: 'content' is required";
33
- const target = agentCoordinator.get(to);
34
- if (!target) {
35
- const active = agentCoordinator.listActive();
36
- const names = active.map((a) => a.name).join(", ");
37
- return `Error: No agent named "${to}". Active agents: ${names || "none"}`;
38
- }
39
- if (target.status !== "running") {
40
- return `Agent "${to}" is not running (status: ${target.status}).`;
41
- }
42
- const sent = agentCoordinator.send(from, to, content);
43
- if (!sent) {
44
- return `Failed to send message to "${to}".`;
45
- }
46
- return `Message sent to "${to}".`;
47
- }