@cjhyy/code-shell-core 0.5.0-rc.1 → 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 (528) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +21 -3
  3. package/dist/agent/agent-definition-registry.js +49 -18
  4. package/dist/agent/agent-definition.d.ts +32 -0
  5. package/dist/agent/agent-definition.js +49 -4
  6. package/dist/arena/arena.js +11 -12
  7. package/dist/arena/context/context-tools.js +47 -6
  8. package/dist/arena/context/within-root.d.ts +7 -0
  9. package/dist/arena/context/within-root.js +15 -0
  10. package/dist/arena/iterate/phases/argue.js +8 -2
  11. package/dist/arena/iterate/phases/revise.js +1 -1
  12. package/dist/arena/iterate/phases/tournament.js +3 -3
  13. package/dist/arena/ledger.js +9 -1
  14. package/dist/arena/phases/adjudication.js +1 -4
  15. package/dist/arena/phases/build-consensus.js +1 -4
  16. package/dist/arena/phases/cross-review.js +2 -8
  17. package/dist/arena/phases/debate-rounds.js +1 -4
  18. package/dist/arena/phases/participant-research.js +1 -4
  19. package/dist/arena/phases/planning-detail-expansion.js +8 -10
  20. package/dist/arena/planner.js +0 -1
  21. package/dist/arena/providers/docs.d.ts +1 -0
  22. package/dist/arena/providers/docs.js +5 -2
  23. package/dist/arena/providers/repo.d.ts +1 -0
  24. package/dist/arena/providers/repo.js +5 -2
  25. package/dist/arena/strategies/utils.d.ts +1 -4
  26. package/dist/arena/strategies/utils.js +7 -51
  27. package/dist/arena/transitions.d.ts +7 -2
  28. package/dist/arena/transitions.js +9 -4
  29. package/dist/arena/types.d.ts +8 -2
  30. package/dist/automation/cron-expr.d.ts +41 -0
  31. package/dist/automation/cron-expr.js +169 -0
  32. package/dist/automation/index.d.ts +41 -0
  33. package/dist/automation/index.js +39 -0
  34. package/dist/automation/runner.d.ts +84 -0
  35. package/dist/automation/runner.js +92 -0
  36. package/dist/automation/scheduler.d.ts +194 -0
  37. package/dist/automation/scheduler.js +623 -0
  38. package/dist/automation/store.d.ts +39 -0
  39. package/dist/automation/store.js +122 -0
  40. package/dist/automation/write-policy.d.ts +34 -0
  41. package/dist/automation/write-policy.js +113 -0
  42. package/dist/automation/write-run.d.ts +51 -0
  43. package/dist/automation/write-run.js +38 -0
  44. package/dist/capability-control/disabled-lists.d.ts +25 -0
  45. package/dist/capability-control/disabled-lists.js +57 -0
  46. package/dist/capability-control/index.d.ts +5 -0
  47. package/dist/capability-control/index.js +3 -0
  48. package/dist/capability-control/overlay.d.ts +64 -0
  49. package/dist/capability-control/overlay.js +116 -0
  50. package/dist/capability-control/project.d.ts +65 -0
  51. package/dist/capability-control/project.js +147 -0
  52. package/dist/capability-control/service.d.ts +70 -0
  53. package/dist/capability-control/service.js +147 -0
  54. package/dist/capability-control/types.d.ts +62 -0
  55. package/dist/capability-control/types.js +17 -0
  56. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  57. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  58. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  59. package/dist/cc-orchestrator/cc-capability.js +53 -0
  60. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  61. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  62. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  63. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  64. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  65. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  66. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  67. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  68. package/dist/cc-orchestrator/index.d.ts +8 -0
  69. package/dist/cc-orchestrator/index.js +8 -0
  70. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  71. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  72. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  73. package/dist/cc-orchestrator/session-discovery.js +125 -0
  74. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  75. package/dist/cc-orchestrator/session-history.js +67 -0
  76. package/dist/cli/agent-server-stdio.d.ts +26 -1
  77. package/dist/cli/agent-server-stdio.js +221 -28
  78. package/dist/cli/agent-server-tcp.d.ts +20 -0
  79. package/dist/cli/agent-server-tcp.js +134 -0
  80. package/dist/cli/graceful-shutdown.d.ts +27 -0
  81. package/dist/cli/graceful-shutdown.js +30 -0
  82. package/dist/context/compaction.d.ts +56 -0
  83. package/dist/context/compaction.js +209 -15
  84. package/dist/context/manager.d.ts +0 -20
  85. package/dist/context/manager.js +25 -41
  86. package/dist/cost-tracker.js +5 -61
  87. package/dist/credentials/cipher.d.ts +49 -0
  88. package/dist/credentials/cipher.js +45 -0
  89. package/dist/credentials/cookie-jar.d.ts +24 -0
  90. package/dist/credentials/cookie-jar.js +40 -0
  91. package/dist/credentials/index.d.ts +7 -0
  92. package/dist/credentials/index.js +5 -0
  93. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  94. package/dist/credentials/inject-credential-tool.js +130 -0
  95. package/dist/credentials/store.d.ts +72 -0
  96. package/dist/credentials/store.js +184 -0
  97. package/dist/credentials/types.d.ts +56 -0
  98. package/dist/credentials/use-credential-tool.d.ts +29 -0
  99. package/dist/credentials/use-credential-tool.js +205 -0
  100. package/dist/credentials/use-gate.d.ts +56 -0
  101. package/dist/credentials/use-gate.js +52 -0
  102. package/dist/cron/cron-runtime.d.ts +2 -0
  103. package/dist/cron/cron-runtime.js +2 -0
  104. package/dist/cron/cron-store.d.ts +2 -0
  105. package/dist/cron/cron-store.js +2 -0
  106. package/dist/cron/scheduler.d.ts +5 -32
  107. package/dist/cron/scheduler.js +5 -113
  108. package/dist/data/model-metadata.d.ts +77 -0
  109. package/dist/data/model-metadata.js +56 -0
  110. package/dist/data/model-metadata.json +216 -0
  111. package/dist/data/openrouter-models.d.ts +18 -7
  112. package/dist/data/openrouter-models.js +35 -8
  113. package/dist/data/openrouter-sync.js +1 -1
  114. package/dist/engine/aux-key.d.ts +10 -0
  115. package/dist/engine/aux-key.js +11 -0
  116. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  117. package/dist/engine/dynamic-tool-defs.js +36 -0
  118. package/dist/engine/engine.d.ts +431 -108
  119. package/dist/engine/engine.js +1630 -279
  120. package/dist/engine/friendly-error.d.ts +18 -0
  121. package/dist/engine/friendly-error.js +63 -0
  122. package/dist/engine/goal.d.ts +187 -0
  123. package/dist/engine/goal.js +196 -0
  124. package/dist/engine/image-compression.d.ts +81 -0
  125. package/dist/engine/image-compression.js +186 -0
  126. package/dist/engine/image-policy.d.ts +165 -0
  127. package/dist/engine/image-policy.js +189 -0
  128. package/dist/engine/model-connections-pool.d.ts +17 -0
  129. package/dist/engine/model-connections-pool.js +66 -0
  130. package/dist/engine/model-facade.d.ts +10 -0
  131. package/dist/engine/model-facade.js +25 -0
  132. package/dist/engine/patch-orphaned-tools.js +3 -0
  133. package/dist/engine/reactive-threshold.d.ts +13 -0
  134. package/dist/engine/reactive-threshold.js +17 -0
  135. package/dist/engine/resolve-llm-config.d.ts +16 -0
  136. package/dist/engine/resolve-llm-config.js +44 -0
  137. package/dist/engine/runtime.js +9 -1
  138. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  139. package/dist/engine/sandbox-cache-key.js +9 -0
  140. package/dist/engine/sandbox-config.d.ts +31 -0
  141. package/dist/engine/sandbox-config.js +38 -0
  142. package/dist/engine/session-title.d.ts +13 -0
  143. package/dist/engine/session-title.js +34 -0
  144. package/dist/engine/session-usage.d.ts +19 -0
  145. package/dist/engine/session-usage.js +25 -0
  146. package/dist/engine/steer-queue.d.ts +32 -0
  147. package/dist/engine/steer-queue.js +26 -0
  148. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  149. package/dist/engine/streaming-tool-queue.js +50 -10
  150. package/dist/engine/turn-loop.d.ts +94 -9
  151. package/dist/engine/turn-loop.js +775 -342
  152. package/dist/engine/types.d.ts +175 -0
  153. package/dist/engine/types.js +13 -0
  154. package/dist/external-agents/config.d.ts +2 -0
  155. package/dist/external-agents/config.js +15 -0
  156. package/dist/external-agents/types.d.ts +31 -0
  157. package/dist/external-agents/types.js +1 -0
  158. package/dist/git/parse-log.d.ts +13 -0
  159. package/dist/git/parse-log.js +21 -0
  160. package/dist/git/utils.d.ts +8 -6
  161. package/dist/git/utils.js +62 -26
  162. package/dist/git/worktree.d.ts +48 -0
  163. package/dist/git/worktree.js +111 -20
  164. package/dist/hooks/events.d.ts +23 -1
  165. package/dist/hooks/goal-stop-hook.d.ts +58 -0
  166. package/dist/hooks/goal-stop-hook.js +279 -0
  167. package/dist/hooks/hook-output.d.ts +33 -0
  168. package/dist/hooks/hook-output.js +79 -0
  169. package/dist/hooks/registry.d.ts +15 -0
  170. package/dist/hooks/registry.js +57 -1
  171. package/dist/hooks/shell-runner.d.ts +2 -0
  172. package/dist/hooks/shell-runner.js +48 -18
  173. package/dist/index.d.ts +79 -11
  174. package/dist/index.js +89 -6
  175. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  176. package/dist/llm/capabilities/param-specs.js +62 -0
  177. package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
  178. package/dist/llm/capabilities/reasoning-control.js +38 -0
  179. package/dist/llm/capabilities/rules.js +37 -3
  180. package/dist/llm/capabilities/types.d.ts +32 -2
  181. package/dist/llm/clamp-max-tokens.d.ts +11 -0
  182. package/dist/llm/clamp-max-tokens.js +17 -0
  183. package/dist/llm/client-base.d.ts +69 -5
  184. package/dist/llm/client-base.js +185 -25
  185. package/dist/llm/client-factory.d.ts +3 -3
  186. package/dist/llm/client-factory.js +2 -2
  187. package/dist/llm/model-cache.js +4 -2
  188. package/dist/llm/model-pool.d.ts +29 -11
  189. package/dist/llm/model-pool.js +36 -20
  190. package/dist/llm/provider-auth.d.ts +41 -0
  191. package/dist/llm/provider-auth.js +76 -0
  192. package/dist/llm/provider-catalog.d.ts +6 -2
  193. package/dist/llm/providers/anthropic.d.ts +32 -2
  194. package/dist/llm/providers/anthropic.js +207 -18
  195. package/dist/llm/providers/openai.d.ts +47 -2
  196. package/dist/llm/providers/openai.js +478 -71
  197. package/dist/llm/reasoning-setting.d.ts +51 -0
  198. package/dist/llm/reasoning-setting.js +40 -0
  199. package/dist/llm/stop-reason.d.ts +13 -0
  200. package/dist/llm/stop-reason.js +21 -0
  201. package/dist/llm/stream-watchdog.js +5 -1
  202. package/dist/llm/strip-vision.d.ts +32 -0
  203. package/dist/llm/strip-vision.js +94 -0
  204. package/dist/llm/token-counter.js +9 -2
  205. package/dist/llm/types.d.ts +9 -6
  206. package/dist/logging/logger.js +18 -4
  207. package/dist/logging/sanitize-messages.d.ts +10 -0
  208. package/dist/logging/sanitize-messages.js +112 -0
  209. package/dist/lsp/client.js +28 -8
  210. package/dist/lsp/manager.d.ts +1 -1
  211. package/dist/lsp/manager.js +42 -11
  212. package/dist/lsp/root-path.d.ts +9 -0
  213. package/dist/lsp/root-path.js +12 -0
  214. package/dist/model-catalog/builtin.d.ts +12 -0
  215. package/dist/model-catalog/builtin.js +407 -0
  216. package/dist/model-catalog/gen-connections.d.ts +20 -0
  217. package/dist/model-catalog/gen-connections.js +28 -0
  218. package/dist/model-catalog/index.d.ts +41 -0
  219. package/dist/model-catalog/index.js +90 -0
  220. package/dist/model-catalog/params.d.ts +20 -0
  221. package/dist/model-catalog/params.js +45 -0
  222. package/dist/model-catalog/resolve.d.ts +48 -0
  223. package/dist/model-catalog/resolve.js +33 -0
  224. package/dist/model-catalog/save-entry.d.ts +32 -0
  225. package/dist/model-catalog/save-entry.js +104 -0
  226. package/dist/model-catalog/types.d.ts +561 -0
  227. package/dist/model-catalog/types.js +93 -0
  228. package/dist/model-catalog/upsert.d.ts +9 -0
  229. package/dist/model-catalog/upsert.js +8 -0
  230. package/dist/onboarding.d.ts +12 -82
  231. package/dist/onboarding.js +75 -333
  232. package/dist/plugins/gitOps.d.ts +53 -0
  233. package/dist/plugins/gitOps.js +130 -5
  234. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  235. package/dist/plugins/installer/checkUpdate.js +32 -0
  236. package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
  237. package/dist/plugins/installer/codex/convertAgents.js +55 -0
  238. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  239. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  240. package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
  241. package/dist/plugins/installer/codex/convertMcp.js +85 -0
  242. package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
  243. package/dist/plugins/installer/codex/convertSkills.js +33 -0
  244. package/dist/plugins/installer/detectFormat.d.ts +2 -0
  245. package/dist/plugins/installer/detectFormat.js +6 -0
  246. package/dist/plugins/installer/install.d.ts +7 -0
  247. package/dist/plugins/installer/install.js +123 -0
  248. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  249. package/dist/plugins/installer/installFromArchive.js +134 -0
  250. package/dist/plugins/installer/installFromSource.d.ts +13 -0
  251. package/dist/plugins/installer/installFromSource.js +51 -0
  252. package/dist/plugins/installer/list.d.ts +9 -0
  253. package/dist/plugins/installer/list.js +30 -0
  254. package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
  255. package/dist/plugins/installer/loadPluginAgents.js +27 -0
  256. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  257. package/dist/plugins/installer/loadPluginMcp.js +107 -0
  258. package/dist/plugins/installer/parseSource.d.ts +20 -0
  259. package/dist/plugins/installer/parseSource.js +74 -0
  260. package/dist/plugins/installer/paths.d.ts +5 -0
  261. package/dist/plugins/installer/paths.js +25 -0
  262. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  263. package/dist/plugins/installer/pruneDisabled.js +73 -0
  264. package/dist/plugins/installer/types.d.ts +52 -0
  265. package/dist/plugins/installer/types.js +28 -0
  266. package/dist/plugins/installer/uninstall.d.ts +2 -0
  267. package/dist/plugins/installer/uninstall.js +18 -0
  268. package/dist/plugins/installer/unzip.d.ts +14 -0
  269. package/dist/plugins/installer/unzip.js +82 -0
  270. package/dist/plugins/installer/update.d.ts +28 -0
  271. package/dist/plugins/installer/update.js +97 -0
  272. package/dist/plugins/loadPluginHooks.d.ts +54 -1
  273. package/dist/plugins/loadPluginHooks.js +83 -1
  274. package/dist/plugins/marketplaceManager.d.ts +15 -1
  275. package/dist/plugins/marketplaceManager.js +58 -4
  276. package/dist/plugins/pluginCommandHook.js +34 -14
  277. package/dist/plugins/pluginContent.d.ts +30 -0
  278. package/dist/plugins/pluginContent.js +83 -0
  279. package/dist/plugins/pluginInstaller.d.ts +34 -0
  280. package/dist/plugins/pluginInstaller.js +168 -35
  281. package/dist/plugins/schemas.js +41 -6
  282. package/dist/plugins/types.d.ts +10 -0
  283. package/dist/preset/index.d.ts +7 -1
  284. package/dist/preset/index.js +112 -6
  285. package/dist/product/types.d.ts +1 -1
  286. package/dist/prompt/composer.d.ts +31 -0
  287. package/dist/prompt/composer.js +95 -25
  288. package/dist/prompt/instruction-scanner.js +5 -3
  289. package/dist/prompt/section-loader.js +1 -0
  290. package/dist/prompt/sections/base.md +1 -0
  291. package/dist/prompt/sections/browser.md +10 -0
  292. package/dist/prompt/sections/coding.md +4 -0
  293. package/dist/prompt/sections/orchestration.md +8 -0
  294. package/dist/protocol/chat-session-manager.d.ts +15 -2
  295. package/dist/protocol/chat-session-manager.js +46 -0
  296. package/dist/protocol/chat-session.d.ts +82 -0
  297. package/dist/protocol/chat-session.js +121 -1
  298. package/dist/protocol/client.d.ts +27 -0
  299. package/dist/protocol/client.js +38 -0
  300. package/dist/protocol/redact.d.ts +50 -0
  301. package/dist/protocol/redact.js +71 -0
  302. package/dist/protocol/server.d.ts +153 -2
  303. package/dist/protocol/server.js +807 -39
  304. package/dist/protocol/tcp-transport.d.ts +45 -0
  305. package/dist/protocol/tcp-transport.js +74 -0
  306. package/dist/protocol/transport.js +3 -2
  307. package/dist/protocol/types.d.ts +69 -0
  308. package/dist/protocol/types.js +22 -0
  309. package/dist/quota/credentials.d.ts +3 -0
  310. package/dist/quota/credentials.js +80 -0
  311. package/dist/quota/index.d.ts +36 -0
  312. package/dist/quota/index.js +155 -0
  313. package/dist/quota/types.d.ts +48 -0
  314. package/dist/quota/types.js +13 -0
  315. package/dist/remote/bridge.d.ts +11 -2
  316. package/dist/remote/bridge.js +61 -33
  317. package/dist/review/review-prompt.d.ts +28 -0
  318. package/dist/review/review-prompt.js +81 -0
  319. package/dist/run/ArtifactTracker.js +5 -4
  320. package/dist/run/EngineRunner.d.ts +27 -1
  321. package/dist/run/EngineRunner.js +46 -8
  322. package/dist/run/FileRunStore.js +40 -11
  323. package/dist/run/RunApprovalBackend.js +25 -5
  324. package/dist/run/RunLock.d.ts +28 -2
  325. package/dist/run/RunLock.js +49 -7
  326. package/dist/run/RunManager.d.ts +12 -0
  327. package/dist/run/RunManager.js +86 -3
  328. package/dist/run/RunQueue.d.ts +1 -0
  329. package/dist/run/RunQueue.js +8 -2
  330. package/dist/run/factory.d.ts +8 -1
  331. package/dist/run/factory.js +1 -0
  332. package/dist/run/index.d.ts +2 -2
  333. package/dist/run/index.js +1 -1
  334. package/dist/run/redirect-target.d.ts +7 -0
  335. package/dist/run/redirect-target.js +13 -0
  336. package/dist/run/types.js +1 -1
  337. package/dist/runtime/background-shell.d.ts +139 -0
  338. package/dist/runtime/background-shell.js +495 -0
  339. package/dist/runtime/output-clean.d.ts +24 -0
  340. package/dist/runtime/output-clean.js +41 -0
  341. package/dist/runtime/ring-file.d.ts +64 -0
  342. package/dist/runtime/ring-file.js +174 -0
  343. package/dist/runtime/safe-spawn.js +15 -34
  344. package/dist/runtime/spawn-common.d.ts +148 -0
  345. package/dist/runtime/spawn-common.js +303 -0
  346. package/dist/runtime/truncate-output.d.ts +22 -0
  347. package/dist/runtime/truncate-output.js +49 -0
  348. package/dist/runtime/utf8-cut.d.ts +11 -0
  349. package/dist/runtime/utf8-cut.js +23 -0
  350. package/dist/services/auto-dream.d.ts +4 -0
  351. package/dist/services/auto-dream.js +26 -26
  352. package/dist/services/browser-open.d.ts +13 -0
  353. package/dist/services/browser-open.js +16 -0
  354. package/dist/services/diagnostics.d.ts +1 -2
  355. package/dist/services/diagnostics.js +12 -7
  356. package/dist/services/dream-consolidation.d.ts +57 -0
  357. package/dist/services/dream-consolidation.js +151 -0
  358. package/dist/services/extract-memories.d.ts +14 -1
  359. package/dist/services/extract-memories.js +45 -6
  360. package/dist/services/memory-orchestrator.d.ts +21 -0
  361. package/dist/services/memory-orchestrator.js +125 -32
  362. package/dist/services/notifier.d.ts +8 -0
  363. package/dist/services/notifier.js +39 -25
  364. package/dist/services/oauth.js +5 -7
  365. package/dist/services/session-memory-sort.d.ts +8 -0
  366. package/dist/services/session-memory-sort.js +9 -0
  367. package/dist/services/session-memory.js +30 -19
  368. package/dist/session/file-history.d.ts +124 -1
  369. package/dist/session/file-history.js +232 -9
  370. package/dist/session/memory.d.ts +116 -2
  371. package/dist/session/memory.js +250 -28
  372. package/dist/session/session-manager.d.ts +63 -1
  373. package/dist/session/session-manager.js +186 -5
  374. package/dist/session/simple-diff.d.ts +23 -0
  375. package/dist/session/simple-diff.js +84 -0
  376. package/dist/session/transcript.d.ts +25 -1
  377. package/dist/session/transcript.js +35 -2
  378. package/dist/session/undo-target.d.ts +67 -0
  379. package/dist/session/undo-target.js +144 -0
  380. package/dist/settings/disk-defaults.d.ts +42 -0
  381. package/dist/settings/disk-defaults.js +33 -0
  382. package/dist/settings/feature-flags.d.ts +64 -0
  383. package/dist/settings/feature-flags.js +61 -0
  384. package/dist/settings/manager.d.ts +101 -1
  385. package/dist/settings/manager.js +345 -15
  386. package/dist/settings/migrate-config.d.ts +45 -0
  387. package/dist/settings/migrate-config.js +125 -0
  388. package/dist/settings/personalization.d.ts +19 -0
  389. package/dist/settings/personalization.js +7 -0
  390. package/dist/settings/schema-export.d.ts +25 -0
  391. package/dist/settings/schema-export.js +38 -0
  392. package/dist/settings/schema.d.ts +1827 -396
  393. package/dist/settings/schema.js +361 -81
  394. package/dist/skills/scanner.d.ts +9 -0
  395. package/dist/skills/scanner.js +30 -2
  396. package/dist/stt/resolve-transcribe.d.ts +31 -0
  397. package/dist/stt/resolve-transcribe.js +108 -0
  398. package/dist/stt/transcribe.d.ts +51 -0
  399. package/dist/stt/transcribe.js +65 -0
  400. package/dist/tool-system/browser-bridge.d.ts +226 -0
  401. package/dist/tool-system/browser-bridge.js +163 -0
  402. package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
  403. package/dist/tool-system/builtin/add-marketplace.js +76 -0
  404. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  405. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  406. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  407. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  408. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  409. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  410. package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
  411. package/dist/tool-system/builtin/agent-registry.js +16 -4
  412. package/dist/tool-system/builtin/agent.d.ts +50 -11
  413. package/dist/tool-system/builtin/agent.js +576 -73
  414. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  415. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  416. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  417. package/dist/tool-system/builtin/apply-patch/index.js +7 -3
  418. package/dist/tool-system/builtin/arena.js +6 -7
  419. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  420. package/dist/tool-system/builtin/background-jobs.js +124 -0
  421. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  422. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  423. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  424. package/dist/tool-system/builtin/background-work.js +86 -0
  425. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  426. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  427. package/dist/tool-system/builtin/bash.d.ts +5 -2
  428. package/dist/tool-system/builtin/bash.js +98 -62
  429. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  430. package/dist/tool-system/builtin/browser-tools.js +312 -0
  431. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  432. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  433. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  434. package/dist/tool-system/builtin/check-quota.js +34 -0
  435. package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
  436. package/dist/tool-system/builtin/complete-goal.js +45 -0
  437. package/dist/tool-system/builtin/config.js +7 -0
  438. package/dist/tool-system/builtin/cron.d.ts +7 -0
  439. package/dist/tool-system/builtin/cron.js +105 -9
  440. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  441. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  442. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  443. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  444. package/dist/tool-system/builtin/edit.d.ts +2 -1
  445. package/dist/tool-system/builtin/edit.js +21 -12
  446. package/dist/tool-system/builtin/eol.d.ts +29 -0
  447. package/dist/tool-system/builtin/eol.js +37 -0
  448. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  449. package/dist/tool-system/builtin/file-cache.js +8 -0
  450. package/dist/tool-system/builtin/generate-image.d.ts +60 -0
  451. package/dist/tool-system/builtin/generate-image.js +374 -0
  452. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  453. package/dist/tool-system/builtin/generate-video.js +361 -0
  454. package/dist/tool-system/builtin/grep.js +6 -2
  455. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  456. package/dist/tool-system/builtin/image-providers.js +190 -0
  457. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  458. package/dist/tool-system/builtin/image-uploader.js +74 -0
  459. package/dist/tool-system/builtin/index.d.ts +24 -1
  460. package/dist/tool-system/builtin/index.js +310 -25
  461. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  462. package/dist/tool-system/builtin/memory.js +45 -7
  463. package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
  464. package/dist/tool-system/builtin/notebook-edit.js +1 -1
  465. package/dist/tool-system/builtin/powershell.js +4 -1
  466. package/dist/tool-system/builtin/read.d.ts +2 -1
  467. package/dist/tool-system/builtin/read.js +11 -3
  468. package/dist/tool-system/builtin/repl.js +4 -1
  469. package/dist/tool-system/builtin/skill.js +9 -0
  470. package/dist/tool-system/builtin/sleep.js +12 -5
  471. package/dist/tool-system/builtin/task.js +4 -1
  472. package/dist/tool-system/builtin/tool-search.js +25 -7
  473. package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
  474. package/dist/tool-system/builtin/update-automation-memory.js +60 -0
  475. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  476. package/dist/tool-system/builtin/video-providers.js +235 -0
  477. package/dist/tool-system/builtin/view-image.d.ts +18 -0
  478. package/dist/tool-system/builtin/view-image.js +96 -0
  479. package/dist/tool-system/builtin/web-fetch.js +12 -2
  480. package/dist/tool-system/builtin/web-search.d.ts +4 -1
  481. package/dist/tool-system/builtin/web-search.js +57 -10
  482. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  483. package/dist/tool-system/builtin/worktree.js +31 -4
  484. package/dist/tool-system/builtin/write.d.ts +2 -1
  485. package/dist/tool-system/builtin/write.js +1 -1
  486. package/dist/tool-system/context.d.ts +166 -6
  487. package/dist/tool-system/executor.d.ts +3 -2
  488. package/dist/tool-system/executor.js +197 -119
  489. package/dist/tool-system/investigation-guard.d.ts +4 -1
  490. package/dist/tool-system/investigation-guard.js +20 -4
  491. package/dist/tool-system/mcp-manager.d.ts +78 -16
  492. package/dist/tool-system/mcp-manager.js +357 -28
  493. package/dist/tool-system/path-policy.d.ts +99 -0
  494. package/dist/tool-system/path-policy.js +578 -0
  495. package/dist/tool-system/permission.d.ts +36 -1
  496. package/dist/tool-system/permission.js +322 -117
  497. package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
  498. package/dist/tool-system/plan-mode-allowlist.js +65 -0
  499. package/dist/tool-system/registry.d.ts +1 -0
  500. package/dist/tool-system/registry.js +26 -1
  501. package/dist/tool-system/sandbox/index.d.ts +8 -0
  502. package/dist/tool-system/sandbox/index.js +7 -2
  503. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  504. package/dist/tool-system/validate-tool-metadata.js +63 -0
  505. package/dist/tool-system/validation.d.ts +10 -0
  506. package/dist/tool-system/validation.js +16 -3
  507. package/dist/types.d.ts +301 -15
  508. package/dist/updater.js +20 -9
  509. package/dist/utils/envUtils.d.ts +0 -9
  510. package/dist/utils/envUtils.js +3 -28
  511. package/dist/utils/exec.d.ts +40 -0
  512. package/dist/utils/exec.js +144 -0
  513. package/dist/utils/format.js +4 -2
  514. package/dist/utils/json.d.ts +12 -0
  515. package/dist/utils/json.js +92 -0
  516. package/dist/utils/lockfile.js +9 -2
  517. package/dist/utils/theme.d.ts +7 -1
  518. package/dist/utils/theme.js +5 -3
  519. package/dist/utils/toolDisplay.js +0 -1
  520. package/package.json +14 -7
  521. package/dist/agent/coordinator.d.ts +0 -49
  522. package/dist/agent/coordinator.js +0 -77
  523. package/dist/settings/manager.test.js +0 -73
  524. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  525. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  526. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  527. package/dist/tool-system/builtin/send-message.js +0 -47
  528. /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
