@lesliechan721/aw 0.1.0-beta.5 → 0.1.0-beta.50

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 (566) hide show
  1. package/dist/authoring/assets/aw-config.mjs +100 -501
  2. package/dist/authoring/assets/aw-config.mjs.map +1 -1
  3. package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
  4. package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
  5. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
  6. package/dist/authoring/scripts/add-skill.mjs +4 -4
  7. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  8. package/dist/authoring/scripts/init-plugin.mjs +67 -97
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  10. package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
  11. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
  12. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
  13. package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
  14. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  15. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -90
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -120
  17. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  18. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  19. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  20. package/dist/authoring/scripts/remove-plugin.mjs +3 -2
  21. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
  22. package/dist/authoring/scripts/validate-plugin.mjs +346 -1131
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  25. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  26. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  27. package/dist/scripts/bundle-plugins.d.ts +1 -0
  28. package/dist/scripts/bundle-plugins.js +20 -5
  29. package/dist/scripts/bundle-plugins.js.map +1 -1
  30. package/dist/scripts/plugin-staging.d.ts +7 -9
  31. package/dist/scripts/plugin-staging.js +18 -29
  32. package/dist/scripts/plugin-staging.js.map +1 -1
  33. package/dist/scripts/test-plugin-scripts.d.ts +2 -0
  34. package/dist/scripts/test-plugin-scripts.js +47 -76
  35. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  36. package/dist/scripts/test-workers.d.mts +24 -0
  37. package/dist/scripts/test-workers.mjs +59 -0
  38. package/dist/scripts/test-workers.mjs.map +1 -0
  39. package/dist/src/adapters/helpers.js +2 -2
  40. package/dist/src/adapters/helpers.js.map +1 -1
  41. package/dist/src/authoring/workspace-commands.d.ts +17 -1
  42. package/dist/src/authoring/workspace-commands.js +21 -4
  43. package/dist/src/authoring/workspace-commands.js.map +1 -1
  44. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  45. package/dist/src/commands/aw-capabilities.js +264 -0
  46. package/dist/src/commands/aw-capabilities.js.map +1 -0
  47. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  48. package/dist/src/commands/catalog-dev-source.js +655 -0
  49. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  50. package/dist/src/commands/catalog-generation.d.ts +21 -0
  51. package/dist/src/commands/catalog-generation.js +9 -0
  52. package/dist/src/commands/catalog-generation.js.map +1 -0
  53. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  54. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  55. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  56. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  57. package/dist/src/commands/catalog-publication-journal.js +292 -0
  58. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  59. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  60. package/dist/src/commands/catalog-publication-target.js +95 -0
  61. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  62. package/dist/src/commands/catalog-publish.d.ts +73 -15
  63. package/dist/src/commands/catalog-publish.js +701 -212
  64. package/dist/src/commands/catalog-publish.js.map +1 -1
  65. package/dist/src/commands/catalog-source.d.ts +60 -22
  66. package/dist/src/commands/catalog-source.js +311 -91
  67. package/dist/src/commands/catalog-source.js.map +1 -1
  68. package/dist/src/commands/catalog-status.d.ts +18 -22
  69. package/dist/src/commands/catalog-status.js +81 -115
  70. package/dist/src/commands/catalog-status.js.map +1 -1
  71. package/dist/src/commands/catalog-store.d.ts +104 -0
  72. package/dist/src/commands/catalog-store.js +685 -0
  73. package/dist/src/commands/catalog-store.js.map +1 -0
  74. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  75. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  76. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  77. package/dist/src/commands/console.js +28 -17
  78. package/dist/src/commands/console.js.map +1 -1
  79. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  80. package/dist/src/commands/dependency-operation-plan.js +289 -7
  81. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  82. package/dist/src/commands/init.d.ts +5 -11
  83. package/dist/src/commands/init.js +30 -51
  84. package/dist/src/commands/init.js.map +1 -1
  85. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  86. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  87. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  88. package/dist/src/commands/operation-plan.d.ts +146 -0
  89. package/dist/src/commands/operation-plan.js +71 -0
  90. package/dist/src/commands/operation-plan.js.map +1 -0
  91. package/dist/src/commands/operation-planner.d.ts +46 -0
  92. package/dist/src/commands/operation-planner.js +141 -0
  93. package/dist/src/commands/operation-planner.js.map +1 -0
  94. package/dist/src/commands/options.d.ts +9 -7
  95. package/dist/src/commands/options.js +83 -21
  96. package/dist/src/commands/options.js.map +1 -1
  97. package/dist/src/commands/plugin-capabilities.js +23 -3
  98. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  99. package/dist/src/commands/rebuild-command.d.ts +77 -31
  100. package/dist/src/commands/rebuild-command.js +4862 -729
  101. package/dist/src/commands/rebuild-command.js.map +1 -1
  102. package/dist/src/commands/rebuild-integration.d.ts +131 -21
  103. package/dist/src/commands/rebuild-integration.js +2866 -1339
  104. package/dist/src/commands/rebuild-integration.js.map +1 -1
  105. package/dist/src/commands/rebuild-operations.d.ts +58 -30
  106. package/dist/src/commands/rebuild-operations.js +260 -319
  107. package/dist/src/commands/rebuild-operations.js.map +1 -1
  108. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  109. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  110. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  111. package/dist/src/commands/review-inspection.d.ts +228 -0
  112. package/dist/src/commands/review-inspection.js +1341 -0
  113. package/dist/src/commands/review-inspection.js.map +1 -0
  114. package/dist/src/commands/review-preparation.d.ts +49 -0
  115. package/dist/src/commands/review-preparation.js +427 -0
  116. package/dist/src/commands/review-preparation.js.map +1 -0
  117. package/dist/src/commands/runtime.d.ts +1 -5
  118. package/dist/src/commands/runtime.js +24 -50
  119. package/dist/src/commands/runtime.js.map +1 -1
  120. package/dist/src/commands/skill-eval.d.ts +39 -0
  121. package/dist/src/commands/skill-eval.js +400 -0
  122. package/dist/src/commands/skill-eval.js.map +1 -0
  123. package/dist/src/commands/status-v6.d.ts +279 -0
  124. package/dist/src/commands/status-v6.js +2787 -0
  125. package/dist/src/commands/status-v6.js.map +1 -0
  126. package/dist/src/commands/sync-command.d.ts +40 -0
  127. package/dist/src/commands/sync-command.js +250 -0
  128. package/dist/src/commands/sync-command.js.map +1 -0
  129. package/dist/src/commands/wizard.d.ts +8 -5
  130. package/dist/src/commands/wizard.js +6 -4
  131. package/dist/src/commands/wizard.js.map +1 -1
  132. package/dist/src/commands/write-commands.d.ts +9 -3
  133. package/dist/src/commands/write-commands.js +127 -31
  134. package/dist/src/commands/write-commands.js.map +1 -1
  135. package/dist/src/constants.d.ts +7 -1
  136. package/dist/src/constants.js +7 -1
  137. package/dist/src/constants.js.map +1 -1
  138. package/dist/src/eval/manifest-v1.d.ts +71 -0
  139. package/dist/src/eval/manifest-v1.js +370 -0
  140. package/dist/src/eval/manifest-v1.js.map +1 -0
  141. package/dist/src/generators/local-plugin.d.ts +5 -1
  142. package/dist/src/generators/local-plugin.js +236 -109
  143. package/dist/src/generators/local-plugin.js.map +1 -1
  144. package/dist/src/index.d.ts +10 -4
  145. package/dist/src/index.js +1793 -486
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/output/command-receipt.d.ts +43 -46
  148. package/dist/src/output/command-receipt.js +256 -80
  149. package/dist/src/output/command-receipt.js.map +1 -1
  150. package/dist/src/output/model.d.ts +3 -44
  151. package/dist/src/output/model.js +1 -144
  152. package/dist/src/output/model.js.map +1 -1
  153. package/dist/src/output/rebuild-progress.js +1 -13
  154. package/dist/src/output/rebuild-progress.js.map +1 -1
  155. package/dist/src/portable/commands.d.ts +46 -7
  156. package/dist/src/portable/commands.js +349 -37
  157. package/dist/src/portable/commands.js.map +1 -1
  158. package/dist/src/portable/materializer.d.ts +17 -4
  159. package/dist/src/portable/materializer.js +179 -41
  160. package/dist/src/portable/materializer.js.map +1 -1
  161. package/dist/src/portable/skills-cli.d.ts +15 -7
  162. package/dist/src/portable/skills-cli.js +74 -20
  163. package/dist/src/portable/skills-cli.js.map +1 -1
  164. package/dist/src/review/eval-source-input.d.ts +43 -0
  165. package/dist/src/review/eval-source-input.js +207 -0
  166. package/dist/src/review/eval-source-input.js.map +1 -0
  167. package/dist/src/review/review-profile.d.ts +17 -0
  168. package/dist/src/review/review-profile.js +234 -0
  169. package/dist/src/review/review-profile.js.map +1 -0
  170. package/dist/src/review/review-selection.d.ts +30 -0
  171. package/dist/src/review/review-selection.js +527 -0
  172. package/dist/src/review/review-selection.js.map +1 -0
  173. package/dist/src/review/review-types.d.ts +68 -0
  174. package/dist/src/review/review-types.js +16 -0
  175. package/dist/src/review/review-types.js.map +1 -0
  176. package/dist/src/review/skill-materialization.d.ts +13 -0
  177. package/dist/src/review/skill-materialization.js +75 -0
  178. package/dist/src/review/skill-materialization.js.map +1 -0
  179. package/dist/src/review/source-binding.d.ts +183 -0
  180. package/dist/src/review/source-binding.js +708 -0
  181. package/dist/src/review/source-binding.js.map +1 -0
  182. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  183. package/dist/src/tui/catalog-freshness.js +2 -0
  184. package/dist/src/tui/catalog-freshness.js.map +1 -0
  185. package/dist/src/tui/catalog-generation.d.ts +21 -0
  186. package/dist/src/tui/catalog-generation.js +156 -0
  187. package/dist/src/tui/catalog-generation.js.map +1 -0
  188. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  189. package/dist/src/tui/catalog-sources/projection.js +17 -0
  190. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  191. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  192. package/dist/src/tui/catalog-sources/review.js +13 -0
  193. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  194. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  195. package/dist/src/tui/catalog-sources/screens.js +40 -0
  196. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  197. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  198. package/dist/src/tui/catalog-sources/session.js +300 -0
  199. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  200. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  201. package/dist/src/tui/catalog-sources/types.js +2 -0
  202. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  203. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  204. package/dist/src/tui/catalog-store-task.js +19 -0
  205. package/dist/src/tui/catalog-store-task.js.map +1 -0
  206. package/dist/src/tui/clipboard.d.ts +13 -0
  207. package/dist/src/tui/clipboard.js +95 -0
  208. package/dist/src/tui/clipboard.js.map +1 -0
  209. package/dist/src/tui/components.d.ts +110 -3
  210. package/dist/src/tui/components.js +183 -36
  211. package/dist/src/tui/components.js.map +1 -1
  212. package/dist/src/tui/config-array-draft.d.ts +29 -0
  213. package/dist/src/tui/config-array-draft.js +48 -0
  214. package/dist/src/tui/config-array-draft.js.map +1 -0
  215. package/dist/src/tui/config-leaf-editor.d.ts +16 -0
  216. package/dist/src/tui/config-leaf-editor.js +206 -0
  217. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  218. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  219. package/dist/src/tui/config-value-presentation.js +104 -0
  220. package/dist/src/tui/config-value-presentation.js.map +1 -0
  221. package/dist/src/tui/console-app-v4.d.ts +14 -4
  222. package/dist/src/tui/console-app-v4.js +8941 -1872
  223. package/dist/src/tui/console-app-v4.js.map +1 -1
  224. package/dist/src/tui/content-item-card.d.ts +13 -0
  225. package/dist/src/tui/content-item-card.js +51 -0
  226. package/dist/src/tui/content-item-card.js.map +1 -0
  227. package/dist/src/tui/controller-runtime.d.ts +10 -2
  228. package/dist/src/tui/controller-runtime.js +3211 -388
  229. package/dist/src/tui/controller-runtime.js.map +1 -1
  230. package/dist/src/tui/controller.d.ts +615 -45
  231. package/dist/src/tui/controller.js +3558 -768
  232. package/dist/src/tui/controller.js.map +1 -1
  233. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  234. package/dist/src/tui/dependency-graph-view.js +121 -0
  235. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  236. package/dist/src/tui/dependency-graph.d.ts +81 -0
  237. package/dist/src/tui/dependency-graph.js +452 -0
  238. package/dist/src/tui/dependency-graph.js.map +1 -0
  239. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  240. package/dist/src/tui/diagnostic-projection.js +567 -0
  241. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  242. package/dist/src/tui/diagnostics.d.ts +3 -3
  243. package/dist/src/tui/diagnostics.js +14 -2
  244. package/dist/src/tui/diagnostics.js.map +1 -1
  245. package/dist/src/tui/entity-cards.d.ts +55 -0
  246. package/dist/src/tui/entity-cards.js +220 -0
  247. package/dist/src/tui/entity-cards.js.map +1 -0
  248. package/dist/src/tui/glossary.d.ts +23 -0
  249. package/dist/src/tui/glossary.js +42 -0
  250. package/dist/src/tui/glossary.js.map +1 -0
  251. package/dist/src/tui/index.d.ts +6 -1
  252. package/dist/src/tui/index.js +5 -1
  253. package/dist/src/tui/index.js.map +1 -1
  254. package/dist/src/tui/input-display.d.ts +9 -0
  255. package/dist/src/tui/input-display.js +58 -0
  256. package/dist/src/tui/input-display.js.map +1 -0
  257. package/dist/src/tui/keys.d.ts +44 -0
  258. package/dist/src/tui/keys.js +43 -15
  259. package/dist/src/tui/keys.js.map +1 -1
  260. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  261. package/dist/src/tui/lifecycle-action-view.js +36 -0
  262. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  263. package/dist/src/tui/model.d.ts +223 -31
  264. package/dist/src/tui/model.js +1510 -397
  265. package/dist/src/tui/model.js.map +1 -1
  266. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  267. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  268. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  269. package/dist/src/tui/operation-history.d.ts +81 -0
  270. package/dist/src/tui/operation-history.js +136 -0
  271. package/dist/src/tui/operation-history.js.map +1 -0
  272. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  273. package/dist/src/tui/operation-review-planner.js +1295 -0
  274. package/dist/src/tui/operation-review-planner.js.map +1 -0
  275. package/dist/src/tui/plugin-content.d.ts +31 -0
  276. package/dist/src/tui/plugin-content.js +680 -0
  277. package/dist/src/tui/plugin-content.js.map +1 -0
  278. package/dist/src/tui/plugin-detail.d.ts +52 -0
  279. package/dist/src/tui/plugin-detail.js +165 -0
  280. package/dist/src/tui/plugin-detail.js.map +1 -0
  281. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  282. package/dist/src/tui/plugin-write-task.js +286 -0
  283. package/dist/src/tui/plugin-write-task.js.map +1 -0
  284. package/dist/src/tui/project-inventory.d.ts +68 -0
  285. package/dist/src/tui/project-inventory.js +203 -0
  286. package/dist/src/tui/project-inventory.js.map +1 -0
  287. package/dist/src/tui/prompt.js +4 -15
  288. package/dist/src/tui/prompt.js.map +1 -1
  289. package/dist/src/tui/query-header.d.ts +30 -0
  290. package/dist/src/tui/query-header.js +40 -0
  291. package/dist/src/tui/query-header.js.map +1 -0
  292. package/dist/src/tui/reader.d.ts +37 -0
  293. package/dist/src/tui/reader.js +47 -0
  294. package/dist/src/tui/reader.js.map +1 -0
  295. package/dist/src/tui/router.d.ts +197 -10
  296. package/dist/src/tui/router.js +338 -50
  297. package/dist/src/tui/router.js.map +1 -1
  298. package/dist/src/tui/screen-registry.d.ts +701 -0
  299. package/dist/src/tui/screen-registry.js +230 -0
  300. package/dist/src/tui/screen-registry.js.map +1 -0
  301. package/dist/src/tui/session-console-app.d.ts +6 -0
  302. package/dist/src/tui/session-console-app.js +13 -0
  303. package/dist/src/tui/session-console-app.js.map +1 -0
  304. package/dist/src/tui/session-host.d.ts +45 -0
  305. package/dist/src/tui/session-host.js +209 -0
  306. package/dist/src/tui/session-host.js.map +1 -0
  307. package/dist/src/tui/source-detail-card.d.ts +29 -0
  308. package/dist/src/tui/source-detail-card.js +45 -0
  309. package/dist/src/tui/source-detail-card.js.map +1 -0
  310. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  311. package/dist/src/tui/source-ref-presets.js +11 -0
  312. package/dist/src/tui/source-ref-presets.js.map +1 -0
  313. package/dist/src/tui/theme.d.ts +12 -0
  314. package/dist/src/tui/theme.js +12 -0
  315. package/dist/src/tui/theme.js.map +1 -1
  316. package/dist/src/tui/viewport.d.ts +1 -0
  317. package/dist/src/tui/viewport.js +23 -0
  318. package/dist/src/tui/viewport.js.map +1 -1
  319. package/dist/src/tui/views.js +31 -3
  320. package/dist/src/tui/views.js.map +1 -1
  321. package/dist/src/tui/wizard.js +37 -13
  322. package/dist/src/tui/wizard.js.map +1 -1
  323. package/dist/src/types.d.ts +244 -20
  324. package/dist/src/types.js +1 -0
  325. package/dist/src/types.js.map +1 -1
  326. package/dist/src/utils/agent-version.d.ts +7 -1
  327. package/dist/src/utils/agent-version.js +41 -8
  328. package/dist/src/utils/agent-version.js.map +1 -1
  329. package/dist/src/utils/artifact-plan.d.ts +5 -4
  330. package/dist/src/utils/artifact-plan.js +18 -7
  331. package/dist/src/utils/artifact-plan.js.map +1 -1
  332. package/dist/src/utils/artifact-renderer.d.ts +17 -7
  333. package/dist/src/utils/artifact-renderer.js +214 -216
  334. package/dist/src/utils/artifact-renderer.js.map +1 -1
  335. package/dist/src/utils/artifact-request.d.ts +21 -0
  336. package/dist/src/utils/artifact-request.js +78 -0
  337. package/dist/src/utils/artifact-request.js.map +1 -0
  338. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  339. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  340. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  341. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  342. package/dist/src/utils/bundle-integrity.js +0 -25
  343. package/dist/src/utils/bundle-integrity.js.map +1 -1
  344. package/dist/src/utils/bundle-layout.js +22 -29
  345. package/dist/src/utils/bundle-layout.js.map +1 -1
  346. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  347. package/dist/src/utils/catalog-capability-projection.js +14 -0
  348. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  349. package/dist/src/utils/catalog-digests.d.ts +10 -0
  350. package/dist/src/utils/catalog-digests.js +57 -20
  351. package/dist/src/utils/catalog-digests.js.map +1 -1
  352. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  353. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  354. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  355. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  356. package/dist/src/utils/catalog-generation-error.js +30 -0
  357. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  358. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  359. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  360. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  361. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  362. package/dist/src/utils/catalog-generation-service.js +1271 -0
  363. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  364. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  365. package/dist/src/utils/catalog-generation-state.js +192 -0
  366. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  367. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  368. package/dist/src/utils/catalog-generation-store.js +452 -0
  369. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  370. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  371. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  372. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  373. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  374. package/dist/src/utils/catalog-operation-context.js +142 -0
  375. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  376. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  377. package/dist/src/utils/catalog-public-error.js +28 -8
  378. package/dist/src/utils/catalog-public-error.js.map +1 -1
  379. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  380. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  381. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  382. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  383. package/dist/src/utils/catalog-snapshot.js +11 -3
  384. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  385. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  386. package/dist/src/utils/catalog-source-identity.js +21 -2
  387. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  388. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  389. package/dist/src/utils/catalog-source-impact.js +344 -0
  390. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  391. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  392. package/dist/src/utils/catalog-source-references.js +195 -347
  393. package/dist/src/utils/catalog-source-references.js.map +1 -1
  394. package/dist/src/utils/catalog-sources.d.ts +15 -1
  395. package/dist/src/utils/catalog-sources.js +206 -27
  396. package/dist/src/utils/catalog-sources.js.map +1 -1
  397. package/dist/src/utils/codex-config.d.ts +2 -0
  398. package/dist/src/utils/codex-config.js +26 -5
  399. package/dist/src/utils/codex-config.js.map +1 -1
  400. package/dist/src/utils/codex-manager.d.ts +79 -0
  401. package/dist/src/utils/codex-manager.js +747 -0
  402. package/dist/src/utils/codex-manager.js.map +1 -0
  403. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  404. package/dist/src/utils/codex-marketplace-path.js +45 -0
  405. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  406. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  407. package/dist/src/utils/codex-native-observation.js +154 -0
  408. package/dist/src/utils/codex-native-observation.js.map +1 -0
  409. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  410. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  411. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  412. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  413. package/dist/src/utils/codex-reconciler.js +298 -0
  414. package/dist/src/utils/codex-reconciler.js.map +1 -0
  415. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  416. package/dist/src/utils/codex-shared-native.js +81 -0
  417. package/dist/src/utils/codex-shared-native.js.map +1 -0
  418. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  419. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  420. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  421. package/dist/src/utils/codex-surface-analysis.js +247 -0
  422. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  423. package/dist/src/utils/dynamic-skill-tree.d.ts +4 -0
  424. package/dist/src/utils/dynamic-skill-tree.js +35 -5
  425. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  426. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  427. package/dist/src/utils/git-catalog-provider.js +177 -145
  428. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  429. package/dist/src/utils/local-marketplace.d.ts +18 -1
  430. package/dist/src/utils/local-marketplace.js +354 -84
  431. package/dist/src/utils/local-marketplace.js.map +1 -1
  432. package/dist/src/utils/manifest.d.ts +1 -3
  433. package/dist/src/utils/manifest.js +1 -3
  434. package/dist/src/utils/manifest.js.map +1 -1
  435. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  436. package/dist/src/utils/multi-source-catalog.js +54 -110
  437. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  438. package/dist/src/utils/native-cli.d.ts +55 -7
  439. package/dist/src/utils/native-cli.js +400 -58
  440. package/dist/src/utils/native-cli.js.map +1 -1
  441. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  442. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  443. package/dist/src/utils/ownership.d.ts +84 -20
  444. package/dist/src/utils/ownership.js +179 -222
  445. package/dist/src/utils/ownership.js.map +1 -1
  446. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  447. package/dist/src/utils/path-catalog-provider.js +54 -65
  448. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  449. package/dist/src/utils/paths.d.ts +0 -1
  450. package/dist/src/utils/paths.js +0 -1
  451. package/dist/src/utils/paths.js.map +1 -1
  452. package/dist/src/utils/plugin-config-impact.d.ts +33 -0
  453. package/dist/src/utils/plugin-config-impact.js +298 -0
  454. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  455. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  456. package/dist/src/utils/plugin-config-write.js +1000 -296
  457. package/dist/src/utils/plugin-config-write.js.map +1 -1
  458. package/dist/src/utils/plugin-config.d.ts +153 -93
  459. package/dist/src/utils/plugin-config.js +1116 -968
  460. package/dist/src/utils/plugin-config.js.map +1 -1
  461. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  462. package/dist/src/utils/plugin-intent-state.js +320 -0
  463. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  464. package/dist/src/utils/plugin-scripts.d.ts +65 -125
  465. package/dist/src/utils/plugin-scripts.js +484 -524
  466. package/dist/src/utils/plugin-scripts.js.map +1 -1
  467. package/dist/src/utils/process-tree.d.ts +2 -2
  468. package/dist/src/utils/process-tree.js +1 -1
  469. package/dist/src/utils/process-tree.js.map +1 -1
  470. package/dist/src/utils/project-boundary.d.ts +11 -13
  471. package/dist/src/utils/project-boundary.js +28 -34
  472. package/dist/src/utils/project-boundary.js.map +1 -1
  473. package/dist/src/utils/runtime-config.d.ts +20 -0
  474. package/dist/src/utils/runtime-config.js +75 -0
  475. package/dist/src/utils/runtime-config.js.map +1 -0
  476. package/dist/src/utils/safe-fs.d.ts +21 -0
  477. package/dist/src/utils/safe-fs.js +111 -0
  478. package/dist/src/utils/safe-fs.js.map +1 -0
  479. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  480. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  481. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  482. package/dist/src/utils/sensitive-content.d.ts +4 -0
  483. package/dist/src/utils/sensitive-content.js +36 -0
  484. package/dist/src/utils/sensitive-content.js.map +1 -0
  485. package/dist/src/utils/state-paths.js +7 -2
  486. package/dist/src/utils/state-paths.js.map +1 -1
  487. package/dist/src/utils/target-eligibility.d.ts +8 -2
  488. package/dist/src/utils/target-eligibility.js +17 -8
  489. package/dist/src/utils/target-eligibility.js.map +1 -1
  490. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  491. package/dist/src/utils/windows-claude-shim.js +10 -0
  492. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  493. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  494. package/dist/src/utils/windows-npm-shim.js +140 -0
  495. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  496. package/dist/vitest.config.js +92 -10
  497. package/dist/vitest.config.js.map +1 -1
  498. package/package.json +27 -18
  499. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  500. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  501. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  502. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  503. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  504. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  505. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  506. package/dist/scripts/codex-eval-app-server.js +0 -1228
  507. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  508. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  509. package/dist/scripts/codex-eval-isolation.js +0 -318
  510. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  511. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  512. package/dist/scripts/codex-eval-process-management.js +0 -69
  513. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  514. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  515. package/dist/scripts/codex-eval-process-tree.js +0 -803
  516. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  517. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  518. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  519. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  520. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  521. package/dist/scripts/codex-trigger-eval.js +0 -968
  522. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  523. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  524. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  525. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  526. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  527. package/dist/scripts/eval-plugin-skills.js +0 -1586
  528. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  529. package/dist/scripts/eval-run-layout.d.ts +0 -17
  530. package/dist/scripts/eval-run-layout.js +0 -26
  531. package/dist/scripts/eval-run-layout.js.map +0 -1
  532. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  533. package/dist/scripts/plugin-eval-contract.js +0 -695
  534. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  535. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  536. package/dist/scripts/plugin-eval-materializer.js +0 -421
  537. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  538. package/dist/scripts/skill-reporting.d.ts +0 -212
  539. package/dist/scripts/skill-reporting.js +0 -922
  540. package/dist/scripts/skill-reporting.js.map +0 -1
  541. package/dist/src/commands/status-v4.d.ts +0 -123
  542. package/dist/src/commands/status-v4.js +0 -905
  543. package/dist/src/commands/status-v4.js.map +0 -1
  544. package/dist/src/commands/status.d.ts +0 -93
  545. package/dist/src/commands/status.js +0 -442
  546. package/dist/src/commands/status.js.map +0 -1
  547. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  548. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  549. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  550. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  551. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  552. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  553. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  554. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  555. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  556. package/dist/src/utils/catalog-source-cache.js +0 -296
  557. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  558. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  559. package/dist/src/utils/codex-project-surface.js +0 -49
  560. package/dist/src/utils/codex-project-surface.js.map +0 -1
  561. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  562. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  563. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  564. package/dist/src/utils/plugin-release.d.ts +0 -2
  565. package/dist/src/utils/plugin-release.js +0 -2
  566. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -1,11 +1,6 @@
