@lesliechan721/aw 0.1.0-beta.4 → 0.1.0-beta.40

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 (571) 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-version-check.d.mts +15 -0
  11. package/dist/authoring/scripts/lib/plugin-version-check.mjs +239 -232
  12. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  13. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -90
  14. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -120
  15. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  16. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  17. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  18. package/dist/authoring/scripts/remove-plugin.mjs +367 -0
  19. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -0
  20. package/dist/authoring/scripts/validate-plugin.mjs +353 -1175
  21. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  22. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  23. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  24. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  25. package/dist/scripts/bundle-plugins.d.ts +1 -2
  26. package/dist/scripts/bundle-plugins.js +24 -7
  27. package/dist/scripts/bundle-plugins.js.map +1 -1
  28. package/dist/scripts/plugin-staging.d.ts +7 -24
  29. package/dist/scripts/plugin-staging.js +22 -142
  30. package/dist/scripts/plugin-staging.js.map +1 -1
  31. package/dist/scripts/test-plugin-scripts.d.ts +2 -0
  32. package/dist/scripts/test-plugin-scripts.js +30 -75
  33. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  34. package/dist/src/adapters/helpers.js +2 -2
  35. package/dist/src/adapters/helpers.js.map +1 -1
  36. package/dist/src/authoring/workspace-commands.d.ts +26 -2
  37. package/dist/src/authoring/workspace-commands.js +44 -19
  38. package/dist/src/authoring/workspace-commands.js.map +1 -1
  39. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  40. package/dist/src/commands/aw-capabilities.js +263 -0
  41. package/dist/src/commands/aw-capabilities.js.map +1 -0
  42. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  43. package/dist/src/commands/catalog-dev-source.js +655 -0
  44. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  45. package/dist/src/commands/catalog-generation.d.ts +21 -0
  46. package/dist/src/commands/catalog-generation.js +9 -0
  47. package/dist/src/commands/catalog-generation.js.map +1 -0
  48. package/dist/src/commands/catalog-publication-inspection.d.ts +138 -0
  49. package/dist/src/commands/catalog-publication-inspection.js +757 -0
  50. package/dist/src/commands/catalog-publication-inspection.js.map +1 -0
  51. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  52. package/dist/src/commands/catalog-publication-journal.js +292 -0
  53. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  54. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  55. package/dist/src/commands/catalog-publication-target.js +95 -0
  56. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  57. package/dist/src/commands/catalog-publish.d.ts +77 -7
  58. package/dist/src/commands/catalog-publish.js +746 -316
  59. package/dist/src/commands/catalog-publish.js.map +1 -1
  60. package/dist/src/commands/catalog-source.d.ts +60 -22
  61. package/dist/src/commands/catalog-source.js +311 -91
  62. package/dist/src/commands/catalog-source.js.map +1 -1
  63. package/dist/src/commands/catalog-status.d.ts +56 -0
  64. package/dist/src/commands/catalog-status.js +217 -0
  65. package/dist/src/commands/catalog-status.js.map +1 -0
  66. package/dist/src/commands/catalog-store.d.ts +104 -0
  67. package/dist/src/commands/catalog-store.js +685 -0
  68. package/dist/src/commands/catalog-store.js.map +1 -0
  69. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  70. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  71. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  72. package/dist/src/commands/console.js +28 -17
  73. package/dist/src/commands/console.js.map +1 -1
  74. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  75. package/dist/src/commands/dependency-operation-plan.js +289 -7
  76. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  77. package/dist/src/commands/init.d.ts +5 -11
  78. package/dist/src/commands/init.js +30 -51
  79. package/dist/src/commands/init.js.map +1 -1
  80. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  81. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  82. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  83. package/dist/src/commands/operation-plan.d.ts +146 -0
  84. package/dist/src/commands/operation-plan.js +71 -0
  85. package/dist/src/commands/operation-plan.js.map +1 -0
  86. package/dist/src/commands/operation-planner.d.ts +46 -0
  87. package/dist/src/commands/operation-planner.js +141 -0
  88. package/dist/src/commands/operation-planner.js.map +1 -0
  89. package/dist/src/commands/options.d.ts +9 -7
  90. package/dist/src/commands/options.js +83 -21
  91. package/dist/src/commands/options.js.map +1 -1
  92. package/dist/src/commands/plugin-capabilities.d.ts +22 -0
  93. package/dist/src/commands/plugin-capabilities.js +163 -0
  94. package/dist/src/commands/plugin-capabilities.js.map +1 -0
  95. package/dist/src/commands/rebuild-command.d.ts +78 -30
  96. package/dist/src/commands/rebuild-command.js +4877 -713
  97. package/dist/src/commands/rebuild-command.js.map +1 -1
  98. package/dist/src/commands/rebuild-integration.d.ts +132 -21
  99. package/dist/src/commands/rebuild-integration.js +2853 -1327
  100. package/dist/src/commands/rebuild-integration.js.map +1 -1
  101. package/dist/src/commands/rebuild-operations.d.ts +58 -30
  102. package/dist/src/commands/rebuild-operations.js +260 -319
  103. package/dist/src/commands/rebuild-operations.js.map +1 -1
  104. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  105. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  106. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  107. package/dist/src/commands/review-inspection.d.ts +228 -0
  108. package/dist/src/commands/review-inspection.js +1341 -0
  109. package/dist/src/commands/review-inspection.js.map +1 -0
  110. package/dist/src/commands/review-preparation.d.ts +49 -0
  111. package/dist/src/commands/review-preparation.js +427 -0
  112. package/dist/src/commands/review-preparation.js.map +1 -0
  113. package/dist/src/commands/runtime.d.ts +1 -5
  114. package/dist/src/commands/runtime.js +24 -50
  115. package/dist/src/commands/runtime.js.map +1 -1
  116. package/dist/src/commands/skill-eval.d.ts +39 -0
  117. package/dist/src/commands/skill-eval.js +400 -0
  118. package/dist/src/commands/skill-eval.js.map +1 -0
  119. package/dist/src/commands/status-v6.d.ts +279 -0
  120. package/dist/src/commands/status-v6.js +2787 -0
  121. package/dist/src/commands/status-v6.js.map +1 -0
  122. package/dist/src/commands/sync-command.d.ts +40 -0
  123. package/dist/src/commands/sync-command.js +250 -0
  124. package/dist/src/commands/sync-command.js.map +1 -0
  125. package/dist/src/commands/wizard.d.ts +8 -5
  126. package/dist/src/commands/wizard.js +6 -4
  127. package/dist/src/commands/wizard.js.map +1 -1
  128. package/dist/src/commands/write-commands.d.ts +9 -3
  129. package/dist/src/commands/write-commands.js +127 -31
  130. package/dist/src/commands/write-commands.js.map +1 -1
  131. package/dist/src/constants.d.ts +7 -1
  132. package/dist/src/constants.js +7 -1
  133. package/dist/src/constants.js.map +1 -1
  134. package/dist/src/eval/manifest-v1.d.ts +71 -0
  135. package/dist/src/eval/manifest-v1.js +370 -0
  136. package/dist/src/eval/manifest-v1.js.map +1 -0
  137. package/dist/src/generators/local-plugin.d.ts +5 -1
  138. package/dist/src/generators/local-plugin.js +228 -104
  139. package/dist/src/generators/local-plugin.js.map +1 -1
  140. package/dist/src/index.d.ts +10 -4
  141. package/dist/src/index.js +1835 -469
  142. package/dist/src/index.js.map +1 -1
  143. package/dist/src/output/command-receipt.d.ts +43 -46
  144. package/dist/src/output/command-receipt.js +256 -80
  145. package/dist/src/output/command-receipt.js.map +1 -1
  146. package/dist/src/output/model.d.ts +3 -44
  147. package/dist/src/output/model.js +1 -144
  148. package/dist/src/output/model.js.map +1 -1
  149. package/dist/src/output/rebuild-progress.js +1 -13
  150. package/dist/src/output/rebuild-progress.js.map +1 -1
  151. package/dist/src/portable/commands.d.ts +46 -7
  152. package/dist/src/portable/commands.js +349 -37
  153. package/dist/src/portable/commands.js.map +1 -1
  154. package/dist/src/portable/materializer.d.ts +17 -4
  155. package/dist/src/portable/materializer.js +179 -41
  156. package/dist/src/portable/materializer.js.map +1 -1
  157. package/dist/src/portable/skills-cli.d.ts +15 -7
  158. package/dist/src/portable/skills-cli.js +66 -19
  159. package/dist/src/portable/skills-cli.js.map +1 -1
  160. package/dist/src/review/eval-source-input.d.ts +43 -0
  161. package/dist/src/review/eval-source-input.js +207 -0
  162. package/dist/src/review/eval-source-input.js.map +1 -0
  163. package/dist/src/review/review-profile.d.ts +17 -0
  164. package/dist/src/review/review-profile.js +234 -0
  165. package/dist/src/review/review-profile.js.map +1 -0
  166. package/dist/src/review/review-selection.d.ts +30 -0
  167. package/dist/src/review/review-selection.js +527 -0
  168. package/dist/src/review/review-selection.js.map +1 -0
  169. package/dist/src/review/review-types.d.ts +68 -0
  170. package/dist/src/review/review-types.js +16 -0
  171. package/dist/src/review/review-types.js.map +1 -0
  172. package/dist/src/review/skill-materialization.d.ts +13 -0
  173. package/dist/src/review/skill-materialization.js +75 -0
  174. package/dist/src/review/skill-materialization.js.map +1 -0
  175. package/dist/src/review/source-binding.d.ts +183 -0
  176. package/dist/src/review/source-binding.js +708 -0
  177. package/dist/src/review/source-binding.js.map +1 -0
  178. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  179. package/dist/src/tui/catalog-freshness.js +2 -0
  180. package/dist/src/tui/catalog-freshness.js.map +1 -0
  181. package/dist/src/tui/catalog-generation.d.ts +21 -0
  182. package/dist/src/tui/catalog-generation.js +156 -0
  183. package/dist/src/tui/catalog-generation.js.map +1 -0
  184. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  185. package/dist/src/tui/catalog-sources/projection.js +17 -0
  186. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  187. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  188. package/dist/src/tui/catalog-sources/review.js +13 -0
  189. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  190. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  191. package/dist/src/tui/catalog-sources/screens.js +40 -0
  192. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  193. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  194. package/dist/src/tui/catalog-sources/session.js +300 -0
  195. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  196. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  197. package/dist/src/tui/catalog-sources/types.js +2 -0
  198. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  199. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  200. package/dist/src/tui/catalog-store-task.js +19 -0
  201. package/dist/src/tui/catalog-store-task.js.map +1 -0
  202. package/dist/src/tui/clipboard.d.ts +13 -0
  203. package/dist/src/tui/clipboard.js +95 -0
  204. package/dist/src/tui/clipboard.js.map +1 -0
  205. package/dist/src/tui/components.d.ts +177 -0
  206. package/dist/src/tui/components.js +297 -7
  207. package/dist/src/tui/components.js.map +1 -1
  208. package/dist/src/tui/config-array-draft.d.ts +29 -0
  209. package/dist/src/tui/config-array-draft.js +48 -0
  210. package/dist/src/tui/config-array-draft.js.map +1 -0
  211. package/dist/src/tui/config-leaf-editor.d.ts +16 -0
  212. package/dist/src/tui/config-leaf-editor.js +206 -0
  213. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  214. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  215. package/dist/src/tui/config-value-presentation.js +104 -0
  216. package/dist/src/tui/config-value-presentation.js.map +1 -0
  217. package/dist/src/tui/console-app-v4.d.ts +14 -4
  218. package/dist/src/tui/console-app-v4.js +9659 -1558
  219. package/dist/src/tui/console-app-v4.js.map +1 -1
  220. package/dist/src/tui/content-item-card.d.ts +13 -0
  221. package/dist/src/tui/content-item-card.js +51 -0
  222. package/dist/src/tui/content-item-card.js.map +1 -0
  223. package/dist/src/tui/controller-runtime.d.ts +13 -1
  224. package/dist/src/tui/controller-runtime.js +3323 -349
  225. package/dist/src/tui/controller-runtime.js.map +1 -1
  226. package/dist/src/tui/controller.d.ts +643 -40
  227. package/dist/src/tui/controller.js +3756 -705
  228. package/dist/src/tui/controller.js.map +1 -1
  229. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  230. package/dist/src/tui/dependency-graph-view.js +121 -0
  231. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  232. package/dist/src/tui/dependency-graph.d.ts +81 -0
  233. package/dist/src/tui/dependency-graph.js +452 -0
  234. package/dist/src/tui/dependency-graph.js.map +1 -0
  235. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  236. package/dist/src/tui/diagnostic-projection.js +567 -0
  237. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  238. package/dist/src/tui/diagnostics.d.ts +31 -0
  239. package/dist/src/tui/diagnostics.js +83 -0
  240. package/dist/src/tui/diagnostics.js.map +1 -0
  241. package/dist/src/tui/entity-cards.d.ts +55 -0
  242. package/dist/src/tui/entity-cards.js +220 -0
  243. package/dist/src/tui/entity-cards.js.map +1 -0
  244. package/dist/src/tui/glossary.d.ts +23 -0
  245. package/dist/src/tui/glossary.js +42 -0
  246. package/dist/src/tui/glossary.js.map +1 -0
  247. package/dist/src/tui/index.d.ts +11 -4
  248. package/dist/src/tui/index.js +8 -2
  249. package/dist/src/tui/index.js.map +1 -1
  250. package/dist/src/tui/input-display.d.ts +9 -0
  251. package/dist/src/tui/input-display.js +58 -0
  252. package/dist/src/tui/input-display.js.map +1 -0
  253. package/dist/src/tui/keys.d.ts +44 -0
  254. package/dist/src/tui/keys.js +43 -15
  255. package/dist/src/tui/keys.js.map +1 -1
  256. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  257. package/dist/src/tui/lifecycle-action-view.js +36 -0
  258. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  259. package/dist/src/tui/model.d.ts +248 -27
  260. package/dist/src/tui/model.js +1662 -314
  261. package/dist/src/tui/model.js.map +1 -1
  262. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  263. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  264. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  265. package/dist/src/tui/operation-history.d.ts +81 -0
  266. package/dist/src/tui/operation-history.js +136 -0
  267. package/dist/src/tui/operation-history.js.map +1 -0
  268. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  269. package/dist/src/tui/operation-review-planner.js +1295 -0
  270. package/dist/src/tui/operation-review-planner.js.map +1 -0
  271. package/dist/src/tui/plugin-content.d.ts +31 -0
  272. package/dist/src/tui/plugin-content.js +680 -0
  273. package/dist/src/tui/plugin-content.js.map +1 -0
  274. package/dist/src/tui/plugin-detail.d.ts +52 -0
  275. package/dist/src/tui/plugin-detail.js +165 -0
  276. package/dist/src/tui/plugin-detail.js.map +1 -0
  277. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  278. package/dist/src/tui/plugin-write-task.js +286 -0
  279. package/dist/src/tui/plugin-write-task.js.map +1 -0
  280. package/dist/src/tui/project-inventory.d.ts +68 -0
  281. package/dist/src/tui/project-inventory.js +203 -0
  282. package/dist/src/tui/project-inventory.js.map +1 -0
  283. package/dist/src/tui/prompt.js +4 -15
  284. package/dist/src/tui/prompt.js.map +1 -1
  285. package/dist/src/tui/query-header.d.ts +30 -0
  286. package/dist/src/tui/query-header.js +40 -0
  287. package/dist/src/tui/query-header.js.map +1 -0
  288. package/dist/src/tui/reader.d.ts +37 -0
  289. package/dist/src/tui/reader.js +47 -0
  290. package/dist/src/tui/reader.js.map +1 -0
  291. package/dist/src/tui/router.d.ts +207 -14
  292. package/dist/src/tui/router.js +352 -29
  293. package/dist/src/tui/router.js.map +1 -1
  294. package/dist/src/tui/screen-registry.d.ts +701 -0
  295. package/dist/src/tui/screen-registry.js +230 -0
  296. package/dist/src/tui/screen-registry.js.map +1 -0
  297. package/dist/src/tui/session-console-app.d.ts +6 -0
  298. package/dist/src/tui/session-console-app.js +13 -0
  299. package/dist/src/tui/session-console-app.js.map +1 -0
  300. package/dist/src/tui/session-host.d.ts +45 -0
  301. package/dist/src/tui/session-host.js +209 -0
  302. package/dist/src/tui/session-host.js.map +1 -0
  303. package/dist/src/tui/source-detail-card.d.ts +29 -0
  304. package/dist/src/tui/source-detail-card.js +45 -0
  305. package/dist/src/tui/source-detail-card.js.map +1 -0
  306. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  307. package/dist/src/tui/source-ref-presets.js +11 -0
  308. package/dist/src/tui/source-ref-presets.js.map +1 -0
  309. package/dist/src/tui/theme.d.ts +30 -10
  310. package/dist/src/tui/theme.js +30 -10
  311. package/dist/src/tui/theme.js.map +1 -1
  312. package/dist/src/tui/viewport.d.ts +21 -0
  313. package/dist/src/tui/viewport.js +52 -0
  314. package/dist/src/tui/viewport.js.map +1 -0
  315. package/dist/src/tui/views.js +31 -3
  316. package/dist/src/tui/views.js.map +1 -1
  317. package/dist/src/tui/wizard.js +37 -13
  318. package/dist/src/tui/wizard.js.map +1 -1
  319. package/dist/src/types.d.ts +244 -20
  320. package/dist/src/types.js +1 -0
  321. package/dist/src/types.js.map +1 -1
  322. package/dist/src/utils/agent-version.d.ts +7 -1
  323. package/dist/src/utils/agent-version.js +41 -8
  324. package/dist/src/utils/agent-version.js.map +1 -1
  325. package/dist/src/utils/artifact-plan.d.ts +5 -4
  326. package/dist/src/utils/artifact-plan.js +18 -7
  327. package/dist/src/utils/artifact-plan.js.map +1 -1
  328. package/dist/src/utils/artifact-renderer.d.ts +17 -7
  329. package/dist/src/utils/artifact-renderer.js +214 -216
  330. package/dist/src/utils/artifact-renderer.js.map +1 -1
  331. package/dist/src/utils/artifact-request.d.ts +21 -0
  332. package/dist/src/utils/artifact-request.js +78 -0
  333. package/dist/src/utils/artifact-request.js.map +1 -0
  334. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  335. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  336. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  337. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  338. package/dist/src/utils/bundle-integrity.js +0 -25
  339. package/dist/src/utils/bundle-integrity.js.map +1 -1
  340. package/dist/src/utils/bundle-layout.js +22 -29
  341. package/dist/src/utils/bundle-layout.js.map +1 -1
  342. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  343. package/dist/src/utils/catalog-capability-projection.js +14 -0
  344. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  345. package/dist/src/utils/catalog-digests.d.ts +10 -0
  346. package/dist/src/utils/catalog-digests.js +50 -2
  347. package/dist/src/utils/catalog-digests.js.map +1 -1
  348. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  349. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  350. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  351. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  352. package/dist/src/utils/catalog-generation-error.js +30 -0
  353. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  354. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  355. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  356. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  357. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  358. package/dist/src/utils/catalog-generation-service.js +1271 -0
  359. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  360. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  361. package/dist/src/utils/catalog-generation-state.js +192 -0
  362. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  363. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  364. package/dist/src/utils/catalog-generation-store.js +452 -0
  365. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  366. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  367. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  368. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  369. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  370. package/dist/src/utils/catalog-operation-context.js +142 -0
  371. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  372. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  373. package/dist/src/utils/catalog-public-error.js +28 -8
  374. package/dist/src/utils/catalog-public-error.js.map +1 -1
  375. package/dist/src/utils/catalog-runtime-projection.d.ts +4 -7
  376. package/dist/src/utils/catalog-runtime-projection.js +7 -102
  377. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  378. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  379. package/dist/src/utils/catalog-snapshot.js +11 -3
  380. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  381. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  382. package/dist/src/utils/catalog-source-identity.js +21 -2
  383. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  384. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  385. package/dist/src/utils/catalog-source-impact.js +344 -0
  386. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  387. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  388. package/dist/src/utils/catalog-source-references.js +195 -347
  389. package/dist/src/utils/catalog-source-references.js.map +1 -1
  390. package/dist/src/utils/catalog-sources.d.ts +15 -1
  391. package/dist/src/utils/catalog-sources.js +206 -27
  392. package/dist/src/utils/catalog-sources.js.map +1 -1
  393. package/dist/src/utils/codex-config.d.ts +2 -0
  394. package/dist/src/utils/codex-config.js +26 -5
  395. package/dist/src/utils/codex-config.js.map +1 -1
  396. package/dist/src/utils/codex-manager.d.ts +79 -0
  397. package/dist/src/utils/codex-manager.js +745 -0
  398. package/dist/src/utils/codex-manager.js.map +1 -0
  399. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  400. package/dist/src/utils/codex-marketplace-path.js +45 -0
  401. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  402. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  403. package/dist/src/utils/codex-native-observation.js +154 -0
  404. package/dist/src/utils/codex-native-observation.js.map +1 -0
  405. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  406. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  407. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  408. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  409. package/dist/src/utils/codex-reconciler.js +298 -0
  410. package/dist/src/utils/codex-reconciler.js.map +1 -0
  411. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  412. package/dist/src/utils/codex-shared-native.js +81 -0
  413. package/dist/src/utils/codex-shared-native.js.map +1 -0
  414. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  415. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  416. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  417. package/dist/src/utils/codex-surface-analysis.js +247 -0
  418. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  419. package/dist/src/utils/dynamic-skill-tree.d.ts +4 -0
  420. package/dist/src/utils/dynamic-skill-tree.js +36 -6
  421. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  422. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  423. package/dist/src/utils/git-catalog-provider.js +169 -144
  424. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  425. package/dist/src/utils/local-marketplace.d.ts +17 -1
  426. package/dist/src/utils/local-marketplace.js +301 -84
  427. package/dist/src/utils/local-marketplace.js.map +1 -1
  428. package/dist/src/utils/manifest.d.ts +1 -4
  429. package/dist/src/utils/manifest.js +1 -4
  430. package/dist/src/utils/manifest.js.map +1 -1
  431. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  432. package/dist/src/utils/multi-source-catalog.js +54 -110
  433. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  434. package/dist/src/utils/native-cli.d.ts +55 -7
  435. package/dist/src/utils/native-cli.js +386 -57
  436. package/dist/src/utils/native-cli.js.map +1 -1
  437. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  438. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  439. package/dist/src/utils/ownership.d.ts +84 -20
  440. package/dist/src/utils/ownership.js +179 -222
  441. package/dist/src/utils/ownership.js.map +1 -1
  442. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  443. package/dist/src/utils/path-catalog-provider.js +54 -65
  444. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  445. package/dist/src/utils/paths.d.ts +0 -1
  446. package/dist/src/utils/paths.js +0 -1
  447. package/dist/src/utils/paths.js.map +1 -1
  448. package/dist/src/utils/plugin-config-impact.d.ts +33 -0
  449. package/dist/src/utils/plugin-config-impact.js +298 -0
  450. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  451. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  452. package/dist/src/utils/plugin-config-write.js +1000 -296
  453. package/dist/src/utils/plugin-config-write.js.map +1 -1
  454. package/dist/src/utils/plugin-config.d.ts +153 -93
  455. package/dist/src/utils/plugin-config.js +1163 -1017
  456. package/dist/src/utils/plugin-config.js.map +1 -1
  457. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  458. package/dist/src/utils/plugin-intent-state.js +320 -0
  459. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  460. package/dist/src/utils/plugin-scripts.d.ts +65 -125
  461. package/dist/src/utils/plugin-scripts.js +482 -524
  462. package/dist/src/utils/plugin-scripts.js.map +1 -1
  463. package/dist/src/utils/process-tree.d.ts +2 -2
  464. package/dist/src/utils/process-tree.js +1 -1
  465. package/dist/src/utils/process-tree.js.map +1 -1
  466. package/dist/src/utils/project-boundary.d.ts +11 -13
  467. package/dist/src/utils/project-boundary.js +28 -34
  468. package/dist/src/utils/project-boundary.js.map +1 -1
  469. package/dist/src/utils/runtime-config.d.ts +20 -0
  470. package/dist/src/utils/runtime-config.js +75 -0
  471. package/dist/src/utils/runtime-config.js.map +1 -0
  472. package/dist/src/utils/safe-fs.d.ts +21 -0
  473. package/dist/src/utils/safe-fs.js +111 -0
  474. package/dist/src/utils/safe-fs.js.map +1 -0
  475. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  476. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  477. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  478. package/dist/src/utils/sensitive-content.d.ts +4 -0
  479. package/dist/src/utils/sensitive-content.js +36 -0
  480. package/dist/src/utils/sensitive-content.js.map +1 -0
  481. package/dist/src/utils/skill-validation.d.ts +1 -1
  482. package/dist/src/utils/skill-validation.js +1 -1
  483. package/dist/src/utils/skill-validation.js.map +1 -1
  484. package/dist/src/utils/state-paths.d.ts +1 -0
  485. package/dist/src/utils/state-paths.js +12 -2
  486. package/dist/src/utils/state-paths.js.map +1 -1
  487. package/dist/src/utils/target-eligibility.d.ts +8 -2
  488. package/dist/src/utils/target-eligibility.js +17 -8
  489. package/dist/src/utils/target-eligibility.js.map +1 -1
  490. package/dist/src/utils/windows-claude-shim.d.ts +9 -0
  491. package/dist/src/utils/windows-claude-shim.js +141 -0
  492. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  493. package/dist/vitest.config.js +91 -10
  494. package/dist/vitest.config.js.map +1 -1
  495. package/package.json +22 -19
  496. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  497. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  498. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  499. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  500. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  501. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  502. package/dist/scripts/codex-eval-app-server.js +0 -1228
  503. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  504. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  505. package/dist/scripts/codex-eval-isolation.js +0 -318
  506. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  507. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  508. package/dist/scripts/codex-eval-process-management.js +0 -69
  509. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  510. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  511. package/dist/scripts/codex-eval-process-tree.js +0 -803
  512. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  513. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  514. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  515. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  516. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  517. package/dist/scripts/codex-trigger-eval.js +0 -968
  518. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  519. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  520. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  521. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  522. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  523. package/dist/scripts/eval-plugin-skills.js +0 -1586
  524. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  525. package/dist/scripts/eval-run-layout.d.ts +0 -17
  526. package/dist/scripts/eval-run-layout.js +0 -26
  527. package/dist/scripts/eval-run-layout.js.map +0 -1
  528. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  529. package/dist/scripts/plugin-eval-contract.js +0 -695
  530. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  531. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  532. package/dist/scripts/plugin-eval-materializer.js +0 -421
  533. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  534. package/dist/scripts/skill-reporting.d.ts +0 -212
  535. package/dist/scripts/skill-reporting.js +0 -922
  536. package/dist/scripts/skill-reporting.js.map +0 -1
  537. package/dist/src/commands/status-v4.d.ts +0 -102
  538. package/dist/src/commands/status-v4.js +0 -844
  539. package/dist/src/commands/status-v4.js.map +0 -1
  540. package/dist/src/commands/status.d.ts +0 -93
  541. package/dist/src/commands/status.js +0 -442
  542. package/dist/src/commands/status.js.map +0 -1
  543. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  544. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  545. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  546. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  547. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  548. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  549. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  550. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  551. package/dist/src/utils/catalog-source-cache.d.ts +0 -61
  552. package/dist/src/utils/catalog-source-cache.js +0 -276
  553. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  554. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  555. package/dist/src/utils/codex-project-surface.js +0 -49
  556. package/dist/src/utils/codex-project-surface.js.map +0 -1
  557. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  558. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  559. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  560. package/dist/src/utils/plugin-authoring-capabilities.d.ts +0 -23
  561. package/dist/src/utils/plugin-authoring-capabilities.js +0 -37
  562. package/dist/src/utils/plugin-authoring-capabilities.js.map +0 -1
  563. package/dist/src/utils/plugin-authoring-capabilities.json +0 -92
  564. package/dist/src/utils/plugin-release.d.ts +0 -2
  565. package/dist/src/utils/plugin-release.js +0 -2
  566. package/dist/src/utils/plugin-release.js.map +0 -1
  567. package/dist/src/utils/skill-frontmatter-capabilities.d.ts +0 -201
  568. package/dist/src/utils/skill-frontmatter-capabilities.js +0 -5
  569. package/dist/src/utils/skill-frontmatter-capabilities.js.map +0 -1
  570. package/dist/src/utils/skill-frontmatter-capabilities.json +0 -200
  571. /package/dist/authoring/scripts/{check-plugin-versions.d.mts → remove-plugin.d.mts} +0 -0
@@ -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