@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
@@ -4,13 +4,10 @@ import { readClaudeSettings } from '../adapters/helpers.js';
4
4
  import { readCodexConfigFile } from './codex-config.js';
5
5
  import { readJsonFileIfExists } from './json.js';
6
6
  import { getClaudeHome, getCodexHome, canonicalizePathThroughExistingAncestorSync, resolveAwHome, resolveAwHomeCanonical, resolveRepoRootSync, } from './state-paths.js';
7
- import { OWNED_TEXT_HEADER_PREFIX, parseSharedOwnerToken, parseOwnedTextHeader, readSkillOwnerMarker, SKILL_OWNER_MARKER, } from './ownership.js';
8
- import { createLifecycleProjectLocationKey, inspectLifecycleActiveSnapshotForInventory, } from './lifecycle-active-store.js';
9
- import { CodexNativeResidueProbeError, discoverCodexNativeResidueNames, } from '../commands/rebuild-integration.js';
10
- import { parseCodexSharedHooksFile } from './hooks-contract.js';
7
+ import { OWNED_TEXT_HEADER_PREFIX, SHARED_OWNER_TOKEN_PREFIX, parseSharedOwnerToken, parseOwnedTextHeader, readSkillOwnerMarker, SKILL_OWNER_MARKER, } from './ownership.js';
11
8
  import { sanitizeCatalogSourceErrorMessage } from './catalog-public-error.js';
12
- import { readPluginManifest } from './manifest.js';
13
9
  import { readStrictNamespacedMarketplaceRoot } from './local-marketplace.js';
