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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,76 @@
1
+ /**
2
+ * Provider auth/header resolution for custom model providers (TODO 7.2).
3
+ *
4
+ * - `authCommand`: a shell command whose stdout is an auth token. Used for
5
+ * short-lived tokens vended by an external tool (gcloud, aws, vault…). The
6
+ * result is cached briefly so we don't re-run the command on every request.
7
+ * - `httpHeaders`: extra headers; a `$ENV_VAR` value is resolved from the
8
+ * environment at build time so secrets stay out of settings.json.
9
+ *
10
+ * The token-running side is isolated behind a `runCommand` injection so the
11
+ * env-var + caching logic is unit-testable without spawning a shell.
12
+ */
13
+ import { createRequire } from "node:module";
14
+ /** Resolve `$ENV` / `${ENV}` placeholders in a header value against `env`. */
15
+ export function resolveHeaderValue(value, env = process.env) {
16
+ const m = /^\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?$/.exec(value.trim());
17
+ if (m)
18
+ return env[m[1]] ?? "";
19
+ return value;
20
+ }
21
+ /** Resolve every header value's env placeholders, dropping empties. */
22
+ export function resolveHeaders(headers, env = process.env) {
23
+ const out = {};
24
+ if (!headers)
25
+ return out;
26
+ for (const [k, v] of Object.entries(headers)) {
27
+ const resolved = resolveHeaderValue(v, env);
28
+ if (resolved)
29
+ out[k] = resolved;
30
+ }
31
+ return out;
32
+ }
33
+ const tokenCache = new Map();
34
+ /** Token cache TTL — short, since external tokens are usually short-lived. */
35
+ const TOKEN_TTL_MS = 60_000;
36
+ /**
37
+ * Run an auth command and return its trimmed first line as the token. Caches
38
+ * by command string for {@link TOKEN_TTL_MS}. `now`/`runCommand` are injectable
39
+ * for tests. Returns "" if the command yields no output.
40
+ */
41
+ export function resolveAuthCommand(command, opts = {}) {
42
+ const now = opts.now ?? Date.now();
43
+ const cached = tokenCache.get(command);
44
+ if (cached && cached.expiresAt > now)
45
+ return cached.token;
46
+ const run = opts.runCommand ??
47
+ ((cmd) => {
48
+ // Lazy require (via createRequire so it works in ESM bundles too) so the
49
+ // pure helpers above don't pull in child_process at module load.
50
+ const { execSync } = createRequire(import.meta.url)("node:child_process");
51
+ return execSync(cmd, { encoding: "utf8", timeout: 30_000 });
52
+ });
53
+ const out = run(command) ?? "";
54
+ const token = out.split("\n")[0]?.trim() ?? "";
55
+ tokenCache.set(command, { token, expiresAt: now + TOKEN_TTL_MS });
56
+ return token;
57
+ }
58
+ /** Test seam: clear the token cache. */
59
+ export function __clearAuthTokenCache() {
60
+ tokenCache.clear();
61
+ }
62
+ /**
63
+ * Resolve the effective API key for a client: an explicit `apiKey` wins;
64
+ * otherwise run `authCommand` if present; otherwise fall back to `envKey`
65
+ * (e.g. process.env.OPENAI_API_KEY). Returns undefined when nothing resolves.
66
+ */
67
+ export function resolveApiKey(config, envKey, opts = {}) {
68
+ if (config.apiKey)
69
+ return config.apiKey;
70
+ if (config.authCommand) {
71
+ const token = resolveAuthCommand(config.authCommand, opts);
72
+ if (token)
73
+ return token;
74
+ }
75
+ return envKey;
76
+ }
@@ -11,6 +11,10 @@ export interface ProviderConfig {
11
11
  kind: ProviderKindName;
12
12
  baseUrl: string;
13
13
  apiKey?: string;
14
+ /** Shell command yielding an auth token (TODO 7.2). See LLMConfig.authCommand. */
15
+ authCommand?: string;
16
+ /** Extra HTTP headers for this provider (TODO 7.2). See LLMConfig.httpHeaders. */
17
+ httpHeaders?: Record<string, string>;
14
18
  protocol?: "openai-compat" | "anthropic-style";
15
19
  modelsPath?: string;
16
20
  /** Default reasoning/thinking setting for this provider. See LLMConfig. */
@@ -7,6 +7,7 @@ import { ContextLimitError, LLMError, LLMRateLimitError } from "../../exceptions
7
7
  import { logger } from "../../logging/logger.js";
8
8
  import { countTokens } from "../token-counter.js";
9
9
  import { capabilitiesFor } from "../capabilities/index.js";
10
+ import { resolveApiKey, resolveHeaders } from "../provider-auth.js";
10
11
  import { stripVisionFromHistory } from "../strip-vision.js";
11
12
  /**
12
13
  * Anthropic's `max_tokens` is required, so unlike OpenAI we can't omit it when
@@ -30,9 +31,12 @@ export class AnthropicClient extends LLMClientBase {
30
31
  }
31
32
  get client() {
32
33
  if (!this._client) {
34
+ const headers = resolveHeaders(this.config.httpHeaders);
33
35
  this._client = new Anthropic({
34
- apiKey: this.config.apiKey ?? process.env.ANTHROPIC_API_KEY,
36
+ // explicit apiKey > authCommand stdout > ANTHROPIC_API_KEY (TODO 7.2).
37
+ apiKey: resolveApiKey(this.config, process.env.ANTHROPIC_API_KEY),
35
38
  ...(this.config.baseUrl ? { baseURL: this.config.baseUrl } : {}),
39
+ ...(Object.keys(headers).length > 0 ? { defaultHeaders: headers } : {}),
36
40
  timeout: this.timeout,
37
41
  });
38
42
  }
@@ -101,7 +105,7 @@ export class AnthropicClient extends LLMClientBase {
101
105
  return { type: "enabled", budget_tokens: budget };
102
106
  }
103
107
  async createMessage(options) {
104
- return this.withRetry(async () => {
108
+ return this.withRetry(async (requestSignal) => {
105
109
  const messages = this.buildMessages(options.messages);
106
110
  const tools = options.tools ? this.convertTools(options.tools) : undefined;
107
111
  // One span per outbound LLM request. Begin emits debug-level so the
@@ -118,8 +122,8 @@ export class AnthropicClient extends LLMClientBase {
118
122
  });
119
123
  try {
120
124
  const response = options.stream && options.onChunk
121
- ? await this.streamMessage(options, messages, tools)
122
- : await this.nonStreamMessage(options, messages, tools);
125
+ ? await this.streamMessage(options, messages, tools, requestSignal)
126
+ : await this.nonStreamMessage(options, messages, tools, requestSignal);
123
127
  span.end({
124
128
  stopReason: response.stopReason,
125
129
  promptTokens: response.usage?.promptTokens,
@@ -133,9 +137,9 @@ export class AnthropicClient extends LLMClientBase {
133
137
  span.fail(err);
134
138
  throw err;
135
139
  }
136
- });
140
+ }, { signal: options.signal });
137
141
  }
138
- async nonStreamMessage(options, messages, tools) {
142
+ async nonStreamMessage(options, messages, tools, requestSignal) {
139
143
  try {
140
144
  // Per-call reasoning wins; otherwise fall back to the provider/model
141
145
  // default (settings → LLMConfig.reasoning). Mirrors openai.ts.
@@ -158,7 +162,7 @@ export class AnthropicClient extends LLMClientBase {
158
162
  ...(options.temperature !== undefined
159
163
  ? { temperature: options.temperature }
160
164
  : { temperature: this.temperature }),
161
- }, { signal: options.signal });
165
+ }, { signal: requestSignal ?? options.signal });
162
166
  const usage = {
163
167
  promptTokens: response.usage.input_tokens,
164
168
  completionTokens: response.usage.output_tokens,
@@ -174,7 +178,7 @@ export class AnthropicClient extends LLMClientBase {
174
178
  throw err;
175
179
  }
176
180
  }
177
- async streamMessage(options, messages, tools) {
181
+ async streamMessage(options, messages, tools, requestSignal) {
178
182
  try {
179
183
  const reasoning = options.reasoning ?? this.config.reasoning;
180
184
  const maxTokens = options.maxTokens ?? this.maxTokens ?? ANTHROPIC_FALLBACK_MAX_TOKENS;
@@ -195,7 +199,7 @@ export class AnthropicClient extends LLMClientBase {
195
199
  ...(options.temperature !== undefined
196
200
  ? { temperature: options.temperature }
197
201
  : { temperature: this.temperature }),
198
- }, { signal: options.signal });
202
+ }, { signal: requestSignal ?? options.signal });
199
203
  let currentText = "";
200
204
  let currentToolName = "";
201
205
  let currentToolId = "";
@@ -212,12 +216,15 @@ export class AnthropicClient extends LLMClientBase {
212
216
  return;
213
217
  options.onChunk?.(chunk);
214
218
  };
215
- if (options.signal) {
216
- const sig = options.signal;
217
- if (sig.aborted)
219
+ // Tear the SDK stream down on EITHER the user's cancel OR the per-request
220
+ // deadline (requestSignal composes both) — a wedged stream then aborts
221
+ // instead of hanging on the SDK's unreliable timeout.
222
+ const teardownSig = requestSignal ?? options.signal;
223
+ if (teardownSig) {
224
+ if (teardownSig.aborted)
218
225
  stream.abort();
219
226
  else
220
- sig.addEventListener("abort", () => stream.abort(), { once: true });
227
+ teardownSig.addEventListener("abort", () => stream.abort(), { once: true });
221
228
  }
222
229
  // Time-to-first-byte: log exactly once per stream so streaming-latency
223
230
  // questions ("model felt slow tonight") get a clean number per request.
@@ -373,14 +380,57 @@ export class AnthropicClient extends LLMClientBase {
373
380
  }
374
381
  }
375
382
  }
383
+ // Prompt-cache breakpoint on the history: mark the LAST content block of
384
+ // the LAST message. The API caches everything up to the marker, so the
385
+ // stable prefix (all prior turns) is reused; only the growing tail is
386
+ // re-billed. CC does exactly this (one marker at messages.length - 1) and
387
+ // warns a second history marker causes KV page eviction. We only ANNOTATE
388
+ // the tail block — never reorder — so the tool_use/tool_result adjacency
389
+ // invariant is untouched. A string-content message is lifted to a single
390
+ // text block so it can carry cache_control. See
391
+ // docs/todo/prompt-cache-optimization.md.
392
+ const lastMsg = result[result.length - 1];
393
+ if (lastMsg) {
394
+ if (typeof lastMsg.content === "string") {
395
+ lastMsg.content = [
396
+ {
397
+ type: "text",
398
+ text: lastMsg.content,
399
+ cache_control: { type: "ephemeral" },
400
+ },
401
+ ];
402
+ }
403
+ else {
404
+ const lastBlock = lastMsg.content[lastMsg.content.length - 1];
405
+ // Skip thinking/redacted_thinking blocks: they reject cache_control and
406
+ // marking them would 400. buildMessages never emits them today (thinking
407
+ // is a top-level request field, not history content), but guard anyway
408
+ // so a future block type can't silently break the request.
409
+ if (lastBlock &&
410
+ lastBlock.type !== "thinking" &&
411
+ lastBlock.type !== "redacted_thinking") {
412
+ lastBlock.cache_control = { type: "ephemeral" };
413
+ }
414
+ }
415
+ }
376
416
  return result;
377
417
  }
378
418
  convertTools(tools) {
379
- return tools.map((t) => ({
419
+ const converted = tools.map((t) => ({
380
420
  name: t.name,
381
421
  description: t.description,
382
422
  input_schema: t.inputSchema,
383
423
  }));
424
+ // Prompt-cache breakpoint: mark ONLY the last tool. The API caches every
425
+ // block up to and including a cache_control marker, so one marker on the
426
+ // tail makes the whole (stable) tools array a cached prefix — vs 73
427
+ // definitions re-billed as input every turn. CC does the same (one marker,
428
+ // not per-tool); a second marker here would waste a scarce cache_control
429
+ // slot (max 4) and risk KV eviction. See docs/todo/prompt-cache-optimization.md.
430
+ const last = converted[converted.length - 1];
431
+ if (last)
432
+ last.cache_control = { type: "ephemeral" };
433
+ return converted;
384
434
  }
385
435
  handleApiError(err) {
386
436
  // ESC / Stop path — see openai.ts handleApiError for the same logic.
@@ -27,6 +27,13 @@ interface RunStreamOpts {
27
27
  * Stop ("content comes back after interrupt").
28
28
  */
29
29
  signal?: AbortSignal;
30
+ /**
31
+ * Per-call override of the watchdog. Leave undefined to follow the env
32
+ * default (STREAM_WATCHDOG_CONFIG.enabled). Set false to force the fast
33
+ * path even when the watchdog is enabled globally; passing idleTimeoutMs
34
+ * still re-activates it (an explicit timeout means the caller wants it).
35
+ */
36
+ disableWatchdog?: boolean;
30
37
  }
