@cjhyy/code-shell-core 0.7.0 → 0.8.0

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 (621) hide show
  1. package/README.md +36 -23
  2. package/dist/agent/agent-definition-registry.d.ts +2 -2
  3. package/dist/agent/agent-definition-registry.js +47 -10
  4. package/dist/agent/agent-definition.d.ts +5 -0
  5. package/dist/agent/agent-definition.js +14 -0
  6. package/dist/automation/index.d.ts +7 -4
  7. package/dist/automation/index.js +4 -2
  8. package/dist/automation/runner.js +3 -1
  9. package/dist/automation/scheduler.d.ts +57 -1
  10. package/dist/automation/scheduler.js +123 -23
  11. package/dist/automation/store.d.ts +6 -2
  12. package/dist/automation/store.js +7 -3
  13. package/dist/capabilities/index.d.ts +109 -0
  14. package/dist/capabilities/index.js +80 -0
  15. package/dist/capability-control/disabled-lists.d.ts +2 -1
  16. package/dist/capability-control/disabled-lists.js +3 -5
  17. package/dist/capability-control/overlay.d.ts +14 -1
  18. package/dist/capability-control/overlay.js +40 -0
  19. package/dist/capability-control/service.js +6 -4
  20. package/dist/cli/agent-server-stdio.d.ts +1 -1
  21. package/dist/cli/agent-server-stdio.js +66 -6
  22. package/dist/cli/agent-server-tcp.js +20 -5
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +20 -4
  26. package/dist/context/manager.js +42 -7
  27. package/dist/context/token-counter.js +5 -3
  28. package/dist/context/tool-result-storage.d.ts +6 -0
  29. package/dist/context/tool-result-storage.js +25 -4
  30. package/dist/credentials/access.d.ts +13 -2
  31. package/dist/credentials/access.js +99 -4
  32. package/dist/credentials/index.d.ts +3 -2
  33. package/dist/credentials/index.js +2 -1
  34. package/dist/credentials/oauth.d.ts +9 -1
  35. package/dist/credentials/oauth.js +80 -1
  36. package/dist/credentials/store.d.ts +16 -2
  37. package/dist/credentials/store.js +33 -11
  38. package/dist/credentials/types.d.ts +62 -1
  39. package/dist/credentials/types.js +16 -1
  40. package/dist/credentials/use-credential-tool.js +15 -1
  41. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  42. package/dist/engine/auxiliary-pipeline.js +181 -0
  43. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  44. package/dist/{settings → engine}/disk-defaults.js +5 -2
  45. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  46. package/dist/engine/dynamic-tool-defs.js +4 -0
  47. package/dist/engine/engine.d.ts +272 -184
  48. package/dist/engine/engine.js +1869 -1864
  49. package/dist/engine/file-history-hook.d.ts +11 -0
  50. package/dist/engine/file-history-hook.js +31 -0
  51. package/dist/engine/goal-judge-context.d.ts +9 -0
  52. package/dist/engine/goal-judge-context.js +234 -0
  53. package/dist/engine/injected-context-cache.d.ts +6 -0
  54. package/dist/engine/injected-context-cache.js +13 -0
  55. package/dist/engine/input-attachments.d.ts +1 -1
  56. package/dist/engine/model-facade.d.ts +3 -3
  57. package/dist/engine/model-facade.js +15 -14
  58. package/dist/engine/permission-controller.d.ts +55 -0
  59. package/dist/engine/permission-controller.js +148 -0
  60. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  61. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  62. package/dist/engine/run-accounting.d.ts +41 -0
  63. package/dist/engine/run-accounting.js +126 -0
  64. package/dist/engine/run-context.d.ts +44 -0
  65. package/dist/engine/run-context.js +88 -0
  66. package/dist/engine/run-environment.d.ts +30 -0
  67. package/dist/engine/run-environment.js +77 -0
  68. package/dist/engine/run-finalize.d.ts +58 -0
  69. package/dist/engine/run-finalize.js +245 -0
  70. package/dist/engine/run-goal.d.ts +58 -0
  71. package/dist/engine/run-goal.js +188 -0
  72. package/dist/engine/run-image-input.d.ts +1 -1
  73. package/dist/engine/run-image-input.js +5 -3
  74. package/dist/engine/run-session-open.d.ts +41 -0
  75. package/dist/engine/run-session-open.js +186 -0
  76. package/dist/engine/run-setup.d.ts +42 -0
  77. package/dist/engine/run-setup.js +58 -0
  78. package/dist/engine/run-tooling.d.ts +125 -0
  79. package/dist/engine/run-tooling.js +283 -0
  80. package/dist/engine/run-types.d.ts +139 -0
  81. package/dist/engine/run-types.js +12 -0
  82. package/dist/engine/run-workspace.d.ts +50 -0
  83. package/dist/engine/run-workspace.js +114 -0
  84. package/dist/engine/session-title.d.ts +2 -1
  85. package/dist/engine/session-title.js +4 -1
  86. package/dist/engine/steer-queue.d.ts +1 -1
  87. package/dist/engine/subagent-spawner.d.ts +32 -0
  88. package/dist/engine/subagent-spawner.js +287 -0
  89. package/dist/engine/tool-summary.d.ts +2 -2
  90. package/dist/engine/tool-summary.js +2 -2
  91. package/dist/engine/turn-loop.d.ts +67 -10
  92. package/dist/engine/turn-loop.js +538 -97
  93. package/dist/engine/types.d.ts +35 -4
  94. package/dist/engine/types.js +1 -1
  95. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
  96. package/dist/goal/lifecycle.js +482 -0
  97. package/dist/hooks/events.d.ts +26 -9
  98. package/dist/hooks/events.js +0 -3
  99. package/dist/hooks/goal-stop-hook.d.ts +28 -29
  100. package/dist/hooks/goal-stop-hook.js +344 -144
  101. package/dist/hooks/registry.js +4 -1
  102. package/dist/hooks/shell-runner.d.ts +12 -1
  103. package/dist/hooks/shell-runner.js +160 -9
  104. package/dist/index.d.ts +51 -110
  105. package/dist/index.extension.d.ts +51 -0
  106. package/dist/index.extension.js +39 -0
  107. package/dist/index.internal.d.ts +86 -0
  108. package/dist/index.internal.js +92 -0
  109. package/dist/index.js +37 -125
  110. package/dist/links/cli.d.ts +48 -0
  111. package/dist/links/cli.js +617 -0
  112. package/dist/links/http.d.ts +40 -0
  113. package/dist/links/http.js +166 -0
  114. package/dist/links/index.d.ts +4 -0
  115. package/dist/links/index.js +3 -0
  116. package/dist/links/link-action-tool.d.ts +5 -0
  117. package/dist/links/link-action-tool.js +241 -0
  118. package/dist/links/providers.d.ts +8 -0
  119. package/dist/links/providers.js +665 -0
  120. package/dist/links/types.d.ts +44 -0
  121. package/dist/llm/client-base.d.ts +7 -0
  122. package/dist/llm/client-base.js +72 -10
  123. package/dist/llm/model-pool.d.ts +1 -1
  124. package/dist/llm/model-pool.js +1 -1
  125. package/dist/llm/providers/anthropic.d.ts +1 -0
  126. package/dist/llm/providers/anthropic.js +9 -0
  127. package/dist/llm/providers/openai.d.ts +1 -0
  128. package/dist/llm/providers/openai.js +17 -0
  129. package/dist/llm/types.d.ts +12 -5
  130. package/dist/model-catalog/index.js +15 -2
  131. package/dist/model-catalog/resolve.d.ts +13 -1
  132. package/dist/model-catalog/resolve.js +37 -2
  133. package/dist/model-catalog/types.d.ts +74 -48
  134. package/dist/model-catalog/types.js +16 -5
  135. package/dist/model-catalog/upsert.d.ts +3 -1
  136. package/dist/model-catalog/upsert.js +9 -0
  137. package/dist/onboarding.d.ts +0 -1
  138. package/dist/onboarding.js +1 -22
  139. package/dist/panel-apps/bindings.d.ts +24 -0
  140. package/dist/panel-apps/bindings.js +69 -0
  141. package/dist/panel-apps/github-archive.d.ts +21 -0
  142. package/dist/panel-apps/github-archive.js +98 -0
  143. package/dist/panel-apps/index.d.ts +4 -0
  144. package/dist/panel-apps/index.js +4 -0
  145. package/dist/panel-apps/installer.d.ts +68 -0
  146. package/dist/panel-apps/installer.js +622 -0
  147. package/dist/panel-apps/manifest.d.ts +364 -0
  148. package/dist/panel-apps/manifest.js +189 -0
  149. package/dist/panel-apps/paths.d.ts +13 -0
  150. package/dist/panel-apps/paths.js +38 -0
  151. package/dist/panel-apps/registry.d.ts +51 -0
  152. package/dist/panel-apps/registry.js +99 -0
  153. package/dist/panel-apps/runtime.d.ts +80 -0
  154. package/dist/panel-apps/runtime.js +154 -0
  155. package/dist/plugins/gitOps.js +8 -1
  156. package/dist/plugins/installedPlugins.d.ts +2 -1
  157. package/dist/plugins/installedPlugins.js +146 -8
  158. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  159. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  160. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  161. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  162. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  163. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  164. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  165. package/dist/plugins/installer/install.d.ts +7 -1
  166. package/dist/plugins/installer/install.js +21 -87
  167. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  168. package/dist/plugins/installer/installFromArchive.js +44 -27
  169. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  170. package/dist/plugins/installer/installFromNpm.js +273 -0
  171. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  172. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  173. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  174. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  175. package/dist/plugins/installer/normalizeManifest.js +306 -0
  176. package/dist/plugins/installer/npmTar.d.ts +13 -0
  177. package/dist/plugins/installer/npmTar.js +321 -0
  178. package/dist/plugins/installer/parseSource.d.ts +11 -0
  179. package/dist/plugins/installer/parseSource.js +48 -0
  180. package/dist/plugins/installer/preview.d.ts +101 -0
  181. package/dist/plugins/installer/preview.js +336 -0
  182. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  183. package/dist/plugins/installer/projectPluginSource.js +140 -0
  184. package/dist/plugins/installer/types.d.ts +775 -0
  185. package/dist/plugins/installer/types.js +100 -0
  186. package/dist/plugins/installer/unzip.d.ts +11 -0
  187. package/dist/plugins/installer/unzip.js +123 -9
  188. package/dist/plugins/installer/update.d.ts +2 -2
  189. package/dist/plugins/installer/update.js +43 -4
  190. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  191. package/dist/plugins/loadPluginHooks.js +97 -86
  192. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  193. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  194. package/dist/plugins/pluginCatalog.d.ts +45 -0
  195. package/dist/plugins/pluginCatalog.js +87 -0
  196. package/dist/plugins/pluginCommandHook.d.ts +10 -4
  197. package/dist/plugins/pluginCommandHook.js +133 -18
  198. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  199. package/dist/plugins/pluginCommandsLoader.js +181 -7
  200. package/dist/plugins/pluginContent.d.ts +10 -1
  201. package/dist/plugins/pluginContent.js +87 -30
  202. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  203. package/dist/plugins/pluginHookApproval.js +160 -0
  204. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  205. package/dist/plugins/pluginHookIntegrity.js +361 -0
  206. package/dist/plugins/pluginInstaller.js +71 -12
  207. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  208. package/dist/plugins/pluginMcpApproval.js +110 -0
  209. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  210. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  211. package/dist/plugins/types.d.ts +30 -0
  212. package/dist/plugins/varRewrite.d.ts +9 -5
  213. package/dist/plugins/varRewrite.js +26 -17
  214. package/dist/preset/index.d.ts +11 -8
  215. package/dist/preset/index.js +62 -203
  216. package/dist/product/define.js +9 -3
  217. package/dist/product/types.d.ts +0 -2
  218. package/dist/profile/activation.d.ts +36 -0
  219. package/dist/profile/activation.js +57 -0
  220. package/dist/profile/catalog-store.d.ts +77 -0
  221. package/dist/profile/catalog-store.js +346 -0
  222. package/dist/profile/catalog.d.ts +54 -0
  223. package/dist/profile/catalog.js +152 -0
  224. package/dist/profile/index.d.ts +7 -0
  225. package/dist/profile/index.js +7 -0
  226. package/dist/profile/requirements.d.ts +76 -0
  227. package/dist/profile/requirements.js +117 -0
  228. package/dist/profile/resolve.d.ts +11 -0
  229. package/dist/profile/resolve.js +41 -0
  230. package/dist/profile/store.d.ts +17 -0
  231. package/dist/profile/store.js +167 -0
  232. package/dist/profile/types.d.ts +321 -0
  233. package/dist/profile/types.js +104 -0
  234. package/dist/prompt/composer.d.ts +46 -7
  235. package/dist/prompt/composer.js +78 -48
  236. package/dist/prompt/instruction-scanner.d.ts +6 -5
  237. package/dist/prompt/instruction-scanner.js +8 -23
  238. package/dist/prompt/section-loader.d.ts +2 -2
  239. package/dist/prompt/section-loader.js +7 -4
  240. package/dist/prompt/sections/browser.md +10 -9
  241. package/dist/prompt/sections/harness-base.md +9 -0
  242. package/dist/protocol/chat-session-manager.d.ts +77 -3
  243. package/dist/protocol/chat-session-manager.js +194 -18
  244. package/dist/protocol/chat-session.d.ts +72 -9
  245. package/dist/protocol/chat-session.js +151 -16
  246. package/dist/protocol/client.d.ts +37 -4
  247. package/dist/protocol/client.js +118 -6
  248. package/dist/protocol/index.d.ts +2 -2
  249. package/dist/protocol/index.js +2 -2
  250. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  251. package/dist/protocol/mobile-remote-types.js +1 -0
  252. package/dist/protocol/server.d.ts +152 -14
  253. package/dist/protocol/server.js +1574 -229
  254. package/dist/protocol/types.d.ts +182 -32
  255. package/dist/protocol/types.js +18 -0
  256. package/dist/run/ArtifactTracker.d.ts +6 -1
  257. package/dist/run/ArtifactTracker.js +29 -21
  258. package/dist/run/EngineRunner.d.ts +2 -0
  259. package/dist/run/EngineRunner.js +1 -0
  260. package/dist/run/RunManager.d.ts +26 -0
  261. package/dist/run/RunManager.js +82 -11
  262. package/dist/run/factory.d.ts +3 -0
  263. package/dist/run/factory.js +2 -0
  264. package/dist/runtime/safe-spawn.d.ts +6 -0
  265. package/dist/runtime/safe-spawn.js +8 -13
  266. package/dist/services/auto-dream.d.ts +13 -1
  267. package/dist/services/auto-dream.js +56 -8
  268. package/dist/services/dream-consolidation.d.ts +3 -0
  269. package/dist/services/dream-consolidation.js +14 -2
  270. package/dist/services/index.d.ts +1 -1
  271. package/dist/services/index.js +1 -1
  272. package/dist/services/memory-orchestrator.js +6 -2
  273. package/dist/services/oauth.d.ts +34 -10
  274. package/dist/services/oauth.js +236 -98
  275. package/dist/services/session-memory.d.ts +4 -4
  276. package/dist/services/session-memory.js +13 -10
  277. package/dist/session/memory.d.ts +26 -7
  278. package/dist/session/memory.js +79 -21
  279. package/dist/session/session-manager.d.ts +208 -25
  280. package/dist/session/session-manager.js +1232 -116
  281. package/dist/session/session-message.d.ts +22 -0
  282. package/dist/session/session-message.js +1 -0
  283. package/dist/session/transcript.d.ts +76 -6
  284. package/dist/session/transcript.js +278 -7
  285. package/dist/settings/feature-flags.d.ts +40 -0
  286. package/dist/settings/feature-flags.js +40 -0
  287. package/dist/settings/manager.d.ts +39 -1
  288. package/dist/settings/manager.js +102 -41
  289. package/dist/settings/migrate-config.js +4 -2
  290. package/dist/settings/schema.d.ts +511 -177
  291. package/dist/settings/schema.js +98 -25
  292. package/dist/skills/scanner.d.ts +6 -2
  293. package/dist/skills/scanner.js +160 -9
  294. package/dist/sources/adapter.d.ts +14 -0
  295. package/dist/sources/adapter.js +7 -0
  296. package/dist/sources/adapters/local-files.d.ts +10 -0
  297. package/dist/sources/adapters/local-files.js +127 -0
  298. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  299. package/dist/sources/adapters/mcp-resource.js +41 -0
  300. package/dist/sources/adapters/mock.d.ts +3 -0
  301. package/dist/sources/adapters/mock.js +29 -0
  302. package/dist/sources/binding.d.ts +6 -0
  303. package/dist/sources/binding.js +24 -0
  304. package/dist/sources/catalog.d.ts +6 -0
  305. package/dist/sources/catalog.js +64 -0
  306. package/dist/sources/context-summary.d.ts +8 -0
  307. package/dist/sources/context-summary.js +13 -0
  308. package/dist/sources/credential-status.d.ts +2 -0
  309. package/dist/sources/credential-status.js +13 -0
  310. package/dist/sources/index.d.ts +10 -0
  311. package/dist/sources/index.js +10 -0
  312. package/dist/sources/resolve.d.ts +28 -0
  313. package/dist/sources/resolve.js +47 -0
  314. package/dist/sources/truncate-utf8.d.ts +7 -0
  315. package/dist/sources/truncate-utf8.js +18 -0
  316. package/dist/sources/types.d.ts +71 -0
  317. package/dist/sources/types.js +26 -0
  318. package/dist/testing/fetch-stub.d.ts +32 -0
  319. package/dist/testing/fetch-stub.js +24 -0
  320. package/dist/themes/image.d.ts +18 -0
  321. package/dist/themes/image.js +117 -0
  322. package/dist/themes/index.d.ts +4 -0
  323. package/dist/themes/index.js +4 -0
  324. package/dist/themes/installer.d.ts +50 -0
  325. package/dist/themes/installer.js +290 -0
  326. package/dist/themes/manifest.d.ts +102 -0
  327. package/dist/themes/manifest.js +86 -0
  328. package/dist/themes/paths.d.ts +14 -0
  329. package/dist/themes/paths.js +33 -0
  330. package/dist/tool-system/browser-bridge.d.ts +53 -11
  331. package/dist/tool-system/browser-bridge.js +8 -9
  332. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  333. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  334. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  335. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  336. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  337. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  338. package/dist/tool-system/builtin/agent-progress.js +83 -0
  339. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  340. package/dist/tool-system/builtin/agent-registry.js +178 -9
  341. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  342. package/dist/tool-system/builtin/agent.d.ts +2 -0
  343. package/dist/tool-system/builtin/agent.js +279 -34
  344. package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
  345. package/dist/tool-system/builtin/background-jobs.js +111 -15
  346. package/dist/tool-system/builtin/background-work.d.ts +12 -1
  347. package/dist/tool-system/builtin/background-work.js +12 -1
  348. package/dist/tool-system/builtin/bash.d.ts +3 -5
  349. package/dist/tool-system/builtin/bash.js +14 -6
  350. package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
  351. package/dist/tool-system/builtin/browser-tools.js +89 -23
  352. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  353. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  354. package/dist/tool-system/builtin/edit.d.ts +2 -1
  355. package/dist/tool-system/builtin/edit.js +14 -10
  356. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  357. package/dist/tool-system/builtin/file-cache.js +4 -0
  358. package/dist/tool-system/builtin/generate-image.js +17 -10
  359. package/dist/tool-system/builtin/generate-video.d.ts +4 -0
  360. package/dist/tool-system/builtin/generate-video.js +164 -28
  361. package/dist/tool-system/builtin/glob.d.ts +2 -1
  362. package/dist/tool-system/builtin/glob.js +28 -3
  363. package/dist/tool-system/builtin/grep.d.ts +1 -0
  364. package/dist/tool-system/builtin/grep.js +82 -17
  365. package/dist/tool-system/builtin/image-uploader.js +7 -1
  366. package/dist/tool-system/builtin/index.d.ts +57 -18
  367. package/dist/tool-system/builtin/index.js +280 -167
  368. package/dist/tool-system/builtin/memory.d.ts +6 -0
  369. package/dist/tool-system/builtin/memory.js +36 -15
  370. package/dist/tool-system/builtin/panel.d.ts +9 -0
  371. package/dist/tool-system/builtin/panel.js +314 -0
  372. package/dist/tool-system/builtin/read.js +5 -1
  373. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  374. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  375. package/dist/tool-system/builtin/sources.d.ts +8 -0
  376. package/dist/tool-system/builtin/sources.js +137 -0
  377. package/dist/tool-system/builtin/tool-search.js +7 -2
  378. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  379. package/dist/tool-system/builtin/video-providers.d.ts +12 -15
  380. package/dist/tool-system/builtin/video-providers.js +1 -0
  381. package/dist/tool-system/builtin/view-image.d.ts +2 -2
  382. package/dist/tool-system/builtin/web-fetch.js +60 -15
  383. package/dist/tool-system/builtin/web-search.js +1 -3
  384. package/dist/tool-system/builtin/write.d.ts +2 -1
  385. package/dist/tool-system/builtin/write.js +14 -4
  386. package/dist/tool-system/capability-module.d.ts +93 -0
  387. package/dist/tool-system/capability-module.js +53 -0
  388. package/dist/tool-system/context.d.ts +94 -24
  389. package/dist/tool-system/executor.js +99 -58
  390. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  391. package/dist/tool-system/external-tool-exposure.js +304 -0
  392. package/dist/tool-system/mcp-manager.d.ts +17 -1
  393. package/dist/tool-system/mcp-manager.js +72 -7
  394. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  395. package/dist/tool-system/mcp-tool-policy.js +34 -0
  396. package/dist/tool-system/panel-bridge.d.ts +53 -0
  397. package/dist/tool-system/panel-bridge.js +1 -0
  398. package/dist/tool-system/path-policy.d.ts +19 -0
  399. package/dist/tool-system/path-policy.js +62 -1
  400. package/dist/tool-system/permission.d.ts +69 -3
  401. package/dist/tool-system/permission.js +429 -30
  402. package/dist/tool-system/registry.d.ts +15 -3
  403. package/dist/tool-system/registry.js +82 -40
  404. package/dist/tool-system/sandbox/index.js +3 -8
  405. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  406. package/dist/tool-system/session-tool-host.d.ts +139 -0
  407. package/dist/tool-system/session-tool-host.js +167 -0
  408. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  409. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  410. package/dist/tool-system/validation.d.ts +14 -7
  411. package/dist/tool-system/validation.js +701 -7
  412. package/dist/types.d.ts +201 -20
  413. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  414. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  415. package/dist/utils/file-mutex.d.ts +65 -0
  416. package/dist/utils/file-mutex.js +145 -0
  417. package/dist/utils/json.d.ts +2 -4
  418. package/dist/utils/json.js +2 -4
  419. package/dist/utils/lockfile.d.ts +30 -1
  420. package/dist/utils/lockfile.js +2 -2
  421. package/dist/utils/secret-scrubber.d.ts +8 -0
  422. package/dist/utils/secret-scrubber.js +227 -0
  423. package/dist/utils/toolDisplay.js +1 -1
  424. package/package.json +20 -5
  425. package/THIRD_PARTY_NOTICES.md +0 -206
  426. package/dist/arena/arena.d.ts +0 -43
  427. package/dist/arena/arena.js +0 -333
  428. package/dist/arena/context/context-tools.d.ts +0 -16
  429. package/dist/arena/context/context-tools.js +0 -272
  430. package/dist/arena/context/within-root.d.ts +0 -7
  431. package/dist/arena/context/within-root.js +0 -15
  432. package/dist/arena/detect-mode.d.ts +0 -20
  433. package/dist/arena/detect-mode.js +0 -78
  434. package/dist/arena/digest-builder.d.ts +0 -25
  435. package/dist/arena/digest-builder.js +0 -120
  436. package/dist/arena/index.d.ts +0 -29
  437. package/dist/arena/index.js +0 -29
  438. package/dist/arena/iterate/convergence.d.ts +0 -25
  439. package/dist/arena/iterate/convergence.js +0 -103
  440. package/dist/arena/iterate/formats/index.d.ts +0 -22
  441. package/dist/arena/iterate/formats/index.js +0 -283
  442. package/dist/arena/iterate/index.d.ts +0 -11
  443. package/dist/arena/iterate/index.js +0 -9
  444. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  445. package/dist/arena/iterate/iterative-arena.js +0 -237
  446. package/dist/arena/iterate/parse.d.ts +0 -42
  447. package/dist/arena/iterate/parse.js +0 -123
  448. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  449. package/dist/arena/iterate/phases/argue.js +0 -165
  450. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  451. package/dist/arena/iterate/phases/revise.js +0 -62
  452. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  453. package/dist/arena/iterate/phases/tournament.js +0 -113
  454. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  455. package/dist/arena/iterate/tools/web-tools.js +0 -54
  456. package/dist/arena/iterate/types.d.ts +0 -152
  457. package/dist/arena/iterate/types.js +0 -8
  458. package/dist/arena/ledger.d.ts +0 -47
  459. package/dist/arena/ledger.js +0 -159
  460. package/dist/arena/lenses/architecture.d.ts +0 -5
  461. package/dist/arena/lenses/architecture.js +0 -22
  462. package/dist/arena/lenses/engineering.d.ts +0 -5
  463. package/dist/arena/lenses/engineering.js +0 -22
  464. package/dist/arena/lenses/general.d.ts +0 -5
  465. package/dist/arena/lenses/general.js +0 -20
  466. package/dist/arena/lenses/index.d.ts +0 -16
  467. package/dist/arena/lenses/index.js +0 -47
  468. package/dist/arena/lenses/product.d.ts +0 -5
  469. package/dist/arena/lenses/product.js +0 -22
  470. package/dist/arena/model-presets.d.ts +0 -23
  471. package/dist/arena/model-presets.js +0 -44
  472. package/dist/arena/phases/adjudication.d.ts +0 -24
  473. package/dist/arena/phases/adjudication.js +0 -141
  474. package/dist/arena/phases/build-consensus.d.ts +0 -29
  475. package/dist/arena/phases/build-consensus.js +0 -83
  476. package/dist/arena/phases/claim-registry.d.ts +0 -26
  477. package/dist/arena/phases/claim-registry.js +0 -60
  478. package/dist/arena/phases/cross-review.d.ts +0 -45
  479. package/dist/arena/phases/cross-review.js +0 -218
  480. package/dist/arena/phases/debate-rounds.d.ts +0 -27
  481. package/dist/arena/phases/debate-rounds.js +0 -159
  482. package/dist/arena/phases/participant-research.d.ts +0 -38
  483. package/dist/arena/phases/participant-research.js +0 -314
  484. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
  485. package/dist/arena/phases/planning-detail-expansion.js +0 -119
  486. package/dist/arena/planner.d.ts +0 -27
  487. package/dist/arena/planner.js +0 -311
  488. package/dist/arena/providers/docs.d.ts +0 -7
  489. package/dist/arena/providers/docs.js +0 -111
  490. package/dist/arena/providers/git.d.ts +0 -8
  491. package/dist/arena/providers/git.js +0 -174
  492. package/dist/arena/providers/index.d.ts +0 -32
  493. package/dist/arena/providers/index.js +0 -132
  494. package/dist/arena/providers/none.d.ts +0 -7
  495. package/dist/arena/providers/none.js +0 -11
  496. package/dist/arena/providers/repo.d.ts +0 -7
  497. package/dist/arena/providers/repo.js +0 -258
  498. package/dist/arena/render/session.d.ts +0 -17
  499. package/dist/arena/render/session.js +0 -190
  500. package/dist/arena/render/terminal.d.ts +0 -34
  501. package/dist/arena/render/terminal.js +0 -286
  502. package/dist/arena/strategies/discussion.d.ts +0 -25
  503. package/dist/arena/strategies/discussion.js +0 -143
  504. package/dist/arena/strategies/index.d.ts +0 -15
  505. package/dist/arena/strategies/index.js +0 -28
  506. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  507. package/dist/arena/strategies/language-wrapper.js +0 -102
  508. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  509. package/dist/arena/strategies/lens-wrapper.js +0 -236
  510. package/dist/arena/strategies/planning.d.ts +0 -30
  511. package/dist/arena/strategies/planning.js +0 -225
  512. package/dist/arena/strategies/review.d.ts +0 -26
  513. package/dist/arena/strategies/review.js +0 -168
  514. package/dist/arena/strategies/utils.d.ts +0 -36
  515. package/dist/arena/strategies/utils.js +0 -603
  516. package/dist/arena/tools/selector.d.ts +0 -17
  517. package/dist/arena/tools/selector.js +0 -61
  518. package/dist/arena/transitions.d.ts +0 -53
  519. package/dist/arena/transitions.js +0 -97
  520. package/dist/arena/types.d.ts +0 -514
  521. package/dist/arena/types.js +0 -27
  522. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  523. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  524. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  525. package/dist/cc-orchestrator/cc-capability.js +0 -53
  526. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  527. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  528. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  529. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  530. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  531. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  532. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  533. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  534. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  535. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  536. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  537. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  538. package/dist/cc-orchestrator/index.d.ts +0 -8
  539. package/dist/cc-orchestrator/index.js +0 -8
  540. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  541. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  542. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  543. package/dist/cc-orchestrator/session-discovery.js +0 -125
  544. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  545. package/dist/cc-orchestrator/session-history.js +0 -150
  546. package/dist/cron/cron-runtime.d.ts +0 -2
  547. package/dist/cron/cron-runtime.js +0 -2
  548. package/dist/cron/cron-store.d.ts +0 -2
  549. package/dist/cron/cron-store.js +0 -2
  550. package/dist/cron/scheduler.d.ts +0 -7
  551. package/dist/cron/scheduler.js +0 -7
  552. package/dist/engine/goal.js +0 -206
  553. package/dist/external-agents/config.d.ts +0 -2
  554. package/dist/external-agents/config.js +0 -15
  555. package/dist/external-agents/types.d.ts +0 -31
  556. package/dist/git/parse-log.d.ts +0 -13
  557. package/dist/git/parse-log.js +0 -21
  558. package/dist/git/utils.d.ts +0 -49
  559. package/dist/git/utils.js +0 -161
  560. package/dist/git/worktree/crud.d.ts +0 -69
  561. package/dist/git/worktree/crud.js +0 -206
  562. package/dist/git/worktree/diff.d.ts +0 -14
  563. package/dist/git/worktree/diff.js +0 -82
  564. package/dist/git/worktree/git-exec.d.ts +0 -7
  565. package/dist/git/worktree/git-exec.js +0 -51
  566. package/dist/git/worktree/index.d.ts +0 -5
  567. package/dist/git/worktree/index.js +0 -5
  568. package/dist/git/worktree/query.d.ts +0 -42
  569. package/dist/git/worktree/query.js +0 -121
  570. package/dist/git/worktree/slug.d.ts +0 -11
  571. package/dist/git/worktree/slug.js +0 -58
  572. package/dist/git/worktree.d.ts +0 -1
  573. package/dist/git/worktree.js +0 -5
  574. package/dist/lsp/client.d.ts +0 -41
  575. package/dist/lsp/client.js +0 -186
  576. package/dist/lsp/manager.d.ts +0 -40
  577. package/dist/lsp/manager.js +0 -155
  578. package/dist/lsp/root-path.d.ts +0 -9
  579. package/dist/lsp/root-path.js +0 -12
  580. package/dist/lsp/servers.d.ts +0 -16
  581. package/dist/lsp/servers.js +0 -60
  582. package/dist/prompt/sections/coding.md +0 -35
  583. package/dist/quota/credentials.d.ts +0 -3
  584. package/dist/quota/credentials.js +0 -80
  585. package/dist/quota/index.d.ts +0 -36
  586. package/dist/quota/index.js +0 -155
  587. package/dist/quota/types.d.ts +0 -48
  588. package/dist/quota/types.js +0 -13
  589. package/dist/review/review-prompt.d.ts +0 -28
  590. package/dist/review/review-prompt.js +0 -81
  591. package/dist/state.d.ts +0 -160
  592. package/dist/state.js +0 -267
  593. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  594. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  595. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  596. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  597. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  598. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  599. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  600. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  601. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  602. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  603. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  604. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  605. package/dist/tool-system/builtin/arena.d.ts +0 -31
  606. package/dist/tool-system/builtin/arena.js +0 -415
  607. package/dist/tool-system/builtin/brief.d.ts +0 -6
  608. package/dist/tool-system/builtin/brief.js +0 -41
  609. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  610. package/dist/tool-system/builtin/check-quota.js +0 -34
  611. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  612. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  613. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  614. package/dist/tool-system/builtin/lsp.js +0 -144
  615. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  616. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  617. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  618. package/dist/tool-system/builtin/worktree.js +0 -345
  619. /package/dist/{external-agents → links}/types.js +0 -0
  620. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  621. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,74 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstatSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ const DIGEST_DOMAIN = "codeshell-plugin-mcp-v1";
