@cjhyy/code-shell-core 0.7.1 → 0.8.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 (595) 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 +7 -3
  23. package/dist/context/compaction.d.ts +39 -3
  24. package/dist/context/compaction.js +151 -39
  25. package/dist/context/manager.d.ts +17 -1
  26. package/dist/context/manager.js +36 -1
  27. package/dist/credentials/access.d.ts +3 -1
  28. package/dist/credentials/access.js +24 -3
  29. package/dist/credentials/index.d.ts +1 -1
  30. package/dist/credentials/index.js +1 -1
  31. package/dist/credentials/oauth.d.ts +4 -1
  32. package/dist/credentials/oauth.js +14 -0
  33. package/dist/credentials/store.d.ts +15 -1
  34. package/dist/credentials/store.js +17 -4
  35. package/dist/credentials/types.d.ts +24 -0
  36. package/dist/credentials/use-credential-tool.js +15 -1
  37. package/dist/engine/auxiliary-pipeline.d.ts +40 -0
  38. package/dist/engine/auxiliary-pipeline.js +181 -0
  39. package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
  40. package/dist/{settings → engine}/disk-defaults.js +5 -2
  41. package/dist/engine/dynamic-tool-defs.d.ts +4 -0
  42. package/dist/engine/dynamic-tool-defs.js +4 -0
  43. package/dist/engine/engine.d.ts +254 -195
  44. package/dist/engine/engine.js +1812 -2041
  45. package/dist/engine/file-history-hook.d.ts +11 -0
  46. package/dist/engine/file-history-hook.js +31 -0
  47. package/dist/engine/goal-judge-context.d.ts +9 -0
  48. package/dist/engine/goal-judge-context.js +234 -0
  49. package/dist/engine/injected-context-cache.d.ts +6 -0
  50. package/dist/engine/injected-context-cache.js +13 -0
  51. package/dist/engine/input-attachments.d.ts +1 -1
  52. package/dist/engine/model-facade.d.ts +3 -3
  53. package/dist/engine/model-facade.js +15 -14
  54. package/dist/engine/permission-controller.d.ts +55 -0
  55. package/dist/engine/permission-controller.js +148 -0
  56. package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
  57. package/dist/engine/prompt-cache-diagnostics.js +178 -0
  58. package/dist/engine/run-accounting.d.ts +41 -0
  59. package/dist/engine/run-accounting.js +126 -0
  60. package/dist/engine/run-context.d.ts +44 -0
  61. package/dist/engine/run-context.js +88 -0
  62. package/dist/engine/run-environment.d.ts +30 -0
  63. package/dist/engine/run-environment.js +77 -0
  64. package/dist/engine/run-finalize.d.ts +58 -0
  65. package/dist/engine/run-finalize.js +245 -0
  66. package/dist/engine/run-goal.d.ts +58 -0
  67. package/dist/engine/run-goal.js +188 -0
  68. package/dist/engine/run-image-input.d.ts +1 -1
  69. package/dist/engine/run-image-input.js +5 -3
  70. package/dist/engine/run-session-open.d.ts +41 -0
  71. package/dist/engine/run-session-open.js +186 -0
  72. package/dist/engine/run-setup.d.ts +42 -0
  73. package/dist/engine/run-setup.js +58 -0
  74. package/dist/engine/run-tooling.d.ts +125 -0
  75. package/dist/engine/run-tooling.js +283 -0
  76. package/dist/engine/run-types.d.ts +139 -0
  77. package/dist/engine/run-types.js +12 -0
  78. package/dist/engine/run-workspace.d.ts +50 -0
  79. package/dist/engine/run-workspace.js +114 -0
  80. package/dist/engine/steer-queue.d.ts +1 -1
  81. package/dist/engine/subagent-spawner.d.ts +32 -0
  82. package/dist/engine/subagent-spawner.js +287 -0
  83. package/dist/engine/tool-summary.d.ts +2 -2
  84. package/dist/engine/tool-summary.js +2 -2
  85. package/dist/engine/turn-loop.d.ts +49 -10
  86. package/dist/engine/turn-loop.js +370 -104
  87. package/dist/engine/types.d.ts +30 -3
  88. package/dist/engine/types.js +1 -1
  89. package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
  90. package/dist/goal/lifecycle.js +482 -0
  91. package/dist/hooks/events.d.ts +24 -10
  92. package/dist/hooks/goal-stop-hook.d.ts +17 -28
  93. package/dist/hooks/goal-stop-hook.js +110 -465
  94. package/dist/hooks/registry.js +1 -1
  95. package/dist/index.d.ts +48 -108
  96. package/dist/index.extension.d.ts +51 -0
  97. package/dist/index.extension.js +39 -0
  98. package/dist/index.internal.d.ts +86 -0
  99. package/dist/index.internal.js +92 -0
  100. package/dist/index.js +34 -123
  101. package/dist/links/cli.d.ts +48 -0
  102. package/dist/links/cli.js +617 -0
  103. package/dist/links/http.d.ts +40 -0
  104. package/dist/links/http.js +166 -0
  105. package/dist/links/index.d.ts +4 -0
  106. package/dist/links/index.js +3 -0
  107. package/dist/links/link-action-tool.d.ts +5 -0
  108. package/dist/links/link-action-tool.js +241 -0
  109. package/dist/links/providers.d.ts +8 -0
  110. package/dist/links/providers.js +665 -0
  111. package/dist/links/types.d.ts +44 -0
  112. package/dist/llm/client-base.d.ts +7 -0
  113. package/dist/llm/client-base.js +60 -0
  114. package/dist/llm/model-pool.d.ts +1 -1
  115. package/dist/llm/model-pool.js +1 -1
  116. package/dist/llm/providers/anthropic.d.ts +1 -0
  117. package/dist/llm/providers/anthropic.js +9 -0
  118. package/dist/llm/providers/openai.d.ts +1 -0
  119. package/dist/llm/providers/openai.js +17 -0
  120. package/dist/model-catalog/index.js +15 -2
  121. package/dist/model-catalog/resolve.d.ts +13 -1
  122. package/dist/model-catalog/resolve.js +37 -2
  123. package/dist/model-catalog/types.d.ts +74 -48
  124. package/dist/model-catalog/types.js +16 -5
  125. package/dist/model-catalog/upsert.d.ts +3 -1
  126. package/dist/model-catalog/upsert.js +9 -0
  127. package/dist/onboarding.d.ts +0 -1
  128. package/dist/onboarding.js +1 -22
  129. package/dist/panel-apps/bindings.d.ts +24 -0
  130. package/dist/panel-apps/bindings.js +69 -0
  131. package/dist/panel-apps/github-archive.d.ts +21 -0
  132. package/dist/panel-apps/github-archive.js +98 -0
  133. package/dist/panel-apps/index.d.ts +4 -0
  134. package/dist/panel-apps/index.js +4 -0
  135. package/dist/panel-apps/installer.d.ts +68 -0
  136. package/dist/panel-apps/installer.js +622 -0
  137. package/dist/panel-apps/manifest.d.ts +364 -0
  138. package/dist/panel-apps/manifest.js +189 -0
  139. package/dist/panel-apps/paths.d.ts +13 -0
  140. package/dist/panel-apps/paths.js +38 -0
  141. package/dist/panel-apps/registry.d.ts +51 -0
  142. package/dist/panel-apps/registry.js +99 -0
  143. package/dist/panel-apps/runtime.d.ts +80 -0
  144. package/dist/panel-apps/runtime.js +154 -0
  145. package/dist/plugins/gitOps.js +8 -1
  146. package/dist/plugins/installedPlugins.d.ts +2 -1
  147. package/dist/plugins/installedPlugins.js +146 -8
  148. package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
  149. package/dist/plugins/installer/codex/convertAgents.js +62 -8
  150. package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
  151. package/dist/plugins/installer/codex/convertCommands.js +35 -12
  152. package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
  153. package/dist/plugins/installer/codex/convertHooks.js +82 -0
  154. package/dist/plugins/installer/codex/convertSkills.js +41 -6
  155. package/dist/plugins/installer/install.d.ts +7 -1
  156. package/dist/plugins/installer/install.js +21 -87
  157. package/dist/plugins/installer/installFromArchive.d.ts +26 -4
  158. package/dist/plugins/installer/installFromArchive.js +44 -27
  159. package/dist/plugins/installer/installFromNpm.d.ts +31 -0
  160. package/dist/plugins/installer/installFromNpm.js +273 -0
  161. package/dist/plugins/installer/loadPluginAgents.js +17 -4
  162. package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
  163. package/dist/plugins/installer/loadPluginMcp.js +245 -35
  164. package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
  165. package/dist/plugins/installer/normalizeManifest.js +306 -0
  166. package/dist/plugins/installer/npmTar.d.ts +13 -0
  167. package/dist/plugins/installer/npmTar.js +321 -0
  168. package/dist/plugins/installer/parseSource.d.ts +11 -0
  169. package/dist/plugins/installer/parseSource.js +48 -0
  170. package/dist/plugins/installer/preview.d.ts +101 -0
  171. package/dist/plugins/installer/preview.js +336 -0
  172. package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
  173. package/dist/plugins/installer/projectPluginSource.js +140 -0
  174. package/dist/plugins/installer/types.d.ts +775 -0
  175. package/dist/plugins/installer/types.js +100 -0
  176. package/dist/plugins/installer/unzip.d.ts +11 -0
  177. package/dist/plugins/installer/unzip.js +123 -9
  178. package/dist/plugins/installer/update.d.ts +2 -2
  179. package/dist/plugins/installer/update.js +43 -4
  180. package/dist/plugins/loadPluginHooks.d.ts +19 -2
  181. package/dist/plugins/loadPluginHooks.js +97 -86
  182. package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
  183. package/dist/plugins/pluginAutomationTemplates.js +50 -0
  184. package/dist/plugins/pluginCatalog.d.ts +45 -0
  185. package/dist/plugins/pluginCatalog.js +87 -0
  186. package/dist/plugins/pluginCommandHook.d.ts +6 -0
  187. package/dist/plugins/pluginCommandHook.js +25 -8
  188. package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
  189. package/dist/plugins/pluginCommandsLoader.js +181 -7
  190. package/dist/plugins/pluginContent.d.ts +10 -1
  191. package/dist/plugins/pluginContent.js +87 -30
  192. package/dist/plugins/pluginHookApproval.d.ts +30 -0
  193. package/dist/plugins/pluginHookApproval.js +160 -0
  194. package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
  195. package/dist/plugins/pluginHookIntegrity.js +361 -0
  196. package/dist/plugins/pluginInstaller.js +71 -12
  197. package/dist/plugins/pluginMcpApproval.d.ts +19 -0
  198. package/dist/plugins/pluginMcpApproval.js +110 -0
  199. package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
  200. package/dist/plugins/pluginMcpIntegrity.js +74 -0
  201. package/dist/plugins/types.d.ts +30 -0
  202. package/dist/plugins/varRewrite.d.ts +9 -5
  203. package/dist/plugins/varRewrite.js +26 -17
  204. package/dist/preset/index.d.ts +11 -8
  205. package/dist/preset/index.js +62 -203
  206. package/dist/product/define.js +9 -3
  207. package/dist/product/types.d.ts +0 -2
  208. package/dist/profile/activation.d.ts +36 -0
  209. package/dist/profile/activation.js +57 -0
  210. package/dist/profile/catalog-store.d.ts +77 -0
  211. package/dist/profile/catalog-store.js +346 -0
  212. package/dist/profile/catalog.d.ts +54 -0
  213. package/dist/profile/catalog.js +152 -0
  214. package/dist/profile/index.d.ts +7 -0
  215. package/dist/profile/index.js +7 -0
  216. package/dist/profile/requirements.d.ts +76 -0
  217. package/dist/profile/requirements.js +117 -0
  218. package/dist/profile/resolve.d.ts +11 -0
  219. package/dist/profile/resolve.js +41 -0
  220. package/dist/profile/store.d.ts +17 -0
  221. package/dist/profile/store.js +167 -0
  222. package/dist/profile/types.d.ts +321 -0
  223. package/dist/profile/types.js +104 -0
  224. package/dist/prompt/composer.d.ts +46 -7
  225. package/dist/prompt/composer.js +78 -48
  226. package/dist/prompt/instruction-scanner.d.ts +6 -5
  227. package/dist/prompt/instruction-scanner.js +8 -23
  228. package/dist/prompt/section-loader.d.ts +2 -2
  229. package/dist/prompt/section-loader.js +7 -4
  230. package/dist/prompt/sections/browser.md +10 -9
  231. package/dist/prompt/sections/harness-base.md +9 -0
  232. package/dist/protocol/chat-session-manager.d.ts +64 -1
  233. package/dist/protocol/chat-session-manager.js +104 -0
  234. package/dist/protocol/chat-session.d.ts +61 -10
  235. package/dist/protocol/chat-session.js +135 -25
  236. package/dist/protocol/client.d.ts +33 -3
  237. package/dist/protocol/client.js +96 -5
  238. package/dist/protocol/index.d.ts +2 -2
  239. package/dist/protocol/index.js +2 -2
  240. package/dist/protocol/mobile-remote-types.d.ts +406 -0
  241. package/dist/protocol/mobile-remote-types.js +1 -0
  242. package/dist/protocol/server.d.ts +127 -3
  243. package/dist/protocol/server.js +1309 -182
  244. package/dist/protocol/types.d.ts +152 -34
  245. package/dist/protocol/types.js +16 -0
  246. package/dist/run/ArtifactTracker.d.ts +6 -1
  247. package/dist/run/ArtifactTracker.js +29 -21
  248. package/dist/run/EngineRunner.d.ts +2 -0
  249. package/dist/run/EngineRunner.js +1 -0
  250. package/dist/run/RunManager.d.ts +26 -0
  251. package/dist/run/RunManager.js +82 -11
  252. package/dist/run/factory.d.ts +3 -0
  253. package/dist/run/factory.js +2 -0
  254. package/dist/runtime/safe-spawn.d.ts +6 -0
  255. package/dist/runtime/safe-spawn.js +8 -13
  256. package/dist/services/auto-dream.d.ts +13 -1
  257. package/dist/services/auto-dream.js +56 -8
  258. package/dist/services/dream-consolidation.js +10 -1
  259. package/dist/services/memory-orchestrator.js +6 -2
  260. package/dist/services/oauth.js +4 -1
  261. package/dist/services/session-memory.d.ts +4 -4
  262. package/dist/services/session-memory.js +13 -10
  263. package/dist/session/memory.d.ts +26 -7
  264. package/dist/session/memory.js +79 -21
  265. package/dist/session/session-manager.d.ts +182 -28
  266. package/dist/session/session-manager.js +910 -130
  267. package/dist/session/session-message.d.ts +22 -0
  268. package/dist/session/session-message.js +1 -0
  269. package/dist/session/transcript.d.ts +46 -5
  270. package/dist/session/transcript.js +159 -3
  271. package/dist/settings/feature-flags.d.ts +40 -0
  272. package/dist/settings/feature-flags.js +40 -0
  273. package/dist/settings/manager.d.ts +39 -1
  274. package/dist/settings/manager.js +102 -41
  275. package/dist/settings/migrate-config.js +4 -2
  276. package/dist/settings/schema.d.ts +511 -177
  277. package/dist/settings/schema.js +98 -25
  278. package/dist/skills/scanner.d.ts +6 -2
  279. package/dist/skills/scanner.js +160 -9
  280. package/dist/sources/adapter.d.ts +14 -0
  281. package/dist/sources/adapter.js +7 -0
  282. package/dist/sources/adapters/local-files.d.ts +10 -0
  283. package/dist/sources/adapters/local-files.js +127 -0
  284. package/dist/sources/adapters/mcp-resource.d.ts +17 -0
  285. package/dist/sources/adapters/mcp-resource.js +41 -0
  286. package/dist/sources/adapters/mock.d.ts +3 -0
  287. package/dist/sources/adapters/mock.js +29 -0
  288. package/dist/sources/binding.d.ts +6 -0
  289. package/dist/sources/binding.js +24 -0
  290. package/dist/sources/catalog.d.ts +6 -0
  291. package/dist/sources/catalog.js +64 -0
  292. package/dist/sources/context-summary.d.ts +8 -0
  293. package/dist/sources/context-summary.js +13 -0
  294. package/dist/sources/credential-status.d.ts +2 -0
  295. package/dist/sources/credential-status.js +13 -0
  296. package/dist/sources/index.d.ts +10 -0
  297. package/dist/sources/index.js +10 -0
  298. package/dist/sources/resolve.d.ts +28 -0
  299. package/dist/sources/resolve.js +47 -0
  300. package/dist/sources/truncate-utf8.d.ts +7 -0
  301. package/dist/sources/truncate-utf8.js +18 -0
  302. package/dist/sources/types.d.ts +71 -0
  303. package/dist/sources/types.js +26 -0
  304. package/dist/testing/fetch-stub.d.ts +32 -0
  305. package/dist/testing/fetch-stub.js +24 -0
  306. package/dist/themes/image.d.ts +18 -0
  307. package/dist/themes/image.js +117 -0
  308. package/dist/themes/index.d.ts +4 -0
  309. package/dist/themes/index.js +4 -0
  310. package/dist/themes/installer.d.ts +50 -0
  311. package/dist/themes/installer.js +290 -0
  312. package/dist/themes/manifest.d.ts +102 -0
  313. package/dist/themes/manifest.js +86 -0
  314. package/dist/themes/paths.d.ts +14 -0
  315. package/dist/themes/paths.js +33 -0
  316. package/dist/tool-system/browser-bridge.d.ts +53 -11
  317. package/dist/tool-system/browser-bridge.js +8 -9
  318. package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
  319. package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
  320. package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
  321. package/dist/tool-system/builtin/agent-notifications.js +291 -101
  322. package/dist/tool-system/builtin/agent-output-file.js +1 -3
  323. package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
  324. package/dist/tool-system/builtin/agent-progress.js +83 -0
  325. package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
  326. package/dist/tool-system/builtin/agent-registry.js +178 -9
  327. package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
  328. package/dist/tool-system/builtin/agent.d.ts +2 -0
  329. package/dist/tool-system/builtin/agent.js +274 -33
  330. package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
  331. package/dist/tool-system/builtin/background-jobs.js +96 -4
  332. package/dist/tool-system/builtin/background-work.d.ts +6 -0
  333. package/dist/tool-system/builtin/background-work.js +8 -1
  334. package/dist/tool-system/builtin/bash.js +5 -2
  335. package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
  336. package/dist/tool-system/builtin/browser-tools.js +89 -23
  337. package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
  338. package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
  339. package/dist/tool-system/builtin/edit.js +2 -6
  340. package/dist/tool-system/builtin/file-cache.d.ts +2 -0
  341. package/dist/tool-system/builtin/file-cache.js +4 -0
  342. package/dist/tool-system/builtin/generate-image.js +17 -10
  343. package/dist/tool-system/builtin/generate-video.js +26 -7
  344. package/dist/tool-system/builtin/grep.js +2 -2
  345. package/dist/tool-system/builtin/image-uploader.js +7 -1
  346. package/dist/tool-system/builtin/index.d.ts +32 -7
  347. package/dist/tool-system/builtin/index.js +237 -167
  348. package/dist/tool-system/builtin/memory.d.ts +6 -0
  349. package/dist/tool-system/builtin/memory.js +36 -15
  350. package/dist/tool-system/builtin/panel.d.ts +9 -0
  351. package/dist/tool-system/builtin/panel.js +314 -0
  352. package/dist/tool-system/builtin/read.js +5 -1
  353. package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
  354. package/dist/tool-system/builtin/send-message-to-session.js +67 -0
  355. package/dist/tool-system/builtin/sources.d.ts +8 -0
  356. package/dist/tool-system/builtin/sources.js +137 -0
  357. package/dist/tool-system/builtin/tool-search.js +7 -2
  358. package/dist/tool-system/builtin/update-automation-memory.js +2 -0
  359. package/dist/tool-system/builtin/web-fetch.js +17 -13
  360. package/dist/tool-system/builtin/web-search.js +1 -3
  361. package/dist/tool-system/capability-module.d.ts +93 -0
  362. package/dist/tool-system/capability-module.js +53 -0
  363. package/dist/tool-system/context.d.ts +77 -19
  364. package/dist/tool-system/executor.js +75 -50
  365. package/dist/tool-system/external-tool-exposure.d.ts +60 -0
  366. package/dist/tool-system/external-tool-exposure.js +304 -0
  367. package/dist/tool-system/mcp-manager.d.ts +11 -1
  368. package/dist/tool-system/mcp-manager.js +19 -4
  369. package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
  370. package/dist/tool-system/mcp-tool-policy.js +34 -0
  371. package/dist/tool-system/panel-bridge.d.ts +53 -0
  372. package/dist/tool-system/panel-bridge.js +1 -0
  373. package/dist/tool-system/path-policy.js +99 -2
  374. package/dist/tool-system/permission.d.ts +26 -0
  375. package/dist/tool-system/permission.js +46 -0
  376. package/dist/tool-system/registry.d.ts +12 -1
  377. package/dist/tool-system/registry.js +31 -7
  378. package/dist/tool-system/sandbox/index.js +3 -8
  379. package/dist/tool-system/sandbox/seatbelt.js +2 -6
  380. package/dist/tool-system/session-tool-host.d.ts +139 -0
  381. package/dist/tool-system/session-tool-host.js +167 -0
  382. package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
  383. package/dist/tool-system/testing/tool-registry-harness.js +51 -0
  384. package/dist/tool-system/validation.d.ts +14 -7
  385. package/dist/tool-system/validation.js +701 -7
  386. package/dist/types.d.ts +186 -20
  387. package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
  388. package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
  389. package/dist/utils/file-mutex.d.ts +65 -0
  390. package/dist/utils/file-mutex.js +145 -0
  391. package/dist/utils/json.d.ts +2 -4
  392. package/dist/utils/json.js +2 -4
  393. package/dist/utils/lockfile.d.ts +30 -1
  394. package/dist/utils/lockfile.js +2 -2
  395. package/dist/utils/secret-scrubber.d.ts +8 -0
  396. package/dist/utils/secret-scrubber.js +227 -0
  397. package/dist/utils/toolDisplay.js +1 -1
  398. package/package.json +20 -5
  399. package/THIRD_PARTY_NOTICES.md +0 -206
  400. package/dist/arena/arena.d.ts +0 -45
  401. package/dist/arena/arena.js +0 -362
  402. package/dist/arena/context/context-tools.d.ts +0 -16
  403. package/dist/arena/context/context-tools.js +0 -272
  404. package/dist/arena/context/within-root.d.ts +0 -7
  405. package/dist/arena/context/within-root.js +0 -15
  406. package/dist/arena/detect-mode.d.ts +0 -20
  407. package/dist/arena/detect-mode.js +0 -78
  408. package/dist/arena/digest-builder.d.ts +0 -25
  409. package/dist/arena/digest-builder.js +0 -120
  410. package/dist/arena/index.d.ts +0 -29
  411. package/dist/arena/index.js +0 -29
  412. package/dist/arena/iterate/convergence.d.ts +0 -25
  413. package/dist/arena/iterate/convergence.js +0 -103
  414. package/dist/arena/iterate/formats/index.d.ts +0 -22
  415. package/dist/arena/iterate/formats/index.js +0 -283
  416. package/dist/arena/iterate/index.d.ts +0 -11
  417. package/dist/arena/iterate/index.js +0 -9
  418. package/dist/arena/iterate/iterative-arena.d.ts +0 -23
  419. package/dist/arena/iterate/iterative-arena.js +0 -237
  420. package/dist/arena/iterate/parse.d.ts +0 -42
  421. package/dist/arena/iterate/parse.js +0 -123
  422. package/dist/arena/iterate/phases/argue.d.ts +0 -22
  423. package/dist/arena/iterate/phases/argue.js +0 -165
  424. package/dist/arena/iterate/phases/revise.d.ts +0 -16
  425. package/dist/arena/iterate/phases/revise.js +0 -62
  426. package/dist/arena/iterate/phases/tournament.d.ts +0 -34
  427. package/dist/arena/iterate/phases/tournament.js +0 -113
  428. package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
  429. package/dist/arena/iterate/tools/web-tools.js +0 -54
  430. package/dist/arena/iterate/types.d.ts +0 -152
  431. package/dist/arena/iterate/types.js +0 -8
  432. package/dist/arena/ledger.d.ts +0 -47
  433. package/dist/arena/ledger.js +0 -159
  434. package/dist/arena/lenses/architecture.d.ts +0 -5
  435. package/dist/arena/lenses/architecture.js +0 -22
  436. package/dist/arena/lenses/engineering.d.ts +0 -5
  437. package/dist/arena/lenses/engineering.js +0 -22
  438. package/dist/arena/lenses/general.d.ts +0 -5
  439. package/dist/arena/lenses/general.js +0 -20
  440. package/dist/arena/lenses/index.d.ts +0 -16
  441. package/dist/arena/lenses/index.js +0 -47
  442. package/dist/arena/lenses/product.d.ts +0 -5
  443. package/dist/arena/lenses/product.js +0 -22
  444. package/dist/arena/model-presets.d.ts +0 -23
  445. package/dist/arena/model-presets.js +0 -44
  446. package/dist/arena/phases/adjudication.d.ts +0 -25
  447. package/dist/arena/phases/adjudication.js +0 -142
  448. package/dist/arena/phases/build-consensus.d.ts +0 -30
  449. package/dist/arena/phases/build-consensus.js +0 -85
  450. package/dist/arena/phases/claim-registry.d.ts +0 -26
  451. package/dist/arena/phases/claim-registry.js +0 -60
  452. package/dist/arena/phases/cross-review.d.ts +0 -47
  453. package/dist/arena/phases/cross-review.js +0 -224
  454. package/dist/arena/phases/debate-rounds.d.ts +0 -28
  455. package/dist/arena/phases/debate-rounds.js +0 -161
  456. package/dist/arena/phases/participant-research.d.ts +0 -39
  457. package/dist/arena/phases/participant-research.js +0 -316
  458. package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
  459. package/dist/arena/phases/planning-detail-expansion.js +0 -120
  460. package/dist/arena/planner.d.ts +0 -28
  461. package/dist/arena/planner.js +0 -312
  462. package/dist/arena/providers/docs.d.ts +0 -7
  463. package/dist/arena/providers/docs.js +0 -111
  464. package/dist/arena/providers/git.d.ts +0 -8
  465. package/dist/arena/providers/git.js +0 -174
  466. package/dist/arena/providers/index.d.ts +0 -32
  467. package/dist/arena/providers/index.js +0 -132
  468. package/dist/arena/providers/none.d.ts +0 -7
  469. package/dist/arena/providers/none.js +0 -11
  470. package/dist/arena/providers/repo.d.ts +0 -7
  471. package/dist/arena/providers/repo.js +0 -258
  472. package/dist/arena/render/session.d.ts +0 -17
  473. package/dist/arena/render/session.js +0 -190
  474. package/dist/arena/render/terminal.d.ts +0 -34
  475. package/dist/arena/render/terminal.js +0 -286
  476. package/dist/arena/strategies/discussion.d.ts +0 -25
  477. package/dist/arena/strategies/discussion.js +0 -143
  478. package/dist/arena/strategies/index.d.ts +0 -15
  479. package/dist/arena/strategies/index.js +0 -28
  480. package/dist/arena/strategies/language-wrapper.d.ts +0 -17
  481. package/dist/arena/strategies/language-wrapper.js +0 -102
  482. package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
  483. package/dist/arena/strategies/lens-wrapper.js +0 -236
  484. package/dist/arena/strategies/planning.d.ts +0 -30
  485. package/dist/arena/strategies/planning.js +0 -225
  486. package/dist/arena/strategies/review.d.ts +0 -26
  487. package/dist/arena/strategies/review.js +0 -168
  488. package/dist/arena/strategies/utils.d.ts +0 -36
  489. package/dist/arena/strategies/utils.js +0 -603
  490. package/dist/arena/tools/selector.d.ts +0 -17
  491. package/dist/arena/tools/selector.js +0 -61
  492. package/dist/arena/transitions.d.ts +0 -53
  493. package/dist/arena/transitions.js +0 -97
  494. package/dist/arena/types.d.ts +0 -518
  495. package/dist/arena/types.js +0 -27
  496. package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
  497. package/dist/cc-orchestrator/agent-adapter.js +0 -143
  498. package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
  499. package/dist/cc-orchestrator/cc-capability.js +0 -53
  500. package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
  501. package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
  502. package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
  503. package/dist/cc-orchestrator/codex-session-history.js +0 -247
  504. package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
  505. package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
  506. package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
  507. package/dist/cc-orchestrator/external-agent-changes.js +0 -231
  508. package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
  509. package/dist/cc-orchestrator/external-agent-driver.js +0 -284
  510. package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
  511. package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
  512. package/dist/cc-orchestrator/index.d.ts +0 -8
  513. package/dist/cc-orchestrator/index.js +0 -8
  514. package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
  515. package/dist/cc-orchestrator/relevance-judge.js +0 -29
  516. package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
  517. package/dist/cc-orchestrator/session-discovery.js +0 -125
  518. package/dist/cc-orchestrator/session-history.d.ts +0 -54
  519. package/dist/cc-orchestrator/session-history.js +0 -150
  520. package/dist/cron/cron-runtime.d.ts +0 -2
  521. package/dist/cron/cron-runtime.js +0 -2
  522. package/dist/cron/cron-store.d.ts +0 -2
  523. package/dist/cron/cron-store.js +0 -2
  524. package/dist/cron/scheduler.d.ts +0 -7
  525. package/dist/cron/scheduler.js +0 -7
  526. package/dist/engine/goal.js +0 -206
  527. package/dist/external-agents/config.d.ts +0 -2
  528. package/dist/external-agents/config.js +0 -15
  529. package/dist/external-agents/types.d.ts +0 -31
  530. package/dist/git/parse-log.d.ts +0 -13
  531. package/dist/git/parse-log.js +0 -21
  532. package/dist/git/utils.d.ts +0 -49
  533. package/dist/git/utils.js +0 -161
  534. package/dist/git/worktree/crud.d.ts +0 -72
  535. package/dist/git/worktree/crud.js +0 -235
  536. package/dist/git/worktree/diff.d.ts +0 -14
  537. package/dist/git/worktree/diff.js +0 -82
  538. package/dist/git/worktree/git-exec.d.ts +0 -7
  539. package/dist/git/worktree/git-exec.js +0 -87
  540. package/dist/git/worktree/index.d.ts +0 -5
  541. package/dist/git/worktree/index.js +0 -5
  542. package/dist/git/worktree/query.d.ts +0 -43
  543. package/dist/git/worktree/query.js +0 -128
  544. package/dist/git/worktree/slug.d.ts +0 -11
  545. package/dist/git/worktree/slug.js +0 -58
  546. package/dist/git/worktree.d.ts +0 -1
  547. package/dist/git/worktree.js +0 -5
  548. package/dist/lsp/client.d.ts +0 -41
  549. package/dist/lsp/client.js +0 -186
  550. package/dist/lsp/manager.d.ts +0 -40
  551. package/dist/lsp/manager.js +0 -155
  552. package/dist/lsp/root-path.d.ts +0 -9
  553. package/dist/lsp/root-path.js +0 -12
  554. package/dist/lsp/servers.d.ts +0 -16
  555. package/dist/lsp/servers.js +0 -60
  556. package/dist/prompt/sections/coding.md +0 -35
  557. package/dist/quota/credentials.d.ts +0 -3
  558. package/dist/quota/credentials.js +0 -80
  559. package/dist/quota/index.d.ts +0 -36
  560. package/dist/quota/index.js +0 -155
  561. package/dist/quota/types.d.ts +0 -48
  562. package/dist/quota/types.js +0 -13
  563. package/dist/review/review-prompt.d.ts +0 -28
  564. package/dist/review/review-prompt.js +0 -81
  565. package/dist/state.d.ts +0 -160
  566. package/dist/state.js +0 -267
  567. package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
  568. package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
  569. package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
  570. package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
  571. package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
  572. package/dist/tool-system/builtin/apply-patch/index.js +0 -105
  573. package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
  574. package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
  575. package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
  576. package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
  577. package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
  578. package/dist/tool-system/builtin/apply-patch/types.js +0 -13
  579. package/dist/tool-system/builtin/arena.d.ts +0 -31
  580. package/dist/tool-system/builtin/arena.js +0 -416
  581. package/dist/tool-system/builtin/brief.d.ts +0 -6
  582. package/dist/tool-system/builtin/brief.js +0 -41
  583. package/dist/tool-system/builtin/check-quota.d.ts +0 -15
  584. package/dist/tool-system/builtin/check-quota.js +0 -34
  585. package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
  586. package/dist/tool-system/builtin/drive-claude-code.js +0 -698
  587. package/dist/tool-system/builtin/lsp.d.ts +0 -7
  588. package/dist/tool-system/builtin/lsp.js +0 -144
  589. package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
  590. package/dist/tool-system/builtin/notebook-edit.js +0 -127
  591. package/dist/tool-system/builtin/worktree.d.ts +0 -11
  592. package/dist/tool-system/builtin/worktree.js +0 -363
  593. /package/dist/{external-agents → links}/types.js +0 -0
  594. /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
  595. /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
