@lesliechan721/aw 0.1.0-beta.10

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 (508) hide show
  1. package/dist/authoring/assets/aw-config.d.mts +51 -0
  2. package/dist/authoring/assets/aw-config.mjs +1025 -0
  3. package/dist/authoring/assets/aw-config.mjs.map +1 -0
  4. package/dist/authoring/scripts/add-skill.d.mts +2 -0
  5. package/dist/authoring/scripts/add-skill.mjs +355 -0
  6. package/dist/authoring/scripts/add-skill.mjs.map +1 -0
  7. package/dist/authoring/scripts/init-plugin.d.mts +2 -0
  8. package/dist/authoring/scripts/init-plugin.mjs +487 -0
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -0
  10. package/dist/authoring/scripts/lib/javascript-import-scanner.d.mts +4 -0
  11. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs +261 -0
  12. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs.map +1 -0
  13. package/dist/authoring/scripts/lib/plugin-root.d.mts +26 -0
  14. package/dist/authoring/scripts/lib/plugin-root.mjs +125 -0
  15. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -0
  16. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +69 -0
  17. package/dist/authoring/scripts/lib/plugin-version-check.mjs +563 -0
  18. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -0
  19. package/dist/authoring/scripts/lib/semver.d.mts +9 -0
  20. package/dist/authoring/scripts/lib/semver.mjs +63 -0
  21. package/dist/authoring/scripts/lib/semver.mjs.map +1 -0
  22. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +111 -0
  23. package/dist/authoring/scripts/lib/skill-scaffold.mjs +353 -0
  24. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -0
  25. package/dist/authoring/scripts/plugin-status.d.mts +2 -0
  26. package/dist/authoring/scripts/plugin-status.mjs +93 -0
  27. package/dist/authoring/scripts/plugin-status.mjs.map +1 -0
  28. package/dist/authoring/scripts/remove-plugin.d.mts +2 -0
  29. package/dist/authoring/scripts/remove-plugin.mjs +367 -0
  30. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -0
  31. package/dist/authoring/scripts/validate-plugin.d.mts +2 -0
  32. package/dist/authoring/scripts/validate-plugin.mjs +3465 -0
  33. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -0
  34. package/dist/authoring/scripts/validate-skill.d.mts +2 -0
  35. package/dist/authoring/scripts/validate-skill.mjs +126 -0
  36. package/dist/authoring/scripts/validate-skill.mjs.map +1 -0
  37. package/dist/authoring/templates/aw-config-runtime.d.mts +2 -0
  38. package/dist/authoring/templates/aw-config-runtime.mjs +407 -0
  39. package/dist/authoring/templates/aw-config-runtime.mjs.map +1 -0
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.js +8 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/scripts/aw-skill-eval-materializer.d.ts +24 -0
  44. package/dist/scripts/aw-skill-eval-materializer.js +309 -0
  45. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  46. package/dist/scripts/bundle-plugins.d.ts +17 -0
  47. package/dist/scripts/bundle-plugins.js +126 -0
  48. package/dist/scripts/bundle-plugins.js.map +1 -0
  49. package/dist/scripts/plugin-staging.d.ts +26 -0
  50. package/dist/scripts/plugin-staging.js +76 -0
  51. package/dist/scripts/plugin-staging.js.map +1 -0
  52. package/dist/scripts/test-plugin-scripts.d.ts +7 -0
  53. package/dist/scripts/test-plugin-scripts.js +610 -0
  54. package/dist/scripts/test-plugin-scripts.js.map +1 -0
  55. package/dist/src/adapters/helpers.d.ts +44 -0
  56. package/dist/src/adapters/helpers.js +95 -0
  57. package/dist/src/adapters/helpers.js.map +1 -0
  58. package/dist/src/authoring/workspace-commands.d.ts +70 -0
  59. package/dist/src/authoring/workspace-commands.js +158 -0
  60. package/dist/src/authoring/workspace-commands.js.map +1 -0
  61. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  62. package/dist/src/commands/aw-capabilities.js +254 -0
  63. package/dist/src/commands/aw-capabilities.js.map +1 -0
  64. package/dist/src/commands/catalog-dev-source.d.ts +120 -0
  65. package/dist/src/commands/catalog-dev-source.js +434 -0
  66. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  67. package/dist/src/commands/catalog-generation.d.ts +16 -0
  68. package/dist/src/commands/catalog-generation.js +9 -0
  69. package/dist/src/commands/catalog-generation.js.map +1 -0
  70. package/dist/src/commands/catalog-publication-inspection.d.ts +138 -0
  71. package/dist/src/commands/catalog-publication-inspection.js +711 -0
  72. package/dist/src/commands/catalog-publication-inspection.js.map +1 -0
  73. package/dist/src/commands/catalog-publication-journal.d.ts +56 -0
  74. package/dist/src/commands/catalog-publication-journal.js +215 -0
  75. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  76. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  77. package/dist/src/commands/catalog-publication-target.js +95 -0
  78. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  79. package/dist/src/commands/catalog-publish.d.ts +103 -0
  80. package/dist/src/commands/catalog-publish.js +804 -0
  81. package/dist/src/commands/catalog-publish.js.map +1 -0
  82. package/dist/src/commands/catalog-source.d.ts +134 -0
  83. package/dist/src/commands/catalog-source.js +377 -0
  84. package/dist/src/commands/catalog-source.js.map +1 -0
  85. package/dist/src/commands/catalog-status.d.ts +56 -0
  86. package/dist/src/commands/catalog-status.js +217 -0
  87. package/dist/src/commands/catalog-status.js.map +1 -0
  88. package/dist/src/commands/catalog-store.d.ts +80 -0
  89. package/dist/src/commands/catalog-store.js +348 -0
  90. package/dist/src/commands/catalog-store.js.map +1 -0
  91. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  92. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  93. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  94. package/dist/src/commands/console.d.ts +3 -0
  95. package/dist/src/commands/console.js +44 -0
  96. package/dist/src/commands/console.js.map +1 -0
  97. package/dist/src/commands/dependency-operation-plan.d.ts +58 -0
  98. package/dist/src/commands/dependency-operation-plan.js +261 -0
  99. package/dist/src/commands/dependency-operation-plan.js.map +1 -0
  100. package/dist/src/commands/init.d.ts +25 -0
  101. package/dist/src/commands/init.js +42 -0
  102. package/dist/src/commands/init.js.map +1 -0
  103. package/dist/src/commands/offline-cleanup-evidence.d.ts +59 -0
  104. package/dist/src/commands/offline-cleanup-evidence.js +163 -0
  105. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  106. package/dist/src/commands/operation-plan.d.ts +126 -0
  107. package/dist/src/commands/operation-plan.js +47 -0
  108. package/dist/src/commands/operation-plan.js.map +1 -0
  109. package/dist/src/commands/operation-planner.d.ts +46 -0
  110. package/dist/src/commands/operation-planner.js +139 -0
  111. package/dist/src/commands/operation-planner.js.map +1 -0
  112. package/dist/src/commands/options.d.ts +70 -0
  113. package/dist/src/commands/options.js +194 -0
  114. package/dist/src/commands/options.js.map +1 -0
  115. package/dist/src/commands/plugin-capabilities.d.ts +22 -0
  116. package/dist/src/commands/plugin-capabilities.js +159 -0
  117. package/dist/src/commands/plugin-capabilities.js.map +1 -0
  118. package/dist/src/commands/rebuild-command.d.ts +88 -0
  119. package/dist/src/commands/rebuild-command.js +3626 -0
  120. package/dist/src/commands/rebuild-command.js.map +1 -0
  121. package/dist/src/commands/rebuild-integration.d.ts +190 -0
  122. package/dist/src/commands/rebuild-integration.js +4439 -0
  123. package/dist/src/commands/rebuild-integration.js.map +1 -0
  124. package/dist/src/commands/rebuild-operations.d.ts +100 -0
  125. package/dist/src/commands/rebuild-operations.js +625 -0
  126. package/dist/src/commands/rebuild-operations.js.map +1 -0
  127. package/dist/src/commands/reconcile-operation-plan.d.ts +26 -0
  128. package/dist/src/commands/reconcile-operation-plan.js +28 -0
  129. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  130. package/dist/src/commands/review-publication.d.ts +99 -0
  131. package/dist/src/commands/review-publication.js +904 -0
  132. package/dist/src/commands/review-publication.js.map +1 -0
  133. package/dist/src/commands/runtime.d.ts +172 -0
  134. package/dist/src/commands/runtime.js +720 -0
  135. package/dist/src/commands/runtime.js.map +1 -0
  136. package/dist/src/commands/skill-eval.d.ts +33 -0
  137. package/dist/src/commands/skill-eval.js +363 -0
  138. package/dist/src/commands/skill-eval.js.map +1 -0
  139. package/dist/src/commands/status-v6.d.ts +206 -0
  140. package/dist/src/commands/status-v6.js +2175 -0
  141. package/dist/src/commands/status-v6.js.map +1 -0
  142. package/dist/src/commands/sync-command.d.ts +23 -0
  143. package/dist/src/commands/sync-command.js +242 -0
  144. package/dist/src/commands/sync-command.js.map +1 -0
  145. package/dist/src/commands/wizard.d.ts +56 -0
  146. package/dist/src/commands/wizard.js +58 -0
  147. package/dist/src/commands/wizard.js.map +1 -0
  148. package/dist/src/commands/write-commands.d.ts +7 -0
  149. package/dist/src/commands/write-commands.js +190 -0
  150. package/dist/src/commands/write-commands.js.map +1 -0
  151. package/dist/src/constants.d.ts +31 -0
  152. package/dist/src/constants.js +32 -0
  153. package/dist/src/constants.js.map +1 -0
  154. package/dist/src/eval/manifest-v1.d.ts +67 -0
  155. package/dist/src/eval/manifest-v1.js +347 -0
  156. package/dist/src/eval/manifest-v1.js.map +1 -0
  157. package/dist/src/generators/agents.d.ts +3 -0
  158. package/dist/src/generators/agents.js +46 -0
  159. package/dist/src/generators/agents.js.map +1 -0
  160. package/dist/src/generators/hooks.d.ts +15 -0
  161. package/dist/src/generators/hooks.js +76 -0
  162. package/dist/src/generators/hooks.js.map +1 -0
  163. package/dist/src/generators/instructions.d.ts +13 -0
  164. package/dist/src/generators/instructions.js +66 -0
  165. package/dist/src/generators/instructions.js.map +1 -0
  166. package/dist/src/generators/local-plugin.d.ts +56 -0
  167. package/dist/src/generators/local-plugin.js +1373 -0
  168. package/dist/src/generators/local-plugin.js.map +1 -0
  169. package/dist/src/generators/permissions.d.ts +10 -0
  170. package/dist/src/generators/permissions.js +37 -0
  171. package/dist/src/generators/permissions.js.map +1 -0
  172. package/dist/src/generators/shared.d.ts +2 -0
  173. package/dist/src/generators/shared.js +15 -0
  174. package/dist/src/generators/shared.js.map +1 -0
  175. package/dist/src/index.d.ts +41 -0
  176. package/dist/src/index.js +3327 -0
  177. package/dist/src/index.js.map +1 -0
  178. package/dist/src/output/command-receipt.d.ts +87 -0
  179. package/dist/src/output/command-receipt.js +302 -0
  180. package/dist/src/output/command-receipt.js.map +1 -0
  181. package/dist/src/output/debug-log.d.ts +4 -0
  182. package/dist/src/output/debug-log.js +97 -0
  183. package/dist/src/output/debug-log.js.map +1 -0
  184. package/dist/src/output/equivalent-command.d.ts +9 -0
  185. package/dist/src/output/equivalent-command.js +39 -0
  186. package/dist/src/output/equivalent-command.js.map +1 -0
  187. package/dist/src/output/model.d.ts +76 -0
  188. package/dist/src/output/model.js +2 -0
  189. package/dist/src/output/model.js.map +1 -0
  190. package/dist/src/output/rebuild-progress.d.ts +21 -0
  191. package/dist/src/output/rebuild-progress.js +128 -0
  192. package/dist/src/output/rebuild-progress.js.map +1 -0
  193. package/dist/src/output/redact.d.ts +3 -0
  194. package/dist/src/output/redact.js +39 -0
  195. package/dist/src/output/redact.js.map +1 -0
  196. package/dist/src/output/reporter.d.ts +9 -0
  197. package/dist/src/output/reporter.js +133 -0
  198. package/dist/src/output/reporter.js.map +1 -0
  199. package/dist/src/portable/commands.d.ts +124 -0
  200. package/dist/src/portable/commands.js +557 -0
  201. package/dist/src/portable/commands.js.map +1 -0
  202. package/dist/src/portable/materializer.d.ts +50 -0
  203. package/dist/src/portable/materializer.js +462 -0
  204. package/dist/src/portable/materializer.js.map +1 -0
  205. package/dist/src/portable/skills-cli.d.ts +43 -0
  206. package/dist/src/portable/skills-cli.js +148 -0
  207. package/dist/src/portable/skills-cli.js.map +1 -0
  208. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  209. package/dist/src/tui/catalog-freshness.js +2 -0
  210. package/dist/src/tui/catalog-freshness.js.map +1 -0
  211. package/dist/src/tui/catalog-generation.d.ts +21 -0
  212. package/dist/src/tui/catalog-generation.js +116 -0
  213. package/dist/src/tui/catalog-generation.js.map +1 -0
  214. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  215. package/dist/src/tui/catalog-sources/projection.js +17 -0
  216. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  217. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  218. package/dist/src/tui/catalog-sources/review.js +13 -0
  219. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  220. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  221. package/dist/src/tui/catalog-sources/screens.js +33 -0
  222. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  223. package/dist/src/tui/catalog-sources/session.d.ts +22 -0
  224. package/dist/src/tui/catalog-sources/session.js +225 -0
  225. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  226. package/dist/src/tui/catalog-sources/types.d.ts +41 -0
  227. package/dist/src/tui/catalog-sources/types.js +2 -0
  228. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  229. package/dist/src/tui/components.d.ts +102 -0
  230. package/dist/src/tui/components.js +184 -0
  231. package/dist/src/tui/components.js.map +1 -0
  232. package/dist/src/tui/console-app-v4.d.ts +20 -0
  233. package/dist/src/tui/console-app-v4.js +5066 -0
  234. package/dist/src/tui/console-app-v4.js.map +1 -0
  235. package/dist/src/tui/controller-runtime.d.ts +23 -0
  236. package/dist/src/tui/controller-runtime.js +2011 -0
  237. package/dist/src/tui/controller-runtime.js.map +1 -0
  238. package/dist/src/tui/controller.d.ts +557 -0
  239. package/dist/src/tui/controller.js +2120 -0
  240. package/dist/src/tui/controller.js.map +1 -0
  241. package/dist/src/tui/diagnostics.d.ts +30 -0
  242. package/dist/src/tui/diagnostics.js +71 -0
  243. package/dist/src/tui/diagnostics.js.map +1 -0
  244. package/dist/src/tui/index.d.ts +17 -0
  245. package/dist/src/tui/index.js +17 -0
  246. package/dist/src/tui/index.js.map +1 -0
  247. package/dist/src/tui/input-display.d.ts +8 -0
  248. package/dist/src/tui/input-display.js +36 -0
  249. package/dist/src/tui/input-display.js.map +1 -0
  250. package/dist/src/tui/keys.d.ts +12 -0
  251. package/dist/src/tui/keys.js +22 -0
  252. package/dist/src/tui/keys.js.map +1 -0
  253. package/dist/src/tui/layout.d.ts +12 -0
  254. package/dist/src/tui/layout.js +19 -0
  255. package/dist/src/tui/layout.js.map +1 -0
  256. package/dist/src/tui/model.d.ts +424 -0
  257. package/dist/src/tui/model.js +1493 -0
  258. package/dist/src/tui/model.js.map +1 -0
  259. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  260. package/dist/src/tui/operation-review-planner.js +622 -0
  261. package/dist/src/tui/operation-review-planner.js.map +1 -0
  262. package/dist/src/tui/prompt.d.ts +8 -0
  263. package/dist/src/tui/prompt.js +231 -0
  264. package/dist/src/tui/prompt.js.map +1 -0
  265. package/dist/src/tui/router.d.ts +206 -0
  266. package/dist/src/tui/router.js +137 -0
  267. package/dist/src/tui/router.js.map +1 -0
  268. package/dist/src/tui/runner.d.ts +11 -0
  269. package/dist/src/tui/runner.js +71 -0
  270. package/dist/src/tui/runner.js.map +1 -0
  271. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  272. package/dist/src/tui/source-ref-presets.js +11 -0
  273. package/dist/src/tui/source-ref-presets.js.map +1 -0
  274. package/dist/src/tui/theme.d.ts +26 -0
  275. package/dist/src/tui/theme.js +28 -0
  276. package/dist/src/tui/theme.js.map +1 -0
  277. package/dist/src/tui/viewport.d.ts +20 -0
  278. package/dist/src/tui/viewport.js +29 -0
  279. package/dist/src/tui/viewport.js.map +1 -0
  280. package/dist/src/tui/views.d.ts +57 -0
  281. package/dist/src/tui/views.js +201 -0
  282. package/dist/src/tui/views.js.map +1 -0
  283. package/dist/src/tui/wizard.d.ts +11 -0
  284. package/dist/src/tui/wizard.js +323 -0
  285. package/dist/src/tui/wizard.js.map +1 -0
  286. package/dist/src/types.d.ts +474 -0
  287. package/dist/src/types.js +34 -0
  288. package/dist/src/types.js.map +1 -0
  289. package/dist/src/utils/agent-version.d.ts +19 -0
  290. package/dist/src/utils/agent-version.js +205 -0
  291. package/dist/src/utils/agent-version.js.map +1 -0
  292. package/dist/src/utils/artifact-plan.d.ts +27 -0
  293. package/dist/src/utils/artifact-plan.js +453 -0
  294. package/dist/src/utils/artifact-plan.js.map +1 -0
  295. package/dist/src/utils/artifact-renderer.d.ts +129 -0
  296. package/dist/src/utils/artifact-renderer.js +400 -0
  297. package/dist/src/utils/artifact-renderer.js.map +1 -0
  298. package/dist/src/utils/artifact-request.d.ts +16 -0
  299. package/dist/src/utils/artifact-request.js +42 -0
  300. package/dist/src/utils/artifact-request.js.map +1 -0
  301. package/dist/src/utils/artifact-sources.d.ts +8 -0
  302. package/dist/src/utils/artifact-sources.js +10 -0
  303. package/dist/src/utils/artifact-sources.js.map +1 -0
  304. package/dist/src/utils/aw-home-mutation-lock.d.ts +11 -0
  305. package/dist/src/utils/aw-home-mutation-lock.js +83 -0
  306. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -0
  307. package/dist/src/utils/bundle-integrity.d.ts +2 -0
  308. package/dist/src/utils/bundle-integrity.js +63 -0
  309. package/dist/src/utils/bundle-integrity.js.map +1 -0
  310. package/dist/src/utils/bundle-layout.d.ts +4 -0
  311. package/dist/src/utils/bundle-layout.js +531 -0
  312. package/dist/src/utils/bundle-layout.js.map +1 -0
  313. package/dist/src/utils/catalog-digests.d.ts +18 -0
  314. package/dist/src/utils/catalog-digests.js +156 -0
  315. package/dist/src/utils/catalog-digests.js.map +1 -0
  316. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  317. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  318. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  319. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  320. package/dist/src/utils/catalog-generation-error.js +30 -0
  321. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  322. package/dist/src/utils/catalog-generation-resolver.d.ts +32 -0
  323. package/dist/src/utils/catalog-generation-resolver.js +251 -0
  324. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  325. package/dist/src/utils/catalog-generation-service.d.ts +161 -0
  326. package/dist/src/utils/catalog-generation-service.js +1237 -0
  327. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  328. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  329. package/dist/src/utils/catalog-generation-state.js +192 -0
  330. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  331. package/dist/src/utils/catalog-generation-store.d.ts +57 -0
  332. package/dist/src/utils/catalog-generation-store.js +397 -0
  333. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  334. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  335. package/dist/src/utils/catalog-manifest-v7.js +98 -0
  336. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  337. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  338. package/dist/src/utils/catalog-operation-context.js +141 -0
  339. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  340. package/dist/src/utils/catalog-public-error.d.ts +19 -0
  341. package/dist/src/utils/catalog-public-error.js +100 -0
  342. package/dist/src/utils/catalog-public-error.js.map +1 -0
  343. package/dist/src/utils/catalog-runtime-projection.d.ts +33 -0
  344. package/dist/src/utils/catalog-runtime-projection.js +77 -0
  345. package/dist/src/utils/catalog-runtime-projection.js.map +1 -0
  346. package/dist/src/utils/catalog-snapshot.d.ts +10 -0
  347. package/dist/src/utils/catalog-snapshot.js +20 -0
  348. package/dist/src/utils/catalog-snapshot.js.map +1 -0
  349. package/dist/src/utils/catalog-source-identity.d.ts +5 -0
  350. package/dist/src/utils/catalog-source-identity.js +137 -0
  351. package/dist/src/utils/catalog-source-identity.js.map +1 -0
  352. package/dist/src/utils/catalog-source-impact.d.ts +20 -0
  353. package/dist/src/utils/catalog-source-impact.js +222 -0
  354. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  355. package/dist/src/utils/catalog-source-presentation.d.ts +1 -0
  356. package/dist/src/utils/catalog-source-presentation.js +32 -0
  357. package/dist/src/utils/catalog-source-presentation.js.map +1 -0
  358. package/dist/src/utils/catalog-source-references.d.ts +66 -0
  359. package/dist/src/utils/catalog-source-references.js +1180 -0
  360. package/dist/src/utils/catalog-source-references.js.map +1 -0
  361. package/dist/src/utils/catalog-sources.d.ts +53 -0
  362. package/dist/src/utils/catalog-sources.js +456 -0
  363. package/dist/src/utils/catalog-sources.js.map +1 -0
  364. package/dist/src/utils/codex-config.d.ts +126 -0
  365. package/dist/src/utils/codex-config.js +1032 -0
  366. package/dist/src/utils/codex-config.js.map +1 -0
  367. package/dist/src/utils/codex-manager.d.ts +81 -0
  368. package/dist/src/utils/codex-manager.js +810 -0
  369. package/dist/src/utils/codex-manager.js.map +1 -0
  370. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  371. package/dist/src/utils/codex-marketplace-path.js +45 -0
  372. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  373. package/dist/src/utils/codex-native-observation.d.ts +16 -0
  374. package/dist/src/utils/codex-native-observation.js +22 -0
  375. package/dist/src/utils/codex-native-observation.js.map +1 -0
  376. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  377. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  378. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  379. package/dist/src/utils/codex-reconciler.d.ts +128 -0
  380. package/dist/src/utils/codex-reconciler.js +294 -0
  381. package/dist/src/utils/codex-reconciler.js.map +1 -0
  382. package/dist/src/utils/codex-roles.d.ts +71 -0
  383. package/dist/src/utils/codex-roles.js +257 -0
  384. package/dist/src/utils/codex-roles.js.map +1 -0
  385. package/dist/src/utils/codex-shared-native.d.ts +63 -0
  386. package/dist/src/utils/codex-shared-native.js +142 -0
  387. package/dist/src/utils/codex-shared-native.js.map +1 -0
  388. package/dist/src/utils/codex-skill-staging.d.ts +11 -0
  389. package/dist/src/utils/codex-skill-staging.js +8 -0
  390. package/dist/src/utils/codex-skill-staging.js.map +1 -0
  391. package/dist/src/utils/codex-surface-analysis.d.ts +45 -0
  392. package/dist/src/utils/codex-surface-analysis.js +245 -0
  393. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  394. package/dist/src/utils/config-value.d.ts +3 -0
  395. package/dist/src/utils/config-value.js +23 -0
  396. package/dist/src/utils/config-value.js.map +1 -0
  397. package/dist/src/utils/dynamic-skill-tree.d.ts +36 -0
  398. package/dist/src/utils/dynamic-skill-tree.js +466 -0
  399. package/dist/src/utils/dynamic-skill-tree.js.map +1 -0
  400. package/dist/src/utils/file-rules.d.ts +1 -0
  401. package/dist/src/utils/file-rules.js +2 -0
  402. package/dist/src/utils/file-rules.js.map +1 -0
  403. package/dist/src/utils/git-catalog-provider.d.ts +22 -0
  404. package/dist/src/utils/git-catalog-provider.js +497 -0
  405. package/dist/src/utils/git-catalog-provider.js.map +1 -0
  406. package/dist/src/utils/hooks-contract.d.ts +1 -0
  407. package/dist/src/utils/hooks-contract.js +2 -0
  408. package/dist/src/utils/hooks-contract.js.map +1 -0
  409. package/dist/src/utils/json.d.ts +4 -0
  410. package/dist/src/utils/json.js +29 -0
  411. package/dist/src/utils/json.js.map +1 -0
  412. package/dist/src/utils/local-marketplace.d.ts +41 -0
  413. package/dist/src/utils/local-marketplace.js +316 -0
  414. package/dist/src/utils/local-marketplace.js.map +1 -0
  415. package/dist/src/utils/manifest.d.ts +11 -0
  416. package/dist/src/utils/manifest.js +33 -0
  417. package/dist/src/utils/manifest.js.map +1 -0
  418. package/dist/src/utils/marketplace.d.ts +3 -0
  419. package/dist/src/utils/marketplace.js +76 -0
  420. package/dist/src/utils/marketplace.js.map +1 -0
  421. package/dist/src/utils/multi-source-catalog.d.ts +66 -0
  422. package/dist/src/utils/multi-source-catalog.js +345 -0
  423. package/dist/src/utils/multi-source-catalog.js.map +1 -0
  424. package/dist/src/utils/native-cli.d.ts +118 -0
  425. package/dist/src/utils/native-cli.js +518 -0
  426. package/dist/src/utils/native-cli.js.map +1 -0
  427. package/dist/src/utils/orphan-marketplace-cleanup.d.ts +18 -0
  428. package/dist/src/utils/orphan-marketplace-cleanup.js +198 -0
  429. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -0
  430. package/dist/src/utils/ownership.d.ts +194 -0
  431. package/dist/src/utils/ownership.js +723 -0
  432. package/dist/src/utils/ownership.js.map +1 -0
  433. package/dist/src/utils/path-catalog-provider.d.ts +7 -0
  434. package/dist/src/utils/path-catalog-provider.js +74 -0
  435. package/dist/src/utils/path-catalog-provider.js.map +1 -0
  436. package/dist/src/utils/paths.d.ts +40 -0
  437. package/dist/src/utils/paths.js +137 -0
  438. package/dist/src/utils/paths.js.map +1 -0
  439. package/dist/src/utils/platform-entries.d.ts +1 -0
  440. package/dist/src/utils/platform-entries.js +2 -0
  441. package/dist/src/utils/platform-entries.js.map +1 -0
  442. package/dist/src/utils/platform-support.d.ts +1 -0
  443. package/dist/src/utils/platform-support.js +2 -0
  444. package/dist/src/utils/platform-support.js.map +1 -0
  445. package/dist/src/utils/plugin-config-write.d.ts +110 -0
  446. package/dist/src/utils/plugin-config-write.js +773 -0
  447. package/dist/src/utils/plugin-config-write.js.map +1 -0
  448. package/dist/src/utils/plugin-config.d.ts +389 -0
  449. package/dist/src/utils/plugin-config.js +1642 -0
  450. package/dist/src/utils/plugin-config.js.map +1 -0
  451. package/dist/src/utils/plugin-dependencies.d.ts +12 -0
  452. package/dist/src/utils/plugin-dependencies.js +162 -0
  453. package/dist/src/utils/plugin-dependencies.js.map +1 -0
  454. package/dist/src/utils/plugin-intent-state.d.ts +34 -0
  455. package/dist/src/utils/plugin-intent-state.js +289 -0
  456. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  457. package/dist/src/utils/plugin-script-contract.d.ts +1 -0
  458. package/dist/src/utils/plugin-script-contract.js +2 -0
  459. package/dist/src/utils/plugin-script-contract.js.map +1 -0
  460. package/dist/src/utils/plugin-scripts.d.ts +101 -0
  461. package/dist/src/utils/plugin-scripts.js +253 -0
  462. package/dist/src/utils/plugin-scripts.js.map +1 -0
  463. package/dist/src/utils/process-lock.d.ts +47 -0
  464. package/dist/src/utils/process-lock.js +532 -0
  465. package/dist/src/utils/process-lock.js.map +1 -0
  466. package/dist/src/utils/process-tree.d.ts +2 -0
  467. package/dist/src/utils/process-tree.js +2 -0
  468. package/dist/src/utils/process-tree.js.map +1 -0
  469. package/dist/src/utils/project-boundary.d.ts +9 -0
  470. package/dist/src/utils/project-boundary.js +67 -0
  471. package/dist/src/utils/project-boundary.js.map +1 -0
  472. package/dist/src/utils/rendered-contract.d.ts +8 -0
  473. package/dist/src/utils/rendered-contract.js +134 -0
  474. package/dist/src/utils/rendered-contract.js.map +1 -0
  475. package/dist/src/utils/runtime-skill-closure.d.ts +13 -0
  476. package/dist/src/utils/runtime-skill-closure.js +863 -0
  477. package/dist/src/utils/runtime-skill-closure.js.map +1 -0
  478. package/dist/src/utils/safe-fs.d.ts +21 -0
  479. package/dist/src/utils/safe-fs.js +111 -0
  480. package/dist/src/utils/safe-fs.js.map +1 -0
  481. package/dist/src/utils/skill-authoring.d.ts +1 -0
  482. package/dist/src/utils/skill-authoring.js +2 -0
  483. package/dist/src/utils/skill-authoring.js.map +1 -0
  484. package/dist/src/utils/skill-validation.d.ts +37 -0
  485. package/dist/src/utils/skill-validation.js +326 -0
  486. package/dist/src/utils/skill-validation.js.map +1 -0
  487. package/dist/src/utils/slash-commands.d.ts +1 -0
  488. package/dist/src/utils/slash-commands.js +2 -0
  489. package/dist/src/utils/slash-commands.js.map +1 -0
  490. package/dist/src/utils/state-paths.d.ts +14 -0
  491. package/dist/src/utils/state-paths.js +139 -0
  492. package/dist/src/utils/state-paths.js.map +1 -0
  493. package/dist/src/utils/target-eligibility.d.ts +13 -0
  494. package/dist/src/utils/target-eligibility.js +35 -0
  495. package/dist/src/utils/target-eligibility.js.map +1 -0
  496. package/dist/src/utils/target-order.d.ts +7 -0
  497. package/dist/src/utils/target-order.js +10 -0
  498. package/dist/src/utils/target-order.js.map +1 -0
  499. package/dist/src/utils/template-engine.d.ts +1 -0
  500. package/dist/src/utils/template-engine.js +2 -0
  501. package/dist/src/utils/template-engine.js.map +1 -0
  502. package/dist/src/utils/test-path-fence.d.ts +12 -0
  503. package/dist/src/utils/test-path-fence.js +31 -0
  504. package/dist/src/utils/test-path-fence.js.map +1 -0
  505. package/dist/vitest.config.d.ts +2 -0
  506. package/dist/vitest.config.js +16 -0
  507. package/dist/vitest.config.js.map +1 -0
  508. package/package.json +64 -0
