@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
@@ -5,9 +5,15 @@
5
5
  * at the MVP subset (github + git sources only, no auto-update,
6
6
  * no policy blocking, no GCS mirror).
7
7
  */
8
- import type { MarketplaceSource, PluginMarketplace } from "./types.js";
8
+ import type { MarketplaceFormat, MarketplaceSource, PluginMarketplace } from "./types.js";
9
+ export type { MarketplaceFormat } from "./types.js";
9
10
  export declare function marketplacesRoot(): string;
10
11
  export declare function marketplaceDir(name: string): string;
12
+ /**
13
+ * Classify a cloned marketplace by which manifest files it ships:
14
+ * both → universal, only .agents/plugins → codex, otherwise claude-code.
15
+ */
16
+ export declare function detectMarketplaceFormat(dir: string): MarketplaceFormat;
11
17
  export type AddMarketplaceResult = {
12
18
  ok: true;
13
19
  name: string;
@@ -23,6 +29,13 @@ export type AddMarketplaceResult = {
23
29
  * an entry into known_marketplaces.json.
24
30
  */
25
31
  export declare function addMarketplace(name: string, source: MarketplaceSource): Promise<AddMarketplaceResult>;
32
+ /**
33
+ * Refreshes a known marketplace: re-pulls its source so the cached
34
+ * marketplace.json reflects upstream (new plugins, version bumps). Reuses
35
+ * addMarketplace's same-source path (git fetch + reset). Returns an error if
36
+ * the marketplace isn't known.
37
+ */
38
+ export declare function refreshMarketplace(name: string): Promise<AddMarketplaceResult>;
26
39
  /**
27
40
  * Removes a marketplace: deletes the cached clone and the manifest entry.
28
41
  * Returns whether anything was actually removed.
@@ -40,6 +53,7 @@ export interface ListedMarketplace {
40
53
  installLocation: string;
41
54
  lastUpdated: string;
42
55
  pluginCount: number;
56
+ format: MarketplaceFormat;
43
57
  }
44
58
  /**
45
59
  * Lists all known marketplaces with a quick plugin count read from each
@@ -11,6 +11,7 @@ import { homedir } from "node:os";
11
11
  import { gitClone, gitFetchAndReset, githubRepoToCloneUrl } from "./gitOps.js";
12
12
  import { readKnownMarketplaces, upsertKnownMarketplace, removeKnownMarketplace, } from "./knownMarketplaces.js";
13
13
  import { validateMarketplace } from "./schemas.js";
14
+ import { assertSafePluginName } from "./installer/paths.js";
14
15
  function userHome() {
15
16
  return process.env.HOME ?? homedir();
16
17
  }
@@ -18,10 +19,46 @@ export function marketplacesRoot() {
18
19
  return join(userHome(), ".code-shell", "plugins", "marketplaces");
19
20
  }
20
21
  export function marketplaceDir(name) {
22
+ // Single choke point for add/remove/refresh (all derive `dir` from here and
23
+ // then gitClone / rmSync it). Validate `name` as one safe path segment so a
24
+ // `..` / separator / NUL can't escape marketplacesRoot. Normal derived names
25
+ // (lowercase repo tails) are unaffected; reuses the plugin segment guard.
26
+ assertSafePluginName(name);
21
27
  return join(marketplacesRoot(), name);
22
28
  }
29
+ const CC_MANIFEST_REL = [".claude-plugin", "marketplace.json"];
30
+ const CODEX_MANIFEST_REL = [".agents", "plugins", "marketplace.json"];
31
+ /**
32
+ * Resolve the marketplace manifest inside a cloned repo. Claude Code's format
33
+ * lives at .claude-plugin/marketplace.json; the Codex / agents format lives at
34
+ * .agents/plugins/marketplace.json. Prefer the CC manifest when present (it is
35
+ * our canonical shape), else fall back to the Codex one. Returns null when
36
+ * neither exists.
37
+ */
38
+ function resolveManifestPath(dir) {
39
+ const cc = join(dir, ...CC_MANIFEST_REL);
40
+ if (existsSync(cc))
41
+ return cc;
42
+ const codex = join(dir, ...CODEX_MANIFEST_REL);
43
+ if (existsSync(codex))
44
+ return codex;
45
+ return null;
46
+ }
23
47
  function marketplaceJsonPath(name) {
24
- return join(marketplaceDir(name), ".claude-plugin", "marketplace.json");
48
+ return resolveManifestPath(marketplaceDir(name));
49
+ }
50
+ /**
51
+ * Classify a cloned marketplace by which manifest files it ships:
52
+ * both → universal, only .agents/plugins → codex, otherwise claude-code.
53
+ */
54
+ export function detectMarketplaceFormat(dir) {
55
+ const hasCc = existsSync(join(dir, ...CC_MANIFEST_REL));
56
+ const hasCodex = existsSync(join(dir, ...CODEX_MANIFEST_REL));
57
+ if (hasCc && hasCodex)
58
+ return "universal";
59
+ if (hasCodex)
60
+ return "codex";
61
+ return "claude-code";
25
62
  }
26
63
  function sourceToCloneUrl(source) {
27
64
  return source.source === "github" ? githubRepoToCloneUrl(source.repo) : source.url;
@@ -55,11 +92,11 @@ export async function addMarketplace(name, source) {
55
92
  }
56
93
  }
57
94
  const manifestPath = marketplaceJsonPath(name);
58
- if (!existsSync(manifestPath)) {
95
+ if (!manifestPath) {
59
96
  rmSync(dir, { recursive: true, force: true });
60
97
  return {
61
98
  ok: false,
62
- error: `Marketplace ${name}: .claude-plugin/marketplace.json not found in the cloned repository.`,
99
+ error: `Marketplace ${name}: no marketplace.json found (looked in .claude-plugin/ and .agents/plugins/).`,
63
100
  };
64
101
  }
65
102
  let raw;
@@ -82,10 +119,25 @@ export async function addMarketplace(name, source) {
82
119
  source,
83
120
  installLocation: dir,
84
121
  lastUpdated: new Date().toISOString(),
122
+ format: detectMarketplaceFormat(dir),
85
123
  };
86
124
  upsertKnownMarketplace(name, entry);
87
125
  return { ok: true, name, marketplace: v.value, replaced: Boolean(existing) };
88
126
  }
127
+ /**
128
+ * Refreshes a known marketplace: re-pulls its source so the cached
129
+ * marketplace.json reflects upstream (new plugins, version bumps). Reuses
130
+ * addMarketplace's same-source path (git fetch + reset). Returns an error if
131
+ * the marketplace isn't known.
132
+ */
133
+ export async function refreshMarketplace(name) {
134
+ const known = readKnownMarketplaces();
135
+ const entry = known[name];
136
+ if (!entry) {
137
+ return { ok: false, error: `Unknown marketplace: ${name}` };
138
+ }
139
+ return addMarketplace(name, entry.source);
140
+ }
89
141
  /**
90
142
  * Removes a marketplace: deletes the cached clone and the manifest entry.
91
143
  * Returns whether anything was actually removed.
@@ -108,7 +160,7 @@ export function loadMarketplace(name) {
108
160
  if (!known[name])
109
161
  return null;
110
162
  const manifestPath = marketplaceJsonPath(name);
111
- if (!existsSync(manifestPath))
163
+ if (!manifestPath)
112
164
  return null;
113
165
  let raw;
114
166
  try {
@@ -136,6 +188,8 @@ export function listMarketplaces() {
136
188
  installLocation: entry.installLocation,
137
189
  lastUpdated: entry.lastUpdated,
138
190
  pluginCount: mp ? mp.plugins.length : -1,
191
+ // Re-detect from disk when the stored entry predates the format field.
192
+ format: entry.format ?? detectMarketplaceFormat(entry.installLocation),
139
193
  });
140
194
  }
141
195
  return out.sort((a, b) => a.name.localeCompare(b.name));
@@ -31,6 +31,8 @@
31
31
  * branch — not the CC one.
32
32
  */
33
33
  import { spawn } from "node:child_process";
34
+ import { MAX_HOOK_OUTPUT_BYTES } from "../hooks/hook-output.js";
35
+ import { killChildTree } from "../runtime/spawn-common.js";
34
36
  const DEFAULT_TIMEOUT_MS = 60_000;
35
37
  /**
36
38
  * Extract the user-facing context string from a CC plugin's stdout JSON.
@@ -99,6 +101,13 @@ export async function runPluginCommandHook(spec, ctx) {
99
101
  let stdout = "";
100
102
  let stderr = "";
101
103
  let settled = false;
104
+ // Output byte caps mirror src/hooks/shell-runner.ts so a chatty plugin
105
+ // hook can't hold engine memory hostage. Past the cap we SIGTERM the
106
+ // child and treat the hook as failed; stderr cap truncates with a
107
+ // marker instead of failing the hook.
108
+ let stdoutBytes = 0;
109
+ let stdoutCapped = false;
110
+ let stderrCapped = false;
102
111
  const settle = (value) => {
103
112
  if (settled)
104
113
  return;
@@ -108,26 +117,31 @@ export async function runPluginCommandHook(spec, ctx) {
108
117
  const timer = setTimeout(() => {
109
118
  // eslint-disable-next-line no-console
110
119
  console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} timed out after ${timeoutMs}ms`);
111
- try {
112
- child.kill("SIGTERM");
113
- setTimeout(() => {
114
- try {
115
- child.kill("SIGKILL");
116
- }
117
- catch {
118
- /* already exited */
119
- }
120
- }, 1000);
121
- }
122
- catch {
123
- /* already exited */
124
- }
120
+ // win32: taskkill /T reaps the tree; POSIX: SIGTERM → grace → SIGKILL.
121
+ killChildTree(child, 1000);
125
122
  settle({});
