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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/README.md +13 -10
  2. package/dist/agent/agent-definition-registry.d.ts +21 -3
  3. package/dist/agent/agent-definition-registry.js +49 -18
  4. package/dist/agent/agent-definition.d.ts +32 -0
  5. package/dist/agent/agent-definition.js +49 -4
  6. package/dist/arena/arena.js +11 -12
  7. package/dist/arena/context/context-tools.js +47 -6
  8. package/dist/arena/context/within-root.d.ts +7 -0
  9. package/dist/arena/context/within-root.js +15 -0
  10. package/dist/arena/iterate/phases/argue.js +8 -2
  11. package/dist/arena/iterate/phases/revise.js +1 -1
  12. package/dist/arena/iterate/phases/tournament.js +3 -3
  13. package/dist/arena/ledger.js +9 -1
  14. package/dist/arena/phases/adjudication.js +1 -4
  15. package/dist/arena/phases/build-consensus.js +1 -4
  16. package/dist/arena/phases/cross-review.js +2 -8
  17. package/dist/arena/phases/debate-rounds.js +1 -4
  18. package/dist/arena/phases/participant-research.js +1 -4
  19. package/dist/arena/phases/planning-detail-expansion.js +8 -10
  20. package/dist/arena/planner.js +0 -1
  21. package/dist/arena/providers/docs.d.ts +1 -0
  22. package/dist/arena/providers/docs.js +5 -2
  23. package/dist/arena/providers/repo.d.ts +1 -0
  24. package/dist/arena/providers/repo.js +5 -2
  25. package/dist/arena/strategies/utils.d.ts +1 -4
  26. package/dist/arena/strategies/utils.js +7 -51
  27. package/dist/arena/transitions.d.ts +7 -2
  28. package/dist/arena/transitions.js +9 -4
  29. package/dist/arena/types.d.ts +8 -2
  30. package/dist/automation/cron-expr.d.ts +41 -0
  31. package/dist/automation/cron-expr.js +169 -0
  32. package/dist/automation/index.d.ts +41 -0
  33. package/dist/automation/index.js +39 -0
  34. package/dist/automation/runner.d.ts +84 -0
  35. package/dist/automation/runner.js +92 -0
  36. package/dist/automation/scheduler.d.ts +194 -0
  37. package/dist/automation/scheduler.js +623 -0
  38. package/dist/automation/store.d.ts +39 -0
  39. package/dist/automation/store.js +122 -0
  40. package/dist/automation/write-policy.d.ts +34 -0
  41. package/dist/automation/write-policy.js +113 -0
  42. package/dist/automation/write-run.d.ts +51 -0
  43. package/dist/automation/write-run.js +38 -0
  44. package/dist/capability-control/disabled-lists.d.ts +25 -0
  45. package/dist/capability-control/disabled-lists.js +57 -0
  46. package/dist/capability-control/index.d.ts +5 -0
  47. package/dist/capability-control/index.js +3 -0
  48. package/dist/capability-control/overlay.d.ts +64 -0
  49. package/dist/capability-control/overlay.js +116 -0
  50. package/dist/capability-control/project.d.ts +65 -0
  51. package/dist/capability-control/project.js +147 -0
  52. package/dist/capability-control/service.d.ts +70 -0
  53. package/dist/capability-control/service.js +147 -0
  54. package/dist/capability-control/types.d.ts +62 -0
  55. package/dist/capability-control/types.js +17 -0
  56. package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
  57. package/dist/cc-orchestrator/agent-adapter.js +133 -0
  58. package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
  59. package/dist/cc-orchestrator/cc-capability.js +53 -0
  60. package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
  61. package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
  62. package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
  63. package/dist/cc-orchestrator/codex-session-history.js +187 -0
  64. package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
  65. package/dist/cc-orchestrator/external-agent-changes.js +214 -0
  66. package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
  67. package/dist/cc-orchestrator/external-agent-driver.js +69 -0
  68. package/dist/cc-orchestrator/index.d.ts +8 -0
  69. package/dist/cc-orchestrator/index.js +8 -0
  70. package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
  71. package/dist/cc-orchestrator/relevance-judge.js +29 -0
  72. package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
  73. package/dist/cc-orchestrator/session-discovery.js +125 -0
  74. package/dist/cc-orchestrator/session-history.d.ts +19 -0
  75. package/dist/cc-orchestrator/session-history.js +67 -0
  76. package/dist/cli/agent-server-stdio.d.ts +26 -1
  77. package/dist/cli/agent-server-stdio.js +221 -28
  78. package/dist/cli/agent-server-tcp.d.ts +20 -0
  79. package/dist/cli/agent-server-tcp.js +134 -0
  80. package/dist/cli/graceful-shutdown.d.ts +27 -0
  81. package/dist/cli/graceful-shutdown.js +30 -0
  82. package/dist/context/compaction.d.ts +56 -0
  83. package/dist/context/compaction.js +209 -15
  84. package/dist/context/manager.d.ts +0 -20
  85. package/dist/context/manager.js +25 -41
  86. package/dist/cost-tracker.js +5 -61
  87. package/dist/credentials/cipher.d.ts +49 -0
  88. package/dist/credentials/cipher.js +45 -0
  89. package/dist/credentials/cookie-jar.d.ts +24 -0
  90. package/dist/credentials/cookie-jar.js +40 -0
  91. package/dist/credentials/index.d.ts +7 -0
  92. package/dist/credentials/index.js +5 -0
  93. package/dist/credentials/inject-credential-tool.d.ts +20 -0
  94. package/dist/credentials/inject-credential-tool.js +130 -0
  95. package/dist/credentials/store.d.ts +72 -0
  96. package/dist/credentials/store.js +184 -0
  97. package/dist/credentials/types.d.ts +56 -0
  98. package/dist/credentials/use-credential-tool.d.ts +29 -0
  99. package/dist/credentials/use-credential-tool.js +205 -0
  100. package/dist/credentials/use-gate.d.ts +56 -0
  101. package/dist/credentials/use-gate.js +52 -0
  102. package/dist/cron/cron-runtime.d.ts +2 -0
  103. package/dist/cron/cron-runtime.js +2 -0
  104. package/dist/cron/cron-store.d.ts +2 -0
  105. package/dist/cron/cron-store.js +2 -0
  106. package/dist/cron/scheduler.d.ts +5 -32
  107. package/dist/cron/scheduler.js +5 -113
  108. package/dist/data/model-metadata.d.ts +77 -0
  109. package/dist/data/model-metadata.js +56 -0
  110. package/dist/data/model-metadata.json +216 -0
  111. package/dist/data/openrouter-models.d.ts +18 -7
  112. package/dist/data/openrouter-models.js +35 -8
  113. package/dist/data/openrouter-sync.js +1 -1
  114. package/dist/engine/aux-key.d.ts +10 -0
  115. package/dist/engine/aux-key.js +11 -0
  116. package/dist/engine/dynamic-tool-defs.d.ts +19 -0
  117. package/dist/engine/dynamic-tool-defs.js +36 -0
  118. package/dist/engine/engine.d.ts +431 -108
  119. package/dist/engine/engine.js +1630 -279
  120. package/dist/engine/friendly-error.d.ts +18 -0
  121. package/dist/engine/friendly-error.js +63 -0
  122. package/dist/engine/goal.d.ts +187 -0
  123. package/dist/engine/goal.js +196 -0
  124. package/dist/engine/image-compression.d.ts +81 -0
  125. package/dist/engine/image-compression.js +186 -0
  126. package/dist/engine/image-policy.d.ts +165 -0
  127. package/dist/engine/image-policy.js +189 -0
  128. package/dist/engine/model-connections-pool.d.ts +17 -0
  129. package/dist/engine/model-connections-pool.js +66 -0
  130. package/dist/engine/model-facade.d.ts +10 -0
  131. package/dist/engine/model-facade.js +25 -0
  132. package/dist/engine/patch-orphaned-tools.js +3 -0
  133. package/dist/engine/reactive-threshold.d.ts +13 -0
  134. package/dist/engine/reactive-threshold.js +17 -0
  135. package/dist/engine/resolve-llm-config.d.ts +16 -0
  136. package/dist/engine/resolve-llm-config.js +44 -0
  137. package/dist/engine/runtime.js +9 -1
  138. package/dist/engine/sandbox-cache-key.d.ts +10 -0
  139. package/dist/engine/sandbox-cache-key.js +9 -0
  140. package/dist/engine/sandbox-config.d.ts +31 -0
  141. package/dist/engine/sandbox-config.js +38 -0
  142. package/dist/engine/session-title.d.ts +13 -0
  143. package/dist/engine/session-title.js +34 -0
  144. package/dist/engine/session-usage.d.ts +19 -0
  145. package/dist/engine/session-usage.js +25 -0
  146. package/dist/engine/steer-queue.d.ts +32 -0
  147. package/dist/engine/steer-queue.js +26 -0
  148. package/dist/engine/streaming-tool-queue.d.ts +12 -0
  149. package/dist/engine/streaming-tool-queue.js +50 -10
  150. package/dist/engine/turn-loop.d.ts +94 -9
  151. package/dist/engine/turn-loop.js +775 -342
  152. package/dist/engine/types.d.ts +175 -0
  153. package/dist/engine/types.js +13 -0
  154. package/dist/external-agents/config.d.ts +2 -0
  155. package/dist/external-agents/config.js +15 -0
  156. package/dist/external-agents/types.d.ts +31 -0
  157. package/dist/external-agents/types.js +1 -0
  158. package/dist/git/parse-log.d.ts +13 -0
  159. package/dist/git/parse-log.js +21 -0
  160. package/dist/git/utils.d.ts +8 -6
  161. package/dist/git/utils.js +62 -26
  162. package/dist/git/worktree.d.ts +48 -0
  163. package/dist/git/worktree.js +111 -20
  164. package/dist/hooks/events.d.ts +23 -1
  165. package/dist/hooks/goal-stop-hook.d.ts +58 -0
  166. package/dist/hooks/goal-stop-hook.js +279 -0
  167. package/dist/hooks/hook-output.d.ts +33 -0
  168. package/dist/hooks/hook-output.js +79 -0
  169. package/dist/hooks/registry.d.ts +15 -0
  170. package/dist/hooks/registry.js +57 -1
  171. package/dist/hooks/shell-runner.d.ts +2 -0
  172. package/dist/hooks/shell-runner.js +48 -18
  173. package/dist/index.d.ts +79 -11
  174. package/dist/index.js +89 -6
  175. package/dist/llm/capabilities/param-specs.d.ts +14 -0
  176. package/dist/llm/capabilities/param-specs.js +62 -0
  177. package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
  178. package/dist/llm/capabilities/reasoning-control.js +38 -0
  179. package/dist/llm/capabilities/rules.js +37 -3
  180. package/dist/llm/capabilities/types.d.ts +32 -2
  181. package/dist/llm/clamp-max-tokens.d.ts +11 -0
  182. package/dist/llm/clamp-max-tokens.js +17 -0
  183. package/dist/llm/client-base.d.ts +69 -5
  184. package/dist/llm/client-base.js +185 -25
  185. package/dist/llm/client-factory.d.ts +3 -3
  186. package/dist/llm/client-factory.js +2 -2
  187. package/dist/llm/model-cache.js +4 -2
  188. package/dist/llm/model-pool.d.ts +29 -11
  189. package/dist/llm/model-pool.js +36 -20
  190. package/dist/llm/provider-auth.d.ts +41 -0
  191. package/dist/llm/provider-auth.js +76 -0
  192. package/dist/llm/provider-catalog.d.ts +6 -2
  193. package/dist/llm/providers/anthropic.d.ts +32 -2
  194. package/dist/llm/providers/anthropic.js +207 -18
  195. package/dist/llm/providers/openai.d.ts +47 -2
  196. package/dist/llm/providers/openai.js +478 -71
  197. package/dist/llm/reasoning-setting.d.ts +51 -0
  198. package/dist/llm/reasoning-setting.js +40 -0
  199. package/dist/llm/stop-reason.d.ts +13 -0
  200. package/dist/llm/stop-reason.js +21 -0
  201. package/dist/llm/stream-watchdog.js +5 -1
  202. package/dist/llm/strip-vision.d.ts +32 -0
  203. package/dist/llm/strip-vision.js +94 -0
  204. package/dist/llm/token-counter.js +9 -2
  205. package/dist/llm/types.d.ts +9 -6
  206. package/dist/logging/logger.js +18 -4
  207. package/dist/logging/sanitize-messages.d.ts +10 -0
  208. package/dist/logging/sanitize-messages.js +112 -0
  209. package/dist/lsp/client.js +28 -8
  210. package/dist/lsp/manager.d.ts +1 -1
  211. package/dist/lsp/manager.js +42 -11
  212. package/dist/lsp/root-path.d.ts +9 -0
  213. package/dist/lsp/root-path.js +12 -0
  214. package/dist/model-catalog/builtin.d.ts +12 -0
  215. package/dist/model-catalog/builtin.js +407 -0
  216. package/dist/model-catalog/gen-connections.d.ts +20 -0
  217. package/dist/model-catalog/gen-connections.js +28 -0
  218. package/dist/model-catalog/index.d.ts +41 -0
  219. package/dist/model-catalog/index.js +90 -0
  220. package/dist/model-catalog/params.d.ts +20 -0
  221. package/dist/model-catalog/params.js +45 -0
  222. package/dist/model-catalog/resolve.d.ts +48 -0
  223. package/dist/model-catalog/resolve.js +33 -0
  224. package/dist/model-catalog/save-entry.d.ts +32 -0
  225. package/dist/model-catalog/save-entry.js +104 -0
  226. package/dist/model-catalog/types.d.ts +561 -0
  227. package/dist/model-catalog/types.js +93 -0
  228. package/dist/model-catalog/upsert.d.ts +9 -0
  229. package/dist/model-catalog/upsert.js +8 -0
  230. package/dist/onboarding.d.ts +12 -82
  231. package/dist/onboarding.js +75 -333
  232. package/dist/plugins/gitOps.d.ts +53 -0
  233. package/dist/plugins/gitOps.js +130 -5
  234. package/dist/plugins/installer/checkUpdate.d.ts +16 -0
  235. package/dist/plugins/installer/checkUpdate.js +32 -0
  236. package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
  237. package/dist/plugins/installer/codex/convertAgents.js +55 -0
  238. package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
  239. package/dist/plugins/installer/codex/convertCommands.js +46 -0
  240. package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
  241. package/dist/plugins/installer/codex/convertMcp.js +85 -0
  242. package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
  243. package/dist/plugins/installer/codex/convertSkills.js +33 -0
  244. package/dist/plugins/installer/detectFormat.d.ts +2 -0
  245. package/dist/plugins/installer/detectFormat.js +6 -0
  246. package/dist/plugins/installer/install.d.ts +7 -0
  247. package/dist/plugins/installer/install.js +123 -0
  248. package/dist/plugins/installer/installFromArchive.d.ts +43 -0
  249. package/dist/plugins/installer/installFromArchive.js +134 -0
  250. package/dist/plugins/installer/installFromSource.d.ts +13 -0
  251. package/dist/plugins/installer/installFromSource.js +51 -0
  252. package/dist/plugins/installer/list.d.ts +9 -0
  253. package/dist/plugins/installer/list.js +30 -0
  254. package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
  255. package/dist/plugins/installer/loadPluginAgents.js +27 -0
  256. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  257. package/dist/plugins/installer/loadPluginMcp.js +107 -0
  258. package/dist/plugins/installer/parseSource.d.ts +20 -0
  259. package/dist/plugins/installer/parseSource.js +74 -0
  260. package/dist/plugins/installer/paths.d.ts +5 -0
  261. package/dist/plugins/installer/paths.js +25 -0
  262. package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
  263. package/dist/plugins/installer/pruneDisabled.js +73 -0
  264. package/dist/plugins/installer/types.d.ts +52 -0
  265. package/dist/plugins/installer/types.js +28 -0
  266. package/dist/plugins/installer/uninstall.d.ts +2 -0
  267. package/dist/plugins/installer/uninstall.js +18 -0
  268. package/dist/plugins/installer/unzip.d.ts +14 -0
  269. package/dist/plugins/installer/unzip.js +82 -0
  270. package/dist/plugins/installer/update.d.ts +28 -0
  271. package/dist/plugins/installer/update.js +97 -0
  272. package/dist/plugins/loadPluginHooks.d.ts +54 -1
  273. package/dist/plugins/loadPluginHooks.js +83 -1
  274. package/dist/plugins/marketplaceManager.d.ts +15 -1
  275. package/dist/plugins/marketplaceManager.js +58 -4
  276. package/dist/plugins/pluginCommandHook.js +34 -14
  277. package/dist/plugins/pluginContent.d.ts +30 -0
  278. package/dist/plugins/pluginContent.js +83 -0
  279. package/dist/plugins/pluginInstaller.d.ts +34 -0
  280. package/dist/plugins/pluginInstaller.js +168 -35
  281. package/dist/plugins/schemas.js +41 -6
  282. package/dist/plugins/types.d.ts +10 -0
  283. package/dist/preset/index.d.ts +7 -1
  284. package/dist/preset/index.js +112 -6
  285. package/dist/product/types.d.ts +1 -1
  286. package/dist/prompt/composer.d.ts +31 -0
  287. package/dist/prompt/composer.js +95 -25
  288. package/dist/prompt/instruction-scanner.js +5 -3
  289. package/dist/prompt/section-loader.js +1 -0
  290. package/dist/prompt/sections/base.md +1 -0
  291. package/dist/prompt/sections/browser.md +10 -0
  292. package/dist/prompt/sections/coding.md +4 -0
  293. package/dist/prompt/sections/orchestration.md +8 -0
  294. package/dist/protocol/chat-session-manager.d.ts +15 -2
  295. package/dist/protocol/chat-session-manager.js +46 -0
  296. package/dist/protocol/chat-session.d.ts +82 -0
  297. package/dist/protocol/chat-session.js +121 -1
  298. package/dist/protocol/client.d.ts +27 -0
  299. package/dist/protocol/client.js +38 -0
  300. package/dist/protocol/redact.d.ts +50 -0
  301. package/dist/protocol/redact.js +71 -0
  302. package/dist/protocol/server.d.ts +153 -2
  303. package/dist/protocol/server.js +807 -39
  304. package/dist/protocol/tcp-transport.d.ts +45 -0
  305. package/dist/protocol/tcp-transport.js +74 -0
  306. package/dist/protocol/transport.js +3 -2
  307. package/dist/protocol/types.d.ts +69 -0
  308. package/dist/protocol/types.js +22 -0
  309. package/dist/quota/credentials.d.ts +3 -0
  310. package/dist/quota/credentials.js +80 -0
  311. package/dist/quota/index.d.ts +36 -0
  312. package/dist/quota/index.js +155 -0
  313. package/dist/quota/types.d.ts +48 -0
  314. package/dist/quota/types.js +13 -0
  315. package/dist/remote/bridge.d.ts +11 -2
  316. package/dist/remote/bridge.js +61 -33
  317. package/dist/review/review-prompt.d.ts +28 -0
  318. package/dist/review/review-prompt.js +81 -0
  319. package/dist/run/ArtifactTracker.js +5 -4
  320. package/dist/run/EngineRunner.d.ts +27 -1
  321. package/dist/run/EngineRunner.js +46 -8
  322. package/dist/run/FileRunStore.js +40 -11
  323. package/dist/run/RunApprovalBackend.js +25 -5
  324. package/dist/run/RunLock.d.ts +28 -2
  325. package/dist/run/RunLock.js +49 -7
  326. package/dist/run/RunManager.d.ts +12 -0
  327. package/dist/run/RunManager.js +86 -3
  328. package/dist/run/RunQueue.d.ts +1 -0
  329. package/dist/run/RunQueue.js +8 -2
  330. package/dist/run/factory.d.ts +8 -1
  331. package/dist/run/factory.js +1 -0
  332. package/dist/run/index.d.ts +2 -2
  333. package/dist/run/index.js +1 -1
  334. package/dist/run/redirect-target.d.ts +7 -0
  335. package/dist/run/redirect-target.js +13 -0
  336. package/dist/run/types.js +1 -1
  337. package/dist/runtime/background-shell.d.ts +139 -0
  338. package/dist/runtime/background-shell.js +495 -0
  339. package/dist/runtime/output-clean.d.ts +24 -0
  340. package/dist/runtime/output-clean.js +41 -0
  341. package/dist/runtime/ring-file.d.ts +64 -0
  342. package/dist/runtime/ring-file.js +174 -0
  343. package/dist/runtime/safe-spawn.js +15 -34
  344. package/dist/runtime/spawn-common.d.ts +148 -0
  345. package/dist/runtime/spawn-common.js +303 -0
  346. package/dist/runtime/truncate-output.d.ts +22 -0
  347. package/dist/runtime/truncate-output.js +49 -0
  348. package/dist/runtime/utf8-cut.d.ts +11 -0
  349. package/dist/runtime/utf8-cut.js +23 -0
  350. package/dist/services/auto-dream.d.ts +4 -0
  351. package/dist/services/auto-dream.js +26 -26
  352. package/dist/services/browser-open.d.ts +13 -0
  353. package/dist/services/browser-open.js +16 -0
  354. package/dist/services/diagnostics.d.ts +1 -2
  355. package/dist/services/diagnostics.js +12 -7
  356. package/dist/services/dream-consolidation.d.ts +57 -0
  357. package/dist/services/dream-consolidation.js +151 -0
  358. package/dist/services/extract-memories.d.ts +14 -1
  359. package/dist/services/extract-memories.js +45 -6
  360. package/dist/services/memory-orchestrator.d.ts +21 -0
  361. package/dist/services/memory-orchestrator.js +125 -32
  362. package/dist/services/notifier.d.ts +8 -0
  363. package/dist/services/notifier.js +39 -25
  364. package/dist/services/oauth.js +5 -7
  365. package/dist/services/session-memory-sort.d.ts +8 -0
  366. package/dist/services/session-memory-sort.js +9 -0
  367. package/dist/services/session-memory.js +30 -19
  368. package/dist/session/file-history.d.ts +124 -1
  369. package/dist/session/file-history.js +232 -9
  370. package/dist/session/memory.d.ts +116 -2
  371. package/dist/session/memory.js +250 -28
  372. package/dist/session/session-manager.d.ts +63 -1
  373. package/dist/session/session-manager.js +186 -5
  374. package/dist/session/simple-diff.d.ts +23 -0
  375. package/dist/session/simple-diff.js +84 -0
  376. package/dist/session/transcript.d.ts +25 -1
  377. package/dist/session/transcript.js +35 -2
  378. package/dist/session/undo-target.d.ts +67 -0
  379. package/dist/session/undo-target.js +144 -0
  380. package/dist/settings/disk-defaults.d.ts +42 -0
  381. package/dist/settings/disk-defaults.js +33 -0
  382. package/dist/settings/feature-flags.d.ts +64 -0
  383. package/dist/settings/feature-flags.js +61 -0
  384. package/dist/settings/manager.d.ts +101 -1
  385. package/dist/settings/manager.js +345 -15
  386. package/dist/settings/migrate-config.d.ts +45 -0
  387. package/dist/settings/migrate-config.js +125 -0
  388. package/dist/settings/personalization.d.ts +19 -0
  389. package/dist/settings/personalization.js +7 -0
  390. package/dist/settings/schema-export.d.ts +25 -0
  391. package/dist/settings/schema-export.js +38 -0
  392. package/dist/settings/schema.d.ts +1827 -396
  393. package/dist/settings/schema.js +361 -81
  394. package/dist/skills/scanner.d.ts +9 -0
  395. package/dist/skills/scanner.js +30 -2
  396. package/dist/stt/resolve-transcribe.d.ts +31 -0
  397. package/dist/stt/resolve-transcribe.js +108 -0
  398. package/dist/stt/transcribe.d.ts +51 -0
  399. package/dist/stt/transcribe.js +65 -0
  400. package/dist/tool-system/browser-bridge.d.ts +226 -0
  401. package/dist/tool-system/browser-bridge.js +163 -0
  402. package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
  403. package/dist/tool-system/builtin/add-marketplace.js +76 -0
  404. package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
  405. package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
  406. package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
  407. package/dist/tool-system/builtin/agent-notifications.js +9 -3
  408. package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
  409. package/dist/tool-system/builtin/agent-output-file.js +72 -0
  410. package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
  411. package/dist/tool-system/builtin/agent-registry.js +16 -4
  412. package/dist/tool-system/builtin/agent.d.ts +50 -11
  413. package/dist/tool-system/builtin/agent.js +576 -73
  414. package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
  415. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
  416. package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
  417. package/dist/tool-system/builtin/apply-patch/index.js +7 -3
  418. package/dist/tool-system/builtin/arena.js +6 -7
  419. package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
  420. package/dist/tool-system/builtin/background-jobs.js +124 -0
  421. package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
  422. package/dist/tool-system/builtin/background-shell-tools.js +108 -0
  423. package/dist/tool-system/builtin/background-work.d.ts +67 -0
  424. package/dist/tool-system/builtin/background-work.js +86 -0
  425. package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
  426. package/dist/tool-system/builtin/bash-output-style.js +40 -0
  427. package/dist/tool-system/builtin/bash.d.ts +5 -2
  428. package/dist/tool-system/builtin/bash.js +98 -62
  429. package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
  430. package/dist/tool-system/builtin/browser-tools.js +312 -0
  431. package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
  432. package/dist/tool-system/builtin/cancel-goal.js +64 -0
  433. package/dist/tool-system/builtin/check-quota.d.ts +15 -0
  434. package/dist/tool-system/builtin/check-quota.js +34 -0
  435. package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
  436. package/dist/tool-system/builtin/complete-goal.js +45 -0
  437. package/dist/tool-system/builtin/config.js +7 -0
  438. package/dist/tool-system/builtin/cron.d.ts +7 -0
  439. package/dist/tool-system/builtin/cron.js +105 -9
  440. package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
  441. package/dist/tool-system/builtin/drive-claude-code.js +157 -0
  442. package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
  443. package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
  444. package/dist/tool-system/builtin/edit.d.ts +2 -1
  445. package/dist/tool-system/builtin/edit.js +21 -12
  446. package/dist/tool-system/builtin/eol.d.ts +29 -0
  447. package/dist/tool-system/builtin/eol.js +37 -0
  448. package/dist/tool-system/builtin/file-cache.d.ts +6 -0
  449. package/dist/tool-system/builtin/file-cache.js +8 -0
  450. package/dist/tool-system/builtin/generate-image.d.ts +60 -0
  451. package/dist/tool-system/builtin/generate-image.js +374 -0
  452. package/dist/tool-system/builtin/generate-video.d.ts +55 -0
  453. package/dist/tool-system/builtin/generate-video.js +361 -0
  454. package/dist/tool-system/builtin/grep.js +6 -2
  455. package/dist/tool-system/builtin/image-providers.d.ts +86 -0
  456. package/dist/tool-system/builtin/image-providers.js +190 -0
  457. package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
  458. package/dist/tool-system/builtin/image-uploader.js +74 -0
  459. package/dist/tool-system/builtin/index.d.ts +24 -1
  460. package/dist/tool-system/builtin/index.js +310 -25
  461. package/dist/tool-system/builtin/mcp-tools.js +23 -3
  462. package/dist/tool-system/builtin/memory.js +45 -7
  463. package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
  464. package/dist/tool-system/builtin/notebook-edit.js +1 -1
  465. package/dist/tool-system/builtin/powershell.js +4 -1
  466. package/dist/tool-system/builtin/read.d.ts +2 -1
  467. package/dist/tool-system/builtin/read.js +11 -3
  468. package/dist/tool-system/builtin/repl.js +4 -1
  469. package/dist/tool-system/builtin/skill.js +9 -0
  470. package/dist/tool-system/builtin/sleep.js +12 -5
  471. package/dist/tool-system/builtin/task.js +4 -1
  472. package/dist/tool-system/builtin/tool-search.js +25 -7
  473. package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
  474. package/dist/tool-system/builtin/update-automation-memory.js +60 -0
  475. package/dist/tool-system/builtin/video-providers.d.ts +154 -0
  476. package/dist/tool-system/builtin/video-providers.js +235 -0
  477. package/dist/tool-system/builtin/view-image.d.ts +18 -0
  478. package/dist/tool-system/builtin/view-image.js +96 -0
  479. package/dist/tool-system/builtin/web-fetch.js +12 -2
  480. package/dist/tool-system/builtin/web-search.d.ts +4 -1
  481. package/dist/tool-system/builtin/web-search.js +57 -10
  482. package/dist/tool-system/builtin/worktree.d.ts +2 -1
  483. package/dist/tool-system/builtin/worktree.js +31 -4
  484. package/dist/tool-system/builtin/write.d.ts +2 -1
  485. package/dist/tool-system/builtin/write.js +1 -1
  486. package/dist/tool-system/context.d.ts +166 -6
  487. package/dist/tool-system/executor.d.ts +3 -2
  488. package/dist/tool-system/executor.js +197 -119
  489. package/dist/tool-system/investigation-guard.d.ts +4 -1
  490. package/dist/tool-system/investigation-guard.js +20 -4
  491. package/dist/tool-system/mcp-manager.d.ts +78 -16
  492. package/dist/tool-system/mcp-manager.js +357 -28
  493. package/dist/tool-system/path-policy.d.ts +99 -0
  494. package/dist/tool-system/path-policy.js +578 -0
  495. package/dist/tool-system/permission.d.ts +36 -1
  496. package/dist/tool-system/permission.js +322 -117
  497. package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
  498. package/dist/tool-system/plan-mode-allowlist.js +65 -0
  499. package/dist/tool-system/registry.d.ts +1 -0
  500. package/dist/tool-system/registry.js +26 -1
  501. package/dist/tool-system/sandbox/index.d.ts +8 -0
  502. package/dist/tool-system/sandbox/index.js +7 -2
  503. package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
  504. package/dist/tool-system/validate-tool-metadata.js +63 -0
  505. package/dist/tool-system/validation.d.ts +10 -0
  506. package/dist/tool-system/validation.js +16 -3
  507. package/dist/types.d.ts +301 -15
  508. package/dist/updater.js +20 -9
  509. package/dist/utils/envUtils.d.ts +0 -9
  510. package/dist/utils/envUtils.js +3 -28
  511. package/dist/utils/exec.d.ts +40 -0
  512. package/dist/utils/exec.js +144 -0
  513. package/dist/utils/format.js +4 -2
  514. package/dist/utils/json.d.ts +12 -0
  515. package/dist/utils/json.js +92 -0
  516. package/dist/utils/lockfile.js +9 -2
  517. package/dist/utils/theme.d.ts +7 -1
  518. package/dist/utils/theme.js +5 -3
  519. package/dist/utils/toolDisplay.js +0 -1
  520. package/package.json +14 -7
  521. package/dist/agent/coordinator.d.ts +0 -49
  522. package/dist/agent/coordinator.js +0 -77
  523. package/dist/settings/manager.test.js +0 -73
  524. package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
  525. package/dist/tool-system/builtin/remote-trigger.js +0 -54
  526. package/dist/tool-system/builtin/send-message.d.ts +0 -6
  527. package/dist/tool-system/builtin/send-message.js +0 -47
  528. /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Pure projection functions: each turns one loader's output + the relevant