5
+ const ABSENT_MCP = "<absent>";
6
+ const UNSAFE_MCP = "<unsafe>";
7
+ const MAX_PLUGIN_MCP_CONFIG_BYTES = 1024 * 1024;
8
+ function effectiveMcpBytes(installPath) {
9
+ for (const fileName of ["mcp-servers.json", ".mcp.json"]) {
10
+ const path = join(installPath, fileName);
11
+ let info;
12
+ try {
13
+ info = lstatSync(path);
14
+ }
15
+ catch {
16
+ // mcp-servers.json wins when present; otherwise try the CC fallback.
17
+ continue;
18
+ }
19
+ if (info.isSymbolicLink() || !info.isFile() || info.size > MAX_PLUGIN_MCP_CONFIG_BYTES) {
20
+ return `${UNSAFE_MCP}:${fileName}`;
21
+ }
22
+ try {
23
+ return Buffer.concat([Buffer.from(`${fileName}\0`), readFileSync(path)]);
24
+ }
25
+ catch {
26
+ return `${UNSAFE_MCP}:${fileName}`;
27
+ }
28
+ }
29
+ return ABSENT_MCP;
30
+ }
31
+ /**
32
+ * Digest the exact effective declaration selected by the runtime. The file
33
+ * name is part of the digest so switching between native and CC shapes cannot
34
+ * inherit approval accidentally.
35
+ */
36
+ export function pluginMcpDigest(installPath) {
37
+ return createHash("sha256")
38
+ .update(DIGEST_DOMAIN)
39
+ .update("\0")
40
+ .update(effectiveMcpBytes(installPath))
41
+ .digest("hex");
42
+ }
43
+ export function verifyPluginMcpIntegrity(entry) {
44
+ if (!entry.mcpDigest)
45
+ return "legacy";
46
+ return pluginMcpDigest(entry.installPath) === entry.mcpDigest ? "verified" : "changed";
47
+ }
48
+ /**
49
+ * Compute trust for one install. The caller supplies whether the declaration
50
+ * currently normalizes to at least one runnable MCP server, keeping the trust
51
+ * layer coupled to the runtime's strict schema rather than a second parser.
52
+ */
53
+ export function pluginMcpApprovalState(entry, hasMcpServers) {
54
+ const integrity = verifyPluginMcpIntegrity(entry);
55
+ if (integrity === "changed")
56
+ return "changed";
57
+ if (!hasMcpServers)
58
+ return "none";
59
+ if (integrity === "legacy")
60
+ return "legacy";
61
+ return entry.approvedMcpDigest === entry.mcpDigest ? "approved" : "pending";
62
+ }
63
+ /**
64
+ * Fields written at install/update. Installs with runnable MCP servers start
65
+ * pending; an explicitly approved identical digest survives an update.
66
+ */
67
+ export function pluginMcpInstallRecord(installPath, hasMcpServers, previousEntries = []) {
68
+ const mcpDigest = pluginMcpDigest(installPath);
69
+ const previouslyApproved = previousEntries.some((entry) => entry.mcpDigest === mcpDigest && entry.approvedMcpDigest === entry.mcpDigest);
70
+ return {
71
+ mcpDigest,
72
+ ...(!hasMcpServers || previouslyApproved ? { approvedMcpDigest: mcpDigest } : {}),
73
+ };
74
+ }
@@ -71,6 +71,36 @@ export interface PluginInstallEntry {
71
71
  installedAt: string;
72
72
  lastUpdated: string;
73
73
  gitCommitSha?: string;
74
+ /** CodeShell extension: digest of hooks/hooks.json captured at install/update. */
75
+ hookDigest?: string;
76
+ /**
77
+ * CodeShell extension: the hook digest the user explicitly approved.
78
+ * Missing means executable hooks are pending approval. Hook-free installs
79
+ * auto-approve their absent-hooks digest so they never show a prompt.
80
+ */
81
+ approvedHookDigest?: string;
82
+ /**
83
+ * Bounded display snapshot of the last explicitly approved hook definition.
84
+ * It is non-executable review metadata used to show per-command update diffs.
85
+ */
86
+ approvedHookSnapshot?: StoredPluginHookReview[];
87
+ /** CodeShell extension: digest of the effective plugin MCP declaration. */
88
+ mcpDigest?: string;
89
+ /**
90
+ * CodeShell extension: the MCP digest the user explicitly approved.
91
+ * Missing means plugin-provided external processes / remote connections are
92
+ * pending approval. Installs without any valid MCP servers auto-approve.
93
+ */
94
+ approvedMcpDigest?: string;
95
+ }
96
+ export interface StoredPluginHookReview {
97
+ rawEvent: string;
98
+ matcher?: string;
99
+ command: string;
100
+ commandDigest: string;
101
+ commandTruncated?: boolean;
102
+ async?: boolean;
103
+ timeoutMs?: number;
74
104
  }
