@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,561 @@
1
+ /**
2
+ * Model接入 Catalog — declarative provider templates (design doc:
3
+ * docs/superpowers/specs/2026-06-11-model-catalog-design.md).
4
+ *
5
+ * A {@link CatalogEntry} is a *template* the user can pick in the 连接 page to
6
+ * create a configured instance (stored in settings.imageGen/videoGen.providers[]).
7
+ * Catalog = "能配哪些"; providers[] = "配了哪些". The two are decoupled.
8
+ *
9
+ * `adapterKind` reuses the existing adapter selectors ("openai"/"google"/"fal")
10
+ * — the runtime getImageProvider/getVideoProvider switches and adapter classes
11
+ * are unchanged; the catalog only declares which template points at which
12
+ * already-wired adapter. `shape` is documentation/future only.
13
+ */
14
+ import { z } from "zod";
15
+ /**
16
+ * How the param maps onto the outgoing request body. `field` is the request
17
+ * field this param lands on — same param name can land differently per
18
+ * adapter (reasoning → `reasoning_effort` on OpenAI vs
19
+ * `thinking.budget_tokens` on Anthropic), so the divergence lives in data, not
20
+ * in `if (kind === ...)` branches in the engine. Minimal v1: field only.
21
+ */
22
+ export declare const wireSpecSchema: z.ZodObject<{
23
+ field: z.ZodString;
24
+ }, "strip", z.ZodTypeAny, {
25
+ field: string;
26
+ }, {
27
+ field: string;
28
+ }>;
29
+ /**
30
+ * One **generic** declarative param — no special-casing per param. reasoning
31
+ * is not its own variant: it's `control: "enum"` (OpenAI effort levels) or
32
+ * `control: "number"` (Anthropic token budget), decided by the entry's data.
33
+ * The connection page renders by `switch(control)`; `doc` is woven into the
34
+ * tool description so the agent knows what a configured model accepts.
35
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.2.
36
+ */
37
+ export declare const paramSpecSchema: z.ZodObject<{
38
+ /** Logical name, e.g. "reasoning" / "size" / "quality" / "temperature". */
39
+ name: z.ZodString;
40
+ /** UI control label (falls back to `name`). */
41
+ label: z.ZodOptional<z.ZodString>;
42
+ control: z.ZodEnum<["enum", "number", "toggle", "text"]>;
43
+ /** control=enum allowed values, e.g. ["low","medium","high","xhigh"]. */
44
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
45
+ /** control=number bounds. */
46
+ min: z.ZodOptional<z.ZodNumber>;
47
+ max: z.ZodOptional<z.ZodNumber>;
48
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
49
+ /** Natural-language usage note → injected into the tool description. */
50
+ doc: z.ZodOptional<z.ZodString>;
51
+ /** How this param lands on the request body. */
52
+ wire: z.ZodOptional<z.ZodObject<{
53
+ field: z.ZodString;
54
+ }, "strip", z.ZodTypeAny, {
55
+ field: string;
56
+ }, {
57
+ field: string;
58
+ }>>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ name: string;
61
+ control: "number" | "text" | "enum" | "toggle";
62
+ options?: string[] | undefined;
63
+ default?: string | number | boolean | undefined;
64
+ label?: string | undefined;
65
+ min?: number | undefined;
66
+ max?: number | undefined;
67
+ doc?: string | undefined;
68
+ wire?: {
69
+ field: string;
70
+ } | undefined;
71
+ }, {
72
+ name: string;
73
+ control: "number" | "text" | "enum" | "toggle";
74
+ options?: string[] | undefined;
75
+ default?: string | number | boolean | undefined;
76
+ label?: string | undefined;
77
+ min?: number | undefined;
78
+ max?: number | undefined;
79
+ doc?: string | undefined;
80
+ wire?: {
81
+ field: string;
82
+ } | undefined;
83
+ }>;
84
+ export type ParamSpec = z.infer<typeof paramSpecSchema>;
85
+ /**
86
+ * A known model under an entry, carrying its own param schema
87
+ * (per-entry-per-model — the same modelId via OpenRouter vs the official API
88
+ * can expose different params, since gateways normalize differently).
89
+ */
90
+ export declare const modelPresetSchema: z.ZodObject<{
91
+ value: z.ZodString;
92
+ label: z.ZodOptional<z.ZodString>;
93
+ maxContextTokens: z.ZodOptional<z.ZodNumber>;
94
+ maxOutputTokens: z.ZodOptional<z.ZodNumber>;
95
+ supportsVision: z.ZodOptional<z.ZodBoolean>;
96
+ /** Params this model supports; absent → no adjustable knobs. */
97
+ params: z.ZodOptional<z.ZodArray<z.ZodObject<{
98
+ /** Logical name, e.g. "reasoning" / "size" / "quality" / "temperature". */
99
+ name: z.ZodString;
100
+ /** UI control label (falls back to `name`). */
101
+ label: z.ZodOptional<z.ZodString>;
102
+ control: z.ZodEnum<["enum", "number", "toggle", "text"]>;
103
+ /** control=enum allowed values, e.g. ["low","medium","high","xhigh"]. */
104
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
105
+ /** control=number bounds. */
106
+ min: z.ZodOptional<z.ZodNumber>;
107
+ max: z.ZodOptional<z.ZodNumber>;
108
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
109
+ /** Natural-language usage note → injected into the tool description. */
110
+ doc: z.ZodOptional<z.ZodString>;
111
+ /** How this param lands on the request body. */
112
+ wire: z.ZodOptional<z.ZodObject<{
113
+ field: z.ZodString;
114
+ }, "strip", z.ZodTypeAny, {
115
+ field: string;
116
+ }, {
117
+ field: string;
118
+ }>>;
119
+ }, "strip", z.ZodTypeAny, {
120
+ name: string;
121
+ control: "number" | "text" | "enum" | "toggle";
122
+ options?: string[] | undefined;
123
+ default?: string | number | boolean | undefined;
124
+ label?: string | undefined;
125
+ min?: number | undefined;
126
+ max?: number | undefined;
127
+ doc?: string | undefined;
128
+ wire?: {
129
+ field: string;
130
+ } | undefined;
131
+ }, {
132
+ name: string;
133
+ control: "number" | "text" | "enum" | "toggle";
134
+ options?: string[] | undefined;
135
+ default?: string | number | boolean | undefined;
136
+ label?: string | undefined;
137
+ min?: number | undefined;
138
+ max?: number | undefined;
139
+ doc?: string | undefined;
140
+ wire?: {
141
+ field: string;
142
+ } | undefined;
143
+ }>, "many">>;
144
+ }, "strip", z.ZodTypeAny, {
145
+ value: string;
146
+ params?: {
147
+ name: string;
148
+ control: "number" | "text" | "enum" | "toggle";
149
+ options?: string[] | undefined;
150
+ default?: string | number | boolean | undefined;
151
+ label?: string | undefined;
152
+ min?: number | undefined;
153
+ max?: number | undefined;
154
+ doc?: string | undefined;
155
+ wire?: {
156
+ field: string;
157
+ } | undefined;
158
+ }[] | undefined;
159
+ supportsVision?: boolean | undefined;
160
+ maxOutputTokens?: number | undefined;
161
+ label?: string | undefined;
162
+ maxContextTokens?: number | undefined;
163
+ }, {
164
+ value: string;
165
+ params?: {
166
+ name: string;
167
+ control: "number" | "text" | "enum" | "toggle";
168
+ options?: string[] | undefined;
169
+ default?: string | number | boolean | undefined;
170
+ label?: string | undefined;
171
+ min?: number | undefined;
172
+ max?: number | undefined;
173
+ doc?: string | undefined;
174
+ wire?: {
175
+ field: string;
176
+ } | undefined;
177
+ }[] | undefined;
178
+ supportsVision?: boolean | undefined;
179
+ maxOutputTokens?: number | undefined;
180
+ label?: string | undefined;
181
+ maxContextTokens?: number | undefined;
182
+ }>;
183
+ export type ModelPreset = z.infer<typeof modelPresetSchema>;
184
+ export declare const catalogEntrySchema: z.ZodObject<{
185
+ /** Template id, e.g. "openai" / "openai-images" / "fal-video". */
186
+ id: z.ZodString;
187
+ /** Which 连接 page group this lands in. (audio = speech-to-text / voice input.) */
188
+ tag: z.ZodEnum<["text", "image", "video", "audio"]>;
189
+ /** Runtime adapter selector — reuses existing "openai" | "anthropic" | "google" | "fal". */
190
+ adapterKind: z.ZodString;
191
+ /** LLM client protocol (text entries). */
192
+ protocol: z.ZodOptional<z.ZodEnum<["openai-compat", "anthropic-style"]>>;
193
+ /** HTTP shape — documentation/future only; runtime dispatches on adapterKind. */
194
+ shape: z.ZodOptional<z.ZodEnum<["generic-sync", "fal-queue"]>>;
195
+ displayName: z.ZodString;
196
+ description: z.ZodString;
197
+ defaultBaseUrl: z.ZodString;
198
+ defaultModel: z.ZodOptional<z.ZodString>;
199
+ /** Whether this provider needs an API key (ollama/local = false). */
200
+ needsKey: z.ZodOptional<z.ZodBoolean>;
201
+ modelPresets: z.ZodOptional<z.ZodArray<z.ZodObject<{
202
+ value: z.ZodString;
203
+ label: z.ZodOptional<z.ZodString>;
204
+ maxContextTokens: z.ZodOptional<z.ZodNumber>;
205
+ maxOutputTokens: z.ZodOptional<z.ZodNumber>;
206
+ supportsVision: z.ZodOptional<z.ZodBoolean>;
207
+ /** Params this model supports; absent → no adjustable knobs. */
208
+ params: z.ZodOptional<z.ZodArray<z.ZodObject<{
209
+ /** Logical name, e.g. "reasoning" / "size" / "quality" / "temperature". */
210
+ name: z.ZodString;
211
+ /** UI control label (falls back to `name`). */
212
+ label: z.ZodOptional<z.ZodString>;
213
+ control: z.ZodEnum<["enum", "number", "toggle", "text"]>;
214
+ /** control=enum allowed values, e.g. ["low","medium","high","xhigh"]. */
215
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
216
+ /** control=number bounds. */
217
+ min: z.ZodOptional<z.ZodNumber>;
218
+ max: z.ZodOptional<z.ZodNumber>;
219
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
220
+ /** Natural-language usage note → injected into the tool description. */
221
+ doc: z.ZodOptional<z.ZodString>;
222
+ /** How this param lands on the request body. */
223
+ wire: z.ZodOptional<z.ZodObject<{
224
+ field: z.ZodString;
225
+ }, "strip", z.ZodTypeAny, {
226
+ field: string;
227
+ }, {
228
+ field: string;
229
+ }>>;
230
+ }, "strip", z.ZodTypeAny, {
231
+ name: string;
232
+ control: "number" | "text" | "enum" | "toggle";
233
+ options?: string[] | undefined;
234
+ default?: string | number | boolean | undefined;
235
+ label?: string | undefined;
236
+ min?: number | undefined;
237
+ max?: number | undefined;
238
+ doc?: string | undefined;
239
+ wire?: {
240
+ field: string;
241
+ } | undefined;
242
+ }, {
243
+ name: string;
244
+ control: "number" | "text" | "enum" | "toggle";
245
+ options?: string[] | undefined;
246
+ default?: string | number | boolean | undefined;
247
+ label?: string | undefined;
248
+ min?: number | undefined;
249
+ max?: number | undefined;
250
+ doc?: string | undefined;
251
+ wire?: {
252
+ field: string;
253
+ } | undefined;
254
+ }>, "many">>;
255
+ }, "strip", z.ZodTypeAny, {
256
+ value: string;
257
+ params?: {
258
+ name: string;
259
+ control: "number" | "text" | "enum" | "toggle";
260
+ options?: string[] | undefined;
261
+ default?: string | number | boolean | undefined;
262
+ label?: string | undefined;
263
+ min?: number | undefined;
264
+ max?: number | undefined;
265
+ doc?: string | undefined;
266
+ wire?: {
267
+ field: string;
268
+ } | undefined;
269
+ }[] | undefined;
270
+ supportsVision?: boolean | undefined;
271
+ maxOutputTokens?: number | undefined;
272
+ label?: string | undefined;
273
+ maxContextTokens?: number | undefined;
274
+ }, {
275
+ value: string;
276
+ params?: {
277
+ name: string;
278
+ control: "number" | "text" | "enum" | "toggle";
279
+ options?: string[] | undefined;
280
+ default?: string | number | boolean | undefined;
281
+ label?: string | undefined;
282
+ min?: number | undefined;
283
+ max?: number | undefined;
284
+ doc?: string | undefined;
285
+ wire?: {
286
+ field: string;
287
+ } | undefined;
288
+ }[] | undefined;
289
+ supportsVision?: boolean | undefined;
290
+ maxOutputTokens?: number | undefined;
291
+ label?: string | undefined;
292
+ maxContextTokens?: number | undefined;
293
+ }>, "many">>;
294
+ signupUrl: z.ZodOptional<z.ZodString>;
295
+ /** Whether the 连接 card offers a "测试" button (image=true, video=false). */
296
+ test: z.ZodOptional<z.ZodBoolean>;
297
+ /**
298
+ * Natural-language note on the params/usage this entry supports — surfaced to
299
+ * the agent via the dynamic GenerateImage/GenerateVideo tool description so it
300
+ * knows what a configured model accepts (different models differ).
301
+ */
302
+ paramsDoc: z.ZodOptional<z.ZodString>;
303
+ }, "strip", z.ZodTypeAny, {
304
+ id: string;
305
+ tag: "text" | "image" | "video" | "audio";
306
+ adapterKind: string;
307
+ displayName: string;
308
+ description: string;
309
+ defaultBaseUrl: string;
310
+ shape?: "generic-sync" | "fal-queue" | undefined;
311
+ test?: boolean | undefined;
312
+ defaultModel?: string | undefined;
313
+ protocol?: "openai-compat" | "anthropic-style" | undefined;
314
+ needsKey?: boolean | undefined;
315
+ modelPresets?: {
316
+ value: string;
317
+ params?: {
318
+ name: string;
319
+ control: "number" | "text" | "enum" | "toggle";
320
+ options?: string[] | undefined;
321
+ default?: string | number | boolean | undefined;
322
+ label?: string | undefined;
323
+ min?: number | undefined;
324
+ max?: number | undefined;
325
+ doc?: string | undefined;
326
+ wire?: {
327
+ field: string;
328
+ } | undefined;
329
+ }[] | undefined;
330
+ supportsVision?: boolean | undefined;
331
+ maxOutputTokens?: number | undefined;
332
+ label?: string | undefined;
333
+ maxContextTokens?: number | undefined;
334
+ }[] | undefined;
335
+ signupUrl?: string | undefined;
336
+ paramsDoc?: string | undefined;
337
+ }, {
338
+ id: string;
339
+ tag: "text" | "image" | "video" | "audio";
340
+ adapterKind: string;
341
+ displayName: string;
342
+ description: string;
343
+ defaultBaseUrl: string;
344
+ shape?: "generic-sync" | "fal-queue" | undefined;
345
+ test?: boolean | undefined;
346
+ defaultModel?: string | undefined;
347
+ protocol?: "openai-compat" | "anthropic-style" | undefined;
348
+ needsKey?: boolean | undefined;
349
+ modelPresets?: {
350
+ value: string;
351
+ params?: {
352
+ name: string;
353
+ control: "number" | "text" | "enum" | "toggle";
354
+ options?: string[] | undefined;
355
+ default?: string | number | boolean | undefined;
356
+ label?: string | undefined;
357
+ min?: number | undefined;
358
+ max?: number | undefined;
359
+ doc?: string | undefined;
360
+ wire?: {
361
+ field: string;
362
+ } | undefined;
363
+ }[] | undefined;
364
+ supportsVision?: boolean | undefined;
365
+ maxOutputTokens?: number | undefined;
366
+ label?: string | undefined;
367
+ maxContextTokens?: number | undefined;
368
+ }[] | undefined;
369
+ signupUrl?: string | undefined;
370
+ paramsDoc?: string | undefined;
371
+ }>;
372
+ export type CatalogEntry = z.infer<typeof catalogEntrySchema>;
373
+ /** A user-catalog file is just an array of entries (zod-validated on load). */
374
+ export declare const userCatalogFileSchema: z.ZodArray<z.ZodObject<{
375
+ /** Template id, e.g. "openai" / "openai-images" / "fal-video". */
376
+ id: z.ZodString;
377
+ /** Which 连接 page group this lands in. (audio = speech-to-text / voice input.) */
378
+ tag: z.ZodEnum<["text", "image", "video", "audio"]>;
379
+ /** Runtime adapter selector — reuses existing "openai" | "anthropic" | "google" | "fal". */
380
+ adapterKind: z.ZodString;
381
+ /** LLM client protocol (text entries). */
382
+ protocol: z.ZodOptional<z.ZodEnum<["openai-compat", "anthropic-style"]>>;
383
+ /** HTTP shape — documentation/future only; runtime dispatches on adapterKind. */
384
+ shape: z.ZodOptional<z.ZodEnum<["generic-sync", "fal-queue"]>>;
385
+ displayName: z.ZodString;
386
+ description: z.ZodString;
387
+ defaultBaseUrl: z.ZodString;
388
+ defaultModel: z.ZodOptional<z.ZodString>;
389
+ /** Whether this provider needs an API key (ollama/local = false). */
390
+ needsKey: z.ZodOptional<z.ZodBoolean>;
391
+ modelPresets: z.ZodOptional<z.ZodArray<z.ZodObject<{
392
+ value: z.ZodString;
393
+ label: z.ZodOptional<z.ZodString>;
394
+ maxContextTokens: z.ZodOptional<z.ZodNumber>;
395
+ maxOutputTokens: z.ZodOptional<z.ZodNumber>;
396
+ supportsVision: z.ZodOptional<z.ZodBoolean>;
397
+ /** Params this model supports; absent → no adjustable knobs. */
398
+ params: z.ZodOptional<z.ZodArray<z.ZodObject<{
399
+ /** Logical name, e.g. "reasoning" / "size" / "quality" / "temperature". */
400
+ name: z.ZodString;
401
+ /** UI control label (falls back to `name`). */
402
+ label: z.ZodOptional<z.ZodString>;
403
+ control: z.ZodEnum<["enum", "number", "toggle", "text"]>;
404
+ /** control=enum allowed values, e.g. ["low","medium","high","xhigh"]. */
405
+ options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
406
+ /** control=number bounds. */
407
+ min: z.ZodOptional<z.ZodNumber>;
408
+ max: z.ZodOptional<z.ZodNumber>;
409
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
410
+ /** Natural-language usage note → injected into the tool description. */
411
+ doc: z.ZodOptional<z.ZodString>;
412
+ /** How this param lands on the request body. */
413
+ wire: z.ZodOptional<z.ZodObject<{
414
+ field: z.ZodString;
415
+ }, "strip", z.ZodTypeAny, {
416
+ field: string;
417
+ }, {
418
+ field: string;
419
+ }>>;
420
+ }, "strip", z.ZodTypeAny, {
421
+ name: string;
422
+ control: "number" | "text" | "enum" | "toggle";
423
+ options?: string[] | undefined;
424
+ default?: string | number | boolean | undefined;
425
+ label?: string | undefined;
426
+ min?: number | undefined;
427
+ max?: number | undefined;
428
+ doc?: string | undefined;
429
+ wire?: {
430
+ field: string;
431
+ } | undefined;
432
+ }, {
433
+ name: string;
434
+ control: "number" | "text" | "enum" | "toggle";
435
+ options?: string[] | undefined;
436
+ default?: string | number | boolean | undefined;
437
+ label?: string | undefined;
438
+ min?: number | undefined;
439
+ max?: number | undefined;
440
+ doc?: string | undefined;
441
+ wire?: {
442
+ field: string;
443
+ } | undefined;
444
+ }>, "many">>;
445
+ }, "strip", z.ZodTypeAny, {
446
+ value: string;
447
+ params?: {
448
+ name: string;
449
+ control: "number" | "text" | "enum" | "toggle";
450
+ options?: string[] | undefined;
451
+ default?: string | number | boolean | undefined;
452
+ label?: string | undefined;
453
+ min?: number | undefined;
454
+ max?: number | undefined;
455
+ doc?: string | undefined;
456
+ wire?: {
457
+ field: string;
458
+ } | undefined;
459
+ }[] | undefined;
460
+ supportsVision?: boolean | undefined;
461
+ maxOutputTokens?: number | undefined;
462
+ label?: string | undefined;
463
+ maxContextTokens?: number | undefined;
464
+ }, {
465
+ value: string;
466
+ params?: {
467
+ name: string;
468
+ control: "number" | "text" | "enum" | "toggle";
469
+ options?: string[] | undefined;
470
+ default?: string | number | boolean | undefined;
471
+ label?: string | undefined;
472
+ min?: number | undefined;
473
+ max?: number | undefined;
474
+ doc?: string | undefined;
475
+ wire?: {
476
+ field: string;
477
+ } | undefined;
478
+ }[] | undefined;
479
+ supportsVision?: boolean | undefined;
480
+ maxOutputTokens?: number | undefined;
481
+ label?: string | undefined;
482
+ maxContextTokens?: number | undefined;
483
+ }>, "many">>;
484
+ signupUrl: z.ZodOptional<z.ZodString>;
485
+ /** Whether the 连接 card offers a "测试" button (image=true, video=false). */
486
+ test: z.ZodOptional<z.ZodBoolean>;
487
+ /**
488
+ * Natural-language note on the params/usage this entry supports — surfaced to
489
+ * the agent via the dynamic GenerateImage/GenerateVideo tool description so it
490
+ * knows what a configured model accepts (different models differ).
491
+ */
492
+ paramsDoc: z.ZodOptional<z.ZodString>;
493
+ }, "strip", z.ZodTypeAny, {
494
+ id: string;
495
+ tag: "text" | "image" | "video" | "audio";
496
+ adapterKind: string;
497
+ displayName: string;
498
+ description: string;
499
+ defaultBaseUrl: string;
500
+ shape?: "generic-sync" | "fal-queue" | undefined;
501
+ test?: boolean | undefined;
502
+ defaultModel?: string | undefined;
503
+ protocol?: "openai-compat" | "anthropic-style" | undefined;
504
+ needsKey?: boolean | undefined;
505
+ modelPresets?: {
506
+ value: string;
507
+ params?: {
508
+ name: string;
509
+ control: "number" | "text" | "enum" | "toggle";
510
+ options?: string[] | undefined;
511
+ default?: string | number | boolean | undefined;
512
+ label?: string | undefined;
513
+ min?: number | undefined;
514
+ max?: number | undefined;
515
+ doc?: string | undefined;
516
+ wire?: {
517
+ field: string;
518
+ } | undefined;
519
+ }[] | undefined;
520
+ supportsVision?: boolean | undefined;
521
+ maxOutputTokens?: number | undefined;
522
+ label?: string | undefined;
523
+ maxContextTokens?: number | undefined;
524
+ }[] | undefined;
525
+ signupUrl?: string | undefined;
526
+ paramsDoc?: string | undefined;
527
+ }, {
528
+ id: string;
529
+ tag: "text" | "image" | "video" | "audio";
530
+ adapterKind: string;
531
+ displayName: string;
532
+ description: string;
533
+ defaultBaseUrl: string;
534
+ shape?: "generic-sync" | "fal-queue" | undefined;
535
+ test?: boolean | undefined;
536
+ defaultModel?: string | undefined;
537
+ protocol?: "openai-compat" | "anthropic-style" | undefined;
538
+ needsKey?: boolean | undefined;
539
+ modelPresets?: {
540
+ value: string;
541
+ params?: {
542
+ name: string;
543
+ control: "number" | "text" | "enum" | "toggle";
544
+ options?: string[] | undefined;
545
+ default?: string | number | boolean | undefined;
546
+ label?: string | undefined;
547
+ min?: number | undefined;
548
+ max?: number | undefined;
549
+ doc?: string | undefined;
550
+ wire?: {
551
+ field: string;
552
+ } | undefined;
553
+ }[] | undefined;
554
+ supportsVision?: boolean | undefined;
555
+ maxOutputTokens?: number | undefined;
556
+ label?: string | undefined;
557
+ maxContextTokens?: number | undefined;
558
+ }[] | undefined;
559
+ signupUrl?: string | undefined;
560
+ paramsDoc?: string | undefined;
561
+ }>, "many">;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Model接入 Catalog — declarative provider templates (design doc:
3
+ * docs/superpowers/specs/2026-06-11-model-catalog-design.md).
4
+ *
5
+ * A {@link CatalogEntry} is a *template* the user can pick in the 连接 page to
6
+ * create a configured instance (stored in settings.imageGen/videoGen.providers[]).
7
+ * Catalog = "能配哪些"; providers[] = "配了哪些". The two are decoupled.
8
+ *
9
+ * `adapterKind` reuses the existing adapter selectors ("openai"/"google"/"fal")
10
+ * — the runtime getImageProvider/getVideoProvider switches and adapter classes
11
+ * are unchanged; the catalog only declares which template points at which
12
+ * already-wired adapter. `shape` is documentation/future only.
13
+ */
14
+ import { z } from "zod";
15
+ /**
16
+ * How the param maps onto the outgoing request body. `field` is the request
17
+ * field this param lands on — same param name can land differently per
18
+ * adapter (reasoning → `reasoning_effort` on OpenAI vs
19
+ * `thinking.budget_tokens` on Anthropic), so the divergence lives in data, not
20
+ * in `if (kind === ...)` branches in the engine. Minimal v1: field only.
21
+ */
22
+ export const wireSpecSchema = z.object({
23
+ field: z.string(),
24
+ });
25
+ /**
26
+ * One **generic** declarative param — no special-casing per param. reasoning
27
+ * is not its own variant: it's `control: "enum"` (OpenAI effort levels) or
28
+ * `control: "number"` (Anthropic token budget), decided by the entry's data.
29
+ * The connection page renders by `switch(control)`; `doc` is woven into the
30
+ * tool description so the agent knows what a configured model accepts.
31
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.2.
32
+ */
33
+ export const paramSpecSchema = z.object({
34
+ /** Logical name, e.g. "reasoning" / "size" / "quality" / "temperature". */
35
+ name: z.string(),
36
+ /** UI control label (falls back to `name`). */
37
+ label: z.string().optional(),
38
+ control: z.enum(["enum", "number", "toggle", "text"]),
39
+ /** control=enum allowed values, e.g. ["low","medium","high","xhigh"]. */
40
+ options: z.array(z.string()).optional(),
41
+ /** control=number bounds. */
42
+ min: z.number().optional(),
43
+ max: z.number().optional(),
44
+ default: z.union([z.string(), z.number(), z.boolean()]).optional(),
45
+ /** Natural-language usage note → injected into the tool description. */
46
+ doc: z.string().optional(),
47
+ /** How this param lands on the request body. */
48
+ wire: wireSpecSchema.optional(),
49
+ });
50
+ /**
51
+ * A known model under an entry, carrying its own param schema
52
+ * (per-entry-per-model — the same modelId via OpenRouter vs the official API
53
+ * can expose different params, since gateways normalize differently).
54
+ */
55
+ export const modelPresetSchema = z.object({
56
+ value: z.string(),
57
+ label: z.string().optional(),
58
+ maxContextTokens: z.number().optional(),
59
+ maxOutputTokens: z.number().optional(),
60
+ supportsVision: z.boolean().optional(),
61
+ /** Params this model supports; absent → no adjustable knobs. */
62
+ params: z.array(paramSpecSchema).optional(),
63
+ });
64
+ export const catalogEntrySchema = z.object({
65
+ /** Template id, e.g. "openai" / "openai-images" / "fal-video". */
66
+ id: z.string(),
67
+ /** Which 连接 page group this lands in. (audio = speech-to-text / voice input.) */
68
+ tag: z.enum(["text", "image", "video", "audio"]),
69
+ /** Runtime adapter selector — reuses existing "openai" | "anthropic" | "google" | "fal". */
70
+ adapterKind: z.string(),
71
+ /** LLM client protocol (text entries). */
72
+ protocol: z.enum(["openai-compat", "anthropic-style"]).optional(),
73
+ /** HTTP shape — documentation/future only; runtime dispatches on adapterKind. */
74
+ shape: z.enum(["generic-sync", "fal-queue"]).optional(),
75
+ displayName: z.string(),
76
+ description: z.string(),
77
+ defaultBaseUrl: z.string(),
78
+ defaultModel: z.string().optional(),
79
+ /** Whether this provider needs an API key (ollama/local = false). */
80
+ needsKey: z.boolean().optional(),
81
+ modelPresets: z.array(modelPresetSchema).optional(),
82
+ signupUrl: z.string().optional(),
83
+ /** Whether the 连接 card offers a "测试" button (image=true, video=false). */
84
+ test: z.boolean().optional(),
85
+ /**
86
+ * Natural-language note on the params/usage this entry supports — surfaced to
87
+ * the agent via the dynamic GenerateImage/GenerateVideo tool description so it
88
+ * knows what a configured model accepts (different models differ).
89
+ */
90
+ paramsDoc: z.string().optional(),
91
+ });
92
+ /** A user-catalog file is just an array of entries (zod-validated on load). */
93
+ export const userCatalogFileSchema = z.array(catalogEntrySchema);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * upsertCatalogEntry — add-or-update a CatalogEntry in the user catalog array,
3
+ * keyed by `id`. Pure: returns a new array, input untouched. Existing id →
4
+ * replaced in place (order preserved); new id → appended. The catalog edit tool
5
+ * wraps this with backup + zod validate + atomic write.
6
+ * See docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §7.
7
+ */
8
+ import type { CatalogEntry } from "./types.js";
9
+ export declare function upsertCatalogEntry(existing: CatalogEntry[], entry: CatalogEntry): CatalogEntry[];
@@ -0,0 +1,8 @@
1
+ export function upsertCatalogEntry(existing, entry) {
2
+ const idx = existing.findIndex((e) => e.id === entry.id);
3
+ if (idx === -1)
4
+ return [...existing, entry];
5
+ const next = existing.slice();
6
+ next[idx] = entry;
7
+ return next;
8
+ }