31
38
  /**
32
39
  * Consume an async iterable of stream chunks with an idle watchdog.
@@ -56,6 +63,20 @@ export declare class OpenAIClient extends LLMClientBase {
56
63
  */
57
64
  private _capability;
58
65
  private get capability();
66
+ /**
67
+ * True when this client routes an Anthropic-family model through OpenRouter's
68
+ * OpenAI-compatible endpoint. Anthropic caching is EXPLICIT — nothing is
69
+ * cached unless the request carries `cache_control` breakpoints (verified live
70
+ * 2026-07-02: plain requests to anthropic/claude-opus-4.7-fast via OpenRouter
71
+ * report cached_tokens 0 on every repeat; a single system-block breakpoint
72
+ * turns the whole stable prefix — tools + system — into a cache hit, ~89%
73
+ * cheaper on the follow-up). OpenAI and other OpenRouter models cache
74
+ * automatically, so they must NOT get breakpoints. The slug arrives resolved
75
+ * (e.g. "anthropic/claude-opus-4.7-fast") or as the router alias
76
+ * ("~anthropic/claude-opus-latest") — both start with an optional "~" then
77
+ * "anthropic/".
78
+ */
79
+ private get isOpenRouterAnthropic();
59
80
  createMessage(options: CreateMessageOptions): Promise<LLMResponse>;
60
81
  /**
61
82
  * Build the request body honoring the model's capability descriptor.
@@ -67,6 +88,21 @@ export declare class OpenAIClient extends LLMClientBase {
67
88
  private streamMessage;
68
89
  private processChoice;
69
90
  private buildMessages;
91
+ /**
92
+ * In-place: add prompt-cache breakpoints for Anthropic-over-OpenRouter.
93
+ * Mirrors the native anthropic provider (≤4 breakpoints):
94
+ * 1. System block — the stable prefix. Anthropic sees tools BEFORE the
95
+ * system prompt, so one marker on the system block caches tools too
96
+ * (verified live: system-only marker cached 3511/3952 prompt tokens
97
+ * including tool defs).
98
+ * 2. Last message — one rolling breakpoint so the growing conversation
99
+ * history becomes a cached prefix. Not scrolled: as history grows the
100
+ * "last message" naturally advances and its tail is the next write.
101
+ * A string `content` is lifted to a single-element `[{type:"text",...}]`
102
+ * array so it can carry `cache_control`; OpenRouter accepts this OpenAI
103
+ * multimodal wire form for text.
104
+ */
105
+ private applyAnthropicCacheBreakpoints;
70
106
  private convertTools;
71
107
  private handleApiError;
72
108
  }