@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
@@ -0,0 +1,655 @@
1
+ import crypto from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { DEFAULT_CATALOG_OUTPUT_PATH, readCatalogWorkspace, validateCatalogSnapshotComplete, } from '@lesliechan721/aw-plugin-core';
4
+ import { runCatalogBuildCommand } from '../authoring/workspace-commands.js';
5
+ import { probeCatalogSourceGeneration, readCatalogGenerationStatus, } from '../utils/catalog-generation-service.js';
6
+ import { readCatalogGenerationState } from '../utils/catalog-generation-state.js';
7
+ import { calculateCatalogSourceImpactDigest, inspectCatalogSourceImpact, } from '../utils/catalog-source-impact.js';
8
+ import { CLI_RESERVED_IMPORTS } from '../utils/manifest.js';
9
+ import { CATALOG_SOURCE_ID_PATTERN, addCatalogSource, calculateCatalogSourcesConfigDigest, CatalogSourcesConfigConflictError, isDefaultOfficialCatalogSource, readCatalogSourcesConfigSnapshot, setPrimaryCatalogSource, updateCatalogSource, } from '../utils/catalog-sources.js';
10
+ import { addCatalogSourceCommand, preflightCatalogSourceMutation, removeCatalogSourceCommand, setPrimaryCatalogSourceCommand, updateCatalogSourceCommand, } from './catalog-source.js';
11
+ import { syncCatalogSourceCommand } from './catalog-generation.js';
12
+ import { getCatalogStatus } from './catalog-status.js';
13
+ import { resolveCatalogWorkspaceRoot } from './catalog-workspace-resolution.js';
14
+ function managedSources(sources, workspaceIdentity) {
15
+ return sources.filter((source) => source.type === 'path'
16
+ && source.managedBy?.kind === 'catalog-workspace'
17
+ && source.managedBy.workspaceIdentity === workspaceIdentity);
18
+ }
19
+ function normalizeSuggestedSourceId(workspaceRoot) {
20
+ const stem = path.basename(workspaceRoot).toLowerCase()
21
+ .replace(/[^a-z0-9]+/gu, '-').replace(/^-+|-+$/gu, '');
22
+ const prefixed = /^[a-z]/u.test(stem) ? stem : `catalog-${stem}`;
23
+ const basename = (prefixed || 'catalog').slice(0, 28).replace(/-+$/u, '') || 'catalog';
24
+ return `${basename}-dev`;
25
+ }
26
+ function suffixedSourceId(base, workspaceIdentity) {
27
+ const suffix = crypto.createHash('sha256').update(workspaceIdentity).digest('hex').slice(0, 6);
28
+ const prefix = base.slice(0, 32 - suffix.length - 1).replace(/-+$/u, '');
29
+ return `${prefix}-${suffix}`;
30
+ }
31
+ export function suggestedCatalogDevSourceId(workspaceRoot, workspaceIdentity, occupiedSourceIds = []) {
32
+ const base = normalizeSuggestedSourceId(workspaceRoot);
33
+ return workspaceIdentity && occupiedSourceIds.includes(base)
34
+ ? suffixedSourceId(base, workspaceIdentity)
35
+ : base;
36
+ }
37
+ class CatalogDevSourceError extends Error {
38
+ code;
39
+ constructor(code, message) {
40
+ super(message);
41
+ this.code = code;
42
+ this.name = 'CatalogDevSourceError';
43
+ }
44
+ }
45
+ function assertExplicitSourceId(sourceId) {
46
+ if (!CATALOG_SOURCE_ID_PATTERN.test(sourceId)) {
47
+ throw new CatalogDevSourceError('invalidSourceId', 'Invalid Catalog development source ID.');
48
+ }
49
+ }
50
+ export function createCatalogDevFailureReceipt(options) {
51
+ const workspaceRoot = path.resolve(options.cwd, options.workspaceRoot ?? '.');
52
+ if (options.command === 'activate') {
53
+ return {
54
+ receiptSchemaVersion: 2, command: 'catalog:dev:activate', ok: false, state: 'failed',
55
+ workspaceIdentity: null,
56
+ snapshot: { action: 'reused', digest: null },
57
+ source: { id: options.sourceId ?? suggestedCatalogDevSourceId(workspaceRoot), action: 'reused', primary: false },
58
+ active: { ready: false, snapshotDigest: null },
59
+ recovery: ['Fix the reported problem, then rerun catalog dev activate.'],
60
+ errors: [{ code: options.code, message: options.message }],
61
+ };
62
+ }
63
+ if (options.command === 'status') {
64
+ return {
65
+ receiptSchemaVersion: 4, command: 'catalog:dev:status', ok: false, ready: false,
66
+ workspaceIdentity: null,
67
+ snapshot: { state: 'absent', valid: false, digest: null },
68
+ source: { exists: false, id: null, pathMatches: null, primary: null },
69
+ active: {
70
+ exists: false, ready: false, digestMatchesSnapshot: false, snapshotDigest: null,
71
+ compatibility: null,
72
+ },
73
+ issues: [{ code: options.code, message: options.message, blocking: true }],
74
+ };
75
+ }
76
+ return {
77
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: false, state: 'failed',
78
+ workspaceIdentity: null,
79
+ source: { id: null, action: 'absent', previousPrimary: false },
80
+ replacementPrimarySourceId: null,
81
+ impact: null,
82
+ recovery: ['Fix the reported problem, then rerun catalog dev deactivate.'],
83
+ errors: [{ code: options.code, message: options.message }],
84
+ };
85
+ }
86
+ function codedFailure(error, fallbackCode) {
87
+ const candidateCode = typeof error === 'object' && error !== null && 'code' in error
88
+ && typeof error.code === 'string' ? error.code : undefined;
89
+ const typedCode = candidateCode === 'catalogImpactConfirmationRequired'
90
+ || candidateCode === 'catalogSourceImpactConfirmationRequired'
91
+ || candidateCode === 'operationReviewStale'
92
+ ? candidateCode
93
+ : undefined;
94
+ return {
95
+ code: error instanceof CatalogDevSourceError ? error.code : typedCode ?? fallbackCode,
96
+ message: error instanceof CatalogDevSourceError ? error.message : 'The Catalog development operation failed.',
97
+ };
98
+ }
99
+ function failureImpact(error, fallback) {
100
+ if (typeof error !== 'object' || error === null || !('impact' in error))
101
+ return fallback;
102
+ const impact = error.impact;
103
+ return typeof impact === 'object' && impact !== null && 'inventorySchemaVersion' in impact
104
+ && impact.inventorySchemaVersion === 2
105
+ ? impact
106
+ : fallback;
107
+ }
108
+ async function resolveWorkspace(cwd, workspaceRoot) {
109
+ try {
110
+ const resolved = await resolveCatalogWorkspaceRoot({
111
+ cwd,
112
+ ...(workspaceRoot === undefined ? {} : { explicitRoot: workspaceRoot }),
113
+ mode: 'existing',
114
+ });
115
+ const workspace = await readCatalogWorkspace(resolved.workspaceRoot, { reservedImports: CLI_RESERVED_IMPORTS });
116
+ return { resolved, workspace };
117
+ }
118
+ catch {
119
+ throw new CatalogDevSourceError('workspaceInvalid', 'Catalog Workspace is missing or invalid.');
120
+ }
121
+ }
122
+ export function catalogDevSourceError(error, fallbackCode = 'catalogDevSourceFailed') {
123
+ return codedFailure(error, fallbackCode);
124
+ }
125
+ export async function preflightCatalogDevSourceActivation(options) {
126
+ const { workspace } = await resolveWorkspace(options.cwd, options.workspaceRoot);
127
+ const status = await getCatalogStatus({
128
+ cwd: options.cwd,
129
+ workspaceRoot: workspace.workspaceRoot,
130
+ env: options.env,
131
+ });
132
+ if (options.forceBuild === true || status.snapshot.state !== 'current'
133
+ || status.snapshot.snapshotDigest === null) {
134
+ throw new CatalogDevSourceError('catalogDevBuildRequired', 'Build and Review the current Catalog snapshot before activating the development source.');
135
+ }
136
+ const configSnapshot = await readCatalogSourcesConfigSnapshot(options.env);
137
+ const owned = managedSources(configSnapshot.config.sources, workspace.workspaceIdentity);
138
+ if (owned.length > 1) {
139
+ throw new CatalogDevSourceError('multipleManagedSources', 'Workspace owns multiple development sources.');
140
+ }
141
+ const existing = owned[0];
142
+ let sourceId = options.sourceId ?? suggestedCatalogDevSourceId(workspace.workspaceRoot, workspace.workspaceIdentity, configSnapshot.config.sources.map((source) => source.id));
143
+ if (options.sourceId !== undefined) {
144
+ assertExplicitSourceId(options.sourceId);
145
+ if (existing && existing.id !== options.sourceId) {
146
+ throw new CatalogDevSourceError('sourceIdConflict', 'Workspace already owns another development source.');
147
+ }
148
+ const collision = configSnapshot.config.sources.find((source) => source.id === options.sourceId);
149
+ if (collision && collision !== existing) {
150
+ throw new CatalogDevSourceError('sourceIdConflict', 'The selected source ID is already in use.');
151
+ }
152
+ }
153
+ if (existing)
154
+ sourceId = existing.id;
155
+ const snapshotPath = path.join(workspace.workspaceRoot, DEFAULT_CATALOG_OUTPUT_PATH);
156
+ let proposedConfig = configSnapshot.config;
157
+ let sourceMutation;
158
+ let sourceImpact;
159
+ const impacts = [];
160
+ if (!existing) {
161
+ const source = {
162
+ id: sourceId,
163
+ type: 'path',
164
+ path: snapshotPath,
165
+ primary: false,
166
+ managedBy: { kind: 'catalog-workspace', workspaceIdentity: workspace.workspaceIdentity },
167
+ };
168
+ const preview = await preflightCatalogSourceMutation({
169
+ request: { action: 'add', source },
170
+ cwd: workspace.workspaceRoot,
171
+ env: options.env,
172
+ managedByWorkspaceIdentity: workspace.workspaceIdentity,
173
+ });
174
+ proposedConfig = await addCatalogSource(configSnapshot.config, source, workspace.workspaceRoot);
175
+ sourceMutation = {
176
+ proposedConfigDigest: preview.proposedConfigDigest,
177
+ impactDigest: preview.impactDigest,
178
+ };
179
+ sourceImpact = preview.references;
180
+ }
181
+ else if (existing.path !== snapshotPath) {
182
+ const preview = await preflightCatalogSourceMutation({
183
+ request: { action: 'update', sourceId, update: { type: 'path', path: snapshotPath } },
184
+ cwd: workspace.workspaceRoot,
185
+ env: options.env,
186
+ managedByWorkspaceIdentity: workspace.workspaceIdentity,
187
+ });
188
+ proposedConfig = await updateCatalogSource(configSnapshot.config, sourceId, { type: 'path', path: snapshotPath }, workspace.workspaceRoot);
189
+ sourceMutation = {
190
+ proposedConfigDigest: preview.proposedConfigDigest,
191
+ impactDigest: preview.impactDigest,
192
+ };
193
+ sourceImpact = preview.references;
194
+ }
195
+ let primaryImpactDigest;
196
+ const configured = proposedConfig.sources.find((source) => source.id === sourceId);
197
+ if (options.primary === true && !configured.primary) {
198
+ const fromSourceId = proposedConfig.sources.find((source) => source.primary)?.id;
199
+ if (!fromSourceId)
200
+ throw new CatalogDevSourceError('sourceConfigInvalid', 'Catalog primary source is missing.');
201
+ const primaryImpact = await inspectCatalogSourceImpact({
202
+ sourceId,
203
+ cwd: workspace.workspaceRoot,
204
+ env: options.env,
205
+ primaryChange: { fromSourceId, toSourceId: sourceId },
206
+ mode: 'none',
207
+ });
208
+ impacts.push(primaryImpact);
209
+ primaryImpactDigest = calculateCatalogSourceImpactDigest(primaryImpact);
210
+ proposedConfig = setPrimaryCatalogSource(proposedConfig, sourceId);
211
+ }
212
+ const intendedSource = proposedConfig.sources.find((source) => source.id === sourceId);
213
+ const probe = await probeCatalogSourceGeneration({
214
+ sourceId,
215
+ source: intendedSource,
216
+ cliVersion: options.cliVersion,
217
+ env: options.env,
218
+ });
219
+ const generationImpact = await inspectCatalogSourceImpact({
220
+ sourceId,
221
+ cwd: workspace.workspaceRoot,
222
+ env: options.env,
223
+ sourcePrimary: intendedSource.primary,
224
+ mode: 'generation',
225
+ candidateManifest: probe.manifest,
226
+ });
227
+ impacts.push(generationImpact);
228
+ const active = (await readCatalogGenerationState(options.env)).sources[sourceId]?.active ?? null;
229
+ return {
230
+ review: {
231
+ workspaceIdentity: workspace.workspaceIdentity,
232
+ snapshotDigest: status.snapshot.snapshotDigest,
233
+ sourceId,
234
+ initialConfigDigest: configSnapshot.digest,
235
+ finalConfigDigest: calculateCatalogSourcesConfigDigest(proposedConfig),
236
+ ...(sourceMutation ? { sourceMutation } : {}),
237
+ ...(primaryImpactDigest ? { primaryImpactDigest } : {}),
238
+ candidate: probe.candidate,
239
+ active,
240
+ generationImpactDigest: calculateCatalogSourceImpactDigest(generationImpact),
241
+ },
242
+ impacts,
243
+ ...(sourceImpact ? { sourceImpact } : {}),
244
+ };
245
+ }
246
+ export async function activateCatalogDevSource(options) {
247
+ const { resolved, workspace } = await resolveWorkspace(options.cwd, options.workspaceRoot);
248
+ const snapshotPath = path.join(workspace.workspaceRoot, DEFAULT_CATALOG_OUTPUT_PATH);
249
+ const staticStatus = await getCatalogStatus({
250
+ cwd: options.cwd, workspaceRoot: workspace.workspaceRoot, env: options.env,
251
+ });
252
+ let snapshotAction = 'reused';
253
+ let snapshotDigest = staticStatus.snapshot.snapshotDigest;
254
+ if (options.expectedReview) {
255
+ if (options.forceBuild === true
256
+ || staticStatus.snapshot.state !== 'current'
257
+ || snapshotDigest !== options.expectedReview.snapshotDigest
258
+ || workspace.workspaceIdentity !== options.expectedReview.workspaceIdentity) {
259
+ throw new CatalogDevSourceError('operationReviewStale', 'Catalog Workspace snapshot changed after Review. Review it again.');
260
+ }
261
+ }
262
+ if (options.forceBuild === true || staticStatus.snapshot.state !== 'current') {
263
+ try {
264
+ await runCatalogBuildCommand({
265
+ workspaceRoot: workspace.workspaceRoot,
266
+ workspaceRootResolvedFrom: resolved.workspaceRootResolvedFrom,
267
+ force: options.forceBuild === true || staticStatus.snapshot.state !== 'absent',
268
+ io: { stdout: () => undefined, stderr: () => undefined },
269
+ });
270
+ snapshotDigest = (await validateCatalogSnapshotComplete(snapshotPath)).snapshotDigest;
271
+ snapshotAction = 'built';
272
+ }
273
+ catch (error) {
274
+ return {
275
+ receiptSchemaVersion: 2, command: 'catalog:dev:activate', ok: false, state: 'failed',
276
+ workspaceIdentity: workspace.workspaceIdentity,
277
+ snapshot: { action: 'built', digest: null },
278
+ source: { id: options.sourceId ?? normalizeSuggestedSourceId(workspace.workspaceRoot), action: 'reused', primary: false },
279
+ active: { ready: false, snapshotDigest: null },
280
+ recovery: ['Fix the Catalog Workspace, then rerun catalog dev activate.'],
281
+ errors: [codedFailure(error, 'snapshotBuildFailed')],
282
+ };
283
+ }
284
+ }
285
+ let selectedId = options.sourceId ?? normalizeSuggestedSourceId(workspace.workspaceRoot);
286
+ let sourceAction = 'reused';
287
+ let sourceCommitted = false;
288
+ try {
289
+ const configSnapshot = await readCatalogSourcesConfigSnapshot(options.env);
290
+ if (options.expectedReview && configSnapshot.digest !== options.expectedReview.initialConfigDigest) {
291
+ throw new CatalogDevSourceError('operationReviewStale', 'Catalog source configuration changed after Review. Review it again.');
292
+ }
293
+ const owned = managedSources(configSnapshot.config.sources, workspace.workspaceIdentity);
294
+ if (owned.length > 1) {
295
+ throw new CatalogDevSourceError('multipleManagedSources', 'Workspace owns multiple development sources.');
296
+ }
297
+ const existing = owned[0];
298
+ if (options.sourceId !== undefined) {
299
+ assertExplicitSourceId(options.sourceId);
300
+ if (existing && existing.id !== options.sourceId) {
301
+ throw new CatalogDevSourceError('sourceIdConflict', 'Workspace already owns another development source.');
302
+ }
303
+ const collision = configSnapshot.config.sources.find((source) => source.id === options.sourceId);
304
+ if (collision && collision !== existing) {
305
+ throw new CatalogDevSourceError('sourceIdConflict', 'The selected source ID is already in use.');
306
+ }
307
+ }
308
+ else if (!existing && configSnapshot.config.sources.some((source) => source.id === selectedId)) {
309
+ selectedId = suffixedSourceId(selectedId, workspace.workspaceIdentity);
310
+ if (configSnapshot.config.sources.some((source) => source.id === selectedId)) {
311
+ throw new CatalogDevSourceError('sourceIdConflict', 'The generated development source ID is already in use.');
312
+ }
313
+ }
314
+ if (existing)
315
+ selectedId = existing.id;
316
+ if (options.expectedReview && selectedId !== options.expectedReview.sourceId) {
317
+ throw new CatalogDevSourceError('operationReviewStale', 'Catalog development source selection changed after Review.');
318
+ }
319
+ let currentConfigDigest = configSnapshot.digest;
320
+ if (!existing) {
321
+ sourceAction = 'added';
322
+ const mutation = await addCatalogSourceCommand({
323
+ source: {
324
+ id: selectedId, type: 'path', path: snapshotPath, primary: false,
325
+ managedBy: { kind: 'catalog-workspace', workspaceIdentity: workspace.workspaceIdentity },
326
+ },
327
+ cliVersion: options.cliVersion, cwd: workspace.workspaceRoot, env: options.env,
328
+ runtime: options.runtime?.sourceRuntime,
329
+ managedByWorkspaceIdentity: workspace.workspaceIdentity,
330
+ expectedConfigDigest: options.expectedReview?.initialConfigDigest,
331
+ expectedProposedConfigDigest: options.expectedReview?.sourceMutation?.proposedConfigDigest,
332
+ expectedImpactDigest: options.expectedReview?.sourceMutation?.impactDigest,
333
+ });
334
+ currentConfigDigest = mutation.configDigest ?? currentConfigDigest;
335
+ sourceCommitted = true;
336
+ }
337
+ else if (existing.path !== snapshotPath) {
338
+ sourceAction = 'updated';
339
+ const mutation = await updateCatalogSourceCommand({
340
+ sourceId: existing.id, update: { type: 'path', path: snapshotPath },
341
+ cliVersion: options.cliVersion, cwd: workspace.workspaceRoot, env: options.env,
342
+ runtime: options.runtime?.sourceRuntime,
343
+ managedByWorkspaceIdentity: workspace.workspaceIdentity,
344
+ expectedConfigDigest: options.expectedReview?.initialConfigDigest,
345
+ expectedProposedConfigDigest: options.expectedReview?.sourceMutation?.proposedConfigDigest,
346
+ expectedImpactDigest: options.expectedReview?.sourceMutation?.impactDigest,
347
+ ...(options.expectedReview ? {
348
+ requireIdentityChangeConfirmation: true,
349
+ confirmIdentityChange: options.yes === true,
350
+ } : {}),
351
+ });
352
+ currentConfigDigest = mutation.configDigest ?? currentConfigDigest;
353
+ sourceCommitted = true;
354
+ }
355
+ const current = (await readCatalogSourcesConfigSnapshot(options.env)).config.sources
356
+ .find((source) => source.id === selectedId);
357
+ if (options.primary === true && !current.primary) {
358
+ const mutation = await setPrimaryCatalogSourceCommand({
359
+ sourceId: selectedId, cwd: workspace.workspaceRoot, env: options.env,
360
+ runtime: options.runtime?.sourceRuntime,
361
+ requireImpactConfirmation: true,
362
+ confirmImpact: options.yes === true,
363
+ expectedConfigDigest: options.expectedReview ? currentConfigDigest : undefined,
364
+ expectedImpactDigest: options.expectedReview?.primaryImpactDigest,
365
+ });
366
+ currentConfigDigest = mutation.configDigest ?? currentConfigDigest;
367
+ sourceCommitted = true;
368
+ }
369
+ if (options.expectedReview && currentConfigDigest !== options.expectedReview.finalConfigDigest) {
370
+ throw new CatalogDevSourceError('operationReviewStale', 'Catalog source configuration no longer matches Review.');
371
+ }
372
+ await options.runtime?.beforeSync?.();
373
+ await syncCatalogSourceCommand({
374
+ sourceId: selectedId,
375
+ cliVersion: options.cliVersion,
376
+ cwd: workspace.workspaceRoot,
377
+ impactConfirmed: options.yes === true,
378
+ env: options.env,
379
+ expectedCandidate: options.expectedReview?.candidate,
380
+ expectedActive: options.expectedReview?.active,
381
+ expectedConfigDigest: options.expectedReview?.finalConfigDigest,
382
+ expectedImpactDigest: options.expectedReview?.generationImpactDigest,
383
+ });
384
+ await options.runtime?.afterSync?.();
385
+ const finalStatus = await getCatalogDevSourceStatus({
386
+ cwd: options.cwd,
387
+ workspaceRoot: workspace.workspaceRoot,
388
+ cliVersion: options.cliVersion,
389
+ env: options.env,
390
+ });
391
+ if (!finalStatus.ok
392
+ || !finalStatus.ready
393
+ || finalStatus.active.snapshotDigest !== snapshotDigest)
394
+ throw new CatalogDevSourceError('activeNotReady', 'Catalog development source sync completed, but final Active status is not ready.');
395
+ const configured = (await readCatalogSourcesConfigSnapshot(options.env)).config.sources
396
+ .find((source) => source.id === selectedId);
397
+ return {
398
+ receiptSchemaVersion: 2, command: 'catalog:dev:activate', ok: true, state: 'completed',
399
+ workspaceIdentity: workspace.workspaceIdentity,
400
+ snapshot: { action: snapshotAction, digest: snapshotDigest },
401
+ source: { id: selectedId, action: sourceAction, primary: configured.primary },
402
+ active: { ready: true, snapshotDigest: finalStatus.active.snapshotDigest },
403
+ recovery: [], errors: [],
404
+ };
405
+ }
406
+ catch (error) {
407
+ return {
408
+ receiptSchemaVersion: 2, command: 'catalog:dev:activate', ok: false,
409
+ state: snapshotAction === 'built' || sourceCommitted ? 'partial' : 'failed',
410
+ workspaceIdentity: workspace.workspaceIdentity,
411
+ snapshot: { action: snapshotAction, digest: snapshotDigest },
412
+ source: { id: selectedId, action: sourceAction, primary: false },
413
+ active: { ready: false, snapshotDigest: null },
414
+ recovery: ['The source configuration and snapshot were kept. Fix the problem, then rerun catalog dev activate.'],
415
+ errors: [codedFailure(error, sourceCommitted ? 'sourceSyncFailed' : 'sourceConfigFailed')],
416
+ };
417
+ }
418
+ }
419
+ export async function getCatalogDevSourceStatus(options) {
420
+ const empty = {
421
+ receiptSchemaVersion: 4, command: 'catalog:dev:status', ok: false, ready: false,
422
+ workspaceIdentity: null,
423
+ snapshot: { state: 'absent', valid: false, digest: null },
424
+ source: { exists: false, id: null, pathMatches: null, primary: null },
425
+ active: {
426
+ exists: false, ready: false, digestMatchesSnapshot: false, snapshotDigest: null,
427
+ compatibility: null,
428
+ },
429
+ issues: [],
430
+ };
431
+ let workspace;
432
+ try {
433
+ workspace = await resolveWorkspace(options.cwd, options.workspaceRoot);
434
+ }
435
+ catch (error) {
436
+ empty.issues.push({ ...codedFailure(error, 'workspaceInvalid'), blocking: true });
437
+ return empty;
438
+ }
439
+ empty.workspaceIdentity = workspace.workspace.workspaceIdentity;
440
+ const staticStatus = await getCatalogStatus({
441
+ cwd: options.cwd, workspaceRoot: workspace.workspace.workspaceRoot, env: options.env,
442
+ }).catch(() => null);
443
+ if (!staticStatus) {
444
+ empty.issues.push({ code: 'catalogStatusInvalid', message: 'Catalog snapshot status is invalid.', blocking: true });
445
+ return empty;
446
+ }
447
+ empty.snapshot = {
448
+ state: staticStatus.snapshot.state,
449
+ valid: staticStatus.snapshot.valid,
450
+ digest: staticStatus.snapshot.snapshotDigest,
451
+ };
452
+ const workspaceIssues = staticStatus.issues.filter((issue) => issue.blocking);
453
+ empty.issues.push(...workspaceIssues.map((issue) => ({
454
+ code: issue.code,
455
+ message: 'Catalog Workspace status has a blocking issue.',
456
+ blocking: true,
457
+ })));
458
+ if (staticStatus.snapshot.state !== 'current') {
459
+ empty.issues.push({
460
+ code: `snapshot${staticStatus.snapshot.state[0].toUpperCase()}${staticStatus.snapshot.state.slice(1)}`,
461
+ message: `Catalog development snapshot is ${staticStatus.snapshot.state}.`, blocking: true,
462
+ });
463
+ }
464
+ const config = await readCatalogSourcesConfigSnapshot(options.env).catch(() => null);
465
+ if (!config) {
466
+ empty.issues.push({ code: 'sourceConfigInvalid', message: 'Catalog source configuration is invalid.', blocking: true });
467
+ return empty;
468
+ }
469
+ const owned = managedSources(config.config.sources, workspace.workspace.workspaceIdentity);
470
+ if (owned.length !== 1) {
471
+ empty.issues.push({
472
+ code: owned.length === 0 ? 'sourceInactive' : 'multipleManagedSources',
473
+ message: owned.length === 0
474
+ ? 'Workspace has no configured development source.'
475
+ : 'Workspace owns multiple development sources.',
476
+ blocking: true,
477
+ });
478
+ }
479
+ const source = owned.length === 1 ? owned[0] : null;
480
+ if (source) {
481
+ const snapshotPath = path.join(workspace.workspace.workspaceRoot, DEFAULT_CATALOG_OUTPUT_PATH);
482
+ const pathMatches = source.path === snapshotPath;
483
+ empty.source = { exists: true, id: source.id, pathMatches, primary: source.primary };
484
+ if (!pathMatches) {
485
+ empty.issues.push({ code: 'sourcePathMismatch', message: 'Managed source path does not match this Workspace.', blocking: true });
486
+ }
487
+ const status = await readCatalogGenerationStatus({ sourceId: source.id, env: options.env }).catch(() => null);
488
+ const entry = status?.sources[0];
489
+ const snapshotDigest = entry?.active?.snapshotDigest ?? null;
490
+ const digestMatchesSnapshot = snapshotDigest !== null && snapshotDigest === empty.snapshot.digest;
491
+ empty.active = {
492
+ exists: entry?.active !== undefined,
493
+ ready: entry?.activeReady === true,
494
+ digestMatchesSnapshot,
495
+ snapshotDigest,
496
+ compatibility: entry?.compatibility ?? null,
497
+ };
498
+ if (!entry?.active) {
499
+ empty.issues.push({ code: 'activeAbsent', message: 'Development source has no Active snapshot.', blocking: true });
500
+ }
501
+ else if (entry.compatibility?.state === 'unsupported') {
502
+ empty.issues.push({
503
+ code: 'awCapabilityUnsupported',
504
+ message: 'Development source Active snapshot is incompatible with this AW.',
505
+ blocking: true,
506
+ });
507
+ }
508
+ else if (!entry.activeReady) {
509
+ empty.issues.push({ code: entry.errorCode ?? 'activeNotReady', message: 'Development source Active snapshot is not ready.', blocking: true });
510
+ }
511
+ if (entry?.active && !digestMatchesSnapshot) {
512
+ empty.issues.push({ code: 'activeSnapshotDigestMismatch', message: 'Active digest does not match the Workspace snapshot.', blocking: true });
513
+ }
514
+ }
515
+ empty.ok = true;
516
+ empty.ready = empty.snapshot.state === 'current'
517
+ && staticStatus.ok
518
+ && workspaceIssues.length === 0
519
+ && source !== null
520
+ && empty.source.pathMatches === true
521
+ && empty.active.ready
522
+ && empty.active.digestMatchesSnapshot;
523
+ return empty;
524
+ }
525
+ export async function deactivateCatalogDevSource(options) {
526
+ if (options.workspaceRoot !== undefined && options.sourceId !== undefined) {
527
+ throw new CatalogDevSourceError('invalidArguments', '--workspace-root and --source-id are mutually exclusive.');
528
+ }
529
+ const config = await readCatalogSourcesConfigSnapshot(options.env).catch(() => {
530
+ throw new CatalogDevSourceError('sourceConfigInvalid', 'Catalog source configuration is invalid.');
531
+ });
532
+ let source;
533
+ let workspaceIdentity;
534
+ let workspaceRoot;
535
+ if (options.sourceId !== undefined) {
536
+ assertExplicitSourceId(options.sourceId);
537
+ const configuredSource = config.config.sources.find((entry) => entry.id === options.sourceId);
538
+ if (configuredSource?.type !== 'path' || configuredSource.managedBy?.kind !== 'catalog-workspace') {
539
+ throw new CatalogDevSourceError('managedSourceNotFound', 'The source is not a Workspace-managed path source.');
540
+ }
541
+ source = configuredSource;
542
+ workspaceIdentity = configuredSource.managedBy.workspaceIdentity;
543
+ workspaceRoot = options.cwd;
544
+ }
545
+ else {
546
+ const resolved = await resolveWorkspace(options.cwd, options.workspaceRoot);
547
+ workspaceIdentity = resolved.workspace.workspaceIdentity;
548
+ workspaceRoot = resolved.workspace.workspaceRoot;
549
+ const owned = managedSources(config.config.sources, workspaceIdentity);
550
+ if (owned.length > 1) {
551
+ throw new CatalogDevSourceError('multipleManagedSources', 'Workspace owns multiple development sources.');
552
+ }
553
+ source = owned[0];
554
+ }
555
+ if (!source) {
556
+ return {
557
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: true, state: 'completed',
558
+ workspaceIdentity, source: { id: null, action: 'absent', previousPrimary: false },
559
+ replacementPrimarySourceId: null, impact: null, recovery: [], errors: [],
560
+ };
561
+ }
562
+ let replacementPrimarySourceId = null;
563
+ if (source.primary) {
564
+ const others = config.config.sources.filter((entry) => entry.id !== source.id);
565
+ const requested = options.replacementPrimary === undefined
566
+ ? others.find(isDefaultOfficialCatalogSource)
567
+ ?? (others.length === 1 ? others[0] : undefined)
568
+ : others.find((entry) => entry.id === options.replacementPrimary);
569
+ if (!requested) {
570
+ return {
571
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: false, state: 'failed',
572
+ workspaceIdentity, source: { id: source.id, action: 'retained', previousPrimary: true },
573
+ replacementPrimarySourceId: null,
574
+ impact: null,
575
+ recovery: ['Select an existing replacement primary source.'],
576
+ errors: [{ code: 'replacementPrimaryUnavailable', message: 'A replacement primary source is required.' }],
577
+ };
578
+ }
579
+ replacementPrimarySourceId = requested.id;
580
+ }
581
+ else if (options.replacementPrimary !== undefined) {
582
+ throw new CatalogDevSourceError('replacementPrimaryInvalid', '--replacement-primary requires a primary target source.');
583
+ }
584
+ const preview = await preflightCatalogSourceMutation({
585
+ request: {
586
+ action: 'remove',
587
+ sourceId: source.id,
588
+ ...(replacementPrimarySourceId === null ? {} : { replacementPrimarySourceId }),
589
+ },
590
+ cwd: workspaceRoot,
591
+ env: options.env,
592
+ managedByWorkspaceIdentity: workspaceIdentity,
593
+ });
594
+ const impact = preview.references;
595
+ if (options.sourceId !== undefined && options.yes !== true) {
596
+ return {
597
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: false, state: 'failed',
598
+ workspaceIdentity,
599
+ source: { id: source.id, action: 'retained', previousPrimary: source.primary },
600
+ replacementPrimarySourceId,
601
+ impact,
602
+ recovery: ['Rerun with --source-id and --yes.'],
603
+ errors: [{ code: 'confirmationRequired', message: 'Recovery by source ID requires --yes.' }],
604
+ };
605
+ }
606
+ if ((!impact.inventoryComplete || impact.references.length > 0) && options.yes !== true) {
607
+ return {
608
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: false, state: 'failed',
609
+ workspaceIdentity,
610
+ source: { id: source.id, action: 'retained', previousPrimary: source.primary },
611
+ replacementPrimarySourceId,
612
+ impact,
613
+ recovery: ['Review the source impact, then rerun catalog dev deactivate with --yes.'],
614
+ errors: [{
615
+ code: 'catalogSourceImpactConfirmationRequired',
616
+ message: 'Affected or unknown Catalog source references require --yes.',
617
+ }],
618
+ };
619
+ }
620
+ try {
621
+ await removeCatalogSourceCommand({
622
+ sourceId: source.id, cwd: workspaceRoot, env: options.env,
623
+ runtime: options.runtime?.sourceRuntime,
624
+ managedByWorkspaceIdentity: workspaceIdentity,
625
+ expectedConfigDigest: preview.configDigest,
626
+ expectedImpactDigest: preview.impactDigest,
627
+ requireImpactConfirmation: true,
628
+ confirmImpact: options.yes === true,
629
+ ...(replacementPrimarySourceId === null ? {} : { replacementPrimarySourceId }),
630
+ });
631
+ return {
632
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: true, state: 'completed',
633
+ workspaceIdentity, source: { id: source.id, action: 'removed', previousPrimary: source.primary },
634
+ replacementPrimarySourceId, impact, recovery: [], errors: [],
635
+ };
636
+ }
637
+ catch (error) {
638
+ const after = await readCatalogSourcesConfigSnapshot(options.env).catch(() => null);
639
+ const stillExists = after?.config.sources.some((entry) => entry.id === source.id) ?? true;
640
+ const configChanged = after !== null && after.digest !== preview.configDigest;
641
+ const stale = error instanceof CatalogSourcesConfigConflictError || configChanged;
642
+ return {
643
+ receiptSchemaVersion: 4, command: 'catalog:dev:deactivate', ok: false,
644
+ state: stale ? 'failed' : !stillExists ? 'partial' : 'failed', workspaceIdentity,
645
+ source: { id: source.id, action: stillExists ? 'retained' : 'removed', previousPrimary: source.primary },
646
+ replacementPrimarySourceId,
647
+ impact: failureImpact(error, impact),
648
+ recovery: ['Fix the source configuration, then rerun catalog dev deactivate.'],
649
+ errors: [stale
650
+ ? { code: 'operationReviewStale', message: 'Catalog source evidence changed. Review it again.' }
651
+ : codedFailure(error, 'sourceConfigFailed')],
652
+ };
653
+ }
654
+ }
655
+ //# sourceMappingURL=catalog-dev-source.js.map