@lesliechan721/aw 0.1.0-beta.64 → 0.1.0-beta.66

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 (304) hide show
  1. package/dist/authoring/assets/aw-runtime-config.mjs +3 -3
  2. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -1
  3. package/dist/authoring/scripts/add-skill.mjs +3 -17
  4. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  5. package/dist/authoring/scripts/init-plugin.mjs +1 -0
  6. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  7. package/dist/authoring/scripts/lib/plugin-version-check.mjs +1 -1
  8. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +2 -0
  9. package/dist/authoring/scripts/lib/skill-scaffold.mjs +2 -0
  10. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  11. package/dist/authoring/scripts/validate-plugin.mjs +95 -698
  12. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  13. package/dist/scripts/aw-skill-eval-materializer.d.ts +2 -0
  14. package/dist/scripts/aw-skill-eval-materializer.js +74 -44
  15. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -1
  16. package/dist/scripts/bundle-plugins.js +10 -2
  17. package/dist/scripts/bundle-plugins.js.map +1 -1
  18. package/dist/scripts/plugin-staging.d.ts +1 -1
  19. package/dist/scripts/plugin-staging.js +1 -1
  20. package/dist/scripts/plugin-staging.js.map +1 -1
  21. package/dist/scripts/test-plugin-scripts.js +31 -31
  22. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  23. package/dist/src/commands/aw-capabilities.d.ts +1 -1
  24. package/dist/src/commands/aw-capabilities.js +2 -0
  25. package/dist/src/commands/aw-capabilities.js.map +1 -1
  26. package/dist/src/commands/catalog-publication-inspection.js +2 -2
  27. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  28. package/dist/src/commands/console.js +4 -3
  29. package/dist/src/commands/console.js.map +1 -1
  30. package/dist/src/commands/intent-command.d.ts +30 -0
  31. package/dist/src/commands/intent-command.js +164 -0
  32. package/dist/src/commands/intent-command.js.map +1 -0
  33. package/dist/src/commands/operation-plan.d.ts +2 -0
  34. package/dist/src/commands/operation-plan.js +2 -1
  35. package/dist/src/commands/operation-plan.js.map +1 -1
  36. package/dist/src/commands/options.d.ts +3 -11
  37. package/dist/src/commands/options.js +11 -17
  38. package/dist/src/commands/options.js.map +1 -1
  39. package/dist/src/commands/plugin-capabilities.js +27 -33
  40. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  41. package/dist/src/commands/rebuild-command.d.ts +108 -6
  42. package/dist/src/commands/rebuild-command.js +617 -1549
  43. package/dist/src/commands/rebuild-command.js.map +1 -1
  44. package/dist/src/commands/rebuild-integration.d.ts +19 -3
  45. package/dist/src/commands/rebuild-integration.js +500 -459
  46. package/dist/src/commands/rebuild-integration.js.map +1 -1
  47. package/dist/src/commands/rebuild-operations.js +1 -2
  48. package/dist/src/commands/rebuild-operations.js.map +1 -1
  49. package/dist/src/commands/review-inspection.d.ts +2 -2
  50. package/dist/src/commands/review-inspection.js +30 -86
  51. package/dist/src/commands/review-inspection.js.map +1 -1
  52. package/dist/src/commands/review-preparation.js +16 -7
  53. package/dist/src/commands/review-preparation.js.map +1 -1
  54. package/dist/src/commands/skill-eval.d.ts +2 -0
  55. package/dist/src/commands/skill-eval.js +15 -9
  56. package/dist/src/commands/skill-eval.js.map +1 -1
  57. package/dist/src/commands/status-v6.d.ts +38 -5
  58. package/dist/src/commands/status-v6.js +269 -102
  59. package/dist/src/commands/status-v6.js.map +1 -1
  60. package/dist/src/commands/targets-command.d.ts +27 -0
  61. package/dist/src/commands/targets-command.js +77 -0
  62. package/dist/src/commands/targets-command.js.map +1 -0
  63. package/dist/src/commands/write-commands.js +5 -5
  64. package/dist/src/commands/write-commands.js.map +1 -1
  65. package/dist/src/eval/manifest-v1.d.ts +2 -0
  66. package/dist/src/eval/manifest-v1.js +7 -2
  67. package/dist/src/eval/manifest-v1.js.map +1 -1
  68. package/dist/src/generators/local-plugin.d.ts +2 -1
  69. package/dist/src/generators/local-plugin.js +111 -108
  70. package/dist/src/generators/local-plugin.js.map +1 -1
  71. package/dist/src/index.d.ts +10 -17
  72. package/dist/src/index.js +585 -1349
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/intent/deployment-preferences.d.ts +63 -0
  75. package/dist/src/intent/deployment-preferences.js +170 -0
  76. package/dist/src/intent/deployment-preferences.js.map +1 -0
  77. package/dist/src/intent/diagnostics.d.ts +11 -0
  78. package/dist/src/intent/diagnostics.js +14 -0
  79. package/dist/src/intent/diagnostics.js.map +1 -0
  80. package/dist/src/intent/intent-codec.d.ts +19 -0
  81. package/dist/src/intent/intent-codec.js +117 -0
  82. package/dist/src/intent/intent-codec.js.map +1 -0
  83. package/dist/src/intent/intent-store.d.ts +43 -0
  84. package/dist/src/intent/intent-store.js +118 -0
  85. package/dist/src/intent/intent-store.js.map +1 -0
  86. package/dist/src/intent/scope-context.d.ts +33 -0
  87. package/dist/src/intent/scope-context.js +145 -0
  88. package/dist/src/intent/scope-context.js.map +1 -0
  89. package/dist/src/intent/work-context.d.ts +13 -0
  90. package/dist/src/intent/work-context.js +22 -0
  91. package/dist/src/intent/work-context.js.map +1 -0
  92. package/dist/src/output/command-receipt.js +16 -9
  93. package/dist/src/output/command-receipt.js.map +1 -1
  94. package/dist/src/portable/commands.d.ts +18 -8
  95. package/dist/src/portable/commands.js +46 -562
  96. package/dist/src/portable/commands.js.map +1 -1
  97. package/dist/src/portable/historical-materialization.d.ts +22 -0
  98. package/dist/src/portable/historical-materialization.js +124 -0
  99. package/dist/src/portable/historical-materialization.js.map +1 -0
  100. package/dist/src/portable/materializer.d.ts +8 -0
  101. package/dist/src/portable/materializer.js +75 -44
  102. package/dist/src/portable/materializer.js.map +1 -1
  103. package/dist/src/portable/recovery-layout.d.ts +17 -0
  104. package/dist/src/portable/recovery-layout.js +55 -0
  105. package/dist/src/portable/recovery-layout.js.map +1 -0
  106. package/dist/src/portable/recovery.d.ts +143 -0
  107. package/dist/src/portable/recovery.js +339 -0
  108. package/dist/src/portable/recovery.js.map +1 -0
  109. package/dist/src/portable/writer.d.ts +64 -0
  110. package/dist/src/portable/writer.js +316 -0
  111. package/dist/src/portable/writer.js.map +1 -0
  112. package/dist/src/recovery/coordinator.d.ts +137 -0
  113. package/dist/src/recovery/coordinator.js +1198 -0
  114. package/dist/src/recovery/coordinator.js.map +1 -0
  115. package/dist/src/recovery/demand.d.ts +44 -0
  116. package/dist/src/recovery/demand.js +178 -0
  117. package/dist/src/recovery/demand.js.map +1 -0
  118. package/dist/src/recovery/joint-coordinator.d.ts +24 -0
  119. package/dist/src/recovery/joint-coordinator.js +770 -0
  120. package/dist/src/recovery/joint-coordinator.js.map +1 -0
  121. package/dist/src/recovery/joint-demand.d.ts +68 -0
  122. package/dist/src/recovery/joint-demand.js +166 -0
  123. package/dist/src/recovery/joint-demand.js.map +1 -0
  124. package/dist/src/recovery/receipt.d.ts +81 -0
  125. package/dist/src/recovery/receipt.js +2 -0
  126. package/dist/src/recovery/receipt.js.map +1 -0
  127. package/dist/src/recovery/retirement.d.ts +45 -0
  128. package/dist/src/recovery/retirement.js +366 -0
  129. package/dist/src/recovery/retirement.js.map +1 -0
  130. package/dist/src/recovery/status.d.ts +108 -0
  131. package/dist/src/recovery/status.js +417 -0
  132. package/dist/src/recovery/status.js.map +1 -0
  133. package/dist/src/recovery/types.d.ts +86 -0
  134. package/dist/src/recovery/types.js +2 -0
  135. package/dist/src/recovery/types.js.map +1 -0
  136. package/dist/src/review/review-profile.d.ts +2 -1
  137. package/dist/src/review/review-profile.js +15 -15
  138. package/dist/src/review/review-profile.js.map +1 -1
  139. package/dist/src/review/review-selection.d.ts +1 -2
  140. package/dist/src/review/review-selection.js +40 -114
  141. package/dist/src/review/review-selection.js.map +1 -1
  142. package/dist/src/review/review-types.d.ts +4 -4
  143. package/dist/src/review/review-types.js.map +1 -1
  144. package/dist/src/review/skill-materialization.js +15 -6
  145. package/dist/src/review/skill-materialization.js.map +1 -1
  146. package/dist/src/review/source-binding.d.ts +14 -4
  147. package/dist/src/review/source-binding.js +62 -117
  148. package/dist/src/review/source-binding.js.map +1 -1
  149. package/dist/src/tui/agent-management.d.ts +23 -0
  150. package/dist/src/tui/agent-management.js +217 -0
  151. package/dist/src/tui/agent-management.js.map +1 -0
  152. package/dist/src/tui/agent-settings.d.ts +44 -0
  153. package/dist/src/tui/agent-settings.js +98 -0
  154. package/dist/src/tui/agent-settings.js.map +1 -0
  155. package/dist/src/tui/components.d.ts +3 -0
  156. package/dist/src/tui/components.js +10 -1
  157. package/dist/src/tui/components.js.map +1 -1
  158. package/dist/src/tui/config-references.d.ts +6 -3
  159. package/dist/src/tui/config-references.js +17 -12
  160. package/dist/src/tui/config-references.js.map +1 -1
  161. package/dist/src/tui/console-app-v4.d.ts +1 -2
  162. package/dist/src/tui/console-app-v4.js +1533 -1047
  163. package/dist/src/tui/console-app-v4.js.map +1 -1
  164. package/dist/src/tui/controller-runtime.d.ts +2 -1
  165. package/dist/src/tui/controller-runtime.js +405 -1626
  166. package/dist/src/tui/controller-runtime.js.map +1 -1
  167. package/dist/src/tui/controller.d.ts +131 -81
  168. package/dist/src/tui/controller.js +307 -227
  169. package/dist/src/tui/controller.js.map +1 -1
  170. package/dist/src/tui/entity-cards.d.ts +2 -2
  171. package/dist/src/tui/entity-cards.js +98 -20
  172. package/dist/src/tui/entity-cards.js.map +1 -1
  173. package/dist/src/tui/glossary.d.ts +2 -0
  174. package/dist/src/tui/glossary.js +20 -0
  175. package/dist/src/tui/glossary.js.map +1 -1
  176. package/dist/src/tui/model.d.ts +28 -10
  177. package/dist/src/tui/model.js +41 -41
  178. package/dist/src/tui/model.js.map +1 -1
  179. package/dist/src/tui/operation-review-planner.d.ts +2 -0
  180. package/dist/src/tui/operation-review-planner.js +58 -122
  181. package/dist/src/tui/operation-review-planner.js.map +1 -1
  182. package/dist/src/tui/plugin-content.js +7 -4
  183. package/dist/src/tui/plugin-content.js.map +1 -1
  184. package/dist/src/tui/plugin-detail.d.ts +22 -3
  185. package/dist/src/tui/plugin-detail.js +113 -26
  186. package/dist/src/tui/plugin-detail.js.map +1 -1
  187. package/dist/src/tui/reader.d.ts +1 -0
  188. package/dist/src/tui/reader.js +3 -1
  189. package/dist/src/tui/reader.js.map +1 -1
  190. package/dist/src/tui/router.d.ts +23 -33
  191. package/dist/src/tui/router.js.map +1 -1
  192. package/dist/src/tui/scoped-flow.d.ts +45 -0
  193. package/dist/src/tui/scoped-flow.js +96 -0
  194. package/dist/src/tui/scoped-flow.js.map +1 -0
  195. package/dist/src/tui/scoped-inventory.d.ts +122 -0
  196. package/dist/src/tui/scoped-inventory.js +225 -0
  197. package/dist/src/tui/scoped-inventory.js.map +1 -0
  198. package/dist/src/tui/screen-registry.d.ts +25 -25
  199. package/dist/src/tui/screen-registry.js +3 -7
  200. package/dist/src/tui/screen-registry.js.map +1 -1
  201. package/dist/src/tui/session-console-app.js +1 -1
  202. package/dist/src/tui/session-console-app.js.map +1 -1
  203. package/dist/src/tui/session-host.js +12 -2
  204. package/dist/src/tui/session-host.js.map +1 -1
  205. package/dist/src/types.d.ts +15 -12
  206. package/dist/src/types.js.map +1 -1
  207. package/dist/src/utils/agent-version.js +2 -0
  208. package/dist/src/utils/agent-version.js.map +1 -1
  209. package/dist/src/utils/artifact-plan.js +13 -6
  210. package/dist/src/utils/artifact-plan.js.map +1 -1
  211. package/dist/src/utils/artifact-renderer.d.ts +6 -3
  212. package/dist/src/utils/artifact-renderer.js +27 -32
  213. package/dist/src/utils/artifact-renderer.js.map +1 -1
  214. package/dist/src/utils/artifact-request.d.ts +1 -0
  215. package/dist/src/utils/artifact-request.js +22 -12
  216. package/dist/src/utils/artifact-request.js.map +1 -1
  217. package/dist/src/utils/artifact-sources.d.ts +2 -2
  218. package/dist/src/utils/bundle-layout.js +18 -16
  219. package/dist/src/utils/bundle-layout.js.map +1 -1
  220. package/dist/src/utils/catalog-digests.js +2 -0
  221. package/dist/src/utils/catalog-digests.js.map +1 -1
  222. package/dist/src/utils/catalog-runtime-projection.d.ts +4 -3
  223. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  224. package/dist/src/utils/catalog-source-references.d.ts +5 -0
  225. package/dist/src/utils/catalog-source-references.js +42 -57
  226. package/dist/src/utils/catalog-source-references.js.map +1 -1
  227. package/dist/src/utils/claude-native-render-receipt.d.ts +14 -0
  228. package/dist/src/utils/claude-native-render-receipt.js +26 -0
  229. package/dist/src/utils/claude-native-render-receipt.js.map +1 -0
  230. package/dist/src/utils/claude-skills-root.js +14 -3
  231. package/dist/src/utils/claude-skills-root.js.map +1 -1
  232. package/dist/src/utils/codex-manager.js +6 -12
  233. package/dist/src/utils/codex-manager.js.map +1 -1
  234. package/dist/src/utils/codex-native-observation.js +29 -13
  235. package/dist/src/utils/codex-native-observation.js.map +1 -1
  236. package/dist/src/utils/codex-reconciler.d.ts +2 -5
  237. package/dist/src/utils/codex-reconciler.js +25 -1
  238. package/dist/src/utils/codex-reconciler.js.map +1 -1
  239. package/dist/src/utils/codex-surface-analysis.js +5 -3
  240. package/dist/src/utils/codex-surface-analysis.js.map +1 -1
  241. package/dist/src/utils/local-marketplace.d.ts +14 -2
  242. package/dist/src/utils/local-marketplace.js +209 -42
  243. package/dist/src/utils/local-marketplace.js.map +1 -1
  244. package/dist/src/utils/managed-command-evidence.js +1 -1
  245. package/dist/src/utils/managed-command-evidence.js.map +1 -1
  246. package/dist/src/utils/managed-command-materialization.d.ts +4 -0
  247. package/dist/src/utils/managed-command-materialization.js +15 -6
  248. package/dist/src/utils/managed-command-materialization.js.map +1 -1
  249. package/dist/src/utils/managed-command-store.d.ts +15 -0
  250. package/dist/src/utils/managed-command-store.js +73 -8
  251. package/dist/src/utils/managed-command-store.js.map +1 -1
  252. package/dist/src/utils/native-cli.d.ts +2 -0
  253. package/dist/src/utils/native-cli.js +22 -0
  254. package/dist/src/utils/native-cli.js.map +1 -1
  255. package/dist/src/utils/native-demand.d.ts +10 -0
  256. package/dist/src/utils/native-demand.js +4 -0
  257. package/dist/src/utils/native-demand.js.map +1 -0
  258. package/dist/src/utils/ownership.js +2 -0
  259. package/dist/src/utils/ownership.js.map +1 -1
  260. package/dist/src/utils/paths.js +1 -1
  261. package/dist/src/utils/paths.js.map +1 -1
  262. package/dist/src/utils/platform-support.d.ts +1 -1
  263. package/dist/src/utils/platform-support.js +1 -1
  264. package/dist/src/utils/platform-support.js.map +1 -1
  265. package/dist/src/utils/plugin-config-impact.d.ts +3 -0
  266. package/dist/src/utils/plugin-config-impact.js +115 -273
  267. package/dist/src/utils/plugin-config-impact.js.map +1 -1
  268. package/dist/src/utils/plugin-config-references.d.ts +9 -2
  269. package/dist/src/utils/plugin-config-references.js +75 -85
  270. package/dist/src/utils/plugin-config-references.js.map +1 -1
  271. package/dist/src/utils/plugin-config-write.d.ts +58 -1
  272. package/dist/src/utils/plugin-config-write.js +756 -809
  273. package/dist/src/utils/plugin-config-write.js.map +1 -1
  274. package/dist/src/utils/plugin-config.d.ts +47 -46
  275. package/dist/src/utils/plugin-config.js +292 -833
  276. package/dist/src/utils/plugin-config.js.map +1 -1
  277. package/dist/src/utils/plugin-scripts.d.ts +11 -6
  278. package/dist/src/utils/plugin-scripts.js +52 -35
  279. package/dist/src/utils/plugin-scripts.js.map +1 -1
  280. package/dist/src/utils/runtime-config.js +5 -4
  281. package/dist/src/utils/runtime-config.js.map +1 -1
  282. package/dist/src/utils/runtime-skill-closure.d.ts +2 -2
  283. package/dist/src/utils/runtime-skill-closure.js.map +1 -1
  284. package/dist/src/utils/state-paths.d.ts +8 -3
  285. package/dist/src/utils/state-paths.js +53 -16
  286. package/dist/src/utils/state-paths.js.map +1 -1
  287. package/dist/src/utils/windows-npm-shim.d.ts +2 -0
  288. package/dist/src/utils/windows-npm-shim.js +5 -7
  289. package/dist/src/utils/windows-npm-shim.js.map +1 -1
  290. package/dist/vitest.config.js +1 -0
  291. package/dist/vitest.config.js.map +1 -1
  292. package/package.json +3 -3
  293. package/dist/src/commands/sync-command.d.ts +0 -40
  294. package/dist/src/commands/sync-command.js +0 -254
  295. package/dist/src/commands/sync-command.js.map +0 -1
  296. package/dist/src/portable/skills-cli.d.ts +0 -51
  297. package/dist/src/portable/skills-cli.js +0 -202
  298. package/dist/src/portable/skills-cli.js.map +0 -1
  299. package/dist/src/tui/project-inventory.d.ts +0 -68
  300. package/dist/src/tui/project-inventory.js +0 -203
  301. package/dist/src/tui/project-inventory.js.map +0 -1
  302. package/dist/src/utils/plugin-intent-state.d.ts +0 -49
  303. package/dist/src/utils/plugin-intent-state.js +0 -320
  304. package/dist/src/utils/plugin-intent-state.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ import { addRequirements, intentAdd, intentRemove } from '../commands/intent-command.js';