10
+ import { readPluginIntentState, resolvePluginIntentStatePath, } from './plugin-intent-state.js';
14
11
  export function canonicalMarketplaceRegistrationNames(references, sourceId) {
15
12
  return [...new Set(references.flatMap((reference) => reference.kind === 'namespacedMarketplace'
16
13
  && reference.sourceId === sourceId
@@ -47,7 +44,7 @@ function claudeConsumersFromSettings(value, marketplaceName, scope) {
47
44
  }
48
45
  return output;
49
46
  }
50
- function claudeConsumersFromInstalled(value, marketplaceName, currentProject, includeHistoricalProjects) {
47
+ function claudeConsumersFromInstalled(value, marketplaceName, currentProject, includeHistoricalProjects = false) {
51
48
  const output = [];
52
49
  if (value !== null && !isRecord(value)) {
53
50
  throw new Error('Claude installed_plugins must be a JSON object.');
@@ -90,7 +87,7 @@ function claudeConsumersFromInstalled(value, marketplaceName, currentProject, in
90
87
  ? canonicalizePathThroughExistingAncestorSync(item.projectPath)
91
88
  : null
92
89
  : undefined;
93
- if (!includeHistoricalProjects && scope === 'project' && projectKey !== currentProject)
90
+ if (scope === 'project' && !includeHistoricalProjects && projectKey !== currentProject)
94
91
  continue;
95
92
  const pluginName = typeof item.name === 'string'
96
93
  ? item.name
@@ -156,9 +153,7 @@ function inventoryErrorRelevance(location, env, cwd) {
156
153
  [path.join(awHome, 'plugin-config'), 'user'],
157
154
  [path.join(canonicalAwHome, 'plugin-config'), 'user'],
158
155
  [path.join(repoRoot, '.agent-workflows', 'plugin-config'), 'project'],
159
- [path.join(repoRoot, '.agent-workflows', 'plugin-config.local'), 'project'],
160
156
  [path.join(canonicalRepoRoot, '.agent-workflows', 'plugin-config'), 'project'],
161
- [path.join(canonicalRepoRoot, '.agent-workflows', 'plugin-config.local'), 'project'],
162
157
  ]) {
163
158
  const segments = pathSegmentsWithin(root, location);
164
159
  if (segments !== null) {
@@ -175,26 +170,6 @@ function inventoryErrorRelevance(location, env, cwd) {
175
170
  return { global: false, scope: 'project' };
176
171
  }
177
172
  }
178
- const lifecycle = pathSegmentsWithin(path.join(awHome, 'lifecycle-active'), location);
179
- if (lifecycle?.[0]) {
180
- const platform = lifecycle[1] === 'codex' || lifecycle[1] === 'claude'
181
- ? lifecycle[1]
182
- : undefined;
183
- const scope = lifecycle[2] === 'user' || lifecycle[2] === 'project'
184
- ? lifecycle[2]
185
- : undefined;
186
- const pluginName = platform && scope && lifecycle.length >= 5
187
- && (scope === 'project' || lifecycle[3] === 'user')
188
- ? lifecycle[4]
189
- : undefined;
190
- return {
191
- global: false,
192
- sourceId: lifecycle[0],
193
- ...(pluginName ? { pluginName } : {}),
194
- ...(platform ? { platform } : {}),
195
- ...(scope ? { scope } : {}),
196
- };
197
- }
198
173
  return { global: true };
199
174
  }
200
175
  function isAbsentState(error) {
@@ -297,7 +272,7 @@ async function inventoryPluginConfigRoots(options) {
297
272
  cwd: options.cwd,
298
273
  });
299
274
  if (userRoot)
300
- roots.push(userRoot);
275
+ roots.push({ root: userRoot, scope: 'user' });
301
276
  }
302
277
  const rawRepoRoot = resolveRepoRootSync(options.cwd);
303
278
  const repoRoot = await inventoryRead({
@@ -317,18 +292,16 @@ async function inventoryPluginConfigRoots(options) {
317
292
  env: options.env,
318
293
  cwd: options.cwd,
319
294
  })) {
320
- for (const storeName of ['plugin-config', 'plugin-config.local']) {
321
- const projectRoot = await inventoryCanonicalDescendantDirectory({
322
- root: rawRepoRoot,
323
- segments: ['.agent-workflows', storeName],
324
- errors: options.errors,
325
- kind: 'configDirectoryRead',
326
- env: options.env,
327
- cwd: options.cwd,
328
- });
329
- if (projectRoot)
330
- roots.push(projectRoot);
331
- }
295
+ const projectRoot = await inventoryCanonicalDescendantDirectory({
296
+ root: rawRepoRoot,
297
+ segments: ['.agent-workflows', 'plugin-config'],
298
+ errors: options.errors,
299
+ kind: 'configDirectoryRead',
300
+ env: options.env,
301
+ cwd: options.cwd,
302
+ });
303
+ if (projectRoot)
304
+ roots.push({ root: projectRoot, scope: 'project', projectKey: repoRoot });
332
305
  }
333
306
  return roots;
334
307
  }
@@ -341,7 +314,6 @@ export async function inventoryLegacyOwnerReferences(options) {
341
314
  const skillRoots = new Set([
342
315
  path.join(getCodexHome(env), 'skills'),
343
316
  path.join(getClaudeHome(env), 'skills'),
344
- path.join(repoRoot, '.agents', 'skills'),
345
317
  path.join(repoRoot, '.claude', 'skills'),
346
318
  ]);
347
319
  const legacyPluginsRoot = path.join(awHome, 'plugins');
@@ -355,54 +327,23 @@ export async function inventoryLegacyOwnerReferences(options) {
355
327
  for (const root of await resolveCanonicalPluginSkillRoots(path.join(legacyPluginsRoot, plugin.name), true, errors, env, options.cwd))
356
328
  skillRoots.add(root);
357
329
  }
358
- const marketplacesRoot = path.join(awHome, 'marketplaces');
359
- const marketplaces = await inventoryCanonicalDirectoryEntries({
360
- errors, location: marketplacesRoot, kind: 'marketplaceDirectoryRead', env, cwd: options.cwd,
361
- });
362
- for (const entry of marketplaces) {
363
- const marketplaceRoot = path.join(marketplacesRoot, entry.name);
364
- if (!await inventoryCanonicalDirectory({
365
- errors,
366
- location: marketplaceRoot,
367
- kind: 'marketplaceRootValidation',
368
- env,
369
- cwd: options.cwd,
370
- }))
371
- continue;
372
- const pluginsRoot = path.join(marketplacesRoot, entry.name, 'plugins');
373
- const plugins = await inventoryCanonicalDirectoryEntries({
374
- errors, location: pluginsRoot, kind: 'pluginDirectoryRead', env, cwd: options.cwd,
375
- });
376
- for (const plugin of plugins) {
377
- const pluginRoot = path.join(pluginsRoot, plugin.name);
378
- if (!await inventoryCanonicalDirectory({
379
- errors,
380
- location: pluginRoot,
381
- kind: 'pluginDirectoryRead',
382
- env,
383
- cwd: options.cwd,
384
- }))
385
- continue;
386
- for (const root of await resolveCanonicalPluginSkillRoots(pluginRoot, false, errors, env, options.cwd))
387
- skillRoots.add(root);
388
- }
389
- }
390
330
  for (const root of skillRoots) {
391
331
  references.push(...await findDirectSkillOwnerMarkers(root, errors, env, options.cwd));
392
332
  }
393
333
  for (const configRoot of [
394
334
  getCodexHome(env),
395
335
  getClaudeHome(env),
396
- path.join(repoRoot, '.codex'),
397
336
  path.join(repoRoot, '.claude'),
398
337
  ]) {
399
338
  references.push(...await findOwnedHeadersInDirectory(path.join(configRoot, 'rules'), new Set(['.md', '.rules']), true, errors, env, options.cwd), ...await findOwnedHeadersInDirectory(path.join(configRoot, 'agents'), new Set(['.md', '.toml']), true, errors, env, options.cwd));
400
339
  }
401
- references.push(...await findOwnedHeadersInDirectory(path.join(repoRoot, '.agents', 'rules'), new Set(['.md']), false, errors, env, options.cwd), ...await findOwnedHeadersInDirectory(path.join(repoRoot, '.agents', 'agents'), new Set(['.md']), false, errors, env, options.cwd));
402
- for (const filePath of [
403
- path.join(getCodexHome(env), 'AGENTS.md'),
404
- path.join(repoRoot, '.codex', 'AGENTS.md'),
340
+ for (const [directory, extensions] of [
341
+ [path.join(repoRoot, '.codex', 'rules'), new Set(['.md', '.rules'])],
342
+ [path.join(repoRoot, '.codex', 'agents'), new Set(['.md', '.toml'])],
405
343
  ]) {
344
+ references.push(...(await findOwnedHeadersInDirectory(directory, extensions, true, errors, env, options.cwd)).filter((reference) => reference.kind === 'namespacedOwner'));
345
+ }
346
+ for (const filePath of [path.join(getCodexHome(env), 'AGENTS.md')]) {
406
347
  const reference = await readOwnedHeaderReference(filePath, false, errors, env, options.cwd);
407
348
  if (reference)
408
349
  references.push(reference);
@@ -424,7 +365,8 @@ export async function inventoryLegacyConfigReferences(options) {
424
365
  const env = options.env ?? process.env;
425
366
  const references = [];
426
367
  const errors = [];
427
- for (const directory of await inventoryPluginConfigRoots({ errors, env, cwd: options.cwd })) {
368
+ for (const configRoot of await inventoryPluginConfigRoots({ errors, env, cwd: options.cwd })) {
369
+ const directory = configRoot.root;
428
370
  const entries = await inventoryRead({
429
371
  operation: () => fs.readdir(directory, { withFileTypes: true }),
430
372
  absent: [], errors, location: directory, kind: 'configDirectoryRead', env, cwd: options.cwd,
@@ -441,7 +383,13 @@ export async function inventoryLegacyConfigReferences(options) {
441
383
  absent: null, errors, location: legacyFile, kind: 'configFileStat', env, cwd: options.cwd,
442
384
  });
443
385
  if (stat?.isFile()) {
444
- references.push({ kind: 'legacyConfig', location: legacyFile, pluginName: entry.name });
386
+ references.push({
387
+ kind: 'legacyConfig',
388
+ location: legacyFile,
389
+ pluginName: entry.name,
390
+ scope: configRoot.scope,
391
+ ...(configRoot.projectKey ? { projectKey: configRoot.projectKey } : {}),
392
+ });
445
393
  }
446
394
  }
447
395
  }
@@ -458,13 +406,13 @@ function ownerReferenceFromRaw(entryPath, raw) {
458
406
  ...(typeof raw.scope === 'string' ? { scope: raw.scope } : {}),
459
407
  };
460
408
  }
461
- if (raw?.schemaVersion === 2 && raw.owner === 'agent-workflows'
462
- && typeof raw.sourceId === 'string') {
409
+ if (raw?.schemaVersion === 3 && raw.owner === 'agent-workflows'
410
+ && typeof raw.sourceId === 'string'
411
+ && raw.pluginId === `${raw.sourceId}/${raw.plugin}`) {
463
412
  return {
464
413
  kind: 'namespacedOwner',
465
414
  location: entryPath,
466
415
  sourceId: raw.sourceId,
467
- ...(typeof raw.sourceIdentity === 'string' ? { sourceIdentity: raw.sourceIdentity } : {}),
468
416
  ...(typeof raw.plugin === 'string' ? { pluginName: raw.plugin } : {}),
469
417
  ...(typeof raw.platform === 'string' ? { platform: raw.platform } : {}),
470
418
  ...(typeof raw.scope === 'string' ? { scope: raw.scope } : {}),
@@ -472,6 +420,27 @@ function ownerReferenceFromRaw(entryPath, raw) {
472
420
  }
473
421
  return null;
474
422
  }
423
+ function legacyOwnedHeaderReference(filePath, content) {
424
+ const normalized = content.replace(/\r\n/gu, '\n');
425
+ const frontmatterEnd = normalized.startsWith('---\n')
426
+ ? normalized.indexOf('\n---\n', 4)
427
+ : -1;
428
+ const headerIndex = frontmatterEnd === -1 ? 0 : frontmatterEnd + '\n---\n'.length;
429
+ const lineEnd = normalized.indexOf('\n', headerIndex);
430
+ const line = normalized.slice(headerIndex, lineEnd === -1 ? normalized.length : lineEnd);
431
+ if (!line.startsWith(OWNED_TEXT_HEADER_PREFIX))
432
+ return null;
433
+ const raw = (() => {
434
+ try {
435
+ return JSON.parse(line.slice(OWNED_TEXT_HEADER_PREFIX.length));
436
+ }
437
+ catch {
438
+ return null;
439
+ }
440
+ })();
441
+ const reference = ownerReferenceFromRaw(filePath, raw);
442
+ return reference?.kind === 'legacyOwner' ? reference : null;
443
+ }
475
444
  async function readOwnedHeaderReference(filePath, requireGeneratedName, errors, env, cwd) {
476
445
  const stats = await inventoryRead({
477
446
  operation: () => fs.stat(filePath),
@@ -497,6 +466,16 @@ async function readOwnedHeaderReference(filePath, requireGeneratedName, errors,
497
466
  return null;
498
467
  if (!content.includes(OWNED_TEXT_HEADER_PREFIX))
499
468
  return null;
469
+ const legacyReference = legacyOwnedHeaderReference(filePath, content);
470
+ if (legacyReference) {
471
+ if (requireGeneratedName
472
+ && legacyReference.pluginName
473
+ && !path.basename(filePath).startsWith(`aw-${legacyReference.pluginName}-`)) {
474
+ errors.push(inventoryError(new Error('Owned text header path does not match its plugin identity.'), filePath, 'ownerHeaderPathValidation', env, cwd));
475
+ return null;
476
+ }
477
+ return legacyReference;
478
+ }
500
479
  let parsed;
501
480
  try {
502
481
  parsed = parseOwnedTextHeader(content);
@@ -509,11 +488,17 @@ async function readOwnedHeaderReference(filePath, requireGeneratedName, errors,
509
488
  return null;
510
489
  if (requireGeneratedName
511
490
  && !path.basename(filePath).startsWith(`aw-${parsed.identity.plugin}-`)) {
512
- errors.push(inventoryError(new Error('Owned text header path does not match its plugin identity.'), filePath, 'ownerHeaderPathValidation', env, cwd));
491
+ errors.push(inventoryError(new Error('Owned text header path does not match its plugin identity.'), filePath, 'ownerHeaderPathValidation', env, cwd, {
492
+ global: false,
493
+ ...(parsed.identity.sourceId ? { sourceId: parsed.identity.sourceId } : {}),
494
+ pluginName: parsed.identity.plugin,
495
+ platform: parsed.identity.platform,
496
+ scope: parsed.identity.scope,
497
+ }));
513
498
  return null;
514
499
  }
515
500
  return ownerReferenceFromRaw(filePath, {
516
- schemaVersion: parsed.identity.sourceId === undefined ? 1 : 2,
501
+ schemaVersion: 3,
517
502
  ...parsed.identity,
518
503
  });
519
504
  }
@@ -608,6 +593,12 @@ async function findDirectSkillOwnerMarkers(root, errors, env, cwd) {
608
593
  marker = await readSkillOwnerMarker({ skillRoot, allowedRoot: root });
609
594
  }
610
595
  catch (error) {
596
+ const legacy = await fs.readJson(markerPath).catch(() => null);
597
+ const legacyReference = ownerReferenceFromRaw(markerPath, legacy);
598
+ if (legacyReference?.kind === 'legacyOwner') {
599
+ output.push(legacyReference);
600
+ continue;
601
+ }
611
602
  if (!isAbsentState(error)) {
612
603
  const code = error.code;
613
604
  const message = error instanceof Error ? error.message : String(error);
@@ -640,7 +631,6 @@ function sharedOwnerTokenReferences(filePath, tokens, errors, env, cwd) {
640
631
  kind: 'namespacedOwner',
641
632
  location: filePath,
642
633
  sourceId: identity.sourceId,
643
- sourceIdentity: identity.sourceIdentity,
644
634
  pluginName: identity.plugin,
645
635
  platform: identity.platform,
646
636
  scope: identity.scope,
@@ -655,25 +645,21 @@ async function codexSharedOwnerReferences(filePath, scope, errors, env, cwd) {
655
645
  value,
656
646
  location: filePath,
657
647
  })),
658
- ...Object.values(config.snapshot.mcpServers).flatMap((server) => {
659
- const env = server.value?.env;
660
- const value = isRecord(env) && typeof env.AW_AGENT_WORKFLOWS_OWNER === 'string'
661
- ? env.AW_AGENT_WORKFLOWS_OWNER
662
- : null;
663
- return value ? [{ value, location: filePath }] : [];
664
- }),
665
648
  ];
666
- const references = sharedOwnerTokenReferences(filePath, ownerValues.map((entry) => entry.value).filter((value) => value.startsWith('aw-owner-v2:')), errors, env, cwd);
667
- for (const { value, location } of ownerValues) {
668
- if (value.startsWith('aw-owner-v2:') || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(value))
669
- continue;
670
- references.push({
671
- kind: 'legacyOwner',
672
- location,
673
- pluginName: value,
674
- platform: 'codex',
675
- scope,
676
- });
649
+ const references = sharedOwnerTokenReferences(filePath, ownerValues.map((entry) => entry.value).filter((value) => value.startsWith(SHARED_OWNER_TOKEN_PREFIX)), errors, env, cwd);
650
+ if (scope === 'user') {
651
+ for (const { value, location } of ownerValues) {
652
+ if (value.startsWith(SHARED_OWNER_TOKEN_PREFIX)
653
+ || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(value))
654
+ continue;
655
+ references.push({
656
+ kind: 'legacyOwner',
657
+ location,
658
+ pluginName: value,
659
+ platform: 'codex',
660
+ scope,
661
+ });
662
+ }
677
663
  }
678
664
  return references;
679
665
  }
@@ -682,72 +668,50 @@ async function claudeSharedOwnerReferences(filePath, scope, errors, env, cwd) {
682
668
  const generated = settings && isRecord(settings.awGenerated) ? settings.awGenerated : null;
683
669
  const permissions = generated && isRecord(generated.permissions) ? generated.permissions : {};
684
670
  const keys = Object.keys(permissions);
685
- const references = sharedOwnerTokenReferences(filePath, keys.filter((token) => token.startsWith('aw-owner-v2:')), errors, env, cwd);
686
- for (const key of keys) {
687
- if (key.startsWith('aw-owner-v2:') || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(key))
688
- continue;
689
- references.push({
690
- kind: 'legacyOwner',
691
- location: filePath,
692
- pluginName: key,
693
- platform: 'claude',
694
- scope,
695
- });
696
- }
697
- return references;
698
- }
699
- async function codexHookOwnerReferences(filePath, errors, env, cwd) {
700
- const raw = await readJsonFileIfExists(filePath);
701
- if (!raw)
702
- return [];
703
- const parsed = parseCodexSharedHooksFile(raw);
704
- const output = [];
705
- for (const hook of parsed.managedIdentities) {
706
- if (!hook.command.includes(OWNED_TEXT_HEADER_PREFIX))
707
- continue;
708
- let owner;
709
- try {
710
- owner = parseOwnedTextHeader(hook.command)?.identity;
711
- }
712
- catch (error) {
713
- errors.push(inventoryError(error, filePath, 'ownerHeaderParse', env, cwd));
714
- continue;
671
+ const references = sharedOwnerTokenReferences(filePath, keys.filter((token) => token.startsWith(SHARED_OWNER_TOKEN_PREFIX)), errors, env, cwd);
672
+ if (scope === 'user') {
673
+ for (const key of keys) {
674
+ if (key.startsWith(SHARED_OWNER_TOKEN_PREFIX)
675
+ || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(key))
676
+ continue;
677
+ references.push({
678
+ kind: 'legacyOwner',
679
+ location: filePath,
680
+ pluginName: key,
681
+ platform: 'claude',
682
+ scope,
683
+ });
715
684
  }
716
- if (!owner)
717
- continue;
718
- output.push(owner.sourceId ? {
719
- kind: 'namespacedOwner',
720
- location: filePath,
721
- sourceId: owner.sourceId,
722
- sourceIdentity: owner.sourceIdentity,
723
- pluginName: owner.plugin,
724
- platform: owner.platform,
725
- scope: owner.scope,
726
- } : {
727
- kind: 'legacyOwner',
728
- location: filePath,
729
- pluginName: owner.plugin,
730
- platform: owner.platform,
731
- scope: owner.scope,
732
- });
733
685
  }
734
- return output;
686
+ return references;
735
687
  }
736
688
  function isRecord(value) {
737
689
  return typeof value === 'object' && value !== null && !Array.isArray(value);
738
690
  }
739
- function assertNamespacedConfigEnvelope(value, sourceId, pluginName) {
691
+ function assertNamespacedConfigEnvelope(value, sourceId, pluginName, scope) {
740
692
  if (!isRecord(value)
741
- || value.schemaVersion !== 2
693
+ || value.schemaVersion !== 5
742
694
  || typeof value.sourceId !== 'string'
743
- || typeof value.sourceIdentity !== 'string'
744
- || !/^sha256:[0-9a-f]{64}$/u.test(value.sourceIdentity)
745
695
  || typeof value.pluginName !== 'string'
696
+ || !isRecord(value.binding)
746
697
  || !isRecord(value.values)
747
698
  || Object.keys(value).some((key) => ![
748
- 'schemaVersion', 'sourceId', 'sourceIdentity', 'pluginName', 'values',
699
+ 'schemaVersion', 'sourceId', 'pluginName', 'binding', 'values',
749
700
  ].includes(key))) {
750
- throw new Error('Namespaced plugin config is not a valid schema 2 envelope.');
701
+ throw new Error('Namespaced plugin config is not a valid schema 5 envelope.');
702
+ }
703
+ const binding = value.binding;
704
+ const validBinding = scope === 'user'
705
+ ? binding.kind === 'source'
706
+ && typeof binding.sourceIdentity === 'string'
707
+ && /^sha256:[0-9a-f]{64}$/u.test(binding.sourceIdentity)
708
+ && Object.keys(binding).every((key) => ['kind', 'sourceIdentity'].includes(key))
709
+ : binding.kind === 'catalog'
710
+ && typeof binding.logicalIdentity === 'string'
711
+ && binding.logicalIdentity.trim().length > 0
712
+ && Object.keys(binding).every((key) => ['kind', 'logicalIdentity'].includes(key));
713
+ if (!validBinding) {
714
+ throw new Error(`Namespaced ${scope} plugin config has an invalid binding.`);
751
715
  }
752
716
  if (value.sourceId !== sourceId || value.pluginName !== pluginName) {
753
717
  throw new Error('Namespaced plugin config identity does not match its directory path.');
@@ -768,7 +732,7 @@ function isAwPluginConsumerKey(value) {
768
732
  function hasAwPluginConsumerKeys(value) {
769
733
  return isRecord(value) && Object.keys(value).some(isAwPluginConsumerKey);
770
734
  }
771
- async function oldMarketplaceReferences(env, cwd, errors) {
735
+ async function oldMarketplaceReferences(env, cwd, errors, includePlatformHistoricalProjects) {
772
736
  const codexPath = path.join(getCodexHome(env), 'config.toml');
773
737
  const claudeSettingsPath = path.join(getClaudeHome(env), 'settings.json');
774
738
  const claudeKnownPath = path.join(getClaudeHome(env), 'plugins', 'known_marketplaces.json');
@@ -864,7 +828,7 @@ async function oldMarketplaceReferences(env, cwd, errors) {
864
828
  location: resolveRepoRootSync(cwd), kind: 'projectRootRead', env, cwd,
865
829
  });
866
830
  try {
867
- for (const consumer of claudeConsumersFromInstalled(installed, 'aw', path.normalize(canonicalProjectRoot), false)) {
831
+ for (const consumer of claudeConsumersFromInstalled(installed, 'aw', path.normalize(canonicalProjectRoot), includePlatformHistoricalProjects)) {
868
832
  output.push({ kind: 'legacyMarketplace', location: claudeInstalledPath, ...consumer });
869
833
  }
870
834
  }
@@ -931,10 +895,49 @@ export async function inventoryCatalogSourceReferences(options) {
931
895
  const awHome = resolveAwHome(env);
932
896
  const references = [];
933
897
  const errors = [];
898
+ const canonicalProjectRoot = await inventoryRead({
899
+ operation: () => fs.realpath(resolveRepoRootSync(options.cwd)),
900
+ absent: path.resolve(resolveRepoRootSync(options.cwd)),
901
+ errors,
902
+ location: resolveRepoRootSync(options.cwd),
903
+ kind: 'projectRootRead',
904
+ env,
905
+ cwd: options.cwd,
906
+ });
934
907
  const legacyConfig = await inventoryLegacyConfigReferences(options);
935
908
  references.push(...legacyConfig.references);
936
909
  errors.push(...legacyConfig.errors);
937
- for (const configRoot of await inventoryPluginConfigRoots({ errors, env, cwd: options.cwd })) {
910
+ for (const scope of ['user', 'project']) {
911
+ const location = resolvePluginIntentStatePath({ scope, cwd: options.cwd, env });
912
+ const state = await inventoryRead({
913
+ operation: () => readPluginIntentState({ scope, cwd: options.cwd, env }),
914
+ absent: null,
915
+ errors,
916
+ location,
917
+ kind: 'lifecycleIntentRead',
918
+ env,
919
+ cwd: options.cwd,
920
+ });
921
+ if (!state)
922
+ continue;
923
+ for (const pluginId of new Set([
924
+ ...state.roots.map((root) => root.pluginId),
925
+ ...state.dependencyScopeOverrides.map((override) => override.pluginId),
926
+ ])) {
927
+ const separator = pluginId.indexOf('/');
928
+ if (separator <= 0 || separator === pluginId.length - 1)
929
+ continue;
930
+ references.push({
931
+ kind: 'namespacedLifecycle',
932
+ location,
933
+ sourceId: pluginId.slice(0, separator),
934
+ pluginName: pluginId.slice(separator + 1),
935
+ scope,
936
+ });
937
+ }
938
+ }
939
+ for (const configInventory of await inventoryPluginConfigRoots({ errors, env, cwd: options.cwd })) {
940
+ const configRoot = configInventory.root;
938
941
  const sourceEntries = await inventoryRead({
939
942
  operation: () => fs.readdir(configRoot, { withFileTypes: true }),
940
943
  absent: [], errors, location: configRoot, kind: 'configDirectoryRead', env, cwd: options.cwd,
@@ -974,7 +977,7 @@ export async function inventoryCatalogSourceReferences(options) {
974
977
  if (value === null)
975
978
  continue;
976
979
  try {
977
- assertNamespacedConfigEnvelope(value, sourceEntry.name, pluginEntry.name);
980
+ assertNamespacedConfigEnvelope(value, sourceEntry.name, pluginEntry.name, configInventory.scope);
978
981
  }
979
982
  catch (error) {
980
983
  errors.push(inventoryError(error, configPath, 'configFileValidation', env, options.cwd));
@@ -984,160 +987,9 @@ export async function inventoryCatalogSourceReferences(options) {
984
987
  kind: 'namespacedConfig',
985
988
  location: configPath,
986
989
  sourceId: sourceEntry.name,
987
- sourceIdentity: value.sourceIdentity,
988
990
  pluginName: pluginEntry.name,
989
- });
990
- }
991
- }
992
- }
993
- const lifecycleRoot = path.join(awHome, 'lifecycle-active');
994
- const lifecycleSources = await inventoryCanonicalDirectoryEntries({
995
- errors, location: lifecycleRoot, kind: 'lifecycleDirectoryRead', env, cwd: options.cwd,
996
- });
997
- for (const platform of ['codex', 'claude']) {
998
- const legacyRoot = path.join(lifecycleRoot, platform);
999
- if (!lifecycleSources.some((entry) => entry.name === platform))
1000
- continue;
1001
- const legacyEntries = await inventoryCanonicalDirectoryEntries({
1002
- errors, location: legacyRoot, kind: 'lifecycleNamespaceValidation', env, cwd: options.cwd,
1003
- });
1004
- if (legacyEntries.length > 0) {
1005
- references.push({ kind: 'legacyLifecycle', location: legacyRoot });
1006
- }
1007
- }
1008
- const canonicalProjectRoot = await inventoryRead({
1009
- operation: () => fs.realpath(resolveRepoRootSync(options.cwd)),
1010
- absent: path.resolve(resolveRepoRootSync(options.cwd)), errors,
1011
- location: resolveRepoRootSync(options.cwd), kind: 'projectRootRead', env, cwd: options.cwd,
1012
- });
1013
- const projectLocationKey = createLifecycleProjectLocationKey(canonicalProjectRoot);
1014
- for (const sourceEntry of lifecycleSources) {
1015
- if (sourceEntry.name === 'codex' || sourceEntry.name === 'claude')
1016
- continue;
1017
- const sourceLifecycleRoot = path.join(lifecycleRoot, sourceEntry.name);
1018
- if (!await inventoryCanonicalDirectory({
1019
- errors,
1020
- location: sourceLifecycleRoot,
1021
- kind: 'lifecycleNamespaceValidation',
1022
- env,
1023
- cwd: options.cwd,
1024
- }))
1025
- continue;
1026
- const relevantRoots = [];
1027
- for (const platform of ['codex', 'claude']) {
1028
- const userRoot = await inventoryCanonicalDescendantDirectory({
1029
- root: sourceLifecycleRoot,
1030
- segments: [platform, 'user', 'user'],
1031
- errors,
1032
- kind: 'lifecycleDirectoryRead',
1033
- env,
1034
- cwd: options.cwd,
1035
- });
1036
- if (userRoot)
1037
- relevantRoots.push(userRoot);
1038
- const projectRoot = await inventoryCanonicalDescendantDirectory({
1039
- root: sourceLifecycleRoot,
1040
- segments: [platform, 'project'],
1041
- errors,
1042
- kind: 'lifecycleDirectoryRead',
1043
- env,
1044
- cwd: options.cwd,
1045
- });
1046
- if (!projectRoot)
1047
- continue;
1048
- if (options.includeHistoricalProjects) {
1049
- const projectLocations = await inventoryRead({
1050
- operation: () => fs.readdir(projectRoot, { withFileTypes: true }),
1051
- absent: [], errors, location: projectRoot, kind: 'lifecycleDirectoryRead', env, cwd: options.cwd,
1052
- });
1053
- for (const location of projectLocations) {
1054
- const projectLocationRoot = path.join(projectRoot, location.name);
1055
- if (await inventoryCanonicalDirectory({
1056
- errors,
1057
- location: projectLocationRoot,
1058
- kind: 'lifecycleLocationValidation',
1059
- env,
1060
- cwd: options.cwd,
1061
- }))
1062
- relevantRoots.push(projectLocationRoot);
1063
- }
1064
- }
1065
- else {
1066
- const projectLocationRoot = path.join(projectRoot, projectLocationKey);
1067
- if (await inventoryCanonicalDirectory({
1068
- errors,
1069
- location: projectLocationRoot,
1070
- kind: 'lifecycleLocationValidation',
1071
- env,
1072
- cwd: options.cwd,
1073
- }))
1074
- relevantRoots.push(projectLocationRoot);
1075
- }
1076
- }
1077
- for (const relevantRoot of relevantRoots) {
1078
- const pluginEntries = await inventoryRead({
1079
- operation: () => fs.readdir(relevantRoot, { withFileTypes: true }),
1080
- absent: [], errors, location: relevantRoot, kind: 'lifecycleDirectoryRead', env, cwd: options.cwd,
1081
- });
1082
- const parts = path.relative(sourceLifecycleRoot, relevantRoot).split(path.sep);
1083
- const platform = parts[0];
1084
- const scope = parts[1];
1085
- if ((platform !== 'codex' && platform !== 'claude')
1086
- || (scope !== 'user' && scope !== 'project'))
1087
- continue;
1088
- for (const pluginEntry of pluginEntries) {
1089
- const pluginName = pluginEntry.name;
1090
- const pluginRoot = path.join(relevantRoot, pluginName);
1091
- if (!await inventoryCanonicalDirectory({
1092
- errors,
1093
- location: pluginRoot,
1094
- kind: 'lifecyclePluginRootValidation',
1095
- env,
1096
- cwd: options.cwd,
1097
- }))
1098
- continue;
1099
- const metadataPath = path.join(relevantRoot, pluginName, 'active', 'metadata.json');
1100
- const raw = await inventoryRead({
1101
- operation: () => fs.readJson(metadataPath), absent: null, errors,
1102
- location: metadataPath, kind: 'lifecycleMetadataRead', env, cwd: options.cwd,
1103
- });
1104
- if (!raw)
1105
- continue;
1106
- if (raw.schemaVersion !== 2 || typeof raw.sourceIdentity !== 'string') {
1107
- errors.push(inventoryError(new Error('Lifecycle active metadata is not valid schema 2 state.'), metadataPath, 'lifecycleMetadataValidation', env, options.cwd));
1108
- continue;
1109
- }
1110
- const snapshot = await inventoryRead({
1111
- operation: () => inspectLifecycleActiveSnapshotForInventory({
1112
- sourceId: sourceEntry.name,
1113
- sourceIdentity: raw.sourceIdentity,
1114
- pluginName,
1115
- platform,
1116
- scope,
1117
- cwd: scope === 'project' && typeof raw.projectKey === 'string'
1118
- ? raw.projectKey
1119
- : options.cwd,
1120
- env,
1121
- loadPlugin: (bundleRoot) => readPluginManifest(bundleRoot, { mode: 'bundle' }),
1122
- }),
1123
- absent: null,
1124
- errors,
1125
- location: metadataPath,
1126
- kind: 'lifecycleSnapshotValidation',
1127
- env,
1128
- cwd: options.cwd,
1129
- });
1130
- if (!snapshot)
1131
- continue;
1132
- references.push({
1133
- kind: 'namespacedLifecycle',
1134
- location: snapshot.activeRoot,
1135
- sourceId: snapshot.metadata.sourceId,
1136
- sourceIdentity: snapshot.metadata.sourceIdentity,
1137
- pluginName: snapshot.metadata.pluginName,
1138
- platform: snapshot.metadata.platform,
1139
- scope: snapshot.metadata.scope,
1140
- projectKey: snapshot.metadata.projectKey,
991
+ scope: configInventory.scope,
992
+ ...(configInventory.projectKey ? { projectKey: configInventory.projectKey } : {}),
1141
993
  });
1142
994
  }
1143
995
  }
@@ -1150,19 +1002,23 @@ export async function inventoryCatalogSourceReferences(options) {
1150
1002
  [path.join(getClaudeHome(env), 'settings.json'), 'nativeStateRead', () => claudeSharedOwnerReferences(path.join(getClaudeHome(env), 'settings.json'), 'user', errors, env, options.cwd)],
1151
1003
  [path.join(resolveRepoRootSync(options.cwd), '.codex', 'config.toml'), 'nativeStateRead', () => codexSharedOwnerReferences(path.join(resolveRepoRootSync(options.cwd), '.codex', 'config.toml'), 'project', errors, env, options.cwd)],
1152
1004
  [path.join(resolveRepoRootSync(options.cwd), '.claude', 'settings.json'), 'nativeStateRead', () => claudeSharedOwnerReferences(path.join(resolveRepoRootSync(options.cwd), '.claude', 'settings.json'), 'project', errors, env, options.cwd)],
1153
- [path.join(resolveRepoRootSync(options.cwd), '.codex', 'hooks.json'), 'nativeStateRead', () => codexHookOwnerReferences(path.join(resolveRepoRootSync(options.cwd), '.codex', 'hooks.json'), errors, env, options.cwd)],
1154
1005
  ]) {
1155
1006
  references.push(...await inventoryRead({
1156
1007
  operation, absent: [], errors, location, kind, env, cwd: options.cwd,
1157
1008
  }));
1158
1009
  }
1159
- references.push(...await oldMarketplaceReferences(env, options.cwd, errors));
1010
+ references.push(...await oldMarketplaceReferences(env, options.cwd, errors, options.includePlatformHistoricalProjects === true));
1160
1011
  const marketplacesRoot = path.join(awHome, 'marketplaces');
1161
1012
  const codexConfigPath = path.join(getCodexHome(env), 'config.toml');
1162
1013
  const codexConfig = await inventoryRead({
1163
1014
  operation: () => readCodexConfigFile(codexConfigPath), absent: null, errors,
1164
1015
  location: codexConfigPath, kind: 'nativeStateRead', env, cwd: options.cwd,
1165
1016
  });
1017
+ const projectCodexConfigPath = path.join(resolveRepoRootSync(options.cwd), '.codex', 'config.toml');
1018
+ const projectCodexConfig = await inventoryRead({
1019
+ operation: () => readCodexConfigFile(projectCodexConfigPath), absent: null, errors,
1020
+ location: projectCodexConfigPath, kind: 'nativeStateRead', env, cwd: options.cwd,
1021
+ });
1166
1022
  const userClaudeSettingsPath = path.join(getClaudeHome(env), 'settings.json');
1167
1023
  const userClaudeSettings = await inventoryRead({
1168
1024
  operation: () => readJsonFileIfExists(userClaudeSettingsPath), absent: null, errors,
@@ -1199,6 +1055,19 @@ export async function inventoryCatalogSourceReferences(options) {
1199
1055
  scope: 'user',
1200
1056
  });
1201
1057
  }
1058
+ for (const pluginId of Object.keys(projectCodexConfig?.snapshot.plugins ?? {})) {
1059
+ const separator = pluginId.lastIndexOf('@');
1060
+ if (separator <= 0 || separator === pluginId.length - 1)
1061
+ continue;
1062
+ references.push({
1063
+ kind: 'namespacedMarketplace',
1064
+ location: projectCodexConfigPath,
1065
+ pluginName: pluginId.slice(0, separator),
1066
+ marketplaceName: pluginId.slice(separator + 1),
1067
+ platform: 'codex',
1068
+ scope: 'project',
1069
+ });
1070
+ }
1202
1071
  for (const [location, registrations] of [
1203
1072
  [codexConfigPath, Object.entries(codexConfig?.snapshot.marketplaces ?? {}).flatMap(([marketplaceName, marketplace]) => {
1204
1073
  const sourceId = marketplace.sourceType === 'local' && !marketplace.sourcePointsToManifest
@@ -1293,43 +1162,22 @@ export async function inventoryCatalogSourceReferences(options) {
1293
1162
  && !codexMarketplace.sourcePointsToManifest
1294
1163
  && path.normalize(codexMarketplace.source ?? '') === path.normalize(marketplaceRoot);
1295
1164
  const consumers = [];
1296
- if (marketplaceName !== null
1297
- && (strictRoot !== null || (canonicalRoot && codexMarketplaceIsCanonical))) {
1298
- let residueNames = [];
1299
- try {
1300
- residueNames = await discoverCodexNativeResidueNames({
1301
- cwd: options.cwd,
1302
- env,
1303
- marketplaceName,
1304
- marketplaceRoot,
1305
- });
1306
- }
1307
- catch (error) {
1308
- const residueError = error instanceof CodexNativeResidueProbeError ? error : null;
1309
- const pluginName = residueError?.pluginName;
1310
- errors.push(inventoryError(error, residueError?.location ?? configPath, 'nativeStateRead', env, options.cwd, {
1311
- global: false,
1312
- sourceId: sourceEntry.name,
1313
- ...(pluginName ? { pluginName } : {}),
1314
- platform: 'codex',
1315
- scope: 'user',
1316
- }));
1317
- }
1318
- for (const pluginName of residueNames) {
1319
- consumers.push({ pluginName, platform: 'codex', scope: 'user' });
1320
- }
1321
- }
1322
1165
  if (marketplaceName !== null && (strictRoot !== null || codexMarketplaceIsCanonical)) {
1323
1166
  for (const pluginId of Object.keys(codexConfig?.snapshot.plugins ?? {})) {
1324
1167
  const pluginName = pluginNameFromMarketplaceId(pluginId, marketplaceName);
1325
1168
  if (pluginName)
1326
1169
  consumers.push({ pluginName, platform: 'codex', scope: 'user' });
1327
1170
  }
1171
+ for (const pluginId of Object.keys(projectCodexConfig?.snapshot.plugins ?? {})) {
1172
+ const pluginName = pluginNameFromMarketplaceId(pluginId, marketplaceName);
1173
+ if (pluginName)
1174
+ consumers.push({ pluginName, platform: 'codex', scope: 'project' });
1175
+ }
1328
1176
  }
1329
1177
  if (marketplaceName !== null) {
1330
1178
  consumers.push(...claudeConsumersFromSettings(userClaudeSettings, marketplaceName, 'user'), ...claudeConsumersFromSettings(projectClaudeSettings, marketplaceName, 'project'));
1331
1179
  try {
1332
- consumers.push(...claudeConsumersFromInstalled(claudeInstalled, marketplaceName, path.normalize(canonicalProjectRoot), options.includeHistoricalProjects === true));
1180
+ consumers.push(...claudeConsumersFromInstalled(claudeInstalled, marketplaceName, path.normalize(canonicalProjectRoot), options.includePlatformHistoricalProjects === true));
1333
1181
  }
1334
1182
  catch (error) {
1335
1183
  errors.push(inventoryError(error, claudeInstalledPath, 'nativeStateRead', env, options.cwd));
@@ -1379,7 +1227,7 @@ export class LegacyCatalogStateUnsupportedError extends Error {
1379
1227
  code = 'legacyStateUnsupported';
1380
1228
  inventory;
1381
1229
  constructor(inventory) {
1382
- super('legacyStateUnsupported: legacy owner, config, lifecycle, or marketplace state must be migrated before catalog source identity changes.');
1230
+ super('legacyStateUnsupported: legacy owner or config state is unsupported. Use a new AW_HOME, or cleanup with the old CLI first.');
1383
1231
  this.name = 'LegacyCatalogStateUnsupportedError';
1384
1232
  this.inventory = inventory;
1385
1233
  }