@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
@@ -5,7 +5,7 @@ import { join } from "node:path";
5
5
  import { credentialAllowsEnvExposure, credentialSecretHint, } from "./types.js";
6
6
  import { CredentialStore } from "./store.js";
7
7
  import { formatNetscapeCookies, parseCookieJar } from "./cookie-jar.js";
8
- import { parseOAuthCredentialSecret, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, } from "./oauth.js";
8
+ import { parseOAuthCredentialSecret, isBrowserOAuthLinkCredential, resolveLinkCredentialAccessToken, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, } from "./oauth.js";
9
9
  import { refreshToken } from "../services/oauth.js";
10
10
  const COOKIE_FILE_PREFIX = "codeshell-cred-cookie-";
11
11
  const COOKIE_FILE_MAX_AGE_MS = 30 * 60 * 1000;
@@ -19,6 +19,7 @@ export function getCredentialAccess() {
19
19
  export function createIpcCredentialAccess(transport) {
20
20
  let snapshot = { revision: 0, entries: [] };
21
21
  let nextId = 1;
22
+ const subscribers = new Set();
22
23
  const pending = new Map();
23
24
  transport.onMessage((msg) => {
24
25
  if ("method" in msg && msg.method === "desktop/credentialSnapshot") {
@@ -28,6 +29,14 @@ export function createIpcCredentialAccess(transport) {
28
29
  revision: params.revision,
29
30
  entries: params.entries,
30
31
  };
32
+ for (const listener of subscribers) {
33
+ try {
34
+ listener();
35
+ }
36
+ catch {
37
+ // One consumer must not break the credential snapshot transport.
38
+ }
39
+ }
31
40
  }
32
41
  return;
33
42
  }
@@ -81,6 +90,10 @@ export function createIpcCredentialAccess(transport) {
81
90
  return {};
82
91
  return { ...(scope === "project" ? entry.envProject : entry.envFull) };
83
92
  },
93
+ subscribe(listener) {
94
+ subscribers.add(listener);
95
+ return () => subscribers.delete(listener);
96
+ },
84
97
  async resolveValue(req) {
85
98
  const result = (await request("desktop/credentialResolve", req));
86
99
  if (typeof result?.value !== "string")
@@ -121,7 +134,9 @@ function toMetadata(cred) {
121
134
  ...(credentialAllowsEnvExposure(cred.type) ? {} : { exposeAsEnv: undefined }),
122
135
  hasSecret: available,
123
136
  secretHint: available ? credentialSecretHint(cred.type, secret) : undefined,
124
- ...(cred.type === "oauth" ? { oauthStatus: summarizeOAuthCredentialSecret(secret) } : {}),
137
+ ...(cred.type === "oauth" || isBrowserOAuthLinkCredential(cred)
138
+ ? { oauthStatus: summarizeOAuthCredentialSecret(secret) }
139
+ : {}),
125
140
  };
126
141
  }
127
142
  function cloneMetadata(list) {
@@ -155,7 +170,13 @@ export const localCredentialAccess = {
155
170
  if (!cred || !isCredentialSecretAvailable(cred.secret)) {
156
171
  throw new Error(`credential "${req.id}" is unavailable`);
157
172
  }
158
- return cred.secret;
173
+ if (req.purpose === "link" &&
174
+ (cred.type !== "link" ||
175
+ cred.meta?.linkExecutionRuntime !== "local" ||
176
+ !cred.meta.linkProvider)) {
177
+ throw new Error(`credential "${req.id}" is not a local Link credential`);
178
+ }
179
+ return req.purpose === "link" ? resolveLinkCredentialAccessToken(cred) : cred.secret;
159
180
  },
160
181
  async resolveOAuthAccess(req) {
161
182
  return resolveLocalOAuthAccess(req.id, Boolean(req.forceRefresh));
@@ -4,7 +4,7 @@ export { type EncryptionCipher, PlaintextCipher, setDefaultCredentialCipher, get
4
4
  export { getCredentialAccess, setDefaultCredentialAccess, createIpcCredentialAccess, localCredentialAccess, credentialAccessScope, isCredentialSecretAvailable, materializeCookieSecret, type CredentialAccess, type CredentialAccessScope, type CredentialMetadata, type CredentialSnapshot, type CredentialSnapshotEntry, } from "./access.js";
5
5
  export type { Credential, CredentialType, CredentialStoreFile, OAuthCredentialPublicStatus, OAuthCredentialSecret, OAuthTokenResponse, } from "./types.js";
6
6
  export { credentialAllowsEnvExposure, credentialSecretHint } from "./types.js";
7
- export { buildOAuthRefreshRequest, isOAuthAccessTokenExpired, oauthCredentialStatus, parseOAuthCredentialSecret, mergeOAuthTokenResponse, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, type OAuthClockOptions, type OAuthRefreshHandler, type OAuthRefreshRequest, } from "./oauth.js";
7
+ export { buildOAuthRefreshRequest, isBrowserOAuthLinkCredential, isOAuthAccessTokenExpired, oauthCredentialStatus, parseOAuthCredentialSecret, resolveLinkCredentialAccessToken, mergeOAuthTokenResponse, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, type OAuthClockOptions, type OAuthRefreshHandler, type OAuthRefreshRequest, } from "./oauth.js";
8
8
  export { formatNetscapeCookies, parseCookieJar, type CookieLike } from "./cookie-jar.js";
9
9
  export { useCredentialToolDef, useCredentialToolDefFor, useCredentialTool, sweepStaleCredentialCookies, } from "./use-credential-tool.js";
10
10
  export { credentialUseGate } from "./use-gate.js";
@@ -2,7 +2,7 @@ export { CredentialStore } from "./store.js";
2
2
  export { PlaintextCipher, setDefaultCredentialCipher, getDefaultCredentialCipher, } from "./cipher.js";
3
3
  export { getCredentialAccess, setDefaultCredentialAccess, createIpcCredentialAccess, localCredentialAccess, credentialAccessScope, isCredentialSecretAvailable, materializeCookieSecret, } from "./access.js";
4
4
  export { credentialAllowsEnvExposure, credentialSecretHint } from "./types.js";
5
- export { buildOAuthRefreshRequest, isOAuthAccessTokenExpired, oauthCredentialStatus, parseOAuthCredentialSecret, mergeOAuthTokenResponse, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, } from "./oauth.js";
5
+ export { buildOAuthRefreshRequest, isBrowserOAuthLinkCredential, isOAuthAccessTokenExpired, oauthCredentialStatus, parseOAuthCredentialSecret, resolveLinkCredentialAccessToken, mergeOAuthTokenResponse, shouldRefreshOAuthCredential, summarizeOAuthCredentialSecret, } from "./oauth.js";
6
6
  export { formatNetscapeCookies, parseCookieJar } from "./cookie-jar.js";
7
7
  export { useCredentialToolDef, useCredentialToolDefFor, useCredentialTool, sweepStaleCredentialCookies, } from "./use-credential-tool.js";
8
8
  export { credentialUseGate } from "./use-gate.js";
@@ -1,4 +1,4 @@
1
- import type { OAuthCredentialPublicStatus, OAuthCredentialSecret, OAuthTokenResponse } from "./types.js";
1
+ import type { Credential, OAuthCredentialPublicStatus, OAuthCredentialSecret, OAuthTokenResponse } from "./types.js";
2
2
  export interface OAuthClockOptions {
3
3
  now?: number | (() => number);
4
4
  skewMs?: number;
@@ -14,6 +14,9 @@ export interface OAuthRefreshRequest {
14
14
  }
15
15
  export type OAuthRefreshHandler = (req: OAuthRefreshRequest) => Promise<OAuthCredentialSecret>;
16
16
  export declare function parseOAuthCredentialSecret(secret: string): OAuthCredentialSecret;
17
+ export declare function isBrowserOAuthLinkCredential(credential: Pick<Credential, "type" | "meta">): boolean;
18
+ /** Return only the bearer token from a Link secret, never its refresh material. */
19
+ export declare function resolveLinkCredentialAccessToken(credential: Pick<Credential, "type" | "secret" | "meta">): string | undefined;
17
20
  /** Merge and validate an OAuth token endpoint response without losing rotation state. */
18
21
  export declare function mergeOAuthTokenResponse(previous: OAuthCredentialSecret | undefined, response: OAuthTokenResponse, opts?: {
19
22
  now?: number;
@@ -56,6 +56,8 @@ export function parseOAuthCredentialSecret(secret) {
56
56
  }
57
57
  const expiresAt = optionalString(raw.expiresAt);
58
58
  parseExpiresAt(expiresAt);
59
+ const refreshTokenExpiresAt = optionalString(raw.refreshTokenExpiresAt);
60
+ parseExpiresAt(refreshTokenExpiresAt);
59
61
  const tokenType = optionalString(raw.tokenType);
60
62
  if (tokenType && tokenType.toLowerCase() !== "bearer") {
61
63
  throw new Error("OAuth credential tokenType must be Bearer");
@@ -65,6 +67,7 @@ export function parseOAuthCredentialSecret(secret) {
65
67
  accessToken,
66
68
  refreshToken: optionalString(raw.refreshToken),
67
69
  expiresAt,
70
+ refreshTokenExpiresAt,
68
71
  tokenType,
69
72
  scope: optionalString(raw.scope),
70
73
  scopes: optionalStringArray(raw.scopes),
@@ -94,6 +97,17 @@ export function parseOAuthCredentialSecret(secret) {
94
97
  : undefined,
95
98
  };
96
99
  }
100
+ export function isBrowserOAuthLinkCredential(credential) {
101
+ return credential.type === "link" && credential.meta?.linkAuthSource === "browser-oauth";
102
+ }
103
+ /** Return only the bearer token from a Link secret, never its refresh material. */
104
+ export function resolveLinkCredentialAccessToken(credential) {
105
+ if (!credential.secret)
106
+ return undefined;
107
+ return isBrowserOAuthLinkCredential(credential)
108
+ ? parseOAuthCredentialSecret(credential.secret).accessToken
109
+ : credential.secret;
110
+ }
97
111
  /** Merge and validate an OAuth token endpoint response without losing rotation state. */
98
112
  export function mergeOAuthTokenResponse(previous, response, opts = {}) {
99
113
  const accessToken = optionalString(response.access_token);
@@ -13,6 +13,13 @@ export interface MaskedCredential extends Omit<Credential, "secret"> {
13
13
  */
14
14
  export declare class CredentialStore {
15
15
  private readonly cwd?;
16
+ /**
17
+ * Override the user-scope store directory (the `~/.code-shell` layer;
18
+ * `credentials.json` lives directly inside it). Absent → today's
19
+ * behavior: `join(userHome(), ".code-shell")` resolved per call.
20
+ * Injection point for identity-scoped server deployments.
21
+ */
22
+ private readonly userDirOverride?;
16
23
  private readonly cipher;
17
24
  /**
18
25
  * @param cwd project root for the project-scope store (undefined → user only).
@@ -22,7 +29,14 @@ export declare class CredentialStore {
22
29
  * returns PLAINTEXT secrets; encryption is applied only at the
23
30
  * disk boundary (read decrypts, write encrypts).
24
31
  */
25
- constructor(cwd?: string | undefined, cipher?: EncryptionCipher);
32
+ constructor(cwd?: string | undefined, cipher?: EncryptionCipher,
33
+ /**
34
+ * Override the user-scope store directory (the `~/.code-shell` layer;
35
+ * `credentials.json` lives directly inside it). Absent → today's
36
+ * behavior: `join(userHome(), ".code-shell")` resolved per call.
37
+ * Injection point for identity-scoped server deployments.
38
+ */
39
+ userDirOverride?: string | undefined);
26
40
  private pathFor;
27
41
  /**
28
42
  * Decrypt a stored secret to plaintext. A value this cipher can't decrypt
@@ -5,6 +5,7 @@ import { credentialAllowsEnvExposure, credentialSecretHint, } from "./types.js";
5
5
  import { getDefaultCredentialCipher } from "./cipher.js";
6
6
  import { logger } from "../logging/logger.js";
7
7
  import { summarizeOAuthCredentialSecret } from "./oauth.js";
8
+ import { isBrowserOAuthLinkCredential } from "./oauth.js";
8
9
  /** 测试可经 process.env.HOME 覆盖(镜像 settings/manager.ts userHome)。 */
9
10
  function userHome() {
10
11
  return process.env.HOME ?? homedir();
@@ -16,6 +17,7 @@ const EMPTY = { version: 1, credentials: [] };
16
17
  */
17
18
  export class CredentialStore {
18
19
  cwd;
20
+ userDirOverride;
19
21
  cipher;
20
22
  /**
21
23
  * @param cwd project root for the project-scope store (undefined → user only).
@@ -25,13 +27,22 @@ export class CredentialStore {
25
27
  * returns PLAINTEXT secrets; encryption is applied only at the
26
28
  * disk boundary (read decrypts, write encrypts).
27
29
  */
28
- constructor(cwd, cipher) {
30
+ constructor(cwd, cipher,
31
+ /**
32
+ * Override the user-scope store directory (the `~/.code-shell` layer;
33
+ * `credentials.json` lives directly inside it). Absent → today's
34
+ * behavior: `join(userHome(), ".code-shell")` resolved per call.
35
+ * Injection point for identity-scoped server deployments.
36
+ */
37
+ userDirOverride) {
29
38
  this.cwd = cwd;
39
+ this.userDirOverride = userDirOverride;
30
40
  this.cipher = cipher ?? getDefaultCredentialCipher();
31
41
  }
32
42
  pathFor(scope) {
33
- if (scope === "user")
34
- return join(userHome(), ".code-shell", "credentials.json");
43
+ if (scope === "user") {
44
+ return join(this.userDirOverride ?? join(userHome(), ".code-shell"), "credentials.json");
45
+ }
35
46
  if (!this.cwd)
36
47
  return undefined;
37
48
  return join(this.cwd, ".code-shell", "credentials.json");
@@ -188,7 +199,9 @@ export class CredentialStore {
188
199
  ...(credentialAllowsEnvExposure(c.type) ? {} : { exposeAsEnv: undefined }),
189
200
  hasSecret: typeof secret === "string" && secret.length > 0,
190
201
  secretHint: credentialSecretHint(c.type, secret),
191
- ...(c.type === "oauth" ? { oauthStatus: summarizeOAuthCredentialSecret(secret) } : {}),
202
+ ...(c.type === "oauth" || isBrowserOAuthLinkCredential(c)
203
+ ? { oauthStatus: summarizeOAuthCredentialSecret(secret) }
204
+ : {}),
192
205
  };
193
206
  });
194
207
  }
@@ -21,6 +21,8 @@ export interface OAuthCredentialSecret {
21
21
  refreshToken?: string;
22
22
  /** ISO-8601 expiry time for accessToken. Missing means "unknown", not expired. */
23
23
  expiresAt?: string;
24
+ /** Optional ISO-8601 expiry time for a rotating refresh token. */
25
+ refreshTokenExpiresAt?: string;
24
26
  /** Upstream token type, usually Bearer. Stored for round-trip/debugging. */
25
27
  tokenType?: string;
26
28
  /** Space-delimited OAuth scope string returned by many token endpoints. */
@@ -110,6 +112,28 @@ export interface Credential {
110
112
  domain?: string;
111
113
  scope?: "domain" | "all";
112
114
  switchMode?: "clear" | "merge";
115
+ /** Link provider id for credentials owned by a local/server app connection. */
116
+ linkProvider?: string;
117
+ /** Provider-specific connection method, e.g. fine-grained-pat or github-app. */
118
+ linkConnectionMethod?: string;
119
+ /** Where Link actions execute. Local is preferred when both runtimes are usable. */
120
+ linkExecutionRuntime?: "local" | "server";
121
+ /** How a local Link credential was obtained without exposing its secret to the renderer. */
122
+ linkAuthSource?: "manual-token" | "github-cli" | "cli-session" | "browser-oauth";
123
+ /** Fixed execution adapter. CLI bindings never resolve or copy a provider token. */
124
+ linkExecutionBackend?: "http-token" | "cli";
125
+ /** False for provider-owned Link secrets that must only flow through LinkAction. */
126
+ agentExposable?: boolean;
127
+ /** Stable upstream account/user id returned by the provider validation endpoint. */
128
+ linkAccountId?: string;
129
+ /** Human-readable upstream account label shown in the Link page. */
130
+ linkAccountLabel?: string;
131
+ /** Safe resource labels returned during validation for a compact Link card preview. */
132
+ linkResourceLabels?: string[];
133
+ /** Provider Action ids enabled for this connection. */
134
+ linkCapabilityIds?: string[];
135
+ /** ISO timestamp of the last successful live provider validation. */
136
+ linkLastVerifiedAt?: string;
113
137
  /** OAuth provider/integration id, e.g. "figma". */
114
138
  oauthProvider?: string;
115
139
  /** MCP server identity associated with an advanced OAuth login. */
@@ -24,6 +24,13 @@ const BASE_DESCRIPTION = "Use a stored credential (token / API key / login cooki
24
24
  "value; cookie credentials are materialized to a temporary Netscape cookies.txt file " +
25
25
  "(use it as `yt-dlp --cookies <cookiesFile>` / `curl -b <cookiesFile>`). " +
26
26
  "Each use is gated by a quick user approval unless auto-approve is on.";
27
+ function isAgentExposableCredential(credential) {
28
+ if (credential.meta?.agentExposable === false)
29
+ return false;
30
+ return !(credential.type === "link" &&
31
+ credential.meta?.linkExecutionRuntime === "local" &&
32
+ credential.meta.linkProvider);
33
+ }
27
34
  export const useCredentialToolDef = {
28
35
  name: TOOL_NAME,
29
36
  description: BASE_DESCRIPTION,
@@ -47,7 +54,7 @@ export const useCredentialToolDef = {
47
54
  */
48
55
  export function useCredentialToolDefFor(cwd) {
49
56
  try {
50
- const list = getCredentialAccess().listMasked(cwd, "full");
57
+ const list = getCredentialAccess().listMasked(cwd, "full").filter(isAgentExposableCredential);
51
58
  if (list.length === 0)
52
59
  return useCredentialToolDef;
53
60
  const names = list.map((c) => `${c.id} (${c.type})`).join(", ");
@@ -113,6 +120,7 @@ export async function useCredentialTool(args, ctx) {
113
120
  if (!id) {
114
121
  const credentials = access
115
122
  .listMasked(cwd, scope)
123
+ .filter(isAgentExposableCredential)
116
124
  .map((c) => ({ id: c.id, label: c.label, type: c.type }));
117
125
  return json({ kind: "list", credentials });
118
126
  }
@@ -120,6 +128,12 @@ export async function useCredentialTool(args, ctx) {
120
128
  if (!cred) {
121
129
  return json({ kind: "error", error: `凭证不存在: "${id}"。调用本工具(无参)可列出可用凭证。` });
122
130
  }
131
+ if (!isAgentExposableCredential(cred)) {
132
+ return json({
133
+ kind: "error",
134
+ error: `凭证「${cred.label}」只能通过 Link Action 使用,不能读取原始 Token。`,
135
+ });
136
+ }
123
137
  // 取值前过门
124
138
  const ask = ctx?.askUser
125
139
  ? (q, opts) => ctx.askUser(q, opts)
@@ -0,0 +1,40 @@
1
+ import type { LLMConfig, TokenUsage } from "../types.js";
2
+ import { createLLMClient } from "../llm/client-factory.js";
3
+ import type { ModelPool } from "../llm/model-pool.js";
4
+ import type { SettingsManager } from "../settings/manager.js";
5
+ import type { ToolRegistry } from "../tool-system/registry.js";
6
+ import type { ToolContext } from "../tool-system/context.js";
7
+ import type { Transcript } from "../session/transcript.js";
8
+ import type { CumulativeUsageCounters } from "../session/usage.js";
9
+ import type { EngineConfig } from "./types.js";
10
+ export type EngineLlmClient = Awaited<ReturnType<typeof createLLMClient>>;
11
+ export interface ResolvedAuxClient {
12
+ client: EngineLlmClient;
13
+ maxContextTokens: number;
14
+ }
15
+ export interface MemoriesConfig {
16
+ maxCount?: number;
17
+ maxAge?: number;
18
+ extractionModel?: string;
19
+ autoExtract?: boolean;
20
+ }
21
+ export declare function sameLlmIdentity(a: LLMConfig, b: LLMConfig): boolean;
22
+ export declare function buildSummarizeFn(client: EngineLlmClient, recordCumulativeUsage?: (usage: TokenUsage) => CumulativeUsageCounters): (prompt: string, signal?: AbortSignal) => Promise<string>;
23
+ export declare class AuxiliaryPipeline {
24
+ private readonly deps;
25
+ private auxClientCache?;
26
+ constructor(deps: {
27
+ config: () => EngineConfig;
28
+ settings: () => SettingsManager;
29
+ modelPool: () => ModelPool;
30
+ toolRegistry: () => ToolRegistry;
31
+ toolContext: () => ToolContext;
32
+ });
33
+ buildSummarizeFn(client: EngineLlmClient, recordCumulativeUsage?: (usage: TokenUsage) => CumulativeUsageCounters): (prompt: string, signal?: AbortSignal) => Promise<string>;
34
+ readMemoriesConfig(): MemoriesConfig | undefined;
35
+ resolveAuxClient(fallback: EngineLlmClient): Promise<EngineLlmClient>;
36
+ resolveAuxClientWithMetadata(fallback: EngineLlmClient, fallbackMaxContextTokens?: number): Promise<ResolvedAuxClient>;
37
+ runMemoryPipeline(transcript: Transcript, sessionId: string, cwd: string, primaryClient: EngineLlmClient, recordBilledUsage?: (usage: TokenUsage) => void): Promise<void>;
38
+ private runDreamLoop;
39
+ private resolveExtractionClient;
40
+ }
@@ -0,0 +1,181 @@
1
+ import { createLLMClient } from "../llm/client-factory.js";
2
+ import { logger } from "../logging/logger.js";
3
+ import { sanitizeContent } from "../logging/sanitize-messages.js";
4
+ import { MemoryOrchestrator } from "../services/memory-orchestrator.js";
5
+ import { runDreamConsolidation } from "../services/dream-consolidation.js";
6
+ import { resolveAuxKey } from "./aux-key.js";
7
+ export function sameLlmIdentity(a, b) {
8
+ return (a.model === b.model &&
9
+ (a.baseUrl ?? undefined) === (b.baseUrl ?? undefined) &&
10
+ (a.provider ?? undefined) === (b.provider ?? undefined) &&
11
+ (a.providerKind ?? undefined) === (b.providerKind ?? undefined) &&
12
+ (a.maxTokens ?? undefined) === (b.maxTokens ?? undefined) &&
13
+ JSON.stringify(a.reasoning ?? null) === JSON.stringify(b.reasoning ?? null));
14
+ }
15
+ export function buildSummarizeFn(client, recordCumulativeUsage) {
16
+ return async (prompt, signal) => {
17
+ const response = await client.createMessage({
18
+ systemPrompt: "You are a conversation summarizer. Be concise and factual.",
19
+ messages: [{ role: "user", content: prompt }],
20
+ tools: [],
21
+ maxTokens: 1024,
22
+ billingEnabled: true,
23
+ requestVisible: false,
24
+ reasoning: { mode: "off" },
25
+ signal,
26
+ });
27
+ if (response.usage)
28
+ recordCumulativeUsage?.(response.usage);
29
+ return response.text;
30
+ };
31
+ }
32
+ export class AuxiliaryPipeline {
33
+ deps;
34
+ auxClientCache;
35
+ constructor(deps) {
36
+ this.deps = deps;
37
+ }
38
+ buildSummarizeFn(client, recordCumulativeUsage) {
39
+ return buildSummarizeFn(client, recordCumulativeUsage);
40
+ }
41
+ readMemoriesConfig() {
42
+ try {
43
+ return this.deps.settings().get().memories;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ }
49
+ async resolveAuxClient(fallback) {
50
+ return (await this.resolveAuxClientWithMetadata(fallback)).client;
51
+ }
52
+ async resolveAuxClientWithMetadata(fallback, fallbackMaxContextTokens = 200_000) {
53
+ let auxKey;
54
+ try {
55
+ const settings = this.deps.settings();
56
+ settings.invalidate();
57
+ auxKey = resolveAuxKey(settings.get());
58
+ }
59
+ catch {
60
+ return { client: fallback, maxContextTokens: fallbackMaxContextTokens };
61
+ }
62
+ if (!auxKey)
63
+ return { client: fallback, maxContextTokens: fallbackMaxContextTokens };
64
+ const modelPool = this.deps.modelPool();
65
+ const entry = modelPool.get(auxKey);
66
+ if (entry && sameLlmIdentity(modelPool.toLLMConfig(entry), this.deps.config().llm)) {
67
+ return {
68
+ client: fallback,
69
+ maxContextTokens: entry.maxContextTokens ?? fallbackMaxContextTokens,
70
+ };
71
+ }
72
+ if (this.auxClientCache?.key === auxKey) {
73
+ return {
74
+ client: this.auxClientCache.client,
75
+ maxContextTokens: entry?.maxContextTokens ?? fallbackMaxContextTokens,
76
+ };
77
+ }
78
+ if (!entry) {
79
+ logger.warn("engine.aux_model_missing", { auxModelKey: auxKey });
80
+ return { client: fallback, maxContextTokens: fallbackMaxContextTokens };
81
+ }
82
+ try {
83
+ const client = await createLLMClient(modelPool.toLLMConfig(entry), this.deps.config().clientDefaults);
84
+ this.auxClientCache = { key: auxKey, client };
85
+ return {
86
+ client,
87
+ maxContextTokens: entry.maxContextTokens ?? fallbackMaxContextTokens,
88
+ };
89
+ }
90
+ catch (error) {
91
+ logger.warn("engine.aux_model_build_failed", {
92
+ auxModelKey: auxKey,
93
+ error: error.message,
94
+ });
95
+ return { client: fallback, maxContextTokens: fallbackMaxContextTokens };
96
+ }
97
+ }
98
+ async runMemoryPipeline(transcript, sessionId, cwd, primaryClient, recordBilledUsage) {
99
+ try {
100
+ const llmClient = await this.resolveExtractionClient(primaryClient);
101
+ const messages = transcript
102
+ .toMessages()
103
+ .filter((message) => message.role === "user" || message.role === "assistant");
104
+ if (messages.length < 8)
105
+ return;
106
+ const plainMessages = messages.map((message) => {
107
+ const safe = sanitizeContent(message.content);
108
+ return {
109
+ role: message.role,
110
+ content: typeof safe === "string" ? safe : JSON.stringify(safe),
111
+ };
112
+ });
113
+ const memories = this.readMemoriesConfig();
114
+ const orchestrator = new MemoryOrchestrator({
115
+ callLLM: async (systemPrompt, userMessage) => {
116
+ const response = await llmClient.createMessage({
117
+ systemPrompt,
118
+ messages: [{ role: "user", content: userMessage }],
119
+ tools: [],
120
+ maxTokens: 1024,
121
+ billingEnabled: true,
122
+ requestVisible: false,
123
+ reasoning: { mode: "off" },
124
+ });
125
+ if (response.usage)
126
+ recordBilledUsage?.(response.usage);
127
+ return response.text;
128
+ },
129
+ runDream: async ({ projectDir }) => this.runDreamLoop({
130
+ projectDir,
131
+ llmClient,
132
+ sessionId,
133
+ recordBilledUsage,
134
+ }),
135
+ projectDir: cwd,
136
+ maxCount: memories?.maxCount,
137
+ autoExtract: memories?.autoExtract,
138
+ });
139
+ await orchestrator.run(plainMessages, sessionId);
140
+ }
141
+ catch (error) {
142
+ logger.warn("engine.memory_pipeline_failed", {
143
+ sessionId,
144
+ error: error.message,
145
+ });
146
+ }
147
+ }
148
+ async runDreamLoop(options) {
149
+ const { ran } = await runDreamConsolidation({
150
+ llmClient: options.llmClient,
151
+ toolRegistry: this.deps.toolRegistry(),
152
+ toolContext: this.deps.toolContext(),
153
+ projectDir: options.projectDir,
154
+ sessionId: options.sessionId,
155
+ onUsage: options.recordBilledUsage,
156
+ });
157
+ return ran;
158
+ }
159
+ async resolveExtractionClient(primaryClient) {
160
+ const key = this.readMemoriesConfig()?.extractionModel;
161
+ const modelPool = this.deps.modelPool();
162
+ if (key) {
163
+ const entry = modelPool.get(key);
164
+ if (entry) {
165
+ try {
166
+ return await createLLMClient(modelPool.toLLMConfig(entry), this.deps.config().clientDefaults);
167
+ }
168
+ catch (error) {
169
+ logger.warn("engine.extraction_model_build_failed", {
170
+ extractionModel: key,
171
+ error: error.message,
172
+ });
173
+ }
174
+ }
175
+ else {
176
+ logger.warn("engine.extraction_model_missing", { extractionModel: key });
177
+ }
178
+ }
179
+ return this.resolveAuxClient(primaryClient);
180
+ }
181
+ }
@@ -1,5 +1,5 @@
1
- import type { ValidatedSettings } from "./schema.js";
2
- import type { EngineConfig } from "../engine/types.js";
1
+ import type { ValidatedSettings } from "../settings/schema.js";
2
+ import type { EngineConfig } from "./types.js";
3
3
  /**
4
4
  * The subset of EngineConfig the config hot-reload ("layer 2") pushes onto an
5
5
  * already-running session's `this.config`. These are the "disk-default" fields:
@@ -1,4 +1,4 @@
1
- import { personalizationFrom } from "./personalization.js";
1
+ import { personalizationFrom } from "../settings/personalization.js";
2
2
  import { mergePluginMcpServers } from "../plugins/installer/loadPluginMcp.js";
3
3
  /**
4
4
  * Derive the disk-default config patch from freshly-read settings.
@@ -19,7 +19,10 @@ export function diskDefaultsFrom(settings,
19
19
  effectiveDisabledPlugins) {
20
20
  const agent = settings.agent ?? {};
21
21
  return {
22
- preset: agent.preset,
22
+ // preset 优先级:用户显式 agent.preset > 激活数字人的 profile.preset >
23
+ // capability 默认(resolveAgentPreset 内)。settings 已含合并后的
24
+ // project 层,profile 子树随之而来。
25
+ preset: agent.preset ?? settings.profile?.preset,
23
26
  customSystemPrompt: agent.customSystemPrompt,
24
27
  appendSystemPrompt: agent.appendSystemPrompt,
25
28
  ...personalizationFrom(agent),
@@ -15,5 +15,9 @@ import type { AgentDefinitionRegistry } from "../agent/agent-definition-registry
15
15
  *
16
16
  * Non-matching tools are returned by identity (no allocation). Pure: it never
17
17
  * mutates the input or any shared const.
18
+ *
19
+ * Run-scoped rewrites (e.g. DelegateWork's closed workspace enum) do NOT live
20
+ * here — a builtin owns those via its exposure.rewriteDefinition hook, applied
21
+ * by Engine.run() before this function.
18
22
  */
19
23
  export declare function applyDynamicToolDef(t: ToolDefinition, agentDefinitions: AgentDefinitionRegistry | undefined, guardCwd: string): ToolDefinition;
@@ -17,6 +17,10 @@ import { useCredentialToolDefFor } from "../credentials/use-credential-tool.js";
17
17
  *
18
18
  * Non-matching tools are returned by identity (no allocation). Pure: it never
19
19
  * mutates the input or any shared const.
20
+ *
21
+ * Run-scoped rewrites (e.g. DelegateWork's closed workspace enum) do NOT live
22
+ * here — a builtin owns those via its exposure.rewriteDefinition hook, applied
23
+ * by Engine.run() before this function.
20
24
  */
21
25
  export function applyDynamicToolDef(t, agentDefinitions, guardCwd) {
22
26
  if (t.name === "Agent") {