@lesliechan721/aw 0.1.0-beta.6 → 0.1.0-beta.60

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 (621) 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 -92
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -124
  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 +552 -1142
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/native-runtime/reader-runtime.mjs +34 -0
  25. package/dist/native-runtime/reader.d.mts +6 -0
  26. package/dist/native-runtime/reader.mjs +11 -0
  27. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  28. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  29. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  30. package/dist/scripts/bundle-plugins.d.ts +1 -0
  31. package/dist/scripts/bundle-plugins.js +19 -8
  32. package/dist/scripts/bundle-plugins.js.map +1 -1
  33. package/dist/scripts/plugin-staging.d.ts +7 -9
  34. package/dist/scripts/plugin-staging.js +18 -29
  35. package/dist/scripts/plugin-staging.js.map +1 -1
  36. package/dist/scripts/plugin-test-reporter.d.mts +2 -0
  37. package/dist/scripts/plugin-test-reporter.mjs +21 -0
  38. package/dist/scripts/plugin-test-reporter.mjs.map +1 -0
  39. package/dist/scripts/test-plugin-scripts.d.ts +5 -0
  40. package/dist/scripts/test-plugin-scripts.js +208 -89
  41. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  42. package/dist/scripts/test-workers.d.mts +24 -0
  43. package/dist/scripts/test-workers.mjs +59 -0
  44. package/dist/scripts/test-workers.mjs.map +1 -0
  45. package/dist/src/adapters/helpers.d.ts +7 -0
  46. package/dist/src/adapters/helpers.js +2 -2
  47. package/dist/src/adapters/helpers.js.map +1 -1
  48. package/dist/src/authoring/workspace-commands.d.ts +19 -1
  49. package/dist/src/authoring/workspace-commands.js +24 -5
  50. package/dist/src/authoring/workspace-commands.js.map +1 -1
  51. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  52. package/dist/src/commands/aw-capabilities.js +266 -0
  53. package/dist/src/commands/aw-capabilities.js.map +1 -0
  54. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  55. package/dist/src/commands/catalog-dev-source.js +655 -0
  56. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  57. package/dist/src/commands/catalog-generation.d.ts +21 -0
  58. package/dist/src/commands/catalog-generation.js +9 -0
  59. package/dist/src/commands/catalog-generation.js.map +1 -0
  60. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  61. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  62. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  63. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  64. package/dist/src/commands/catalog-publication-journal.js +292 -0
  65. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  66. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  67. package/dist/src/commands/catalog-publication-target.js +95 -0
  68. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  69. package/dist/src/commands/catalog-publish.d.ts +73 -15
  70. package/dist/src/commands/catalog-publish.js +701 -212
  71. package/dist/src/commands/catalog-publish.js.map +1 -1
  72. package/dist/src/commands/catalog-source.d.ts +60 -22
  73. package/dist/src/commands/catalog-source.js +311 -91
  74. package/dist/src/commands/catalog-source.js.map +1 -1
  75. package/dist/src/commands/catalog-status.d.ts +18 -22
  76. package/dist/src/commands/catalog-status.js +81 -115
  77. package/dist/src/commands/catalog-status.js.map +1 -1
  78. package/dist/src/commands/catalog-store.d.ts +104 -0
  79. package/dist/src/commands/catalog-store.js +685 -0
  80. package/dist/src/commands/catalog-store.js.map +1 -0
  81. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  82. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  83. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  84. package/dist/src/commands/console.js +28 -17
  85. package/dist/src/commands/console.js.map +1 -1
  86. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  87. package/dist/src/commands/dependency-operation-plan.js +289 -7
  88. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  89. package/dist/src/commands/init.d.ts +5 -11
  90. package/dist/src/commands/init.js +30 -51
  91. package/dist/src/commands/init.js.map +1 -1
  92. package/dist/src/commands/managed-commands.d.ts +28 -0
  93. package/dist/src/commands/managed-commands.js +315 -0
  94. package/dist/src/commands/managed-commands.js.map +1 -0
  95. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  96. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  97. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  98. package/dist/src/commands/operation-plan.d.ts +182 -0
  99. package/dist/src/commands/operation-plan.js +71 -0
  100. package/dist/src/commands/operation-plan.js.map +1 -0
  101. package/dist/src/commands/operation-planner.d.ts +47 -0
  102. package/dist/src/commands/operation-planner.js +142 -0
  103. package/dist/src/commands/operation-planner.js.map +1 -0
  104. package/dist/src/commands/options.d.ts +9 -7
  105. package/dist/src/commands/options.js +83 -21
  106. package/dist/src/commands/options.js.map +1 -1
  107. package/dist/src/commands/plugin-capabilities.js +65 -4
  108. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  109. package/dist/src/commands/rebuild-command.d.ts +78 -31
  110. package/dist/src/commands/rebuild-command.js +5229 -942
  111. package/dist/src/commands/rebuild-command.js.map +1 -1
  112. package/dist/src/commands/rebuild-integration.d.ts +143 -21
  113. package/dist/src/commands/rebuild-integration.js +3384 -1342
  114. package/dist/src/commands/rebuild-integration.js.map +1 -1
  115. package/dist/src/commands/rebuild-operations.d.ts +60 -30
  116. package/dist/src/commands/rebuild-operations.js +267 -320
  117. package/dist/src/commands/rebuild-operations.js.map +1 -1
  118. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  119. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  120. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  121. package/dist/src/commands/review-inspection.d.ts +60 -0
  122. package/dist/src/commands/review-inspection.js +422 -0
  123. package/dist/src/commands/review-inspection.js.map +1 -0
  124. package/dist/src/commands/review-preparation.d.ts +49 -0
  125. package/dist/src/commands/review-preparation.js +427 -0
  126. package/dist/src/commands/review-preparation.js.map +1 -0
  127. package/dist/src/commands/runtime.d.ts +1 -5
  128. package/dist/src/commands/runtime.js +27 -53
  129. package/dist/src/commands/runtime.js.map +1 -1
  130. package/dist/src/commands/skill-eval.d.ts +39 -0
  131. package/dist/src/commands/skill-eval.js +400 -0
  132. package/dist/src/commands/skill-eval.js.map +1 -0
  133. package/dist/src/commands/status-v6.d.ts +279 -0
  134. package/dist/src/commands/status-v6.js +2785 -0
  135. package/dist/src/commands/status-v6.js.map +1 -0
  136. package/dist/src/commands/sync-command.d.ts +40 -0
  137. package/dist/src/commands/sync-command.js +254 -0
  138. package/dist/src/commands/sync-command.js.map +1 -0
  139. package/dist/src/commands/wizard.d.ts +8 -5
  140. package/dist/src/commands/wizard.js +6 -4
  141. package/dist/src/commands/wizard.js.map +1 -1
  142. package/dist/src/commands/write-commands.d.ts +9 -3
  143. package/dist/src/commands/write-commands.js +136 -31
  144. package/dist/src/commands/write-commands.js.map +1 -1
  145. package/dist/src/constants.d.ts +7 -2
  146. package/dist/src/constants.js +7 -2
  147. package/dist/src/constants.js.map +1 -1
  148. package/dist/src/eval/manifest-v1.d.ts +68 -0
  149. package/dist/src/eval/manifest-v1.js +353 -0
  150. package/dist/src/eval/manifest-v1.js.map +1 -0
  151. package/dist/src/generators/local-plugin.d.ts +5 -1
  152. package/dist/src/generators/local-plugin.js +261 -109
  153. package/dist/src/generators/local-plugin.js.map +1 -1
  154. package/dist/src/generators/permissions.d.ts +5 -2
  155. package/dist/src/generators/permissions.js +28 -15
  156. package/dist/src/generators/permissions.js.map +1 -1
  157. package/dist/src/index.d.ts +10 -4
  158. package/dist/src/index.js +1774 -609
  159. package/dist/src/index.js.map +1 -1
  160. package/dist/src/output/command-receipt.d.ts +47 -46
  161. package/dist/src/output/command-receipt.js +277 -79
  162. package/dist/src/output/command-receipt.js.map +1 -1
  163. package/dist/src/output/model.d.ts +3 -44
  164. package/dist/src/output/model.js +1 -144
  165. package/dist/src/output/model.js.map +1 -1
  166. package/dist/src/output/rebuild-progress.js +15 -13
  167. package/dist/src/output/rebuild-progress.js.map +1 -1
  168. package/dist/src/portable/commands.d.ts +46 -7
  169. package/dist/src/portable/commands.js +349 -37
  170. package/dist/src/portable/commands.js.map +1 -1
  171. package/dist/src/portable/materializer.d.ts +17 -4
  172. package/dist/src/portable/materializer.js +186 -41
  173. package/dist/src/portable/materializer.js.map +1 -1
  174. package/dist/src/portable/skills-cli.d.ts +15 -7
  175. package/dist/src/portable/skills-cli.js +74 -20
  176. package/dist/src/portable/skills-cli.js.map +1 -1
  177. package/dist/src/review/eval-source-input.d.ts +43 -0
  178. package/dist/src/review/eval-source-input.js +207 -0
  179. package/dist/src/review/eval-source-input.js.map +1 -0
  180. package/dist/src/review/review-profile.d.ts +17 -0
  181. package/dist/src/review/review-profile.js +234 -0
  182. package/dist/src/review/review-profile.js.map +1 -0
  183. package/dist/src/review/review-selection.d.ts +30 -0
  184. package/dist/src/review/review-selection.js +527 -0
  185. package/dist/src/review/review-selection.js.map +1 -0
  186. package/dist/src/review/review-types.d.ts +68 -0
  187. package/dist/src/review/review-types.js +16 -0
  188. package/dist/src/review/review-types.js.map +1 -0
  189. package/dist/src/review/skill-materialization.d.ts +26 -0
  190. package/dist/src/review/skill-materialization.js +217 -0
  191. package/dist/src/review/skill-materialization.js.map +1 -0
  192. package/dist/src/review/source-binding.d.ts +183 -0
  193. package/dist/src/review/source-binding.js +708 -0
  194. package/dist/src/review/source-binding.js.map +1 -0
  195. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  196. package/dist/src/tui/catalog-freshness.js +2 -0
  197. package/dist/src/tui/catalog-freshness.js.map +1 -0
  198. package/dist/src/tui/catalog-generation.d.ts +21 -0
  199. package/dist/src/tui/catalog-generation.js +156 -0
  200. package/dist/src/tui/catalog-generation.js.map +1 -0
  201. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  202. package/dist/src/tui/catalog-sources/projection.js +17 -0
  203. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  204. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  205. package/dist/src/tui/catalog-sources/review.js +13 -0
  206. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  207. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  208. package/dist/src/tui/catalog-sources/screens.js +40 -0
  209. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  210. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  211. package/dist/src/tui/catalog-sources/session.js +300 -0
  212. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  213. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  214. package/dist/src/tui/catalog-sources/types.js +2 -0
  215. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  216. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  217. package/dist/src/tui/catalog-store-task.js +19 -0
  218. package/dist/src/tui/catalog-store-task.js.map +1 -0
  219. package/dist/src/tui/clipboard.d.ts +13 -0
  220. package/dist/src/tui/clipboard.js +95 -0
  221. package/dist/src/tui/clipboard.js.map +1 -0
  222. package/dist/src/tui/components.d.ts +110 -3
  223. package/dist/src/tui/components.js +183 -36
  224. package/dist/src/tui/components.js.map +1 -1
  225. package/dist/src/tui/config-array-draft.d.ts +29 -0
  226. package/dist/src/tui/config-array-draft.js +48 -0
  227. package/dist/src/tui/config-array-draft.js.map +1 -0
  228. package/dist/src/tui/config-leaf-editor.d.ts +19 -0
  229. package/dist/src/tui/config-leaf-editor.js +212 -0
  230. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  231. package/dist/src/tui/config-references.d.ts +34 -0
  232. package/dist/src/tui/config-references.js +70 -0
  233. package/dist/src/tui/config-references.js.map +1 -0
  234. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  235. package/dist/src/tui/config-value-presentation.js +104 -0
  236. package/dist/src/tui/config-value-presentation.js.map +1 -0
  237. package/dist/src/tui/console-app-v4.d.ts +14 -4
  238. package/dist/src/tui/console-app-v4.js +9205 -1951
  239. package/dist/src/tui/console-app-v4.js.map +1 -1
  240. package/dist/src/tui/content-item-card.d.ts +13 -0
  241. package/dist/src/tui/content-item-card.js +51 -0
  242. package/dist/src/tui/content-item-card.js.map +1 -0
  243. package/dist/src/tui/controller-runtime.d.ts +10 -2
  244. package/dist/src/tui/controller-runtime.js +3289 -388
  245. package/dist/src/tui/controller-runtime.js.map +1 -1
  246. package/dist/src/tui/controller.d.ts +622 -45
  247. package/dist/src/tui/controller.js +3589 -768
  248. package/dist/src/tui/controller.js.map +1 -1
  249. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  250. package/dist/src/tui/dependency-graph-view.js +121 -0
  251. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  252. package/dist/src/tui/dependency-graph.d.ts +81 -0
  253. package/dist/src/tui/dependency-graph.js +452 -0
  254. package/dist/src/tui/dependency-graph.js.map +1 -0
  255. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  256. package/dist/src/tui/diagnostic-projection.js +595 -0
  257. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  258. package/dist/src/tui/diagnostics.d.ts +3 -3
  259. package/dist/src/tui/diagnostics.js +14 -2
  260. package/dist/src/tui/diagnostics.js.map +1 -1
  261. package/dist/src/tui/entity-cards.d.ts +55 -0
  262. package/dist/src/tui/entity-cards.js +220 -0
  263. package/dist/src/tui/entity-cards.js.map +1 -0
  264. package/dist/src/tui/glossary.d.ts +23 -0
  265. package/dist/src/tui/glossary.js +42 -0
  266. package/dist/src/tui/glossary.js.map +1 -0
  267. package/dist/src/tui/index.d.ts +6 -1
  268. package/dist/src/tui/index.js +5 -1
  269. package/dist/src/tui/index.js.map +1 -1
  270. package/dist/src/tui/input-display.d.ts +9 -0
  271. package/dist/src/tui/input-display.js +58 -0
  272. package/dist/src/tui/input-display.js.map +1 -0
  273. package/dist/src/tui/keys.d.ts +44 -0
  274. package/dist/src/tui/keys.js +43 -15
  275. package/dist/src/tui/keys.js.map +1 -1
  276. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  277. package/dist/src/tui/lifecycle-action-view.js +36 -0
  278. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  279. package/dist/src/tui/model.d.ts +224 -31
  280. package/dist/src/tui/model.js +1510 -397
  281. package/dist/src/tui/model.js.map +1 -1
  282. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  283. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  284. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  285. package/dist/src/tui/operation-history.d.ts +81 -0
  286. package/dist/src/tui/operation-history.js +136 -0
  287. package/dist/src/tui/operation-history.js.map +1 -0
  288. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  289. package/dist/src/tui/operation-review-planner.js +1392 -0
  290. package/dist/src/tui/operation-review-planner.js.map +1 -0
  291. package/dist/src/tui/plugin-content.d.ts +31 -0
  292. package/dist/src/tui/plugin-content.js +680 -0
  293. package/dist/src/tui/plugin-content.js.map +1 -0
  294. package/dist/src/tui/plugin-detail.d.ts +52 -0
  295. package/dist/src/tui/plugin-detail.js +165 -0
  296. package/dist/src/tui/plugin-detail.js.map +1 -0
  297. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  298. package/dist/src/tui/plugin-write-task.js +286 -0
  299. package/dist/src/tui/plugin-write-task.js.map +1 -0
  300. package/dist/src/tui/project-inventory.d.ts +68 -0
  301. package/dist/src/tui/project-inventory.js +203 -0
  302. package/dist/src/tui/project-inventory.js.map +1 -0
  303. package/dist/src/tui/prompt.js +4 -15
  304. package/dist/src/tui/prompt.js.map +1 -1
  305. package/dist/src/tui/query-header.d.ts +30 -0
  306. package/dist/src/tui/query-header.js +40 -0
  307. package/dist/src/tui/query-header.js.map +1 -0
  308. package/dist/src/tui/reader.d.ts +37 -0
  309. package/dist/src/tui/reader.js +47 -0
  310. package/dist/src/tui/reader.js.map +1 -0
  311. package/dist/src/tui/router.d.ts +197 -10
  312. package/dist/src/tui/router.js +338 -50
  313. package/dist/src/tui/router.js.map +1 -1
  314. package/dist/src/tui/screen-registry.d.ts +701 -0
  315. package/dist/src/tui/screen-registry.js +230 -0
  316. package/dist/src/tui/screen-registry.js.map +1 -0
  317. package/dist/src/tui/session-console-app.d.ts +6 -0
  318. package/dist/src/tui/session-console-app.js +13 -0
  319. package/dist/src/tui/session-console-app.js.map +1 -0
  320. package/dist/src/tui/session-host.d.ts +45 -0
  321. package/dist/src/tui/session-host.js +209 -0
  322. package/dist/src/tui/session-host.js.map +1 -0
  323. package/dist/src/tui/source-detail-card.d.ts +29 -0
  324. package/dist/src/tui/source-detail-card.js +45 -0
  325. package/dist/src/tui/source-detail-card.js.map +1 -0
  326. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  327. package/dist/src/tui/source-ref-presets.js +11 -0
  328. package/dist/src/tui/source-ref-presets.js.map +1 -0
  329. package/dist/src/tui/theme.d.ts +12 -0
  330. package/dist/src/tui/theme.js +12 -0
  331. package/dist/src/tui/theme.js.map +1 -1
  332. package/dist/src/tui/viewport.d.ts +1 -0
  333. package/dist/src/tui/viewport.js +23 -0
  334. package/dist/src/tui/viewport.js.map +1 -1
  335. package/dist/src/tui/views.js +31 -3
  336. package/dist/src/tui/views.js.map +1 -1
  337. package/dist/src/tui/wizard.js +37 -13
  338. package/dist/src/tui/wizard.js.map +1 -1
  339. package/dist/src/types.d.ts +264 -21
  340. package/dist/src/types.js +1 -0
  341. package/dist/src/types.js.map +1 -1
  342. package/dist/src/utils/agent-version.d.ts +7 -1
  343. package/dist/src/utils/agent-version.js +36 -7
  344. package/dist/src/utils/agent-version.js.map +1 -1
  345. package/dist/src/utils/artifact-plan.d.ts +8 -6
  346. package/dist/src/utils/artifact-plan.js +67 -13
  347. package/dist/src/utils/artifact-plan.js.map +1 -1
  348. package/dist/src/utils/artifact-renderer.d.ts +24 -10
  349. package/dist/src/utils/artifact-renderer.js +230 -220
  350. package/dist/src/utils/artifact-renderer.js.map +1 -1
  351. package/dist/src/utils/artifact-request.d.ts +32 -0
  352. package/dist/src/utils/artifact-request.js +90 -0
  353. package/dist/src/utils/artifact-request.js.map +1 -0
  354. package/dist/src/utils/artifact-sources.d.ts +4 -0
  355. package/dist/src/utils/artifact-sources.js +17 -0
  356. package/dist/src/utils/artifact-sources.js.map +1 -1
  357. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  358. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  359. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  360. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  361. package/dist/src/utils/bundle-integrity.js +0 -25
  362. package/dist/src/utils/bundle-integrity.js.map +1 -1
  363. package/dist/src/utils/bundle-layout.js +29 -29
  364. package/dist/src/utils/bundle-layout.js.map +1 -1
  365. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  366. package/dist/src/utils/catalog-capability-projection.js +14 -0
  367. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  368. package/dist/src/utils/catalog-digests.d.ts +10 -0
  369. package/dist/src/utils/catalog-digests.js +57 -20
  370. package/dist/src/utils/catalog-digests.js.map +1 -1
  371. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  372. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  373. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  374. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  375. package/dist/src/utils/catalog-generation-error.js +30 -0
  376. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  377. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  378. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  379. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  380. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  381. package/dist/src/utils/catalog-generation-service.js +1271 -0
  382. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  383. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  384. package/dist/src/utils/catalog-generation-state.js +192 -0
  385. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  386. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  387. package/dist/src/utils/catalog-generation-store.js +452 -0
  388. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  389. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  390. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  391. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  392. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  393. package/dist/src/utils/catalog-operation-context.js +142 -0
  394. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  395. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  396. package/dist/src/utils/catalog-public-error.js +28 -8
  397. package/dist/src/utils/catalog-public-error.js.map +1 -1
  398. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  399. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  400. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  401. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  402. package/dist/src/utils/catalog-snapshot.js +11 -3
  403. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  404. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  405. package/dist/src/utils/catalog-source-identity.js +21 -2
  406. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  407. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  408. package/dist/src/utils/catalog-source-impact.js +344 -0
  409. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  410. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  411. package/dist/src/utils/catalog-source-references.js +195 -347
  412. package/dist/src/utils/catalog-source-references.js.map +1 -1
  413. package/dist/src/utils/catalog-sources.d.ts +15 -1
  414. package/dist/src/utils/catalog-sources.js +206 -27
  415. package/dist/src/utils/catalog-sources.js.map +1 -1
  416. package/dist/src/utils/claude-skills-root.d.ts +8 -0
  417. package/dist/src/utils/claude-skills-root.js +76 -0
  418. package/dist/src/utils/claude-skills-root.js.map +1 -0
  419. package/dist/src/utils/codex-config.d.ts +2 -0
  420. package/dist/src/utils/codex-config.js +26 -5
  421. package/dist/src/utils/codex-config.js.map +1 -1
  422. package/dist/src/utils/codex-manager.d.ts +79 -0
  423. package/dist/src/utils/codex-manager.js +735 -0
  424. package/dist/src/utils/codex-manager.js.map +1 -0
  425. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  426. package/dist/src/utils/codex-marketplace-path.js +45 -0
  427. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  428. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  429. package/dist/src/utils/codex-native-observation.js +154 -0
  430. package/dist/src/utils/codex-native-observation.js.map +1 -0
  431. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  432. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  433. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  434. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  435. package/dist/src/utils/codex-reconciler.js +298 -0
  436. package/dist/src/utils/codex-reconciler.js.map +1 -0
  437. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  438. package/dist/src/utils/codex-shared-native.js +81 -0
  439. package/dist/src/utils/codex-shared-native.js.map +1 -0
  440. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  441. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  442. package/dist/src/utils/codex-skills-root.d.ts +4 -0
  443. package/dist/src/utils/codex-skills-root.js +25 -0
  444. package/dist/src/utils/codex-skills-root.js.map +1 -0
  445. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  446. package/dist/src/utils/codex-surface-analysis.js +247 -0
  447. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  448. package/dist/src/utils/dynamic-skill-tree.d.ts +5 -0
  449. package/dist/src/utils/dynamic-skill-tree.js +56 -7
  450. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  451. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  452. package/dist/src/utils/git-catalog-provider.js +177 -145
  453. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  454. package/dist/src/utils/local-marketplace.d.ts +27 -1
  455. package/dist/src/utils/local-marketplace.js +434 -84
  456. package/dist/src/utils/local-marketplace.js.map +1 -1
  457. package/dist/src/utils/managed-command-closure.d.ts +3 -0
  458. package/dist/src/utils/managed-command-closure.js +35 -0
  459. package/dist/src/utils/managed-command-closure.js.map +1 -0
  460. package/dist/src/utils/managed-command-evidence.d.ts +7 -0
  461. package/dist/src/utils/managed-command-evidence.js +86 -0
  462. package/dist/src/utils/managed-command-evidence.js.map +1 -0
  463. package/dist/src/utils/managed-command-materialization.d.ts +115 -0
  464. package/dist/src/utils/managed-command-materialization.js +359 -0
  465. package/dist/src/utils/managed-command-materialization.js.map +1 -0
  466. package/dist/src/utils/managed-command-runtime.d.ts +33 -0
  467. package/dist/src/utils/managed-command-runtime.js +121 -0
  468. package/dist/src/utils/managed-command-runtime.js.map +1 -0
  469. package/dist/src/utils/managed-command-store.d.ts +128 -0
  470. package/dist/src/utils/managed-command-store.js +589 -0
  471. package/dist/src/utils/managed-command-store.js.map +1 -0
  472. package/dist/src/utils/manifest.d.ts +1 -3
  473. package/dist/src/utils/manifest.js +1 -3
  474. package/dist/src/utils/manifest.js.map +1 -1
  475. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  476. package/dist/src/utils/multi-source-catalog.js +54 -110
  477. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  478. package/dist/src/utils/native-cli.d.ts +61 -7
  479. package/dist/src/utils/native-cli.js +426 -58
  480. package/dist/src/utils/native-cli.js.map +1 -1
  481. package/dist/src/utils/native-tool-context.d.ts +14 -0
  482. package/dist/src/utils/native-tool-context.js +38 -0
  483. package/dist/src/utils/native-tool-context.js.map +1 -0
  484. package/dist/src/utils/native-tool-review.d.ts +21 -0
  485. package/dist/src/utils/native-tool-review.js +102 -0
  486. package/dist/src/utils/native-tool-review.js.map +1 -0
  487. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  488. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  489. package/dist/src/utils/ownership.d.ts +88 -20
  490. package/dist/src/utils/ownership.js +185 -223
  491. package/dist/src/utils/ownership.js.map +1 -1
  492. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  493. package/dist/src/utils/path-catalog-provider.js +54 -65
  494. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  495. package/dist/src/utils/paths.d.ts +0 -1
  496. package/dist/src/utils/paths.js +0 -1
  497. package/dist/src/utils/paths.js.map +1 -1
  498. package/dist/src/utils/plugin-config-impact.d.ts +40 -0
  499. package/dist/src/utils/plugin-config-impact.js +373 -0
  500. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  501. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  502. package/dist/src/utils/plugin-config-write.js +1112 -298
  503. package/dist/src/utils/plugin-config-write.js.map +1 -1
  504. package/dist/src/utils/plugin-config.d.ts +153 -93
  505. package/dist/src/utils/plugin-config.js +1116 -968
  506. package/dist/src/utils/plugin-config.js.map +1 -1
  507. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  508. package/dist/src/utils/plugin-intent-state.js +320 -0
  509. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  510. package/dist/src/utils/plugin-scripts.d.ts +66 -125
  511. package/dist/src/utils/plugin-scripts.js +518 -526
  512. package/dist/src/utils/plugin-scripts.js.map +1 -1
  513. package/dist/src/utils/process-lock.js +14 -5
  514. package/dist/src/utils/process-lock.js.map +1 -1
  515. package/dist/src/utils/process-tree.d.ts +2 -2
  516. package/dist/src/utils/process-tree.js +1 -1
  517. package/dist/src/utils/process-tree.js.map +1 -1
  518. package/dist/src/utils/project-boundary.d.ts +11 -13
  519. package/dist/src/utils/project-boundary.js +28 -34
  520. package/dist/src/utils/project-boundary.js.map +1 -1
  521. package/dist/src/utils/rendered-contract.js +18 -1
  522. package/dist/src/utils/rendered-contract.js.map +1 -1
  523. package/dist/src/utils/runtime-config.d.ts +20 -0
  524. package/dist/src/utils/runtime-config.js +75 -0
  525. package/dist/src/utils/runtime-config.js.map +1 -0
  526. package/dist/src/utils/runtime-skill-closure.js +47 -6
  527. package/dist/src/utils/runtime-skill-closure.js.map +1 -1
  528. package/dist/src/utils/safe-fs.d.ts +21 -0
  529. package/dist/src/utils/safe-fs.js +111 -0
  530. package/dist/src/utils/safe-fs.js.map +1 -0
  531. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  532. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  533. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  534. package/dist/src/utils/sensitive-content.d.ts +4 -0
  535. package/dist/src/utils/sensitive-content.js +36 -0
  536. package/dist/src/utils/sensitive-content.js.map +1 -0
  537. package/dist/src/utils/state-paths.js +7 -2
  538. package/dist/src/utils/state-paths.js.map +1 -1
  539. package/dist/src/utils/target-eligibility.d.ts +8 -2
  540. package/dist/src/utils/target-eligibility.js +17 -8
  541. package/dist/src/utils/target-eligibility.js.map +1 -1
  542. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  543. package/dist/src/utils/windows-claude-shim.js +10 -0
  544. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  545. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  546. package/dist/src/utils/windows-npm-shim.js +140 -0
  547. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  548. package/dist/vitest.config.js +100 -9
  549. package/dist/vitest.config.js.map +1 -1
  550. package/package.json +31 -21
  551. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  552. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  553. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  554. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  555. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  556. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  557. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  558. package/dist/scripts/codex-eval-app-server.js +0 -1228
  559. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  560. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  561. package/dist/scripts/codex-eval-isolation.js +0 -318
  562. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  563. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  564. package/dist/scripts/codex-eval-process-management.js +0 -69
  565. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  566. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  567. package/dist/scripts/codex-eval-process-tree.js +0 -803
  568. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  569. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  570. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  571. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  572. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  573. package/dist/scripts/codex-trigger-eval.js +0 -968
  574. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  575. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  576. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  577. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  578. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  579. package/dist/scripts/eval-plugin-skills.js +0 -1586
  580. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  581. package/dist/scripts/eval-run-layout.d.ts +0 -17
  582. package/dist/scripts/eval-run-layout.js +0 -26
  583. package/dist/scripts/eval-run-layout.js.map +0 -1
  584. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  585. package/dist/scripts/plugin-eval-contract.js +0 -695
  586. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  587. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  588. package/dist/scripts/plugin-eval-materializer.js +0 -421
  589. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  590. package/dist/scripts/skill-reporting.d.ts +0 -212
  591. package/dist/scripts/skill-reporting.js +0 -922
  592. package/dist/scripts/skill-reporting.js.map +0 -1
  593. package/dist/src/commands/review-publication.d.ts +0 -99
  594. package/dist/src/commands/review-publication.js +0 -904
  595. package/dist/src/commands/review-publication.js.map +0 -1
  596. package/dist/src/commands/status-v4.d.ts +0 -123
  597. package/dist/src/commands/status-v4.js +0 -905
  598. package/dist/src/commands/status-v4.js.map +0 -1
  599. package/dist/src/commands/status.d.ts +0 -93
  600. package/dist/src/commands/status.js +0 -442
  601. package/dist/src/commands/status.js.map +0 -1
  602. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  603. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  604. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  605. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  606. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  607. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  608. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  609. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  610. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  611. package/dist/src/utils/catalog-source-cache.js +0 -296
  612. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  613. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  614. package/dist/src/utils/codex-project-surface.js +0 -49
  615. package/dist/src/utils/codex-project-surface.js.map +0 -1
  616. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  617. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  618. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  619. package/dist/src/utils/plugin-release.d.ts +0 -2
  620. package/dist/src/utils/plugin-release.js +0 -2
  621. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -0,0 +1,708 @@