1
1
  import path from 'node:path';
2
- import { acquireLifecycleOperationLock, discardLifecycleActiveSnapshot, leaseLifecycleActiveSnapshot, prepareLifecycleActiveSnapshot, promoteLifecycleActiveSnapshot, readLifecycleActiveSnapshot, releaseLifecycleActiveSnapshot, removeLifecycleActiveSnapshot, restoreLifecycleActiveScriptInputs, } from '../utils/lifecycle-active-store.js';
2
+ import { readSafeOperationError } from '../utils/safe-operation-diagnostic.js';
3
3
  import { cleanupOwnedComponents, inspectOwnedComponents, validateOwnerIdentity, } from '../utils/ownership.js';
4
- async function withOwnershipLease(target, driver, operation) {
5
- return driver.withOwnershipLease
6
- ? driver.withOwnershipLease(target, operation)
7
- : operation();
8
- }
9
4
  function artifactIdentity(artifact) {
10
5
  return [
11
6
  artifact.platform,
@@ -27,75 +22,6 @@ function bindWrittenArtifacts(target, written) {
27
22
  }
28
23
  target.artifacts = [...written];
29
24
  }
30
- export function createRebuildActiveStore(options) {
31
- return {
32
- prepare: (target) => prepareLifecycleActiveSnapshot({
33
- ...(target.identity.sourceId ? {
34
- sourceId: target.identity.sourceId,
35
- sourceIdentity: target.identity.sourceIdentity,
36
- } : {}),
37
- plugin: target.lifecycleSource,
38
- platform: target.identity.platform,
39
- scope: target.identity.scope,
40
- cwd: target.identity.cwd,
41
- artifacts: target.artifacts,
42
- loadPlugin: options.loadPlugin,
43
- env: options.env,
44
- lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
45
- }),
46
- discard: discardLifecycleActiveSnapshot,
47
- promote: promoteLifecycleActiveSnapshot,
48
- read: (target) => readLifecycleActiveSnapshot({
49
- ...(target.identity.sourceId ? {
50
- sourceId: target.identity.sourceId,
51
- sourceIdentity: target.identity.sourceIdentity,
52
- } : {}),
53
- pluginName: target.identity.pluginName,
54
- platform: target.identity.platform,
55
- scope: target.identity.scope,
56
- cwd: target.identity.cwd,
57
- loadPlugin: options.loadPlugin,
58
- env: options.env,
59
- }),
60
- readStable: (target) => leaseLifecycleActiveSnapshot({
61
- ...(target.identity.sourceId ? {
62
- sourceId: target.identity.sourceId,
63
- sourceIdentity: target.identity.sourceIdentity,
64
- } : {}),
65
- pluginName: target.identity.pluginName,
66
- platform: target.identity.platform,
67
- scope: target.identity.scope,
68
- cwd: target.identity.cwd,
69
- loadPlugin: options.loadPlugin,
70
- env: options.env,
71
- lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
72
- }),
73
- remove: (target) => removeLifecycleActiveSnapshot({
74
- ...(target.identity.sourceId ? {
75
- sourceId: target.identity.sourceId,
76
- sourceIdentity: target.identity.sourceIdentity,
77
- } : {}),
78
- pluginName: target.identity.pluginName,
79
- platform: target.identity.platform,
80
- scope: target.identity.scope,
81
- cwd: target.identity.cwd,
82
- env: options.env,
83
- lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
84
- }),
85
- acquireOperation: (identity) => acquireLifecycleOperationLock({
86
- ...(identity.sourceId ? {
87
- sourceId: identity.sourceId,
88
- sourceIdentity: identity.sourceIdentity,
89
- } : {}),
90
- pluginName: identity.pluginName,
91
- platform: identity.platform,
92
- scope: identity.scope,
93
- cwd: identity.cwd,
94
- env: options.env,
95
- }),
96
- releaseRead: releaseLifecycleActiveSnapshot,
97
- };
98
- }
99
25
  function createAccumulator() {
100
26
  return {
101
27
  actions: [],
@@ -111,26 +37,14 @@ function errorMessage(error) {
111
37
  return error instanceof Error ? error.message : String(error);
112
38
  }
113
39
  const REBUILD_ACTION_FAILURE_MESSAGES = {
114
- 'operation.lock': '获取操作锁失败。',
115
40
  'preflight.inspect': '检查当前组件失败。',
116
41
  'stale.cleanup': '清理过期组件失败。',
117
42
  'native.write': '写入平台插件失败。',
118
43
  'artifacts.write': '写入插件文件失败。',
119
- 'active.prepare': '准备生命周期快照失败。',
120
- 'active.discard': '丢弃生命周期快照失败。',
121
- 'lifecycle.install': '运行安装生命周期失败。',
122
- 'lifecycle.upgrade': '运行升级生命周期失败。',
123
- 'lifecycle.uninstall': '运行卸载生命周期失败。',
124
- 'active.promote': '启用生命周期快照失败。',
44
+ preApply: '运行 preApply 失败。',
125
45
  'postcheck.inspect': '检查写入结果失败。',
126
- 'marketplace.commit': '提交 marketplace generation 失败。',
127
- 'marketplace.rollback': '回滚 marketplace generation 失败。',
128
46
  'recovery.cleanup': '清理失败写入失败。',
129
47
  'cleanup.owned': '清理 AW 组件失败。',
130
- 'active.read': '读取生命周期快照失败。',
131
- 'active.remove': '删除生命周期快照失败。',
132
- 'active.release': '释放生命周期快照失败。',
133
- 'operation.release': '释放操作锁失败。',
134
48
  };
135
49
  function rebuildActionFailureMessage(name) {
136
50
  return REBUILD_ACTION_FAILURE_MESSAGES[name];
@@ -143,22 +57,6 @@ async function emitRebuildAction(events, event) {
143
57
  // Progress diagnostics must not change the rebuild result.
144
58
  }
145
59
  }
146
- export async function releaseRebuildOperationLease(lock) {
147
- let lastError;
148
- for (let attempt = 0; attempt < 3; attempt += 1) {
149
- try {
150
- await lock.release();
151
- return;
152
- }
153
- catch (error) {
154
- lastError = error;
155
- if (!new Set(['EACCES', 'EBUSY', 'EINTR', 'EIO', 'ENOTEMPTY', 'EPERM']).has(error.code ?? '')) {
156
- throw error;
157
- }
158
- }
159
- }
160
- throw lastError;
161
- }
162
60
  function pushUnique(target, values) {
163
61
  for (const value of values) {
164
62
  if (!target.includes(value))
@@ -179,16 +77,16 @@ function mergeCleanup(accumulator, cleanup, phase) {
179
77
  function succeeded(command, target, accumulator) {
180
78
  return { status: 'succeeded', command, target: target.identity, ...accumulator };
181
79
  }
182
- function failed(command, target, accumulator, phase, message) {
80
+ function failed(command, target, accumulator, phase, message, operationDiagnostic) {
183
81
  if (!accumulator.failures.some((failure) => failure.phase === phase && failure.message === message)) {
184
- accumulator.failures.unshift({ phase, message });
82
+ accumulator.failures.unshift({ phase, message, ...(operationDiagnostic ? { operationDiagnostic } : {}) });
185
83
  }
186
84
  return {
187
85
  status: 'failed',
188
86
  command,
189
87
  target: target.identity,
190
88
  ...accumulator,
191
- error: { phase, message },
89
+ error: { phase, message, ...(operationDiagnostic ? { operationDiagnostic } : {}) },
192
90
  };
193
91
  }
194
92
  async function action(accumulator, name, operation, events, failureMessage) {
@@ -259,10 +157,10 @@ function validateDesiredTarget(target) {
259
157
  throw new Error('Desired target has an invalid namespaced source identity.');
260
158
  }
261
159
  if (target.plugin.manifest.name !== pluginName
262
- || target.lifecycleSource.manifest.name !== pluginName
160
+ || target.preApplySource.manifest.name !== pluginName
263
161
  || target.plugin.manifest.version !== pluginVersion
264
- || target.lifecycleSource.manifest.version !== pluginVersion) {
265
- throw new Error('Desired target plugin name/version does not match its lifecycle source and identity.');
162
+ || target.preApplySource.manifest.version !== pluginVersion) {
163
+ throw new Error('Desired target plugin name/version does not match its preApply source and identity.');
266
164
  }
267
165
  if (platform !== 'codex' && platform !== 'claude') {
268
166
  throw new Error(`Desired target platform is invalid: ${String(platform)}`);
@@ -272,15 +170,26 @@ function validateDesiredTarget(target) {
272
170
  }
273
171
  const identityKeys = new Set();
274
172
  const componentPaths = new Set();
173
+ const desiredComponents = target.desiredOwnedComponents ?? target.ownedComponents;
174
+ const desiredComponentSet = new Set(desiredComponents);
175
+ const sharedNativeSkillKeys = new Set((target.plugin.manifest.artifacts?.targets ?? [])
176
+ .filter((artifactTarget) => artifactTarget.platform === 'codex'
177
+ && artifactTarget.target === 'codex.skill'
178
+ && artifactTarget.delivery?.mode === 'codex-native')
179
+ .map((artifactTarget) => artifactTarget.skillKey));
275
180
  let nativeCount = 0;
276
181
  for (const component of target.ownedComponents) {
277
182
  validateOwnerIdentity(component.identity);
183
+ const crossScopeLegacyNativeSkill = platform === 'codex'
184
+ && component.kind === 'skill-directory'
185
+ && !desiredComponentSet.has(component)
186
+ && sharedNativeSkillKeys.has(component.identity.artifactKey)
187
+ && component.identity.scope !== scope;
278
188
  if (component.identity.plugin !== pluginName
279
189
  || component.identity.sourceId !== sourceId
280
- || component.identity.sourceIdentity !== sourceIdentity
281
190
  || component.identity.pluginId !== pluginId
282
191
  || component.identity.platform !== platform
283
- || component.identity.scope !== scope) {
192
+ || (component.identity.scope !== scope && !crossScopeLegacyNativeSkill)) {
284
193
  throw new Error('Owned component identity does not match the desired target.');
285
194
  }
286
195
  const identityKey = [
@@ -289,6 +198,7 @@ function validateDesiredTarget(target) {
289
198
  component.identity.artifactKey,
290
199
  component.identity.platform,
291
200
  component.identity.scope,
201
+ component.kind,
292
202
  ].join('\0');
293
203
  if (identityKeys.has(identityKey)) {
294
204
  throw new Error(`Desired target has a duplicate owned component identity: ${component.identity.artifactKey}`);
@@ -308,7 +218,9 @@ function validateDesiredTarget(target) {
308
218
  }
309
219
  }
310
220
  }
311
- const desiredComponents = target.desiredOwnedComponents ?? target.ownedComponents;
221
+ if (target.forceExclusiveCleanup && target.ownedComponents.some((component) => component.kind !== 'skill-directory' && component.kind !== 'owned-text-file')) {
222
+ throw new Error('Force cleanup only supports exclusive skill directories and owned text files.');
223
+ }
312
224
  nativeCount = desiredComponents.filter((component) => component.kind === 'native-plugin').length;
313
225
  if (target.requiresNative ? nativeCount !== 1 : nativeCount !== 0) {
314
226
  throw new Error(target.requiresNative
@@ -334,7 +246,7 @@ function collisionMessage(inspection) {
334
246
  if (inspection.errors.length > 0) {
335
247
  return inspection.errors.map((error) => `${error.label}: ${error.message}`).join('; ');
336
248
  }
337
- const collision = inspection.components.find((component) => (component.state === 'partial' || component.state === 'error'));
249
+ const collision = inspection.components.find((component) => (component.state === 'partial' || component.state === 'foreign' || component.state === 'error'));
338
250
  if (collision) {
339
251
  return collision.diagnostic ?? 'Owned component preflight failed.';
340
252
  }
@@ -353,7 +265,7 @@ function isUninstallLiveOwnershipComponent(component) {
353
265
  }
354
266
  function recordInspectionResiduals(accumulator, inspection) {
355
267
  pushUnique(accumulator.residual, inspection.components
356
- .filter((component) => component.state === 'partial' || component.state === 'error')
268
+ .filter((component) => (component.state === 'partial' || component.state === 'foreign' || component.state === 'error'))
357
269
  .map((component) => ownedComponentLabel(component.component)));
358
270
  }
359
271
  function postcheckMessage(accumulator, inspection) {
@@ -371,6 +283,11 @@ function postcheckMessage(accumulator, inspection) {
371
283
  })));
372
284
  return inspection.errors.map((error) => `${error.label}: ${error.message}`).join('; ');
373
285
  }
286
+ if (invalid.some((component) => component.state === 'partial'
287
+ && component.component.kind === 'native-plugin'
288
+ && component.component.identity.platform === 'codex')) {
289
+ return 'codexActivationPostcheckFailed: Codex scope activation was not observed as enabled.';
290
+ }
374
291
  const diagnostics = invalid
375
292
  .map((component) => component.diagnostic)
376
293
  .filter((diagnostic) => diagnostic !== undefined);
@@ -378,17 +295,20 @@ function postcheckMessage(accumulator, inspection) {
378
295
  return diagnostics.join('; ');
379
296
  return `Post-install ownership inspection failed for ${invalid.length} component(s).`;
380
297
  }
381
- async function cleanupOwned(target, driver, components = target.ownedComponents) {
382
- return withOwnershipLease(target, driver, () => cleanupOwnedComponents({
298
+ async function cleanupOwned(target, driver, components = target.ownedComponents, hooks = {}) {
299
+ return cleanupOwnedComponents({
383
300
  components,
301
+ executor: driver.ownership,
384
302
  nativeProbe: driver.probeNative,
385
303
  nativeRemove: driver.removeNative,
386
- }));
304
+ forceExclusive: target.forceExclusiveCleanup,
305
+ ...hooks,
306
+ });
387
307
  }
388
- async function cleanupTarget(target, driver, store, accumulator, ownedAction, events) {
308
+ async function cleanupTarget(target, driver, accumulator, ownedAction, events, components = target.ownedComponents, hooks = {}) {
389
309
  accumulator.cleanupAttempted = true;
390
310
  try {
391
- const cleanup = await action(accumulator, ownedAction, () => cleanupOwned(target, driver), events, (value) => value.failures[0]?.message
311
+ const cleanup = await action(accumulator, ownedAction, () => cleanupOwned(target, driver, components, hooks), events, (value) => value.failures[0]?.message
392
312
  ?? (value.residual.length > 0
393
313
  ? `Ownership cleanup left residual components: ${value.residual.join(', ')}`
394
314
  : value.quarantined.length > 0
@@ -412,41 +332,64 @@ async function cleanupTarget(target, driver, store, accumulator, ownedAction, ev
412
332
  accumulator.failures.push({ phase: ownedAction, message });
413
333
  return { phase: ownedAction, message };
414
334
  }
415
- try {
416
- await action(accumulator, 'active.remove', () => store.remove(target), events);
417
- }
418
- catch (error) {
419
- const message = errorMessage(error);
420
- accumulator.failures.push({ phase: 'active.remove', message });
421
- return { phase: 'active.remove', message };
422
- }
423
335
  return null;
424
336
  }
337
+ export async function executeRebuildComponentCleanup(options) {
338
+ const accumulator = createAccumulator();
339
+ accumulator.actions.push(...(options.actions ?? []));
340
+ const cleanupError = await cleanupTarget(options.target, options.driver, accumulator, 'cleanup.owned', {
341
+ command: options.command,
342
+ target: options.target.identity,
343
+ emit: options.onActionEvent,
344
+ now: options.now ?? Date.now,
345
+ }, options.components, {
346
+ ...(options.beforeMutation ? { beforeMutation: options.beforeMutation } : {}),
347
+ ...(options.afterQuarantine ? { afterQuarantine: options.afterQuarantine } : {}),
348
+ });
349
+ return cleanupError
350
+ ? failed(options.command, options.target, accumulator, cleanupError.phase, cleanupError.message)
351
+ : succeeded(options.command, options.target, accumulator);
352
+ }
425
353
  async function materializeTarget(options) {
426
- const { command, lifecycleEvent, target, driver, store, accumulator, events } = options;
427
- let inspection;
428
- try {
429
- inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(target, driver, async () => {
430
- await driver.preflightMaterialize?.(target);
431
- return inspectOwnedComponents({
432
- components: target.ownedComponents,
433
- nativeProbe: driver.probeNative,
434
- });
435
- }), events, collisionMessage);
436
- }
437
- catch (error) {
438
- return failed(command, target, accumulator, 'preflight.inspect', errorMessage(error));
354
+ const { command, target, driver, accumulator, events } = options;
355
+ let inspection = options.inspection;
356
+ if (!inspection) {
357
+ try {
358
+ inspection = await action(accumulator, 'preflight.inspect', async () => {
359
+ await driver.preflightMaterialize?.(target);
360
+ return inspectOwnedComponents({
361
+ components: target.ownedComponents,
362
+ executor: driver.ownership,
363
+ nativeProbe: driver.probeNative,
364
+ });
365
+ }, events, collisionMessage);
366
+ }
367
+ catch (error) {
368
+ return failed(command, target, accumulator, 'preflight.inspect', errorMessage(error), readSafeOperationError(error));
369
+ }
439
370
  }
440
371
  const collision = collisionMessage(inspection);
441
372
  if (collision) {
442
373
  recordInspectionResiduals(accumulator, inspection);
443
374
  return failed(command, target, accumulator, 'preflight.inspect', collision);
444
375
  }
376
+ if (!options.preApplyCompleted && target.preApplySource.manifest.scripts?.preApply) {
377
+ try {
378
+ await action(accumulator, 'preApply', () => driver.runPreApply({
379
+ target,
380
+ plugin: target.preApplySource,
381
+ }), events);
382
+ }
383
+ catch (error) {
384
+ return failed(command, target, accumulator, 'preApply', errorMessage(error), readSafeOperationError(error));
385
+ }
386
+ }
445
387
  const desiredComponents = new Set(target.desiredOwnedComponents ?? target.ownedComponents);
446
388
  const optionalComponents = new Set(target.optionalOwnedComponents ?? []);
447
389
  const staleComponents = target.ownedComponents.filter((component) => !desiredComponents.has(component) && !optionalComponents.has(component));
448
390
  const staleInspection = inspection.components.filter((entry) => staleComponents.includes(entry.component));
449
- if (staleInspection.some((component) => component.state === 'present')) {
391
+ if (!options.skipStaleCleanup
392
+ && staleInspection.some((component) => component.state === 'present')) {
450
393
  accumulator.cleanupAttempted = true;
451
394
  let stale;
452
395
  try {
@@ -456,7 +399,7 @@ async function materializeTarget(options) {
456
399
  : undefined));
457
400
  }
458
401
  catch (error) {
459
- return failed(command, target, accumulator, 'stale.cleanup', errorMessage(error));
402
+ return failed(command, target, accumulator, 'stale.cleanup', errorMessage(error), readSafeOperationError(error));
460
403
  }
461
404
  mergeCleanup(accumulator, stale, 'stale.cleanup');
462
405
  if (stale.failures.length > 0 || stale.residual.length > 0) {
@@ -466,9 +409,8 @@ async function materializeTarget(options) {
466
409
  }
467
410
  }
468
411
  let failurePhase = 'native.write';
469
- let prepared;
470
412
  try {
471
- if (target.requiresNative) {
413
+ if (target.writeNativeRequired ?? target.requiresNative) {
472
414
  failurePhase = 'native.write';
473
415
  await action(accumulator, failurePhase, () => driver.writeNative(target), events);
474
416
  }
@@ -477,69 +419,43 @@ async function materializeTarget(options) {
477
419
  const writtenArtifacts = await driver.writeArtifacts(target);
478
420
  bindWrittenArtifacts(target, writtenArtifacts);
479
421
  }, events);
480
- failurePhase = 'active.prepare';
481
- prepared = await action(accumulator, failurePhase, () => store.prepare(target), events);
482
- failurePhase = `lifecycle.${lifecycleEvent}`;
483
- await action(accumulator, failurePhase, () => driver.runLifecycle({
484
- event: lifecycleEvent,
485
- target,
486
- plugin: target.lifecycleSource,
487
- artifacts: target.artifacts,
488
- }), events);
489
- failurePhase = 'active.promote';
490
- await action(accumulator, failurePhase, () => store.promote(prepared), events);
491
- failurePhase = 'postcheck.inspect';
492
- await action(accumulator, failurePhase, async () => {
422
+ const postcheck = () => action(accumulator, 'postcheck.inspect', async () => {
493
423
  const optional = new Set(target.optionalOwnedComponents ?? []);
494
- const postcheck = await withOwnershipLease(target, driver, () => inspectOwnedComponents({
424
+ const postcheck = await inspectOwnedComponents({
495
425
  components: (target.desiredOwnedComponents ?? target.ownedComponents)
496
426
  .filter((component) => !optional.has(component)),
497
427
  nativeProbe: driver.probeNativeHealth ?? driver.probeNative,
428
+ executor: driver.ownership,
498
429
  verifyHealth: true,
499
- }));
430
+ });
500
431
  const postcheckFailure = postcheckMessage(accumulator, postcheck);
501
432
  if (postcheckFailure)
502
433
  throw new Error(postcheckFailure);
503
434
  }, events);
504
- if (driver.commitMaterialize) {
505
- failurePhase = 'marketplace.commit';
506
- await action(accumulator, failurePhase, () => driver.commitMaterialize(target), events);
435
+ failurePhase = 'postcheck.inspect';
436
+ if (driver.deferPostcheck?.(target, postcheck) !== true) {
437
+ await postcheck();
507
438
  }
508
439
  return succeeded(command, target, accumulator);
509
440
  }
510
441
  catch (error) {
511
442
  const primary = errorMessage(error);
512
- if (error.durableMaterializeCommit === true) {
513
- return failed(command, target, accumulator, failurePhase, primary);
443
+ if (error.nativeMarketplaceGroupFailure === true) {
444
+ return failed(command, target, accumulator, failurePhase, primary, readSafeOperationError(error));
514
445
  }
515
- if (prepared) {
516
- try {
517
- await action(accumulator, 'active.discard', () => store.discard(prepared), events);
518
- }
519
- catch (discardError) {
520
- accumulator.failures.push({
521
- phase: 'active.discard',
522
- message: errorMessage(discardError),
523
- });
524
- }
446
+ if (target.identity.platform === 'codex') {
447
+ const recoveryComponents = target.ownedComponents.filter((component) => component.kind === 'skill-directory' || component.kind === 'owned-text-file');
448
+ await cleanupTarget(target, driver, accumulator, 'recovery.cleanup', events, driver.selectRecoveryCleanupComponents?.(target, recoveryComponents)
449
+ ?? recoveryComponents);
525
450
  }
526
- await cleanupTarget(target, driver, store, accumulator, 'recovery.cleanup', events);
527
- if (driver.rollbackMaterialize) {
528
- try {
529
- await action(accumulator, 'marketplace.rollback', () => driver.rollbackMaterialize(target), events);
530
- }
531
- catch (rollbackError) {
532
- accumulator.failures.push({
533
- phase: 'marketplace.rollback',
534
- message: errorMessage(rollbackError),
535
- });
536
- }
451
+ else {
452
+ await cleanupTarget(target, driver, accumulator, 'recovery.cleanup', events);
537
453
  }
538
- return failed(command, target, accumulator, failurePhase, primary);
454
+ return failed(command, target, accumulator, failurePhase, primary, readSafeOperationError(error));
539
455
  }
540
456
  }
541
457
  async function executeCleanup(options) {
542
- const cleanupError = await cleanupTarget(options.target, options.driver, options.store, options.accumulator, 'cleanup.owned', options.events);
458
+ const cleanupError = await cleanupTarget(options.target, options.driver, options.accumulator, 'cleanup.owned', options.events);
543
459
  if (cleanupError) {
544
460
  return failed(options.command, options.target, options.accumulator, cleanupError.phase, cleanupError.message);
545
461
  }
@@ -554,13 +470,14 @@ async function executeCleanup(options) {
554
470
  return succeeded(options.command, options.target, options.accumulator);
555
471
  }
556
472
  async function executeUninstall(options) {
557
- const { target, driver, store, accumulator, events } = options;
473
+ const { target, driver, accumulator, events } = options;
558
474
  let inspection;
559
475
  try {
560
- inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(target, driver, () => inspectOwnedComponents({
476
+ inspection = await action(accumulator, 'preflight.inspect', () => inspectOwnedComponents({
561
477
  components: target.ownedComponents,
478
+ executor: driver.ownership,
562
479
  nativeProbe: driver.probeNative,
563
- })), events, collisionMessage);
480
+ }), events, collisionMessage);
564
481
  }
565
482
  catch (error) {
566
483
  return failed('uninstall', target, accumulator, 'preflight.inspect', errorMessage(error));
@@ -570,80 +487,11 @@ async function executeUninstall(options) {
570
487
  recordInspectionResiduals(accumulator, inspection);
571
488
  return failed('uninstall', target, accumulator, 'preflight.inspect', preflightCollision);
572
489
  }
573
- let snapshot;
574
- const stableRead = store.readStable !== undefined;
575
- try {
576
- snapshot = await action(accumulator, 'active.read', () => (store.readStable ?? store.read)(target), events);
577
- }
578
- catch (error) {
579
- const message = `Active lifecycle snapshot is corrupt. Run cleanup to remove live outputs without lifecycle: ${errorMessage(error)}`;
580
- return failed('uninstall', target, accumulator, 'active.read', message);
581
- }
582
- if (!snapshot) {
583
- const live = inspection.components.filter((component) => component.state !== 'absent'
584
- && isUninstallLiveOwnershipComponent(component.component));
585
- if (live.length === 0)
586
- return succeeded('uninstall', target, accumulator);
587
- if (!target.plugin.manifest.scripts?.lifecycle?.uninstall) {
588
- const cleanupError = await cleanupTarget(target, driver, store, accumulator, 'cleanup.owned', events);
589
- if (cleanupError) {
590
- return failed('uninstall', target, accumulator, cleanupError.phase, cleanupError.message);
591
- }
592
- if (driver.finalizeCleanup) {
593
- try {
594
- await driver.finalizeCleanup(target);
595
- }
596
- catch (error) {
597
- return failed('uninstall', target, accumulator, 'cleanup.owned', errorMessage(error));
598
- }
599
- }
600
- return succeeded('uninstall', target, accumulator);
601
- }
602
- pushUnique(accumulator.residual, live.map((component) => ownedComponentLabel(component.component)));
603
- return failed('uninstall', target, accumulator, 'active.read', 'Active lifecycle snapshot is missing while live owned components exist. Run cleanup to remove them without lifecycle.');
604
- }
605
- const live = inspection.components.filter((component) => component.state === 'present'
490
+ const live = inspection.components.filter((component) => component.state !== 'absent'
606
491
  && isUninstallLiveOwnershipComponent(component.component));
607
- if (live.length === 0) {
608
- if (stableRead && store.releaseRead) {
609
- try {
610
- await action(accumulator, 'active.release', () => store.releaseRead(snapshot), events);
611
- }
612
- catch (error) {
613
- return failed('uninstall', target, accumulator, 'active.release', errorMessage(error));
614
- }
615
- }
616
- return failed('uninstall', target, accumulator, 'preflight.inspect', 'liveOwnershipRequired: uninstall requires at least one live owned or native component. Run cleanup to remove orphan lifecycle metadata.');
617
- }
618
- const historical = restoreLifecycleActiveScriptInputs(snapshot);
619
- let lifecycleError;
620
- try {
621
- await action(accumulator, 'lifecycle.uninstall', () => driver.runLifecycle({
622
- event: 'uninstall',
623
- target,
624
- plugin: historical.currentPlugin,
625
- artifacts: historical.artifacts,
626
- }), events);
627
- }
628
- catch (error) {
629
- lifecycleError = error;
630
- }
631
- if (stableRead && store.releaseRead) {
632
- try {
633
- await action(accumulator, 'active.release', () => store.releaseRead(snapshot), events);
634
- }
635
- catch (error) {
636
- const message = errorMessage(error);
637
- accumulator.failures.push({ phase: 'active.release', message });
638
- if (lifecycleError === undefined) {
639
- return failed('uninstall', target, accumulator, 'active.release', message);
640
- }
641
- }
642
- }
643
- if (lifecycleError !== undefined) {
644
- return failed('uninstall', target, accumulator, 'lifecycle.uninstall', errorMessage(lifecycleError));
645
- }
646
- const cleanupError = await cleanupTarget(target, driver, store, accumulator, 'cleanup.owned', events);
492
+ if (live.length === 0)
493
+ return succeeded('uninstall', target, accumulator);
494
+ const cleanupError = await cleanupTarget(target, driver, accumulator, 'cleanup.owned', events);
647
495
  if (cleanupError) {
648
496
  return failed('uninstall', target, accumulator, cleanupError.phase, cleanupError.message);
649
497
  }
@@ -659,62 +507,62 @@ async function executeUninstall(options) {
659
507
  }
660
508
  export async function executeRebuildOperation(options) {
661
509
  const accumulator = createAccumulator();
662
- const store = options.activeStore;
663
510
  const events = {
664
511
  command: options.command,
665
512
  target: options.target.identity,
666
513
  emit: options.onActionEvent,
667
514
  now: options.now ?? Date.now,
668
515
  };
516
+ if (options.preparation) {
517
+ if (options.preparation.command !== options.command
518
+ || options.preparation.target !== options.target) {
519
+ return failed(options.command, options.target, accumulator, 'preflight', 'Prepared rebuild operation does not match the requested target.');
520
+ }
521
+ accumulator.actions.push(...options.preparation.actions);
522
+ try {
523
+ await options.driver.preflightMutation?.(options.target);
524
+ }
525
+ catch (error) {
526
+ return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
527
+ }
528
+ try {
529
+ return await executeRebuildOperationCore(options, accumulator, events, options.preparation);
530
+ }
531
+ catch (error) {
532
+ return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
533
+ }
534
+ }
669
535
  try {
670
536
  validateDesiredTarget(options.target);
671
537
  }
672
538
  catch (error) {
673
539
  return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
674
540
  }
675
- let operationLock;
676
- if (store.acquireOperation) {
677
- try {
678
- operationLock = await action(accumulator, 'operation.lock', () => store.acquireOperation(options.target.identity), events);
679
- }
680
- catch (error) {
681
- return failed(options.command, options.target, accumulator, 'operation.lock', errorMessage(error));
682
- }
683
- }
684
- let result;
685
541
  try {
686
- const execute = () => executeRebuildOperationLocked(options, accumulator, store, events);
687
- result = options.target.identity.sourceId !== undefined
688
- ? await (options.driver.withMaterializeLease?.(options.target, execute) ?? execute())
689
- : await execute();
542
+ await options.driver.preflightMutation?.(options.target);
690
543
  }
691
544
  catch (error) {
692
- result = failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
545
+ return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
693
546
  }
694
- if (operationLock) {
695
- try {
696
- await action(accumulator, 'operation.release', () => releaseRebuildOperationLease(operationLock), events);
697
- }
698
- catch (error) {
699
- const message = errorMessage(error);
700
- accumulator.failures.push({ phase: 'operation.release', message });
701
- if (result.status === 'succeeded') {
702
- return failed(options.command, options.target, accumulator, 'operation.release', message);
703
- }
704
- }
547
+ try {
548
+ return await executeRebuildOperationCore(options, accumulator, events);
549
+ }
550
+ catch (error) {
551
+ return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
705
552
  }
706
- return result;
707
553
  }
708
- async function executeRebuildOperationLocked(options, accumulator, store, events) {
709
- if (options.command === 'install' || options.command === 'upgrade') {
554
+ async function executeRebuildOperationCore(options, accumulator, events, preparation) {
555
+ if (options.command === 'install') {
710
556
  return materializeTarget({
711
557
  command: options.command,
712
- lifecycleEvent: options.command,
713
558
  target: options.target,
714
559
  driver: options.driver,
715
- store,
716
560
  accumulator,
717
561
  events,
562
+ ...(preparation ? {
563
+ inspection: preparation.inspection,
564
+ preApplyCompleted: true,
565
+ } : {}),
718
566
  });
719
567
  }
720
568
  if (options.command === 'cleanup') {
@@ -722,7 +570,6 @@ async function executeRebuildOperationLocked(options, accumulator, store, events
722
570
  command: 'cleanup',
723
571
  target: options.target,
724
572
  driver: options.driver,
725
- store,
726
573
  accumulator,
727
574
  events,
728
575
  });
@@ -731,34 +578,46 @@ async function executeRebuildOperationLocked(options, accumulator, store, events
731
578
  return executeUninstall({
732
579
  target: options.target,
733
580
  driver: options.driver,
734
- store,
735
581
  accumulator,
736
582
  events,
737
583
  });
738
584
  }
739
- let inspection;
740
- try {
741
- inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(options.target, options.driver, async () => {
742
- await options.driver.preflightMaterialize?.(options.target);
743
- return inspectOwnedComponents({
744
- components: options.target.ownedComponents,
745
- nativeProbe: options.driver.probeNative,
746
- });
747
- }), events, collisionMessage);
748
- }
749
- catch (error) {
750
- return failed('reinstall', options.target, accumulator, 'preflight.inspect', errorMessage(error));
751
- }
752
- const collision = collisionMessage(inspection);
753
- if (collision) {
754
- recordInspectionResiduals(accumulator, inspection);
755
- return failed('reinstall', options.target, accumulator, 'preflight.inspect', collision);
585
+ let inspection = preparation?.inspection;
586
+ if (!inspection) {
587
+ try {
588
+ inspection = await action(accumulator, 'preflight.inspect', async () => {
589
+ await options.driver.preflightMaterialize?.(options.target);
590
+ return inspectOwnedComponents({
591
+ components: options.target.ownedComponents,
592
+ executor: options.driver.ownership,
593
+ nativeProbe: options.driver.probeNative,
594
+ });
595
+ }, events, collisionMessage);
596
+ }
597
+ catch (error) {
598
+ return failed('reinstall', options.target, accumulator, 'preflight.inspect', errorMessage(error));
599
+ }
600
+ const collision = collisionMessage(inspection);
601
+ if (collision) {
602
+ recordInspectionResiduals(accumulator, inspection);
603
+ return failed('reinstall', options.target, accumulator, 'preflight.inspect', collision);
604
+ }
605
+ if (options.target.preApplySource.manifest.scripts?.preApply) {
606
+ try {
607
+ await action(accumulator, 'preApply', () => options.driver.runPreApply({
608
+ target: options.target,
609
+ plugin: options.target.preApplySource,
610
+ }), events);
611
+ }
612
+ catch (error) {
613
+ return failed('reinstall', options.target, accumulator, 'preApply', errorMessage(error), readSafeOperationError(error));
614
+ }
615
+ }
756
616
  }
757
617
  const cleanupResult = await executeCleanup({
758
618
  command: 'reinstall',
759
619
  target: options.target,
760
620
  driver: options.driver,
761
- store,
762
621
  accumulator,
763
622
  events,
764
623
  });
@@ -766,14 +625,83 @@ async function executeRebuildOperationLocked(options, accumulator, store, events
766
625
  return cleanupResult;
767
626
  return materializeTarget({
768
627
  command: 'reinstall',
769
- lifecycleEvent: 'install',
770
628
  target: options.target,
771
629
  driver: options.driver,
772
- store,
773
630
  accumulator,
774
631
  events,
632
+ inspection,
633
+ preApplyCompleted: true,
634
+ skipStaleCleanup: true,
775
635
  });
776
636
  }
637
+ export async function prepareRebuildOperation(options) {
638
+ const accumulator = createAccumulator();
639
+ const events = {
640
+ command: options.command,
641
+ target: options.target.identity,
642
+ emit: options.onActionEvent,
643
+ now: options.now ?? Date.now,
644
+ };
645
+ try {
646
+ validateDesiredTarget(options.target);
647
+ }
648
+ catch (error) {
649
+ return {
650
+ status: 'failed',
651
+ result: failed(options.command, options.target, accumulator, 'preflight', errorMessage(error)),
652
+ };
653
+ }
654
+ let inspection;
655
+ try {
656
+ inspection = await action(accumulator, 'preflight.inspect', async () => {
657
+ await options.driver.preflightMaterialize?.(options.target);
658
+ return inspectOwnedComponents({
659
+ components: options.deferNativeInspection
660
+ ? options.target.ownedComponents.filter((component) => component.kind !== 'native-plugin')
661
+ : options.target.ownedComponents,
662
+ executor: options.driver.ownership,
663
+ nativeProbe: options.driver.probeNative,
664
+ });
665
+ }, events, collisionMessage);
666
+ }
667
+ catch (error) {
668
+ return {
669
+ status: 'failed',
670
+ result: failed(options.command, options.target, accumulator, 'preflight.inspect', errorMessage(error)),
671
+ };
672
+ }
673
+ const collision = collisionMessage(inspection);
674
+ if (collision) {
675
+ recordInspectionResiduals(accumulator, inspection);
676
+ return {
677
+ status: 'failed',
678
+ result: failed(options.command, options.target, accumulator, 'preflight.inspect', collision),
679
+ };
680
+ }
681
+ if (!options.skipPreApply && options.target.preApplySource.manifest.scripts?.preApply) {
682
+ try {
683
+ await action(accumulator, 'preApply', () => options.driver.runPreApply({
684
+ target: options.target,
685
+ plugin: options.target.preApplySource,
686
+ }), events);
687
+ }
688
+ catch (error) {
689
+ return {
690
+ status: 'failed',
691
+ result: failed(options.command, options.target, accumulator, 'preApply', errorMessage(error), readSafeOperationError(error)),
692
+ };
693
+ }
694
+ }
695
+ return {
696
+ status: 'ready',
697
+ preparation: {
698
+ command: options.command,
699
+ target: options.target,
700
+ inspection,
701
+ actions: accumulator.actions,
702
+ },
703
+ };
704
+ }
777
705
  export async function executeRebuildTargets(options) {
778
706
  const results = [];
779
707
  for (const target of options.targets) {
@@ -781,11 +709,24 @@ export async function executeRebuildTargets(options) {
781
709
  command: options.command,
782
710
  target,
783
711
  driver: options.driver,
784
- activeStore: options.activeStore,
785
712
  ...(options.onActionEvent ? { onActionEvent: options.onActionEvent } : {}),
786
713
  ...(options.now ? { now: options.now } : {}),
787
714
  }));
788
715
  }
716
+ const postcheckFailures = await options.driver.completePostchecks?.() ?? [];
717
+ for (const failure of postcheckFailures) {
718
+ const index = results.findIndex((result) => result.target === failure.target.identity);
719
+ if (index === -1 || results[index].status === 'failed')
720
+ continue;
721
+ const result = results[index];
722
+ const message = errorMessage(failure.error);
723
+ result.failures.unshift({ phase: 'postcheck.inspect', message });
724
+ results[index] = {
725
+ ...result,
726
+ status: 'failed',
727
+ error: { phase: 'postcheck.inspect', message },
728
+ };
729
+ }
789
730
  return results;
790
731
  }
791
732
  //# sourceMappingURL=rebuild-operations.js.map