75
105
  export interface InstalledPluginsV2 {
76
106
  version: 2;
@@ -2,7 +2,11 @@
2
2
  * Plugin variable rewriter.
3
3
  *
4
4
  * After a plugin is materialized into the cache dir, walk its files and
5
- * rewrite every occurrence of `CLAUDE_PLUGIN_ROOT` to `CODESHELL_PLUGIN_ROOT`.
5
+ * rewrite Claude-specific plugin environment variables to CodeShell-native
6
+ * names:
7
+ *
8
+ * - `CLAUDE_PLUGIN_ROOT` → `CODESHELL_PLUGIN_ROOT`
9
+ * - `CLAUDE_PLUGIN_DATA` → `CODESHELL_PLUGIN_DATA`
6
10
  *
7
11
  * Why: plugins authored against Claude Code's protocol embed
8
12
  * `${CLAUDE_PLUGIN_ROOT}` in their hooks.json command strings and inside
@@ -32,11 +36,11 @@ export interface RewriteSummary {
32
36
  rewrittenPaths: string[];
33
37
  }
34
38
  /**
35
- * Rewrite every `CLAUDE_PLUGIN_ROOT` `CODESHELL_PLUGIN_ROOT` under
36
- * `installPath`, then drop a breadcrumb file at the root.
39
+ * Rewrite Claude-specific plugin environment variables under `installPath`,
40
+ * then drop a breadcrumb file at the root.
37
41
  *
38
42
  * Idempotent: re-running on an already-rewritten tree is a no-op for the
39
- * rewrite (no `CLAUDE_PLUGIN_ROOT` left) but refreshes the breadcrumb's
40
- * timestamp so the user can see when the most recent install/update ran.
43
+ * rewrite but refreshes the breadcrumb's timestamp so the user can see when
44
+ * the most recent install/update ran.
41
45
  */
42
46
  export declare function rewritePluginVars(installPath: string): RewriteSummary;
@@ -2,7 +2,11 @@
2
2
  * Plugin variable rewriter.
3
3
  *
4
4
  * After a plugin is materialized into the cache dir, walk its files and
5
- * rewrite every occurrence of `CLAUDE_PLUGIN_ROOT` to `CODESHELL_PLUGIN_ROOT`.
5
+ * rewrite Claude-specific plugin environment variables to CodeShell-native
6
+ * names:
7
+ *
8
+ * - `CLAUDE_PLUGIN_ROOT` → `CODESHELL_PLUGIN_ROOT`
9
+ * - `CLAUDE_PLUGIN_DATA` → `CODESHELL_PLUGIN_DATA`
6
10
  *
7
11
  * Why: plugins authored against Claude Code's protocol embed
8
12
  * `${CLAUDE_PLUGIN_ROOT}` in their hooks.json command strings and inside
@@ -28,8 +32,10 @@
28
32
  */
29
33
  import { readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
30
34
  import { join } from "node:path";
31
- const FROM = "CLAUDE_PLUGIN_ROOT";
32
- const TO = "CODESHELL_PLUGIN_ROOT";
35
+ const REWRITES = [
36
+ ["CLAUDE_PLUGIN_ROOT", "CODESHELL_PLUGIN_ROOT"],
37
+ ["CLAUDE_PLUGIN_DATA", "CODESHELL_PLUGIN_DATA"],
38
+ ];
33
39
  const SCAN_BYTES = 8192;
34
40
  function isLikelyBinary(buf) {
35
41
  const len = Math.min(buf.length, SCAN_BYTES);
@@ -72,9 +78,12 @@ function walkAndRewrite(dir, summary) {
72
78
  if (isLikelyBinary(raw))
73
79
  continue;
74
80
  const text = raw.toString("utf8");
75
- if (!text.includes(FROM))
81
+ let rewritten = text;
82
+ for (const [from, to] of REWRITES) {
83
+ rewritten = rewritten.split(from).join(to);
84
+ }
85
+ if (rewritten === text)
76
86
  continue;
77
- const rewritten = text.split(FROM).join(TO);
78
87
  try {
79
88
  writeFileSync(full, rewritten, "utf8");
80
89
  summary.filesRewritten += 1;
@@ -87,12 +96,12 @@ function walkAndRewrite(dir, summary) {
87
96
  }
88
97
  }
89
98
  /**
90
- * Rewrite every `CLAUDE_PLUGIN_ROOT` `CODESHELL_PLUGIN_ROOT` under
91
- * `installPath`, then drop a breadcrumb file at the root.
99
+ * Rewrite Claude-specific plugin environment variables under `installPath`,
100
+ * then drop a breadcrumb file at the root.
92
101
  *
93
102
  * Idempotent: re-running on an already-rewritten tree is a no-op for the
94
- * rewrite (no `CLAUDE_PLUGIN_ROOT` left) but refreshes the breadcrumb's
95
- * timestamp so the user can see when the most recent install/update ran.
103
+ * rewrite but refreshes the breadcrumb's timestamp so the user can see when
104
+ * the most recent install/update ran.
96
105
  */
97
106
  export function rewritePluginVars(installPath) {
98
107
  const summary = {
@@ -100,23 +109,23 @@ export function rewritePluginVars(installPath) {
100
109
  filesRewritten: 0,
101
110
  rewrittenPaths: [],
102
111
  };
103
- let exists = false;
104
112
  try {
105
- exists = statSync(installPath).isDirectory();
113
+ if (!statSync(installPath).isDirectory())
114
+ return summary;
106
115
  }
107
116
  catch {
108
- exists = false;
109
- }
110
- if (!exists)
111
117
  return summary;
118
+ }
112
119
  walkAndRewrite(installPath, summary);
113
120
  const breadcrumb = {
114
121
  rewrittenAt: new Date().toISOString(),
115
- from: FROM,
116
- to: TO,
122
+ // Keep the original fields for older tooling that reads this breadcrumb.
123
+ from: REWRITES[0][0],
124
+ to: REWRITES[0][1],
125
+ rewrites: REWRITES.map(([from, to]) => ({ from, to })),
117
126
  filesScanned: summary.filesScanned,
118
127
  filesRewritten: summary.filesRewritten,
119
- note: "codeshell rewrote plugin files at install time so ${CLAUDE_PLUGIN_ROOT} placeholders use codeshell's native env var. " +
128
+ note: "codeshell rewrote Claude-specific plugin environment placeholders to codeshell-native names at install time. " +
120
129
  "Upstream plugin sources are unchanged; only this local copy was modified.",
121
130
  };
122
131
  try {
@@ -8,7 +8,9 @@
8
8
  * src/prompt/sections/*.md — each preset declares which sections to include.
9
9
  */
10
10
  import type { PermissionRule } from "../types.js";
11
- export declare const AGENT_PRESET_NAMES: readonly ["general", "terminal-coding"];
11
+ import { type BuiltinTool } from "../tool-system/builtin/index.js";
12
+ import type { CapabilityModule } from "../capabilities/index.js";
13
+ export declare const AGENT_PRESET_NAMES: readonly ["harness-min", "general"];
12
14
  /** Built-in preset names. Custom presets use arbitrary strings via registerPreset(). */
13
15
  export type BuiltinPresetName = (typeof AGENT_PRESET_NAMES)[number];
14
16
  /** Any preset name — built-in or custom-registered. */
@@ -19,13 +21,12 @@ export interface AgentPreset {
19
21
  description: string;
20
22
  /** Ordered list of prompt section filenames (without .md). */
21
23
  promptSections: readonly string[];
22
- /** Whether to inject git status into system context. */
23
- injectGitStatus: boolean;
24
24
  builtinTools: string[];
25
25
  defaultPermissionRules: PermissionRule[];
26
26
  }
27
- export declare const BUILTIN_AGENT_PRESETS: Record<AgentPresetName, AgentPreset>;
27
+ export declare const BUILTIN_AGENT_PRESETS: Record<BuiltinPresetName, AgentPreset>;
28
28
  export declare const DEFAULT_AGENT_PRESET: AgentPresetName;
29
+ /** @deprecated Product hosts should install a capability with `defaultPreset`. */
29
30
  export declare const DEFAULT_CLI_PRESET: AgentPresetName;
30
31
  /**
31
32
  * Register a custom agent preset.
@@ -39,7 +40,6 @@ export declare const DEFAULT_CLI_PRESET: AgentPresetName;
39
40
  * label: "Data Pipeline Orchestrator",
40
41
  * description: "Manages ETL workflows and data quality checks.",
41
42
  * promptSections: ["base", "orchestration"],
42
- * injectGitStatus: false,
43
43
  * builtinTools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent"],
44
44
  * defaultPermissionRules: [{ tool: "Read", decision: "allow" }],
45
45
  * });
@@ -47,11 +47,13 @@ export declare const DEFAULT_CLI_PRESET: AgentPresetName;
47
47
  */
48
48
  export declare function registerPreset(preset: AgentPreset): void;
49
49
  /** List all available preset names (built-in + custom). */
50
- export declare function listPresetNames(): string[];
51
- export declare function resolveAgentPreset(name?: string): AgentPreset;
50
+ export declare function listPresetNames(capabilities?: readonly CapabilityModule[]): string[];
51
+ export declare function resolveAgentPreset(name?: string, capabilities?: readonly CapabilityModule[]): AgentPreset;
52
52
  export interface BuildPresetSystemPromptOptions {
53
53
  activeToolNames?: readonly string[];
54
54
  platform?: NodeJS.Platform;
55
+ promptSections?: Readonly<Record<string, string>>;
56
+ toolCatalog?: readonly BuiltinTool[];
55
57
  }
56
58
  /**
57
59
  * Build the full system prompt for a preset by loading and joining its sections.
@@ -65,7 +67,8 @@ export interface BuildPresetSystemPromptOptions {
65
67
  export declare function buildPresetSystemPrompt(preset: AgentPreset, optionsOrActiveToolNames?: BuildPresetSystemPromptOptions | readonly string[]): string;
66
68
  export declare function resolveBuiltinToolNames(options?: {
67
69
  preset?: string;
68
- host?: "desktop";
70
+ host?: string;
69
71
  enabledBuiltinTools?: string[];
70
72
  disabledBuiltinTools?: string[];
73
+ capabilities?: readonly CapabilityModule[];
71
74
  }): string[];
@@ -8,192 +8,32 @@
8
8
  * src/prompt/sections/*.md — each preset declares which sections to include.
9
9
  */
10
10
  import { loadSections } from "../prompt/section-loader.js";
11
- import { cronListToolDef } from "../tool-system/builtin/cron-list.definition.js";
12
- import { sleepToolDef } from "../tool-system/builtin/sleep.definition.js";
13
- export const AGENT_PRESET_NAMES = ["general", "terminal-coding"];
14
- // ─── Tool sets ───────────────────────────────────────────────────
15
- const GENERAL_BUILTIN_TOOLS = [
16
- "Read",
17
- "Write",
18
- "Edit",
19
- "ApplyPatch",
20
- "Glob",
21
- "Grep",
22
- "Bash",
23
- // Bash(run_in_background=true) companions — without these in the preset
24
- // whitelist, the registry skips them (registerBuiltins filters BUILTIN_TOOLS
25
- // by the selected set), so a model that correctly calls BashOutput after
26
- // launching a background shell hits "Tool not found" and the turn dies.
27
- "BashOutput",
28
- "KillShell",
29
- "ListShells",
30
- // Browser automation (drive the in-app webview) — 3 semantic tools. Same
31
- // whitelist requirement as the BashOutput trio above: registerBuiltins filters
32
- // BUILTIN_TOOLS by the preset set, so without these the model calling
33
- // browser_observe/etc. hits "Tool not found". They self-degrade to a clear
34
- // error when no browser panel is wired (headless), so listing is safe.
35
- "browser_observe",
36
- "browser_act",
37
- "browser_navigate",
38
- "WebSearch",
39
- "WebFetch",
40
- "GenerateImage",
41
- "GenerateVideo",
42
- // Load a workspace image (by path) or an earlier history image (by number)
43
- // into context so a vision model can SEE it. Same whitelist requirement as
44
- // the rest: registered in BUILTIN_TOOLS but filtered out by registerBuiltins
45
- // unless the preset names it — so it was registered-but-invisible before.
46
- // Self-degrades to a text placeholder on non-vision models and gates format/
47
- // size, so listing it unconditionally is safe.
48
- "view_image",
49
- "AskUserQuestion",
50
- "Agent",
51
- // AgentStatus removed: background agents now write to ~/.code-shell/agents/
52
- // <id>.txt — the parent agent can Read/Bash tail that file for live progress.
53
- // The implementation is still in the registry for SDK consumers if needed.
54
- "AgentCancel",
55
- "EnterPlanMode",
56
- "ExitPlanMode",
57
- "ToolSearch",
58
- "TodoWrite",
59
- sleepToolDef.name,
60
- "Config",
61
- "CronCreate",
62
- "CronDelete",
63
- cronListToolDef.name,
64
- // cc-orchestrator:驱动外部 claude CLI 跑一轮。同 BashOutput/UseCredential/
65
- // EditModelCatalog 的 whitelist 要求:已在 BUILTIN_TOOLS 注册,但 registerBuiltins
66
- // 按 preset 集过滤 → 名单里没有它,agent 就没有「指挥 Claude Code」的工具,只能幻觉
67
- // RemoteTrigger / 兜底 Bash `claude -p`(用户实测「为什么驱动 cc 没作为工具」)。
68
- // 定时/循环驱动统一走 CronCreate(到点跑一轮引擎,prompt 里调 DriveAgent);
69
- // 无人值守审批由 DriveAgent 自身 bypass 解决,不需要定时层专门的 CC 调度工具。
70
- // DriveAgent 是通用驱动(cli: claude|codex);DriveClaudeCode 保留为 cli:claude 的
71
- // 别名(老 prompt/记忆兼容)。两个都要在白名单里,否则 registerBuiltins 滤掉。
72
- "DriveAgent",
73
- "DriveAgentJobs",
74
- "DriveClaudeCode",
75
- // 编排时读 CC/Codex 剩余额度做规划(开几个/等重置/换 provider)。
76
- "CheckQuota",
77
- "Skill",
78
- "AddMarketplace",
79
- "MCPTool",
80
- "ListMcpResources",
81
- "ReadMcpResource",
82
- "REPL",
83
- "PowerShell",
84
- // Persistent cross-session memory. Including these in the default preset is
85
- // what lets the LLM list/read/save/delete memories during a normal session,
86
- // AND what makes the end-of-session auto-dream consolidation work — its
87
- // tool-call loop pulls these from the registry, so without them every dream
88
- // run bailed with "missing memory tools". Save/Delete in the user scope have
89
- // no explicit allow rule, so the default-mode classifier fallback asks;
90
- // dream-scope writes go through freely.
91
- "MemoryList",
92
- "MemoryRead",
93
- "MemorySave",
94
- "MemoryDelete",
95
- // AI 取用已存凭证(cookie/token/link)给 yt-dlp/curl 等。必须在 preset 白名单里
96
- // 否则 registerBuiltins 滤掉它 → 即使存了凭证、注册了工具,AI 列表里也没有
97
- // UseCredential(用户实测「找不到这个工具」的真因)。它带 isUseCredentialAvailable
98
- // guard:cwd 凭证库为空时仍自动隐藏,所以无条件列入是安全的(空库不会冒出来)。
99
- "UseCredential",
100
- // 同理:把 cookie 凭证注入内置浏览器(恢复登录态后用 browser_* 工具)。带
101
- // isInjectCredentialAvailable guard(无 cookie 凭证时自动隐藏),无条件列入安全。
102
- "InjectCredential",
103
- // AI 增/改模型 catalog(写 ~/.code-shell/model-catalog.user.json)。同 BashOutput/
104
- // UseCredential 一样的 whitelist 要求:registerBuiltins 按 preset 集过滤 BUILTIN_TOOLS,
105
- // 名单里没有它 → 即使工具已注册,AI 列表里也没有 → 用户实测「找不到这个工具」。
106
- // 列入只是让 AI 看得到;执行期没有显式 allow rule,默认 classifier fallback 会审批。
107
- "EditModelCatalog",
108
- // Goal-mode control tools. Same whitelist requirement as the rest:
109
- // registerBuiltins filters BUILTIN_TOOLS by the preset set, so a goal tool
110
- // absent here is registered-but-invisible — the model never sees it and can
111
- // neither self-declare completion (complete_goal) nor honor a user's request
112
- // to abandon the goal (cancel_goal), stranding a persistent goal that only a
113
- // manual disk edit could clear. cancel_goal is the "strong intent" escape
114
- // hatch (requires confirm+reason); the turn-loop enforces the guard.
115
- "complete_goal",
116
- "cancel_goal",
117
- ];
118
- const TERMINAL_CODING_EXTRA_TOOLS = [
119
- "EnterWorktree",
120
- "ExitWorktree",
121
- "NotebookEdit",
122
- "LSP",
123
- "Brief",
124
- "Arena",
125
- ];
126
- // ─── Permission rules ────────────────────────────────────────────
127
- const GENERAL_PERMISSION_RULES = [
128
- { tool: "Read", decision: "allow" },
129
- { tool: "Glob", decision: "allow" },
130
- { tool: "Grep", decision: "allow" },
131
- { tool: "WebSearch", decision: "allow" },
132
- { tool: "WebFetch", decision: "allow" },
133
- { tool: "AskUserQuestion", decision: "allow" },
134
- { tool: "Agent", decision: "allow" },
135
- { tool: "AgentStatus", decision: "allow" },
136
- { tool: "AgentCancel", decision: "allow" },
137
- { tool: "EnterPlanMode", decision: "allow" },
138
- { tool: "ExitPlanMode", decision: "allow" },
139
- { tool: "ToolSearch", decision: "allow" },
140
- { tool: "TodoWrite", decision: "allow" },
141
- { tool: sleepToolDef.name, decision: "allow" },
142
- { tool: cronListToolDef.name, decision: "allow" },
143
- { tool: "CheckQuota", decision: "allow" },
144
- { tool: "Skill", decision: "allow" },
145
- // ListMcpResources only enumerates resource names (and the executor filters
146
- // the list to this session's enabled servers). ReadMcpResource pulls actual
147
- // content and is intentionally NOT auto-allowed here — with no explicit rule,
148
- // default-mode classifier fallback asks the user. The tool's
149
- // permissionDefault is only UI/metadata, not classifier input.
150
- { tool: "ListMcpResources", decision: "allow" },
151
- // Reading memory is always safe; writes (MemorySave/MemoryDelete) stay gated
152
- // by explicit rules below plus default-mode ask fallback.
153
- { tool: "MemoryList", decision: "allow" },
154
- { tool: "MemoryRead", decision: "allow" },
155
- // Browser automation (3 semantic tools). Rules are first-match-wins, ordered
156
- // by specificity — so the action-gating rule for browser_act MUST come first:
157
- // click/type/select mutate the page/form → "ask"; all other actions (hover/
158
- // scroll/wait/press_key/list_tabs/switch_tab) fall through to the default
159
- // allow rule below. observe (read-only) and navigate auto-allow.
160
- // (Main-side sensitive-action + domain-whitelist enforcement also applies.)
161
- {
162
- tool: "browser_act",
163
- argsPattern: { action: "^(click|type|select)$" },
164
- decision: "ask",
165
- reason: "browser_act click/type/select mutate the page",
166
- },
167
- { tool: "browser_observe", decision: "allow" },
168
- { tool: "browser_navigate", decision: "allow" },
169
- ];
11
+ import { deriveBuiltinPresetExposure, deriveToolGatedPromptSections, } from "../tool-system/builtin/index.js";
12
+ export const AGENT_PRESET_NAMES = ["harness-min", "general"];
13
+ const HARNESS_MIN_EXPOSURE = deriveBuiltinPresetExposure("harness-min");
14
+ const GENERAL_EXPOSURE = deriveBuiltinPresetExposure("general");
170
15
  // ─── Preset definitions ──────────────────────────────────────────
171
16
  export const BUILTIN_AGENT_PRESETS = {
17
+ "harness-min": {
18
+ name: "harness-min",
19
+ label: "Minimal Agent Harness",
20
+ description: "Domain-neutral orchestration with the minimal reusable tool surface.",
21
+ promptSections: ["harness-base", "orchestration", "tone"],
22
+ builtinTools: HARNESS_MIN_EXPOSURE.builtinTools,
23
+ defaultPermissionRules: HARNESS_MIN_EXPOSURE.defaultPermissionRules,
24
+ },
172
25
  general: {
173
26
  name: "general",
174
27
  label: "General Orchestrator",
175
28
  description: "Domain-agnostic orchestration for research, operations, automation, and long-running tasks.",
176
29
  promptSections: ["base", "orchestration", "browser", "tone"],
177
- injectGitStatus: false,
178
- builtinTools: [...GENERAL_BUILTIN_TOOLS],
179
- defaultPermissionRules: GENERAL_PERMISSION_RULES,
180
- },
181
- "terminal-coding": {
182
- name: "terminal-coding",
183
- label: "Terminal Coding Assistant",
184
- description: "General orchestration plus coding-focused guidance and code-navigation tools.",
185
- promptSections: ["base", "orchestration", "coding", "browser", "tone"],
186
- injectGitStatus: true,
187
- builtinTools: [...GENERAL_BUILTIN_TOOLS, ...TERMINAL_CODING_EXTRA_TOOLS],
188
- defaultPermissionRules: [
189
- ...GENERAL_PERMISSION_RULES,
190
- { tool: "LSP", decision: "allow" },
191
- { tool: "Brief", decision: "allow" },
192
- ],
30
+ builtinTools: GENERAL_EXPOSURE.builtinTools,
31
+ defaultPermissionRules: GENERAL_EXPOSURE.defaultPermissionRules,
193
32
  },
194
33
  };
195
- export const DEFAULT_AGENT_PRESET = "general";
196
- export const DEFAULT_CLI_PRESET = "terminal-coding";
34
+ export const DEFAULT_AGENT_PRESET = "harness-min";
35
+ /** @deprecated Product hosts should install a capability with `defaultPreset`. */
36
+ export const DEFAULT_CLI_PRESET = DEFAULT_AGENT_PRESET;
197
37
  /** Registry of custom presets registered by external consumers. */
198
38
  const _customPresets = new Map();
199
39
  /**
@@ -208,7 +48,6 @@ const _customPresets = new Map();
208
48
  * label: "Data Pipeline Orchestrator",
209
49
  * description: "Manages ETL workflows and data quality checks.",
210
50
  * promptSections: ["base", "orchestration"],
211
- * injectGitStatus: false,
212
51
  * builtinTools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent"],
213
52
  * defaultPermissionRules: [{ tool: "Read", decision: "allow" }],
214
53
  * });
@@ -218,32 +57,46 @@ export function registerPreset(preset) {
218
57
  _customPresets.set(preset.name, preset);
219
58
  }
220
59
  /** List all available preset names (built-in + custom). */
221
- export function listPresetNames() {
222
- return [...AGENT_PRESET_NAMES, ..._customPresets.keys()];
60
+ export function listPresetNames(capabilities = []) {
61
+ return [
62
+ ...new Set([
63
+ ...AGENT_PRESET_NAMES,
64
+ ..._customPresets.keys(),
65
+ ...capabilities.flatMap((capability) => (capability.presets ?? []).map((preset) => preset.name)),
66
+ ]),
67
+ ];
223
68
  }
224
- export function resolveAgentPreset(name) {
225
- if (!name)
226
- return BUILTIN_AGENT_PRESETS[DEFAULT_AGENT_PRESET];
69
+ export function resolveAgentPreset(name, capabilities = []) {
70
+ let resolvedName = name;
71
+ if (!resolvedName) {
72
+ const defaults = [
73
+ ...new Set(capabilities
74
+ .map((capability) => capability.defaultPreset)
75
+ .filter((preset) => Boolean(preset))),
76
+ ];
77
+ if (defaults.length > 1) {
78
+ throw new Error(`Capabilities contributed conflicting default presets: ${defaults.join(", ")}`);
79
+ }
80
+ resolvedName = defaults[0] ?? DEFAULT_AGENT_PRESET;
81
+ }
82
+ const contributed = capabilities
83
+ .flatMap((capability) => [...(capability.presets ?? [])])
84
+ .find((preset) => preset.name === resolvedName);
85
+ if (contributed)
86
+ return contributed;
227
87
  // Check built-in first
228
- const builtin = BUILTIN_AGENT_PRESETS[name];
88
+ const builtin = BUILTIN_AGENT_PRESETS[resolvedName];
229
89
  if (builtin)
230
90
  return builtin;
231
91
  // Check custom presets
232
- const custom = _customPresets.get(name);
92
+ const custom = _customPresets.get(resolvedName);
233
93
  if (custom)
234
94
  return custom;
235
- const allowed = listPresetNames().join(", ");
236
- throw new Error(`Unknown agent preset "${name}". Available presets: ${allowed}`);
95
+ const allowed = listPresetNames(capabilities).join(", ");
96
+ throw new Error(`Unknown agent preset "${resolvedName}". Available presets: ${allowed}`);
237
97
  }
238
- /** Tool names that gate the "browser" prompt section if NONE of these are in
239
- * the active tool set (browser capability turned off), the section is dropped
240
- * so the model isn't told how to use tools it can't see. Keep in sync with the
241
- * browser tools registered in builtin/index.ts. */
242
- const BROWSER_SECTION_TOOLS = ["browser_observe", "browser_act", "browser_navigate"];
243
- /** Prompt sections whose inclusion is gated by an active tool being present. */
244
- const TOOL_GATED_SECTIONS = {
245
- browser: BROWSER_SECTION_TOOLS,
246
- };
98
+ /** Prompt-section capability links are contributed by builtin exposure metadata. */
99
+ const TOOL_GATED_SECTIONS = deriveToolGatedPromptSections();
247
100
  function isActiveToolNamesList(value) {
248
101
  return Array.isArray(value);
249
102
  }
@@ -275,24 +128,30 @@ export function buildPresetSystemPrompt(preset, optionsOrActiveToolNames) {
275
128
  if (activeToolNames) {
276
129
  const active = new Set(activeToolNames);
277
130
  sections = sections.filter((s) => {
278
- const gate = TOOL_GATED_SECTIONS[s];
131
+ const gate = options.toolCatalog
132
+ ? deriveToolGatedPromptSections(options.toolCatalog)[s]
133
+ : TOOL_GATED_SECTIONS[s];
279
134
  return !gate || gate.some((t) => active.has(t));
280
135
  });
281
136
  }
282
- return [loadSections(sections), platformShellGuidance(options.platform ?? process.platform)]
137
+ return [
138
+ loadSections(sections, options.promptSections),
139
+ platformShellGuidance(options.platform ?? process.platform),
140
+ ]
283
141
  .filter(Boolean)
284
142
  .join("\n\n");
285
143
  }
286
144
  export function resolveBuiltinToolNames(options) {
287
- const preset = resolveAgentPreset(options?.preset);
145
+ const preset = resolveAgentPreset(options?.preset, options?.capabilities);
288
146
  const names = new Set(preset.builtinTools);
289
147
  for (const name of options?.enabledBuiltinTools ?? []) {
290
148
  names.add(name);
291
149
  }
292
- if (options?.host === "desktop") {
293
- names.delete("EnterWorktree");
294
- names.delete("ExitWorktree");
295
- names.add("SwitchSessionWorkspace");
150
+ for (const capability of options?.capabilities ?? []) {
151
+ capability.adjustToolSelection?.(names, {
152
+ preset: preset.name,
153
+ host: options?.host,
154
+ });
296
155
  }
297
156
  for (const name of options?.disabledBuiltinTools ?? []) {
298
157
  names.delete(name);
@@ -46,8 +46,15 @@ export function defineProduct(definition, runtime) {
46
46
  const presetName = presetDef.name;
47
47
  // Determine builtin tools: start from a base set, apply adapter overrides
48
48
  const baseTools = [
49
- "Read", "Write", "Edit", "Glob", "Grep", "Bash",
50
- "AskUserQuestion", "Agent", "ToolSearch",
49
+ "Read",
50
+ "Write",
51
+ "Edit",
52
+ "Glob",
53
+ "Grep",
54
+ "Bash",
55
+ "AskUserQuestion",
56
+ "Agent",
57
+ "ToolSearch",
51
58
  "TodoWrite",
52
59
  ];
53
60
  const enabledSet = new Set([...baseTools, ...(adapter?.enableTools ?? [])]);
@@ -71,7 +78,6 @@ export function defineProduct(definition, runtime) {
71
78
  label: presetDef.label,
72
79
  description: presetDef.description,
73
80
  promptSections: presetDef.sections ?? ["base", "orchestration"],
74
- injectGitStatus: presetDef.injectGitStatus ?? false,
75
81
  builtinTools: [...enabledSet],
76
82
  defaultPermissionRules: permissionRules,
77
83
  };
@@ -39,8 +39,6 @@ export interface ProductPreset {
39
39
  customPrompt?: string;
40
40
  /** Additional text appended after the main system prompt. */
41
41
  appendPrompt?: string;
42
- /** Whether to inject git status into system context. Default: false */
43
- injectGitStatus?: boolean;
44
42
  }
45
43
  export interface CustomTool {
46
44
  /** Tool definition (name, description, inputSchema). */