@@ -0,0 +1,711 @@
1
+ import crypto from 'node:crypto';
2
+ import { execFile } from 'node:child_process';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ import fs from 'fs-extra';
7
+ import { CATALOG_MANIFEST_FILENAME, GENERATED_OUTPUT_MARKER_FILENAME, preparePublishedCatalogWorkspace, readCatalogWorkspaceMarker, readCatalogWorkspace, validatePublishedCatalogSnapshot, validatePublishedCatalogSnapshotMetadata, } from '@lesliechan721/aw-plugin-core';
8
+ import { bundleLocalPlugin, createCatalogRuntimeImportResolver } from '../../scripts/plugin-staging.js';
9
+ import { redactString } from '../output/redact.js';
10
+ import { sanitizeCatalogSourceErrorMessage } from '../utils/catalog-public-error.js';
11
+ import { CLI_RESERVED_IMPORTS } from '../utils/manifest.js';
12
+ import { resolveCliPackageRoot } from '../utils/paths.js';
13
+ const execFileAsync = promisify(execFile);
14
+ const INHERITED_GIT_AUTH_ENV = new Set([
15
+ 'GIT_ASKPASS',
16
+ 'GIT_HTTP_USER_AGENT',
17
+ 'GIT_SSH',
18
+ 'GIT_SSH_COMMAND',
19
+ 'GIT_SSH_VARIANT',
20
+ 'GIT_SSL_CAINFO',
21
+ 'GIT_SSL_NO_VERIFY',
22
+ 'GIT_TERMINAL_PROMPT',
23
+ ]);
24
+ export class CatalogPublicationInspectionError extends Error {
25
+ code;
26
+ constructor(code, message, options) {
27
+ super(message, options);
28
+ this.name = 'CatalogPublicationInspectionError';
29
+ this.code = code;
30
+ }
31
+ }
32
+ function digest(value) {
33
+ return `sha256:${crypto.createHash('sha256').update(value).digest('hex')}`;
34
+ }
35
+ export function sanitizedGitEnvironment(source) {
36
+ return Object.fromEntries(Object.entries(source).filter(([key]) => !key.startsWith('GIT_') || INHERITED_GIT_AUTH_ENV.has(key)));
37
+ }
38
+ function directRemoteGitEnvironment(source) {
39
+ return {
40
+ ...sanitizedGitEnvironment(source),
41
+ GIT_CONFIG_NOSYSTEM: '1',
42
+ GIT_CONFIG_GLOBAL: os.devNull,
43
+ GIT_ATTR_NOSYSTEM: '1',
44
+ GIT_TERMINAL_PROMPT: '0',
45
+ };
46
+ }
47
+ export function safeRemoteIdentity(value) {
48
+ if (/^[a-z][a-z\d+.-]*:\/\//iu.test(value)) {
49
+ try {
50
+ const url = new URL(value);
51
+ url.username = '';
52
+ url.password = '';
53
+ url.search = '';
54
+ url.hash = '';
55
+ return url.toString();
56
+ }
57
+ catch {
58
+ // Fall through to conservative display sanitization for malformed URLs.
59
+ }
60
+ }
61
+ const withoutQuery = value.split(/[?#]/u, 1)[0];
62
+ return withoutQuery
63
+ .replace(/^([^/@\s:]+):([^/@\s]+)@/u, '')
64
+ .replace(/^[^@\s]+@(?=[^:/\s]+[/:])/u, '');
65
+ }
66
+ export function catalogPublicationFailure(options) {
67
+ const original = options.error instanceof Error
68
+ ? options.error.message
69
+ : String(options.error);
70
+ const withoutRemotes = original
71
+ .replace(/[a-z][a-z\d+.-]*:\/\/[^\s"'<>]+/giu, '[remote]')
72
+ .replace(/[^\s"'<>@]+@[^\s"'<>:/]+[:/][^\s"'<>]+/gu, '[remote]');
73
+ const withoutKnownRoots = sanitizeCatalogSourceErrorMessage(withoutRemotes, options.env, options.sensitiveRoots);
74
+ const message = redactString(withoutKnownRoots).replace(/(?<![A-Za-z0-9._-])(?:[A-Za-z]:[\\/]|\/)(?:[^\s"'<>:]+[\\/])*[^\s"'<>:]*/gu, '[private-path]');
75
+ return {
76
+ ok: false,
77
+ code: options.error instanceof CatalogPublicationInspectionError
78
+ ? options.error.code
79
+ : 'catalogPublicationFailed',
80
+ message,
81
+ };
82
+ }
83
+ function assertSafeRemoteUrl(value, options = {}) {
84
+ if (value.trim() === '' || value !== value.trim() || /[\s\p{Cc}]/u.test(value) || value.startsWith('-')) {
85
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog remote URL is unsafe.');
86
+ }
87
+ if (!options.allowCredentials && /^[a-z][a-z\d+.-]*:\/\/[^/\s?#]*@/iu.test(value)) {
88
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog remote URL must not contain embedded credentials.');
89
+ }
90
+ return value;
91
+ }
92
+ function assertSafeRemoteName(value) {
93
+ if (value === '' || value !== value.trim() || value.startsWith('-') || /[\s\p{Cc}]/u.test(value)) {
94
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog remote name is unsafe.');
95
+ }
96
+ return value;
97
+ }
98
+ function assertSafeBranchValue(value) {
99
+ if (!/^[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(value)) {
100
+ throw new CatalogPublicationInspectionError('branchInvalid', 'Invalid Catalog publication branch name.');
101
+ }
102
+ return value;
103
+ }
104
+ export async function publicationGit(cwd, args, env, code, label) {
105
+ try {
106
+ const result = await execFileAsync('git', ['-c', `core.hooksPath=${os.devNull}`, ...args], {
107
+ cwd,
108
+ env,
109
+ encoding: 'utf8',
110
+ maxBuffer: 16 * 1024 * 1024,
111
+ });
112
+ return result.stdout.trim();
113
+ }
114
+ catch (error) {
115
+ throw new CatalogPublicationInspectionError(code, label, { cause: error });
116
+ }
117
+ }
118
+ export async function publicationGitExit(cwd, args, env) {
119
+ try {
120
+ await execFileAsync('git', ['-c', `core.hooksPath=${os.devNull}`, ...args], {
121
+ cwd,
122
+ env,
123
+ encoding: 'utf8',
124
+ });
125
+ return true;
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ export function parseRemoteRefs(output) {
132
+ return new Map(output.split('\n').filter(Boolean).map((line) => {
133
+ const [objectId, ref] = line.split(/\s+/u);
134
+ return [ref, objectId];
135
+ }));
136
+ }
137
+ export async function materializeSourceHead(options) {
138
+ const archivePath = path.join(options.temporaryRoot, 'source-head.tar');
139
+ await fs.ensureDir(options.outputRoot);
140
+ await publicationGit(options.repoRoot, [
141
+ 'archive', '--format=tar', `--output=${archivePath}`, options.sourceHead,
142
+ ], options.env, 'sourceArchiveFailed', 'Could not archive the committed source HEAD.');
143
+ const tarEnv = { ...options.env };
144
+ delete tarEnv.TAR_OPTIONS;
145
+ try {
146
+ await execFileAsync('tar', ['-xf', archivePath, '-C', options.outputRoot], {
147
+ env: tarEnv,
148
+ encoding: 'utf8',
149
+ maxBuffer: 16 * 1024 * 1024,
150
+ });
151
+ }
152
+ catch (error) {
153
+ throw new CatalogPublicationInspectionError('sourceArchiveFailed', 'Could not materialize the committed source HEAD.', { cause: error });
154
+ }
155
+ finally {
156
+ await fs.remove(archivePath);
157
+ }
158
+ }
159
+ export async function validateCatalogPublicationPlugins(catalogWorkspace, env) {
160
+ const validator = path.join(resolveCliPackageRoot(), 'dist', 'authoring', 'scripts', 'validate-plugin.mjs');
161
+ for (const plugin of catalogWorkspace.plugins) {
162
+ try {
163
+ await execFileAsync(process.execPath, [
164
+ validator,
165
+ plugin.rootDir,
166
+ '--workspace-root', catalogWorkspace.workspaceRoot,
167
+ '--json',
168
+ ], {
169
+ cwd: catalogWorkspace.workspaceRoot,
170
+ env,
171
+ encoding: 'utf8',
172
+ maxBuffer: 16 * 1024 * 1024,
173
+ });
174
+ }
175
+ catch (error) {
176
+ let details = '';
177
+ if (typeof error === 'object' && error !== null && 'stdout' in error && typeof error.stdout === 'string') {
178
+ try {
179
+ const result = JSON.parse(error.stdout);
180
+ details = (result.errors ?? [])
181
+ .map((entry) => typeof entry.message === 'string' ? entry.message : '')
182
+ .filter(Boolean)
183
+ .join('; ');
184
+ }
185
+ catch {
186
+ // Keep the public validator failure bounded to its plugin identity.
187
+ }
188
+ }
189
+ throw new CatalogPublicationInspectionError('pluginValidationFailed', `Plugin ${plugin.manifest.name} failed public source validation before Catalog publication${details ? `: ${details}` : '.'}`);
190
+ }
191
+ }
192
+ }
193
+ const publicationBuildAdapter = {
194
+ async build(options) {
195
+ await bundleLocalPlugin(options.plugin, options.outputRoot, {
196
+ buildMode: 'staging',
197
+ runtimeResolver: createCatalogRuntimeImportResolver(options.plugins),
198
+ });
199
+ },
200
+ };
201
+ function inspectionError(code, error) {
202
+ if (error instanceof CatalogPublicationInspectionError)
203
+ return error;
204
+ return new CatalogPublicationInspectionError(code, error instanceof Error ? error.message : String(error), {
205
+ cause: error,
206
+ });
207
+ }
208
+ async function validatePublishedCatalogSnapshotForWorkspace(snapshotRoot, workspaceIdentity) {
209
+ try {
210
+ const validation = await validatePublishedCatalogSnapshot(snapshotRoot);
211
+ const markerPath = path.join(snapshotRoot, GENERATED_OUTPUT_MARKER_FILENAME);
212
+ const markerStats = await fs.lstat(markerPath).catch((error) => {
213
+ if (error.code === 'ENOENT')
214
+ return null;
215
+ throw error;
216
+ });
217
+ if (!markerStats?.isFile() || markerStats.isSymbolicLink()) {
218
+ throw new Error('Published Catalog snapshot marker must be a regular local file.');
219
+ }
220
+ const marker = await fs.readJson(markerPath);
221
+ if (marker.workspaceIdentity !== workspaceIdentity) {
222
+ throw new Error('Published Catalog snapshot belongs to a different Workspace identity.');
223
+ }
224
+ return validation;
225
+ }
226
+ catch (error) {
227
+ throw inspectionError('remoteSnapshotInvalid', error);
228
+ }
229
+ }
230
+ async function materializePublishedCatalogMetadata(options) {
231
+ await fs.remove(options.outputRoot);
232
+ await fs.ensureDir(options.outputRoot);
233
+ for (const relative of [GENERATED_OUTPUT_MARKER_FILENAME, CATALOG_MANIFEST_FILENAME]) {
234
+ const record = await publicationGit(options.repositoryRoot, [
235
+ 'ls-tree', options.commit, '--', relative,
236
+ ], options.env, 'remoteBranchInvalid', 'Could not inspect published Catalog history.');
237
+ const match = /^(100644|100755) blob ([0-9a-f]+)\t(.+)$/u.exec(record);
238
+ if (!match || match[3] !== relative) {
239
+ throw new CatalogPublicationInspectionError('remoteSnapshotInvalid', 'Published Catalog history metadata must contain regular files.');
240
+ }
241
+ const content = await publicationGit(options.repositoryRoot, [
242
+ 'cat-file', 'blob', match[2],
243
+ ], options.env, 'remoteBranchInvalid', 'Could not read published Catalog history.');
244
+ await fs.writeFile(path.join(options.outputRoot, relative), `${content}\n`);
245
+ }
246
+ }
247
+ async function findPreviousPluginEntriesInFirstParentHistory(options) {
248
+ const missing = new Set(options.pluginNames);
249
+ const found = new Map();
250
+ const historyRoot = path.join(options.temporaryRoot, 'history-metadata');
251
+ let commit = options.tipCommit;
252
+ while (missing.size > 0) {
253
+ const parents = (await publicationGit(options.repositoryRoot, [
254
+ 'show', '-s', '--format=%P', commit,
255
+ ], options.env, 'remoteBranchInvalid', 'Could not inspect published Catalog history.'))
256
+ .split(/\s+/u)
257
+ .filter(Boolean);
258
+ const firstParent = parents[0];
259
+ if (!firstParent)
260
+ break;
261
+ commit = firstParent;
262
+ await materializePublishedCatalogMetadata({
263
+ repositoryRoot: options.repositoryRoot,
264
+ commit,
265
+ outputRoot: historyRoot,
266
+ env: options.env,
267
+ });
268
+ let metadata;
269
+ try {
270
+ metadata = await validatePublishedCatalogSnapshotMetadata(historyRoot);
271
+ if (metadata.workspaceIdentity !== options.workspaceIdentity) {
272
+ throw new Error('Published Catalog snapshot belongs to a different Workspace identity.');
273
+ }
274
+ }
275
+ catch (error) {
276
+ throw inspectionError('remoteSnapshotInvalid', error);
277
+ }
278
+ for (const entry of metadata.manifest.entries) {
279
+ if (!missing.delete(entry.name))
280
+ continue;
281
+ found.set(entry.name, entry);
282
+ }
283
+ }
284
+ return options.pluginNames.flatMap((name) => {
285
+ const entry = found.get(name);
286
+ return entry ? [entry] : [];
287
+ });
288
+ }
289
+ export async function prepareCatalogPublicationInspection(options) {
290
+ if (options.remote !== undefined && options.remoteUrl !== undefined) {
291
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog publication accepts a configured remote name or a direct remote URL, not both.');
292
+ }
293
+ const remote = options.remoteUrl === undefined
294
+ ? assertSafeRemoteName(options.remote ?? 'origin')
295
+ : 'direct';
296
+ const branch = assertSafeBranchValue(options.branch ?? 'catalog');
297
+ const env = options.remoteUrl === undefined
298
+ ? sanitizedGitEnvironment(options.env)
299
+ : directRemoteGitEnvironment(options.env);
300
+ let temporaryRoot = '';
301
+ let fetchUrl = '';
302
+ let pushUrl = '';
303
+ let safeFetchUrl = '';
304
+ let safePushUrl = '';
305
+ try {
306
+ const catalogWorkspaceRoot = await fs.realpath(path.resolve(options.workspaceRoot));
307
+ const repoRoot = await publicationGit(catalogWorkspaceRoot, ['rev-parse', '--show-toplevel'], env, 'gitWorkspaceInvalid', 'Catalog Workspace must be inside a real Git worktree.');
308
+ await publicationGit(repoRoot, ['check-ref-format', '--branch', branch], env, 'branchInvalid', 'Invalid Catalog publication branch name.');
309
+ if (options.remoteUrl !== undefined) {
310
+ fetchUrl = assertSafeRemoteUrl(options.remoteUrl);
311
+ pushUrl = fetchUrl;
312
+ }
313
+ else {
314
+ const configuredRemotes = (await publicationGit(repoRoot, ['remote'], env, 'remoteMissing', 'Could not inspect configured Git remotes.')).split('\n').filter(Boolean);
315
+ if (!configuredRemotes.includes(remote)) {
316
+ throw new CatalogPublicationInspectionError('remoteInvalid', `Git remote ${JSON.stringify(remote)} is not configured.`);
317
+ }
318
+ fetchUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} is not configured.`), { allowCredentials: true });
319
+ pushUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', '--push', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} has no push URL.`), { allowCredentials: true });
320
+ }
321
+ safeFetchUrl = safeRemoteIdentity(fetchUrl);
322
+ safePushUrl = safeRemoteIdentity(pushUrl);
323
+ const sourceHead = await publicationGit(repoRoot, ['rev-parse', '--verify', 'HEAD'], env, 'sourceHeadMissing', 'Catalog Workspace Git HEAD must be committed and not unborn.');
324
+ const status = await publicationGit(repoRoot, [
325
+ 'status', '--porcelain=v1', '--untracked-files=all', '--ignore-submodules=none',
326
+ ], env, 'sourceStatusFailed', 'Could not inspect the source worktree.');
327
+ if (status !== '') {
328
+ throw new CatalogPublicationInspectionError('sourceDirty', 'Catalog publish requires the complete source Git worktree to be clean.');
329
+ }
330
+ temporaryRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aw-public-catalog-'));
331
+ const sourceRoot = path.join(temporaryRoot, 'source');
332
+ await materializeSourceHead({ repoRoot, sourceHead, outputRoot: sourceRoot, temporaryRoot, env });
333
+ const catalogWorkspaceRelative = path.relative(repoRoot, catalogWorkspaceRoot);
334
+ if (catalogWorkspaceRelative === '..'
335
+ || catalogWorkspaceRelative.startsWith(`..${path.sep}`)
336
+ || path.isAbsolute(catalogWorkspaceRelative)) {
337
+ throw new CatalogPublicationInspectionError('workspaceOutsideRepository', 'Catalog Workspace must stay inside its Git worktree root.');
338
+ }
339
+ const archivedCatalogWorkspaceRoot = path.join(sourceRoot, catalogWorkspaceRelative);
340
+ let catalogWorkspace;
341
+ try {
342
+ catalogWorkspace = await readCatalogWorkspace(archivedCatalogWorkspaceRoot, { reservedImports: CLI_RESERVED_IMPORTS });
343
+ }
344
+ catch (error) {
345
+ throw inspectionError('workspaceInvalid', error);
346
+ }
347
+ const ownerUrl = catalogWorkspace.metadata.owner.url;
348
+ if (URL.canParse(ownerUrl) && new URL(ownerUrl).hostname === 'example.invalid') {
349
+ throw new CatalogPublicationInspectionError('catalogMetadataIncomplete', 'Catalog owner URL still uses the example.invalid placeholder. Set plugins/marketplace-source.json owner.url before publication.');
350
+ }
351
+ await validateCatalogPublicationPlugins(catalogWorkspace, env);
352
+ const catalogVersion = catalogWorkspace.metadata.catalog.version;
353
+ const tag = `catalog-v${catalogVersion}`;
354
+ await publicationGit(repoRoot, ['check-ref-format', `refs/tags/${tag}`], env, 'tagInvalid', 'Invalid Catalog publication tag.');
355
+ const remoteIdentityDigest = digest(JSON.stringify({ fetchUrl, pushUrl }));
356
+ const branchRef = `refs/heads/${branch}`;
357
+ const tagRef = `refs/tags/${tag}`;
358
+ const repositoryRoot = path.join(temporaryRoot, 'repository');
359
+ await fs.ensureDir(repositoryRoot);
360
+ await publicationGit(repositoryRoot, ['init', '--quiet'], env, 'temporaryRepositoryFailed', 'Could not create the isolated publication repository.');
361
+ await publicationGit(repositoryRoot, ['config', 'core.hooksPath', os.devNull], env, 'temporaryRepositoryFailed', 'Could not disable publication hooks.');
362
+ await publicationGit(repositoryRoot, ['config', 'core.symlinks', 'true'], env, 'temporaryRepositoryFailed', 'Could not configure the isolated publication repository.');
363
+ await publicationGit(repositoryRoot, ['remote', 'add', 'publish', pushUrl], env, 'temporaryRepositoryFailed', 'Could not configure the publication remote.');
364
+ const initialRefs = parseRemoteRefs(await publicationGit(repositoryRoot, [
365
+ 'ls-remote', 'publish', branchRef, tagRef, `${tagRef}^{}`,
366
+ ], env, 'remoteReadFailed', 'Could not inspect the Catalog publication remote.'));
367
+ const tagAvailable = !initialRefs.has(tagRef) && !initialRefs.has(`${tagRef}^{}`);
368
+ const parent = initialRefs.get(branchRef) ?? null;
369
+ let previousSnapshotRoot;
370
+ let historicalPluginEntries = [];
371
+ if (parent) {
372
+ await publicationGit(repositoryRoot, [
373
+ 'fetch', '--quiet', '--no-tags', 'publish', `${branchRef}:refs/aw/catalog-parent`,
374
+ ], env, 'remoteBranchInvalid', 'Could not fetch the published Catalog branch.');
375
+ previousSnapshotRoot = path.join(temporaryRoot, 'previous');
376
+ await fs.ensureDir(previousSnapshotRoot);
377
+ await publicationGit(repositoryRoot, [
378
+ '--work-tree', previousSnapshotRoot, 'checkout', '--quiet', 'refs/aw/catalog-parent', '--', '.',
379
+ ], env, 'remoteBranchInvalid', 'Could not read the published Catalog snapshot.');
380
+ const previous = await validatePublishedCatalogSnapshotForWorkspace(previousSnapshotRoot, catalogWorkspace.workspaceIdentity);
381
+ const previousPluginNames = new Set(previous.manifest.entries.map((entry) => entry.name));
382
+ const missingPluginNames = catalogWorkspace.plugins
383
+ .map((plugin) => plugin.manifest.name)
384
+ .filter((name) => !previousPluginNames.has(name));
385
+ if (missingPluginNames.length > 0) {
386
+ historicalPluginEntries = await findPreviousPluginEntriesInFirstParentHistory({
387
+ repositoryRoot,
388
+ tipCommit: parent,
389
+ pluginNames: missingPluginNames,
390
+ workspaceIdentity: catalogWorkspace.workspaceIdentity,
391
+ temporaryRoot,
392
+ env,
393
+ });
394
+ }
395
+ }
396
+ let prepared;
397
+ try {
398
+ prepared = await preparePublishedCatalogWorkspace({
399
+ workspaceRoot: archivedCatalogWorkspaceRoot,
400
+ sourceHead,
401
+ previousSnapshotRoot,
402
+ historicalPluginEntries,
403
+ adapter: publicationBuildAdapter,
404
+ reservedImports: CLI_RESERVED_IMPORTS,
405
+ });
406
+ }
407
+ catch (error) {
408
+ throw inspectionError('catalogPreparationFailed', error);
409
+ }
410
+ const preparedHead = await publicationGit(repoRoot, ['rev-parse', '--verify', 'HEAD'], env, 'sourceDrift', 'Could not recheck the source Git HEAD.');
411
+ const preparedStatus = await publicationGit(repoRoot, [
412
+ 'status', '--porcelain=v1', '--untracked-files=all', '--ignore-submodules=none',
413
+ ], env, 'sourceDrift', 'Could not recheck the source worktree.');
414
+ if (preparedHead !== sourceHead || preparedStatus !== '') {
415
+ throw new CatalogPublicationInspectionError('sourceDrift', 'Source HEAD or worktree changed during Catalog preparation. Commit or clean it before publishing.');
416
+ }
417
+ const finalRefs = parseRemoteRefs(await publicationGit(repositoryRoot, [
418
+ 'ls-remote', 'publish', branchRef, tagRef, `${tagRef}^{}`,
419
+ ], env, 'remoteDrift', 'Could not recheck the Catalog publication remote.'));
420
+ if ((finalRefs.get(branchRef) ?? null) !== parent
421
+ || finalRefs.has(tagRef) !== initialRefs.has(tagRef)
422
+ || finalRefs.has(`${tagRef}^{}`) !== initialRefs.has(`${tagRef}^{}`)) {
423
+ throw new CatalogPublicationInspectionError('remoteDrift', 'Catalog remote changed during preparation. Increase the Catalog version before publishing again.');
424
+ }
425
+ await validatePublishedCatalogSnapshot(prepared.outputRoot);
426
+ const descriptor = {
427
+ schemaVersion: 1,
428
+ workspaceIdentity: catalogWorkspace.workspaceIdentity,
429
+ sourceHead,
430
+ remote: {
431
+ name: options.remoteUrl === undefined ? remote : null,
432
+ identityDigest: remoteIdentityDigest,
433
+ },
434
+ branch,
435
+ parent,
436
+ tag,
437
+ snapshotDigest: prepared.snapshotDigest,
438
+ };
439
+ return {
440
+ temporaryRoot,
441
+ repositoryRoot,
442
+ archivedCatalogWorkspaceRoot,
443
+ catalogWorkspaceRoot,
444
+ repoRoot,
445
+ sourceHead,
446
+ remote,
447
+ branch,
448
+ branchRef,
449
+ tag,
450
+ tagRef,
451
+ fetchUrl,
452
+ pushUrl,
453
+ safeFetchUrl,
454
+ safePushUrl,
455
+ remoteIdentityDigest,
456
+ parent,
457
+ tagAvailable,
458
+ catalogWorkspace,
459
+ prepared,
460
+ descriptor,
461
+ env,
462
+ };
463
+ }
464
+ catch (error) {
465
+ if (temporaryRoot)
466
+ await fs.remove(temporaryRoot);
467
+ let safeMessage = error instanceof Error ? error.message : String(error);
468
+ if (temporaryRoot)
469
+ safeMessage = safeMessage.replaceAll(temporaryRoot, '<temporary Catalog state>');
470
+ if (fetchUrl)
471
+ safeMessage = safeMessage.replaceAll(fetchUrl, safeFetchUrl);
472
+ if (pushUrl)
473
+ safeMessage = safeMessage.replaceAll(pushUrl, safePushUrl);
474
+ if (error instanceof CatalogPublicationInspectionError) {
475
+ throw new CatalogPublicationInspectionError(error.code, safeMessage, { cause: error.cause });
476
+ }
477
+ throw new CatalogPublicationInspectionError('catalogPreflightFailed', safeMessage, { cause: error });
478
+ }
479
+ }
480
+ export async function inspectCatalogPublicationLiveContext(options) {
481
+ if (options.remote !== undefined && options.remoteUrl !== undefined) {
482
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog publication accepts a configured remote name or a direct remote URL, not both.');
483
+ }
484
+ const remote = options.remoteUrl === undefined
485
+ ? assertSafeRemoteName(options.remote ?? 'origin')
486
+ : 'direct';
487
+ const remoteName = options.remoteUrl === undefined ? remote : null;
488
+ const branch = assertSafeBranchValue(options.branch ?? 'catalog');
489
+ const env = options.remoteUrl === undefined
490
+ ? sanitizedGitEnvironment(options.env)
491
+ : directRemoteGitEnvironment(options.env);
492
+ let fetchUrl = '';
493
+ let pushUrl = '';
494
+ let safeFetchUrl = '';
495
+ let safePushUrl = '';
496
+ try {
497
+ const catalogWorkspaceRoot = await fs.realpath(path.resolve(options.workspaceRoot));
498
+ const repoRoot = await publicationGit(catalogWorkspaceRoot, ['rev-parse', '--show-toplevel'], env, 'gitWorkspaceInvalid', 'Catalog Workspace must be inside a real Git worktree.');
499
+ await publicationGit(repoRoot, ['check-ref-format', '--branch', branch], env, 'branchInvalid', 'Invalid Catalog publication branch name.');
500
+ const sourceHead = await publicationGit(repoRoot, ['rev-parse', '--verify', 'HEAD'], env, 'sourceHeadMissing', 'Catalog Workspace Git HEAD must be committed and not unborn.');
501
+ const status = await publicationGit(repoRoot, [
502
+ 'status', '--porcelain=v1', '--untracked-files=all', '--ignore-submodules=none',
503
+ ], env, 'sourceStatusFailed', 'Could not inspect the source worktree.');
504
+ if (status !== '') {
505
+ throw new CatalogPublicationInspectionError('sourceDirty', 'Catalog publish requires the complete source Git worktree to be clean.');
506
+ }
507
+ const catalogWorkspaceRelative = path.relative(repoRoot, catalogWorkspaceRoot);
508
+ if (catalogWorkspaceRelative === '..'
509
+ || catalogWorkspaceRelative.startsWith(`..${path.sep}`)
510
+ || path.isAbsolute(catalogWorkspaceRelative)) {
511
+ throw new CatalogPublicationInspectionError('workspaceOutsideRepository', 'Catalog Workspace must stay inside its Git worktree root.');
512
+ }
513
+ const catalogWorkspace = await readCatalogWorkspace(catalogWorkspaceRoot, {
514
+ reservedImports: CLI_RESERVED_IMPORTS,
515
+ });
516
+ const ownerUrl = catalogWorkspace.metadata.owner.url;
517
+ if (URL.canParse(ownerUrl) && new URL(ownerUrl).hostname === 'example.invalid') {
518
+ throw new CatalogPublicationInspectionError('catalogMetadataIncomplete', 'Catalog owner URL still uses the example.invalid placeholder. Set plugins/marketplace-source.json owner.url before publication.');
519
+ }
520
+ if (options.remoteUrl !== undefined) {
521
+ fetchUrl = assertSafeRemoteUrl(options.remoteUrl);
522
+ pushUrl = fetchUrl;
523
+ }
524
+ else {
525
+ const configuredRemotes = (await publicationGit(repoRoot, ['remote'], env, 'remoteMissing', 'Could not inspect configured Git remotes.')).split('\n').filter(Boolean);
526
+ if (!configuredRemotes.includes(remote)) {
527
+ throw new CatalogPublicationInspectionError('remoteInvalid', `Git remote ${JSON.stringify(remote)} is not configured.`);
528
+ }
529
+ fetchUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} is not configured.`), { allowCredentials: true });
530
+ pushUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', '--push', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} has no push URL.`), { allowCredentials: true });
531
+ }
532
+ safeFetchUrl = safeRemoteIdentity(fetchUrl);
533
+ safePushUrl = safeRemoteIdentity(pushUrl);
534
+ const catalogVersion = catalogWorkspace.metadata.catalog.version;
535
+ const tag = `catalog-v${catalogVersion}`;
536
+ await publicationGit(repoRoot, ['check-ref-format', `refs/tags/${tag}`], env, 'tagInvalid', 'Invalid Catalog publication tag.');
537
+ return {
538
+ catalogWorkspaceRoot,
539
+ repoRoot,
540
+ workspaceIdentity: catalogWorkspace.workspaceIdentity,
541
+ catalogVersion,
542
+ sourceHead,
543
+ remote,
544
+ remoteName,
545
+ branch,
546
+ branchRef: `refs/heads/${branch}`,
547
+ tag,
548
+ tagRef: `refs/tags/${tag}`,
549
+ fetchUrl,
550
+ pushUrl,
551
+ safeFetchUrl,
552
+ safePushUrl,
553
+ remoteIdentityDigest: digest(JSON.stringify({ fetchUrl, pushUrl })),
554
+ env,
555
+ };
556
+ }
557
+ catch (error) {
558
+ let safeMessage = error instanceof Error ? error.message : String(error);
559
+ if (fetchUrl)
560
+ safeMessage = safeMessage.replaceAll(fetchUrl, safeFetchUrl);
561
+ if (pushUrl)
562
+ safeMessage = safeMessage.replaceAll(pushUrl, safePushUrl);
563
+ if (error instanceof CatalogPublicationInspectionError) {
564
+ throw new CatalogPublicationInspectionError(error.code, safeMessage, { cause: error.cause });
565
+ }
566
+ throw new CatalogPublicationInspectionError('catalogInspectionFailed', safeMessage, { cause: error });
567
+ }
568
+ }
569
+ export async function inspectCatalogPublicationApplyContext(options) {
570
+ if (options.remote !== undefined && options.remoteUrl !== undefined) {
571
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog publication accepts a configured remote name or a direct remote URL, not both.');
572
+ }
573
+ const remote = options.remoteUrl === undefined
574
+ ? assertSafeRemoteName(options.remote ?? 'origin')
575
+ : 'direct';
576
+ const branch = assertSafeBranchValue(options.branch ?? 'catalog');
577
+ const env = options.remoteUrl === undefined
578
+ ? sanitizedGitEnvironment(options.env)
579
+ : directRemoteGitEnvironment(options.env);
580
+ let fetchUrl = '';
581
+ let pushUrl = '';
582
+ let safeFetchUrl = '';
583
+ let safePushUrl = '';
584
+ try {
585
+ const catalogWorkspaceRoot = await fs.realpath(path.resolve(options.workspaceRoot));
586
+ const marker = await readCatalogWorkspaceMarker(catalogWorkspaceRoot);
587
+ const repoRoot = await publicationGit(catalogWorkspaceRoot, ['rev-parse', '--show-toplevel'], env, 'gitWorkspaceInvalid', 'Catalog Workspace must be inside a real Git worktree.');
588
+ const catalogWorkspaceRelative = path.relative(repoRoot, catalogWorkspaceRoot);
589
+ if (catalogWorkspaceRelative === '..'
590
+ || catalogWorkspaceRelative.startsWith(`..${path.sep}`)
591
+ || path.isAbsolute(catalogWorkspaceRelative)) {
592
+ throw new CatalogPublicationInspectionError('workspaceOutsideRepository', 'Catalog Workspace must stay inside its Git worktree root.');
593
+ }
594
+ await publicationGit(repoRoot, ['check-ref-format', '--branch', branch], env, 'branchInvalid', 'Invalid Catalog publication branch name.');
595
+ if (options.remoteUrl !== undefined) {
596
+ fetchUrl = assertSafeRemoteUrl(options.remoteUrl);
597
+ pushUrl = fetchUrl;
598
+ }
599
+ else {
600
+ const configuredRemotes = (await publicationGit(repoRoot, ['remote'], env, 'remoteMissing', 'Could not inspect configured Git remotes.')).split('\n').filter(Boolean);
601
+ if (!configuredRemotes.includes(remote)) {
602
+ throw new CatalogPublicationInspectionError('remoteInvalid', `Git remote ${JSON.stringify(remote)} is not configured.`);
603
+ }
604
+ fetchUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} is not configured.`), { allowCredentials: true });
605
+ pushUrl = assertSafeRemoteUrl(await publicationGit(repoRoot, ['remote', 'get-url', '--push', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} has no push URL.`), { allowCredentials: true });
606
+ }
607
+ safeFetchUrl = safeRemoteIdentity(fetchUrl);
608
+ safePushUrl = safeRemoteIdentity(pushUrl);
609
+ return {
610
+ catalogWorkspaceRoot,
611
+ repoRoot,
612
+ workspaceIdentity: marker.workspaceIdentity,
613
+ remote,
614
+ branch,
615
+ branchRef: `refs/heads/${branch}`,
616
+ fetchUrl,
617
+ pushUrl,
618
+ safeFetchUrl,
619
+ safePushUrl,
620
+ remoteIdentityDigest: digest(JSON.stringify({ fetchUrl, pushUrl })),
621
+ env,
622
+ };
623
+ }
624
+ catch (error) {
625
+ let safeMessage = error instanceof Error ? error.message : String(error);
626
+ if (fetchUrl)
627
+ safeMessage = safeMessage.replaceAll(fetchUrl, safeFetchUrl);
628
+ if (pushUrl)
629
+ safeMessage = safeMessage.replaceAll(pushUrl, safePushUrl);
630
+ if (error instanceof CatalogPublicationInspectionError) {
631
+ throw new CatalogPublicationInspectionError(error.code, safeMessage, { cause: error.cause });
632
+ }
633
+ throw new CatalogPublicationInspectionError('catalogInspectionFailed', safeMessage, { cause: error });
634
+ }
635
+ }
636
+ async function resolveRemoteUrlForInspection(options) {
637
+ if (options.remote !== undefined && options.remoteUrl !== undefined) {
638
+ throw new CatalogPublicationInspectionError('remoteInvalid', 'Catalog publication accepts a configured remote name or a direct remote URL, not both.');
639
+ }
640
+ const env = options.remoteUrl === undefined
641
+ ? sanitizedGitEnvironment(options.env)
642
+ : directRemoteGitEnvironment(options.env);
643
+ if (options.remoteUrl !== undefined) {
644
+ return { remoteUrl: assertSafeRemoteUrl(options.remoteUrl), env };
645
+ }
646
+ const remote = assertSafeRemoteName(options.remote ?? 'origin');
647
+ return {
648
+ remoteUrl: assertSafeRemoteUrl(await publicationGit(options.workspaceRoot, ['remote', 'get-url', '--push', remote], env, 'remoteMissing', `Git remote ${JSON.stringify(remote)} has no push URL.`), { allowCredentials: true }),
649
+ env,
650
+ };
651
+ }
652
+ export async function listCatalogPublicationVersions(options) {
653
+ const resolved = await resolveRemoteUrlForInspection(options);
654
+ const temporaryRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aw-catalog-remote-read-'));
655
+ try {
656
+ await publicationGit(temporaryRoot, ['init', '--quiet'], resolved.env, 'temporaryRepositoryFailed', 'Could not create the Catalog inspection repository.');
657
+ await publicationGit(temporaryRoot, ['remote', 'add', 'publish', resolved.remoteUrl], resolved.env, 'temporaryRepositoryFailed', 'Could not configure the Catalog inspection remote.');
658
+ const refs = parseRemoteRefs(await publicationGit(temporaryRoot, [
659
+ 'ls-remote', '--refs', 'publish', 'refs/tags/catalog-v*',
660
+ ], resolved.env, 'remoteReadFailed', 'Could not inspect Catalog publication versions.'));
661
+ return [...refs.keys()]
662
+ .filter((ref) => ref.startsWith('refs/tags/catalog-v'))
663
+ .map((ref) => ref.slice('refs/tags/catalog-v'.length));
664
+ }
665
+ finally {
666
+ await fs.remove(temporaryRoot);
667
+ }
668
+ }
669
+ export async function readCatalogPublicationBranchState(options) {
670
+ assertSafeBranchValue(options.branch);
671
+ const marker = await readCatalogWorkspaceMarker(options.workspaceRoot);
672
+ const resolved = await resolveRemoteUrlForInspection(options);
673
+ const temporaryRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aw-catalog-remote-read-'));
674
+ try {
675
+ await publicationGit(options.workspaceRoot, [
676
+ 'check-ref-format', '--branch', options.branch,
677
+ ], resolved.env, 'branchInvalid', 'Invalid Catalog publication branch name.');
678
+ const branchRef = `refs/heads/${options.branch}`;
679
+ await publicationGit(temporaryRoot, ['init', '--quiet'], resolved.env, 'temporaryRepositoryFailed', 'Could not create the Catalog inspection repository.');
680
+ await publicationGit(temporaryRoot, ['config', 'core.symlinks', 'true'], resolved.env, 'temporaryRepositoryFailed', 'Could not configure the Catalog inspection repository.');
681
+ await publicationGit(temporaryRoot, ['remote', 'add', 'publish', resolved.remoteUrl], resolved.env, 'temporaryRepositoryFailed', 'Could not configure the Catalog inspection remote.');
682
+ const refs = parseRemoteRefs(await publicationGit(temporaryRoot, [
683
+ 'ls-remote', 'publish', branchRef,
684
+ ], resolved.env, 'remoteReadFailed', 'Could not inspect the Catalog publication branch.'));
685
+ const commit = refs.get(branchRef);
686
+ if (!commit)
687
+ return null;
688
+ await publicationGit(temporaryRoot, [
689
+ 'fetch', '--quiet', '--no-tags', 'publish', `${branchRef}:refs/aw/catalog-parent`,
690
+ ], resolved.env, 'remoteBranchInvalid', 'Could not fetch the published Catalog branch.');
691
+ const snapshotRoot = path.join(temporaryRoot, 'snapshot');
692
+ await fs.ensureDir(snapshotRoot);
693
+ await publicationGit(temporaryRoot, [
694
+ '--work-tree', snapshotRoot, 'checkout', '--quiet', 'refs/aw/catalog-parent', '--', '.',
695
+ ], resolved.env, 'remoteBranchInvalid', 'Could not read the published Catalog snapshot.');
696
+ const validation = await validatePublishedCatalogSnapshotForWorkspace(snapshotRoot, marker.workspaceIdentity);
697
+ return {
698
+ commit,
699
+ version: validation.manifest.catalogVersion,
700
+ manifest: validation.manifest,
701
+ snapshotDigest: validation.snapshotDigest,
702
+ };
703
+ }
704
+ finally {
705
+ await fs.remove(temporaryRoot);
706
+ }
707
+ }
708
+ export async function disposeCatalogPublicationInspection(preparation) {
709
+ await fs.remove(preparation.temporaryRoot);
710
+ }
711
+ //# sourceMappingURL=catalog-publication-inspection.js.map