@@ -0,0 +1,166 @@
1
+ const MAX_RESPONSE_BYTES = 1024 * 1024;
2
+ const REQUEST_TIMEOUT_MS = 20_000;
3
+ const LOCAL_LINK_ALLOWED_HOSTS = new Set([
4
+ "api.github.com",
5
+ "gitlab.com",
6
+ "api.figma.com",
7
+ "api.notion.com",
8
+ "api.linear.app",
9
+ "slack.com",
10
+ "sentry.io",
11
+ "api.airtable.com",
12
+ "api.todoist.com",
13
+ "api.vercel.com",
14
+ ]);
15
+ export async function linkRequestJson(request) {
16
+ if (request.url.protocol !== "https:" ||
17
+ !LOCAL_LINK_ALLOWED_HOSTS.has(request.url.hostname.toLowerCase())) {
18
+ throw new Error(`Link provider host is not allowed: ${request.url.hostname}`);
19
+ }
20
+ const fetchImpl = request.fetchImpl ?? fetch;
21
+ const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
22
+ const signal = request.signal ? AbortSignal.any([request.signal, timeout]) : timeout;
23
+ const response = await fetchImpl(request.url, {
24
+ method: request.method ?? "GET",
25
+ headers: {
26
+ Accept: "application/json",
27
+ ...request.headers,
28
+ ...(request.body === undefined ? {} : { "Content-Type": "application/json" }),
29
+ },
30
+ body: request.body === undefined ? undefined : JSON.stringify(request.body),
31
+ redirect: "error",
32
+ signal,
33
+ });
34
+ const text = await readResponseText(response);
35
+ let data;
36
+ try {
37
+ data = text ? JSON.parse(text) : null;
38
+ }
39
+ catch {
40
+ throw new Error(`Link provider returned invalid JSON (HTTP ${response.status})`);
41
+ }
42
+ if (!response.ok) {
43
+ throw new Error(normalizeProviderError(response.status, data));
44
+ }
45
+ return data;
46
+ }
47
+ async function readResponseText(response) {
48
+ if (!response.body)
49
+ return "";
50
+ const reader = response.body.getReader();
51
+ const chunks = [];
52
+ let bytes = 0;
53
+ try {
54
+ while (true) {
55
+ const { done, value } = await reader.read();
56
+ if (done)
57
+ break;
58
+ bytes += value.byteLength;
59
+ if (bytes > MAX_RESPONSE_BYTES) {
60
+ await reader.cancel();
61
+ throw new Error(`Link provider response exceeded ${MAX_RESPONSE_BYTES} bytes`);
62
+ }
63
+ chunks.push(value);
64
+ }
65
+ }
66
+ finally {
67
+ reader.releaseLock();
68
+ }
69
+ const combined = new Uint8Array(bytes);
70
+ let offset = 0;
71
+ for (const chunk of chunks) {
72
+ combined.set(chunk, offset);
73
+ offset += chunk.byteLength;
74
+ }
75
+ return new TextDecoder().decode(combined);
76
+ }
77
+ function normalizeProviderError(status, data) {
78
+ const record = asRecord(data);
79
+ const nested = asRecord(record?.error);
80
+ const message = firstString(record?.message, record?.error_description, nested?.message, nested?.type);
81
+ return message
82
+ ? `Link provider request failed (HTTP ${status}): ${message.slice(0, 300)}`
83
+ : `Link provider request failed (HTTP ${status})`;
84
+ }
85
+ export function asRecord(value) {
86
+ return value && typeof value === "object" && !Array.isArray(value)
87
+ ? value
88
+ : undefined;
89
+ }
90
+ export function asArray(value) {
91
+ return Array.isArray(value) ? value : [];
92
+ }
93
+ export function firstString(...values) {
94
+ return values.find((value) => typeof value === "string" && value.length > 0);
95
+ }
96
+ export function stringParam(params, key, options = {}) {
97
+ const value = params[key];
98
+ if (value === undefined || value === null || value === "") {
99
+ if (options.required)
100
+ throw new Error(`Missing required Link Action parameter: ${key}`);
101
+ return undefined;
102
+ }
103
+ if (typeof value !== "string")
104
+ throw new Error(`Link Action parameter ${key} must be a string`);
105
+ const trimmed = value.trim();
106
+ if (!trimmed && options.required)
107
+ throw new Error(`Missing required Link Action parameter: ${key}`);
108
+ const max = options.maxLength ?? 300;
109
+ if (trimmed.length > max)
110
+ throw new Error(`Link Action parameter ${key} is too long`);
111
+ return trimmed;
112
+ }
113
+ /**
114
+ * Values interpolated into a fixed URL path template must never move the
115
+ * request to another endpoint. `encodeURIComponent` does not neutralize
116
+ * `.`/`..`, and both `new URL()` and CLI backends like `gh api` normalize dot
117
+ * segments away, so `organization: ".."` would otherwise turn
118
+ * `/organizations/../projects/` into `/projects/`.
119
+ */
120
+ export function assertPathSegment(value, key) {
121
+ let decoded = value;
122
+ try {
123
+ decoded = decodeURIComponent(value);
124
+ }
125
+ catch {
126
+ // Not valid percent-encoding; the raw value is still checked below.
127
+ }
128
+ for (const candidate of [value, decoded]) {
129
+ if (!candidate || candidate === "." || candidate === ".." || /[/\\]/.test(candidate)) {
130
+ throw new Error(`Link Action parameter ${key} contains an invalid path segment`);
131
+ }
132
+ }
133
+ return value;
134
+ }
135
+ /** A string param used as exactly one segment of a URL path template. */
136
+ export function pathSegmentParam(params, key, options = {}) {
137
+ const value = stringParam(params, key, options);
138
+ if (value === undefined)
139
+ return undefined;
140
+ return assertPathSegment(value, key);
141
+ }
142
+ /**
143
+ * A slash-separated resource path (e.g. a file path inside a repository).
144
+ * Every segment is validated like assertPathSegment and encoded individually;
145
+ * the returned string is ready to interpolate into a URL path template.
146
+ */
147
+ export function pathParam(params, key, options = {}) {
148
+ const value = stringParam(params, key, options);
149
+ if (value === undefined)
150
+ return undefined;
151
+ return value
152
+ .split("/")
153
+ .map((segment) => encodeURIComponent(assertPathSegment(segment, key)))
154
+ .join("/");
155
+ }
156
+ export function intParam(params, key, fallback, max) {
157
+ const raw = params[key];
158
+ const value = typeof raw === "number" ? raw : typeof raw === "string" ? Number(raw) : fallback;
159
+ if (!Number.isInteger(value) || value < 1)
160
+ throw new Error(`${key} must be a positive integer`);
161
+ return Math.min(value, max);
162
+ }
163
+ export function pick(record, keys) {
164
+ const source = asRecord(record) ?? {};
165
+ return Object.fromEntries(keys.flatMap((key) => (source[key] === undefined ? [] : [[key, source[key]]])));
166
+ }
@@ -0,0 +1,4 @@
1
+ export { LOCAL_LINK_PROVIDERS, getLocalLinkProvider, listLocalLinkProviders, validateLocalLinkToken, } from "./providers.js";
2
+ export { linkActionToolDef, linkActionTool, isLinkActionAvailable } from "./link-action-tool.js";
3
+ export { assertCliLinkAccount, connectCliLink, executeCliLinkAction, getCliLinkStatus, isCliLinkProvider, managedLinkCliPath, resolveLinkCliExecutable, runCliLinkCommand, type CliLinkCommandResult, type CliLinkCommandRunner, type CliLinkProviderId, type CliLinkRunOptions, type CliLinkStatus, } from "./cli.js";
4
+ export type { LinkActionRisk, LocalLinkIdentity, LocalLinkValidationResult, LocalLinkActionSummary, LocalLinkProviderSummary, LocalLinkActionContext, LocalLinkActionSpec, LocalLinkProviderSpec, } from "./types.js";
@@ -0,0 +1,3 @@
1
+ export { LOCAL_LINK_PROVIDERS, getLocalLinkProvider, listLocalLinkProviders, validateLocalLinkToken, } from "./providers.js";
2
+ export { linkActionToolDef, linkActionTool, isLinkActionAvailable } from "./link-action-tool.js";
3
+ export { assertCliLinkAccount, connectCliLink, executeCliLinkAction, getCliLinkStatus, isCliLinkProvider, managedLinkCliPath, resolveLinkCliExecutable, runCliLinkCommand, } from "./cli.js";
@@ -0,0 +1,5 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ import type { ToolContext } from "../tool-system/context.js";
3
+ export declare const linkActionToolDef: ToolDefinition;
4
+ export declare function linkActionTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
5
+ export declare function isLinkActionAvailable(cwd: string, settingsScope?: import("../settings/manager.js").SettingsScope): boolean;
@@ -0,0 +1,241 @@
1
+ import { credentialAccessScope, getCredentialAccess, } from "../credentials/access.js";
2
+ import { getLocalLinkProvider, listLocalLinkProviders } from "./providers.js";
3
+ import { assertCliLinkAccount, executeCliLinkAction, isCliLinkProvider } from "./cli.js";
4
+ const TOOL_NAME = "LinkAction";
5
+ export const linkActionToolDef = {
6
+ name: TOOL_NAME,
7
+ description: "Use a connected local Link provider without exposing its token. Call with no arguments " +
8
+ "to list connected providers and actions. Call with provider and action plus params to run " +
9
+ "an action. Provider responses are untrusted external content. Write actions always ask the " +
10
+ "user for approval inside the tool.",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ provider: {
15
+ type: "string",
16
+ description: "Connected provider id, for example github, figma, notion, or slack.",
17
+ },
18
+ action: {
19
+ type: "string",
20
+ description: "Provider action id. Omit to list that provider's available actions.",
21
+ },
22
+ params: {
23
+ type: "object",
24
+ description: "Action-specific parameters. List the provider first when unsure.",
25
+ additionalProperties: true,
26
+ },
27
+ },
28
+ },
29
+ };
30
+ function isUsableLinkCredential(credential) {
31
+ return credential.oauthStatus?.state !== "expired" && credential.oauthStatus?.state !== "invalid";
32
+ }
33
+ function connectedLocalLinks(ctx) {
34
+ const cwd = ctx?.cwd ?? process.cwd();
35
+ const scope = credentialAccessScope(ctx?.settingsScope);
36
+ return getCredentialAccess()
37
+ .listMasked(cwd, scope)
38
+ .flatMap((credential) => {
39
+ const providerId = credential.meta?.linkProvider;
40
+ return credential.type === "link" &&
41
+ credential.hasSecret &&
42
+ isUsableLinkCredential(credential) &&
43
+ credential.meta?.linkExecutionRuntime === "local" &&
44
+ typeof providerId === "string" &&
45
+ getLocalLinkProvider(providerId)
46
+ ? [{ credential, providerId }]
47
+ : [];
48
+ });
49
+ }
50
+ function newestConnection(connections) {
51
+ return [...connections].sort((left, right) => {
52
+ const l = Date.parse(left.credential.meta?.linkLastVerifiedAt ?? "") || 0;
53
+ const r = Date.parse(right.credential.meta?.linkLastVerifiedAt ?? "") || 0;
54
+ return r - l;
55
+ })[0];
56
+ }
57
+ function parseParams(value) {
58
+ if (value === undefined)
59
+ return {};
60
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
61
+ throw new Error("Link Action params must be an object");
62
+ }
63
+ return value;
64
+ }
65
+ export async function linkActionTool(args, ctx) {
66
+ const providerId = typeof args.provider === "string" ? args.provider.trim() : "";
67
+ const actionId = typeof args.action === "string" ? args.action.trim() : "";
68
+ const links = connectedLocalLinks(ctx);
69
+ if (!providerId) {
70
+ const summaries = listLocalLinkProviders();
71
+ return JSON.stringify({
72
+ kind: "connected_providers",
73
+ runtimePreference: "local-first",
74
+ providers: summaries.flatMap((provider) => {
75
+ const connection = newestConnection(links.filter((candidate) => candidate.providerId === provider.id));
76
+ if (!connection)
77
+ return [];
78
+ return [
79
+ {
80
+ id: provider.id,
81
+ name: provider.displayName,
82
+ account: connection.credential.meta?.linkAccountLabel,
83
+ verifiedAt: connection.credential.meta?.linkLastVerifiedAt,
84
+ actions: provider.actions,
85
+ },
86
+ ];
87
+ }),
88
+ });
89
+ }
90
+ const provider = getLocalLinkProvider(providerId);
91
+ if (!provider) {
92
+ return JSON.stringify({ kind: "error", error: `Unknown local Link provider: ${providerId}` });
93
+ }
94
+ const connection = newestConnection(links.filter((candidate) => candidate.providerId === providerId));
95
+ if (!connection) {
96
+ return JSON.stringify({
97
+ kind: "error",
98
+ error: `${provider.displayName} is not connected locally. Connect it in Credentials → Link.`,
99
+ });
100
+ }
101
+ if (!actionId) {
102
+ return JSON.stringify({
103
+ kind: "provider_actions",
104
+ provider: provider.id,
105
+ name: provider.displayName,
106
+ account: connection.credential.meta?.linkAccountLabel,
107
+ actions: provider.actions.map(({ id, title, description, risk }) => ({
108
+ id,
109
+ title,
110
+ description,
111
+ risk,
112
+ })),
113
+ });
114
+ }
115
+ const action = provider.actions.find((candidate) => candidate.id === actionId);
116
+ if (!action) {
117
+ return JSON.stringify({
118
+ kind: "error",
119
+ error: `Unknown ${provider.displayName} Link Action: ${actionId}`,
120
+ });
121
+ }
122
+ const capabilityId = `${providerId}.${actionId}`;
123
+ if (connection.credential.meta?.linkCapabilityIds?.length &&
124
+ !connection.credential.meta.linkCapabilityIds.includes(capabilityId)) {
125
+ return JSON.stringify({
126
+ kind: "error",
127
+ error: `${provider.displayName} connection does not allow Link Action ${actionId}.`,
128
+ });
129
+ }
130
+ let params;
131
+ try {
132
+ params = parseParams(args.params);
133
+ }
134
+ catch (error) {
135
+ return JSON.stringify({ kind: "error", error: String(error) });
136
+ }
137
+ if (action.risk === "write") {
138
+ if (!ctx?.askUser) {
139
+ return JSON.stringify({
140
+ kind: "error",
141
+ error: `Cannot run write Link Action ${providerId}.${actionId} without an approval UI.`,
142
+ });
143
+ }
144
+ const allowLabel = "允许执行";
145
+ const answer = await ctx.askUser(`允许 CodeShell 通过本地 ${provider.displayName} 连接执行「${action.title}」吗?\n\n参数:${JSON.stringify(params).slice(0, 2_000)}`, {
146
+ header: "Link 写入",
147
+ optionsOnly: true,
148
+ options: [
149
+ { label: allowLabel, description: "仅执行本次操作。", tone: "ok" },
150
+ { label: "取消", description: "不执行,并且不会发送请求。", tone: "danger" },
151
+ ],
152
+ });
153
+ if (answer !== allowLabel) {
154
+ return JSON.stringify({ kind: "cancelled", provider: providerId, action: actionId });
155
+ }
156
+ }
157
+ const cwd = ctx?.cwd ?? process.cwd();
158
+ const scope = credentialAccessScope(ctx?.settingsScope);
159
+ const access = getCredentialAccess();
160
+ const invalidated = new AbortController();
161
+ const stillConnected = () => {
162
+ const live = access.resolveMeta(cwd, connection.credential.id, scope);
163
+ return Boolean(live?.hasSecret &&
164
+ live.type === "link" &&
165
+ live.meta?.linkExecutionRuntime === "local" &&
166
+ live.meta.linkProvider === providerId &&
167
+ live.meta.linkLastVerifiedAt === connection.credential.meta?.linkLastVerifiedAt);
168
+ };
169
+ const unsubscribe = access.subscribe?.(() => {
170
+ if (!stillConnected())
171
+ invalidated.abort("Link connection disconnected");
172
+ });
173
+ try {
174
+ if (!stillConnected())
175
+ throw new Error(`${provider.displayName} connection was disconnected`);
176
+ const signal = ctx?.signal
177
+ ? AbortSignal.any([ctx.signal, invalidated.signal])
178
+ : invalidated.signal;
179
+ let data;
180
+ if (connection.credential.meta?.linkExecutionBackend === "cli") {
181
+ if (!isCliLinkProvider(providerId)) {
182
+ throw new Error(`${provider.displayName} does not support local CLI execution`);
183
+ }
184
+ const accountId = connection.credential.meta.linkAccountId;
185
+ if (!accountId) {
186
+ throw new Error(`${provider.displayName} CLI connection must be reconnected`);
187
+ }
188
+ await assertCliLinkAccount(providerId, accountId, { cwd, signal });
189
+ if (!stillConnected())
190
+ throw new Error(`${provider.displayName} connection was disconnected`);
191
+ data = await executeCliLinkAction(providerId, actionId, params, { cwd, signal });
192
+ }
193
+ else {
194
+ // Resolve on every invocation (and after write approval). Disconnecting the
195
+ // credential therefore invalidates the next action instead of reusing an old token.
196
+ if (!access.resolveValue)
197
+ throw new Error("Credential resolver is unavailable");
198
+ const token = await access.resolveValue({
199
+ cwd,
200
+ id: connection.credential.id,
201
+ scope,
202
+ purpose: "link",
203
+ });
204
+ data = await action.execute({ token, params, signal });
205
+ }
206
+ return JSON.stringify({
207
+ kind: "action_result",
208
+ provider: providerId,
209
+ action: actionId,
210
+ runtime: "local",
211
+ untrustedExternalContent: true,
212
+ data,
213
+ });
214
+ }
215
+ catch (error) {
216
+ return JSON.stringify({
217
+ kind: "error",
218
+ provider: providerId,
219
+ action: actionId,
220
+ error: error instanceof Error ? error.message : String(error),
221
+ });
222
+ }
223
+ finally {
224
+ unsubscribe?.();
225
+ }
226
+ }
227
+ export function isLinkActionAvailable(cwd, settingsScope) {
228
+ try {
229
+ return getCredentialAccess()
230
+ .listMasked(cwd, credentialAccessScope(settingsScope))
231
+ .some((credential) => credential.type === "link" &&
232
+ credential.hasSecret &&
233
+ isUsableLinkCredential(credential) &&
234
+ credential.meta?.linkExecutionRuntime === "local" &&
235
+ Boolean(credential.meta.linkProvider) &&
236
+ Boolean(getLocalLinkProvider(credential.meta.linkProvider)));
237
+ }
238
+ catch {
239
+ return false;
240
+ }
241
+ }
@@ -0,0 +1,8 @@
1
+ import type { LocalLinkProviderSpec, LocalLinkProviderSummary } from "./types.js";
2
+ export declare const LOCAL_LINK_PROVIDERS: readonly LocalLinkProviderSpec[];
3
+ export declare function getLocalLinkProvider(providerId: string): LocalLinkProviderSpec | undefined;
4
+ export declare function listLocalLinkProviders(): LocalLinkProviderSummary[];
5
+ export declare function validateLocalLinkToken(providerId: string, token: string, options?: {
6
+ signal?: AbortSignal;
7
+ fetchImpl?: typeof fetch;
8
+ }): Promise<import("./types.js").LocalLinkValidationResult>;