1
+ import crypto from 'node:crypto';
2
+ import path from 'node:path';
3
+ import { canonicalJson, computeCanonicalDirectoryDigest, computeEvalFileDigest, computeEvalProviderDigest, computeSkillDigest, } from '@lesliechan721/agent-skill-eval';
4
+ import { calculateCatalogWorkspaceSourceIdentity, GENERATED_OUTPUT_MARKER_FILENAME, readCatalogWorkspace, formatPluginConfigIssue, validatePluginConfigCandidate, } from '@lesliechan721/aw-plugin-core';
5
+ import fs from 'fs-extra';
6
+ import { assertNoSensitiveProfileConfig, readAwSkillEvalManifest, } from '../eval/manifest-v1.js';
7
+ import { resolveArtifactRenderConfig } from '../utils/artifact-renderer.js';
8
+ import { CLI_RESERVED_IMPORTS } from '../utils/manifest.js';
9
+ import { resolvePluginMetaDependencyClosure } from '../utils/plugin-dependencies.js';
10
+ import { parseAwSourceBindingEvalInput, resolveAwSourceBindingEvalProvider, resolveEvalSourceBindingInput, } from './eval-source-input.js';
11
+ import { normalizeReviewProfileConfig, parseReviewProfile } from './review-profile.js';
12
+ import { resolveReviewSelection } from './review-selection.js';
13
+ export { computeAwSourceBindingSelectedCasesDigest, computeAwSourceBindingSuiteDefaultsDigest, resolveAwSourceBindingEvalProvider, resolveEvalSourceBindingInput, selectAwSourceBindingEvalCases, } from './eval-source-input.js';
14
+ export const AW_SOURCE_BINDING_FILENAME = 'aw-source-binding.json';
15
+ const digestPattern = /^sha256:[0-9a-f]{64}$/u;
16
+ const safeIdPattern = /^[a-z0-9][a-z0-9-]*$/u;
17
+ const unsupportedV1Message = 'AW source binding schema version 1 is unsupported. Run "aw skill eval prepare" or "aw skill materialize" again.';
18
+ function digestCanonical(value) {
19
+ return `sha256:${crypto.createHash('sha256').update(canonicalJson(value)).digest('hex')}`;
20
+ }
21
+ function strictRecord(value, keys) {
22
+ return !!value
23
+ && typeof value === 'object'
24
+ && !Array.isArray(value)
25
+ && Object.keys(value).length === keys.length
26
+ && Object.keys(value).every((key) => keys.includes(key));
27
+ }
28
+ function nonEmptyString(value) {
29
+ return typeof value === 'string' && value.trim() !== '' && value === value.trim();
30
+ }
31
+ function digestString(value) {
32
+ return typeof value === 'string' && digestPattern.test(value);
33
+ }
34
+ function scopeValue(value) {
35
+ return value === 'project' || value === 'user';
36
+ }
37
+ function safeId(value) {
38
+ return typeof value === 'string' && safeIdPattern.test(value);
39
+ }
40
+ function normalizeRelativePath(value) {
41
+ if (typeof value !== 'string'
42
+ || value === ''
43
+ || value.includes('\\')
44
+ || path.posix.isAbsolute(value)
45
+ || path.win32.isAbsolute(value)
46
+ || path.posix.normalize(value) !== value
47
+ || value === '..'
48
+ || value.startsWith('../')) {
49
+ throw new Error('Source binding artifact path must be a safe relative POSIX path.');
50
+ }
51
+ return value;
52
+ }
53
+ function normalizeSource(value) {
54
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
55
+ throw new Error('Source binding source must be an object.');
56
+ }
57
+ const row = value;
58
+ if (row.kind === 'workspace') {
59
+ if (!strictRecord(row, ['kind', 'workspaceIdentity', 'sourceIdentity'])
60
+ || !nonEmptyString(row.workspaceIdentity)
61
+ || !digestString(row.sourceIdentity))
62
+ throw new Error('Source binding Workspace identity is invalid.');
63
+ return {
64
+ kind: 'workspace',
65
+ workspaceIdentity: row.workspaceIdentity,
66
+ sourceIdentity: row.sourceIdentity,
67
+ };
68
+ }
69
+ if (row.kind !== 'catalog-snapshot'
70
+ || !strictRecord(row, [
71
+ 'kind',
72
+ 'sourceId',
73
+ 'catalogSourceIdentity',
74
+ 'logicalIdentity',
75
+ 'snapshotDigest',
76
+ 'workspaceIdentity',
77
+ 'workspaceSourceIdentity',
78
+ ])
79
+ || !safeId(row.sourceId)
80
+ || !digestString(row.catalogSourceIdentity)
81
+ || !nonEmptyString(row.logicalIdentity)
82
+ || !digestString(row.snapshotDigest)
83
+ || !nonEmptyString(row.workspaceIdentity)
84
+ || !digestString(row.workspaceSourceIdentity))
85
+ throw new Error('Source binding Catalog snapshot identity is invalid.');
86
+ return {
87
+ kind: 'catalog-snapshot',
88
+ sourceId: row.sourceId,
89
+ catalogSourceIdentity: row.catalogSourceIdentity,
90
+ logicalIdentity: row.logicalIdentity,
91
+ snapshotDigest: row.snapshotDigest,
92
+ workspaceIdentity: row.workspaceIdentity,
93
+ workspaceSourceIdentity: row.workspaceSourceIdentity,
94
+ };
95
+ }
96
+ function normalizeSubject(value) {
97
+ const row = value;
98
+ if (!strictRecord(row, ['plugin', ...(row?.skill === undefined ? [] : ['skill']), ...(row?.suite === undefined ? [] : ['suite'])])
99
+ || !safeId(row.plugin)
100
+ || (row.skill !== undefined && !safeId(row.skill))
101
+ || (row.suite !== undefined && !safeId(row.suite)))
102
+ throw new Error('Source binding subject is invalid.');
103
+ if (row.suite !== undefined && row.skill === undefined) {
104
+ throw new Error('Source binding suite requires a Skill subject.');
105
+ }
106
+ return {
107
+ plugin: row.plugin,
108
+ ...(row.skill === undefined ? {} : { skill: row.skill }),
109
+ ...(row.suite === undefined ? {} : { suite: row.suite }),
110
+ };
111
+ }
112
+ function normalizeProfile(value) {
113
+ const row = value;
114
+ if (row?.kind === 'review')
115
+ return parseReviewProfile(value);
116
+ if (!strictRecord(row, ['kind', 'id', 'scope', 'inputDigest',
117
+ ...(row?.kind === 'eval' && row.config !== undefined ? ['config'] : [])])
118
+ || !scopeValue(row.scope)
119
+ || !digestString(row.inputDigest))
120
+ throw new Error('Source binding profile is invalid.');
121
+ if (row.kind === 'eval' && safeId(row.id)) {
122
+ return {
123
+ kind: 'eval', id: row.id, scope: row.scope, inputDigest: row.inputDigest,
124
+ ...(row.config === undefined ? {} : { config: normalizeReviewProfileConfig(row.config) }),
125
+ };
126
+ }
127
+ if (row.kind === 'portable' && row.id === `agent-skills-${row.scope}`) {
128
+ return {
129
+ kind: 'portable',
130
+ id: `agent-skills-${row.scope}`,
131
+ scope: row.scope,
132
+ inputDigest: row.inputDigest,
133
+ };
134
+ }
135
+ throw new Error('Source binding profile kind or id is invalid.');
136
+ }
137
+ function normalizeArtifact(value) {
138
+ const row = value;
139
+ if (!row || typeof row !== 'object' || Array.isArray(row) || !digestString(row.digest)) {
140
+ throw new Error('Source binding artifact is invalid.');
141
+ }
142
+ const relativePath = normalizeRelativePath(row.path);
143
+ if (row.kind === 'eval-target') {
144
+ if (!strictRecord(row, ['kind', 'skill', 'path', 'digest']) || !safeId(row.skill)) {
145
+ throw new Error('Source binding Eval Skill artifact is invalid.');
146
+ }
147
+ return { kind: row.kind, skill: row.skill, path: relativePath, digest: row.digest };
148
+ }
149
+ if (row.kind === 'portable-skill' || row.kind === 'review-skill') {
150
+ if (!strictRecord(row, ['kind', 'plugin', 'skill', 'path', 'digest'])
151
+ || !safeId(row.plugin)
152
+ || !safeId(row.skill))
153
+ throw new Error('Source binding materialized Skill artifact is invalid.');
154
+ return {
155
+ kind: row.kind,
156
+ plugin: row.plugin,
157
+ skill: row.skill,
158
+ path: relativePath,
159
+ digest: row.digest,
160
+ };
161
+ }
162
+ if (row.kind === 'eval-workspace' || row.kind === 'eval-cases') {
163
+ if (!strictRecord(row, ['kind', 'path', 'digest'])) {
164
+ throw new Error('Source binding Eval artifact is invalid.');
165
+ }
166
+ return { kind: row.kind, path: relativePath, digest: row.digest };
167
+ }
168
+ throw new Error('Source binding artifact kind is invalid.');
169
+ }
170
+ export function parseAwSourceBinding(value) {
171
+ const row = value;
172
+ if (row?.schemaVersion === 1 && row.kind === 'aw-source-binding') {
173
+ throw new Error(unsupportedV1Message);
174
+ }
175
+ if (!strictRecord(row, [
176
+ 'schemaVersion',
177
+ 'kind',
178
+ 'source',
179
+ 'subject',
180
+ 'profile',
181
+ ...(row?.evalInput === undefined ? [] : ['evalInput']),
182
+ 'artifacts',
183
+ 'finalDigest',
184
+ ])
185
+ || row.schemaVersion !== 2
186
+ || row.kind !== 'aw-source-binding'
187
+ || !Array.isArray(row.artifacts)
188
+ || row.artifacts.length === 0
189
+ || !digestString(row.finalDigest))
190
+ throw new Error('Source binding receipt is invalid.');
191
+ const binding = {
192
+ schemaVersion: 2,
193
+ kind: 'aw-source-binding',
194
+ source: normalizeSource(row.source),
195
+ subject: normalizeSubject(row.subject),
196
+ profile: normalizeProfile(row.profile),
197
+ ...(row.evalInput === undefined ? {} : { evalInput: parseAwSourceBindingEvalInput(row.evalInput) }),
198
+ artifacts: row.artifacts.map(normalizeArtifact),
199
+ finalDigest: row.finalDigest,
200
+ };
201
+ const paths = binding.artifacts.map((artifact) => artifact.path);
202
+ if (new Set(paths).size !== paths.length || paths.includes(AW_SOURCE_BINDING_FILENAME)) {
203
+ throw new Error('Source binding artifact paths must be unique and exclude the receipt.');
204
+ }
205
+ if (binding.profile.kind === 'eval') {
206
+ const expectedKinds = ['eval-cases', 'eval-target', 'eval-workspace'];
207
+ if (binding.artifacts.length !== 3
208
+ || [...binding.artifacts.map((artifact) => artifact.kind)].sort().join(',') !== expectedKinds.join(',')
209
+ || binding.subject.skill === undefined
210
+ || binding.subject.suite === undefined
211
+ || binding.evalInput === undefined
212
+ || binding.artifacts.some((artifact) => artifact.kind === 'eval-target' && artifact.skill !== binding.subject.skill))
213
+ throw new Error('Source binding artifacts do not match the Eval profile.');
214
+ }
215
+ else if (binding.profile.kind === 'portable') {
216
+ if (binding.subject.skill !== undefined
217
+ || binding.subject.suite !== undefined
218
+ || binding.evalInput !== undefined
219
+ || binding.artifacts.some((artifact) => artifact.kind !== 'portable-skill')
220
+ || new Set(binding.artifacts.map((artifact) => artifact.kind === 'portable-skill' ? artifact.skill : '')).size !== binding.artifacts.length)
221
+ throw new Error('Source binding artifacts do not match the portable profile.');
222
+ }
223
+ else {
224
+ const reviewArtifacts = binding.artifacts.filter((artifact) => artifact.kind === 'review-skill');
225
+ if (binding.subject.suite !== undefined
226
+ || binding.evalInput !== undefined
227
+ || reviewArtifacts.length !== binding.artifacts.length
228
+ || reviewArtifacts.some((artifact) => artifact.plugin !== binding.subject.plugin)
229
+ || new Set(reviewArtifacts.map((artifact) => artifact.skill)).size !== reviewArtifacts.length
230
+ || (binding.subject.skill !== undefined
231
+ && (reviewArtifacts.length !== 1 || reviewArtifacts[0].skill !== binding.subject.skill)))
232
+ throw new Error('Source binding artifacts do not match the Review profile.');
233
+ }
234
+ return binding;
235
+ }
236
+ function bindingDigest(binding) {
237
+ return digestCanonical(binding);
238
+ }
239
+ async function artifactDigest(rootDir, artifact) {
240
+ const relativePath = normalizeRelativePath(artifact.path);
241
+ const absolutePath = path.resolve(rootDir, ...relativePath.split('/'));
242
+ const relative = path.relative(rootDir, absolutePath);
243
+ if (relative === '' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
244
+ throw new Error('Source binding artifact escapes its materialization root.');
245
+ }
246
+ let current = rootDir;
247
+ for (const segment of relativePath.split('/')) {
248
+ current = path.join(current, segment);
249
+ const info = await fs.lstat(current);
250
+ if (info.isSymbolicLink())
251
+ throw new Error('Source binding artifact path contains a symbolic link.');
252
+ }
253
+ if (artifact.kind === 'eval-workspace')
254
+ return computeCanonicalDirectoryDigest(absolutePath);
255
+ if (artifact.kind === 'eval-cases')
256
+ return computeEvalFileDigest(absolutePath);
257
+ return computeSkillDigest(absolutePath);
258
+ }
259
+ export async function writeAwSourceBinding(options) {
260
+ const rootDir = await fs.realpath(options.rootDir);
261
+ const artifacts = [];
262
+ for (const artifact of options.artifacts) {
263
+ artifacts.push({ ...artifact, digest: await artifactDigest(rootDir, artifact) });
264
+ }
265
+ const unsigned = {
266
+ schemaVersion: 2,
267
+ kind: 'aw-source-binding',
268
+ source: options.source,
269
+ subject: options.subject,
270
+ profile: options.profile,
271
+ ...(options.evalInput === undefined ? {} : { evalInput: options.evalInput }),
272
+ artifacts,
273
+ };
274
+ const binding = parseAwSourceBinding({ ...unsigned, finalDigest: bindingDigest(unsigned) });
275
+ const bindingPath = path.join(rootDir, AW_SOURCE_BINDING_FILENAME);
276
+ await fs.writeFile(bindingPath, `${JSON.stringify(binding, null, 2)}\n`, { flag: 'wx' });
277
+ return { bindingPath, binding };
278
+ }
279
+ export async function resolveWorkspaceBindingSource(workspace) {
280
+ return {
281
+ kind: 'workspace',
282
+ workspaceIdentity: workspace.workspaceIdentity,
283
+ sourceIdentity: await calculateCatalogWorkspaceSourceIdentity(workspace),
284
+ };
285
+ }
286
+ export async function resolveCatalogSnapshotBindingSource(source) {
287
+ const markerPath = path.join(source.rootDir, GENERATED_OUTPUT_MARKER_FILENAME);
288
+ const markerInfo = await fs.lstat(markerPath);
289
+ if (!markerInfo.isFile() || markerInfo.isSymbolicLink()) {
290
+ throw new Error('Validated Catalog snapshot marker is unsafe.');
291
+ }
292
+ const marker = await fs.readJson(markerPath);
293
+ if (!strictRecord(marker, ['schemaVersion', 'kind', 'workspaceIdentity', 'sourceIdentity'])
294
+ || marker.schemaVersion !== 1
295
+ || marker.kind !== 'catalog'
296
+ || !nonEmptyString(marker.workspaceIdentity)
297
+ || !digestString(marker.sourceIdentity))
298
+ throw new Error('Validated Catalog snapshot marker is invalid.');
299
+ return {
300
+ kind: 'catalog-snapshot',
301
+ sourceId: source.sourceId,
302
+ catalogSourceIdentity: source.sourceIdentity,
303
+ logicalIdentity: source.logicalIdentity,
304
+ snapshotDigest: source.snapshotDigest,
305
+ workspaceIdentity: marker.workspaceIdentity,
306
+ workspaceSourceIdentity: marker.sourceIdentity,
307
+ };
308
+ }
309
+ export function resolveEvalProfileBindingInput(profile, plugins, configOverrides = {}) {
310
+ assertNoSensitiveProfileConfig(profile, plugins);
311
+ const normalizedConfig = normalizeReviewProfileConfig(configOverrides);
312
+ const selectedPlugins = new Set(profile.plugins.map((entry) => entry.name));
313
+ if (Object.keys(normalizedConfig).some((name) => !selectedPlugins.has(name))) {
314
+ throw new Error('Eval config overrides must name plugins in the selected profile.');
315
+ }
316
+ assertNoSensitiveProfileConfig({
317
+ ...profile,
318
+ plugins: profile.plugins.map((entry) => ({
319
+ ...entry,
320
+ config: { ...entry.config, ...(normalizedConfig[entry.name] ?? {}) },
321
+ })),
322
+ }, plugins);
323
+ const explicitConfig = new Map(profile.plugins.map((entry) => [entry.name, entry.config]));
324
+ const overrides = new Map(Object.entries(profile.configByScope ?? {}).map(([scope, entries]) => [
325
+ scope,
326
+ new Map(entries?.map((entry) => [entry.name, entry.config]) ?? []),
327
+ ]));
328
+ const closure = resolvePluginMetaDependencyClosure(plugins, profile.plugins.map((entry) => entry.name));
329
+ const materializationProfile = {
330
+ id: profile.id,
331
+ scope: profile.scope,
332
+ plugins: closure.map((plugin) => ({
333
+ name: plugin.manifest.name,
334
+ configByScope: Object.fromEntries([
335
+ profile.scope,
336
+ ...((plugin.manifest.artifacts?.targets ?? []).some((target) => target.platform === 'codex'
337
+ && target.target === 'codex.skill'
338
+ && target.scopes.includes(profile.scope)
339
+ && target.delivery?.mode === 'codex-native')
340
+ ? ['user']
341
+ : []),
342
+ ].sort().map((scope) => [
343
+ scope,
344
+ {
345
+ ...(explicitConfig.get(plugin.manifest.name) ?? {}),
346
+ ...(overrides.get(scope)?.get(plugin.manifest.name) ?? {}),
347
+ ...(normalizedConfig[plugin.manifest.name] ?? {}),
348
+ },
349
+ ])),
350
+ })),
351
+ };
352
+ for (const plugin of closure) {
353
+ const installation = materializationProfile.plugins.find((entry) => entry.name === plugin.manifest.name);
354
+ for (const [scope, config] of Object.entries(installation.configByScope)) {
355
+ for (const [key, field] of Object.entries(plugin.manifest.config?.fields ?? {})) {
356
+ if (field.required === true && field.default === undefined && !Object.hasOwn(config, key)) {
357
+ throw new Error(`Eval profile "${profile.id}" is missing required config "${key}" `
358
+ + `for plugin "${plugin.manifest.name}" in ${scope} scope.`);
359
+ }
360
+ }
361
+ if (plugin.manifest.config) {
362
+ const defaults = Object.fromEntries(Object.entries(plugin.manifest.config.fields)
363
+ .flatMap(([key, field]) => field.default === undefined ? [] : [[key, field.default]]));
364
+ const issues = validatePluginConfigCandidate(plugin.manifest.config, { ...defaults, ...config });
365
+ if (issues.length > 0) {
366
+ throw new Error(`Eval profile "${profile.id}" has invalid config for plugin "${plugin.manifest.name}" in ${scope} scope: ${formatPluginConfigIssue(issues[0])}`);
367
+ }
368
+ }
369
+ }
370
+ }
371
+ return {
372
+ materializationProfile,
373
+ profile: {
374
+ kind: 'eval',
375
+ id: profile.id,
376
+ scope: profile.scope,
377
+ inputDigest: digestCanonical(materializationProfile),
378
+ ...(Object.keys(normalizedConfig).length === 0 ? {} : { config: normalizedConfig }),
379
+ },
380
+ };
381
+ }
382
+ export async function resolvePortablePluginProfileConfig(options) {
383
+ const config = await resolveArtifactRenderConfig({
384
+ sourceId: options.sourceId ?? options.plugin.sourceId,
385
+ sourceIdentity: options.catalogSourceIdentity ?? options.plugin.sourceIdentity,
386
+ logicalIdentity: options.logicalIdentity ?? options.plugin.catalogLogicalIdentity,
387
+ pluginName: options.plugin.manifest.name,
388
+ manifest: options.plugin.manifest,
389
+ scope: options.scope,
390
+ cwd: options.cwd,
391
+ env: options.env,
392
+ });
393
+ if (config.issues.length > 0) {
394
+ throw new Error(`Portable materialization config is invalid: ${config.issues.map((issue) => issue.message).join('; ')}`);
395
+ }
396
+ return {
397
+ config,
398
+ digest: digestCanonical({ values: config.values, sources: config.sources }),
399
+ };
400
+ }
401
+ export async function resolvePortableProfileBindingInput(options) {
402
+ const closure = resolvePluginMetaDependencyClosure(options.plugins, [options.pluginName]);
403
+ const configDigests = [];
404
+ for (const plugin of closure) {
405
+ if (!plugin.manifest.distributions?.agentSkills)
406
+ continue;
407
+ const resolved = await resolvePortablePluginProfileConfig({ ...options, plugin });
408
+ const id = options.sourceId ? `${options.sourceId}/${plugin.manifest.name}` : plugin.manifest.name;
409
+ configDigests.push([id, resolved.digest]);
410
+ }
411
+ return {
412
+ kind: 'portable',
413
+ id: `agent-skills-${options.scope}`,
414
+ scope: options.scope,
415
+ inputDigest: `sha256:${crypto.createHash('sha256')
416
+ .update(JSON.stringify(configDigests))
417
+ .digest('hex')}`,
418
+ };
419
+ }
420
+ function sameSubject(left, right) {
421
+ return left.plugin === right.plugin && left.skill === right.skill && left.suite === right.suite;
422
+ }
423
+ async function currentWorkspaceProfile(options) {
424
+ const plugin = options.workspace.plugins.find((entry) => entry.manifest.name === options.binding.subject.plugin);
425
+ if (!plugin)
426
+ throw new Error('The bound plugin is not present in the current Workspace.');
427
+ if (options.binding.profile.kind === 'eval') {
428
+ const loaded = await readAwSkillEvalManifest({ plugin, skill: options.binding.subject.skill });
429
+ const suite = loaded.manifest.suites.find((entry) => entry.id === options.binding.subject.suite);
430
+ const profile = loaded.manifest.profiles.find((entry) => entry.id === options.binding.profile.id);
431
+ if (!suite || !profile || suite.profiles && !suite.profiles.includes(profile.id)) {
432
+ throw new Error('The bound Eval suite or profile is not present in the current Workspace.');
433
+ }
434
+ return resolveEvalProfileBindingInput(profile, options.workspace.plugins, options.binding.profile.config).profile;
435
+ }
436
+ if (options.binding.profile.kind === 'review') {
437
+ const skills = options.binding.artifacts.flatMap((artifact) => artifact.kind === 'review-skill' ? [artifact.skill] : []);
438
+ const selection = await resolveReviewSelection({
439
+ cwd: options.workspace.workspaceRoot,
440
+ workspaceRoot: options.workspace.workspaceRoot,
441
+ target: options.binding.subject.plugin,
442
+ skills,
443
+ platform: options.binding.profile.platform,
444
+ scope: options.binding.profile.scope,
445
+ config: options.binding.profile.config,
446
+ env: options.env,
447
+ });
448
+ const profile = selection.profiles[0]?.profile;
449
+ if (!profile)
450
+ throw new Error('The bound Review profile is not present in the current Workspace.');
451
+ return profile;
452
+ }
453
+ const source = options.binding.source;
454
+ return resolvePortableProfileBindingInput({
455
+ plugins: options.workspace.plugins,
456
+ pluginName: options.binding.subject.plugin,
457
+ scope: options.binding.profile.scope,
458
+ cwd: options.cwd,
459
+ env: options.env,
460
+ ...(source.kind === 'catalog-snapshot'
461
+ ? {
462
+ sourceId: source.sourceId,
463
+ catalogSourceIdentity: source.catalogSourceIdentity,
464
+ logicalIdentity: source.logicalIdentity,
465
+ }
466
+ : {}),
467
+ });
468
+ }
469
+ export async function resolveCurrentWorkspaceAwSourceBinding(options) {
470
+ return {
471
+ source: options.context.source,
472
+ profile: await currentWorkspaceProfile({
473
+ workspace: options.context.workspace,
474
+ binding: options.binding,
475
+ cwd: options.cwd ?? options.context.workspace.workspaceRoot,
476
+ env: options.env,
477
+ }),
478
+ };
479
+ }
480
+ export async function createAwSourceBindingWorkspaceValidationContext(workspaceRoot) {
481
+ const workspace = await readCatalogWorkspace(workspaceRoot, { reservedImports: CLI_RESERVED_IMPORTS });
482
+ return { workspace, source: await resolveWorkspaceBindingSource(workspace) };
483
+ }
484
+ export async function readAwSourceBinding(bindingPath) {
485
+ const resolved = path.resolve(bindingPath);
486
+ const info = await fs.lstat(resolved);
487
+ if (!info.isFile() || info.isSymbolicLink() || path.basename(resolved) !== AW_SOURCE_BINDING_FILENAME) {
488
+ throw new Error('AW source binding receipt path is invalid.');
489
+ }
490
+ const binding = parseAwSourceBinding(await fs.readJson(resolved));
491
+ const unsigned = {
492
+ schemaVersion: binding.schemaVersion,
493
+ kind: binding.kind,
494
+ source: binding.source,
495
+ subject: binding.subject,
496
+ profile: binding.profile,
497
+ ...(binding.evalInput === undefined ? {} : { evalInput: binding.evalInput }),
498
+ artifacts: binding.artifacts,
499
+ };
500
+ if (binding.finalDigest !== bindingDigest(unsigned)) {
501
+ throw new Error('AW source binding receipt digest is invalid.');
502
+ }
503
+ return binding;
504
+ }
505
+ function bindingMatchesWorkspaceSource(binding, current) {
506
+ return binding.kind === 'workspace'
507
+ ? binding.workspaceIdentity === current.workspaceIdentity
508
+ && binding.sourceIdentity === current.sourceIdentity
509
+ : binding.workspaceIdentity === current.workspaceIdentity
510
+ && binding.workspaceSourceIdentity === current.sourceIdentity;
511
+ }
512
+ async function currentPortableArtifactOwners(options) {
513
+ const closure = resolvePluginMetaDependencyClosure(options.workspace.plugins, [options.binding.subject.plugin]);
514
+ const owners = new Map();
515
+ const record = (skill, plugin) => {
516
+ owners.set(skill, owners.has(skill) ? null : plugin);
517
+ };
518
+ for (const plugin of closure) {
519
+ const distribution = plugin.manifest.distributions?.agentSkills;
520
+ if (!distribution)
521
+ continue;
522
+ const dynamicKeys = new Set((plugin.manifest.artifacts?.targets ?? [])
523
+ .filter((target) => target.target === 'agent-skills.skill')
524
+ .map((target) => target.skillKey));
525
+ for (const target of plugin.manifest.artifacts?.targets ?? []) {
526
+ if (target.target === 'agent-skills.skill'
527
+ && target.scopes.includes(options.binding.profile.scope))
528
+ record(target.skillKey, plugin.manifest.name);
529
+ }
530
+ if (!distribution.skills)
531
+ continue;
532
+ const root = path.join(plugin.rootDir, distribution.skills.replace(/^\.\//u, ''));
533
+ const rootInfo = await fs.lstat(root).catch(() => null);
534
+ if (!rootInfo?.isDirectory() || rootInfo.isSymbolicLink())
535
+ continue;
536
+ for (const entry of await fs.readdir(root, { withFileTypes: true })) {
537
+ if (dynamicKeys.has(entry.name))
538
+ continue;
539
+ const info = await fs.lstat(path.join(root, entry.name)).catch(() => null);
540
+ if (entry.isDirectory() && info?.isDirectory() && !info.isSymbolicLink()) {
541
+ record(entry.name, plugin.manifest.name);
542
+ }
543
+ }
544
+ }
545
+ return owners;
546
+ }
547
+ async function currentEvalInput(options) {
548
+ const evalInput = options.binding.evalInput;
549
+ if (options.binding.profile.kind !== 'eval' || !evalInput) {
550
+ throw new Error('The source binding does not contain Eval input.');
551
+ }
552
+ const plugin = options.workspace.plugins.find((entry) => entry.manifest.name === options.binding.subject.plugin);
553
+ if (!plugin)
554
+ throw new Error('The bound plugin is not present in the current Workspace.');
555
+ const loaded = await readAwSkillEvalManifest({ plugin, skill: options.binding.subject.skill });
556
+ const suite = loaded.manifest.suites.find((entry) => entry.id === options.binding.subject.suite);
557
+ if (!suite)
558
+ throw new Error('The bound Eval suite is not present in the current Workspace.');
559
+ const preparedEvalRoot = path.join(options.preparedRoot, 'workspace', 'eval');
560
+ const provider = await resolveAwSourceBindingEvalProvider({
561
+ evalRoot: loaded.evalRoot,
562
+ preparedEvalRoot,
563
+ suite,
564
+ });
565
+ const resolved = await resolveEvalSourceBindingInput({
566
+ workspaceRoot: options.workspace.workspaceRoot,
567
+ evalRoot: loaded.evalRoot,
568
+ manifestPath: loaded.manifestPath,
569
+ suite,
570
+ defaults: loaded.manifest.defaults,
571
+ cases: loaded.casesBySuite.get(suite.id),
572
+ corpusPaths: loaded.manifest.suites.map((entry) => entry.cases),
573
+ selection: { caseIds: evalInput.selectedCaseIds },
574
+ providerDigest: computeEvalProviderDigest(provider),
575
+ preparedEvalRoot,
576
+ });
577
+ const casesArtifact = options.binding.artifacts.find((artifact) => artifact.kind === 'eval-cases');
578
+ if (!casesArtifact)
579
+ throw new Error('The source binding does not contain prepared Eval cases.');
580
+ const preparedCases = await fs.readJson(path.join(options.preparedRoot, ...casesArtifact.path.split('/')));
581
+ if (digestCanonical(preparedCases) !== resolved.input.selectedCasesDigest) {
582
+ throw new Error('Prepared Eval cases do not match the current selected source cases.');
583
+ }
584
+ return resolved.input;
585
+ }
586
+ export async function validateAwSourceBindingForWorkspace(options) {
587
+ const bindingPath = path.resolve(options.bindingPath);
588
+ const info = await fs.lstat(bindingPath).catch(() => null);
589
+ if (!info) {
590
+ return {
591
+ state: 'incomplete',
592
+ binding: null,
593
+ outputs: [],
594
+ issues: [{ code: 'sourceBindingMissing', message: 'AW source binding receipt is missing.' }],
595
+ };
596
+ }
597
+ if (!info.isFile() || info.isSymbolicLink() || path.basename(bindingPath) !== AW_SOURCE_BINDING_FILENAME) {
598
+ return {
599
+ state: 'invalid',
600
+ binding: null,
601
+ outputs: [],
602
+ issues: [{ code: 'sourceBindingInvalid', message: 'AW source binding receipt path is invalid.' }],
603
+ };
604
+ }
605
+ let binding;
606
+ try {
607
+ binding = await readAwSourceBinding(bindingPath);
608
+ }
609
+ catch (error) {
610
+ const message = error instanceof Error && error.message === unsupportedV1Message
611
+ ? unsupportedV1Message
612
+ : 'AW source binding receipt is invalid.';
613
+ return {
614
+ state: 'invalid',
615
+ binding: null,
616
+ outputs: [],
617
+ issues: [{ code: 'sourceBindingInvalid', message }],
618
+ };
619
+ }
620
+ const issues = [];
621
+ if (!sameSubject(binding.subject, options.expectedSubject)) {
622
+ issues.push({ code: 'sourceBindingSubjectDrift', message: 'The bound subject does not match the requested source subject.' });
623
+ }
624
+ if (!bindingMatchesWorkspaceSource(binding.source, options.context.source)) {
625
+ issues.push({ code: 'sourceBindingSourceDrift', message: 'The current Workspace source identity differs from the bound source.' });
626
+ }
627
+ try {
628
+ const current = await resolveCurrentWorkspaceAwSourceBinding({
629
+ context: options.context,
630
+ binding,
631
+ cwd: options.cwd,
632
+ env: options.env,
633
+ });
634
+ if (binding.profile.kind !== current.profile.kind
635
+ || binding.profile.id !== current.profile.id
636
+ || binding.profile.scope !== current.profile.scope
637
+ || binding.profile.inputDigest !== current.profile.inputDigest) {
638
+ issues.push({ code: 'sourceBindingProfileDrift', message: 'The current profile input differs from the bound profile.' });
639
+ }
640
+ }
641
+ catch {
642
+ issues.push({ code: 'sourceBindingProfileDrift', message: 'The current profile input cannot be validated.' });
643
+ }
644
+ const rootDir = path.dirname(bindingPath);
645
+ if (binding.profile.kind === 'eval') {
646
+ try {
647
+ const current = await currentEvalInput({
648
+ workspace: options.context.workspace,
649
+ binding,
650
+ preparedRoot: rootDir,
651
+ });
652
+ if (canonicalJson(current) !== canonicalJson(binding.evalInput)) {
653
+ issues.push({
654
+ code: 'sourceBindingEvalInputDrift',
655
+ message: 'The current Eval source input differs from the bound source input.',
656
+ });
657
+ }
658
+ }
659
+ catch {
660
+ issues.push({
661
+ code: 'sourceBindingEvalInputDrift',
662
+ message: 'The current Eval source input cannot be validated against the prepared input.',
663
+ });
664
+ }
665
+ }
666
+ let portableOwners = null;
667
+ if (binding.profile.kind === 'portable') {
668
+ try {
669
+ portableOwners = await currentPortableArtifactOwners({
670
+ workspace: options.context.workspace,
671
+ binding,
672
+ });
673
+ }
674
+ catch {
675
+ portableOwners = new Map();
676
+ }
677
+ }
678
+ for (const artifact of binding.artifacts) {
679
+ if (artifact.kind === 'portable-skill'
680
+ && portableOwners?.get(artifact.skill) !== artifact.plugin) {
681
+ issues.push({
682
+ code: 'sourceBindingArtifactDrift',
683
+ message: `The current source does not declare ${artifact.plugin}/${artifact.skill} in the bound dependency closure.`,
684
+ });
685
+ }
686
+ try {
687
+ const actual = await artifactDigest(rootDir, artifact);
688
+ if (actual !== artifact.digest) {
689
+ issues.push({ code: 'sourceBindingArtifactDrift', message: `The materialized artifact differs from its binding: ${artifact.path}` });
690
+ }
691
+ }
692
+ catch {
693
+ issues.push({ code: 'sourceBindingArtifactDrift', message: `The materialized artifact is missing or invalid: ${artifact.path}` });
694
+ }
695
+ }
696
+ return issues.length === 0
697
+ ? {
698
+ state: 'verified',
699
+ binding,
700
+ outputs: binding.artifacts.map((artifact) => ({
701
+ ...artifact,
702
+ path: path.resolve(rootDir, ...artifact.path.split('/')),
703
+ })),
704
+ issues: [],
705
+ }
706
+ : { state: 'drifted', binding, outputs: [], issues };
707
+ }
708
+ //# sourceMappingURL=source-binding.js.map