3
+ * slice of current settings into CapabilityDescriptor[]. No I/O, no state —
4
+ * the CapabilityService feeds them and composes the results.
5
+ *
6
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
7
+ */
8
+ import type { RegisteredTool, MCPServerConfig } from "../types.js";
9
+ import type { SkillDefinition } from "../skills/scanner.js";
10
+ import type { AgentDefinition } from "../agent/agent-definition.js";
11
+ import type { CapabilityDescriptor } from "./types.js";
12
+ /**
13
+ * Builtin tools. A tool's switch lives in the denylist when it ships in the
14
+ * preset default set (turning it off = adding to agent.disabledBuiltinTools),
15
+ * and in the allowlist otherwise (turning it on = adding to
16
+ * agent.enabledBuiltinTools). This mirrors resolveBuiltinToolNames, whose
17
+ * effective set is `preset.builtinTools ∪ enabled − disabled`.
18
+ */
19
+ export declare function projectBuiltin(input: {
20
+ tools: RegisteredTool[];
21
+ presetDefaults: string[];
22
+ effective: string[];
23
+ }): CapabilityDescriptor[];
24
+ /**
25
+ * MCP, projected per server (not per tool). Every configured server gets a
26
+ * descriptor — including unconnected ones — driven by the mcpServers config;
27
+ * tool counts come from the registry's connected mcp tools (0 if none).
28
+ */
29
+ export declare function projectMcp(input: {
30
+ mcpServers: Record<string, MCPServerConfig>;
31
+ mcpTools: RegisteredTool[];
32
+ }): CapabilityDescriptor[];
33
+ /**
34
+ * Project/user skills. The caller MUST pass the FULL skill set (scanSkills
35
+ * with empty opts), because scanSkills filters disabled entries out — passing
36
+ * a filtered set would drop disabled skills from the list, leaving the UI no
37
+ * way to re-enable them. Plugin-sourced skills are excluded here; they surface
38
+ * under their plugin via projectPlugins.
39
+ */
40
+ export declare function projectSkills(input: {
41
+ skills: SkillDefinition[];
42
+ disabledSkills: string[];
43
+ }): CapabilityDescriptor[];
44
+ /**
45
+ * Project/user sub-agent roles, projected per role. Like projectSkills, the
46
+ * caller MUST pass the FULL agent set (loaded WITHOUT the disabled filter), so
47
+ * disabled roles still appear in the list and can be re-enabled. Plugin-sourced
48
+ * agents are excluded — they ride their plugin's switch via projectPlugins, and
49
+ * disabledAgents only governs user/project roles. Toggling writes the top-level
50
+ * `disabledAgents` denylist (same key the 子代理 tab uses), so the two stay in
51
+ * sync; the project overlay layers on via capabilityOverrides.agents.
52
+ */
53
+ export declare function projectAgents(input: {
54
+ agents: AgentDefinition[];
55
+ disabledAgents: string[];
56
+ }): CapabilityDescriptor[];
57
+ /**
58
+ * Installed plugins, projected per plugin. Install keys are `<plugin>@<market>`;
59
+ * the bare plugin name is the substring before the last `@` and matches the
60
+ * `plugin:` prefix that disabledPlugins controls.
61
+ */
62
+ export declare function projectPlugins(input: {
63
+ installed: Record<string, unknown>;
64
+ disabledPlugins: string[];
65
+ }): CapabilityDescriptor[];
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Pure projection functions: each turns one loader's output + the relevant
3
+ * slice of current settings into CapabilityDescriptor[]. No I/O, no state —
4
+ * the CapabilityService feeds them and composes the results.
5
+ *
6
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
7
+ */
8
+ /**
9
+ * Builtin tools. A tool's switch lives in the denylist when it ships in the
10
+ * preset default set (turning it off = adding to agent.disabledBuiltinTools),
11
+ * and in the allowlist otherwise (turning it on = adding to
12
+ * agent.enabledBuiltinTools). This mirrors resolveBuiltinToolNames, whose
13
+ * effective set is `preset.builtinTools ∪ enabled − disabled`.
14
+ */
15
+ export function projectBuiltin(input) {
16
+ const defaults = new Set(input.presetDefaults);
17
+ const on = new Set(input.effective);
18
+ return input.tools.map((t) => {
19
+ const inPreset = defaults.has(t.name);
20
+ return {
21
+ id: `builtin:${t.name}`,
22
+ kind: "builtin",
23
+ name: t.name,
24
+ description: t.description,
25
+ enabled: on.has(t.name),
26
+ control: inPreset
27
+ ? {
28
+ settingsKey: "agent.disabledBuiltinTools",
29
+ mode: "denylist",
30
+ token: t.name,
31
+ }
32
+ : {
33
+ settingsKey: "agent.enabledBuiltinTools",
34
+ mode: "allowlist",
35
+ token: t.name,
36
+ },
37
+ origin: { isReadOnly: t.isReadOnly },
38
+ };
39
+ });
40
+ }
41
+ /**
42
+ * MCP, projected per server (not per tool). Every configured server gets a
43
+ * descriptor — including unconnected ones — driven by the mcpServers config;
44
+ * tool counts come from the registry's connected mcp tools (0 if none).
45
+ */
46
+ export function projectMcp(input) {
47
+ const counts = new Map();
48
+ for (const t of input.mcpTools) {
49
+ if (t.source !== "mcp" || !t.serverName)
50
+ continue;
51
+ counts.set(t.serverName, (counts.get(t.serverName) ?? 0) + 1);
52
+ }
53
+ return Object.entries(input.mcpServers).map(([serverName, cfg]) => {
54
+ const toolCount = counts.get(serverName) ?? 0;
55
+ return {
56
+ id: `mcp:${serverName}`,
57
+ kind: "mcp",
58
+ name: serverName,
59
+ description: `${toolCount} tools`,
60
+ enabled: cfg.enabled !== false,
61
+ control: {
62
+ settingsKey: "mcpServers",
63
+ mode: "record-flag",
64
+ token: serverName,
65
+ },
66
+ origin: { serverName, toolCount },
67
+ };
68
+ });
69
+ }
70
+ /**
71
+ * Project/user skills. The caller MUST pass the FULL skill set (scanSkills
72
+ * with empty opts), because scanSkills filters disabled entries out — passing
73
+ * a filtered set would drop disabled skills from the list, leaving the UI no
74
+ * way to re-enable them. Plugin-sourced skills are excluded here; they surface
75
+ * under their plugin via projectPlugins.
76
+ */
77
+ export function projectSkills(input) {
78
+ const disabled = new Set(input.disabledSkills);
79
+ return input.skills
80
+ .filter((s) => s.source === "project" || s.source === "user")
81
+ .map((s) => ({
82
+ id: `skill:${s.name}`,
83
+ kind: "skill",
84
+ name: s.name,
85
+ description: s.description,
86
+ enabled: !disabled.has(s.name),
87
+ control: {
88
+ settingsKey: "disabledSkills",
89
+ mode: "denylist",
90
+ token: s.name,
91
+ },
92
+ origin: { filePath: s.filePath },
93
+ }));
94
+ }
95
+ /**
96
+ * Project/user sub-agent roles, projected per role. Like projectSkills, the
97
+ * caller MUST pass the FULL agent set (loaded WITHOUT the disabled filter), so
98
+ * disabled roles still appear in the list and can be re-enabled. Plugin-sourced
99
+ * agents are excluded — they ride their plugin's switch via projectPlugins, and
100
+ * disabledAgents only governs user/project roles. Toggling writes the top-level
101
+ * `disabledAgents` denylist (same key the 子代理 tab uses), so the two stay in
102
+ * sync; the project overlay layers on via capabilityOverrides.agents.
103
+ */
104
+ export function projectAgents(input) {
105
+ const disabled = new Set(input.disabledAgents);
106
+ return input.agents
107
+ .filter((a) => a.source === "project" || a.source === "user")
108
+ .map((a) => ({
109
+ id: `agent:${a.name}`,
110
+ kind: "agent",
111
+ name: a.name,
112
+ description: a.description,
113
+ enabled: !disabled.has(a.name),
114
+ control: {
115
+ settingsKey: "disabledAgents",
116
+ mode: "denylist",
117
+ token: a.name,
118
+ },
119
+ origin: { filePath: a.filePath },
120
+ }));
121
+ }
122
+ /**
123
+ * Installed plugins, projected per plugin. Install keys are `<plugin>@<market>`;
124
+ * the bare plugin name is the substring before the last `@` and matches the
125
+ * `plugin:` prefix that disabledPlugins controls.
126
+ */
127
+ export function projectPlugins(input) {
128
+ const disabled = new Set(input.disabledPlugins);
129
+ const names = new Set();
130
+ for (const key of Object.keys(input.installed)) {
131
+ const at = key.lastIndexOf("@");
132
+ names.add(at > 0 ? key.slice(0, at) : key);
133
+ }
134
+ return [...names].map((name) => ({
135
+ id: `plugin:${name}`,
136
+ kind: "plugin",
137
+ name,
138
+ description: "",
139
+ enabled: !disabled.has(name),
140
+ control: {
141
+ settingsKey: "disabledPlugins",
142
+ mode: "denylist",
143
+ token: name,
144
+ },
145
+ origin: { pluginName: name },
146
+ }));
147
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * CapabilityService — the single control-layer entry point.
3
+ *
4
+ * - list(): composes the four projections into one CapabilityDescriptor[].
5
+ * - setEnabled(id, on): reads the target descriptor's inlined `control` and
6
+ * routes the write to the right settings key. It never branches on `kind`.
7
+ *
8
+ * Dependencies are injected (not imported) so the service is unit-testable
9
+ * without touching disk: the engine / desktop wiring supplies the real
10
+ * ToolRegistry, SettingsManager, and loaders.
11
+ *
12
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
13
+ */
14
+ import type { ToolRegistry } from "../tool-system/registry.js";
15
+ import type { SettingsManager } from "../settings/manager.js";
16
+ import type { SkillDefinition } from "../skills/scanner.js";
17
+ import type { AgentDefinition } from "../agent/agent-definition.js";
18
+ import type { InstalledPluginsV2 } from "../plugins/types.js";
19
+ import type { CapabilityDescriptor, WriteScope, CapabilityOverrideState } from "./types.js";
20
+ export interface CapabilityServiceDeps {
21
+ registry: Pick<ToolRegistry, "listToolsDetailed">;
22
+ settings: Pick<SettingsManager, "get" | "saveUserSetting" | "saveProjectSetting" | "deleteProjectSetting" | "getForScope">;
23
+ cwd: string;
24
+ scanSkills: (cwd: string, opts?: {
25
+ disabledSkills?: string[];
26
+ disabledPlugins?: string[];
27
+ }) => SkillDefinition[];
28
+ /** Full agent role set for `cwd` (user + project), loaded WITHOUT the
29
+ * disabled filter so disabled roles still list and can be re-enabled. */
30
+ scanAgents: (cwd: string) => AgentDefinition[];
31
+ readInstalledPlugins: () => InstalledPluginsV2;
32
+ resolveBuiltinToolNames: (o?: {
33
+ preset?: string;
34
+ enabledBuiltinTools?: string[];
35
+ disabledBuiltinTools?: string[];
36
+ }) => string[];
37
+ }
38
+ export declare class CapabilityService {
39
+ private readonly deps;
40
+ constructor(deps: CapabilityServiceDeps);
41
+ /**
42
+ * List capability descriptors. With no `cwd` this is the user/global view
43
+ * (enabled === global baseline). With a `cwd` it's that project's view:
44
+ * each descriptor gains globalEnabled / projectOverride / effectiveSource
45
+ * and `enabled` reflects the tri-state overlay (spec §6.1).
46
+ */
47
+ list(cwd?: string): CapabilityDescriptor[];
48
+ /**
49
+ * Toggle a capability. Default scope is "user" (back-compat: old callers
50
+ * pass no opts → global write, unchanged). scope:"project" maps on/off to a
51
+ * tri-state override and writes capabilityOverrides (requires cwd).
52
+ */
53
+ setEnabled(id: string, on: boolean, opts?: {
54
+ scope?: WriteScope;
55
+ cwd?: string;
56
+ }): void;
57
+ /**
58
+ * Write a project tri-state override. "inherit" deletes the key (we never
59
+ * persist the literal). All capability kinds — including builtin, which
60
+ * writes to capabilityOverrides.builtin.<token> — now support project
61
+ * overrides; only a kind with no bucket (bucketForKind returns undefined)
62
+ * is rejected.
63
+ */
64
+ setOverride(id: string, state: CapabilityOverrideState, opts: {
65
+ scope: "project";
66
+ cwd: string;
67
+ }): void;
68
+ /** Existing global write path — unchanged behavior, refactored out of setEnabled. */
69
+ private writeUserScope;
70
+ }
@@ -0,0 +1,147 @@
1
+ /**
2
+ * CapabilityService — the single control-layer entry point.
3
+ *
4
+ * - list(): composes the four projections into one CapabilityDescriptor[].
5
+ * - setEnabled(id, on): reads the target descriptor's inlined `control` and
6
+ * routes the write to the right settings key. It never branches on `kind`.
7
+ *
8
+ * Dependencies are injected (not imported) so the service is unit-testable
9
+ * without touching disk: the engine / desktop wiring supplies the real
10
+ * ToolRegistry, SettingsManager, and loaders.
11
+ *
12
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
13
+ */
14
+ import { CapabilityNotFoundError } from "./types.js";
15
+ import { projectBuiltin, projectMcp, projectSkills, projectPlugins, projectAgents, } from "./project.js";
16
+ import { applyOverride, bucketForKind, overrideTokenForId, overrideFor, } from "./overlay.js";
17
+ export class CapabilityService {
18
+ deps;
19
+ constructor(deps) {
20
+ this.deps = deps;
21
+ }
22
+ /**
23
+ * List capability descriptors. With no `cwd` this is the user/global view
24
+ * (enabled === global baseline). With a `cwd` it's that project's view:
25
+ * each descriptor gains globalEnabled / projectOverride / effectiveSource
26
+ * and `enabled` reflects the tri-state overlay (spec §6.1).
27
+ */
28
+ list(cwd) {
29
+ const s = this.deps.settings.get();
30
+ const agent = (s.agent ?? {});
31
+ const tools = this.deps.registry.listToolsDetailed();
32
+ const preset = agent.preset;
33
+ const base = [
34
+ ...projectBuiltin({
35
+ tools: tools.filter((t) => t.source === "builtin"),
36
+ presetDefaults: this.deps.resolveBuiltinToolNames({ preset }),
37
+ effective: this.deps.resolveBuiltinToolNames({
38
+ preset,
39
+ enabledBuiltinTools: agent.enabledBuiltinTools ?? [],
40
+ disabledBuiltinTools: agent.disabledBuiltinTools ?? [],
41
+ }),
42
+ }),
43
+ ...projectMcp({
44
+ mcpServers: s.mcpServers ?? {},
45
+ mcpTools: tools.filter((t) => t.source === "mcp"),
46
+ }),
47
+ ...projectSkills({
48
+ skills: this.deps.scanSkills(this.deps.cwd, {}),
49
+ disabledSkills: s.disabledSkills ?? [],
50
+ }),
51
+ ...projectPlugins({
52
+ installed: this.deps.readInstalledPlugins().plugins,
53
+ disabledPlugins: s.disabledPlugins ?? [],
54
+ }),
55
+ ...projectAgents({
56
+ agents: this.deps.scanAgents(this.deps.cwd),
57
+ disabledAgents: s.disabledAgents ?? [],
58
+ }),
59
+ ];
60
+ const overrides = cwd
61
+ ? this.deps.settings.getForScope("project", cwd).capabilityOverrides
62
+ : undefined;
63
+ return base.map((d) => {
64
+ const globalEnabled = d.enabled;
65
+ const token = overrideTokenForId(d.id);
66
+ const ov = cwd ? overrideFor(overrides, d.kind, token) : undefined;
67
+ const enabled = applyOverride(globalEnabled, ov);
68
+ return {
69
+ ...d,
70
+ enabled,
71
+ globalEnabled,
72
+ projectOverride: ov,
73
+ effectiveSource: ov ? "project" : cwd ? "default" : "user",
74
+ };
75
+ });
76
+ }
77
+ /**
78
+ * Toggle a capability. Default scope is "user" (back-compat: old callers
79
+ * pass no opts → global write, unchanged). scope:"project" maps on/off to a
80
+ * tri-state override and writes capabilityOverrides (requires cwd).
81
+ */
82
+ setEnabled(id, on, opts) {
83
+ if (opts?.scope === "project") {
84
+ this.setOverride(id, on ? "on" : "off", {
85
+ scope: "project",
86
+ cwd: opts.cwd ?? this.deps.cwd,
87
+ });
88
+ return;
89
+ }
90
+ this.writeUserScope(id, on);
91
+ }
92
+ /**
93
+ * Write a project tri-state override. "inherit" deletes the key (we never
94
+ * persist the literal). All capability kinds — including builtin, which
95
+ * writes to capabilityOverrides.builtin.<token> — now support project
96
+ * overrides; only a kind with no bucket (bucketForKind returns undefined)
97
+ * is rejected.
98
+ */
99
+ setOverride(id, state, opts) {
100
+ const descriptor = this.list().find((c) => c.id === id);
101
+ if (!descriptor)
102
+ throw new CapabilityNotFoundError(id);
103
+ const bucket = bucketForKind(descriptor.kind);
104
+ if (!bucket)
105
+ throw new Error(`Capability kind '${descriptor.kind}' has no project override`);
106
+ if (!opts.cwd)
107
+ throw new Error("project override requires cwd");
108
+ const token = overrideTokenForId(id);
109
+ const path = `capabilityOverrides.${bucket}.${token}`;
110
+ if (state === "inherit")
111
+ this.deps.settings.deleteProjectSetting(path, opts.cwd);
112
+ else
113
+ this.deps.settings.saveProjectSetting(path, state, opts.cwd);
114
+ }
115
+ /** Existing global write path — unchanged behavior, refactored out of setEnabled. */
116
+ writeUserScope(id, on) {
117
+ const descriptor = this.list().find((c) => c.id === id);
118
+ if (!descriptor)
119
+ throw new CapabilityNotFoundError(id);
120
+ const { settingsKey, mode, token } = descriptor.control;
121
+ const s = this.deps.settings.get();
122
+ if (mode === "record-flag") {
123
+ const servers = { ...(s.mcpServers ?? {}) };
124
+ // Never conjure a server that was never configured.
125
+ if (!servers[token])
126
+ return;
127
+ servers[token] = { ...servers[token], enabled: on };
128
+ this.deps.settings.saveUserSetting("mcpServers", servers);
129
+ return;
130
+ }
131
+ const arr = new Set(readArray(s, settingsKey));
132
+ // denylist: present ⇒ OFF, so we want it present when turning off.
133
+ const wantPresent = mode === "allowlist" ? on : !on;
134
+ if (wantPresent)
135
+ arr.add(token);
136
+ else
137
+ arr.delete(token);
138
+ this.deps.settings.saveUserSetting(settingsKey, [...arr]);
139
+ }
140
+ }
141
+ /** Read an array at a dotted settings path (e.g. agent.disabledBuiltinTools). */
142
+ function readArray(s, key) {
143
+ let cur = s;
144
+ for (const part of key.split("."))
145
+ cur = cur?.[part];
146
+ return Array.isArray(cur) ? cur : [];
147
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Capability-control descriptor types.
3
+ *
4
+ * A read-only projection layer over the four extension-capability loaders
5
+ * (builtin tools, MCP servers, skills, plugins). A CapabilityDescriptor is a
6
+ * computed view, never a source of truth — the truth stays in the loaders +
7
+ * settings. Each descriptor carries an inlined `control` describing how to
8
+ * toggle it, so the switch router never has to branch on `kind`.
9
+ *
10
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
11
+ */
12
+ /** A uniform, read-only projection of one extension capability. */
13
+ export interface CapabilityDescriptor {
14
+ /** Globally unique; the source prefix isolates the namespace. */
15
+ id: string;
16
+ kind: "builtin" | "mcp" | "skill" | "plugin" | "agent";
17
+ /** Display name: builtin=tool, mcp=server, skill=skill, plugin=plugin, agent=role. */
18
+ name: string;
19
+ /** One-line description pulled from the underlying metadata. */
20
+ description: string;
21
+ /** Computed from preset defaults + the relevant switch config. */
22
+ enabled: boolean;
23
+ /** Which settings key the switch writes, and how. */
24
+ control: CapabilityControl;
25
+ /** user/global baseline enablement, before any project overlay. */
26
+ globalEnabled?: boolean;
27
+ /** Project overlay state in a project-scope view. Absent === inherit. */
28
+ projectOverride?: "on" | "off";
29
+ /** Where the effective `enabled` value came from. */
30
+ effectiveSource?: "user" | "project" | "default";
31
+ /** Source details for UI grouping / navigation. */
32
+ origin?: {
33
+ serverName?: string;
34
+ pluginName?: string;
35
+ filePath?: string;
36
+ toolCount?: number;
37
+ isReadOnly?: boolean;
38
+ };
39
+ }
40
+ /** Describes which settings key the switch writes and the write semantics. */
41
+ export interface CapabilityControl {
42
+ settingsKey: "agent.enabledBuiltinTools" | "agent.disabledBuiltinTools" | "mcpServers" | "disabledSkills" | "disabledPlugins" | "disabledAgents";
43
+ /**
44
+ * - "denylist" → off = token present in array (disabled*); on = removed
45
+ * - "allowlist" → on = token present in array (enabled*); off = removed
46
+ * - "record-flag" → flip mcpServers[token].enabled
47
+ */
48
+ mode: "denylist" | "allowlist" | "record-flag";
49
+ /** Identifier written into the array, or used as the record key. */
50
+ token: string;
51
+ }
52
+ export declare class CapabilityNotFoundError extends Error {
53
+ constructor(id: string);
54
+ }
55
+ /**
56
+ * Which settings file a capability write targets. Distinct from
57
+ * SettingsManager's disk-READ scope ("isolated" | "project" | "full"): this is
58
+ * the WRITE scope — user → global settings, project → capabilityOverrides.
59
+ */
60
+ export type WriteScope = "user" | "project";
61
+ /** Tri-state project override as seen by callers. */
62
+ export type CapabilityOverrideState = "inherit" | "on" | "off";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Capability-control descriptor types.
3
+ *
4
+ * A read-only projection layer over the four extension-capability loaders
5
+ * (builtin tools, MCP servers, skills, plugins). A CapabilityDescriptor is a
6
+ * computed view, never a source of truth — the truth stays in the loaders +
7
+ * settings. Each descriptor carries an inlined `control` describing how to
8
+ * toggle it, so the switch router never has to branch on `kind`.
9
+ *
10
+ * See docs/superpowers/specs/2026-05-29-capability-control-design.md
11
+ */
12
+ export class CapabilityNotFoundError extends Error {
13
+ constructor(id) {
14
+ super(`Capability not found: ${id}`);
15
+ this.name = "CapabilityNotFoundError";
16
+ }
17
+ }
@@ -0,0 +1,50 @@
1
+ export type PermissionMode = "default" | "acceptEdits" | "bypassPermissions";
2
+ export interface BuildArgsOpts {
3
+ prompt: string;
4
+ resumeSessionId?: string;
5
+ permissionMode: PermissionMode;
6
+ cwd: string;
7
+ }
8
+ export interface ParsedResult {
9
+ sessionId: string;
10
+ finalText: string;
11
+ isError: boolean;
12
+ }
13
+ export interface AgentAdapter {
14
+ /** Display name, e.g. "claude" / "codex". */
15
+ kind: string;
16
+ /** Build the CLI argv (command itself excluded). */
17
+ buildArgs(opts: BuildArgsOpts): string[];
18
+ /** Reduce collected stream-json output lines to {sessionId, finalText, isError}. */
19
+ parseResult(lines: string[]): ParsedResult;
20
+ /**
21
+ * When true, the prompt is fed over stdin instead of being passed in argv.
22
+ * claude takes the prompt as `-p <prompt>` (argv) so leaves this unset; codex
23
+ * `exec` reads the prompt from stdin (its argv ends with a bare `-`).
24
+ */
25
+ promptViaStdin?: boolean;
26
+ }
27
+ /**
28
+ * Soft cost-guard appended to a driven CC's system prompt. Workflow fans out a
29
+ * fleet of agents and is the main token sink; we ask CC to surface intent and
30
+ * get a go-ahead before running one, so a human can intervene (rooms) and the
31
+ * model stays cost-aware even where Workflow isn't hard-disabled. Shared so the
32
+ * room's resident process can reuse the exact same wording.
33
+ */
34
+ export declare const CC_COST_GUARD_PROMPT: string;
35
+ export declare const claudeAdapter: AgentAdapter;
36
+ /**
37
+ * Drives the OpenAI Codex CLI via `codex exec`. Mirrors claudeAdapter but for
38
+ * codex's different surface:
39
+ * - prompt is fed over STDIN (argv ends with a bare `-`), not argv → promptViaStdin
40
+ * - permission is a spawn-time SANDBOX choice, not a per-tool approval loop:
41
+ * default → --sandbox read-only (codex can read, not write)
42
+ * acceptEdits → --sandbox workspace-write (codex can write the workspace)
43
+ * bypassPermissions → --dangerously-bypass-approvals-and-sandbox (full auto)
44
+ * (Matches the only model codex supports — same choice the `wand` tool makes;
45
+ * codex has no `--permission-prompt-tool stdio` equivalent.)
46
+ * - JSONL event shape differs: session id is `thread.started`.thread_id, the
47
+ * final answer is the last `item.completed` of item.type "agent_message", and
48
+ * failure is `turn.failed` / `error` events (no `is_error` flag).
49
+ */
50
+ export declare const codexAdapter: AgentAdapter;