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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +21 -3
  3. package/dist/agent/agent-definition-registry.js +49 -18
  4. package/dist/agent/agent-definition.d.ts +32 -0
  5. package/dist/agent/agent-definition.js +49 -4
  6. package/dist/arena/arena.js +11 -12
  7. package/dist/arena/context/context-tools.js +47 -6
  8. package/dist/arena/context/within-root.d.ts +7 -0
  9. package/dist/arena/context/within-root.js +15 -0
  10. package/dist/arena/iterate/phases/argue.js +8 -2
  11. package/dist/arena/iterate/phases/revise.js +1 -1
  12. package/dist/arena/iterate/phases/tournament.js +3 -3
  13. package/dist/arena/ledger.js +9 -1
  14. package/dist/arena/phases/adjudication.js +1 -4
  15. package/dist/arena/phases/build-consensus.js +1 -4
  16. package/dist/arena/phases/cross-review.js +2 -8
  17. package/dist/arena/phases/debate-rounds.js +1 -4
  18. package/dist/arena/phases/participant-research.js +1 -4
  19. package/dist/arena/phases/planning-detail-expansion.js +8 -10
  20. package/dist/arena/planner.js +0 -1
  21. package/dist/arena/providers/docs.d.ts +1 -0
  22. package/dist/arena/providers/docs.js +5 -2
  23. package/dist/arena/providers/repo.d.ts +1 -0
  24. package/dist/arena/providers/repo.js +5 -2
  25. package/dist/arena/strategies/utils.d.ts +1 -4
  26. package/dist/arena/strategies/utils.js +7 -51
  27. package/dist/arena/transitions.d.ts +7 -2
  28. package/dist/arena/transitions.js +9 -4
  29. package/dist/arena/types.d.ts +8 -2
  30. package/dist/automation/cron-expr.d.ts +41 -0
  31. package/dist/automation/cron-expr.js +169 -0
  32. package/dist/automation/index.d.ts +41 -0
  33. package/dist/automation/index.js +39 -0
  34. package/dist/automation/runner.d.ts +84 -0
  35. package/dist/automation/runner.js +92 -0
  36. package/dist/automation/scheduler.d.ts +194 -0
  37. package/dist/automation/scheduler.js +623 -0
  38. package/dist/automation/store.d.ts +39 -0
  39. package/dist/automation/store.js +122 -0
  40. package/dist/automation/write-policy.d.ts +34 -0
  41. package/dist/automation/write-policy.js +113 -0
  42. package/dist/automation/write-run.d.ts +51 -0
  43. package/dist/automation/write-run.js +38 -0
  44. package/dist/capability-control/disabled-lists.d.ts +25 -0
  45. package/dist/capability-control/disabled-lists.js +57 -0
  46. package/dist/capability-control/index.d.ts +5 -0
  47. package/dist/capability-control/index.js +3 -0
  48. package/dist/capability-control/overlay.d.ts +64 -0
  49. package/dist/capability-control/overlay.js +116 -0
  50. package/dist/capability-control/project.d.ts +65 -0
  51. package/dist/capability-control/project.js +147 -0
  52. package/dist/capability-control/service.d.ts +70 -0
  53. package/dist/capability-control/service.js +147 -0
  54. package/dist/capability-control/types.d.ts +62 -0
  55. package/dist/capability-control/types.js +17 -0
  56. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  57. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  58. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  59. package/dist/cc-orchestrator/cc-capability.js +53 -0
  60. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  61. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  62. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  63. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  64. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  65. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  66. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  67. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  68. package/dist/cc-orchestrator/index.d.ts +8 -0
  69. package/dist/cc-orchestrator/index.js +8 -0
  70. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  71. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  72. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  73. package/dist/cc-orchestrator/session-discovery.js +125 -0
  74. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  75. package/dist/cc-orchestrator/session-history.js +67 -0
  76. package/dist/cli/agent-server-stdio.d.ts +26 -1
  77. package/dist/cli/agent-server-stdio.js +221 -28
  78. package/dist/cli/agent-server-tcp.d.ts +20 -0
  79. package/dist/cli/agent-server-tcp.js +134 -0
  80. package/dist/cli/graceful-shutdown.d.ts +27 -0
  81. package/dist/cli/graceful-shutdown.js +30 -0
  82. package/dist/context/compaction.d.ts +56 -0
  83. package/dist/context/compaction.js +209 -15
  84. package/dist/context/manager.d.ts +0 -20
  85. package/dist/context/manager.js +25 -41
  86. package/dist/cost-tracker.js +5 -61
  87. package/dist/credentials/cipher.d.ts +49 -0
  88. package/dist/credentials/cipher.js +45 -0
  89. package/dist/credentials/cookie-jar.d.ts +24 -0
  90. package/dist/credentials/cookie-jar.js +40 -0
  91. package/dist/credentials/index.d.ts +7 -0
  92. package/dist/credentials/index.js +5 -0
  93. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  94. package/dist/credentials/inject-credential-tool.js +130 -0
  95. package/dist/credentials/store.d.ts +72 -0
  96. package/dist/credentials/store.js +184 -0
  97. package/dist/credentials/types.d.ts +56 -0
  98. package/dist/credentials/use-credential-tool.d.ts +29 -0
  99. package/dist/credentials/use-credential-tool.js +205 -0
  100. package/dist/credentials/use-gate.d.ts +56 -0
  101. package/dist/credentials/use-gate.js +52 -0
  102. package/dist/cron/cron-runtime.d.ts +2 -0
  103. package/dist/cron/cron-runtime.js +2 -0
  104. package/dist/cron/cron-store.d.ts +2 -0
  105. package/dist/cron/cron-store.js +2 -0
  106. package/dist/cron/scheduler.d.ts +5 -32
  107. package/dist/cron/scheduler.js +5 -113
  108. package/dist/data/model-metadata.d.ts +77 -0
  109. package/dist/data/model-metadata.js +56 -0
  110. package/dist/data/model-metadata.json +216 -0
  111. package/dist/data/openrouter-models.d.ts +18 -7
  112. package/dist/data/openrouter-models.js +35 -8
  113. package/dist/data/openrouter-sync.js +1 -1
  114. package/dist/engine/aux-key.d.ts +10 -0
  115. package/dist/engine/aux-key.js +11 -0
  116. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  117. package/dist/engine/dynamic-tool-defs.js +36 -0
  118. package/dist/engine/engine.d.ts +431 -108
  119. package/dist/engine/engine.js +1630 -279
  120. package/dist/engine/friendly-error.d.ts +18 -0
  121. package/dist/engine/friendly-error.js +63 -0
  122. package/dist/engine/goal.d.ts +187 -0
  123. package/dist/engine/goal.js +196 -0
  124. package/dist/engine/image-compression.d.ts +81 -0
  125. package/dist/engine/image-compression.js +186 -0
  126. package/dist/engine/image-policy.d.ts +165 -0
  127. package/dist/engine/image-policy.js +189 -0
  128. package/dist/engine/model-connections-pool.d.ts +17 -0
  129. package/dist/engine/model-connections-pool.js +66 -0
  130. package/dist/engine/model-facade.d.ts +10 -0
  131. package/dist/engine/model-facade.js +25 -0
  132. package/dist/engine/patch-orphaned-tools.js +3 -0
  133. package/dist/engine/reactive-threshold.d.ts +13 -0
  134. package/dist/engine/reactive-threshold.js +17 -0
  135. package/dist/engine/resolve-llm-config.d.ts +16 -0
  136. package/dist/engine/resolve-llm-config.js +44 -0
  137. package/dist/engine/runtime.js +9 -1
  138. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  139. package/dist/engine/sandbox-cache-key.js +9 -0
  140. package/dist/engine/sandbox-config.d.ts +31 -0
  141. package/dist/engine/sandbox-config.js +38 -0
  142. package/dist/engine/session-title.d.ts +13 -0
  143. package/dist/engine/session-title.js +34 -0
  144. package/dist/engine/session-usage.d.ts +19 -0
  145. package/dist/engine/session-usage.js +25 -0
  146. package/dist/engine/steer-queue.d.ts +32 -0
  147. package/dist/engine/steer-queue.js +26 -0
  148. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  149. package/dist/engine/streaming-tool-queue.js +50 -10
  150. package/dist/engine/turn-loop.d.ts +94 -9
  151. package/dist/engine/turn-loop.js +775 -342
  152. package/dist/engine/types.d.ts +175 -0
  153. package/dist/engine/types.js +13 -0
  154. package/dist/external-agents/config.d.ts +2 -0
  155. package/dist/external-agents/config.js +15 -0
  156. package/dist/external-agents/types.d.ts +31 -0
  157. package/dist/external-agents/types.js +1 -0
  158. package/dist/git/parse-log.d.ts +13 -0
  159. package/dist/git/parse-log.js +21 -0
  160. package/dist/git/utils.d.ts +8 -6
  161. package/dist/git/utils.js +62 -26
  162. package/dist/git/worktree.d.ts +48 -0
  163. package/dist/git/worktree.js +111 -20
  164. package/dist/hooks/events.d.ts +23 -1
  165. package/dist/hooks/goal-stop-hook.d.ts +58 -0
  166. package/dist/hooks/goal-stop-hook.js +279 -0
  167. package/dist/hooks/hook-output.d.ts +33 -0
  168. package/dist/hooks/hook-output.js +79 -0
  169. package/dist/hooks/registry.d.ts +15 -0
  170. package/dist/hooks/registry.js +57 -1
  171. package/dist/hooks/shell-runner.d.ts +2 -0
  172. package/dist/hooks/shell-runner.js +48 -18
  173. package/dist/index.d.ts +79 -11
  174. package/dist/index.js +89 -6
  175. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  176. package/dist/llm/capabilities/param-specs.js +62 -0
  177. package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
  178. package/dist/llm/capabilities/reasoning-control.js +38 -0
  179. package/dist/llm/capabilities/rules.js +37 -3
  180. package/dist/llm/capabilities/types.d.ts +32 -2
  181. package/dist/llm/clamp-max-tokens.d.ts +11 -0
  182. package/dist/llm/clamp-max-tokens.js +17 -0
  183. package/dist/llm/client-base.d.ts +69 -5
  184. package/dist/llm/client-base.js +185 -25
  185. package/dist/llm/client-factory.d.ts +3 -3
  186. package/dist/llm/client-factory.js +2 -2
  187. package/dist/llm/model-cache.js +4 -2
  188. package/dist/llm/model-pool.d.ts +29 -11
  189. package/dist/llm/model-pool.js +36 -20
  190. package/dist/llm/provider-auth.d.ts +41 -0
  191. package/dist/llm/provider-auth.js +76 -0
  192. package/dist/llm/provider-catalog.d.ts +6 -2
  193. package/dist/llm/providers/anthropic.d.ts +32 -2
  194. package/dist/llm/providers/anthropic.js +207 -18
  195. package/dist/llm/providers/openai.d.ts +47 -2
  196. package/dist/llm/providers/openai.js +478 -71
  197. package/dist/llm/reasoning-setting.d.ts +51 -0
  198. package/dist/llm/reasoning-setting.js +40 -0
  199. package/dist/llm/stop-reason.d.ts +13 -0
  200. package/dist/llm/stop-reason.js +21 -0
  201. package/dist/llm/stream-watchdog.js +5 -1
  202. package/dist/llm/strip-vision.d.ts +32 -0
  203. package/dist/llm/strip-vision.js +94 -0
  204. package/dist/llm/token-counter.js +9 -2
  205. package/dist/llm/types.d.ts +9 -6
  206. package/dist/logging/logger.js +18 -4
  207. package/dist/logging/sanitize-messages.d.ts +10 -0
  208. package/dist/logging/sanitize-messages.js +112 -0
  209. package/dist/lsp/client.js +28 -8
  210. package/dist/lsp/manager.d.ts +1 -1
  211. package/dist/lsp/manager.js +42 -11
  212. package/dist/lsp/root-path.d.ts +9 -0
  213. package/dist/lsp/root-path.js +12 -0
  214. package/dist/model-catalog/builtin.d.ts +12 -0
  215. package/dist/model-catalog/builtin.js +407 -0
  216. package/dist/model-catalog/gen-connections.d.ts +20 -0
  217. package/dist/model-catalog/gen-connections.js +28 -0
  218. package/dist/model-catalog/index.d.ts +41 -0
  219. package/dist/model-catalog/index.js +90 -0
  220. package/dist/model-catalog/params.d.ts +20 -0
  221. package/dist/model-catalog/params.js +45 -0
  222. package/dist/model-catalog/resolve.d.ts +48 -0
  223. package/dist/model-catalog/resolve.js +33 -0
  224. package/dist/model-catalog/save-entry.d.ts +32 -0
  225. package/dist/model-catalog/save-entry.js +104 -0
  226. package/dist/model-catalog/types.d.ts +561 -0
  227. package/dist/model-catalog/types.js +93 -0
  228. package/dist/model-catalog/upsert.d.ts +9 -0
  229. package/dist/model-catalog/upsert.js +8 -0
  230. package/dist/onboarding.d.ts +12 -82
  231. package/dist/onboarding.js +75 -333
  232. package/dist/plugins/gitOps.d.ts +53 -0
  233. package/dist/plugins/gitOps.js +130 -5
  234. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  235. package/dist/plugins/installer/checkUpdate.js +32 -0
  236. package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
  237. package/dist/plugins/installer/codex/convertAgents.js +55 -0
  238. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  239. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  240. package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
  241. package/dist/plugins/installer/codex/convertMcp.js +85 -0
  242. package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
  243. package/dist/plugins/installer/codex/convertSkills.js +33 -0
  244. package/dist/plugins/installer/detectFormat.d.ts +2 -0
  245. package/dist/plugins/installer/detectFormat.js +6 -0
  246. package/dist/plugins/installer/install.d.ts +7 -0
  247. package/dist/plugins/installer/install.js +123 -0
  248. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  249. package/dist/plugins/installer/installFromArchive.js +134 -0
  250. package/dist/plugins/installer/installFromSource.d.ts +13 -0
  251. package/dist/plugins/installer/installFromSource.js +51 -0
  252. package/dist/plugins/installer/list.d.ts +9 -0
  253. package/dist/plugins/installer/list.js +30 -0
  254. package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
  255. package/dist/plugins/installer/loadPluginAgents.js +27 -0
  256. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  257. package/dist/plugins/installer/loadPluginMcp.js +107 -0
  258. package/dist/plugins/installer/parseSource.d.ts +20 -0
  259. package/dist/plugins/installer/parseSource.js +74 -0
  260. package/dist/plugins/installer/paths.d.ts +5 -0
  261. package/dist/plugins/installer/paths.js +25 -0
  262. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  263. package/dist/plugins/installer/pruneDisabled.js +73 -0
  264. package/dist/plugins/installer/types.d.ts +52 -0
  265. package/dist/plugins/installer/types.js +28 -0
  266. package/dist/plugins/installer/uninstall.d.ts +2 -0
  267. package/dist/plugins/installer/uninstall.js +18 -0
  268. package/dist/plugins/installer/unzip.d.ts +14 -0
  269. package/dist/plugins/installer/unzip.js +82 -0
  270. package/dist/plugins/installer/update.d.ts +28 -0
  271. package/dist/plugins/installer/update.js +97 -0
  272. package/dist/plugins/loadPluginHooks.d.ts +54 -1
  273. package/dist/plugins/loadPluginHooks.js +83 -1
  274. package/dist/plugins/marketplaceManager.d.ts +15 -1
  275. package/dist/plugins/marketplaceManager.js +58 -4
  276. package/dist/plugins/pluginCommandHook.js +34 -14
  277. package/dist/plugins/pluginContent.d.ts +30 -0
  278. package/dist/plugins/pluginContent.js +83 -0
  279. package/dist/plugins/pluginInstaller.d.ts +34 -0
  280. package/dist/plugins/pluginInstaller.js +168 -35
  281. package/dist/plugins/schemas.js +41 -6
  282. package/dist/plugins/types.d.ts +10 -0
  283. package/dist/preset/index.d.ts +7 -1
  284. package/dist/preset/index.js +112 -6
  285. package/dist/product/types.d.ts +1 -1
  286. package/dist/prompt/composer.d.ts +31 -0
  287. package/dist/prompt/composer.js +95 -25
  288. package/dist/prompt/instruction-scanner.js +5 -3
  289. package/dist/prompt/section-loader.js +1 -0
  290. package/dist/prompt/sections/base.md +1 -0
  291. package/dist/prompt/sections/browser.md +10 -0
  292. package/dist/prompt/sections/coding.md +4 -0
  293. package/dist/prompt/sections/orchestration.md +8 -0
  294. package/dist/protocol/chat-session-manager.d.ts +15 -2
  295. package/dist/protocol/chat-session-manager.js +46 -0
  296. package/dist/protocol/chat-session.d.ts +82 -0
  297. package/dist/protocol/chat-session.js +121 -1
  298. package/dist/protocol/client.d.ts +27 -0
  299. package/dist/protocol/client.js +38 -0
  300. package/dist/protocol/redact.d.ts +50 -0
  301. package/dist/protocol/redact.js +71 -0
  302. package/dist/protocol/server.d.ts +153 -2
  303. package/dist/protocol/server.js +807 -39
  304. package/dist/protocol/tcp-transport.d.ts +45 -0
  305. package/dist/protocol/tcp-transport.js +74 -0
  306. package/dist/protocol/transport.js +3 -2
  307. package/dist/protocol/types.d.ts +69 -0
  308. package/dist/protocol/types.js +22 -0
  309. package/dist/quota/credentials.d.ts +3 -0
  310. package/dist/quota/credentials.js +80 -0
  311. package/dist/quota/index.d.ts +36 -0
  312. package/dist/quota/index.js +155 -0
  313. package/dist/quota/types.d.ts +48 -0
  314. package/dist/quota/types.js +13 -0
  315. package/dist/remote/bridge.d.ts +11 -2
  316. package/dist/remote/bridge.js +61 -33
  317. package/dist/review/review-prompt.d.ts +28 -0
  318. package/dist/review/review-prompt.js +81 -0
  319. package/dist/run/ArtifactTracker.js +5 -4
  320. package/dist/run/EngineRunner.d.ts +27 -1
  321. package/dist/run/EngineRunner.js +46 -8
  322. package/dist/run/FileRunStore.js +40 -11
  323. package/dist/run/RunApprovalBackend.js +25 -5
  324. package/dist/run/RunLock.d.ts +28 -2
  325. package/dist/run/RunLock.js +49 -7
  326. package/dist/run/RunManager.d.ts +12 -0
  327. package/dist/run/RunManager.js +86 -3
  328. package/dist/run/RunQueue.d.ts +1 -0
  329. package/dist/run/RunQueue.js +8 -2
  330. package/dist/run/factory.d.ts +8 -1
  331. package/dist/run/factory.js +1 -0
  332. package/dist/run/index.d.ts +2 -2
  333. package/dist/run/index.js +1 -1
  334. package/dist/run/redirect-target.d.ts +7 -0
  335. package/dist/run/redirect-target.js +13 -0
  336. package/dist/run/types.js +1 -1
  337. package/dist/runtime/background-shell.d.ts +139 -0
  338. package/dist/runtime/background-shell.js +495 -0
  339. package/dist/runtime/output-clean.d.ts +24 -0
  340. package/dist/runtime/output-clean.js +41 -0
  341. package/dist/runtime/ring-file.d.ts +64 -0
  342. package/dist/runtime/ring-file.js +174 -0
  343. package/dist/runtime/safe-spawn.js +15 -34
  344. package/dist/runtime/spawn-common.d.ts +148 -0
  345. package/dist/runtime/spawn-common.js +303 -0
  346. package/dist/runtime/truncate-output.d.ts +22 -0
  347. package/dist/runtime/truncate-output.js +49 -0
  348. package/dist/runtime/utf8-cut.d.ts +11 -0
  349. package/dist/runtime/utf8-cut.js +23 -0
  350. package/dist/services/auto-dream.d.ts +4 -0
  351. package/dist/services/auto-dream.js +26 -26
  352. package/dist/services/browser-open.d.ts +13 -0
  353. package/dist/services/browser-open.js +16 -0
  354. package/dist/services/diagnostics.d.ts +1 -2
  355. package/dist/services/diagnostics.js +12 -7
  356. package/dist/services/dream-consolidation.d.ts +57 -0
  357. package/dist/services/dream-consolidation.js +151 -0
  358. package/dist/services/extract-memories.d.ts +14 -1
  359. package/dist/services/extract-memories.js +45 -6
  360. package/dist/services/memory-orchestrator.d.ts +21 -0
  361. package/dist/services/memory-orchestrator.js +125 -32
  362. package/dist/services/notifier.d.ts +8 -0
  363. package/dist/services/notifier.js +39 -25
  364. package/dist/services/oauth.js +5 -7
  365. package/dist/services/session-memory-sort.d.ts +8 -0
  366. package/dist/services/session-memory-sort.js +9 -0
  367. package/dist/services/session-memory.js +30 -19
  368. package/dist/session/file-history.d.ts +124 -1
  369. package/dist/session/file-history.js +232 -9
  370. package/dist/session/memory.d.ts +116 -2
  371. package/dist/session/memory.js +250 -28
  372. package/dist/session/session-manager.d.ts +63 -1
  373. package/dist/session/session-manager.js +186 -5
  374. package/dist/session/simple-diff.d.ts +23 -0
  375. package/dist/session/simple-diff.js +84 -0
  376. package/dist/session/transcript.d.ts +25 -1
  377. package/dist/session/transcript.js +35 -2
  378. package/dist/session/undo-target.d.ts +67 -0
  379. package/dist/session/undo-target.js +144 -0
  380. package/dist/settings/disk-defaults.d.ts +42 -0
  381. package/dist/settings/disk-defaults.js +33 -0
  382. package/dist/settings/feature-flags.d.ts +64 -0
  383. package/dist/settings/feature-flags.js +61 -0
  384. package/dist/settings/manager.d.ts +101 -1
  385. package/dist/settings/manager.js +345 -15
  386. package/dist/settings/migrate-config.d.ts +45 -0
  387. package/dist/settings/migrate-config.js +125 -0
  388. package/dist/settings/personalization.d.ts +19 -0
  389. package/dist/settings/personalization.js +7 -0
  390. package/dist/settings/schema-export.d.ts +25 -0
  391. package/dist/settings/schema-export.js +38 -0
  392. package/dist/settings/schema.d.ts +1827 -396
  393. package/dist/settings/schema.js +361 -81
  394. package/dist/skills/scanner.d.ts +9 -0
  395. package/dist/skills/scanner.js +30 -2
  396. package/dist/stt/resolve-transcribe.d.ts +31 -0
  397. package/dist/stt/resolve-transcribe.js +108 -0
  398. package/dist/stt/transcribe.d.ts +51 -0
  399. package/dist/stt/transcribe.js +65 -0
  400. package/dist/tool-system/browser-bridge.d.ts +226 -0
  401. package/dist/tool-system/browser-bridge.js +163 -0
  402. package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
  403. package/dist/tool-system/builtin/add-marketplace.js +76 -0
  404. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  405. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  406. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  407. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  408. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  409. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  410. package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
  411. package/dist/tool-system/builtin/agent-registry.js +16 -4
  412. package/dist/tool-system/builtin/agent.d.ts +50 -11
  413. package/dist/tool-system/builtin/agent.js +576 -73
  414. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  415. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  416. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  417. package/dist/tool-system/builtin/apply-patch/index.js +7 -3
  418. package/dist/tool-system/builtin/arena.js +6 -7
  419. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  420. package/dist/tool-system/builtin/background-jobs.js +124 -0
  421. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  422. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  423. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  424. package/dist/tool-system/builtin/background-work.js +86 -0
  425. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  426. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  427. package/dist/tool-system/builtin/bash.d.ts +5 -2
  428. package/dist/tool-system/builtin/bash.js +98 -62
  429. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  430. package/dist/tool-system/builtin/browser-tools.js +312 -0
  431. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  432. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  433. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  434. package/dist/tool-system/builtin/check-quota.js +34 -0
  435. package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
  436. package/dist/tool-system/builtin/complete-goal.js +45 -0
  437. package/dist/tool-system/builtin/config.js +7 -0
  438. package/dist/tool-system/builtin/cron.d.ts +7 -0
  439. package/dist/tool-system/builtin/cron.js +105 -9
  440. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  441. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  442. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  443. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  444. package/dist/tool-system/builtin/edit.d.ts +2 -1
  445. package/dist/tool-system/builtin/edit.js +21 -12
  446. package/dist/tool-system/builtin/eol.d.ts +29 -0
  447. package/dist/tool-system/builtin/eol.js +37 -0
  448. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  449. package/dist/tool-system/builtin/file-cache.js +8 -0
  450. package/dist/tool-system/builtin/generate-image.d.ts +60 -0
  451. package/dist/tool-system/builtin/generate-image.js +374 -0
  452. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  453. package/dist/tool-system/builtin/generate-video.js +361 -0
  454. package/dist/tool-system/builtin/grep.js +6 -2
  455. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  456. package/dist/tool-system/builtin/image-providers.js +190 -0
  457. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  458. package/dist/tool-system/builtin/image-uploader.js +74 -0
  459. package/dist/tool-system/builtin/index.d.ts +24 -1
  460. package/dist/tool-system/builtin/index.js +310 -25
  461. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  462. package/dist/tool-system/builtin/memory.js +45 -7
  463. package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
  464. package/dist/tool-system/builtin/notebook-edit.js +1 -1
  465. package/dist/tool-system/builtin/powershell.js +4 -1
  466. package/dist/tool-system/builtin/read.d.ts +2 -1
  467. package/dist/tool-system/builtin/read.js +11 -3
  468. package/dist/tool-system/builtin/repl.js +4 -1
  469. package/dist/tool-system/builtin/skill.js +9 -0
  470. package/dist/tool-system/builtin/sleep.js +12 -5
  471. package/dist/tool-system/builtin/task.js +4 -1
  472. package/dist/tool-system/builtin/tool-search.js +25 -7
  473. package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
  474. package/dist/tool-system/builtin/update-automation-memory.js +60 -0
  475. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  476. package/dist/tool-system/builtin/video-providers.js +235 -0
  477. package/dist/tool-system/builtin/view-image.d.ts +18 -0
  478. package/dist/tool-system/builtin/view-image.js +96 -0
  479. package/dist/tool-system/builtin/web-fetch.js +12 -2
  480. package/dist/tool-system/builtin/web-search.d.ts +4 -1
  481. package/dist/tool-system/builtin/web-search.js +57 -10
  482. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  483. package/dist/tool-system/builtin/worktree.js +31 -4
  484. package/dist/tool-system/builtin/write.d.ts +2 -1
  485. package/dist/tool-system/builtin/write.js +1 -1
  486. package/dist/tool-system/context.d.ts +166 -6
  487. package/dist/tool-system/executor.d.ts +3 -2
  488. package/dist/tool-system/executor.js +197 -119
  489. package/dist/tool-system/investigation-guard.d.ts +4 -1
  490. package/dist/tool-system/investigation-guard.js +20 -4
  491. package/dist/tool-system/mcp-manager.d.ts +78 -16
  492. package/dist/tool-system/mcp-manager.js +357 -28
  493. package/dist/tool-system/path-policy.d.ts +99 -0
  494. package/dist/tool-system/path-policy.js +578 -0
  495. package/dist/tool-system/permission.d.ts +36 -1
  496. package/dist/tool-system/permission.js +322 -117
  497. package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
  498. package/dist/tool-system/plan-mode-allowlist.js +65 -0
  499. package/dist/tool-system/registry.d.ts +1 -0
  500. package/dist/tool-system/registry.js +26 -1
  501. package/dist/tool-system/sandbox/index.d.ts +8 -0
  502. package/dist/tool-system/sandbox/index.js +7 -2
  503. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  504. package/dist/tool-system/validate-tool-metadata.js +63 -0
  505. package/dist/tool-system/validation.d.ts +10 -0
  506. package/dist/tool-system/validation.js +16 -3
  507. package/dist/types.d.ts +301 -15
  508. package/dist/updater.js +20 -9
  509. package/dist/utils/envUtils.d.ts +0 -9
  510. package/dist/utils/envUtils.js +3 -28
  511. package/dist/utils/exec.d.ts +40 -0
  512. package/dist/utils/exec.js +144 -0
  513. package/dist/utils/format.js +4 -2
  514. package/dist/utils/json.d.ts +12 -0
  515. package/dist/utils/json.js +92 -0
  516. package/dist/utils/lockfile.js +9 -2
  517. package/dist/utils/theme.d.ts +7 -1
  518. package/dist/utils/theme.js +5 -3
  519. package/dist/utils/toolDisplay.js +0 -1
  520. package/package.json +14 -7
  521. package/dist/agent/coordinator.d.ts +0 -49
  522. package/dist/agent/coordinator.js +0 -77
  523. package/dist/settings/manager.test.js +0 -73
  524. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  525. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  526. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  527. package/dist/tool-system/builtin/send-message.js +0 -47
  528. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -2,6 +2,48 @@
