@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,41 @@
1
+ import { truncateUtf8Text } from "../truncate-utf8.js";
2
+ function serverOf(definition) {
3
+ const configured = definition.adapterConfig["server"];
4
+ if (typeof configured !== "string" || configured.trim() === "") {
5
+ throw new Error(`mcp-resource source "${definition.id}" requires adapterConfig.server`);
6
+ }
7
+ return configured.trim();
8
+ }
9
+ export function createMcpResourceAdapter(getManager) {
10
+ return {
11
+ kind: "mcp-resource",
12
+ async listScopes() {
13
+ return [{ id: "resources", label: "Resources" }];
14
+ },
15
+ async listResources(definition, scopeId) {
16
+ if (scopeId !== "resources")
17
+ return [];
18
+ const resources = await (await getManager()).listResources(serverOf(definition));
19
+ return resources.map((resource) => ({
20
+ id: resource.uri,
21
+ scopeId: "resources",
22
+ name: resource.name ?? resource.uri,
23
+ }));
24
+ },
25
+ async read(definition, resourceId, options) {
26
+ const text = await (await getManager()).readResource(serverOf(definition), resourceId, options.signal);
27
+ const truncated = truncateUtf8Text(text, options.maxBytes);
28
+ return {
29
+ resourceId,
30
+ ...truncated,
31
+ };
32
+ },
33
+ };
34
+ }
35
+ /** 生产默认:方法首次执行时才加载真 MCPManager,避免静态模块环。 */
36
+ export function defaultMcpResourceAdapter() {
37
+ return createMcpResourceAdapter(async () => {
38
+ const { MCPManager } = await import("../../tool-system/mcp-manager.js");
39
+ return MCPManager.getInstance();
40
+ });
41
+ }
@@ -0,0 +1,3 @@
1
+ /** 本地 fake 源:2 scope / 3 resource,纵切 e2e 与 CI 的载体(DS-13)。 */
2
+ import type { ConnectorAdapter } from "../adapter.js";
3
+ export declare const mockAdapter: ConnectorAdapter;
@@ -0,0 +1,29 @@
1
+ import { truncateUtf8Text } from "../truncate-utf8.js";
2
+ const RESOURCES = [
3
+ { id: "alpha/doc-1", scopeId: "alpha", name: "doc-1", text: "alpha doc one 内容" },
4
+ { id: "alpha/doc-2", scopeId: "alpha", name: "doc-2", text: "alpha doc two content" },
5
+ { id: "beta/note-1", scopeId: "beta", name: "note-1", text: "beta note one content" },
6
+ ];
7
+ export const mockAdapter = {
8
+ kind: "mock",
9
+ async listScopes() {
10
+ return [
11
+ { id: "alpha", label: "Alpha" },
12
+ { id: "beta", label: "Beta" },
13
+ ];
14
+ },
15
+ async listResources(_definition, scopeId) {
16
+ return RESOURCES.filter((resource) => resource.scopeId === scopeId).map(({ text: _text, ...metadata }) => metadata);
17
+ },
18
+ async read(_definition, resourceId, options) {
19
+ const resource = RESOURCES.find((candidate) => candidate.id === resourceId);
20
+ if (!resource) {
21
+ throw new Error(`mock resource not found: ${resourceId}`);
22
+ }
23
+ const truncated = truncateUtf8Text(resource.text, options.maxBytes);
24
+ return {
25
+ resourceId,
26
+ ...truncated,
27
+ };
28
+ },
29
+ };
@@ -0,0 +1,6 @@
1
+ /** WorkspaceSourceBinding 的项目 settings 读写(原子,经 SettingsManager)。 */
2
+ import type { SettingsManager } from "../settings/manager.js";
3
+ import { type WorkspaceSourceBinding } from "./types.js";
4
+ export declare function listBindings(sm: SettingsManager, cwd: string): WorkspaceSourceBinding[];
5
+ export declare function bindSource(sm: SettingsManager, cwd: string, binding: WorkspaceSourceBinding): void;
6
+ export declare function unbindSource(sm: SettingsManager, cwd: string, sourceId: string): void;
@@ -0,0 +1,24 @@
1
+ import { WorkspaceSourceBindingSchema } from "./types.js";
2
+ export function listBindings(sm, cwd) {
3
+ try {
4
+ const raw = sm.getForScope("project", cwd).sources;
5
+ if (!Array.isArray(raw))
6
+ return [];
7
+ return raw
8
+ .map((binding) => WorkspaceSourceBindingSchema.safeParse(binding))
9
+ .filter((result) => result.success)
10
+ .map((result) => result.data);
11
+ }
12
+ catch {
13
+ return [];
14
+ }
15
+ }
16
+ export function bindSource(sm, cwd, binding) {
17
+ const parsed = WorkspaceSourceBindingSchema.parse(binding);
18
+ const rest = listBindings(sm, cwd).filter((item) => item.sourceId !== parsed.sourceId);
19
+ sm.saveProjectSetting("sources", [...rest, parsed], cwd);
20
+ }
21
+ export function unbindSource(sm, cwd, sourceId) {
22
+ const bindings = listBindings(sm, cwd).filter((binding) => binding.sourceId !== sourceId);
23
+ sm.saveProjectSetting("sources", bindings, cwd);
24
+ }
@@ -0,0 +1,6 @@
1
+ import { type SourceDefinition } from "./types.js";
2
+ export declare function sourceCatalogPath(): string;
3
+ export declare function listSourceDefinitions(): SourceDefinition[];
4
+ export declare function readSourceDefinition(id: string): SourceDefinition | undefined;
5
+ export declare function saveSourceDefinition(definition: SourceDefinition): void;
6
+ export declare function deleteSourceDefinition(id: string): void;
@@ -0,0 +1,64 @@
1
+ /** 全局数据源目录:codeShellHome()/sources.json。损坏条目隔离,原子写。 */
2
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { logger } from "../logging/logger.js";
5
+ import { codeShellHome } from "../session/session-manager.js";
6
+ import { SourceDefinitionSchema } from "./types.js";
7
+ export function sourceCatalogPath() {
8
+ return join(codeShellHome(), "sources.json");
9
+ }
10
+ function load() {
11
+ const path = sourceCatalogPath();
12
+ if (!existsSync(path))
13
+ return [];
14
+ try {
15
+ const raw = JSON.parse(readFileSync(path, "utf-8"));
16
+ if (raw.version !== 1 || !Array.isArray(raw.sources))
17
+ return [];
18
+ const sources = [];
19
+ for (const entry of raw.sources) {
20
+ const parsed = SourceDefinitionSchema.safeParse(entry);
21
+ if (parsed.success) {
22
+ sources.push(parsed.data);
23
+ }
24
+ else {
25
+ logger.warn("sources.catalog_entry_invalid", {
26
+ cat: "sources",
27
+ entry: JSON.stringify(entry).slice(0, 200),
28
+ });
29
+ }
30
+ }
31
+ return sources;
32
+ }
33
+ catch (error) {
34
+ logger.warn("sources.catalog_unreadable", {
35
+ cat: "sources",
36
+ error: error instanceof Error ? error.message : String(error),
37
+ });
38
+ return [];
39
+ }
40
+ }
41
+ function persist(sources) {
42
+ const path = sourceCatalogPath();
43
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
44
+ const tmp = `${path}.${process.pid}.tmp`;
45
+ writeFileSync(tmp, `${JSON.stringify({ version: 1, sources }, null, 2)}\n`, {
46
+ encoding: "utf-8",
47
+ mode: 0o600,
48
+ });
49
+ renameSync(tmp, path);
50
+ }
51
+ export function listSourceDefinitions() {
52
+ return load().sort((a, b) => a.id.localeCompare(b.id));
53
+ }
54
+ export function readSourceDefinition(id) {
55
+ return load().find((source) => source.id === id);
56
+ }
57
+ export function saveSourceDefinition(definition) {
58
+ const parsed = SourceDefinitionSchema.parse(definition);
59
+ const rest = load().filter((source) => source.id !== parsed.id);
60
+ persist([...rest, parsed]);
61
+ }
62
+ export function deleteSourceDefinition(id) {
63
+ persist(load().filter((source) => source.id !== id));
64
+ }
@@ -0,0 +1,8 @@
1
+ import type { SettingsManager } from "../settings/manager.js";
2
+ import { type CredentialStatusFn } from "./resolve.js";
3
+ export interface BuildSourcesContextSummaryInput {
4
+ cwd: string;
5
+ settings: SettingsManager;
6
+ credentialStatus?: CredentialStatusFn;
7
+ }
8
+ export declare function buildSourcesContextSummary(input: BuildSourcesContextSummaryInput): string;
@@ -0,0 +1,13 @@
1
+ import { defaultCredentialStatus } from "./credential-status.js";
2
+ import { resolveEffectiveSourceAccess } from "./resolve.js";
3
+ export function buildSourcesContextSummary(input) {
4
+ const sources = resolveEffectiveSourceAccess({
5
+ cwd: input.cwd,
6
+ settings: input.settings,
7
+ credentialStatus: input.credentialStatus ?? defaultCredentialStatus,
8
+ });
9
+ if (sources.length === 0)
10
+ return "";
11
+ const lines = sources.map(({ label, kind, status, scopes }) => `- ${label} (${kind}, ${status}): ${scopes.join(", ") || "(no scopes)"}`);
12
+ return `## Bound data sources\n${lines.join("\n")}`;
13
+ }
@@ -0,0 +1,2 @@
1
+ /** Probe global credential availability through renderer-safe metadata only. */
2
+ export declare function defaultCredentialStatus(ref: string): "ok" | "missing" | "expired";
@@ -0,0 +1,13 @@
1
+ import { getCredentialAccess } from "../credentials/access.js";
2
+ /** Probe global credential availability through renderer-safe metadata only. */
3
+ export function defaultCredentialStatus(ref) {
4
+ const credential = getCredentialAccess().resolveMeta(undefined, ref, "full");
5
+ if (!credential)
6
+ return "missing";
7
+ if (credential.type === "oauth" &&
8
+ credential.oauthStatus?.state === "expired" &&
9
+ !credential.oauthStatus.hasRefreshToken) {
10
+ return "expired";
11
+ }
12
+ return "ok";
13
+ }
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export * from "./catalog.js";
3
+ export * from "./adapter.js";
4
+ export * from "./adapters/mock.js";
5
+ export * from "./adapters/local-files.js";
6
+ export * from "./adapters/mcp-resource.js";
7
+ export * from "./binding.js";
8
+ export * from "./resolve.js";
9
+ export * from "./credential-status.js";
10
+ export * from "./context-summary.js";
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export * from "./catalog.js";
3
+ export * from "./adapter.js";
4
+ export * from "./adapters/mock.js";
5
+ export * from "./adapters/local-files.js";
6
+ export * from "./adapters/mcp-resource.js";
7
+ export * from "./binding.js";
8
+ export * from "./resolve.js";
9
+ export * from "./credential-status.js";
10
+ export * from "./context-summary.js";
@@ -0,0 +1,28 @@
1
+ /**
2
+ * EffectiveSourceAccess:binding × source.enabled × credential 状态求交,
3
+ * 默认 deny(ADR §1.3/§3)。`profile` 参数为 Profile 求交预留(ADR §6),
4
+ * 本期恒不传;接线时 effective = binding ∩ profile 声明,只能收窄。
5
+ */
6
+ import type { SettingsManager } from "../settings/manager.js";
7
+ import type { SourceDefinition } from "./types.js";
8
+ export type SourceAccessStatus = "ok" | "dangling" | "unavailable";
9
+ export type CredentialStatusFn = (ref: string) => "ok" | "missing" | "expired";
10
+ export interface EffectiveSourceAccess {
11
+ sourceId: string;
12
+ label: string;
13
+ kind: string;
14
+ scopes: string[];
15
+ readPolicy: "ask" | "deny";
16
+ status: SourceAccessStatus;
17
+ definition?: SourceDefinition;
18
+ }
19
+ export interface ResolveSourceAccessInput {
20
+ cwd: string;
21
+ settings: SettingsManager;
22
+ credentialStatus: CredentialStatusFn;
23
+ /** Profile 求交预留(ADR §6);本期不实现。 */
24
+ profile?: {
25
+ requiredSources?: string[];
26
+ };
27
+ }
28
+ export declare function resolveEffectiveSourceAccess(input: ResolveSourceAccessInput): EffectiveSourceAccess[];
@@ -0,0 +1,47 @@
1
+ import { LOCAL_FILES_SOURCE_ID, listLocalFiles, localFilesSourceFor, } from "./adapters/local-files.js";
2
+ import { listBindings } from "./binding.js";
3
+ import { readSourceDefinition } from "./catalog.js";
4
+ function statusOf(definition, credentialStatus) {
5
+ if (!definition)
6
+ return "dangling";
7
+ if (!definition.enabled)
8
+ return "unavailable";
9
+ if (definition.credentialRef && credentialStatus(definition.credentialRef) !== "ok") {
10
+ return "unavailable";
11
+ }
12
+ return "ok";
13
+ }
14
+ function definitionFor(binding, cwd) {
15
+ return binding.sourceId === LOCAL_FILES_SOURCE_ID
16
+ ? localFilesSourceFor(cwd)
17
+ : readSourceDefinition(binding.sourceId);
18
+ }
19
+ export function resolveEffectiveSourceAccess(input) {
20
+ const bindings = listBindings(input.settings, input.cwd);
21
+ const access = bindings.map((binding) => {
22
+ const definition = definitionFor(binding, input.cwd);
23
+ return {
24
+ sourceId: binding.sourceId,
25
+ label: definition?.label ?? binding.sourceId,
26
+ kind: definition?.kind ?? "unknown",
27
+ scopes: binding.scopes,
28
+ readPolicy: binding.readPolicy,
29
+ status: statusOf(definition, input.credentialStatus),
30
+ ...(definition ? { definition } : {}),
31
+ };
32
+ });
33
+ const hasImplicitLocalFiles = bindings.length > 0 || listLocalFiles(input.cwd).length > 0;
34
+ if (hasImplicitLocalFiles && !access.some((item) => item.sourceId === LOCAL_FILES_SOURCE_ID)) {
35
+ const definition = localFilesSourceFor(input.cwd);
36
+ access.push({
37
+ sourceId: definition.id,
38
+ label: definition.label,
39
+ kind: definition.kind,
40
+ scopes: ["uploads"],
41
+ readPolicy: "ask",
42
+ status: "ok",
43
+ definition,
44
+ });
45
+ }
46
+ return access;
47
+ }
@@ -0,0 +1,7 @@
1
+ /** UTF-8-safe byte truncation shared by source adapters and the source tool boundary. */
2
+ export interface TruncatedText {
3
+ text: string;
4
+ truncated: boolean;
5
+ }
6
+ export declare function truncateUtf8Bytes(buffer: Buffer, maxBytes: number): TruncatedText;
7
+ export declare function truncateUtf8Text(text: string, maxBytes: number): TruncatedText;
@@ -0,0 +1,18 @@
1
+ function normalizeByteLimit(maxBytes, byteLength) {
2
+ if (!Number.isFinite(maxBytes))
3
+ return 0;
4
+ return Math.max(0, Math.min(Math.trunc(maxBytes), byteLength));
5
+ }
6
+ export function truncateUtf8Bytes(buffer, maxBytes) {
7
+ const limit = normalizeByteLimit(maxBytes, buffer.byteLength);
8
+ if (buffer.byteLength <= limit) {
9
+ return { text: buffer.toString("utf8"), truncated: false };
10
+ }
11
+ let end = limit;
12
+ while (end > 0 && (buffer[end] & 0xc0) === 0x80)
13
+ end -= 1;
14
+ return { text: buffer.subarray(0, end).toString("utf8"), truncated: true };
15
+ }
16
+ export function truncateUtf8Text(text, maxBytes) {
17
+ return truncateUtf8Bytes(Buffer.from(text, "utf8"), maxBytes);
18
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Workspace 数据源三层模型的数据定义。语义决策见
3
+ * docs/todo/workspace-datasource-binding-adr.md(ADR-1/2/4)。
4
+ * project settings 只存 binding(ref/scope/readPolicy),绝不存 secret。
5
+ */
6
+ import { z } from "zod";
7
+ export declare const SOURCE_ID_RE: RegExp;
8
+ export declare const SOURCE_KINDS: readonly ["mock", "mcp-resource", "local-files"];
9
+ export type SourceKind = (typeof SOURCE_KINDS)[number];
10
+ export declare const SourceDefinitionSchema: z.ZodObject<{
11
+ id: z.ZodString;
12
+ kind: z.ZodEnum<["mock", "mcp-resource", "local-files"]>;
13
+ label: z.ZodString;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ /** 按 kind 的 adapter 配置(如 mcp-resource: { server })。 */
16
+ adapterConfig: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
17
+ /** 指向全局 CredentialStore 的 id;local-files/mock 不需要。 */
18
+ credentialRef: z.ZodOptional<z.ZodString>;
19
+ enabled: z.ZodDefault<z.ZodBoolean>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ id: string;
22
+ enabled: boolean;
23
+ kind: "mock" | "mcp-resource" | "local-files";
24
+ label: string;
25
+ adapterConfig: Record<string, unknown>;
26
+ description?: string | undefined;
27
+ credentialRef?: string | undefined;
28
+ }, {
29
+ id: string;
30
+ kind: "mock" | "mcp-resource" | "local-files";
31
+ label: string;
32
+ enabled?: boolean | undefined;
33
+ description?: string | undefined;
34
+ adapterConfig?: Record<string, unknown> | undefined;
35
+ credentialRef?: string | undefined;
36
+ }>;
37
+ export type SourceDefinition = z.infer<typeof SourceDefinitionSchema>;
38
+ export declare const WorkspaceSourceBindingSchema: z.ZodObject<{
39
+ sourceId: z.ZodString;
40
+ /** 显式勾选的 scope id;空数组 = 什么都不可见(不是"全部")。 */
41
+ scopes: z.ZodArray<z.ZodString, "many">;
42
+ /** ask(默认,ReadSource 每次审批)| deny(只许 list metadata,禁读内容)。无 allow 档(ADR §1.2)。 */
43
+ readPolicy: z.ZodDefault<z.ZodEnum<["ask", "deny"]>>;
44
+ }, "strip", z.ZodTypeAny, {
45
+ sourceId: string;
46
+ scopes: string[];
47
+ readPolicy: "deny" | "ask";
48
+ }, {
49
+ sourceId: string;
50
+ scopes: string[];
51
+ readPolicy?: "deny" | "ask" | undefined;
52
+ }>;
53
+ export type WorkspaceSourceBinding = z.infer<typeof WorkspaceSourceBindingSchema>;
54
+ /** adapter 返回的 scope/resource/content 形状(运行时对象,不落盘)。 */
55
+ export interface SourceScope {
56
+ id: string;
57
+ label: string;
58
+ description?: string;
59
+ }
60
+ export interface SourceResourceMeta {
61
+ id: string;
62
+ scopeId: string;
63
+ name: string;
64
+ sizeBytes?: number;
65
+ mimeType?: string;
66
+ }
67
+ export interface SourceContent {
68
+ resourceId: string;
69
+ text: string;
70
+ truncated: boolean;
71
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Workspace 数据源三层模型的数据定义。语义决策见
3
+ * docs/todo/workspace-datasource-binding-adr.md(ADR-1/2/4)。
4
+ * project settings 只存 binding(ref/scope/readPolicy),绝不存 secret。
5
+ */
6
+ import { z } from "zod";
7
+ export const SOURCE_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/;
8
+ export const SOURCE_KINDS = ["mock", "mcp-resource", "local-files"];
9
+ export const SourceDefinitionSchema = z.object({
10
+ id: z.string().regex(SOURCE_ID_RE),
11
+ kind: z.enum(SOURCE_KINDS),
12
+ label: z.string().min(1),
13
+ description: z.string().optional(),
14
+ /** 按 kind 的 adapter 配置(如 mcp-resource: { server })。 */
15
+ adapterConfig: z.record(z.unknown()).default({}),
16
+ /** 指向全局 CredentialStore 的 id;local-files/mock 不需要。 */
17
+ credentialRef: z.string().optional(),
18
+ enabled: z.boolean().default(true),
19
+ });
20
+ export const WorkspaceSourceBindingSchema = z.object({
21
+ sourceId: z.string().regex(SOURCE_ID_RE),
22
+ /** 显式勾选的 scope id;空数组 = 什么都不可见(不是"全部")。 */
23
+ scopes: z.array(z.string()),
24
+ /** ask(默认,ReadSource 每次审批)| deny(只许 list metadata,禁读内容)。无 allow 档(ADR §1.2)。 */
25
+ readPolicy: z.enum(["ask", "deny"]).default("ask"),
26
+ });
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Test helper: build a stub that satisfies the FULL `typeof globalThis.fetch`.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * ---------------
6
+ * Assigning a plain `async () => new Response(...)` to `globalThis.fetch` used
7
+ * to typecheck. Bun 1.3 added a static `fetch.preconnect(url)`, so the global's
8
+ * type now carries that property and every bare-function stub fails with:
9
+ * Property 'preconnect' is missing in type '() => Promise<Response>'
10
+ * but required in type 'typeof fetch'.
11
+ *
12
+ * The runtime behavior never changed — only the static surface. Rather than
13
+ * sprinkling `as unknown as typeof fetch` (which silences real mismatches too)
14
+ * at each site, attach the missing statics once, here. When a future runtime
15
+ * adds another property to `fetch`, this is the single place to update.
16
+ *
17
+ * Prefer narrowing the PRODUCTION type instead when the code under test only
18
+ * ever *calls* fetch — see `PanelAppArchiveFetch` in ../panel-apps/github-archive.ts.
19
+ * Use this helper only where the real global genuinely has to be replaced.
20
+ */
21
+ export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
22
+ /**
23
+ * Wrap a call-only fetch implementation so it is assignable to
24
+ * `globalThis.fetch`.
25
+ *
26
+ * ```ts
27
+ * const previous = globalThis.fetch;
28
+ * globalThis.fetch = asGlobalFetch(async () => new Response("ok"));
29
+ * try { … } finally { globalThis.fetch = previous; }
30
+ * ```
31
+ */
32
+ export declare function asGlobalFetch(impl: FetchLike): typeof globalThis.fetch;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Wrap a call-only fetch implementation so it is assignable to
3
+ * `globalThis.fetch`.
4
+ *
5
+ * ```ts
6
+ * const previous = globalThis.fetch;
7
+ * globalThis.fetch = asGlobalFetch(async () => new Response("ok"));
8
+ * try { … } finally { globalThis.fetch = previous; }
9
+ * ```
10
+ */
11
+ export function asGlobalFetch(impl) {
12
+ const stub = impl;
13
+ // `preconnect` is a no-op hint even in production; tests never assert on it.
14
+ if (typeof stub.preconnect !== "function") {
15
+ Object.defineProperty(stub, "preconnect", {
16
+ value: (_url) => {
17
+ /* no-op: connection warm-up is unobservable in tests */
18
+ },
19
+ configurable: true,
20
+ writable: true,
21
+ });
22
+ }
23
+ return stub;
24
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Magic-number image validation for theme-pack assets. Mirrors the desktop
3
+ * plugin-media detector (PNG IHDR / JPEG SOF / WebP dimensions) and adds GIF so
4
+ * theme sprites can be animated: a theme pack's "motion" comes from the image
5
+ * format itself (APNG / animated WebP / GIF), never from executable content.
6
+ *
7
+ * We validate the true format by bytes (not by extension), enforce sane bounds,
8
+ * and return the canonical media type + extension the installer renames to.
9
+ */
10
+ export type ThemeImageType = "image/png" | "image/jpeg" | "image/webp" | "image/gif";
11
+ export interface ThemeImageInfo {
12
+ mediaType: ThemeImageType;
13
+ ext: "png" | "jpg" | "webp" | "gif";
14
+ width: number;
15
+ height: number;
16
+ }
17
+ /** Detect the true image type + dimensions from the first bytes, or null. */
18
+ export declare function detectThemeImage(bytes: Buffer): ThemeImageInfo | null;
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Magic-number image validation for theme-pack assets. Mirrors the desktop
3
+ * plugin-media detector (PNG IHDR / JPEG SOF / WebP dimensions) and adds GIF so
4
+ * theme sprites can be animated: a theme pack's "motion" comes from the image
5
+ * format itself (APNG / animated WebP / GIF), never from executable content.
6
+ *
7
+ * We validate the true format by bytes (not by extension), enforce sane bounds,
8
+ * and return the canonical media type + extension the installer renames to.
9
+ */
10
+ const MAX_DIMENSION = 8192;
11
+ const MAX_PIXELS = 40_000_000;
12
+ const EXT_BY_TYPE = {
13
+ "image/png": "png",
14
+ "image/jpeg": "jpg",
15
+ "image/webp": "webp",
16
+ "image/gif": "gif",
17
+ };
18
+ function jpegDimensions(bytes) {
19
+ if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
20
+ return null;
21
+ let offset = 2;
22
+ while (offset + 4 <= bytes.length) {
23
+ while (offset < bytes.length && bytes[offset] === 0xff)
24
+ offset += 1;
25
+ if (offset >= bytes.length)
26
+ break;
27
+ const marker = bytes[offset];
28
+ offset += 1;
29
+ if (marker === 0xd8 ||
30
+ marker === 0xd9 ||
31
+ marker === 0x01 ||
32
+ (marker >= 0xd0 && marker <= 0xd7)) {
33
+ continue;
34
+ }
35
+ if (offset + 2 > bytes.length)
36
+ return null;
37
+ const length = bytes.readUInt16BE(offset);
38
+ if (length < 2 || offset + length > bytes.length)
39
+ return null;
40
+ const isStartOfFrame = marker >= 0xc0 && marker <= 0xcf && ![0xc4, 0xc8, 0xcc].includes(marker);
41
+ if (isStartOfFrame) {
42
+ if (length < 7)
43
+ return null;
44
+ return { width: bytes.readUInt16BE(offset + 5), height: bytes.readUInt16BE(offset + 3) };
45
+ }
46
+ offset += length;
47
+ }
48
+ return null;
49
+ }
50
+ function readUInt24LE(bytes, offset) {
51
+ return bytes[offset] | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16);
52
+ }
53
+ function webpDimensions(bytes) {
54
+ if (bytes.length < 30 ||
55
+ bytes.toString("ascii", 0, 4) !== "RIFF" ||
56
+ bytes.toString("ascii", 8, 12) !== "WEBP" ||
57
+ bytes.readUInt32LE(4) + 8 > bytes.length) {
58
+ return null;
59
+ }
60
+ const chunk = bytes.toString("ascii", 12, 16);
61
+ if (chunk === "VP8X")
62
+ return { width: readUInt24LE(bytes, 24) + 1, height: readUInt24LE(bytes, 27) + 1 };
63
+ if (chunk === "VP8L" && bytes[20] === 0x2f) {
64
+ return {
65
+ width: 1 + (((bytes[22] & 0x3f) << 8) | bytes[21]),
66
+ height: 1 + (((bytes[24] & 0x0f) << 10) | (bytes[23] << 2) | (bytes[22] >> 6)),
67
+ };
68
+ }
69
+ if (chunk === "VP8 " && bytes[23] === 0x9d && bytes[24] === 0x01 && bytes[25] === 0x2a) {
70
+ return { width: bytes.readUInt16LE(26) & 0x3fff, height: bytes.readUInt16LE(28) & 0x3fff };
71
+ }
72
+ return null;
73
+ }
74
+ /** Detect the true image type + dimensions from the first bytes, or null. */
75
+ export function detectThemeImage(bytes) {
76
+ let type = null;
77
+ let dims = null;
78
+ if (bytes.length >= 24 &&
79
+ bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])) &&
80
+ bytes.readUInt32BE(8) === 13 &&
81
+ bytes.toString("ascii", 12, 16) === "IHDR") {
82
+ // PNG (and APNG, which shares the PNG signature — its acTL chunk just adds
83
+ // animation; we accept it as a valid PNG without needing to parse frames).
84
+ type = "image/png";
85
+ dims = { width: bytes.readUInt32BE(16), height: bytes.readUInt32BE(20) };
86
+ }
87
+ else if (bytes.length >= 10 &&
88
+ (bytes.toString("ascii", 0, 6) === "GIF87a" || bytes.toString("ascii", 0, 6) === "GIF89a")) {
89
+ // GIF (may be animated) — logical screen dimensions are LE at offset 6.
90
+ type = "image/gif";
91
+ dims = { width: bytes.readUInt16LE(6), height: bytes.readUInt16LE(8) };
92
+ }
93
+ else {
94
+ const jpeg = jpegDimensions(bytes);
95
+ if (jpeg) {
96
+ type = "image/jpeg";
97
+ dims = jpeg;
98
+ }
99
+ else {
100
+ const webp = webpDimensions(bytes);
101
+ if (webp) {
102
+ type = "image/webp";
103
+ dims = webp;
104
+ }
105
+ }
106
+ }
107
+ if (!type || !dims)
108
+ return null;
109
+ if (dims.width <= 0 ||
110
+ dims.height <= 0 ||
111
+ dims.width > MAX_DIMENSION ||
112
+ dims.height > MAX_DIMENSION ||
113
+ dims.width * dims.height > MAX_PIXELS) {
114
+ return null;
115
+ }
116
+ return { mediaType: type, ext: EXT_BY_TYPE[type], width: dims.width, height: dims.height };
117
+ }
@@ -0,0 +1,4 @@
1
+ export { previewLocalTheme, installReviewedLocalTheme, listInstalledThemes, uninstallTheme, type ThemePreview, type InstalledTheme, } from "./installer.js";
2
+ export { THEME_ASSET_DIR, ThemeInstallError, ThemeReviewChangedError, assertSafeThemeName, themeInstallDir, themesRoot, } from "./paths.js";
3
+ export { THEME_VAR_NAMES, THEME_ID, parseThemeManifest, type ThemeManifest } from "./manifest.js";
4
+ export { detectThemeImage, type ThemeImageInfo } from "./image.js";
@@ -0,0 +1,4 @@
1
+ export { previewLocalTheme, installReviewedLocalTheme, listInstalledThemes, uninstallTheme, } from "./installer.js";
2
+ export { THEME_ASSET_DIR, ThemeInstallError, ThemeReviewChangedError, assertSafeThemeName, themeInstallDir, themesRoot, } from "./paths.js";
3
+ export { THEME_VAR_NAMES, THEME_ID, parseThemeManifest } from "./manifest.js";
4
+ export { detectThemeImage } from "./image.js";