126
123
  }, timeoutMs);
127
124
  child.stdout?.on("data", (chunk) => {
125
+ stdoutBytes += chunk.length;
126
+ if (stdoutBytes > MAX_HOOK_OUTPUT_BYTES) {
127
+ if (!stdoutCapped) {
128
+ stdoutCapped = true;
129
+ // eslint-disable-next-line no-console
130
+ console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} stdout exceeded ${MAX_HOOK_OUTPUT_BYTES} bytes — killing`);
131
+ killChildTree(child, 1000);
132
+ }
133
+ return;
134
+ }
128
135
  stdout += chunk.toString("utf8");
129
136
  });
130
137
  child.stderr?.on("data", (chunk) => {
138
+ if (stderr.length + chunk.length > MAX_HOOK_OUTPUT_BYTES) {
139
+ if (!stderrCapped) {
140
+ stderrCapped = true;
141
+ stderr += "\n…[stderr truncated]";
142
+ }
143
+ return;
144
+ }
131
145
  stderr += chunk.toString("utf8");
132
146
  });
133
147
  child.on("error", (err) => {
@@ -138,6 +152,12 @@ export async function runPluginCommandHook(spec, ctx) {
138
152
  });
139
153
  child.on("close", (code) => {
140
154
  clearTimeout(timer);
155
+ if (stdoutCapped) {
156
+ // eslint-disable-next-line no-console
157
+ console.error(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} killed due to oversized stdout (> ${MAX_HOOK_OUTPUT_BYTES} bytes)`);
158
+ settle({});
159
+ return;
160
+ }
141
161
  if (code !== 0) {
142
162
  // eslint-disable-next-line no-console
143
163
  console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} exited ${code}; stderr:`, stderr.slice(0, 500));
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Plugin content inventory (插件详情页) — enumerate everything one installed
3
+ * plugin contributes: skills, commands, agents, hooks, MCP servers. The
4
+ * plugins list only showed "N skills", so users couldn't see what a plugin
5
+ * actually installs (feedback#15). Read-only; reuses the same parsers the
6
+ * loaders use so the inventory can't drift from what actually loads.
7
+ */
8
+ import { type PluginHookEntry } from "./loadPluginHooks.js";
9
+ export interface PluginContentInventory {
10
+ /** skills/<name>/SKILL.md — name + frontmatter description when present. */
11
+ skills: {
12
+ name: string;
13
+ description?: string;
14
+ }[];
15
+ /** commands/<name>.md */
16
+ commands: string[];
17
+ /** agents/<name>.md */
18
+ agents: string[];
19
+ /** hooks/hooks.json entries (event + command), owner-filtered. */
20
+ hooks: PluginHookEntry[];
21
+ /** MCP server names as merged (keyed `<plugin>:<server>` — bare name here). */
22
+ mcpServers: string[];
23
+ }
24
+ /**
25
+ * Inventory one plugin's contributions. `pluginName` is the bare name (no
26
+ * @marketplace); `installPath` its install dir. Hooks/MCP go through the same
27
+ * scanners the runtime loaders use (filtered to this plugin) so naming —
28
+ * e.g. MCP's `<plugin>:<server>` record keys — matches what users see live.
29
+ */
30
+ export declare function describePluginContent(pluginName: string, installPath: string): PluginContentInventory;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Plugin content inventory (插件详情页) — enumerate everything one installed
3
+ * plugin contributes: skills, commands, agents, hooks, MCP servers. The
4
+ * plugins list only showed "N skills", so users couldn't see what a plugin
5
+ * actually installs (feedback#15). Read-only; reuses the same parsers the
6
+ * loaders use so the inventory can't drift from what actually loads.
7
+ */
8
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { parseFrontmatter } from "../skills/frontmatter.js";
11
+ import { listPluginHooks } from "./loadPluginHooks.js";
12
+ import { mergePluginMcpServers } from "./installer/loadPluginMcp.js";
13
+ function listMdNames(dir) {
14
+ if (!existsSync(dir))
15
+ return [];
16
+ try {
17
+ return readdirSync(dir)
18
+ .filter((f) => f.endsWith(".md"))
19
+ .map((f) => f.replace(/\.md$/, ""))
20
+ .sort();
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ function listSkills(installPath) {
27
+ const dir = join(installPath, "skills");
28
+ if (!existsSync(dir))
29
+ return [];
30
+ const out = [];
31
+ try {
32
+ for (const entry of readdirSync(dir).sort()) {
33
+ const skillMd = join(dir, entry, "SKILL.md");
34
+ try {
35
+ if (!statSync(join(dir, entry)).isDirectory() || !existsSync(skillMd))
36
+ continue;
37
+ const { frontmatter } = parseFrontmatter(readFileSync(skillMd, "utf-8"));
38
+ const desc = typeof frontmatter.description === "string" ? frontmatter.description : undefined;
39
+ out.push({ name: entry, description: desc });
40
+ }
41
+ catch {
42
+ // unreadable skill dir — skip, same as the loader would
43
+ }
44
+ }
45
+ }
46
+ catch {
47
+ return [];
48
+ }
49
+ return out;
50
+ }
51
+ /**
52
+ * Inventory one plugin's contributions. `pluginName` is the bare name (no
53
+ * @marketplace); `installPath` its install dir. Hooks/MCP go through the same
54
+ * scanners the runtime loaders use (filtered to this plugin) so naming —
55
+ * e.g. MCP's `<plugin>:<server>` record keys — matches what users see live.
56
+ */
57
+ export function describePluginContent(pluginName, installPath) {
58
+ const mcpPrefix = `${pluginName}:`;
59
+ let mcpServers = [];
60
+ try {
61
+ mcpServers = Object.keys(mergePluginMcpServers({}))
62
+ .filter((k) => k.startsWith(mcpPrefix))
63
+ .map((k) => k.slice(mcpPrefix.length))
64
+ .sort();
65
+ }
66
+ catch {
67
+ mcpServers = [];
68
+ }
69
+ let hooks = [];
70
+ try {
71
+ hooks = listPluginHooks().filter((h) => h.plugin === pluginName);
72
+ }
73
+ catch {
74
+ hooks = [];
75
+ }
76
+ return {
77
+ skills: listSkills(installPath),
78
+ commands: listMdNames(join(installPath, "commands")),
79
+ agents: listMdNames(join(installPath, "agents")),
80
+ hooks,
81
+ mcpServers,
82
+ };
83
+ }
@@ -5,6 +5,30 @@
5
5
  * sparse-checkout, no npm/pip.
6
6
  */
7
7
  import type { PluginInstallEntry } from "./types.js";
8
+ /**
9
+ * Compose the on-disk cache directory for a plugin version. Every path segment
10
+ * (marketplace / plugin / version) can originate from an attacker-controlled
11
+ * marketplace manifest, so each must be validated as a single safe path
12
+ * segment before it enters `join`. Without this a manifest entry named `..`
13
+ * (or containing a separator) would let the materialized plugin tree be
14
+ * written outside the plugin cache root — a supply-chain path traversal.
15
+ *
16
+ * Reuses `assertSafePluginName` (rejects empty / "." / ".." / separators /
17
+ * NUL). Exported so the segment-validation contract can be unit-tested
18
+ * directly.
19
+ */
20
+ export declare function pluginCacheDir(marketplace: string, plugin: string, version: string): string;
21
+ /**
22
+ * Resolve a candidate `installPath` to a realpath and verify it lives strictly
23
+ * underneath the plugin cache root. Returns the resolved path on success, or
24
+ * null when the path is missing, escapes the cache, equals the cache root
25
+ * itself, or is otherwise unsafe to remove.
26
+ *
27
+ * Exported so tests can exercise the safety predicate directly without
28
+ * arranging a full uninstall — the contract this defends (no rmSync outside
29
+ * the plugin cache) is the entire point of T2 / Workstream A2.
30
+ */
31
+ export declare function resolveSafePluginPath(installPath: string, cacheRoot: string): string | null;
8
32
  export interface VarRewriteReport {
9
33
  filesScanned: number;
10
34
  filesRewritten: number;
@@ -18,6 +42,16 @@ export type InstallResult = {
18
42
  ok: false;
19
43
  error: string;
20
44
  };
45
+ /**
46
+ * Compare a marketplace-declared SHA against the cloned HEAD. The
47
+ * declaration is allowed to be a short prefix (>= 7 chars, standard git
48
+ * abbreviation length); for stricter integrity guarantees marketplaces
49
+ * should pin the full 40-char hash. Case-insensitive.
50
+ *
51
+ * Exported so a unit test can pin the policy without spinning up a real
52
+ * clone.
53
+ */
54
+ export declare function shaMatches(declared: string, actual: string): boolean;
21
55
  /**
22
56
  * Install a plugin from a previously-added marketplace into the user
23
57
  * cache. Idempotent within a process: re-installing replaces the