2
2
  * Settings schema with Zod validation.
3
3
  */
4
4
  import { z } from "zod";
5
+ /**
6
+ * Tri-state project capability overlay. Lives in PROJECT settings only and
7
+ * layers over the global baseline (disabledSkills / disabledPlugins /
8
+ * mcpServers.<name>.enabled / disabledAgents). NOT a second denylist:
9
+ * - "on" → force enabled (even if globally disabled)
10
+ * - "off" → force disabled (even if globally enabled)
11
+ * - "inherit" → take the global baseline. We don't persist "inherit"; an
12
+ * absent key means inherit. See the project-scoped
13
+ * capabilities design (spec §4).
14
+ */
15
+ export declare const CapabilityOverrideSchema: z.ZodEnum<["inherit", "on", "off"]>;
16
+ export type CapabilityOverride = z.infer<typeof CapabilityOverrideSchema>;
17
+ export declare const CapabilityOverridesSchema: z.ZodOptional<z.ZodObject<{
18
+ skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
19
+ plugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
20
+ agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
21
+ mcp: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
22
+ builtin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
23
+ /**
24
+ * Per-hook overlay for PLUGIN-provided hooks, keyed by
25
+ * `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
26
+ * than `plugins` (which kills a whole plugin): "off" suppresses one
27
+ * hook for this project only. Only "off" is meaningful today — plugin
28
+ * hooks have no global disable list to force back "on" from.
29
+ */
30
+ pluginHooks: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
33
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
34
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
35
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
36
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
37
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
38
+ }, {
39
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
40
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
41
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
42
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
43
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
44
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
45
+ }>>;
46
+ export type CapabilityOverrides = z.infer<typeof CapabilityOverridesSchema>;
5
47
  export declare const SettingsSchema: z.ZodObject<{
6
48
  agent: z.ZodDefault<z.ZodObject<{
7
49
  preset: z.ZodDefault<z.ZodString>;
@@ -9,27 +51,43 @@ export declare const SettingsSchema: z.ZodObject<{
9
51
  disabledBuiltinTools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
10
52
  customSystemPrompt: z.ZodOptional<z.ZodString>;
11
53
  appendSystemPrompt: z.ZodOptional<z.ZodString>;
54
+ responseLanguage: z.ZodOptional<z.ZodString>;
55
+ userProfile: z.ZodOptional<z.ZodString>;
56
+ instructions: z.ZodOptional<z.ZodObject<{
57
+ compatClaude: z.ZodDefault<z.ZodBoolean>;
58
+ compatCodex: z.ZodDefault<z.ZodBoolean>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ compatClaude: boolean;
61
+ compatCodex: boolean;
62
+ }, {
63
+ compatClaude?: boolean | undefined;
64
+ compatCodex?: boolean | undefined;
65
+ }>>;
12
66
  }, "strip", z.ZodTypeAny, {
13
67
  preset: string;
14
68
  enabledBuiltinTools: string[];
15
69
  disabledBuiltinTools: string[];
16
70
  customSystemPrompt?: string | undefined;
17
71
  appendSystemPrompt?: string | undefined;
72
+ responseLanguage?: string | undefined;
73
+ userProfile?: string | undefined;
74
+ instructions?: {
75
+ compatClaude: boolean;
76
+ compatCodex: boolean;
77
+ } | undefined;
18
78
  }, {
19
79
  preset?: string | undefined;
20
80
  enabledBuiltinTools?: string[] | undefined;
21
81
  disabledBuiltinTools?: string[] | undefined;
22
82
  customSystemPrompt?: string | undefined;
23
83
  appendSystemPrompt?: string | undefined;
84
+ responseLanguage?: string | undefined;
85
+ userProfile?: string | undefined;
86
+ instructions?: {
87
+ compatClaude?: boolean | undefined;
88
+ compatCodex?: boolean | undefined;
89
+ } | undefined;
24
90
  }>>;
25
- /**
26
- * Primary source of truth for the active model is settings.activeKey
27
- * (points at models[].key). settings.model is a derived mirror of that
28
- * entry kept in sync for legacy boot paths (cli/main.ts, repl.ts, etc.)
29
- * which read provider/name/apiKey/baseUrl directly. Writers must update
30
- * both — appendOnboardingResult does this in one shot.
31
- */
32
- activeKey: z.ZodOptional<z.ZodString>;
33
91
  /**
34
92
  * Toggle background auto-update. When true (default), code-shell checks
35
93
  * npm for newer versions and — if the npm global prefix is writable —
@@ -38,135 +96,215 @@ export declare const SettingsSchema: z.ZodObject<{
38
96
  * Can also be disabled via env var `DISABLE_AUTOUPDATER=1`.
39
97
  */
40
98
  autoUpdates: z.ZodDefault<z.ZodBoolean>;
41
- model: z.ZodDefault<z.ZodObject<{
42
- provider: z.ZodDefault<z.ZodString>;
43
- name: z.ZodDefault<z.ZodString>;
44
- apiKey: z.ZodOptional<z.ZodString>;
45
- baseUrl: z.ZodDefault<z.ZodString>;
46
- temperature: z.ZodDefault<z.ZodNumber>;
47
- maxTokens: z.ZodDefault<z.ZodNumber>;
99
+ /**
100
+ * Image generation is a general capability, decoupled from LLM providers
101
+ * (TODO 7.1): a vendor may use different keys/endpoints/models for chat vs
102
+ * image, and image vendors (Gemini, and later 国内 模型) don't fit the LLM
103
+ * `providers[].kind` enum. `imageGen.providers[]` is the canonical config;
104
+ * each entry has a user-chosen `id` (selected via GenerateImage's
105
+ * `provider` arg) and a `kind` that picks the adapter. When `imageGen` is
106
+ * absent, resolution falls back to scanning LLM `providers[]` for an
107
+ * image-capable kind — so existing configs keep working with no migration.
108
+ */
109
+ imageGen: z.ZodOptional<z.ZodObject<{
110
+ defaultProvider: z.ZodOptional<z.ZodString>;
111
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
112
+ /** User-chosen instance name; GenerateImage(provider) selects by this. */
113
+ id: z.ZodString;
114
+ /** Adapter selector — e.g. "openai", "google". */
115
+ kind: z.ZodString;
116
+ baseUrl: z.ZodString;
117
+ apiKey: z.ZodOptional<z.ZodString>;
118
+ /** Default model for this instance when the call omits `model`. */
119
+ defaultModel: z.ZodOptional<z.ZodString>;
120
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
121
+ catalogId: z.ZodOptional<z.ZodString>;
122
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
123
+ apiKeyRef: z.ZodOptional<z.ZodString>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ id: string;
126
+ kind: string;
127
+ baseUrl: string;
128
+ apiKey?: string | undefined;
129
+ defaultModel?: string | undefined;
130
+ catalogId?: string | undefined;
131
+ apiKeyRef?: string | undefined;
132
+ }, {
133
+ id: string;
134
+ kind: string;
135
+ baseUrl: string;
136
+ apiKey?: string | undefined;
137
+ defaultModel?: string | undefined;
138
+ catalogId?: string | undefined;
139
+ apiKeyRef?: string | undefined;
140
+ }>, "many">>;
48
141
  }, "strip", z.ZodTypeAny, {
49
- provider: string;
50
- name: string;
51
- temperature: number;
52
- baseUrl: string;
53
- maxTokens: number;
54
- apiKey?: string | undefined;
142
+ providers: {
143
+ id: string;
144
+ kind: string;
145
+ baseUrl: string;
146
+ apiKey?: string | undefined;
147
+ defaultModel?: string | undefined;
148
+ catalogId?: string | undefined;
149
+ apiKeyRef?: string | undefined;
150
+ }[];
151
+ defaultProvider?: string | undefined;
55
152
  }, {
56
- provider?: string | undefined;
57
- name?: string | undefined;
58
- temperature?: number | undefined;
59
- baseUrl?: string | undefined;
60
- apiKey?: string | undefined;
61
- maxTokens?: number | undefined;
153
+ defaultProvider?: string | undefined;
154
+ providers?: {
155
+ id: string;
156
+ kind: string;
157
+ baseUrl: string;
158
+ apiKey?: string | undefined;
159
+ defaultModel?: string | undefined;
160
+ catalogId?: string | undefined;
161
+ apiKeyRef?: string | undefined;
162
+ }[] | undefined;
62
163
  }>>;
63
- providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
64
- key: z.ZodString;
65
- label: z.ZodOptional<z.ZodString>;
66
- kind: z.ZodEnum<["openai", "anthropic", "deepseek", "zai", "xai", "mistral", "groq", "google", "openrouter", "ollama", "custom"]>;
67
- baseUrl: z.ZodString;
68
- apiKey: z.ZodOptional<z.ZodString>;
69
- protocol: z.ZodOptional<z.ZodEnum<["openai-compat", "anthropic-style"]>>;
70
- modelsPath: z.ZodOptional<z.ZodString>;
71
- /**
72
- * DeepSeek V4 thinking-mode default for this provider. "enabled"
73
- * matches endpoint default; "disabled" makes V4 calls run in
74
- * non-thinking mode (faster, cheaper). Ignored by every provider
75
- * other than DeepSeek V4. Per-call overrides still win.
76
- */
77
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
164
+ /**
165
+ * Video generation config (TODO 7.1) — same shape as imageGen, decoupled
166
+ * from LLM providers. `videoGen.providers[]` each carry an `id` (selected
167
+ * via GenerateVideo's `provider` arg) + a `kind` picking the adapter. With
168
+ * no real adapters wired yet, this is config-ready: a future getVideoProvider
169
+ * case lights it up. Falls back to scanning LLM providers[] when absent.
170
+ */
171
+ videoGen: z.ZodOptional<z.ZodObject<{
172
+ defaultProvider: z.ZodOptional<z.ZodString>;
173
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
174
+ id: z.ZodString;
175
+ kind: z.ZodString;
176
+ baseUrl: z.ZodString;
177
+ apiKey: z.ZodOptional<z.ZodString>;
178
+ defaultModel: z.ZodOptional<z.ZodString>;
179
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
180
+ catalogId: z.ZodOptional<z.ZodString>;
181
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
182
+ apiKeyRef: z.ZodOptional<z.ZodString>;
183
+ }, "strip", z.ZodTypeAny, {
184
+ id: string;
185
+ kind: string;
186
+ baseUrl: string;
187
+ apiKey?: string | undefined;
188
+ defaultModel?: string | undefined;
189
+ catalogId?: string | undefined;
190
+ apiKeyRef?: string | undefined;
191
+ }, {
192
+ id: string;
193
+ kind: string;
194
+ baseUrl: string;
195
+ apiKey?: string | undefined;
196
+ defaultModel?: string | undefined;
197
+ catalogId?: string | undefined;
198
+ apiKeyRef?: string | undefined;
199
+ }>, "many">>;
78
200
  }, "strip", z.ZodTypeAny, {
79
- key: string;
80
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
81
- baseUrl: string;
82
- thinking?: "enabled" | "disabled" | undefined;
83
- label?: string | undefined;
84
- apiKey?: string | undefined;
85
- protocol?: "openai-compat" | "anthropic-style" | undefined;
86
- modelsPath?: string | undefined;
87
- }, {
88
- key: string;
89
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
90
- baseUrl: string;
91
- thinking?: "enabled" | "disabled" | undefined;
92
- label?: string | undefined;
93
- apiKey?: string | undefined;
94
- protocol?: "openai-compat" | "anthropic-style" | undefined;
95
- modelsPath?: string | undefined;
96
- }>, "many">>;
97
- models: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodObject<{
98
- key: z.ZodString;
99
- label: z.ZodOptional<z.ZodString>;
100
- providerKey: z.ZodOptional<z.ZodString>;
101
- model: z.ZodString;
102
- maxOutputTokens: z.ZodOptional<z.ZodNumber>;
103
- maxContextTokens: z.ZodOptional<z.ZodNumber>;
104
- /**
105
- * Which LLM client to use ("openai" or "anthropic"). New name —
106
- * the legacy field is `provider`, which we still accept and
107
- * fold into `protocol` below so old configs keep working.
108
- * NOT the brand/vendor that's providerKey above.
109
- */
110
- protocol: z.ZodOptional<z.ZodString>;
111
- provider: z.ZodOptional<z.ZodString>;
112
- baseUrl: z.ZodOptional<z.ZodString>;
201
+ providers: {
202
+ id: string;
203
+ kind: string;
204
+ baseUrl: string;
205
+ apiKey?: string | undefined;
206
+ defaultModel?: string | undefined;
207
+ catalogId?: string | undefined;
208
+ apiKeyRef?: string | undefined;
209
+ }[];
210
+ defaultProvider?: string | undefined;
211
+ }, {
212
+ defaultProvider?: string | undefined;
213
+ providers?: {
214
+ id: string;
215
+ kind: string;
216
+ baseUrl: string;
217
+ apiKey?: string | undefined;
218
+ defaultModel?: string | undefined;
219
+ catalogId?: string | undefined;
220
+ apiKeyRef?: string | undefined;
221
+ }[] | undefined;
222
+ }>>;
223
+ /**
224
+ * Credentials — independent key entities (统一模型接入方案 §3.3). A key
225
+ * lives here, not inlined on a connection, so deleting a connection never
226
+ * loses a key and many connections share one key by referencing the same
227
+ * credential id (LiteLLM credential_list model).
228
+ */
229
+ credentials: z.ZodDefault<z.ZodArray<z.ZodObject<{
230
+ /** User-chosen unique credential name. */
231
+ id: z.ZodString;
232
+ /** Catalog template this credential is for (a key belongs to one provider). */
233
+ catalogId: z.ZodString;
113
234
  apiKey: z.ZodOptional<z.ZodString>;
114
- /**
115
- * Per-model thinking override. Wins over the provider-level
116
- * setting (settings.providers[].thinking). Use this when
117
- * different models under the same provider need different
118
- * defaults — e.g. DeepSeek V4 Pro off (faster) but V4 Flash on.
119
- */
120
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
235
+ baseUrl: z.ZodOptional<z.ZodString>;
121
236
  }, "strip", z.ZodTypeAny, {
122
- model: string;
123
- key: string;
124
- provider?: string | undefined;
125
- thinking?: "enabled" | "disabled" | undefined;
126
- label?: string | undefined;
237
+ id: string;
238
+ catalogId: string;
127
239
  baseUrl?: string | undefined;
128
240
  apiKey?: string | undefined;
129
- protocol?: string | undefined;
130
- providerKey?: string | undefined;
131
- maxOutputTokens?: number | undefined;
132
- maxContextTokens?: number | undefined;
133
241
  }, {
134
- model: string;
135
- key: string;
136
- provider?: string | undefined;
137
- thinking?: "enabled" | "disabled" | undefined;
138
- label?: string | undefined;
242
+ id: string;
243
+ catalogId: string;
139
244
  baseUrl?: string | undefined;
140
245
  apiKey?: string | undefined;
141
- protocol?: string | undefined;
142
- providerKey?: string | undefined;
143
- maxOutputTokens?: number | undefined;
144
- maxContextTokens?: number | undefined;
145
- }>, {
146
- protocol: string | undefined;
147
- provider: string | undefined;
246
+ }>, "many">>;
247
+ /**
248
+ * Unified instance layer (统一模型接入方案, see
249
+ * docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.3).
250
+ * One store for text/image/video connections, each pointing at a catalog
251
+ * entry (catalogId), a credential (credentialId), its chosen model, and the
252
+ * param values the user picked. Replaces the legacy split of
253
+ * providers[]/models[]/imageGen/videoGen.
254
+ */
255
+ modelConnections: z.ZodDefault<z.ZodArray<z.ZodObject<{
256
+ /** User-chosen unique instance name. */
257
+ id: z.ZodString;
258
+ /** Catalog template this instance was created from. */
259
+ catalogId: z.ZodString;
260
+ tag: z.ZodEnum<["text", "image", "video", "audio"]>;
261
+ /** Selected modelId (from the entry's modelPresets). */
262
+ model: z.ZodString;
263
+ /** Per-connection baseUrl override (else the credential's / catalog's). */
264
+ baseUrl: z.ZodOptional<z.ZodString>;
265
+ /** Which credential supplies this connection's key. */
266
+ credentialId: z.ZodOptional<z.ZodString>;
267
+ /** Values the user picked for the model's params, e.g. { reasoning: "high" }. */
268
+ paramValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
269
+ }, "strip", z.ZodTypeAny, {
270
+ id: string;
148
271
  model: string;
149
- key: string;
150
- thinking?: "enabled" | "disabled" | undefined;
151
- label?: string | undefined;
272
+ catalogId: string;
273
+ tag: "text" | "image" | "video" | "audio";
152
274
  baseUrl?: string | undefined;
153
- apiKey?: string | undefined;
154
- providerKey?: string | undefined;
155
- maxOutputTokens?: number | undefined;
156
- maxContextTokens?: number | undefined;
275
+ credentialId?: string | undefined;
276
+ paramValues?: Record<string, unknown> | undefined;
157
277
  }, {
278
+ id: string;
158
279
  model: string;
159
- key: string;
160
- provider?: string | undefined;
161
- thinking?: "enabled" | "disabled" | undefined;
162
- label?: string | undefined;
280
+ catalogId: string;
281
+ tag: "text" | "image" | "video" | "audio";
163
282
  baseUrl?: string | undefined;
164
- apiKey?: string | undefined;
165
- protocol?: string | undefined;
166
- providerKey?: string | undefined;
167
- maxOutputTokens?: number | undefined;
168
- maxContextTokens?: number | undefined;
283
+ credentialId?: string | undefined;
284
+ paramValues?: Record<string, unknown> | undefined;
169
285
  }>, "many">>;
286
+ /** Default instance id per tag (replaces activeKey / defaultProvider). */
287
+ defaults: z.ZodDefault<z.ZodObject<{
288
+ text: z.ZodOptional<z.ZodString>;
289
+ image: z.ZodOptional<z.ZodString>;
290
+ video: z.ZodOptional<z.ZodString>;
291
+ /** Default speech-to-text (voice input) connection. */
292
+ audio: z.ZodOptional<z.ZodString>;
293
+ /** Background-task model (replaces auxModelKey). */
294
+ auxText: z.ZodOptional<z.ZodString>;
295
+ }, "strip", z.ZodTypeAny, {
296
+ text?: string | undefined;
297
+ image?: string | undefined;
298
+ video?: string | undefined;
299
+ audio?: string | undefined;
300
+ auxText?: string | undefined;
301
+ }, {
302
+ text?: string | undefined;
303
+ image?: string | undefined;
304
+ video?: string | undefined;
305
+ audio?: string | undefined;
306
+ auxText?: string | undefined;
307
+ }>>;
170
308
  permissions: z.ZodDefault<z.ZodObject<{
171
309
  defaultMode: z.ZodDefault<z.ZodEnum<["default", "acceptEdits", "dontAsk", "bypassPermissions", "auto", "plan"]>>;
172
310
  rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -186,7 +324,7 @@ export declare const SettingsSchema: z.ZodObject<{
186
324
  argsPattern?: Record<string, string> | undefined;
187
325
  }>, "many">>;
188
326
  }, "strip", z.ZodTypeAny, {
189
- defaultMode: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
327
+ defaultMode: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan";
190
328
  rules: {
191
329
  tool: string;
192
330
  decision: "allow" | "deny" | "ask";
@@ -194,7 +332,7 @@ export declare const SettingsSchema: z.ZodObject<{
194
332
  argsPattern?: Record<string, string> | undefined;
195
333
  }[];
196
334
  }, {
197
- defaultMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan" | undefined;
335
+ defaultMode?: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan" | undefined;
198
336
  rules?: {
199
337
  tool: string;
200
338
  decision: "allow" | "deny" | "ask";
@@ -206,14 +344,17 @@ export declare const SettingsSchema: z.ZodObject<{
206
344
  maxTokens: z.ZodDefault<z.ZodNumber>;
207
345
  compactAtRatio: z.ZodDefault<z.ZodNumber>;
208
346
  summarizeAtRatio: z.ZodDefault<z.ZodNumber>;
347
+ microcompactFloorRatio: z.ZodDefault<z.ZodNumber>;
209
348
  }, "strip", z.ZodTypeAny, {
210
349
  maxTokens: number;
211
350
  compactAtRatio: number;
212
351
  summarizeAtRatio: number;
352
+ microcompactFloorRatio: number;
213
353
  }, {
214
354
  maxTokens?: number | undefined;
215
355
  compactAtRatio?: number | undefined;
216
356
  summarizeAtRatio?: number | undefined;
357
+ microcompactFloorRatio?: number | undefined;
217
358
  }>>;
218
359
  session: z.ZodDefault<z.ZodObject<{
219
360
  storageDir: z.ZodOptional<z.ZodString>;
@@ -225,7 +366,7 @@ export declare const SettingsSchema: z.ZodObject<{
225
366
  storageDir?: string | undefined;
226
367
  maxHistory?: number | undefined;
227
368
  }>>;
228
- mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
369
+ mcpServers: z.ZodDefault<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
229
370
  name: z.ZodString;
230
371
  command: z.ZodOptional<z.ZodString>;
231
372
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
@@ -233,22 +374,76 @@ export declare const SettingsSchema: z.ZodObject<{
233
374
  url: z.ZodOptional<z.ZodString>;
234
375
  transport: z.ZodOptional<z.ZodEnum<["stdio", "sse", "streamable-http", "inprocess"]>>;
235
376
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
377
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
378
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
379
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
380
+ credentialRef: z.ZodOptional<z.ZodString>;
381
+ enabled: z.ZodOptional<z.ZodBoolean>;
236
382
  }, "strip", z.ZodTypeAny, {
237
383
  name: string;
384
+ enabled?: boolean | undefined;
238
385
  url?: string | undefined;
239
386
  args?: string[] | undefined;
240
- env?: Record<string, string> | undefined;
241
387
  command?: string | undefined;
388
+ env?: Record<string, string> | undefined;
242
389
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
243
390
  headers?: Record<string, string> | undefined;
391
+ envVars?: string[] | undefined;
392
+ bearerTokenEnvVar?: string | undefined;
393
+ envHeaders?: Record<string, string> | undefined;
394
+ credentialRef?: string | undefined;
244
395
  }, {
245
396
  name: string;
397
+ enabled?: boolean | undefined;
246
398
  url?: string | undefined;
247
399
  args?: string[] | undefined;
400
+ command?: string | undefined;
248
401
  env?: Record<string, string> | undefined;
402
+ transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
403
+ headers?: Record<string, string> | undefined;
404
+ envVars?: string[] | undefined;
405
+ bearerTokenEnvVar?: string | undefined;
406
+ envHeaders?: Record<string, string> | undefined;
407
+ credentialRef?: string | undefined;
408
+ }>>, Record<string, {
409
+ name: string;
410
+ enabled?: boolean | undefined;
411
+ url?: string | undefined;
412
+ args?: string[] | undefined;
249
413
  command?: string | undefined;
414
+ env?: Record<string, string> | undefined;
250
415
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
251
416
  headers?: Record<string, string> | undefined;
417
+ envVars?: string[] | undefined;
418
+ bearerTokenEnvVar?: string | undefined;
419
+ envHeaders?: Record<string, string> | undefined;
420
+ credentialRef?: string | undefined;
421
+ }>, unknown>>;
422
+ /**
423
+ * User supplements for PLUGIN-provided MCP servers, keyed by the server's
424
+ * `<plugin>:<server>` name. Layered onto the plugin config at merge time
425
+ * (mergePluginMcpServers). Only env/credential fields are accepted —
426
+ * command/args/url/transport are intentionally absent and `.strict()`
427
+ * rejects them, so a plugin update is never shadowed by a stale copy.
428
+ */
429
+ mcpServerOverrides: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
430
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
431
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
432
+ credentialRef: z.ZodOptional<z.ZodString>;
433
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
434
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
435
+ }, "strict", z.ZodTypeAny, {
436
+ env?: Record<string, string> | undefined;
437
+ envVars?: string[] | undefined;
438
+ bearerTokenEnvVar?: string | undefined;
439
+ envHeaders?: Record<string, string> | undefined;
440
+ credentialRef?: string | undefined;
441
+ }, {
442
+ env?: Record<string, string> | undefined;
443
+ envVars?: string[] | undefined;
444
+ bearerTokenEnvVar?: string | undefined;
445
+ envHeaders?: Record<string, string> | undefined;
446
+ credentialRef?: string | undefined;
252
447
  }>>>;
253
448
  /**
254
449
  * Skill names hidden from the LLM. Names include the full
@@ -264,6 +459,82 @@ export declare const SettingsSchema: z.ZodObject<{
264
459
  * names (no colon suffix). See scanSkills(opts.disabledPlugins).
265
460
  */
266
461
  disabledPlugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
462
+ /**
463
+ * Sub-agent role names (the `name` in .code-shell/agents/*.md) to
464
+ * hide from the registry. A disabled role is filtered out at load
465
+ * so it never appears in registry.list()/get() — the Agent tool's
466
+ * agent_type list won't show it and the LLM can't pick it. Mirrors
467
+ * disabledSkills / disabledPlugins.
468
+ */
469
+ disabledAgents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
470
+ /**
471
+ * Project-scoped tri-state capability overlay. Only meaningful in
472
+ * ${cwd}/.code-shell/settings.json; layered over the global baseline at
473
+ * capability-assembly time. Optional — absence === everything inherits.
474
+ */
475
+ capabilityOverrides: z.ZodOptional<z.ZodObject<{
476
+ skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
477
+ plugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
478
+ agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
479
+ mcp: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
480
+ builtin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
481
+ /**
482
+ * Per-hook overlay for PLUGIN-provided hooks, keyed by
483
+ * `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
484
+ * than `plugins` (which kills a whole plugin): "off" suppresses one
485
+ * hook for this project only. Only "off" is meaningful today — plugin
486
+ * hooks have no global disable list to force back "on" from.
487
+ */
488
+ pluginHooks: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
489
+ }, "strip", z.ZodTypeAny, {
490
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
491
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
492
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
493
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
494
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
495
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
496
+ }, {
497
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
498
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
499
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
500
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
501
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
502
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
503
+ }>>;
504
+ /**
505
+ * Feature flags overlay: a map of flag name → boolean that overrides the
506
+ * compiled-in defaults (see settings/feature-flags.ts FEATURE_FLAGS).
507
+ * Project settings override user settings via the normal merge, so a flag
508
+ * can be flipped per-workspace. Unknown flag names are tolerated (kept as
509
+ * data) for forward-compat; consumers only read known flags via
510
+ * isFeatureEnabled(). Passthrough record — values coerced to boolean.
511
+ */
512
+ featureFlags: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
513
+ /**
514
+ * Cross-session memory knobs. Optional — absence keeps the built-in
515
+ * defaults (see services/extract-memories.ts). `maxCount` caps memories
516
+ * accepted per extraction pass; `maxAge`/`extractionModel` are reserved
517
+ * for the consolidation/extraction pipeline.
518
+ */
519
+ memories: z.ZodOptional<z.ZodObject<{
520
+ maxCount: z.ZodOptional<z.ZodNumber>;
521
+ maxAge: z.ZodOptional<z.ZodNumber>;
522
+ extractionModel: z.ZodOptional<z.ZodString>;
523
+ /** Master switch for end-of-session automatic memory extraction.
524
+ * Absent/true = extract (current behavior); false = skip extraction
525
+ * while keeping session summaries and Dream untouched. */
526
+ autoExtract: z.ZodOptional<z.ZodBoolean>;
527
+ }, "strip", z.ZodTypeAny, {
528
+ maxCount?: number | undefined;
529
+ maxAge?: number | undefined;
530
+ extractionModel?: string | undefined;
531
+ autoExtract?: boolean | undefined;
532
+ }, {
533
+ maxCount?: number | undefined;
534
+ maxAge?: number | undefined;
535
+ extractionModel?: string | undefined;
536
+ autoExtract?: boolean | undefined;
537
+ }>>;
267
538
  instructions: z.ZodDefault<z.ZodObject<{
268
539
  fileName: z.ZodDefault<z.ZodString>;
269
540
  scanDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -288,30 +559,30 @@ export declare const SettingsSchema: z.ZodObject<{
288
559
  apiKey: z.ZodOptional<z.ZodString>;
289
560
  baseUrl: z.ZodOptional<z.ZodString>;
290
561
  }, "strip", z.ZodTypeAny, {
291
- model: string;
292
562
  name: string;
563
+ model: string;
293
564
  provider?: string | undefined;
294
565
  baseUrl?: string | undefined;
295
566
  apiKey?: string | undefined;
296
567
  }, {
297
- model: string;
298
568
  name: string;
569
+ model: string;
299
570
  provider?: string | undefined;
300
571
  baseUrl?: string | undefined;
301
572
  apiKey?: string | undefined;
302
573
  }>]>, "many">>;
303
574
  }, "strip", z.ZodTypeAny, {
304
575
  participants: (string | {
305
- model: string;
306
576
  name: string;
577
+ model: string;
307
578
  provider?: string | undefined;
308
579
  baseUrl?: string | undefined;
309
580
  apiKey?: string | undefined;
310
581
  })[];
311
582
  }, {
312
583
  participants?: (string | {
313
- model: string;
314
584
  name: string;
585
+ model: string;
315
586
  provider?: string | undefined;
316
587
  baseUrl?: string | undefined;
317
588
  apiKey?: string | undefined;
@@ -331,12 +602,45 @@ export declare const SettingsSchema: z.ZodObject<{
331
602
  providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["serper", "tavily", "searxng"]>, z.ZodObject<{
332
603
  apiKey: z.ZodOptional<z.ZodString>;
333
604
  baseUrl: z.ZodOptional<z.ZodString>;
605
+ lastProbe: z.ZodOptional<z.ZodObject<{
606
+ status: z.ZodEnum<["ok", "error", "unconfigured"]>;
607
+ sampleTitles: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
608
+ errorMessage: z.ZodOptional<z.ZodString>;
609
+ errorDetail: z.ZodOptional<z.ZodString>;
610
+ lastProbedAt: z.ZodString;
611
+ }, "strip", z.ZodTypeAny, {
612
+ status: "error" | "ok" | "unconfigured";
613
+ lastProbedAt: string;
614
+ sampleTitles?: string[] | undefined;
615
+ errorMessage?: string | undefined;
616
+ errorDetail?: string | undefined;
617
+ }, {
618
+ status: "error" | "ok" | "unconfigured";
619
+ lastProbedAt: string;
620
+ sampleTitles?: string[] | undefined;
621
+ errorMessage?: string | undefined;
622
+ errorDetail?: string | undefined;
623
+ }>>;
334
624
  }, "strip", z.ZodTypeAny, {
335
625
  baseUrl?: string | undefined;
336
626
  apiKey?: string | undefined;
627
+ lastProbe?: {
628
+ status: "error" | "ok" | "unconfigured";
629
+ lastProbedAt: string;
630
+ sampleTitles?: string[] | undefined;
631
+ errorMessage?: string | undefined;
632
+ errorDetail?: string | undefined;
633
+ } | undefined;
337
634
  }, {
338
635
  baseUrl?: string | undefined;
339
636
  apiKey?: string | undefined;
637
+ lastProbe?: {
638
+ status: "error" | "ok" | "unconfigured";
639
+ lastProbedAt: string;
640
+ sampleTitles?: string[] | undefined;
641
+ errorMessage?: string | undefined;
642
+ errorDetail?: string | undefined;
643
+ } | undefined;
340
644
  }>>>;
341
645
  }, "strip", z.ZodTypeAny, {
342
646
  provider: "serper" | "tavily" | "searxng";
@@ -345,6 +649,13 @@ export declare const SettingsSchema: z.ZodObject<{
345
649
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
346
650
  baseUrl?: string | undefined;
347
651
  apiKey?: string | undefined;
652
+ lastProbe?: {
653
+ status: "error" | "ok" | "unconfigured";
654
+ lastProbedAt: string;
655
+ sampleTitles?: string[] | undefined;
656
+ errorMessage?: string | undefined;
657
+ errorDetail?: string | undefined;
658
+ } | undefined;
348
659
  }>> | undefined;
349
660
  }, {
350
661
  provider?: "serper" | "tavily" | "searxng" | undefined;
@@ -353,6 +664,13 @@ export declare const SettingsSchema: z.ZodObject<{
353
664
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
354
665
  baseUrl?: string | undefined;
355
666
  apiKey?: string | undefined;
667
+ lastProbe?: {
668
+ status: "error" | "ok" | "unconfigured";
669
+ lastProbedAt: string;
670
+ sampleTitles?: string[] | undefined;
671
+ errorMessage?: string | undefined;
672
+ errorDetail?: string | undefined;
673
+ } | undefined;
356
674
  }>> | undefined;
357
675
  }>>;
358
676
  output: z.ZodDefault<z.ZodObject<{
@@ -362,6 +680,26 @@ export declare const SettingsSchema: z.ZodObject<{
362
680
  }, {
363
681
  format?: "text" | "json" | "jsonl" | "stream-json" | undefined;
364
682
  }>>;
683
+ /**
684
+ * Image attachment handling. Sub-fields:
685
+ * - detail: provider-agnostic image clarity. Drives the
686
+ * renderer-side downscale (low→~1024 / standard→~1568 /
687
+ * high→~2576 px long edge) so BOTH providers save tokens
688
+ * before send. Legacy "original" is migrated to "high".
689
+ * - mcpImageTokenBudget: per-turn cap on token cost of images
690
+ * returned by MCP tools. Codex doesn't enforce this; CC uses
691
+ * 25 000. Set to 0 to disable.
692
+ */
693
+ images: z.ZodOptional<z.ZodObject<{
694
+ detail: z.ZodOptional<z.ZodEffects<z.ZodEnum<["low", "standard", "high"]>, "low" | "high" | "standard", unknown>>;
695
+ mcpImageTokenBudget: z.ZodOptional<z.ZodNumber>;
696
+ }, "strip", z.ZodTypeAny, {
697
+ detail?: "low" | "high" | "standard" | undefined;
698
+ mcpImageTokenBudget?: number | undefined;
699
+ }, {
700
+ detail?: unknown;
701
+ mcpImageTokenBudget?: number | undefined;
702
+ }>>;
365
703
  /**
366
704
  * OS-level sandbox for shell-tool execution. "auto" picks per platform:
367
705
  * Seatbelt on macOS, bubblewrap on Linux when installed, otherwise off.
@@ -374,16 +712,103 @@ export declare const SettingsSchema: z.ZodObject<{
374
712
  deniedReads: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
375
713
  network: z.ZodOptional<z.ZodEnum<["allow", "deny"]>>;
376
714
  }, "strip", z.ZodTypeAny, {
377
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
715
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
378
716
  writableRoots?: string[] | undefined;
379
717
  deniedReads?: string[] | undefined;
380
718
  network?: "allow" | "deny" | undefined;
381
719
  }, {
382
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
720
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
383
721
  writableRoots?: string[] | undefined;
384
722
  deniedReads?: string[] | undefined;
385
723
  network?: "allow" | "deny" | undefined;
386
724
  }>>;
725
+ /**
726
+ * Top-level environment variables injected into tool subprocesses (the
727
+ * Bash tool, background shells). Mirrors Claude Code's `env` field: a
728
+ * KEY=VALUE map that can be set globally (~/.code-shell/settings.json) and
729
+ * overridden per-project (.code-shell/settings.json). The canonical home
730
+ * for API keys (e.g. OPENAI_API_KEY) that a skill's script reads — configure
731
+ * once globally and every project's skills can use it.
732
+ *
733
+ * Precedence when merged into the spawn env (lowest → highest):
734
+ * project localEnvironment.env → global env → project env
735
+ * None of these is filtered through the deny regex (see mergeShellEnv):
736
+ * they are values the user typed deliberately, a different trust class from
737
+ * the host process.env passthrough the deny machinery guards against.
738
+ */
739
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
740
+ /**
741
+ * Project-local environment profile. Mirrors Codex's local-environment
742
+ * shape at the settings layer: setup/cleanup scripts can be customized per
743
+ * platform, and env values are stored as KEY=VALUE pairs. Runtime wiring is
744
+ * intentionally separate from the MCP server env model above.
745
+ */
746
+ localEnvironment: z.ZodOptional<z.ZodObject<{
747
+ name: z.ZodOptional<z.ZodString>;
748
+ setupScripts: z.ZodOptional<z.ZodObject<{
749
+ default: z.ZodOptional<z.ZodString>;
750
+ macos: z.ZodOptional<z.ZodString>;
751
+ linux: z.ZodOptional<z.ZodString>;
752
+ windows: z.ZodOptional<z.ZodString>;
753
+ }, "strip", z.ZodTypeAny, {
754
+ default?: string | undefined;
755
+ linux?: string | undefined;
756
+ macos?: string | undefined;
757
+ windows?: string | undefined;
758
+ }, {
759
+ default?: string | undefined;
760
+ linux?: string | undefined;
761
+ macos?: string | undefined;
762
+ windows?: string | undefined;
763
+ }>>;
764
+ cleanupScripts: z.ZodOptional<z.ZodObject<{
765
+ default: z.ZodOptional<z.ZodString>;
766
+ macos: z.ZodOptional<z.ZodString>;
767
+ linux: z.ZodOptional<z.ZodString>;
768
+ windows: z.ZodOptional<z.ZodString>;
769
+ }, "strip", z.ZodTypeAny, {
770
+ default?: string | undefined;
771
+ linux?: string | undefined;
772
+ macos?: string | undefined;
773
+ windows?: string | undefined;
774
+ }, {
775
+ default?: string | undefined;
776
+ linux?: string | undefined;
777
+ macos?: string | undefined;
778
+ windows?: string | undefined;
779
+ }>>;
780
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
781
+ }, "strip", z.ZodTypeAny, {
782
+ name?: string | undefined;
783
+ env?: Record<string, string> | undefined;
784
+ setupScripts?: {
785
+ default?: string | undefined;
786
+ linux?: string | undefined;
787
+ macos?: string | undefined;
788
+ windows?: string | undefined;
789
+ } | undefined;
790
+ cleanupScripts?: {
791
+ default?: string | undefined;
792
+ linux?: string | undefined;
793
+ macos?: string | undefined;
794
+ windows?: string | undefined;
795
+ } | undefined;
796
+ }, {
797
+ name?: string | undefined;
798
+ env?: Record<string, string> | undefined;
799
+ setupScripts?: {
800
+ default?: string | undefined;
801
+ linux?: string | undefined;
802
+ macos?: string | undefined;
803
+ windows?: string | undefined;
804
+ } | undefined;
805
+ cleanupScripts?: {
806
+ default?: string | undefined;
807
+ linux?: string | undefined;
808
+ macos?: string | undefined;
809
+ windows?: string | undefined;
810
+ } | undefined;
811
+ }>>;
387
812
  /**
388
813
  * Shell-hook configuration. Each entry binds a HookEventName to a
389
814
  * shell command; the command receives ctx JSON on stdin and returns
@@ -400,19 +825,99 @@ export declare const SettingsSchema: z.ZodObject<{
400
825
  matcher: z.ZodOptional<z.ZodString>;
401
826
  timeout_ms: z.ZodOptional<z.ZodNumber>;
402
827
  cwd: z.ZodOptional<z.ZodString>;
828
+ /** Soft off-switch: the entry stays in the file (and the UI) but
829
+ * registerSettingsHooks skips it. Absent = enabled. */
830
+ disabled: z.ZodOptional<z.ZodBoolean>;
403
831
  }, "strip", z.ZodTypeAny, {
404
832
  command: string;
405
833
  event: string;
406
- cwd?: string | undefined;
834
+ disabled?: boolean | undefined;
407
835
  matcher?: string | undefined;
408
836
  timeout_ms?: number | undefined;
837
+ cwd?: string | undefined;
409
838
  }, {
410
839
  command: string;
411
840
  event: string;
412
- cwd?: string | undefined;
841
+ disabled?: boolean | undefined;
413
842
  matcher?: string | undefined;
414
843
  timeout_ms?: number | undefined;
844
+ cwd?: string | undefined;
415
845
  }>, "many">>;
846
+ /**
847
+ * External coding-agent orchestration (Claude Code / Codex CLI).
848
+ * Used by the Mobile Web Remote to launch managed jobs. dangerousArgs
849
+ * is config-provided (not hardcoded) so it tracks CLI flag changes;
850
+ * project-default dangerous mode only applies inside trustedWorkspaces.
851
+ */
852
+ externalAgents: z.ZodOptional<z.ZodObject<{
853
+ claudeCode: z.ZodOptional<z.ZodObject<{
854
+ command: z.ZodOptional<z.ZodString>;
855
+ defaultMode: z.ZodOptional<z.ZodEnum<["safe", "dangerous"]>>;
856
+ dangerousArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
857
+ trustedWorkspaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
858
+ autoStartInTrustedWorkspaces: z.ZodOptional<z.ZodBoolean>;
859
+ }, "strip", z.ZodTypeAny, {
860
+ defaultMode?: "safe" | "dangerous" | undefined;
861
+ command?: string | undefined;
862
+ dangerousArgs?: string[] | undefined;
863
+ trustedWorkspaces?: string[] | undefined;
864
+ autoStartInTrustedWorkspaces?: boolean | undefined;
865
+ }, {
866
+ defaultMode?: "safe" | "dangerous" | undefined;
867
+ command?: string | undefined;
868
+ dangerousArgs?: string[] | undefined;
869
+ trustedWorkspaces?: string[] | undefined;
870
+ autoStartInTrustedWorkspaces?: boolean | undefined;
871
+ }>>;
872
+ codex: z.ZodOptional<z.ZodObject<{
873
+ command: z.ZodOptional<z.ZodString>;
874
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
875
+ }, "strip", z.ZodTypeAny, {
876
+ args?: string[] | undefined;
877
+ command?: string | undefined;
878
+ }, {
879
+ args?: string[] | undefined;
880
+ command?: string | undefined;
881
+ }>>;
882
+ }, "strip", z.ZodTypeAny, {
883
+ claudeCode?: {
884
+ defaultMode?: "safe" | "dangerous" | undefined;
885
+ command?: string | undefined;
886
+ dangerousArgs?: string[] | undefined;
887
+ trustedWorkspaces?: string[] | undefined;
888
+ autoStartInTrustedWorkspaces?: boolean | undefined;
889
+ } | undefined;
890
+ codex?: {
891
+ args?: string[] | undefined;
892
+ command?: string | undefined;
893
+ } | undefined;
894
+ }, {
895
+ claudeCode?: {
896
+ defaultMode?: "safe" | "dangerous" | undefined;
897
+ command?: string | undefined;
898
+ dangerousArgs?: string[] | undefined;
899
+ trustedWorkspaces?: string[] | undefined;
900
+ autoStartInTrustedWorkspaces?: boolean | undefined;
901
+ } | undefined;
902
+ codex?: {
903
+ args?: string[] | undefined;
904
+ command?: string | undefined;
905
+ } | undefined;
906
+ }>>;
907
+ /**
908
+ * Credential-use gate (凭证模块第二期). Controls whether the AI's
909
+ * `UseCredential` tool prompts before handing a stored credential to a
910
+ * command. `autoApprove: true` skips the prompt entirely (默认关 — every
911
+ * use asks, or is remembered for the session). See
912
+ * docs/superpowers/specs/2026-06-16-credential-use-gate-design.md §5.
913
+ */
914
+ credentialUse: z.ZodOptional<z.ZodObject<{
915
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
916
+ }, "strip", z.ZodTypeAny, {
917
+ autoApprove?: boolean | undefined;
918
+ }, {
919
+ autoApprove?: boolean | undefined;
920
+ }>>;
416
921
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
417
922
  agent: z.ZodDefault<z.ZodObject<{
418
923
  preset: z.ZodDefault<z.ZodString>;
@@ -420,27 +925,43 @@ export declare const SettingsSchema: z.ZodObject<{
420
925
  disabledBuiltinTools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
421
926
  customSystemPrompt: z.ZodOptional<z.ZodString>;
422
927
  appendSystemPrompt: z.ZodOptional<z.ZodString>;
928
+ responseLanguage: z.ZodOptional<z.ZodString>;
929
+ userProfile: z.ZodOptional<z.ZodString>;
930
+ instructions: z.ZodOptional<z.ZodObject<{
931
+ compatClaude: z.ZodDefault<z.ZodBoolean>;
932
+ compatCodex: z.ZodDefault<z.ZodBoolean>;
933
+ }, "strip", z.ZodTypeAny, {
934
+ compatClaude: boolean;
935
+ compatCodex: boolean;
936
+ }, {
937
+ compatClaude?: boolean | undefined;
938
+ compatCodex?: boolean | undefined;
939
+ }>>;
423
940
  }, "strip", z.ZodTypeAny, {
424
941
  preset: string;
425
942
  enabledBuiltinTools: string[];
426
943
  disabledBuiltinTools: string[];
427
944
  customSystemPrompt?: string | undefined;
428
945
  appendSystemPrompt?: string | undefined;
946
+ responseLanguage?: string | undefined;
947
+ userProfile?: string | undefined;
948
+ instructions?: {
949
+ compatClaude: boolean;
950
+ compatCodex: boolean;
951
+ } | undefined;
429
952
  }, {
430
953
  preset?: string | undefined;
431
954
  enabledBuiltinTools?: string[] | undefined;
432
955
  disabledBuiltinTools?: string[] | undefined;
433
956
  customSystemPrompt?: string | undefined;
434
957
  appendSystemPrompt?: string | undefined;
958
+ responseLanguage?: string | undefined;
959
+ userProfile?: string | undefined;
960
+ instructions?: {
961
+ compatClaude?: boolean | undefined;
962
+ compatCodex?: boolean | undefined;
963
+ } | undefined;
435
964
  }>>;
436
- /**
437
- * Primary source of truth for the active model is settings.activeKey
438
- * (points at models[].key). settings.model is a derived mirror of that
439
- * entry kept in sync for legacy boot paths (cli/main.ts, repl.ts, etc.)
440
- * which read provider/name/apiKey/baseUrl directly. Writers must update
441
- * both — appendOnboardingResult does this in one shot.
442
- */
443
- activeKey: z.ZodOptional<z.ZodString>;
444
965
  /**
445
966
  * Toggle background auto-update. When true (default), code-shell checks
446
967
  * npm for newer versions and — if the npm global prefix is writable —
@@ -449,135 +970,215 @@ export declare const SettingsSchema: z.ZodObject<{
449
970
  * Can also be disabled via env var `DISABLE_AUTOUPDATER=1`.
450
971
  */
451
972
  autoUpdates: z.ZodDefault<z.ZodBoolean>;
452
- model: z.ZodDefault<z.ZodObject<{
453
- provider: z.ZodDefault<z.ZodString>;
454
- name: z.ZodDefault<z.ZodString>;
455
- apiKey: z.ZodOptional<z.ZodString>;
456
- baseUrl: z.ZodDefault<z.ZodString>;
457
- temperature: z.ZodDefault<z.ZodNumber>;
458
- maxTokens: z.ZodDefault<z.ZodNumber>;
973
+ /**
974
+ * Image generation is a general capability, decoupled from LLM providers
975
+ * (TODO 7.1): a vendor may use different keys/endpoints/models for chat vs
976
+ * image, and image vendors (Gemini, and later 国内 模型) don't fit the LLM
977
+ * `providers[].kind` enum. `imageGen.providers[]` is the canonical config;
978
+ * each entry has a user-chosen `id` (selected via GenerateImage's
979
+ * `provider` arg) and a `kind` that picks the adapter. When `imageGen` is
980
+ * absent, resolution falls back to scanning LLM `providers[]` for an
981
+ * image-capable kind — so existing configs keep working with no migration.
982
+ */
983
+ imageGen: z.ZodOptional<z.ZodObject<{
984
+ defaultProvider: z.ZodOptional<z.ZodString>;
985
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
986
+ /** User-chosen instance name; GenerateImage(provider) selects by this. */
987
+ id: z.ZodString;
988
+ /** Adapter selector — e.g. "openai", "google". */
989
+ kind: z.ZodString;
990
+ baseUrl: z.ZodString;
991
+ apiKey: z.ZodOptional<z.ZodString>;
992
+ /** Default model for this instance when the call omits `model`. */
993
+ defaultModel: z.ZodOptional<z.ZodString>;
994
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
995
+ catalogId: z.ZodOptional<z.ZodString>;
996
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
997
+ apiKeyRef: z.ZodOptional<z.ZodString>;
998
+ }, "strip", z.ZodTypeAny, {
999
+ id: string;
1000
+ kind: string;
1001
+ baseUrl: string;
1002
+ apiKey?: string | undefined;
1003
+ defaultModel?: string | undefined;
1004
+ catalogId?: string | undefined;
1005
+ apiKeyRef?: string | undefined;
1006
+ }, {
1007
+ id: string;
1008
+ kind: string;
1009
+ baseUrl: string;
1010
+ apiKey?: string | undefined;
1011
+ defaultModel?: string | undefined;
1012
+ catalogId?: string | undefined;
1013
+ apiKeyRef?: string | undefined;
1014
+ }>, "many">>;
459
1015
  }, "strip", z.ZodTypeAny, {
460
- provider: string;
461
- name: string;
462
- temperature: number;
463
- baseUrl: string;
464
- maxTokens: number;
465
- apiKey?: string | undefined;
1016
+ providers: {
1017
+ id: string;
1018
+ kind: string;
1019
+ baseUrl: string;
1020
+ apiKey?: string | undefined;
1021
+ defaultModel?: string | undefined;
1022
+ catalogId?: string | undefined;
1023
+ apiKeyRef?: string | undefined;
1024
+ }[];
1025
+ defaultProvider?: string | undefined;
466
1026
  }, {
467
- provider?: string | undefined;
468
- name?: string | undefined;
469
- temperature?: number | undefined;
470
- baseUrl?: string | undefined;
471
- apiKey?: string | undefined;
472
- maxTokens?: number | undefined;
1027
+ defaultProvider?: string | undefined;
1028
+ providers?: {
1029
+ id: string;
1030
+ kind: string;
1031
+ baseUrl: string;
1032
+ apiKey?: string | undefined;
1033
+ defaultModel?: string | undefined;
1034
+ catalogId?: string | undefined;
1035
+ apiKeyRef?: string | undefined;
1036
+ }[] | undefined;
473
1037
  }>>;
474
- providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
475
- key: z.ZodString;
476
- label: z.ZodOptional<z.ZodString>;
477
- kind: z.ZodEnum<["openai", "anthropic", "deepseek", "zai", "xai", "mistral", "groq", "google", "openrouter", "ollama", "custom"]>;
478
- baseUrl: z.ZodString;
479
- apiKey: z.ZodOptional<z.ZodString>;
480
- protocol: z.ZodOptional<z.ZodEnum<["openai-compat", "anthropic-style"]>>;
481
- modelsPath: z.ZodOptional<z.ZodString>;
482
- /**
483
- * DeepSeek V4 thinking-mode default for this provider. "enabled"
484
- * matches endpoint default; "disabled" makes V4 calls run in
485
- * non-thinking mode (faster, cheaper). Ignored by every provider
486
- * other than DeepSeek V4. Per-call overrides still win.
487
- */
488
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
1038
+ /**
1039
+ * Video generation config (TODO 7.1) — same shape as imageGen, decoupled
1040
+ * from LLM providers. `videoGen.providers[]` each carry an `id` (selected
1041
+ * via GenerateVideo's `provider` arg) + a `kind` picking the adapter. With
1042
+ * no real adapters wired yet, this is config-ready: a future getVideoProvider
1043
+ * case lights it up. Falls back to scanning LLM providers[] when absent.
1044
+ */
1045
+ videoGen: z.ZodOptional<z.ZodObject<{
1046
+ defaultProvider: z.ZodOptional<z.ZodString>;
1047
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
1048
+ id: z.ZodString;
1049
+ kind: z.ZodString;
1050
+ baseUrl: z.ZodString;
1051
+ apiKey: z.ZodOptional<z.ZodString>;
1052
+ defaultModel: z.ZodOptional<z.ZodString>;
1053
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
1054
+ catalogId: z.ZodOptional<z.ZodString>;
1055
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
1056
+ apiKeyRef: z.ZodOptional<z.ZodString>;
1057
+ }, "strip", z.ZodTypeAny, {
1058
+ id: string;
1059
+ kind: string;
1060
+ baseUrl: string;
1061
+ apiKey?: string | undefined;
1062
+ defaultModel?: string | undefined;
1063
+ catalogId?: string | undefined;
1064
+ apiKeyRef?: string | undefined;
1065
+ }, {
1066
+ id: string;
1067
+ kind: string;
1068
+ baseUrl: string;
1069
+ apiKey?: string | undefined;
1070
+ defaultModel?: string | undefined;
1071
+ catalogId?: string | undefined;
1072
+ apiKeyRef?: string | undefined;
1073
+ }>, "many">>;
489
1074
  }, "strip", z.ZodTypeAny, {
490
- key: string;
491
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
492
- baseUrl: string;
493
- thinking?: "enabled" | "disabled" | undefined;
494
- label?: string | undefined;
495
- apiKey?: string | undefined;
496
- protocol?: "openai-compat" | "anthropic-style" | undefined;
497
- modelsPath?: string | undefined;
498
- }, {
499
- key: string;
500
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
501
- baseUrl: string;
502
- thinking?: "enabled" | "disabled" | undefined;
503
- label?: string | undefined;
504
- apiKey?: string | undefined;
505
- protocol?: "openai-compat" | "anthropic-style" | undefined;
506
- modelsPath?: string | undefined;
507
- }>, "many">>;
508
- models: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodObject<{
509
- key: z.ZodString;
510
- label: z.ZodOptional<z.ZodString>;
511
- providerKey: z.ZodOptional<z.ZodString>;
512
- model: z.ZodString;
513
- maxOutputTokens: z.ZodOptional<z.ZodNumber>;
514
- maxContextTokens: z.ZodOptional<z.ZodNumber>;
515
- /**
516
- * Which LLM client to use ("openai" or "anthropic"). New name —
517
- * the legacy field is `provider`, which we still accept and
518
- * fold into `protocol` below so old configs keep working.
519
- * NOT the brand/vendor that's providerKey above.
520
- */
521
- protocol: z.ZodOptional<z.ZodString>;
522
- provider: z.ZodOptional<z.ZodString>;
523
- baseUrl: z.ZodOptional<z.ZodString>;
1075
+ providers: {
1076
+ id: string;
1077
+ kind: string;
1078
+ baseUrl: string;
1079
+ apiKey?: string | undefined;
1080
+ defaultModel?: string | undefined;
1081
+ catalogId?: string | undefined;
1082
+ apiKeyRef?: string | undefined;
1083
+ }[];
1084
+ defaultProvider?: string | undefined;
1085
+ }, {
1086
+ defaultProvider?: string | undefined;
1087
+ providers?: {
1088
+ id: string;
1089
+ kind: string;
1090
+ baseUrl: string;
1091
+ apiKey?: string | undefined;
1092
+ defaultModel?: string | undefined;
1093
+ catalogId?: string | undefined;
1094
+ apiKeyRef?: string | undefined;
1095
+ }[] | undefined;
1096
+ }>>;
1097
+ /**
1098
+ * Credentials — independent key entities (统一模型接入方案 §3.3). A key
1099
+ * lives here, not inlined on a connection, so deleting a connection never
1100
+ * loses a key and many connections share one key by referencing the same
1101
+ * credential id (LiteLLM credential_list model).
1102
+ */
1103
+ credentials: z.ZodDefault<z.ZodArray<z.ZodObject<{
1104
+ /** User-chosen unique credential name. */
1105
+ id: z.ZodString;
1106
+ /** Catalog template this credential is for (a key belongs to one provider). */
1107
+ catalogId: z.ZodString;
524
1108
  apiKey: z.ZodOptional<z.ZodString>;
525
- /**
526
- * Per-model thinking override. Wins over the provider-level
527
- * setting (settings.providers[].thinking). Use this when
528
- * different models under the same provider need different
529
- * defaults — e.g. DeepSeek V4 Pro off (faster) but V4 Flash on.
530
- */
531
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
1109
+ baseUrl: z.ZodOptional<z.ZodString>;
532
1110
  }, "strip", z.ZodTypeAny, {
533
- model: string;
534
- key: string;
535
- provider?: string | undefined;
536
- thinking?: "enabled" | "disabled" | undefined;
537
- label?: string | undefined;
1111
+ id: string;
1112
+ catalogId: string;
538
1113
  baseUrl?: string | undefined;
539
1114
  apiKey?: string | undefined;
540
- protocol?: string | undefined;
541
- providerKey?: string | undefined;
542
- maxOutputTokens?: number | undefined;
543
- maxContextTokens?: number | undefined;
544
1115
  }, {
545
- model: string;
546
- key: string;
547
- provider?: string | undefined;
548
- thinking?: "enabled" | "disabled" | undefined;
549
- label?: string | undefined;
1116
+ id: string;
1117
+ catalogId: string;
550
1118
  baseUrl?: string | undefined;
551
1119
  apiKey?: string | undefined;
552
- protocol?: string | undefined;
553
- providerKey?: string | undefined;
554
- maxOutputTokens?: number | undefined;
555
- maxContextTokens?: number | undefined;
556
- }>, {
557
- protocol: string | undefined;
558
- provider: string | undefined;
1120
+ }>, "many">>;
1121
+ /**
1122
+ * Unified instance layer (统一模型接入方案, see
1123
+ * docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.3).
1124
+ * One store for text/image/video connections, each pointing at a catalog
1125
+ * entry (catalogId), a credential (credentialId), its chosen model, and the
1126
+ * param values the user picked. Replaces the legacy split of
1127
+ * providers[]/models[]/imageGen/videoGen.
1128
+ */
1129
+ modelConnections: z.ZodDefault<z.ZodArray<z.ZodObject<{
1130
+ /** User-chosen unique instance name. */
1131
+ id: z.ZodString;
1132
+ /** Catalog template this instance was created from. */
1133
+ catalogId: z.ZodString;
1134
+ tag: z.ZodEnum<["text", "image", "video", "audio"]>;
1135
+ /** Selected modelId (from the entry's modelPresets). */
1136
+ model: z.ZodString;
1137
+ /** Per-connection baseUrl override (else the credential's / catalog's). */
1138
+ baseUrl: z.ZodOptional<z.ZodString>;
1139
+ /** Which credential supplies this connection's key. */
1140
+ credentialId: z.ZodOptional<z.ZodString>;
1141
+ /** Values the user picked for the model's params, e.g. { reasoning: "high" }. */
1142
+ paramValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1143
+ }, "strip", z.ZodTypeAny, {
1144
+ id: string;
559
1145
  model: string;
560
- key: string;
561
- thinking?: "enabled" | "disabled" | undefined;
562
- label?: string | undefined;
1146
+ catalogId: string;
1147
+ tag: "text" | "image" | "video" | "audio";
563
1148
  baseUrl?: string | undefined;
564
- apiKey?: string | undefined;
565
- providerKey?: string | undefined;
566
- maxOutputTokens?: number | undefined;
567
- maxContextTokens?: number | undefined;
1149
+ credentialId?: string | undefined;
1150
+ paramValues?: Record<string, unknown> | undefined;
568
1151
  }, {
1152
+ id: string;
569
1153
  model: string;
570
- key: string;
571
- provider?: string | undefined;
572
- thinking?: "enabled" | "disabled" | undefined;
573
- label?: string | undefined;
1154
+ catalogId: string;
1155
+ tag: "text" | "image" | "video" | "audio";
574
1156
  baseUrl?: string | undefined;
575
- apiKey?: string | undefined;
576
- protocol?: string | undefined;
577
- providerKey?: string | undefined;
578
- maxOutputTokens?: number | undefined;
579
- maxContextTokens?: number | undefined;
1157
+ credentialId?: string | undefined;
1158
+ paramValues?: Record<string, unknown> | undefined;
580
1159
  }>, "many">>;
1160
+ /** Default instance id per tag (replaces activeKey / defaultProvider). */
1161
+ defaults: z.ZodDefault<z.ZodObject<{
1162
+ text: z.ZodOptional<z.ZodString>;
1163
+ image: z.ZodOptional<z.ZodString>;
1164
+ video: z.ZodOptional<z.ZodString>;
1165
+ /** Default speech-to-text (voice input) connection. */
1166
+ audio: z.ZodOptional<z.ZodString>;
1167
+ /** Background-task model (replaces auxModelKey). */
1168
+ auxText: z.ZodOptional<z.ZodString>;
1169
+ }, "strip", z.ZodTypeAny, {
1170
+ text?: string | undefined;
1171
+ image?: string | undefined;
1172
+ video?: string | undefined;
1173
+ audio?: string | undefined;
1174
+ auxText?: string | undefined;
1175
+ }, {
1176
+ text?: string | undefined;
1177
+ image?: string | undefined;
1178
+ video?: string | undefined;
1179
+ audio?: string | undefined;
1180
+ auxText?: string | undefined;
1181
+ }>>;
581
1182
  permissions: z.ZodDefault<z.ZodObject<{
582
1183
  defaultMode: z.ZodDefault<z.ZodEnum<["default", "acceptEdits", "dontAsk", "bypassPermissions", "auto", "plan"]>>;
583
1184
  rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -597,7 +1198,7 @@ export declare const SettingsSchema: z.ZodObject<{
597
1198
  argsPattern?: Record<string, string> | undefined;
598
1199
  }>, "many">>;
599
1200
  }, "strip", z.ZodTypeAny, {
600
- defaultMode: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
1201
+ defaultMode: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan";
601
1202
  rules: {
602
1203
  tool: string;
603
1204
  decision: "allow" | "deny" | "ask";
@@ -605,7 +1206,7 @@ export declare const SettingsSchema: z.ZodObject<{
605
1206
  argsPattern?: Record<string, string> | undefined;
606
1207
  }[];
607
1208
  }, {
608
- defaultMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan" | undefined;
1209
+ defaultMode?: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan" | undefined;
609
1210
  rules?: {
610
1211
  tool: string;
611
1212
  decision: "allow" | "deny" | "ask";
@@ -617,14 +1218,17 @@ export declare const SettingsSchema: z.ZodObject<{
617
1218
  maxTokens: z.ZodDefault<z.ZodNumber>;
618
1219
  compactAtRatio: z.ZodDefault<z.ZodNumber>;
619
1220
  summarizeAtRatio: z.ZodDefault<z.ZodNumber>;
1221
+ microcompactFloorRatio: z.ZodDefault<z.ZodNumber>;
620
1222
  }, "strip", z.ZodTypeAny, {
621
1223
  maxTokens: number;
622
1224
  compactAtRatio: number;
623
1225
  summarizeAtRatio: number;
1226
+ microcompactFloorRatio: number;
624
1227
  }, {
625
1228
  maxTokens?: number | undefined;
626
1229
  compactAtRatio?: number | undefined;
627
1230
  summarizeAtRatio?: number | undefined;
1231
+ microcompactFloorRatio?: number | undefined;
628
1232
  }>>;
629
1233
  session: z.ZodDefault<z.ZodObject<{
630
1234
  storageDir: z.ZodOptional<z.ZodString>;
@@ -636,7 +1240,7 @@ export declare const SettingsSchema: z.ZodObject<{
636
1240
  storageDir?: string | undefined;
637
1241
  maxHistory?: number | undefined;
638
1242
  }>>;
639
- mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1243
+ mcpServers: z.ZodDefault<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
640
1244
  name: z.ZodString;
641
1245
  command: z.ZodOptional<z.ZodString>;
642
1246
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
@@ -644,22 +1248,76 @@ export declare const SettingsSchema: z.ZodObject<{
644
1248
  url: z.ZodOptional<z.ZodString>;
645
1249
  transport: z.ZodOptional<z.ZodEnum<["stdio", "sse", "streamable-http", "inprocess"]>>;
646
1250
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1251
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1252
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
1253
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1254
+ credentialRef: z.ZodOptional<z.ZodString>;
1255
+ enabled: z.ZodOptional<z.ZodBoolean>;
647
1256
  }, "strip", z.ZodTypeAny, {
648
1257
  name: string;
1258
+ enabled?: boolean | undefined;
649
1259
  url?: string | undefined;
650
1260
  args?: string[] | undefined;
651
- env?: Record<string, string> | undefined;
652
1261
  command?: string | undefined;
1262
+ env?: Record<string, string> | undefined;
653
1263
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
654
1264
  headers?: Record<string, string> | undefined;
1265
+ envVars?: string[] | undefined;
1266
+ bearerTokenEnvVar?: string | undefined;
1267
+ envHeaders?: Record<string, string> | undefined;
1268
+ credentialRef?: string | undefined;
655
1269
  }, {
656
1270
  name: string;
1271
+ enabled?: boolean | undefined;
657
1272
  url?: string | undefined;
658
1273
  args?: string[] | undefined;
1274
+ command?: string | undefined;
659
1275
  env?: Record<string, string> | undefined;
1276
+ transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
1277
+ headers?: Record<string, string> | undefined;
1278
+ envVars?: string[] | undefined;
1279
+ bearerTokenEnvVar?: string | undefined;
1280
+ envHeaders?: Record<string, string> | undefined;
1281
+ credentialRef?: string | undefined;
1282
+ }>>, Record<string, {
1283
+ name: string;
1284
+ enabled?: boolean | undefined;
1285
+ url?: string | undefined;
1286
+ args?: string[] | undefined;
660
1287
  command?: string | undefined;
1288
+ env?: Record<string, string> | undefined;
661
1289
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
662
1290
  headers?: Record<string, string> | undefined;
1291
+ envVars?: string[] | undefined;
1292
+ bearerTokenEnvVar?: string | undefined;
1293
+ envHeaders?: Record<string, string> | undefined;
1294
+ credentialRef?: string | undefined;
1295
+ }>, unknown>>;
1296
+ /**
1297
+ * User supplements for PLUGIN-provided MCP servers, keyed by the server's
1298
+ * `<plugin>:<server>` name. Layered onto the plugin config at merge time
1299
+ * (mergePluginMcpServers). Only env/credential fields are accepted —
1300
+ * command/args/url/transport are intentionally absent and `.strict()`
1301
+ * rejects them, so a plugin update is never shadowed by a stale copy.
1302
+ */
1303
+ mcpServerOverrides: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1304
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1305
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1306
+ credentialRef: z.ZodOptional<z.ZodString>;
1307
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
1308
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1309
+ }, "strict", z.ZodTypeAny, {
1310
+ env?: Record<string, string> | undefined;
1311
+ envVars?: string[] | undefined;
1312
+ bearerTokenEnvVar?: string | undefined;
1313
+ envHeaders?: Record<string, string> | undefined;
1314
+ credentialRef?: string | undefined;
1315
+ }, {
1316
+ env?: Record<string, string> | undefined;
1317
+ envVars?: string[] | undefined;
1318
+ bearerTokenEnvVar?: string | undefined;
1319
+ envHeaders?: Record<string, string> | undefined;
1320
+ credentialRef?: string | undefined;
663
1321
  }>>>;
664
1322
  /**
665
1323
  * Skill names hidden from the LLM. Names include the full
@@ -675,6 +1333,82 @@ export declare const SettingsSchema: z.ZodObject<{
675
1333
  * names (no colon suffix). See scanSkills(opts.disabledPlugins).
676
1334
  */
677
1335
  disabledPlugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1336
+ /**
1337
+ * Sub-agent role names (the `name` in .code-shell/agents/*.md) to
1338
+ * hide from the registry. A disabled role is filtered out at load
1339
+ * so it never appears in registry.list()/get() — the Agent tool's
1340
+ * agent_type list won't show it and the LLM can't pick it. Mirrors
1341
+ * disabledSkills / disabledPlugins.
1342
+ */
1343
+ disabledAgents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1344
+ /**
1345
+ * Project-scoped tri-state capability overlay. Only meaningful in
1346
+ * ${cwd}/.code-shell/settings.json; layered over the global baseline at
1347
+ * capability-assembly time. Optional — absence === everything inherits.
1348
+ */
1349
+ capabilityOverrides: z.ZodOptional<z.ZodObject<{
1350
+ skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1351
+ plugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1352
+ agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1353
+ mcp: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1354
+ builtin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1355
+ /**
1356
+ * Per-hook overlay for PLUGIN-provided hooks, keyed by
1357
+ * `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
1358
+ * than `plugins` (which kills a whole plugin): "off" suppresses one
1359
+ * hook for this project only. Only "off" is meaningful today — plugin
1360
+ * hooks have no global disable list to force back "on" from.
1361
+ */
1362
+ pluginHooks: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
1363
+ }, "strip", z.ZodTypeAny, {
1364
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
1365
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
1366
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
1367
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
1368
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
1369
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
1370
+ }, {
1371
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
1372
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
1373
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
1374
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
1375
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
1376
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
1377
+ }>>;
1378
+ /**
1379
+ * Feature flags overlay: a map of flag name → boolean that overrides the
1380
+ * compiled-in defaults (see settings/feature-flags.ts FEATURE_FLAGS).
1381
+ * Project settings override user settings via the normal merge, so a flag
1382
+ * can be flipped per-workspace. Unknown flag names are tolerated (kept as
1383
+ * data) for forward-compat; consumers only read known flags via
1384
+ * isFeatureEnabled(). Passthrough record — values coerced to boolean.
1385
+ */
1386
+ featureFlags: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
1387
+ /**
1388
+ * Cross-session memory knobs. Optional — absence keeps the built-in
1389
+ * defaults (see services/extract-memories.ts). `maxCount` caps memories
1390
+ * accepted per extraction pass; `maxAge`/`extractionModel` are reserved
1391
+ * for the consolidation/extraction pipeline.
1392
+ */
1393
+ memories: z.ZodOptional<z.ZodObject<{
1394
+ maxCount: z.ZodOptional<z.ZodNumber>;
1395
+ maxAge: z.ZodOptional<z.ZodNumber>;
1396
+ extractionModel: z.ZodOptional<z.ZodString>;
1397
+ /** Master switch for end-of-session automatic memory extraction.
1398
+ * Absent/true = extract (current behavior); false = skip extraction
1399
+ * while keeping session summaries and Dream untouched. */
1400
+ autoExtract: z.ZodOptional<z.ZodBoolean>;
1401
+ }, "strip", z.ZodTypeAny, {
1402
+ maxCount?: number | undefined;
1403
+ maxAge?: number | undefined;
1404
+ extractionModel?: string | undefined;
1405
+ autoExtract?: boolean | undefined;
1406
+ }, {
1407
+ maxCount?: number | undefined;
1408
+ maxAge?: number | undefined;
1409
+ extractionModel?: string | undefined;
1410
+ autoExtract?: boolean | undefined;
1411
+ }>>;
678
1412
  instructions: z.ZodDefault<z.ZodObject<{
679
1413
  fileName: z.ZodDefault<z.ZodString>;
680
1414
  scanDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -699,30 +1433,30 @@ export declare const SettingsSchema: z.ZodObject<{
699
1433
  apiKey: z.ZodOptional<z.ZodString>;
700
1434
  baseUrl: z.ZodOptional<z.ZodString>;
701
1435
  }, "strip", z.ZodTypeAny, {
702
- model: string;
703
1436
  name: string;
1437
+ model: string;
704
1438
  provider?: string | undefined;
705
1439
  baseUrl?: string | undefined;
706
1440
  apiKey?: string | undefined;
707
1441
  }, {
708
- model: string;
709
1442
  name: string;
1443
+ model: string;
710
1444
  provider?: string | undefined;
711
1445
  baseUrl?: string | undefined;
712
1446
  apiKey?: string | undefined;
713
1447
  }>]>, "many">>;
714
1448
  }, "strip", z.ZodTypeAny, {
715
1449
  participants: (string | {
716
- model: string;
717
1450
  name: string;
1451
+ model: string;
718
1452
  provider?: string | undefined;
719
1453
  baseUrl?: string | undefined;
720
1454
  apiKey?: string | undefined;
721
1455
  })[];
722
1456
  }, {
723
1457
  participants?: (string | {
724
- model: string;
725
1458
  name: string;
1459
+ model: string;
726
1460
  provider?: string | undefined;
727
1461
  baseUrl?: string | undefined;
728
1462
  apiKey?: string | undefined;
@@ -742,12 +1476,45 @@ export declare const SettingsSchema: z.ZodObject<{
742
1476
  providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["serper", "tavily", "searxng"]>, z.ZodObject<{
743
1477
  apiKey: z.ZodOptional<z.ZodString>;
744
1478
  baseUrl: z.ZodOptional<z.ZodString>;
1479
+ lastProbe: z.ZodOptional<z.ZodObject<{
1480
+ status: z.ZodEnum<["ok", "error", "unconfigured"]>;
1481
+ sampleTitles: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1482
+ errorMessage: z.ZodOptional<z.ZodString>;
1483
+ errorDetail: z.ZodOptional<z.ZodString>;
1484
+ lastProbedAt: z.ZodString;
1485
+ }, "strip", z.ZodTypeAny, {
1486
+ status: "error" | "ok" | "unconfigured";
1487
+ lastProbedAt: string;
1488
+ sampleTitles?: string[] | undefined;
1489
+ errorMessage?: string | undefined;
1490
+ errorDetail?: string | undefined;
1491
+ }, {
1492
+ status: "error" | "ok" | "unconfigured";
1493
+ lastProbedAt: string;
1494
+ sampleTitles?: string[] | undefined;
1495
+ errorMessage?: string | undefined;
1496
+ errorDetail?: string | undefined;
1497
+ }>>;
745
1498
  }, "strip", z.ZodTypeAny, {
746
1499
  baseUrl?: string | undefined;
747
1500
  apiKey?: string | undefined;
1501
+ lastProbe?: {
1502
+ status: "error" | "ok" | "unconfigured";
1503
+ lastProbedAt: string;
1504
+ sampleTitles?: string[] | undefined;
1505
+ errorMessage?: string | undefined;
1506
+ errorDetail?: string | undefined;
1507
+ } | undefined;
748
1508
  }, {
749
1509
  baseUrl?: string | undefined;
750
1510
  apiKey?: string | undefined;
1511
+ lastProbe?: {
1512
+ status: "error" | "ok" | "unconfigured";
1513
+ lastProbedAt: string;
1514
+ sampleTitles?: string[] | undefined;
1515
+ errorMessage?: string | undefined;
1516
+ errorDetail?: string | undefined;
1517
+ } | undefined;
751
1518
  }>>>;
752
1519
  }, "strip", z.ZodTypeAny, {
753
1520
  provider: "serper" | "tavily" | "searxng";
@@ -756,6 +1523,13 @@ export declare const SettingsSchema: z.ZodObject<{
756
1523
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
757
1524
  baseUrl?: string | undefined;
758
1525
  apiKey?: string | undefined;
1526
+ lastProbe?: {
1527
+ status: "error" | "ok" | "unconfigured";
1528
+ lastProbedAt: string;
1529
+ sampleTitles?: string[] | undefined;
1530
+ errorMessage?: string | undefined;
1531
+ errorDetail?: string | undefined;
1532
+ } | undefined;
759
1533
  }>> | undefined;
760
1534
  }, {
761
1535
  provider?: "serper" | "tavily" | "searxng" | undefined;
@@ -764,6 +1538,13 @@ export declare const SettingsSchema: z.ZodObject<{
764
1538
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
765
1539
  baseUrl?: string | undefined;
766
1540
  apiKey?: string | undefined;
1541
+ lastProbe?: {
1542
+ status: "error" | "ok" | "unconfigured";
1543
+ lastProbedAt: string;
1544
+ sampleTitles?: string[] | undefined;
1545
+ errorMessage?: string | undefined;
1546
+ errorDetail?: string | undefined;
1547
+ } | undefined;
767
1548
  }>> | undefined;
768
1549
  }>>;
769
1550
  output: z.ZodDefault<z.ZodObject<{
@@ -773,6 +1554,26 @@ export declare const SettingsSchema: z.ZodObject<{
773
1554
  }, {
774
1555
  format?: "text" | "json" | "jsonl" | "stream-json" | undefined;
775
1556
  }>>;
1557
+ /**
1558
+ * Image attachment handling. Sub-fields:
1559
+ * - detail: provider-agnostic image clarity. Drives the
1560
+ * renderer-side downscale (low→~1024 / standard→~1568 /
1561
+ * high→~2576 px long edge) so BOTH providers save tokens
1562
+ * before send. Legacy "original" is migrated to "high".
1563
+ * - mcpImageTokenBudget: per-turn cap on token cost of images
1564
+ * returned by MCP tools. Codex doesn't enforce this; CC uses
1565
+ * 25 000. Set to 0 to disable.
1566
+ */
1567
+ images: z.ZodOptional<z.ZodObject<{
1568
+ detail: z.ZodOptional<z.ZodEffects<z.ZodEnum<["low", "standard", "high"]>, "low" | "high" | "standard", unknown>>;
1569
+ mcpImageTokenBudget: z.ZodOptional<z.ZodNumber>;
1570
+ }, "strip", z.ZodTypeAny, {
1571
+ detail?: "low" | "high" | "standard" | undefined;
1572
+ mcpImageTokenBudget?: number | undefined;
1573
+ }, {
1574
+ detail?: unknown;
1575
+ mcpImageTokenBudget?: number | undefined;
1576
+ }>>;
776
1577
  /**
777
1578
  * OS-level sandbox for shell-tool execution. "auto" picks per platform:
778
1579
  * Seatbelt on macOS, bubblewrap on Linux when installed, otherwise off.
@@ -785,16 +1586,103 @@ export declare const SettingsSchema: z.ZodObject<{
785
1586
  deniedReads: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
786
1587
  network: z.ZodOptional<z.ZodEnum<["allow", "deny"]>>;
787
1588
  }, "strip", z.ZodTypeAny, {
788
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
1589
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
789
1590
  writableRoots?: string[] | undefined;
790
1591
  deniedReads?: string[] | undefined;
791
1592
  network?: "allow" | "deny" | undefined;
792
1593
  }, {
793
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
1594
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
794
1595
  writableRoots?: string[] | undefined;
795
1596
  deniedReads?: string[] | undefined;
796
1597
  network?: "allow" | "deny" | undefined;
797
1598
  }>>;
1599
+ /**
1600
+ * Top-level environment variables injected into tool subprocesses (the
1601
+ * Bash tool, background shells). Mirrors Claude Code's `env` field: a
1602
+ * KEY=VALUE map that can be set globally (~/.code-shell/settings.json) and
1603
+ * overridden per-project (.code-shell/settings.json). The canonical home
1604
+ * for API keys (e.g. OPENAI_API_KEY) that a skill's script reads — configure
1605
+ * once globally and every project's skills can use it.
1606
+ *
1607
+ * Precedence when merged into the spawn env (lowest → highest):
1608
+ * project localEnvironment.env → global env → project env
1609
+ * None of these is filtered through the deny regex (see mergeShellEnv):
1610
+ * they are values the user typed deliberately, a different trust class from
1611
+ * the host process.env passthrough the deny machinery guards against.
1612
+ */
1613
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1614
+ /**
1615
+ * Project-local environment profile. Mirrors Codex's local-environment
1616
+ * shape at the settings layer: setup/cleanup scripts can be customized per
1617
+ * platform, and env values are stored as KEY=VALUE pairs. Runtime wiring is
1618
+ * intentionally separate from the MCP server env model above.
1619
+ */
1620
+ localEnvironment: z.ZodOptional<z.ZodObject<{
1621
+ name: z.ZodOptional<z.ZodString>;
1622
+ setupScripts: z.ZodOptional<z.ZodObject<{
1623
+ default: z.ZodOptional<z.ZodString>;
1624
+ macos: z.ZodOptional<z.ZodString>;
1625
+ linux: z.ZodOptional<z.ZodString>;
1626
+ windows: z.ZodOptional<z.ZodString>;
1627
+ }, "strip", z.ZodTypeAny, {
1628
+ default?: string | undefined;
1629
+ linux?: string | undefined;
1630
+ macos?: string | undefined;
1631
+ windows?: string | undefined;
1632
+ }, {
1633
+ default?: string | undefined;
1634
+ linux?: string | undefined;
1635
+ macos?: string | undefined;
1636
+ windows?: string | undefined;
1637
+ }>>;
1638
+ cleanupScripts: z.ZodOptional<z.ZodObject<{
1639
+ default: z.ZodOptional<z.ZodString>;
1640
+ macos: z.ZodOptional<z.ZodString>;
1641
+ linux: z.ZodOptional<z.ZodString>;
1642
+ windows: z.ZodOptional<z.ZodString>;
1643
+ }, "strip", z.ZodTypeAny, {
1644
+ default?: string | undefined;
1645
+ linux?: string | undefined;
1646
+ macos?: string | undefined;
1647
+ windows?: string | undefined;
1648
+ }, {
1649
+ default?: string | undefined;
1650
+ linux?: string | undefined;
1651
+ macos?: string | undefined;
1652
+ windows?: string | undefined;
1653
+ }>>;
1654
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1655
+ }, "strip", z.ZodTypeAny, {
1656
+ name?: string | undefined;
1657
+ env?: Record<string, string> | undefined;
1658
+ setupScripts?: {
1659
+ default?: string | undefined;
1660
+ linux?: string | undefined;
1661
+ macos?: string | undefined;
1662
+ windows?: string | undefined;
1663
+ } | undefined;
1664
+ cleanupScripts?: {
1665
+ default?: string | undefined;
1666
+ linux?: string | undefined;
1667
+ macos?: string | undefined;
1668
+ windows?: string | undefined;
1669
+ } | undefined;
1670
+ }, {
1671
+ name?: string | undefined;
1672
+ env?: Record<string, string> | undefined;
1673
+ setupScripts?: {
1674
+ default?: string | undefined;
1675
+ linux?: string | undefined;
1676
+ macos?: string | undefined;
1677
+ windows?: string | undefined;
1678
+ } | undefined;
1679
+ cleanupScripts?: {
1680
+ default?: string | undefined;
1681
+ linux?: string | undefined;
1682
+ macos?: string | undefined;
1683
+ windows?: string | undefined;
1684
+ } | undefined;
1685
+ }>>;
798
1686
  /**
799
1687
  * Shell-hook configuration. Each entry binds a HookEventName to a
800
1688
  * shell command; the command receives ctx JSON on stdin and returns
@@ -811,19 +1699,99 @@ export declare const SettingsSchema: z.ZodObject<{
811
1699
  matcher: z.ZodOptional<z.ZodString>;
812
1700
  timeout_ms: z.ZodOptional<z.ZodNumber>;
813
1701
  cwd: z.ZodOptional<z.ZodString>;
1702
+ /** Soft off-switch: the entry stays in the file (and the UI) but
1703
+ * registerSettingsHooks skips it. Absent = enabled. */
1704
+ disabled: z.ZodOptional<z.ZodBoolean>;
814
1705
  }, "strip", z.ZodTypeAny, {
815
1706
  command: string;
816
1707
  event: string;
817
- cwd?: string | undefined;
1708
+ disabled?: boolean | undefined;
818
1709
  matcher?: string | undefined;
819
1710
  timeout_ms?: number | undefined;
1711
+ cwd?: string | undefined;
820
1712
  }, {
821
1713
  command: string;
822
1714
  event: string;
823
- cwd?: string | undefined;
1715
+ disabled?: boolean | undefined;
824
1716
  matcher?: string | undefined;
825
1717
  timeout_ms?: number | undefined;
1718
+ cwd?: string | undefined;
826
1719
  }>, "many">>;
1720
+ /**
1721
+ * External coding-agent orchestration (Claude Code / Codex CLI).
1722
+ * Used by the Mobile Web Remote to launch managed jobs. dangerousArgs
1723
+ * is config-provided (not hardcoded) so it tracks CLI flag changes;
1724
+ * project-default dangerous mode only applies inside trustedWorkspaces.
1725
+ */
1726
+ externalAgents: z.ZodOptional<z.ZodObject<{
1727
+ claudeCode: z.ZodOptional<z.ZodObject<{
1728
+ command: z.ZodOptional<z.ZodString>;
1729
+ defaultMode: z.ZodOptional<z.ZodEnum<["safe", "dangerous"]>>;
1730
+ dangerousArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1731
+ trustedWorkspaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1732
+ autoStartInTrustedWorkspaces: z.ZodOptional<z.ZodBoolean>;
1733
+ }, "strip", z.ZodTypeAny, {
1734
+ defaultMode?: "safe" | "dangerous" | undefined;
1735
+ command?: string | undefined;
1736
+ dangerousArgs?: string[] | undefined;
1737
+ trustedWorkspaces?: string[] | undefined;
1738
+ autoStartInTrustedWorkspaces?: boolean | undefined;
1739
+ }, {
1740
+ defaultMode?: "safe" | "dangerous" | undefined;
1741
+ command?: string | undefined;
1742
+ dangerousArgs?: string[] | undefined;
1743
+ trustedWorkspaces?: string[] | undefined;
1744
+ autoStartInTrustedWorkspaces?: boolean | undefined;
1745
+ }>>;
1746
+ codex: z.ZodOptional<z.ZodObject<{
1747
+ command: z.ZodOptional<z.ZodString>;
1748
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1749
+ }, "strip", z.ZodTypeAny, {
1750
+ args?: string[] | undefined;
1751
+ command?: string | undefined;
1752
+ }, {
1753
+ args?: string[] | undefined;
1754
+ command?: string | undefined;
1755
+ }>>;
1756
+ }, "strip", z.ZodTypeAny, {
1757
+ claudeCode?: {
1758
+ defaultMode?: "safe" | "dangerous" | undefined;
1759
+ command?: string | undefined;
1760
+ dangerousArgs?: string[] | undefined;
1761
+ trustedWorkspaces?: string[] | undefined;
1762
+ autoStartInTrustedWorkspaces?: boolean | undefined;
1763
+ } | undefined;
1764
+ codex?: {
1765
+ args?: string[] | undefined;
1766
+ command?: string | undefined;
1767
+ } | undefined;
1768
+ }, {
1769
+ claudeCode?: {
1770
+ defaultMode?: "safe" | "dangerous" | undefined;
1771
+ command?: string | undefined;
1772
+ dangerousArgs?: string[] | undefined;
1773
+ trustedWorkspaces?: string[] | undefined;
1774
+ autoStartInTrustedWorkspaces?: boolean | undefined;
1775
+ } | undefined;
1776
+ codex?: {
1777
+ args?: string[] | undefined;
1778
+ command?: string | undefined;
1779
+ } | undefined;
1780
+ }>>;
1781
+ /**
1782
+ * Credential-use gate (凭证模块第二期). Controls whether the AI's
1783
+ * `UseCredential` tool prompts before handing a stored credential to a
1784
+ * command. `autoApprove: true` skips the prompt entirely (默认关 — every
1785
+ * use asks, or is remembered for the session). See
1786
+ * docs/superpowers/specs/2026-06-16-credential-use-gate-design.md §5.
1787
+ */
1788
+ credentialUse: z.ZodOptional<z.ZodObject<{
1789
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
1790
+ }, "strip", z.ZodTypeAny, {
1791
+ autoApprove?: boolean | undefined;
1792
+ }, {
1793
+ autoApprove?: boolean | undefined;
1794
+ }>>;
827
1795
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
828
1796
  agent: z.ZodDefault<z.ZodObject<{
829
1797
  preset: z.ZodDefault<z.ZodString>;
@@ -831,27 +1799,43 @@ export declare const SettingsSchema: z.ZodObject<{
831
1799
  disabledBuiltinTools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
832
1800
  customSystemPrompt: z.ZodOptional<z.ZodString>;
833
1801
  appendSystemPrompt: z.ZodOptional<z.ZodString>;
1802
+ responseLanguage: z.ZodOptional<z.ZodString>;
1803
+ userProfile: z.ZodOptional<z.ZodString>;
1804
+ instructions: z.ZodOptional<z.ZodObject<{
1805
+ compatClaude: z.ZodDefault<z.ZodBoolean>;
1806
+ compatCodex: z.ZodDefault<z.ZodBoolean>;
1807
+ }, "strip", z.ZodTypeAny, {
1808
+ compatClaude: boolean;
1809
+ compatCodex: boolean;
1810
+ }, {
1811
+ compatClaude?: boolean | undefined;
1812
+ compatCodex?: boolean | undefined;
1813
+ }>>;
834
1814
  }, "strip", z.ZodTypeAny, {
835
1815
  preset: string;
836
1816
  enabledBuiltinTools: string[];
837
1817
  disabledBuiltinTools: string[];
838
1818
  customSystemPrompt?: string | undefined;
839
1819
  appendSystemPrompt?: string | undefined;
1820
+ responseLanguage?: string | undefined;
1821
+ userProfile?: string | undefined;
1822
+ instructions?: {
1823
+ compatClaude: boolean;
1824
+ compatCodex: boolean;
1825
+ } | undefined;
840
1826
  }, {
841
1827
  preset?: string | undefined;
842
1828
  enabledBuiltinTools?: string[] | undefined;
843
1829
  disabledBuiltinTools?: string[] | undefined;
844
1830
  customSystemPrompt?: string | undefined;
845
1831
  appendSystemPrompt?: string | undefined;
1832
+ responseLanguage?: string | undefined;
1833
+ userProfile?: string | undefined;
1834
+ instructions?: {
1835
+ compatClaude?: boolean | undefined;
1836
+ compatCodex?: boolean | undefined;
1837
+ } | undefined;
846
1838
  }>>;
847
- /**
848
- * Primary source of truth for the active model is settings.activeKey
849
- * (points at models[].key). settings.model is a derived mirror of that
850
- * entry kept in sync for legacy boot paths (cli/main.ts, repl.ts, etc.)
851
- * which read provider/name/apiKey/baseUrl directly. Writers must update
852
- * both — appendOnboardingResult does this in one shot.
853
- */
854
- activeKey: z.ZodOptional<z.ZodString>;
855
1839
  /**
856
1840
  * Toggle background auto-update. When true (default), code-shell checks
857
1841
  * npm for newer versions and — if the npm global prefix is writable —
@@ -860,135 +1844,215 @@ export declare const SettingsSchema: z.ZodObject<{
860
1844
  * Can also be disabled via env var `DISABLE_AUTOUPDATER=1`.
861
1845
  */
862
1846
  autoUpdates: z.ZodDefault<z.ZodBoolean>;
863
- model: z.ZodDefault<z.ZodObject<{
864
- provider: z.ZodDefault<z.ZodString>;
865
- name: z.ZodDefault<z.ZodString>;
866
- apiKey: z.ZodOptional<z.ZodString>;
867
- baseUrl: z.ZodDefault<z.ZodString>;
868
- temperature: z.ZodDefault<z.ZodNumber>;
869
- maxTokens: z.ZodDefault<z.ZodNumber>;
1847
+ /**
1848
+ * Image generation is a general capability, decoupled from LLM providers
1849
+ * (TODO 7.1): a vendor may use different keys/endpoints/models for chat vs
1850
+ * image, and image vendors (Gemini, and later 国内 模型) don't fit the LLM
1851
+ * `providers[].kind` enum. `imageGen.providers[]` is the canonical config;
1852
+ * each entry has a user-chosen `id` (selected via GenerateImage's
1853
+ * `provider` arg) and a `kind` that picks the adapter. When `imageGen` is
1854
+ * absent, resolution falls back to scanning LLM `providers[]` for an
1855
+ * image-capable kind — so existing configs keep working with no migration.
1856
+ */
1857
+ imageGen: z.ZodOptional<z.ZodObject<{
1858
+ defaultProvider: z.ZodOptional<z.ZodString>;
1859
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
1860
+ /** User-chosen instance name; GenerateImage(provider) selects by this. */
1861
+ id: z.ZodString;
1862
+ /** Adapter selector — e.g. "openai", "google". */
1863
+ kind: z.ZodString;
1864
+ baseUrl: z.ZodString;
1865
+ apiKey: z.ZodOptional<z.ZodString>;
1866
+ /** Default model for this instance when the call omits `model`. */
1867
+ defaultModel: z.ZodOptional<z.ZodString>;
1868
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
1869
+ catalogId: z.ZodOptional<z.ZodString>;
1870
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
1871
+ apiKeyRef: z.ZodOptional<z.ZodString>;
1872
+ }, "strip", z.ZodTypeAny, {
1873
+ id: string;
1874
+ kind: string;
1875
+ baseUrl: string;
1876
+ apiKey?: string | undefined;
1877
+ defaultModel?: string | undefined;
1878
+ catalogId?: string | undefined;
1879
+ apiKeyRef?: string | undefined;
1880
+ }, {
1881
+ id: string;
1882
+ kind: string;
1883
+ baseUrl: string;
1884
+ apiKey?: string | undefined;
1885
+ defaultModel?: string | undefined;
1886
+ catalogId?: string | undefined;
1887
+ apiKeyRef?: string | undefined;
1888
+ }>, "many">>;
870
1889
  }, "strip", z.ZodTypeAny, {
871
- provider: string;
872
- name: string;
873
- temperature: number;
874
- baseUrl: string;
875
- maxTokens: number;
876
- apiKey?: string | undefined;
1890
+ providers: {
1891
+ id: string;
1892
+ kind: string;
1893
+ baseUrl: string;
1894
+ apiKey?: string | undefined;
1895
+ defaultModel?: string | undefined;
1896
+ catalogId?: string | undefined;
1897
+ apiKeyRef?: string | undefined;
1898
+ }[];
1899
+ defaultProvider?: string | undefined;
877
1900
  }, {
878
- provider?: string | undefined;
879
- name?: string | undefined;
880
- temperature?: number | undefined;
881
- baseUrl?: string | undefined;
882
- apiKey?: string | undefined;
883
- maxTokens?: number | undefined;
1901
+ defaultProvider?: string | undefined;
1902
+ providers?: {
1903
+ id: string;
1904
+ kind: string;
1905
+ baseUrl: string;
1906
+ apiKey?: string | undefined;
1907
+ defaultModel?: string | undefined;
1908
+ catalogId?: string | undefined;
1909
+ apiKeyRef?: string | undefined;
1910
+ }[] | undefined;
884
1911
  }>>;
885
- providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
886
- key: z.ZodString;
887
- label: z.ZodOptional<z.ZodString>;
888
- kind: z.ZodEnum<["openai", "anthropic", "deepseek", "zai", "xai", "mistral", "groq", "google", "openrouter", "ollama", "custom"]>;
889
- baseUrl: z.ZodString;
890
- apiKey: z.ZodOptional<z.ZodString>;
891
- protocol: z.ZodOptional<z.ZodEnum<["openai-compat", "anthropic-style"]>>;
892
- modelsPath: z.ZodOptional<z.ZodString>;
893
- /**
894
- * DeepSeek V4 thinking-mode default for this provider. "enabled"
895
- * matches endpoint default; "disabled" makes V4 calls run in
896
- * non-thinking mode (faster, cheaper). Ignored by every provider
897
- * other than DeepSeek V4. Per-call overrides still win.
898
- */
899
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
1912
+ /**
1913
+ * Video generation config (TODO 7.1) — same shape as imageGen, decoupled
1914
+ * from LLM providers. `videoGen.providers[]` each carry an `id` (selected
1915
+ * via GenerateVideo's `provider` arg) + a `kind` picking the adapter. With
1916
+ * no real adapters wired yet, this is config-ready: a future getVideoProvider
1917
+ * case lights it up. Falls back to scanning LLM providers[] when absent.
1918
+ */
1919
+ videoGen: z.ZodOptional<z.ZodObject<{
1920
+ defaultProvider: z.ZodOptional<z.ZodString>;
1921
+ providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
1922
+ id: z.ZodString;
1923
+ kind: z.ZodString;
1924
+ baseUrl: z.ZodString;
1925
+ apiKey: z.ZodOptional<z.ZodString>;
1926
+ defaultModel: z.ZodOptional<z.ZodString>;
1927
+ /** Catalog template this instance was created from (for paramsDoc / displayName回显). */
1928
+ catalogId: z.ZodOptional<z.ZodString>;
1929
+ /** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
1930
+ apiKeyRef: z.ZodOptional<z.ZodString>;
1931
+ }, "strip", z.ZodTypeAny, {
1932
+ id: string;
1933
+ kind: string;
1934
+ baseUrl: string;
1935
+ apiKey?: string | undefined;
1936
+ defaultModel?: string | undefined;
1937
+ catalogId?: string | undefined;
1938
+ apiKeyRef?: string | undefined;
1939
+ }, {
1940
+ id: string;
1941
+ kind: string;
1942
+ baseUrl: string;
1943
+ apiKey?: string | undefined;
1944
+ defaultModel?: string | undefined;
1945
+ catalogId?: string | undefined;
1946
+ apiKeyRef?: string | undefined;
1947
+ }>, "many">>;
900
1948
  }, "strip", z.ZodTypeAny, {
901
- key: string;
902
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
903
- baseUrl: string;
904
- thinking?: "enabled" | "disabled" | undefined;
905
- label?: string | undefined;
906
- apiKey?: string | undefined;
907
- protocol?: "openai-compat" | "anthropic-style" | undefined;
908
- modelsPath?: string | undefined;
909
- }, {
910
- key: string;
911
- kind: "anthropic" | "openai" | "deepseek" | "zai" | "xai" | "mistral" | "groq" | "google" | "openrouter" | "ollama" | "custom";
912
- baseUrl: string;
913
- thinking?: "enabled" | "disabled" | undefined;
914
- label?: string | undefined;
915
- apiKey?: string | undefined;
916
- protocol?: "openai-compat" | "anthropic-style" | undefined;
917
- modelsPath?: string | undefined;
918
- }>, "many">>;
919
- models: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodObject<{
920
- key: z.ZodString;
921
- label: z.ZodOptional<z.ZodString>;
922
- providerKey: z.ZodOptional<z.ZodString>;
923
- model: z.ZodString;
924
- maxOutputTokens: z.ZodOptional<z.ZodNumber>;
925
- maxContextTokens: z.ZodOptional<z.ZodNumber>;
926
- /**
927
- * Which LLM client to use ("openai" or "anthropic"). New name —
928
- * the legacy field is `provider`, which we still accept and
929
- * fold into `protocol` below so old configs keep working.
930
- * NOT the brand/vendor that's providerKey above.
931
- */
932
- protocol: z.ZodOptional<z.ZodString>;
933
- provider: z.ZodOptional<z.ZodString>;
934
- baseUrl: z.ZodOptional<z.ZodString>;
1949
+ providers: {
1950
+ id: string;
1951
+ kind: string;
1952
+ baseUrl: string;
1953
+ apiKey?: string | undefined;
1954
+ defaultModel?: string | undefined;
1955
+ catalogId?: string | undefined;
1956
+ apiKeyRef?: string | undefined;
1957
+ }[];
1958
+ defaultProvider?: string | undefined;
1959
+ }, {
1960
+ defaultProvider?: string | undefined;
1961
+ providers?: {
1962
+ id: string;
1963
+ kind: string;
1964
+ baseUrl: string;
1965
+ apiKey?: string | undefined;
1966
+ defaultModel?: string | undefined;
1967
+ catalogId?: string | undefined;
1968
+ apiKeyRef?: string | undefined;
1969
+ }[] | undefined;
1970
+ }>>;
1971
+ /**
1972
+ * Credentials — independent key entities (统一模型接入方案 §3.3). A key
1973
+ * lives here, not inlined on a connection, so deleting a connection never
1974
+ * loses a key and many connections share one key by referencing the same
1975
+ * credential id (LiteLLM credential_list model).
1976
+ */
1977
+ credentials: z.ZodDefault<z.ZodArray<z.ZodObject<{
1978
+ /** User-chosen unique credential name. */
1979
+ id: z.ZodString;
1980
+ /** Catalog template this credential is for (a key belongs to one provider). */
1981
+ catalogId: z.ZodString;
935
1982
  apiKey: z.ZodOptional<z.ZodString>;
936
- /**
937
- * Per-model thinking override. Wins over the provider-level
938
- * setting (settings.providers[].thinking). Use this when
939
- * different models under the same provider need different
940
- * defaults — e.g. DeepSeek V4 Pro off (faster) but V4 Flash on.
941
- */
942
- thinking: z.ZodOptional<z.ZodEnum<["enabled", "disabled"]>>;
1983
+ baseUrl: z.ZodOptional<z.ZodString>;
943
1984
  }, "strip", z.ZodTypeAny, {
944
- model: string;
945
- key: string;
946
- provider?: string | undefined;
947
- thinking?: "enabled" | "disabled" | undefined;
948
- label?: string | undefined;
1985
+ id: string;
1986
+ catalogId: string;
949
1987
  baseUrl?: string | undefined;
950
1988
  apiKey?: string | undefined;
951
- protocol?: string | undefined;
952
- providerKey?: string | undefined;
953
- maxOutputTokens?: number | undefined;
954
- maxContextTokens?: number | undefined;
955
1989
  }, {
956
- model: string;
957
- key: string;
958
- provider?: string | undefined;
959
- thinking?: "enabled" | "disabled" | undefined;
960
- label?: string | undefined;
1990
+ id: string;
1991
+ catalogId: string;
961
1992
  baseUrl?: string | undefined;
962
1993
  apiKey?: string | undefined;
963
- protocol?: string | undefined;
964
- providerKey?: string | undefined;
965
- maxOutputTokens?: number | undefined;
966
- maxContextTokens?: number | undefined;
967
- }>, {
968
- protocol: string | undefined;
969
- provider: string | undefined;
1994
+ }>, "many">>;
1995
+ /**
1996
+ * Unified instance layer (统一模型接入方案, see
1997
+ * docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.3).
1998
+ * One store for text/image/video connections, each pointing at a catalog
1999
+ * entry (catalogId), a credential (credentialId), its chosen model, and the
2000
+ * param values the user picked. Replaces the legacy split of
2001
+ * providers[]/models[]/imageGen/videoGen.
2002
+ */
2003
+ modelConnections: z.ZodDefault<z.ZodArray<z.ZodObject<{
2004
+ /** User-chosen unique instance name. */
2005
+ id: z.ZodString;
2006
+ /** Catalog template this instance was created from. */
2007
+ catalogId: z.ZodString;
2008
+ tag: z.ZodEnum<["text", "image", "video", "audio"]>;
2009
+ /** Selected modelId (from the entry's modelPresets). */
2010
+ model: z.ZodString;
2011
+ /** Per-connection baseUrl override (else the credential's / catalog's). */
2012
+ baseUrl: z.ZodOptional<z.ZodString>;
2013
+ /** Which credential supplies this connection's key. */
2014
+ credentialId: z.ZodOptional<z.ZodString>;
2015
+ /** Values the user picked for the model's params, e.g. { reasoning: "high" }. */
2016
+ paramValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2017
+ }, "strip", z.ZodTypeAny, {
2018
+ id: string;
970
2019
  model: string;
971
- key: string;
972
- thinking?: "enabled" | "disabled" | undefined;
973
- label?: string | undefined;
2020
+ catalogId: string;
2021
+ tag: "text" | "image" | "video" | "audio";
974
2022
  baseUrl?: string | undefined;
975
- apiKey?: string | undefined;
976
- providerKey?: string | undefined;
977
- maxOutputTokens?: number | undefined;
978
- maxContextTokens?: number | undefined;
2023
+ credentialId?: string | undefined;
2024
+ paramValues?: Record<string, unknown> | undefined;
979
2025
  }, {
2026
+ id: string;
980
2027
  model: string;
981
- key: string;
982
- provider?: string | undefined;
983
- thinking?: "enabled" | "disabled" | undefined;
984
- label?: string | undefined;
2028
+ catalogId: string;
2029
+ tag: "text" | "image" | "video" | "audio";
985
2030
  baseUrl?: string | undefined;
986
- apiKey?: string | undefined;
987
- protocol?: string | undefined;
988
- providerKey?: string | undefined;
989
- maxOutputTokens?: number | undefined;
990
- maxContextTokens?: number | undefined;
2031
+ credentialId?: string | undefined;
2032
+ paramValues?: Record<string, unknown> | undefined;
991
2033
  }>, "many">>;
2034
+ /** Default instance id per tag (replaces activeKey / defaultProvider). */
2035
+ defaults: z.ZodDefault<z.ZodObject<{
2036
+ text: z.ZodOptional<z.ZodString>;
2037
+ image: z.ZodOptional<z.ZodString>;
2038
+ video: z.ZodOptional<z.ZodString>;
2039
+ /** Default speech-to-text (voice input) connection. */
2040
+ audio: z.ZodOptional<z.ZodString>;
2041
+ /** Background-task model (replaces auxModelKey). */
2042
+ auxText: z.ZodOptional<z.ZodString>;
2043
+ }, "strip", z.ZodTypeAny, {
2044
+ text?: string | undefined;
2045
+ image?: string | undefined;
2046
+ video?: string | undefined;
2047
+ audio?: string | undefined;
2048
+ auxText?: string | undefined;
2049
+ }, {
2050
+ text?: string | undefined;
2051
+ image?: string | undefined;
2052
+ video?: string | undefined;
2053
+ audio?: string | undefined;
2054
+ auxText?: string | undefined;
2055
+ }>>;
992
2056
  permissions: z.ZodDefault<z.ZodObject<{
993
2057
  defaultMode: z.ZodDefault<z.ZodEnum<["default", "acceptEdits", "dontAsk", "bypassPermissions", "auto", "plan"]>>;
994
2058
  rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -1008,7 +2072,7 @@ export declare const SettingsSchema: z.ZodObject<{
1008
2072
  argsPattern?: Record<string, string> | undefined;
1009
2073
  }>, "many">>;
1010
2074
  }, "strip", z.ZodTypeAny, {
1011
- defaultMode: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
2075
+ defaultMode: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan";
1012
2076
  rules: {
1013
2077
  tool: string;
1014
2078
  decision: "allow" | "deny" | "ask";
@@ -1016,7 +2080,7 @@ export declare const SettingsSchema: z.ZodObject<{
1016
2080
  argsPattern?: Record<string, string> | undefined;
1017
2081
  }[];
1018
2082
  }, {
1019
- defaultMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan" | undefined;
2083
+ defaultMode?: "auto" | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan" | undefined;
1020
2084
  rules?: {
1021
2085
  tool: string;
1022
2086
  decision: "allow" | "deny" | "ask";
@@ -1028,14 +2092,17 @@ export declare const SettingsSchema: z.ZodObject<{
1028
2092
  maxTokens: z.ZodDefault<z.ZodNumber>;
1029
2093
  compactAtRatio: z.ZodDefault<z.ZodNumber>;
1030
2094
  summarizeAtRatio: z.ZodDefault<z.ZodNumber>;
2095
+ microcompactFloorRatio: z.ZodDefault<z.ZodNumber>;
1031
2096
  }, "strip", z.ZodTypeAny, {
1032
2097
  maxTokens: number;
1033
2098
  compactAtRatio: number;
1034
2099
  summarizeAtRatio: number;
2100
+ microcompactFloorRatio: number;
1035
2101
  }, {
1036
2102
  maxTokens?: number | undefined;
1037
2103
  compactAtRatio?: number | undefined;
1038
2104
  summarizeAtRatio?: number | undefined;
2105
+ microcompactFloorRatio?: number | undefined;
1039
2106
  }>>;
1040
2107
  session: z.ZodDefault<z.ZodObject<{
1041
2108
  storageDir: z.ZodOptional<z.ZodString>;
@@ -1047,7 +2114,7 @@ export declare const SettingsSchema: z.ZodObject<{
1047
2114
  storageDir?: string | undefined;
1048
2115
  maxHistory?: number | undefined;
1049
2116
  }>>;
1050
- mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2117
+ mcpServers: z.ZodDefault<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
1051
2118
  name: z.ZodString;
1052
2119
  command: z.ZodOptional<z.ZodString>;
1053
2120
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
@@ -1055,22 +2122,76 @@ export declare const SettingsSchema: z.ZodObject<{
1055
2122
  url: z.ZodOptional<z.ZodString>;
1056
2123
  transport: z.ZodOptional<z.ZodEnum<["stdio", "sse", "streamable-http", "inprocess"]>>;
1057
2124
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2125
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2126
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
2127
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2128
+ credentialRef: z.ZodOptional<z.ZodString>;
2129
+ enabled: z.ZodOptional<z.ZodBoolean>;
1058
2130
  }, "strip", z.ZodTypeAny, {
1059
2131
  name: string;
2132
+ enabled?: boolean | undefined;
1060
2133
  url?: string | undefined;
1061
2134
  args?: string[] | undefined;
1062
- env?: Record<string, string> | undefined;
1063
2135
  command?: string | undefined;
2136
+ env?: Record<string, string> | undefined;
1064
2137
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
1065
2138
  headers?: Record<string, string> | undefined;
2139
+ envVars?: string[] | undefined;
2140
+ bearerTokenEnvVar?: string | undefined;
2141
+ envHeaders?: Record<string, string> | undefined;
2142
+ credentialRef?: string | undefined;
1066
2143
  }, {
1067
2144
  name: string;
2145
+ enabled?: boolean | undefined;
1068
2146
  url?: string | undefined;
1069
2147
  args?: string[] | undefined;
2148
+ command?: string | undefined;
1070
2149
  env?: Record<string, string> | undefined;
2150
+ transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
2151
+ headers?: Record<string, string> | undefined;
2152
+ envVars?: string[] | undefined;
2153
+ bearerTokenEnvVar?: string | undefined;
2154
+ envHeaders?: Record<string, string> | undefined;
2155
+ credentialRef?: string | undefined;
2156
+ }>>, Record<string, {
2157
+ name: string;
2158
+ enabled?: boolean | undefined;
2159
+ url?: string | undefined;
2160
+ args?: string[] | undefined;
1071
2161
  command?: string | undefined;
2162
+ env?: Record<string, string> | undefined;
1072
2163
  transport?: "stdio" | "sse" | "streamable-http" | "inprocess" | undefined;
1073
2164
  headers?: Record<string, string> | undefined;
2165
+ envVars?: string[] | undefined;
2166
+ bearerTokenEnvVar?: string | undefined;
2167
+ envHeaders?: Record<string, string> | undefined;
2168
+ credentialRef?: string | undefined;
2169
+ }>, unknown>>;
2170
+ /**
2171
+ * User supplements for PLUGIN-provided MCP servers, keyed by the server's
2172
+ * `<plugin>:<server>` name. Layered onto the plugin config at merge time
2173
+ * (mergePluginMcpServers). Only env/credential fields are accepted —
2174
+ * command/args/url/transport are intentionally absent and `.strict()`
2175
+ * rejects them, so a plugin update is never shadowed by a stale copy.
2176
+ */
2177
+ mcpServerOverrides: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2178
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2179
+ envVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2180
+ credentialRef: z.ZodOptional<z.ZodString>;
2181
+ bearerTokenEnvVar: z.ZodOptional<z.ZodString>;
2182
+ envHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2183
+ }, "strict", z.ZodTypeAny, {
2184
+ env?: Record<string, string> | undefined;
2185
+ envVars?: string[] | undefined;
2186
+ bearerTokenEnvVar?: string | undefined;
2187
+ envHeaders?: Record<string, string> | undefined;
2188
+ credentialRef?: string | undefined;
2189
+ }, {
2190
+ env?: Record<string, string> | undefined;
2191
+ envVars?: string[] | undefined;
2192
+ bearerTokenEnvVar?: string | undefined;
2193
+ envHeaders?: Record<string, string> | undefined;
2194
+ credentialRef?: string | undefined;
1074
2195
  }>>>;
1075
2196
  /**
1076
2197
  * Skill names hidden from the LLM. Names include the full
@@ -1086,6 +2207,82 @@ export declare const SettingsSchema: z.ZodObject<{
1086
2207
  * names (no colon suffix). See scanSkills(opts.disabledPlugins).
1087
2208
  */
1088
2209
  disabledPlugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2210
+ /**
2211
+ * Sub-agent role names (the `name` in .code-shell/agents/*.md) to
2212
+ * hide from the registry. A disabled role is filtered out at load
2213
+ * so it never appears in registry.list()/get() — the Agent tool's
2214
+ * agent_type list won't show it and the LLM can't pick it. Mirrors
2215
+ * disabledSkills / disabledPlugins.
2216
+ */
2217
+ disabledAgents: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2218
+ /**
2219
+ * Project-scoped tri-state capability overlay. Only meaningful in
2220
+ * ${cwd}/.code-shell/settings.json; layered over the global baseline at
2221
+ * capability-assembly time. Optional — absence === everything inherits.
2222
+ */
2223
+ capabilityOverrides: z.ZodOptional<z.ZodObject<{
2224
+ skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2225
+ plugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2226
+ agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2227
+ mcp: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2228
+ builtin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2229
+ /**
2230
+ * Per-hook overlay for PLUGIN-provided hooks, keyed by
2231
+ * `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
2232
+ * than `plugins` (which kills a whole plugin): "off" suppresses one
2233
+ * hook for this project only. Only "off" is meaningful today — plugin
2234
+ * hooks have no global disable list to force back "on" from.
2235
+ */
2236
+ pluginHooks: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["inherit", "on", "off"]>>>;
2237
+ }, "strip", z.ZodTypeAny, {
2238
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
2239
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
2240
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
2241
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
2242
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
2243
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
2244
+ }, {
2245
+ builtin?: Record<string, "off" | "on" | "inherit"> | undefined;
2246
+ mcp?: Record<string, "off" | "on" | "inherit"> | undefined;
2247
+ skills?: Record<string, "off" | "on" | "inherit"> | undefined;
2248
+ plugins?: Record<string, "off" | "on" | "inherit"> | undefined;
2249
+ agents?: Record<string, "off" | "on" | "inherit"> | undefined;
2250
+ pluginHooks?: Record<string, "off" | "on" | "inherit"> | undefined;
2251
+ }>>;
2252
+ /**
2253
+ * Feature flags overlay: a map of flag name → boolean that overrides the
2254
+ * compiled-in defaults (see settings/feature-flags.ts FEATURE_FLAGS).
2255
+ * Project settings override user settings via the normal merge, so a flag
2256
+ * can be flipped per-workspace. Unknown flag names are tolerated (kept as
2257
+ * data) for forward-compat; consumers only read known flags via
2258
+ * isFeatureEnabled(). Passthrough record — values coerced to boolean.
2259
+ */
2260
+ featureFlags: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
2261
+ /**
2262
+ * Cross-session memory knobs. Optional — absence keeps the built-in
2263
+ * defaults (see services/extract-memories.ts). `maxCount` caps memories
2264
+ * accepted per extraction pass; `maxAge`/`extractionModel` are reserved
2265
+ * for the consolidation/extraction pipeline.
2266
+ */
2267
+ memories: z.ZodOptional<z.ZodObject<{
2268
+ maxCount: z.ZodOptional<z.ZodNumber>;
2269
+ maxAge: z.ZodOptional<z.ZodNumber>;
2270
+ extractionModel: z.ZodOptional<z.ZodString>;
2271
+ /** Master switch for end-of-session automatic memory extraction.
2272
+ * Absent/true = extract (current behavior); false = skip extraction
2273
+ * while keeping session summaries and Dream untouched. */
2274
+ autoExtract: z.ZodOptional<z.ZodBoolean>;
2275
+ }, "strip", z.ZodTypeAny, {
2276
+ maxCount?: number | undefined;
2277
+ maxAge?: number | undefined;
2278
+ extractionModel?: string | undefined;
2279
+ autoExtract?: boolean | undefined;
2280
+ }, {
2281
+ maxCount?: number | undefined;
2282
+ maxAge?: number | undefined;
2283
+ extractionModel?: string | undefined;
2284
+ autoExtract?: boolean | undefined;
2285
+ }>>;
1089
2286
  instructions: z.ZodDefault<z.ZodObject<{
1090
2287
  fileName: z.ZodDefault<z.ZodString>;
1091
2288
  scanDirs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -1110,30 +2307,30 @@ export declare const SettingsSchema: z.ZodObject<{
1110
2307
  apiKey: z.ZodOptional<z.ZodString>;
1111
2308
  baseUrl: z.ZodOptional<z.ZodString>;
1112
2309
  }, "strip", z.ZodTypeAny, {
1113
- model: string;
1114
2310
  name: string;
2311
+ model: string;
1115
2312
  provider?: string | undefined;
1116
2313
  baseUrl?: string | undefined;
1117
2314
  apiKey?: string | undefined;
1118
2315
  }, {
1119
- model: string;
1120
2316
  name: string;
2317
+ model: string;
1121
2318
  provider?: string | undefined;
1122
2319
  baseUrl?: string | undefined;
1123
2320
  apiKey?: string | undefined;
1124
2321
  }>]>, "many">>;
1125
2322
  }, "strip", z.ZodTypeAny, {
1126
2323
  participants: (string | {
1127
- model: string;
1128
2324
  name: string;
2325
+ model: string;
1129
2326
  provider?: string | undefined;
1130
2327
  baseUrl?: string | undefined;
1131
2328
  apiKey?: string | undefined;
1132
2329
  })[];
1133
2330
  }, {
1134
2331
  participants?: (string | {
1135
- model: string;
1136
2332
  name: string;
2333
+ model: string;
1137
2334
  provider?: string | undefined;
1138
2335
  baseUrl?: string | undefined;
1139
2336
  apiKey?: string | undefined;
@@ -1153,12 +2350,45 @@ export declare const SettingsSchema: z.ZodObject<{
1153
2350
  providers: z.ZodOptional<z.ZodRecord<z.ZodEnum<["serper", "tavily", "searxng"]>, z.ZodObject<{
1154
2351
  apiKey: z.ZodOptional<z.ZodString>;
1155
2352
  baseUrl: z.ZodOptional<z.ZodString>;
2353
+ lastProbe: z.ZodOptional<z.ZodObject<{
2354
+ status: z.ZodEnum<["ok", "error", "unconfigured"]>;
2355
+ sampleTitles: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2356
+ errorMessage: z.ZodOptional<z.ZodString>;
2357
+ errorDetail: z.ZodOptional<z.ZodString>;
2358
+ lastProbedAt: z.ZodString;
2359
+ }, "strip", z.ZodTypeAny, {
2360
+ status: "error" | "ok" | "unconfigured";
2361
+ lastProbedAt: string;
2362
+ sampleTitles?: string[] | undefined;
2363
+ errorMessage?: string | undefined;
2364
+ errorDetail?: string | undefined;
2365
+ }, {
2366
+ status: "error" | "ok" | "unconfigured";
2367
+ lastProbedAt: string;
2368
+ sampleTitles?: string[] | undefined;
2369
+ errorMessage?: string | undefined;
2370
+ errorDetail?: string | undefined;
2371
+ }>>;
1156
2372
  }, "strip", z.ZodTypeAny, {
1157
2373
  baseUrl?: string | undefined;
1158
2374
  apiKey?: string | undefined;
2375
+ lastProbe?: {
2376
+ status: "error" | "ok" | "unconfigured";
2377
+ lastProbedAt: string;
2378
+ sampleTitles?: string[] | undefined;
2379
+ errorMessage?: string | undefined;
2380
+ errorDetail?: string | undefined;
2381
+ } | undefined;
1159
2382
  }, {
1160
2383
  baseUrl?: string | undefined;
1161
2384
  apiKey?: string | undefined;
2385
+ lastProbe?: {
2386
+ status: "error" | "ok" | "unconfigured";
2387
+ lastProbedAt: string;
2388
+ sampleTitles?: string[] | undefined;
2389
+ errorMessage?: string | undefined;
2390
+ errorDetail?: string | undefined;
2391
+ } | undefined;
1162
2392
  }>>>;
1163
2393
  }, "strip", z.ZodTypeAny, {
1164
2394
  provider: "serper" | "tavily" | "searxng";
@@ -1167,6 +2397,13 @@ export declare const SettingsSchema: z.ZodObject<{
1167
2397
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
1168
2398
  baseUrl?: string | undefined;
1169
2399
  apiKey?: string | undefined;
2400
+ lastProbe?: {
2401
+ status: "error" | "ok" | "unconfigured";
2402
+ lastProbedAt: string;
2403
+ sampleTitles?: string[] | undefined;
2404
+ errorMessage?: string | undefined;
2405
+ errorDetail?: string | undefined;
2406
+ } | undefined;
1170
2407
  }>> | undefined;
1171
2408
  }, {
1172
2409
  provider?: "serper" | "tavily" | "searxng" | undefined;
@@ -1175,6 +2412,13 @@ export declare const SettingsSchema: z.ZodObject<{
1175
2412
  providers?: Partial<Record<"serper" | "tavily" | "searxng", {
1176
2413
  baseUrl?: string | undefined;
1177
2414
  apiKey?: string | undefined;
2415
+ lastProbe?: {
2416
+ status: "error" | "ok" | "unconfigured";
2417
+ lastProbedAt: string;
2418
+ sampleTitles?: string[] | undefined;
2419
+ errorMessage?: string | undefined;
2420
+ errorDetail?: string | undefined;
2421
+ } | undefined;
1178
2422
  }>> | undefined;
1179
2423
  }>>;
1180
2424
  output: z.ZodDefault<z.ZodObject<{
@@ -1184,6 +2428,26 @@ export declare const SettingsSchema: z.ZodObject<{
1184
2428
  }, {
1185
2429
  format?: "text" | "json" | "jsonl" | "stream-json" | undefined;
1186
2430
  }>>;
2431
+ /**
2432
+ * Image attachment handling. Sub-fields:
2433
+ * - detail: provider-agnostic image clarity. Drives the
2434
+ * renderer-side downscale (low→~1024 / standard→~1568 /
2435
+ * high→~2576 px long edge) so BOTH providers save tokens
2436
+ * before send. Legacy "original" is migrated to "high".
2437
+ * - mcpImageTokenBudget: per-turn cap on token cost of images
2438
+ * returned by MCP tools. Codex doesn't enforce this; CC uses
2439
+ * 25 000. Set to 0 to disable.
2440
+ */
2441
+ images: z.ZodOptional<z.ZodObject<{
2442
+ detail: z.ZodOptional<z.ZodEffects<z.ZodEnum<["low", "standard", "high"]>, "low" | "high" | "standard", unknown>>;
2443
+ mcpImageTokenBudget: z.ZodOptional<z.ZodNumber>;
2444
+ }, "strip", z.ZodTypeAny, {
2445
+ detail?: "low" | "high" | "standard" | undefined;
2446
+ mcpImageTokenBudget?: number | undefined;
2447
+ }, {
2448
+ detail?: unknown;
2449
+ mcpImageTokenBudget?: number | undefined;
2450
+ }>>;
1187
2451
  /**
1188
2452
  * OS-level sandbox for shell-tool execution. "auto" picks per platform:
1189
2453
  * Seatbelt on macOS, bubblewrap on Linux when installed, otherwise off.
@@ -1196,16 +2460,103 @@ export declare const SettingsSchema: z.ZodObject<{
1196
2460
  deniedReads: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1197
2461
  network: z.ZodOptional<z.ZodEnum<["allow", "deny"]>>;
1198
2462
  }, "strip", z.ZodTypeAny, {
1199
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
2463
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
1200
2464
  writableRoots?: string[] | undefined;
1201
2465
  deniedReads?: string[] | undefined;
1202
2466
  network?: "allow" | "deny" | undefined;
1203
2467
  }, {
1204
- mode?: "auto" | "seatbelt" | "bwrap" | "off" | undefined;
2468
+ mode?: "auto" | "off" | "seatbelt" | "bwrap" | undefined;
1205
2469
  writableRoots?: string[] | undefined;
1206
2470
  deniedReads?: string[] | undefined;
1207
2471
  network?: "allow" | "deny" | undefined;
1208
2472
  }>>;
2473
+ /**
2474
+ * Top-level environment variables injected into tool subprocesses (the
2475
+ * Bash tool, background shells). Mirrors Claude Code's `env` field: a
2476
+ * KEY=VALUE map that can be set globally (~/.code-shell/settings.json) and
2477
+ * overridden per-project (.code-shell/settings.json). The canonical home
2478
+ * for API keys (e.g. OPENAI_API_KEY) that a skill's script reads — configure
2479
+ * once globally and every project's skills can use it.
2480
+ *
2481
+ * Precedence when merged into the spawn env (lowest → highest):
2482
+ * project localEnvironment.env → global env → project env
2483
+ * None of these is filtered through the deny regex (see mergeShellEnv):
2484
+ * they are values the user typed deliberately, a different trust class from
2485
+ * the host process.env passthrough the deny machinery guards against.
2486
+ */
2487
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2488
+ /**
2489
+ * Project-local environment profile. Mirrors Codex's local-environment
2490
+ * shape at the settings layer: setup/cleanup scripts can be customized per
2491
+ * platform, and env values are stored as KEY=VALUE pairs. Runtime wiring is
2492
+ * intentionally separate from the MCP server env model above.
2493
+ */
2494
+ localEnvironment: z.ZodOptional<z.ZodObject<{
2495
+ name: z.ZodOptional<z.ZodString>;
2496
+ setupScripts: z.ZodOptional<z.ZodObject<{
2497
+ default: z.ZodOptional<z.ZodString>;
2498
+ macos: z.ZodOptional<z.ZodString>;
2499
+ linux: z.ZodOptional<z.ZodString>;
2500
+ windows: z.ZodOptional<z.ZodString>;
2501
+ }, "strip", z.ZodTypeAny, {
2502
+ default?: string | undefined;
2503
+ linux?: string | undefined;
2504
+ macos?: string | undefined;
2505
+ windows?: string | undefined;
2506
+ }, {
2507
+ default?: string | undefined;
2508
+ linux?: string | undefined;
2509
+ macos?: string | undefined;
2510
+ windows?: string | undefined;
2511
+ }>>;
2512
+ cleanupScripts: z.ZodOptional<z.ZodObject<{
2513
+ default: z.ZodOptional<z.ZodString>;
2514
+ macos: z.ZodOptional<z.ZodString>;
2515
+ linux: z.ZodOptional<z.ZodString>;
2516
+ windows: z.ZodOptional<z.ZodString>;
2517
+ }, "strip", z.ZodTypeAny, {
2518
+ default?: string | undefined;
2519
+ linux?: string | undefined;
2520
+ macos?: string | undefined;
2521
+ windows?: string | undefined;
2522
+ }, {
2523
+ default?: string | undefined;
2524
+ linux?: string | undefined;
2525
+ macos?: string | undefined;
2526
+ windows?: string | undefined;
2527
+ }>>;
2528
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2529
+ }, "strip", z.ZodTypeAny, {
2530
+ name?: string | undefined;
2531
+ env?: Record<string, string> | undefined;
2532
+ setupScripts?: {
2533
+ default?: string | undefined;
2534
+ linux?: string | undefined;
2535
+ macos?: string | undefined;
2536
+ windows?: string | undefined;
2537
+ } | undefined;
2538
+ cleanupScripts?: {
2539
+ default?: string | undefined;
2540
+ linux?: string | undefined;
2541
+ macos?: string | undefined;
2542
+ windows?: string | undefined;
2543
+ } | undefined;
2544
+ }, {
2545
+ name?: string | undefined;
2546
+ env?: Record<string, string> | undefined;
2547
+ setupScripts?: {
2548
+ default?: string | undefined;
2549
+ linux?: string | undefined;
2550
+ macos?: string | undefined;
2551
+ windows?: string | undefined;
2552
+ } | undefined;
2553
+ cleanupScripts?: {
2554
+ default?: string | undefined;
2555
+ linux?: string | undefined;
2556
+ macos?: string | undefined;
2557
+ windows?: string | undefined;
2558
+ } | undefined;
2559
+ }>>;
1209
2560
  /**
1210
2561
  * Shell-hook configuration. Each entry binds a HookEventName to a
1211
2562
  * shell command; the command receives ctx JSON on stdin and returns
@@ -1222,19 +2573,99 @@ export declare const SettingsSchema: z.ZodObject<{
1222
2573
  matcher: z.ZodOptional<z.ZodString>;
1223
2574
  timeout_ms: z.ZodOptional<z.ZodNumber>;
1224
2575
  cwd: z.ZodOptional<z.ZodString>;
2576
+ /** Soft off-switch: the entry stays in the file (and the UI) but
2577
+ * registerSettingsHooks skips it. Absent = enabled. */
2578
+ disabled: z.ZodOptional<z.ZodBoolean>;
1225
2579
  }, "strip", z.ZodTypeAny, {
1226
2580
  command: string;
1227
2581
  event: string;
1228
- cwd?: string | undefined;
2582
+ disabled?: boolean | undefined;
1229
2583
  matcher?: string | undefined;
1230
2584
  timeout_ms?: number | undefined;
2585
+ cwd?: string | undefined;
1231
2586
  }, {
1232
2587
  command: string;
1233
2588
  event: string;
1234
- cwd?: string | undefined;
2589
+ disabled?: boolean | undefined;
1235
2590
  matcher?: string | undefined;
1236
2591
  timeout_ms?: number | undefined;
2592
+ cwd?: string | undefined;
1237
2593
  }>, "many">>;
2594
+ /**
2595
+ * External coding-agent orchestration (Claude Code / Codex CLI).
2596
+ * Used by the Mobile Web Remote to launch managed jobs. dangerousArgs
2597
+ * is config-provided (not hardcoded) so it tracks CLI flag changes;
2598
+ * project-default dangerous mode only applies inside trustedWorkspaces.
2599
+ */
2600
+ externalAgents: z.ZodOptional<z.ZodObject<{
2601
+ claudeCode: z.ZodOptional<z.ZodObject<{
2602
+ command: z.ZodOptional<z.ZodString>;
2603
+ defaultMode: z.ZodOptional<z.ZodEnum<["safe", "dangerous"]>>;
2604
+ dangerousArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2605
+ trustedWorkspaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2606
+ autoStartInTrustedWorkspaces: z.ZodOptional<z.ZodBoolean>;
2607
+ }, "strip", z.ZodTypeAny, {
2608
+ defaultMode?: "safe" | "dangerous" | undefined;
2609
+ command?: string | undefined;
2610
+ dangerousArgs?: string[] | undefined;
2611
+ trustedWorkspaces?: string[] | undefined;
2612
+ autoStartInTrustedWorkspaces?: boolean | undefined;
2613
+ }, {
2614
+ defaultMode?: "safe" | "dangerous" | undefined;
2615
+ command?: string | undefined;
2616
+ dangerousArgs?: string[] | undefined;
2617
+ trustedWorkspaces?: string[] | undefined;
2618
+ autoStartInTrustedWorkspaces?: boolean | undefined;
2619
+ }>>;
2620
+ codex: z.ZodOptional<z.ZodObject<{
2621
+ command: z.ZodOptional<z.ZodString>;
2622
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2623
+ }, "strip", z.ZodTypeAny, {
2624
+ args?: string[] | undefined;
2625
+ command?: string | undefined;
2626
+ }, {
2627
+ args?: string[] | undefined;
2628
+ command?: string | undefined;
2629
+ }>>;
2630
+ }, "strip", z.ZodTypeAny, {
2631
+ claudeCode?: {
2632
+ defaultMode?: "safe" | "dangerous" | undefined;
2633
+ command?: string | undefined;
2634
+ dangerousArgs?: string[] | undefined;
2635
+ trustedWorkspaces?: string[] | undefined;
2636
+ autoStartInTrustedWorkspaces?: boolean | undefined;
2637
+ } | undefined;
2638
+ codex?: {
2639
+ args?: string[] | undefined;
2640
+ command?: string | undefined;
2641
+ } | undefined;
2642
+ }, {
2643
+ claudeCode?: {
2644
+ defaultMode?: "safe" | "dangerous" | undefined;
2645
+ command?: string | undefined;
2646
+ dangerousArgs?: string[] | undefined;
2647
+ trustedWorkspaces?: string[] | undefined;
2648
+ autoStartInTrustedWorkspaces?: boolean | undefined;
2649
+ } | undefined;
2650
+ codex?: {
2651
+ args?: string[] | undefined;
2652
+ command?: string | undefined;
2653
+ } | undefined;
2654
+ }>>;
2655
+ /**
2656
+ * Credential-use gate (凭证模块第二期). Controls whether the AI's
2657
+ * `UseCredential` tool prompts before handing a stored credential to a
2658
+ * command. `autoApprove: true` skips the prompt entirely (默认关 — every
2659
+ * use asks, or is remembered for the session). See
2660
+ * docs/superpowers/specs/2026-06-16-credential-use-gate-design.md §5.
2661
+ */
2662
+ credentialUse: z.ZodOptional<z.ZodObject<{
2663
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
2664
+ }, "strip", z.ZodTypeAny, {
2665
+ autoApprove?: boolean | undefined;
2666
+ }, {
2667
+ autoApprove?: boolean | undefined;
2668
+ }>>;
1238
2669
  }, z.ZodTypeAny, "passthrough">>;
1239
2670
  export type ValidatedSettings = z.infer<typeof SettingsSchema>;
1240
2671
  export declare function validateSettings(raw: unknown): ValidatedSettings;