+ }
@@ -33,8 +33,10 @@ export function formatDuration(ms, options) {
33
33
  if (ms === 0) {
34
34
  return '0s';
35
35
  }
36
- // For durations < 1s, show 1 decimal place (e.g., 0.5s)
37
- if (ms < 1) {
36
+ // For durations < 1s, show 1 decimal place (e.g., 0.5s). This must cover
37
+ // the whole (0, 1000)ms range — the old `< 1` guard let [1, 1000)ms fall
38
+ // through to Math.floor(ms/1000) = 0 → a wrong "0s".
39
+ if (ms < 1000) {
38
40
  const s = (ms / 1000).toFixed(1);
39
41
  return `${s}s`;
40
42
  }
@@ -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
+ }
@@ -8,11 +8,18 @@
8
8
  * Import this module instead of `proper-lockfile` directly. The underlying
9
9
  * package is only loaded the first time a lock function is actually called.
10
10
  */
11
+ import { createRequire } from 'node:module';
12
+ // proper-lockfile is CommonJS. This module compiles to ESM (tsc module: ESNext,
13
+ // package "type":"module"), and `require` is NOT a global in ESM — under the
14
+ // Electron main process (an ESM bundle that loads core as an external ESM dep)
15
+ // a bare `require('proper-lockfile')` throws "require is not defined", which
16
+ // surfaced as run locks silently failing ("Run now does nothing"). createRequire
17
+ // gives us a CJS-capable require that works in both ESM and CJS/Bun hosts.
18
+ const nodeRequire = createRequire(import.meta.url);
11
19
  let _lockfile;
12
20
  function getLockfile() {
13
21
  if (!_lockfile) {
14
- // eslint-disable-next-line @typescript-eslint/no-require-imports
15
- _lockfile = require('proper-lockfile');
22
+ _lockfile = nodeRequire('proper-lockfile');
16
23
  }
17
24
  return _lockfile;
18
25
  }
@@ -85,9 +85,15 @@ 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.
92
92
  */
93
93
  export declare function themeColorToAnsi(themeColor: string): string;
94
+ /**
95
+ * Nearest xterm-256 color index for an RGB triple.
96
+ * Uses the 6×6×6 color cube (indices 16-231) plus the 24-step grayscale ramp
97
+ * (indices 232-255).
98
+ */
99
+ export declare function rgbToXterm256(r: number, g: number, b: number): number;
@@ -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.
@@ -527,14 +527,16 @@ export function themeColorToAnsi(themeColor) {
527
527
  * Uses the 6×6×6 color cube (indices 16-231) plus the 24-step grayscale ramp
528
528
  * (indices 232-255).
529
529
  */
530
- function rgbToXterm256(r, g, b) {
530
+ export function rgbToXterm256(r, g, b) {
531
531
  // Grayscale ramp: pick it when all channels are equal-ish
532
532
  if (Math.abs(r - g) < 8 && Math.abs(g - b) < 8) {
533
533
  if (r < 8)
534
534
  return 16;
535
535
  if (r > 248)
536
536
  return 231;
537
- return Math.round((r - 8) / 247 * 24) + 232;
537
+ // 24 ramp steps (idx 232-255) span RGB [8,248] = 240 units /240*23.
538
+ // The old /247*24 produced off-by-one indices.
539
+ return Math.round((r - 8) / 240 * 23) + 232;
538
540
  }
539
541
  // 6×6×6 cube
540
542
  const ri = Math.round(r / 255 * 5);
@@ -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.1",
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",
@@ -34,9 +35,12 @@
34
35
  "openai": "^4.82.0",
35
36
  "proper-lockfile": "^4.1.2",
36
37
  "semver": "^7.7.4",
38
+ "smol-toml": "^1.6.1",
37
39
  "strip-ansi": "^7.2.0",
38
40
  "yaml": "^2.7.0",
39
- "zod": "^3.24.2"
41
+ "yauzl": "^3.4.0",
42
+ "zod": "^3.24.2",
43
+ "zod-to-json-schema": "^3.25.2"
40
44
  },
41
45
  "engines": {
42
46
  "node": ">=20.10"
@@ -68,5 +72,8 @@
68
72
  ],
69
73
  "publishConfig": {
70
74
  "access": "public"
75
+ },
76
+ "devDependencies": {
77
+ "@types/yauzl": "^3.4.0"
71
78
  }
72
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>;