@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,117 @@
1
+ /**
2
+ * 组装 `npx skills add` 的 argv。
3
+ *
4
+ * 两条硬约束:
5
+ * 1. **绝不加 `-g`** —— 全局安装落在 `~/.claude/skills`,而 scanner 只读
6
+ * `<cwd>/.code-shell/skills`、`<cwd>/.agents/skills`、`~/.code-shell/skills`
7
+ * 三个根。装了却扫不到,就是又一个"配了等于没配"。
8
+ * 2. repo 与 skill 名各自占独立 argv 槽,不拼 shell 字符串;配合 schema 的
9
+ * `SKILL_REPO_RE` 挡住 `--flag` / `../` / `;rm -rf` 一类注入。
10
+ */
11
+ export function buildSkillInstallArgs(requirement) {
12
+ const args = ["skills", "add", requirement.repo];
13
+ if (requirement.skills && requirement.skills.length > 0) {
14
+ // 具名子集:只装需要的,避免把整个仓库几十个 skill 都拖进项目。
15
+ args.push("--skill", requirement.skills.join(","), "--agent", "*", "--yes");
16
+ }
17
+ else {
18
+ // --all === --skill '*' --agent '*' -y
19
+ args.push("--all");
20
+ }
21
+ if (requirement.fullDepth)
22
+ args.push("--full-depth");
23
+ return args;
24
+ }
25
+ /** 从 `--version` 输出里取第一个点分版本号。 */
26
+ export function parseToolVersion(output) {
27
+ const match = /(\d+(?:\.\d+){0,2})/.exec(output);
28
+ return match?.[1];
29
+ }
30
+ /** 按数字段比较;返回 <0 / 0 / >0。缺省段视为 0,故 "22" == "22.0.0"。 */
31
+ export function compareToolVersions(a, b) {
32
+ const pa = a.split(".").map(Number);
33
+ const pb = b.split(".").map(Number);
34
+ for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
35
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
36
+ if (diff !== 0)
37
+ return diff;
38
+ }
39
+ return 0;
40
+ }
41
+ /**
42
+ * 找出即将安装的裸名与已有 skill 的撞名。
43
+ *
44
+ * scanner 的去重是「先到先得且静默」——同名后来者直接被丢弃,不告警。所以要在
45
+ * 安装前把遮蔽关系摊开给用户看。插件 skill 带 `plugin:` 命名空间、走独立 dedup
46
+ * 集合,永远不会与裸名互相覆盖,故排除。
47
+ */
48
+ export function summarizeSkillConflicts(incoming, installed) {
49
+ const conflicts = [];
50
+ for (const name of incoming) {
51
+ const hit = installed.find((s) => s.source !== "plugin" && s.name === name);
52
+ if (hit)
53
+ conflicts.push({ name, existingSource: hit.source });
54
+ }
55
+ return conflicts;
56
+ }
57
+ /** 纯函数:不碰磁盘、不起进程,全部输入经 context 注入,便于测试。 */
58
+ export function planProfileRequirements(requires, context) {
59
+ const skillInstalls = [];
60
+ const conflicts = [];
61
+ const missingTools = [];
62
+ for (const requirement of requires?.skills ?? []) {
63
+ if (requirement.skills && requirement.skills.length > 0) {
64
+ // 只有落在 project 根(安装目标)的同名 skill 才算"已具备";命中更低优先级的
65
+ // user 根不算——那份会被这次安装遮蔽,属于要提示的冲突而非可跳过的满足。
66
+ const satisfied = (name) => context.installedSkills.some((s) => s.name === name && s.source === "project");
67
+ const missing = requirement.skills.filter((name) => !satisfied(name));
68
+ const shadowed = summarizeSkillConflicts(requirement.skills.filter((name) => !satisfied(name)), context.installedSkills);
69
+ conflicts.push(...shadowed);
70
+ // 具名子集全在了就不必再跑安装。
71
+ if (missing.length === 0)
72
+ continue;
73
+ // Keep the reviewed command and the executed argv aligned: if part of a
74
+ // multi-Skill requirement is already present, only pass the genuinely
75
+ // missing names to the installer. Re-sending the full authored subset
76
+ // could unnecessarily replace a working project Skill while the UI said
77
+ // it was only going to install the missing one.
78
+ skillInstalls.push({
79
+ requirement: { ...requirement, skills: missing },
80
+ missing,
81
+ });
82
+ }
83
+ else {
84
+ // 整仓安装无法预判会带来哪些名字,只能照跑;`skills add` 自身是幂等的。
85
+ skillInstalls.push({ requirement });
86
+ }
87
+ }
88
+ for (const tool of requires?.tools ?? []) {
89
+ const output = context.toolProbe(tool.bin);
90
+ if (output === null) {
91
+ missingTools.push({
92
+ bin: tool.bin,
93
+ reason: "not-found",
94
+ ...(tool.hint ? { hint: tool.hint } : {}),
95
+ });
96
+ continue;
97
+ }
98
+ if (!tool.minVersion)
99
+ continue;
100
+ const found = parseToolVersion(output);
101
+ if (found && compareToolVersions(found, tool.minVersion) < 0) {
102
+ missingTools.push({
103
+ bin: tool.bin,
104
+ reason: "too-old",
105
+ found,
106
+ required: tool.minVersion,
107
+ ...(tool.hint ? { hint: tool.hint } : {}),
108
+ });
109
+ }
110
+ }
111
+ return {
112
+ skillInstalls,
113
+ missingTools,
114
+ conflicts,
115
+ needsInstall: skillInstalls.length > 0,
116
+ };
117
+ }
@@ -0,0 +1,11 @@
1
+ import type { SettingsManager } from "../settings/manager.js";
2
+ import type { WorkspaceProfile } from "./types.js";
3
+ export interface ResolveActiveWorkspaceProfileInput {
4
+ /** Session-bound digital-human profile; wins over the project default. */
5
+ sessionProfile?: string;
6
+ cwd: string;
7
+ settings: SettingsManager;
8
+ }
9
+ export declare function resolveActiveWorkspaceProfile(input: ResolveActiveWorkspaceProfileInput): WorkspaceProfile | undefined;
10
+ /** preset 解析用的快照读取(优先级:agent.preset > 本值 > capability 默认)。 */
11
+ export declare function workspaceProfilePresetFor(settings: SettingsManager, cwd: string): string | undefined;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * “当前激活的是谁 + 它的活字段”的唯一入口。除 overrides 折叠
3
+ * (读 settings 持久化快照,见 overlay.ts)之外,任何代码不得自行读
4
+ * profile.active 拼路径。Session 绑定的 profile 显式优先于项目默认,
5
+ * 让同一项目内的 PM / UI / 工程 Session 可以各自持有稳定数字人身份。
6
+ */
7
+ import { logger } from "../logging/logger.js";
8
+ import { readWorkspaceProfile } from "./store.js";
9
+ function readSubtree(settings, cwd) {
10
+ try {
11
+ return settings.getForScope("project", cwd).profile;
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ export function resolveActiveWorkspaceProfile(input) {
18
+ const name = input.sessionProfile ?? readSubtree(input.settings, input.cwd)?.active;
19
+ if (!name)
20
+ return undefined;
21
+ let workspaceProfile;
22
+ try {
23
+ workspaceProfile = readWorkspaceProfile(name);
24
+ }
25
+ catch (error) {
26
+ logger.warn("profile.active_invalid", {
27
+ cat: "profile",
28
+ name,
29
+ error: error instanceof Error ? error.message : String(error),
30
+ });
31
+ return undefined;
32
+ }
33
+ if (!workspaceProfile) {
34
+ logger.warn("profile.active_missing_from_library", { cat: "profile", name });
35
+ }
36
+ return workspaceProfile;
37
+ }
38
+ /** preset 解析用的快照读取(优先级:agent.preset > 本值 > capability 默认)。 */
39
+ export function workspaceProfilePresetFor(settings, cwd) {
40
+ return readSubtree(settings, cwd)?.preset;
41
+ }
@@ -0,0 +1,17 @@
1
+ import { type WorkspaceProfile, type WorkspaceProfileInput } from "./types.js";
2
+ export declare function workspaceProfilesRoot(): string;
3
+ /** 该数字人的根目录 —— 同时也是它可移植记忆层的 MemoryManager baseDir。 */
4
+ export declare function workspaceProfileDir(name: string): string;
5
+ export declare function readWorkspaceProfile(name: string): WorkspaceProfile | undefined;
6
+ export declare function listWorkspaceProfiles(): WorkspaceProfile[];
7
+ /**
8
+ * 原子写(tmp+rename),与 SettingsManager 的写法一致。
9
+ *
10
+ * 接收 `WorkspaceProfileInput`(而不是解析后的 `WorkspaceProfile`):这个函数
11
+ * 本来就会 `parse()`,所以带 default 的字段由 schema 负责填。用输出类型标注会
12
+ * 让调用方必须手写它们,也会在 schema 新增带 default 的字段时把所有调用方一起
13
+ * 弄红——尽管运行时完全没变。
14
+ */
15
+ export declare function saveWorkspaceProfile(profile: WorkspaceProfileInput): void;
16
+ /** 删除前再次执行目录 containment 校验;不会跟随 profile 目录 symlink。 */
17
+ export declare function deleteWorkspaceProfile(name: string): boolean;
@@ -0,0 +1,167 @@
1
+ /**
2
+ * 全局数字人库:~/.code-shell/profiles/<name>/profile.json。
3
+ * 路径一律经 codeShellHome() 解析(CODE_SHELL_HOME / identity dataRoot 生效)。
4
+ * core 不内置任何领域 profile;样例见 docs/examples/workspace-profile-sample.md。
5
+ */
6
+ import { randomUUID } from "node:crypto";
7
+ import { lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
8
+ import { isAbsolute, join, relative, sep } from "node:path";
9
+ import { logger } from "../logging/logger.js";
10
+ import { codeShellHome } from "../session/session-manager.js";
11
+ import { WORKSPACE_PROFILE_NAME_RE, WorkspaceProfileSchema, } from "./types.js";
12
+ export function workspaceProfilesRoot() {
13
+ return join(codeShellHome(), "profiles");
14
+ }
15
+ /** 该数字人的根目录 —— 同时也是它可移植记忆层的 MemoryManager baseDir。 */
16
+ export function workspaceProfileDir(name) {
17
+ return join(workspaceProfilesRoot(), name);
18
+ }
19
+ function isContained(root, target) {
20
+ const rel = relative(root, target);
21
+ return rel === "" || (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel));
22
+ }
23
+ function lstatIfPresent(path) {
24
+ try {
25
+ return lstatSync(path);
26
+ }
27
+ catch (error) {
28
+ if (error.code === "ENOENT")
29
+ return undefined;
30
+ throw error;
31
+ }
32
+ }
33
+ function checkedProfilesRoot(create = false) {
34
+ const root = workspaceProfilesRoot();
35
+ let info = lstatIfPresent(root);
36
+ if (!info && create) {
37
+ mkdirSync(root, { recursive: true, mode: 0o700 });
38
+ info = lstatSync(root);
39
+ }
40
+ if (!info)
41
+ return undefined;
42
+ if (info.isSymbolicLink() || !info.isDirectory()) {
43
+ throw new Error(`Invalid workspace profiles root: ${root}`);
44
+ }
45
+ return root;
46
+ }
47
+ function checkedProfileDirectory(name, create = false) {
48
+ const root = checkedProfilesRoot(create);
49
+ if (!root)
50
+ return undefined;
51
+ const dir = join(root, name);
52
+ let info = lstatIfPresent(dir);
53
+ if (!info && create) {
54
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
55
+ info = lstatSync(dir);
56
+ }
57
+ if (!info)
58
+ return undefined;
59
+ if (info.isSymbolicLink() || !info.isDirectory()) {
60
+ throw new Error(`Invalid workspace profile directory: ${dir}`);
61
+ }
62
+ if (!isContained(realpathSync(root), realpathSync(dir))) {
63
+ throw new Error(`Workspace profile directory escapes the profiles root: ${dir}`);
64
+ }
65
+ return dir;
66
+ }
67
+ function checkedProfileFile(name) {
68
+ const dir = checkedProfileDirectory(name);
69
+ if (!dir)
70
+ return undefined;
71
+ const path = join(dir, "profile.json");
72
+ const info = lstatIfPresent(path);
73
+ if (!info)
74
+ return undefined;
75
+ if (info.isSymbolicLink() || !info.isFile()) {
76
+ throw new Error(`Invalid workspace profile file: ${path}`);
77
+ }
78
+ return path;
79
+ }
80
+ export function readWorkspaceProfile(name) {
81
+ if (!WORKSPACE_PROFILE_NAME_RE.test(name))
82
+ return undefined;
83
+ const path = join(workspaceProfileDir(name), "profile.json");
84
+ try {
85
+ const checkedPath = checkedProfileFile(name);
86
+ if (!checkedPath)
87
+ return undefined;
88
+ return WorkspaceProfileSchema.parse(JSON.parse(readFileSync(checkedPath, "utf-8")));
89
+ }
90
+ catch (error) {
91
+ throw new Error(`Invalid workspace profile "${name}" at ${path}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
92
+ }
93
+ }
94
+ export function listWorkspaceProfiles() {
95
+ const root = checkedProfilesRoot();
96
+ if (!root)
97
+ return [];
98
+ const out = [];
99
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
100
+ if (!entry.isDirectory()) {
101
+ if (entry.isSymbolicLink()) {
102
+ logger.warn("profile.library_entry_invalid", {
103
+ cat: "profile",
104
+ name: entry.name,
105
+ error: "symbolic links are not allowed",
106
+ });
107
+ }
108
+ continue;
109
+ }
110
+ try {
111
+ const profile = readWorkspaceProfile(entry.name);
112
+ if (profile)
113
+ out.push(profile);
114
+ }
115
+ catch (error) {
116
+ logger.warn("profile.library_entry_invalid", {
117
+ cat: "profile",
118
+ name: entry.name,
119
+ error: error instanceof Error ? error.message : String(error),
120
+ });
121
+ }
122
+ }
123
+ return out.sort((a, b) => a.name.localeCompare(b.name));
124
+ }
125
+ /**
126
+ * 原子写(tmp+rename),与 SettingsManager 的写法一致。
127
+ *
128
+ * 接收 `WorkspaceProfileInput`(而不是解析后的 `WorkspaceProfile`):这个函数
129
+ * 本来就会 `parse()`,所以带 default 的字段由 schema 负责填。用输出类型标注会
130
+ * 让调用方必须手写它们,也会在 schema 新增带 default 的字段时把所有调用方一起
131
+ * 弄红——尽管运行时完全没变。
132
+ */
133
+ export function saveWorkspaceProfile(profile) {
134
+ const parsed = WorkspaceProfileSchema.parse(profile);
135
+ const dir = checkedProfileDirectory(parsed.name, true);
136
+ if (!dir)
137
+ throw new Error(`Could not create workspace profile directory for "${parsed.name}"`);
138
+ const path = join(dir, "profile.json");
139
+ const existing = lstatIfPresent(path);
140
+ if (existing) {
141
+ if (existing.isSymbolicLink() || !existing.isFile()) {
142
+ throw new Error(`Invalid workspace profile file: ${path}`);
143
+ }
144
+ }
145
+ const tmp = `${path}.${process.pid}.${randomUUID()}.tmp`;
146
+ try {
147
+ writeFileSync(tmp, `${JSON.stringify(parsed, null, 2)}\n`, {
148
+ encoding: "utf-8",
149
+ mode: 0o600,
150
+ flag: "wx",
151
+ });
152
+ renameSync(tmp, path);
153
+ }
154
+ finally {
155
+ rmSync(tmp, { force: true });
156
+ }
157
+ }
158
+ /** 删除前再次执行目录 containment 校验;不会跟随 profile 目录 symlink。 */
159
+ export function deleteWorkspaceProfile(name) {
160
+ if (!WORKSPACE_PROFILE_NAME_RE.test(name))
161
+ return false;
162
+ const dir = checkedProfileDirectory(name);
163
+ if (!dir)
164
+ return false;
165
+ rmSync(dir, { recursive: true, force: true });
166
+ return true;
167
+ }
@@ -0,0 +1,321 @@
1
+ /**
2
+ * WorkspaceProfile(数字人)— harness 元机制的数据定义。
3
+ * 引用现有窄 AgentPreset,不修改它;plugins/skills/mcp/agents 在激活时
4
+ * 展开为 capabilityOverrides 形状的 force-enable 快照(见 activation.ts)。
5
+ * 设计稿:docs/superpowers/specs/2026-07-15-workspace-profile-design.md
6
+ */
7
+ import { z } from "zod";
8
+ /** 目录名即机器标识:小写字母/数字开头,可含 - _,防路径逃逸。 */
9
+ export declare const WORKSPACE_PROFILE_NAME_RE: RegExp;
10
+ /**
11
+ * `owner/repo`。收紧到 GitHub 允许的字符集,且两段都不能以 `-`/`.` 开头 ——
12
+ * 这个值会作为参数传给 `npx skills add`,必须挡住 `--flag`、`../` 一类注入。
13
+ */
14
+ export declare const SKILL_REPO_RE: RegExp;
15
+ /** 纯数字点分版本,避免把任意字符串塞进版本比较。 */
16
+ export declare const TOOL_VERSION_RE: RegExp;
17
+ /** 持久化与提示注入的防滥用边界;Desktop 编辑器应保持相同上限。 */
18
+ export declare const WORKSPACE_PROFILE_LIMITS: {
19
+ readonly label: 120;
20
+ readonly description: 4096;
21
+ readonly basePreset: 128;
22
+ readonly mainInstruction: 32768;
23
+ readonly version: 128;
24
+ readonly capabilityCount: 128;
25
+ readonly capabilityName: 256;
26
+ /** requires.skills / requires.tools 各自的条目上限。 */
27
+ readonly requirementCount: 16;
28
+ };
29
+ /**
30
+ * 依赖来源:数字人自带的「怎么把能力弄来」声明。
31
+ *
32
+ * 与 plugins/skills/mcp/agents 的分工:那四个是 force-enable 开关(只能打开
33
+ * 磁盘上已存在的东西),`requires` 才是获取步骤。没有 `requires` 的旧 profile
34
+ * 行为完全不变。
35
+ *
36
+ * 解析、冲突预检与安装见 requirements.ts —— 安装涉及克隆远程仓库与执行
37
+ * `npx skills add`,必须先经用户确认,绝不静默执行。
38
+ */
39
+ declare const skillRequirementSchema: z.ZodObject<{
40
+ /** 目前只支持 github;保留判别字段以便后续扩展。 */
41
+ source: z.ZodLiteral<"github">;
42
+ /** `owner/repo` 形式。 */
43
+ repo: z.ZodString;
44
+ /** 只装这些 skill;省略表示装全部(`--all`)。 */
45
+ skills: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
46
+ /**
47
+ * project → `<cwd>/.agents/skills`(scanner 认)。
48
+ * user 级 `npx skills add -g` 落在 `~/.claude/skills`,**不在 scanner 的三个根里**,
49
+ * 装了会扫不到,故不开放该 scope。
50
+ */
51
+ scope: z.ZodDefault<z.ZodLiteral<"project">>;
52
+ /** 仓库根有 SKILL.md 时也继续深搜子目录。 */
53
+ fullDepth: z.ZodDefault<z.ZodBoolean>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ source: "github";
56
+ scope: "project";
57
+ repo: string;
58
+ fullDepth: boolean;
59
+ skills?: string[] | undefined;
60
+ }, {
61
+ source: "github";
62
+ repo: string;
63
+ scope?: "project" | undefined;
64
+ skills?: string[] | undefined;
65
+ fullDepth?: boolean | undefined;
66
+ }>;
67
+ /** 装不了、只能检测的外部命令(ffmpeg / node …)。缺失时提前失败,而不是渲染到一半才炸。 */
68
+ declare const toolRequirementSchema: z.ZodObject<{
69
+ bin: z.ZodString;
70
+ /** 形如 "22"、"22.1"、"22.1.0",与 `--version` 输出的首个版本号比较。 */
71
+ minVersion: z.ZodOptional<z.ZodString>;
72
+ /** 缺失时展示给用户的安装建议,例如 "brew install ffmpeg"。 */
73
+ hint: z.ZodOptional<z.ZodString>;
74
+ }, "strip", z.ZodTypeAny, {
75
+ bin: string;
76
+ minVersion?: string | undefined;
77
+ hint?: string | undefined;
78
+ }, {
79
+ bin: string;
80
+ minVersion?: string | undefined;
81
+ hint?: string | undefined;
82
+ }>;
83
+ export declare const WorkspaceProfileRequirementsSchema: z.ZodObject<{
84
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
85
+ /** 目前只支持 github;保留判别字段以便后续扩展。 */
86
+ source: z.ZodLiteral<"github">;
87
+ /** `owner/repo` 形式。 */
88
+ repo: z.ZodString;
89
+ /** 只装这些 skill;省略表示装全部(`--all`)。 */
90
+ skills: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
91
+ /**
92
+ * project → `<cwd>/.agents/skills`(scanner 认)。
93
+ * user 级 `npx skills add -g` 落在 `~/.claude/skills`,**不在 scanner 的三个根里**,
94
+ * 装了会扫不到,故不开放该 scope。
95
+ */
96
+ scope: z.ZodDefault<z.ZodLiteral<"project">>;
97
+ /** 仓库根有 SKILL.md 时也继续深搜子目录。 */
98
+ fullDepth: z.ZodDefault<z.ZodBoolean>;
99
+ }, "strip", z.ZodTypeAny, {
100
+ source: "github";
101
+ scope: "project";
102
+ repo: string;
103
+ fullDepth: boolean;
104
+ skills?: string[] | undefined;
105
+ }, {
106
+ source: "github";
107
+ repo: string;
108
+ scope?: "project" | undefined;
109
+ skills?: string[] | undefined;
110
+ fullDepth?: boolean | undefined;
111
+ }>, "many">>;
112
+ tools: z.ZodDefault<z.ZodArray<z.ZodObject<{
113
+ bin: z.ZodString;
114
+ /** 形如 "22"、"22.1"、"22.1.0",与 `--version` 输出的首个版本号比较。 */
115
+ minVersion: z.ZodOptional<z.ZodString>;
116
+ /** 缺失时展示给用户的安装建议,例如 "brew install ffmpeg"。 */
117
+ hint: z.ZodOptional<z.ZodString>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ bin: string;
120
+ minVersion?: string | undefined;
121
+ hint?: string | undefined;
122
+ }, {
123
+ bin: string;
124
+ minVersion?: string | undefined;
125
+ hint?: string | undefined;
126
+ }>, "many">>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ skills: {
129
+ source: "github";
130
+ scope: "project";
131
+ repo: string;
132
+ fullDepth: boolean;
133
+ skills?: string[] | undefined;
134
+ }[];
135
+ tools: {
136
+ bin: string;
137
+ minVersion?: string | undefined;
138
+ hint?: string | undefined;
139
+ }[];
140
+ }, {
141
+ skills?: {
142
+ source: "github";
143
+ repo: string;
144
+ scope?: "project" | undefined;
145
+ skills?: string[] | undefined;
146
+ fullDepth?: boolean | undefined;
147
+ }[] | undefined;
148
+ tools?: {
149
+ bin: string;
150
+ minVersion?: string | undefined;
151
+ hint?: string | undefined;
152
+ }[] | undefined;
153
+ }>;
154
+ export type SkillRequirement = z.infer<typeof skillRequirementSchema>;
155
+ export type ToolRequirement = z.infer<typeof toolRequirementSchema>;
156
+ export type WorkspaceProfileRequirements = z.infer<typeof WorkspaceProfileRequirementsSchema>;
157
+ export declare const WorkspaceProfileSchema: z.ZodObject<{
158
+ name: z.ZodString;
159
+ label: z.ZodString;
160
+ description: z.ZodOptional<z.ZodString>;
161
+ /** 引用现有 AgentPreset 名(如 "general");不在 schema 层校验存在性,解析时才校验。 */
162
+ basePreset: z.ZodString;
163
+ /** 可选:省略即旧行为(只 enable,不获取)。 */
164
+ requires: z.ZodOptional<z.ZodObject<{
165
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
166
+ /** 目前只支持 github;保留判别字段以便后续扩展。 */
167
+ source: z.ZodLiteral<"github">;
168
+ /** `owner/repo` 形式。 */
169
+ repo: z.ZodString;
170
+ /** 只装这些 skill;省略表示装全部(`--all`)。 */
171
+ skills: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
172
+ /**
173
+ * project → `<cwd>/.agents/skills`(scanner 认)。
174
+ * user 级 `npx skills add -g` 落在 `~/.claude/skills`,**不在 scanner 的三个根里**,
175
+ * 装了会扫不到,故不开放该 scope。
176
+ */
177
+ scope: z.ZodDefault<z.ZodLiteral<"project">>;
178
+ /** 仓库根有 SKILL.md 时也继续深搜子目录。 */
179
+ fullDepth: z.ZodDefault<z.ZodBoolean>;
180
+ }, "strip", z.ZodTypeAny, {
181
+ source: "github";
182
+ scope: "project";
183
+ repo: string;
184
+ fullDepth: boolean;
185
+ skills?: string[] | undefined;
186
+ }, {
187
+ source: "github";
188
+ repo: string;
189
+ scope?: "project" | undefined;
190
+ skills?: string[] | undefined;
191
+ fullDepth?: boolean | undefined;
192
+ }>, "many">>;
193
+ tools: z.ZodDefault<z.ZodArray<z.ZodObject<{
194
+ bin: z.ZodString;
195
+ /** 形如 "22"、"22.1"、"22.1.0",与 `--version` 输出的首个版本号比较。 */
196
+ minVersion: z.ZodOptional<z.ZodString>;
197
+ /** 缺失时展示给用户的安装建议,例如 "brew install ffmpeg"。 */
198
+ hint: z.ZodOptional<z.ZodString>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ bin: string;
201
+ minVersion?: string | undefined;
202
+ hint?: string | undefined;
203
+ }, {
204
+ bin: string;
205
+ minVersion?: string | undefined;
206
+ hint?: string | undefined;
207
+ }>, "many">>;
208
+ }, "strip", z.ZodTypeAny, {
209
+ skills: {
210
+ source: "github";
211
+ scope: "project";
212
+ repo: string;
213
+ fullDepth: boolean;
214
+ skills?: string[] | undefined;
215
+ }[];
216
+ tools: {
217
+ bin: string;
218
+ minVersion?: string | undefined;
219
+ hint?: string | undefined;
220
+ }[];
221
+ }, {
222
+ skills?: {
223
+ source: "github";
224
+ repo: string;
225
+ scope?: "project" | undefined;
226
+ skills?: string[] | undefined;
227
+ fullDepth?: boolean | undefined;
228
+ }[] | undefined;
229
+ tools?: {
230
+ bin: string;
231
+ minVersion?: string | undefined;
232
+ hint?: string | undefined;
233
+ }[] | undefined;
234
+ }>>;
235
+ /**
236
+ * true → 独占工作面:激活时把**未声明**的 skill/plugin/mcp/agent 显式关掉,
237
+ * 而不是与用户已开启的取并集。
238
+ *
239
+ * 默认 false(并集)是安全的:数字人只保证「该有的能力一定在」,绝不静默
240
+ * 关掉用户手动开的东西。独占是更强的意图——「切到这个数字人就只用这套工具」
241
+ * ——上下文更干净,但代价是用户会发现自己开的东西不见了,所以必须显式声明。
242
+ * 注意:用户在项目 settings 里手写的 override 优先级仍然最高(见 overlay.ts)。
243
+ */
244
+ exclusiveCapabilities: z.ZodDefault<z.ZodBoolean>;
245
+ plugins: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
246
+ skills: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
247
+ mcp: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
248
+ agents: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
249
+ /** 数字人主指令,注入系统提示(优先级低于本地 CLAUDE.md,高于 preset sections)。 */
250
+ mainInstruction: z.ZodOptional<z.ZodString>;
251
+ /** true → 挂载 profiles/<name>/ 为第二记忆层(跟数字人走)。 */
252
+ portableMemory: z.ZodDefault<z.ZodBoolean>;
253
+ version: z.ZodOptional<z.ZodString>;
254
+ }, "strip", z.ZodTypeAny, {
255
+ mcp: string[];
256
+ name: string;
257
+ label: string;
258
+ skills: string[];
259
+ plugins: string[];
260
+ agents: string[];
261
+ basePreset: string;
262
+ exclusiveCapabilities: boolean;
263
+ portableMemory: boolean;
264
+ version?: string | undefined;
265
+ description?: string | undefined;
266
+ requires?: {
267
+ skills: {
268
+ source: "github";
269
+ scope: "project";
270
+ repo: string;
271
+ fullDepth: boolean;
272
+ skills?: string[] | undefined;
273
+ }[];
274
+ tools: {
275
+ bin: string;
276
+ minVersion?: string | undefined;
277
+ hint?: string | undefined;
278
+ }[];
279
+ } | undefined;
280
+ mainInstruction?: string | undefined;
281
+ }, {
282
+ name: string;
283
+ label: string;
284
+ basePreset: string;
285
+ version?: string | undefined;
286
+ mcp?: string[] | undefined;
287
+ description?: string | undefined;
288
+ skills?: string[] | undefined;
289
+ plugins?: string[] | undefined;
290
+ agents?: string[] | undefined;
291
+ requires?: {
292
+ skills?: {
293
+ source: "github";
294
+ repo: string;
295
+ scope?: "project" | undefined;
296
+ skills?: string[] | undefined;
297
+ fullDepth?: boolean | undefined;
298
+ }[] | undefined;
299
+ tools?: {
300
+ bin: string;
301
+ minVersion?: string | undefined;
302
+ hint?: string | undefined;
303
+ }[] | undefined;
304
+ } | undefined;
305
+ exclusiveCapabilities?: boolean | undefined;
306
+ mainInstruction?: string | undefined;
307
+ portableMemory?: boolean | undefined;
308
+ }>;
309
+ export type WorkspaceProfile = z.infer<typeof WorkspaceProfileSchema>;
310
+ /**
311
+ * 写入侧类型:带 `.default()` 的字段(`exclusiveCapabilities`、`portableMemory`、
312
+ * 四个 capability 列表)在这里是可选的。
313
+ *
314
+ * 为什么需要它:`WorkspaceProfile` 是 schema 的**输出**类型,defaults 已解析,
315
+ * 所以每个字段都是必填。但接受「未解析的 profile 再 parse」的函数
316
+ * (如 `saveWorkspaceProfile`)实际契约是**输入**类型——用输出类型标注会强迫每个
317
+ * 调用方手写它本来就想让 schema 填的默认值。schema 新增一个带 default 的字段时,
318
+ * 这个错配会让所有既有调用方一起报错(`exclusiveCapabilities` 就是这么发生的)。
319
+ */
320
+ export type WorkspaceProfileInput = z.input<typeof WorkspaceProfileSchema>;
321
+ export {};