2
+ import { calculateIntentDigest } from '../intent/intent-codec.js';
3
+ import { observeIntent, resolveIntentPath } from '../intent/intent-store.js';
4
+ import { normalizeAgents, observePreferences, resetTargets, setAgents, resolvePreferencesPath } from '../intent/deployment-preferences.js';
5
+ import { withAwHomeMutationLock } from '../utils/aw-home-mutation-lock.js';
6
+ import { canonicalizePathThroughExistingAncestor } from '../utils/state-paths.js';
7
+ const intentPath = async (location) => canonicalizePathThroughExistingAncestor(await resolveIntentPath(location));
8
+ const preferencesPath = async (location) => canonicalizePathThroughExistingAncestor(await resolvePreferencesPath(location));
9
+ export async function prepareIntentPlan(location, action, selector) {
10
+ const canonicalPath = await intentPath(location);
11
+ const expected = await observeIntent(location);
12
+ if (expected.state !== 'valid' && expected.state !== 'absent')
13
+ throw new Error('pluginIntentStateInvalid');
14
+ if (action === 'remove' && (expected.state === 'absent'
15
+ || !expected.value.roots.some((root) => root.pluginId === selector))) {
16
+ throw new Error('pluginIntentRootMissing');
17
+ }
18
+ const proposed = action === 'add'
19
+ ? await addRequirements({ ...location, selectors: [selector], dryRun: true }) : undefined;
20
+ if (proposed?.errors.length || action === 'add' && !proposed?.state) {
21
+ throw new Error(proposed?.errors[0]?.code ?? 'pluginIntentAddUnavailable');
22
+ }
23
+ if (await intentPath(location) !== canonicalPath)
24
+ throw new Error('operationReviewStale');
25
+ return { kind: 'intent', scope: location.scope, action, selector, expected, canonicalPath,
26
+ ...(proposed?.state ? { proposedDigest: calculateIntentDigest(proposed.state) } : {}),
27
+ changes: [action === 'add' ? `声明插件需求:${selector}` : `移除插件需求:${selector}`],
28
+ warnings: action === 'remove' ? ['只修改需求声明;已有安装内容会保留。'] : ['只修改需求声明;不会安装插件。'],
29
+ };
30
+ }
31
+ export async function executeIntentPlan(location, plan) {
32
+ if (location.scope !== plan.scope)
33
+ throw new Error('operationReviewStale');
34
+ return withAwHomeMutationLock({ env: location.env, action: async (token) => {
35
+ if (await intentPath(location) !== plan.canonicalPath)
36
+ throw new Error('operationReviewStale');
37
+ const current = await observeIntent(location);
38
+ if (current.state !== plan.expected.state || ('rawDigest' in current ? current.rawDigest : undefined)
39
+ !== ('rawDigest' in plan.expected ? plan.expected.rawDigest : undefined)
40
+ || await intentPath(location) !== plan.canonicalPath) {
41
+ throw new Error('operationReviewStale');
42
+ }
43
+ if (plan.action === 'add') {
44
+ const proposed = await addRequirements({ ...location, token, selectors: [plan.selector], dryRun: true });
45
+ if (proposed.errors.length || !proposed.state
46
+ || calculateIntentDigest(proposed.state) !== plan.proposedDigest
47
+ || await intentPath(location) !== plan.canonicalPath) {
48
+ throw new Error('operationReviewStale');
49
+ }
50
+ return intentAdd({ ...location, token, selectors: [plan.selector] });
51
+ }
52
+ return intentRemove({ ...location, token, selector: plan.selector });
53
+ } });
54
+ }
55
+ function sameObservation(left, right) {
56
+ return left.state === right.state && ('rawDigest' in left ? left.rawDigest : undefined)
57
+ === ('rawDigest' in right ? right.rawDigest : undefined);
58
+ }
59
+ export async function prepareTargetsPlan(location, action, agents) {
60
+ const canonicalPath = await preferencesPath(location);
61
+ const expected = await observePreferences(location);
62
+ if (expected.state === 'unreadable' || action === 'set' && expected.state === 'invalid') {
63
+ throw new Error('deploymentPreferencesUnavailable');
64
+ }
65
+ const previousAgents = expected.state === 'valid' ? expected.value.targets : [];
66
+ const overrideCount = expected.state === 'valid' ? expected.value.exclusions.length : 0;
67
+ const nextAgents = action === 'reset' ? [] : normalizeAgents(agents);
68
+ if (await preferencesPath(location) !== canonicalPath)
69
+ throw new Error('operationReviewStale');
70
+ return {
71
+ kind: 'targets', scope: location.scope, action, agents: nextAgents, previousAgents,
72
+ overrideCount, expected, canonicalPath,
73
+ changes: action === 'reset'
74
+ ? ['清空本机工具选择', `清空 ${overrideCount} 项插件排除`]
75
+ : [`本机工具:${previousAgents.join('、') || '未选择'} → ${nextAgents.join('、') || '未选择'}`,
76
+ '保留已有插件排除'],
77
+ warnings: [],
78
+ };
79
+ }
80
+ export async function executeTargetsPlan(location, plan) {
81
+ if (location.scope !== plan.scope)
82
+ throw new Error('operationReviewStale');
83
+ return withAwHomeMutationLock({ env: location.env, action: async (token) => {
84
+ if (await preferencesPath(location) !== plan.canonicalPath)
85
+ throw new Error('operationReviewStale');
86
+ const current = await observePreferences(location);
87
+ if (!sameObservation(plan.expected, current)
88
+ || await preferencesPath(location) !== plan.canonicalPath)
89
+ throw new Error('operationReviewStale');
90
+ const saved = plan.action === 'reset'
91
+ ? await resetTargets({ ...location, token })
92
+ : await setAgents({ ...location, token }, plan.agents);
93
+ return { changed: saved.changed, agents: saved.value.targets };
94
+ } });
95
+ }
96
+ //# sourceMappingURL=scoped-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-flow.js","sourceRoot":"","sources":["../../../src/tui/scoped-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import type { PlatformName, Scope } from '../types.js';
2
+ import type { AgentId } from '../intent/deployment-preferences.js';
3
+ import { type StatusScopedTarget, type StatusTargetRevision, type StatusV8Payload, type StatusV8PluginSummary } from '../commands/status-v6.js';
4
+ import type { RecoveryTarget } from '../recovery/receipt.js';
5
+ import { type PluginDependencyOverviewViewModel } from './model.js';
6
+ export type InventoryState = 'blocked' | 'unknown' | 'pending' | 'ready';
7
+ export interface InventoryTarget {
8
+ platform?: PlatformName;
9
+ scope: Scope;
10
+ location: 'scope' | 'sharedUser';
11
+ state: InventoryState;
12
+ expectedVersion?: string;
13
+ installedVersion?: string;
14
+ reasonCodes: string[];
15
+ agent?: AgentId;
16
+ delivery?: 'native' | 'agent-skills';
17
+ observation?: 'known' | 'unknown';
18
+ actual?: boolean;
19
+ }
20
+ export interface InventoryDependency {
21
+ pluginId: string;
22
+ displayName: string;
23
+ targets: InventoryTarget[];
24
+ }
25
+ export interface InventoryRoot {
26
+ scope?: Scope;
27
+ pluginId: string;
28
+ sourceId: string;
29
+ displayName: string;
30
+ section: 'declared' | 'extraInstalled';
31
+ state: InventoryState;
32
+ targets: InventoryTarget[];
33
+ dependencies: InventoryDependency[];
34
+ agentResults?: Array<Pick<RecoveryTarget, 'agent' | 'delivery' | 'blockers' | 'reasons' | 'satisfaction' | 'observation' | 'content'>>;
35
+ blockers?: Array<{
36
+ code: string;
37
+ message: string;
38
+ }>;
39
+ sourceState?: string;
40
+ }
41
+ export interface ScopedInventoryViewModel {
42
+ scope: Scope;
43
+ projectRoot?: string;
44
+ projectName?: string;
45
+ declarationState: 'ready' | 'absent' | 'invalid' | 'unavailable' | 'notProject';
46
+ preferenceState: string;
47
+ selectedAgents: AgentId[];
48
+ declaredRoots: InventoryRoot[];
49
+ extraInstalledRoots: InventoryRoot[];
50
+ syncTargets: Array<{
51
+ pluginId: string;
52
+ agent: AgentId;
53
+ scope: Scope;
54
+ }>;
55
+ counts: Record<InventoryState, number>;
56
+ errors: Array<{
57
+ code: string;
58
+ message: string;
59
+ }>;
60
+ allSatisfied: boolean | null;
61
+ coverage?: {
62
+ native: boolean;
63
+ portable: boolean;
64
+ scopes?: Scope[];
65
+ };
66
+ }
67
+ export interface RecoveryInventoryInput {
68
+ scope: Scope;
69
+ intent: {
70
+ state: string;
71
+ };
72
+ selection: {
73
+ agents: AgentId[];
74
+ preferences: string;
75
+ };
76
+ inventory: Array<{
77
+ pluginId: string;
78
+ source: string;
79
+ sourceState: string;
80
+ blockers: Array<{
81
+ code: string;
82
+ message: string;
83
+ }>;
84
+ targetResults: RecoveryTarget[];
85
+ }> | null;
86
+ errors: Array<{
87
+ code: string;
88
+ message: string;
89
+ }>;
90
+ allSatisfied: boolean | null;
91
+ coverage?: {
92
+ native: boolean;
93
+ portable: boolean;
94
+ scopes?: Scope[];
95
+ };
96
+ extraObserved?: Array<{
97
+ pluginId: string;
98
+ agent: AgentId | null;
99
+ scope: Scope;
100
+ delivery: RecoveryTarget['delivery'];
101
+ observation: RecoveryTarget['observation'];
102
+ content?: RecoveryTarget['content'];
103
+ backend?: unknown;
104
+ }>;
105
+ }
106
+ export interface ScopedInventoryLoadResult extends RecoveryInventoryInput {
107
+ nativeSnapshot: {
108
+ payload: StatusV8Payload;
109
+ pluginSummaries: readonly (Pick<StatusV8PluginSummary, 'pluginId'> & Partial<StatusV8PluginSummary>)[];
110
+ targetRevisions: readonly StatusTargetRevision[];
111
+ dependencyOverviews: readonly PluginDependencyOverviewViewModel[];
112
+ };
113
+ }
114
+ export declare function hasStatusInstallationEvidence(target: StatusScopedTarget): boolean;
115
+ export declare function buildScopedInventory(options: {
116
+ recovery: RecoveryInventoryInput;
117
+ status: StatusV8Payload;
118
+ pluginSummaries: readonly Pick<StatusV8PluginSummary, 'pluginId' | 'displayName'>[];
119
+ targetRevisions?: readonly StatusTargetRevision[];
120
+ dependencyOverviews?: readonly PluginDependencyOverviewViewModel[];
121
+ projectRoot?: string;
122
+ }): ScopedInventoryViewModel;
@@ -0,0 +1,225 @@
1
+ import path from 'node:path';
2
+ import { flattenStatusTargets, statusTargetActivation, statusTargetIntent, statusTargetOwnershipState, statusTargetSharedNative } from '../commands/status-v6.js';
3
+ import { hasActualScopeEvidence } from './model.js';
4
+ const stateOrder = {
5
+ blocked: 0, unknown: 1, pending: 2, ready: 3,
6
+ };
7
+ function agentForPlatform(platform) {
8
+ return platform === 'claude' ? 'claude' : 'codex';
9
+ }
10
+ function targetIdentity(target) {
11
+ return [target.agent ?? '', target.delivery ?? '', target.platform ?? '', target.scope].join('\0');
12
+ }
13
+ export function hasStatusInstallationEvidence(target) {
14
+ return hasActualScopeEvidence(target)
15
+ || target.reasons.some((reason) => reason.code === 'sourceMissing'
16
+ || reason.code === 'catalogSourceUnavailable' || reason.code === 'bundleUnavailable');
17
+ }
18
+ function targetState(target) {
19
+ if (target.blockers.length)
20
+ return canPreparePortable(target) ? 'pending' : 'blocked';
21
+ if (target.content === 'conflict')
22
+ return 'blocked';
23
+ if (target.observation === 'missing' || target.content === 'absent'
24
+ || target.content === 'drifted')
25
+ return 'pending';
26
+ if (target.observation === 'unknown' || target.content === 'unknown')
27
+ return 'unknown';
28
+ return 'ready';
29
+ }
30
+ function canPreparePortable(target) {
31
+ return target.delivery?.kind === 'agent-skills'
32
+ && target.blockers.length > 0
33
+ && target.blockers.every((blocker) => blocker.code === 'needs-preparation');
34
+ }
35
+ function rootState(root) {
36
+ if (root.blockers.length)
37
+ return 'blocked';
38
+ const states = root.targetResults.map(targetState);
39
+ return ['blocked', 'unknown', 'pending', 'ready']
40
+ .find((state) => states.includes(state)) ?? 'unknown';
41
+ }
42
+ function sortedRoots(roots) {
43
+ return roots.sort((a, b) => stateOrder[a.state] - stateOrder[b.state]
44
+ || a.displayName.localeCompare(b.displayName, 'en') || a.pluginId.localeCompare(b.pluginId, 'en'));
45
+ }
46
+ function statusState(target) {
47
+ const reasons = [...target.reasons, ...(target.sharedReasons ?? [])];
48
+ if (target.state === 'blocked' || reasons.some((reason) => reason.severity === 'blocking'))
49
+ return 'blocked';
50
+ if (statusTargetSharedNative(target)?.state === 'unobserved'
51
+ || statusTargetActivation(target)?.evidence === 'unobserved'
52
+ || statusTargetOwnershipState(target) === 'error'
53
+ || reasons.some((reason) => reason.code.includes('Unobserved')
54
+ || reason.code.includes('ObservationFailed') || reason.code === 'nativeStateUnreadable'))
55
+ return 'unknown';
56
+ if (target.state === 'ready')
57
+ return 'ready';
58
+ if (target.state === 'needsSync' && (hasActualScopeEvidence(target)
59
+ || statusTargetOwnershipState(target) === 'absent'
60
+ || statusTargetOwnershipState(target) === 'partial'))
61
+ return 'pending';
62
+ return 'unknown';
63
+ }
64
+ export function buildScopedInventory(options) {
65
+ const { recovery } = options;
66
+ const statusTargets = flattenStatusTargets(options.status.targets);
67
+ const targetsById = new Map();
68
+ for (const target of statusTargets)
69
+ targetsById.set(target.pluginId, [...(targetsById.get(target.pluginId) ?? []), target]);
70
+ const revisions = new Map((options.targetRevisions ?? []).map((entry) => [
71
+ `${entry.pluginId}\0${entry.platform}\0${entry.scope}`, entry.revision,
72
+ ]));
73
+ const targetView = (target, location) => {
74
+ const revision = revisions.get(`${target.pluginId}\0${target.platform}\0${target.scope}`);
75
+ return {
76
+ platform: target.platform, scope: target.scope, location, state: statusState(target),
77
+ agent: agentForPlatform(target.platform), delivery: 'native',
78
+ ...(revision?.availableVersion ?? target.version
79
+ ? { expectedVersion: revision?.availableVersion ?? target.version } : {}),
80
+ ...(revision?.installedVersion ? { installedVersion: revision.installedVersion } : {}),
81
+ reasonCodes: [...new Set([...target.reasons, ...(target.sharedReasons ?? [])]
82
+ .flatMap((reason) => [reason.code, ...(reason.rootIssueCode ? [reason.rootIssueCode] : [])]))],
83
+ };
84
+ };
85
+ const names = new Map(options.pluginSummaries.map((plugin) => [plugin.pluginId, plugin.displayName]));
86
+ const nameFor = (pluginId) => names.get(pluginId) ?? pluginId.split('/').at(-1) ?? pluginId;
87
+ const dependencyIds = new Set();
88
+ const declaredRoots = (recovery.inventory ?? []).map((root) => {
89
+ const nativeTargets = (targetsById.get(root.pluginId) ?? [])
90
+ .filter((target) => target.scope === recovery.scope
91
+ && (statusTargetIntent(target).scopes.includes(recovery.scope) || hasActualScopeEvidence(target)));
92
+ const recoveryTargets = root.targetResults.flatMap((target) => target.delivery ? [{
93
+ ...(target.delivery.kind === 'native' ? { platform: target.delivery.platform } : {}),
94
+ scope: target.scope, location: 'scope', state: targetState(target),
95
+ reasonCodes: target.blockers.map((blocker) => blocker.code),
96
+ agent: target.agent, delivery: target.delivery.kind,
97
+ ...(target.delivery.kind === 'agent-skills' ? {
98
+ observation: target.content === 'drifted' || target.observation === 'verified' || target.observation === 'missing'
99
+ ? 'known' : 'unknown',
100
+ actual: target.content === 'satisfied' || target.content === 'drifted',
101
+ } : {}),
102
+ }] : []);
103
+ const observedTargets = nativeTargets.map((target) => targetView(target, 'scope'));
104
+ for (const target of recoveryTargets) {
105
+ const current = observedTargets.find((entry) => targetIdentity(entry) === targetIdentity(target));
106
+ if (current) {
107
+ current.state = target.state;
108
+ current.reasonCodes = [...new Set([...current.reasonCodes, ...target.reasonCodes])];
109
+ current.agent = target.agent;
110
+ current.delivery = target.delivery;
111
+ }
112
+ else
113
+ observedTargets.push(target);
114
+ }
115
+ const overview = options.dependencyOverviews?.find((entry) => entry.pluginId === root.pluginId);
116
+ const dependencies = (overview?.dependencies ?? []).map((dependency) => {
117
+ dependencyIds.add(dependency.pluginId);
118
+ const linkedUser = new Set(nativeTargets.flatMap((consumer) => consumer.components
119
+ .filter((component) => component.kind === 'dependency' && component.key === dependency.pluginId
120
+ && component.metadata?.scope === 'user' && component.state === 'ready')
121
+ .map(() => consumer.platform)));
122
+ const targets = (targetsById.get(dependency.pluginId) ?? []).filter((target) => target.scope === recovery.scope
123
+ && (statusTargetIntent(target).scopes.includes(recovery.scope) || hasActualScopeEvidence(target))
124
+ || recovery.scope === 'project' && target.scope === 'user'
125
+ && linkedUser.has(target.platform) && hasActualScopeEvidence(target))
126
+ .map((target) => targetView(target, target.scope === recovery.scope ? 'scope' : 'sharedUser'));
127
+ if (recovery.scope === 'project') {
128
+ for (const consumer of nativeTargets) {
129
+ for (const component of consumer.components) {
130
+ if (component.kind !== 'dependency' || component.key !== dependency.pluginId
131
+ || component.metadata?.scope !== 'user'
132
+ || targets.some((target) => target.platform === consumer.platform && target.scope === 'user'))
133
+ continue;
134
+ targets.push({ platform: consumer.platform, scope: 'user', location: 'sharedUser',
135
+ state: component.state === 'ready' ? 'ready'
136
+ : component.state === 'absent' || component.state === 'incomplete' ? 'pending'
137
+ : component.state === 'error' ? 'unknown' : 'blocked',
138
+ reasonCodes: typeof component.metadata.rootIssueCode === 'string'
139
+ ? [component.metadata.rootIssueCode] : [],
140
+ });
141
+ }
142
+ }
143
+ }
144
+ return { pluginId: dependency.pluginId, displayName: dependency.displayName, targets };
145
+ });
146
+ return {
147
+ scope: recovery.scope,
148
+ pluginId: root.pluginId,
149
+ sourceId: root.source,
150
+ displayName: nameFor(root.pluginId),
151
+ section: 'declared',
152
+ state: rootState(root),
153
+ targets: observedTargets,
154
+ dependencies,
155
+ agentResults: root.targetResults,
156
+ blockers: root.blockers,
157
+ sourceState: root.sourceState,
158
+ };
159
+ });
160
+ const declaredIds = new Set(declaredRoots.map((root) => root.pluginId));
161
+ const extras = new Map();
162
+ for (const target of recovery.extraObserved ?? []) {
163
+ if (target.scope !== recovery.scope || declaredIds.has(target.pluginId))
164
+ continue;
165
+ if (!target.delivery && !target.agent) {
166
+ if (!extras.has(target.pluginId))
167
+ extras.set(target.pluginId, []);
168
+ continue;
169
+ }
170
+ const state = target.content === 'conflict' ? 'blocked'
171
+ : target.observation === 'missing' || target.content === 'absent' || target.content === 'drifted' ? 'pending'
172
+ : target.observation === 'unknown' || target.content === 'unknown' ? 'unknown' : 'ready';
173
+ extras.set(target.pluginId, [...(extras.get(target.pluginId) ?? []), {
174
+ ...(target.delivery?.kind === 'native' ? { platform: target.delivery.platform } : {}),
175
+ scope: recovery.scope, location: 'scope', state, reasonCodes: [],
176
+ ...(target.agent ? { agent: target.agent } : {}),
177
+ ...(target.delivery ? { delivery: target.delivery.kind } : {}),
178
+ ...(target.delivery?.kind === 'agent-skills' ? {
179
+ observation: target.content === 'drifted' || target.observation === 'verified' || target.observation === 'missing'
180
+ ? 'known' : 'unknown',
181
+ actual: target.content === 'satisfied' || target.content === 'drifted',
182
+ } : {}),
183
+ }]);
184
+ }
185
+ for (const target of statusTargets) {
186
+ if (target.scope !== recovery.scope || !hasActualScopeEvidence(target)
187
+ || declaredIds.has(target.pluginId) || dependencyIds.has(target.pluginId)
188
+ || statusTargetIntent(target).relation === 'dependency')
189
+ continue;
190
+ const observed = targetView(target, 'scope');
191
+ const current = extras.get(target.pluginId) ?? [];
192
+ const index = current.findIndex((entry) => targetIdentity(entry) === targetIdentity(observed));
193
+ if (index < 0)
194
+ extras.set(target.pluginId, [...current, observed]);
195
+ else
196
+ extras.set(target.pluginId, current.map((entry, entryIndex) => entryIndex === index
197
+ ? { ...entry, ...observed, state: stateOrder[entry.state] < stateOrder[observed.state] ? entry.state : observed.state,
198
+ reasonCodes: [...new Set([...entry.reasonCodes, ...observed.reasonCodes])] } : entry));
199
+ }
200
+ const extraInstalledRoots = [...extras].map(([pluginId, targets]) => ({
201
+ scope: recovery.scope,
202
+ pluginId, sourceId: pluginId.split('/')[0] ?? pluginId, displayName: nameFor(pluginId),
203
+ section: 'extraInstalled', state: ['blocked', 'unknown', 'pending', 'ready']
204
+ .find((state) => targets.some((target) => target.state === state)) ?? 'unknown',
205
+ targets, dependencies: [],
206
+ }));
207
+ const counts = { blocked: 0, unknown: 0, pending: 0, ready: 0 };
208
+ for (const root of declaredRoots)
209
+ counts[root.state] += 1;
210
+ const syncTargets = (recovery.intent.state === 'valid' ? recovery.inventory ?? [] : [])
211
+ .flatMap((root) => root.blockers.length ? [] : root.targetResults.filter((target) => (!target.blockers.length || canPreparePortable(target)) && targetState(target) === 'pending')
212
+ .map((target) => ({ pluginId: target.pluginId, agent: target.agent, scope: recovery.scope })));
213
+ return {
214
+ scope: recovery.scope,
215
+ ...(options.projectRoot ? { projectRoot: options.projectRoot, projectName: path.basename(options.projectRoot) } : {}),
216
+ declarationState: recovery.intent.state === 'valid' ? 'ready'
217
+ : recovery.intent.state === 'absent' ? 'absent' : 'invalid',
218
+ preferenceState: recovery.selection.preferences,
219
+ selectedAgents: recovery.selection.agents,
220
+ declaredRoots: sortedRoots(declaredRoots), extraInstalledRoots: sortedRoots(extraInstalledRoots),
221
+ syncTargets, counts, errors: recovery.errors, allSatisfied: recovery.allSatisfied,
222
+ ...(recovery.coverage ? { coverage: recovery.coverage } : {}),
223
+ };
224
+ }
225
+ //# sourceMappingURL=scoped-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-inventory.js","sourceRoot":"","sources":["../../../src/tui/scoped-inventory.ts"],"names":[],"mappings":"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"}