@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,90 @@
1
+ /**
2
+ * Model catalog assembly — merge built-in (A) + user (B) templates.
3
+ *
4
+ * - A: {@link BUILTIN_CATALOG} (ships with the app).
5
+ * - B: ~/.code-shell/model-catalog.user.json (user-added templates).
6
+ * - merge: union by `id`; same id → user B wins (so升级 doesn't clobber the
7
+ * user's overrides/additions).
8
+ *
9
+ * No remote source this version (design doc §5).
10
+ */
11
+ import { readFileSync, existsSync } from "node:fs";
12
+ import { join } from "node:path";
13
+ import { userHome } from "../settings/manager.js";
14
+ import { logger } from "../logging/logger.js";
15
+ import { BUILTIN_CATALOG } from "./builtin.js";
16
+ import { userCatalogFileSchema } from "./types.js";
17
+ export { BUILTIN_CATALOG } from "./builtin.js";
18
+ export { saveCatalogEntry, deleteUserCatalogEntry } from "./save-entry.js";
19
+ /** Path to the user catalog file (source B). */
20
+ export function userCatalogPath() {
21
+ return join(userHome(), ".code-shell", "model-catalog.user.json");
22
+ }
23
+ /**
24
+ * Load user-defined catalog entries (source B). Returns [] when the file is
25
+ * absent or invalid — a bad user file must never break the built-in catalog.
26
+ */
27
+ export function loadUserCatalog() {
28
+ const path = userCatalogPath();
29
+ if (!existsSync(path))
30
+ return [];
31
+ try {
32
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
33
+ const result = userCatalogFileSchema.safeParse(parsed);
34
+ if (!result.success) {
35
+ logger.warn("model_catalog_user_invalid", { path, issues: result.error.issues.length });
36
+ return [];
37
+ }
38
+ return result.data;
39
+ }
40
+ catch (err) {
41
+ logger.warn("model_catalog_user_read_failed", { path, error: err.message });
42
+ return [];
43
+ }
44
+ }
45
+ /**
46
+ * Merged catalog: built-in (A) ∪ user (B), deduped by `id` with user winning.
47
+ * This is the single source the 连接 page renders from and the tool-description
48
+ * injector looks up `paramsDoc` in.
49
+ */
50
+ export function getMergedCatalog() {
51
+ const byId = new Map();
52
+ for (const e of BUILTIN_CATALOG)
53
+ byId.set(e.id, e);
54
+ for (const e of loadUserCatalog())
55
+ byId.set(e.id, e); // user overrides built-in
56
+ return [...byId.values()];
57
+ }
58
+ /**
59
+ * Look up a catalog entry by id (e.g. an instance's `catalogId`), falling back
60
+ * to the first entry whose `adapterKind` matches `kindFallback`. Since an
61
+ * adapterKind (e.g. "openai") can now back both a text and an image entry,
62
+ * `tagFallback` disambiguates the fallback to the right group.
63
+ */
64
+ export function findCatalogEntry(catalog, id, kindFallback, tagFallback) {
65
+ if (id) {
66
+ const exact = catalog.find((e) => e.id === id);
67
+ if (exact)
68
+ return exact;
69
+ }
70
+ if (kindFallback) {
71
+ return catalog.find((e) => e.adapterKind === kindFallback && (!tagFallback || e.tag === tagFallback));
72
+ }
73
+ return undefined;
74
+ }
75
+ /**
76
+ * Per-id provenance of the merged catalog: pure built-in, pure user-added, or a
77
+ * user override of a built-in. Lets the editor UI show 编辑/删除/重置 correctly
78
+ * (only an override can be "reset"; only a user-only entry can be truly deleted).
79
+ */
80
+ export function catalogEntryOrigins() {
81
+ const builtinIds = new Set(BUILTIN_CATALOG.map((e) => e.id));
82
+ const userIds = new Set(loadUserCatalog().map((e) => e.id));
83
+ const out = {};
84
+ for (const id of builtinIds)
85
+ out[id] = userIds.has(id) ? "user-override-of-builtin" : "builtin";
86
+ for (const id of userIds)
87
+ if (!builtinIds.has(id))
88
+ out[id] = "user";
89
+ return out;
90
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Param projection — the two halves of the "one declaration drives both" goal:
3
+ * - applyParams: user's chosen values → request-body fields (via wire.field).
4
+ * - buildParamsDoc: the param specs → a natural-language note injected into the
5
+ * tool description so the agent knows what a configured model accepts.
6
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §4/§6.
7
+ */
8
+ import type { ParamSpec } from "./types.js";
9
+ /**
10
+ * Project `values` onto a request-body fragment using each spec's wire.field
11
+ * (falling back to the param name). A dotted field ("thinking.budget_tokens")
12
+ * nests. Values with no matching spec, and specs the user didn't set, are
13
+ * skipped.
14
+ */
15
+ export declare function applyParams(values: Record<string, unknown>, params: ParamSpec[]): Record<string, unknown>;
16
+ /**
17
+ * Build a natural-language note describing the params a model accepts, for
18
+ * injection into the tool description. Empty string when there are no params.
19
+ */
20
+ export declare function buildParamsDoc(params: ParamSpec[] | undefined): string;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Project `values` onto a request-body fragment using each spec's wire.field
3
+ * (falling back to the param name). A dotted field ("thinking.budget_tokens")
4
+ * nests. Values with no matching spec, and specs the user didn't set, are
5
+ * skipped.
6
+ */
7
+ export function applyParams(values, params) {
8
+ const body = {};
9
+ for (const spec of params) {
10
+ if (!(spec.name in values))
11
+ continue;
12
+ const value = values[spec.name];
13
+ if (value === undefined)
14
+ continue;
15
+ const field = spec.wire?.field ?? spec.name;
16
+ setDeep(body, field, value);
17
+ }
18
+ return body;
19
+ }
20
+ /** Set a (possibly dotted) path on an object, creating intermediate objects. */
21
+ function setDeep(obj, path, value) {
22
+ const parts = path.split(".");
23
+ let cur = obj;
24
+ for (let i = 0; i < parts.length - 1; i++) {
25
+ const key = parts[i];
26
+ if (typeof cur[key] !== "object" || cur[key] === null)
27
+ cur[key] = {};
28
+ cur = cur[key];
29
+ }
30
+ cur[parts[parts.length - 1]] = value;
31
+ }
32
+ /**
33
+ * Build a natural-language note describing the params a model accepts, for
34
+ * injection into the tool description. Empty string when there are no params.
35
+ */
36
+ export function buildParamsDoc(params) {
37
+ if (!params || params.length === 0)
38
+ return "";
39
+ const lines = params.map((p) => {
40
+ const opts = p.options && p.options.length > 0 ? ` (${p.options.join(" | ")})` : "";
41
+ const doc = p.doc ? ` — ${p.doc}` : "";
42
+ return `${p.name}${opts}${doc}`;
43
+ });
44
+ return lines.join("; ");
45
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * resolveInstance — single resolver every capability entry (chat /
3
+ * GenerateImage / GenerateVideo) goes through. Turns a stored ModelInstance +
4
+ * credentials + catalog into the runtime shape: which adapter, which key (from
5
+ * the referenced credential), which preset, which param values. text/image/
6
+ * video all share this — only adapterKind differs ("底层一套").
7
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §6.
8
+ */
9
+ import { type CatalogEntry } from "./index.js";
10
+ import type { ModelPreset } from "./types.js";
11
+ /** An independent credential (mirrors settings.credentials[] entries). */
12
+ export interface Credential {
13
+ id: string;
14
+ catalogId: string;
15
+ apiKey?: string;
16
+ baseUrl?: string;
17
+ }
18
+ /** A stored connection instance (mirrors settings.modelConnections[] entries). */
19
+ export interface ModelInstance {
20
+ id: string;
21
+ catalogId: string;
22
+ tag: "text" | "image" | "video" | "audio";
23
+ model: string;
24
+ baseUrl?: string;
25
+ /** Which credential supplies the key (independent entity, shareable). */
26
+ credentialId?: string;
27
+ paramValues?: Record<string, unknown>;
28
+ }
29
+ export interface ResolvedInstance {
30
+ entry: CatalogEntry;
31
+ adapterKind: string;
32
+ baseUrl: string;
33
+ apiKey?: string;
34
+ /** Whether the catalog template requires a key (false = local/no-auth provider).
35
+ * Surfaced so higher layers can tell "needs a key but has none" (a misconfig
36
+ * worth a clear error) from "legitimately keyless". resolveInstance itself
37
+ * still NEVER throws on a missing key — that no-crash contract is unchanged. */
38
+ needsKey: boolean;
39
+ preset?: ModelPreset;
40
+ model: string;
41
+ paramValues: Record<string, unknown>;
42
+ }
43
+ /**
44
+ * Resolve `inst` against the credential list (for its key) and `catalog`.
45
+ * Returns null when the instance's catalogId resolves to no entry.
46
+ * baseUrl precedence: connection override → credential → catalog default.
47
+ */
48
+ export declare function resolveInstance(inst: ModelInstance, credentials: Credential[], catalog: CatalogEntry[]): ResolvedInstance | null;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * resolveInstance — single resolver every capability entry (chat /
3
+ * GenerateImage / GenerateVideo) goes through. Turns a stored ModelInstance +
4
+ * credentials + catalog into the runtime shape: which adapter, which key (from
5
+ * the referenced credential), which preset, which param values. text/image/
6
+ * video all share this — only adapterKind differs ("底层一套").
7
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §6.
8
+ */
9
+ import { findCatalogEntry } from "./index.js";
10
+ /**
11
+ * Resolve `inst` against the credential list (for its key) and `catalog`.
12
+ * Returns null when the instance's catalogId resolves to no entry.
13
+ * baseUrl precedence: connection override → credential → catalog default.
14
+ */
15
+ export function resolveInstance(inst, credentials, catalog) {
16
+ const entry = findCatalogEntry(catalog, inst.catalogId);
17
+ if (!entry)
18
+ return null;
19
+ const cred = inst.credentialId
20
+ ? credentials.find((c) => c.id === inst.credentialId)
21
+ : undefined;
22
+ const preset = entry.modelPresets?.find((p) => p.value === inst.model);
23
+ return {
24
+ entry,
25
+ adapterKind: entry.adapterKind,
26
+ baseUrl: inst.baseUrl ?? cred?.baseUrl ?? entry.defaultBaseUrl,
27
+ apiKey: cred?.apiKey,
28
+ needsKey: entry.needsKey !== false, // default-true: only an explicit false is keyless
29
+ preset,
30
+ model: inst.model,
31
+ paramValues: inst.paramValues ?? {},
32
+ };
33
+ }
@@ -0,0 +1,32 @@
1
+ export interface SaveCatalogResult {
2
+ ok: boolean;
3
+ action?: "added" | "updated";
4
+ error?: string;
5
+ backup?: string;
6
+ }
7
+ /**
8
+ * @param stamp caller-supplied unique suffix for the backup filename. Pass a
9
+ * timestamp/counter from the caller — core forbids Date.now() in some paths
10
+ * and tests need determinism.
11
+ */
12
+ export declare function saveCatalogEntry(entry: unknown, opts: {
13
+ path: string;
14
+ stamp: string;
15
+ }): SaveCatalogResult;
16
+ export interface DeleteCatalogResult {
17
+ ok: boolean;
18
+ removed: boolean;
19
+ error?: string;
20
+ backup?: string;
21
+ }
22
+ /**
23
+ * Remove the entry with `id` from the user catalog file. Mirrors saveCatalogEntry's
24
+ * backup + atomic-write safety. removed:false means the id wasn't in the user file
25
+ * (a pristine built-in entry, or simply absent). The built-in catalog is code,
26
+ * untouched — deleting a user override just lets getMergedCatalog fall back to the
27
+ * built-in version ("reset" semantics).
28
+ */
29
+ export declare function deleteUserCatalogEntry(id: string, opts: {
30
+ path: string;
31
+ stamp: string;
32
+ }): DeleteCatalogResult;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * saveCatalogEntry — backup + validate + upsert-write one CatalogEntry into a
3
+ * user catalog file. Safe: backs up any existing (even corrupt) file first,
4
+ * validates the entry against the schema, and only writes on success. The
5
+ * agent-facing catalog edit tool wraps this; key/credentials are NOT touched
6
+ * here (those go through the user's own Edit, by design).
7
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §7.
8
+ */
9
+ import { readFileSync, writeFileSync, existsSync, copyFileSync, mkdirSync } from "node:fs";
10
+ import { dirname } from "node:path";
11
+ import { catalogEntrySchema, userCatalogFileSchema } from "./types.js";
12
+ import { upsertCatalogEntry } from "./upsert.js";
13
+ /**
14
+ * @param stamp caller-supplied unique suffix for the backup filename. Pass a
15
+ * timestamp/counter from the caller — core forbids Date.now() in some paths
16
+ * and tests need determinism.
17
+ */
18
+ export function saveCatalogEntry(entry, opts) {
19
+ // Validate the incoming entry first — never write a malformed catalog.
20
+ const parsed = catalogEntrySchema.safeParse(entry);
21
+ if (!parsed.success) {
22
+ return { ok: false, error: `invalid catalog entry: ${parsed.error.issues.map((i) => i.message).join("; ")}` };
23
+ }
24
+ const valid = parsed.data;
25
+ // Read + back up any existing file (even if corrupt — never silently lose it).
26
+ let current = [];
27
+ let backup;
28
+ if (existsSync(opts.path)) {
29
+ backup = `${opts.path}.bak-${opts.stamp}`;
30
+ try {
31
+ copyFileSync(opts.path, backup);
32
+ }
33
+ catch {
34
+ backup = undefined; // best-effort; don't abort the write on backup failure
35
+ }
36
+ try {
37
+ const raw = JSON.parse(readFileSync(opts.path, "utf-8"));
38
+ const safe = userCatalogFileSchema.safeParse(raw);
39
+ current = safe.success ? safe.data : [];
40
+ }
41
+ catch {
42
+ current = []; // corrupt → start fresh (original preserved in backup)
43
+ }
44
+ }
45
+ const action = current.some((e) => e.id === valid.id) ? "updated" : "added";
46
+ const next = upsertCatalogEntry(current, valid);
47
+ // Ensure the parent dir exists — a first-ever catalog write on a machine
48
+ // whose ~/.code-shell hasn't been created yet would otherwise throw ENOENT
49
+ // (the agent-facing tool wants a clean {ok:false} or a real write, not a crash).
50
+ try {
51
+ mkdirSync(dirname(opts.path), { recursive: true });
52
+ }
53
+ catch (e) {
54
+ return { ok: false, error: `could not create catalog directory: ${e instanceof Error ? e.message : String(e)}`, backup };
55
+ }
56
+ try {
57
+ writeFileSync(opts.path, JSON.stringify(next, null, 2));
58
+ }
59
+ catch (e) {
60
+ // IO error (perms / disk full / bad path): return a clean {ok:false} with the
61
+ // backup filename preserved, never let the throw escape past the tool's
62
+ // expected result shape (the original file is intact — we only upsert-wrote).
63
+ return { ok: false, error: `could not write catalog: ${e instanceof Error ? e.message : String(e)}`, backup };
64
+ }
65
+ return { ok: true, action, backup };
66
+ }
67
+ /**
68
+ * Remove the entry with `id` from the user catalog file. Mirrors saveCatalogEntry's
69
+ * backup + atomic-write safety. removed:false means the id wasn't in the user file
70
+ * (a pristine built-in entry, or simply absent). The built-in catalog is code,
71
+ * untouched — deleting a user override just lets getMergedCatalog fall back to the
72
+ * built-in version ("reset" semantics).
73
+ */
74
+ export function deleteUserCatalogEntry(id, opts) {
75
+ if (!existsSync(opts.path))
76
+ return { ok: true, removed: false };
77
+ let backup = `${opts.path}.bak-${opts.stamp}`;
78
+ try {
79
+ copyFileSync(opts.path, backup);
80
+ }
81
+ catch {
82
+ backup = undefined;
83
+ }
84
+ let current = [];
85
+ try {
86
+ const raw = JSON.parse(readFileSync(opts.path, "utf-8"));
87
+ const safe = userCatalogFileSchema.safeParse(raw);
88
+ current = safe.success ? safe.data : [];
89
+ }
90
+ catch {
91
+ current = [];
92
+ }
93
+ const next = current.filter((e) => e.id !== id);
94
+ const removed = next.length !== current.length;
95
+ if (!removed)
96
+ return { ok: true, removed: false, backup };
97
+ try {
98
+ writeFileSync(opts.path, JSON.stringify(next, null, 2));
99
+ }
100
+ catch (e) {
101
+ return { ok: false, removed: false, error: `could not write catalog: ${e instanceof Error ? e.message : String(e)}`, backup };
102
+ }
103
+ return { ok: true, removed: true, backup };
104
+ }