@lesliechan721/aw 0.1.0-beta.5 → 0.1.0-beta.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/dist/authoring/assets/aw-config.mjs +100 -501
  2. package/dist/authoring/assets/aw-config.mjs.map +1 -1
  3. package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
  4. package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
  5. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
  6. package/dist/authoring/scripts/add-skill.mjs +4 -4
  7. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  8. package/dist/authoring/scripts/init-plugin.mjs +67 -97
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  10. package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
  11. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
  12. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
  13. package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
  14. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  15. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -90
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -120
  17. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  18. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  19. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  20. package/dist/authoring/scripts/remove-plugin.mjs +3 -2
  21. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
  22. package/dist/authoring/scripts/validate-plugin.mjs +346 -1131
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  25. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  26. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  27. package/dist/scripts/bundle-plugins.d.ts +1 -0
  28. package/dist/scripts/bundle-plugins.js +20 -5
  29. package/dist/scripts/bundle-plugins.js.map +1 -1
  30. package/dist/scripts/plugin-staging.d.ts +7 -9
  31. package/dist/scripts/plugin-staging.js +18 -29
  32. package/dist/scripts/plugin-staging.js.map +1 -1
  33. package/dist/scripts/test-plugin-scripts.d.ts +2 -0
  34. package/dist/scripts/test-plugin-scripts.js +47 -76
  35. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  36. package/dist/scripts/test-workers.d.mts +24 -0
  37. package/dist/scripts/test-workers.mjs +59 -0
  38. package/dist/scripts/test-workers.mjs.map +1 -0
  39. package/dist/src/adapters/helpers.js +2 -2
  40. package/dist/src/adapters/helpers.js.map +1 -1
  41. package/dist/src/authoring/workspace-commands.d.ts +17 -1
  42. package/dist/src/authoring/workspace-commands.js +21 -4
  43. package/dist/src/authoring/workspace-commands.js.map +1 -1
  44. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  45. package/dist/src/commands/aw-capabilities.js +264 -0
  46. package/dist/src/commands/aw-capabilities.js.map +1 -0
  47. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  48. package/dist/src/commands/catalog-dev-source.js +655 -0
  49. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  50. package/dist/src/commands/catalog-generation.d.ts +21 -0
  51. package/dist/src/commands/catalog-generation.js +9 -0
  52. package/dist/src/commands/catalog-generation.js.map +1 -0
  53. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  54. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  55. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  56. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  57. package/dist/src/commands/catalog-publication-journal.js +292 -0
  58. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  59. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  60. package/dist/src/commands/catalog-publication-target.js +95 -0
  61. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  62. package/dist/src/commands/catalog-publish.d.ts +73 -15
  63. package/dist/src/commands/catalog-publish.js +701 -212
  64. package/dist/src/commands/catalog-publish.js.map +1 -1
  65. package/dist/src/commands/catalog-source.d.ts +60 -22
  66. package/dist/src/commands/catalog-source.js +311 -91
  67. package/dist/src/commands/catalog-source.js.map +1 -1
  68. package/dist/src/commands/catalog-status.d.ts +18 -22
  69. package/dist/src/commands/catalog-status.js +81 -115
  70. package/dist/src/commands/catalog-status.js.map +1 -1
  71. package/dist/src/commands/catalog-store.d.ts +104 -0
  72. package/dist/src/commands/catalog-store.js +685 -0
  73. package/dist/src/commands/catalog-store.js.map +1 -0
  74. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  75. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  76. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  77. package/dist/src/commands/console.js +28 -17
  78. package/dist/src/commands/console.js.map +1 -1
  79. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  80. package/dist/src/commands/dependency-operation-plan.js +289 -7
  81. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  82. package/dist/src/commands/init.d.ts +5 -11
  83. package/dist/src/commands/init.js +30 -51
  84. package/dist/src/commands/init.js.map +1 -1
  85. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  86. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  87. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  88. package/dist/src/commands/operation-plan.d.ts +146 -0
  89. package/dist/src/commands/operation-plan.js +71 -0
  90. package/dist/src/commands/operation-plan.js.map +1 -0
  91. package/dist/src/commands/operation-planner.d.ts +46 -0
  92. package/dist/src/commands/operation-planner.js +141 -0
  93. package/dist/src/commands/operation-planner.js.map +1 -0
  94. package/dist/src/commands/options.d.ts +9 -7
  95. package/dist/src/commands/options.js +83 -21
  96. package/dist/src/commands/options.js.map +1 -1
  97. package/dist/src/commands/plugin-capabilities.js +23 -3
  98. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  99. package/dist/src/commands/rebuild-command.d.ts +77 -31
  100. package/dist/src/commands/rebuild-command.js +4862 -729
  101. package/dist/src/commands/rebuild-command.js.map +1 -1
  102. package/dist/src/commands/rebuild-integration.d.ts +131 -21
  103. package/dist/src/commands/rebuild-integration.js +2866 -1339
  104. package/dist/src/commands/rebuild-integration.js.map +1 -1
  105. package/dist/src/commands/rebuild-operations.d.ts +58 -30
  106. package/dist/src/commands/rebuild-operations.js +260 -319
  107. package/dist/src/commands/rebuild-operations.js.map +1 -1
  108. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  109. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  110. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  111. package/dist/src/commands/review-inspection.d.ts +228 -0
  112. package/dist/src/commands/review-inspection.js +1341 -0
  113. package/dist/src/commands/review-inspection.js.map +1 -0
  114. package/dist/src/commands/review-preparation.d.ts +49 -0
  115. package/dist/src/commands/review-preparation.js +427 -0
  116. package/dist/src/commands/review-preparation.js.map +1 -0
  117. package/dist/src/commands/runtime.d.ts +1 -5
  118. package/dist/src/commands/runtime.js +24 -50
  119. package/dist/src/commands/runtime.js.map +1 -1
  120. package/dist/src/commands/skill-eval.d.ts +39 -0
  121. package/dist/src/commands/skill-eval.js +400 -0
  122. package/dist/src/commands/skill-eval.js.map +1 -0
  123. package/dist/src/commands/status-v6.d.ts +279 -0
  124. package/dist/src/commands/status-v6.js +2787 -0
  125. package/dist/src/commands/status-v6.js.map +1 -0
  126. package/dist/src/commands/sync-command.d.ts +40 -0
  127. package/dist/src/commands/sync-command.js +250 -0
  128. package/dist/src/commands/sync-command.js.map +1 -0
  129. package/dist/src/commands/wizard.d.ts +8 -5
  130. package/dist/src/commands/wizard.js +6 -4
  131. package/dist/src/commands/wizard.js.map +1 -1
  132. package/dist/src/commands/write-commands.d.ts +9 -3
  133. package/dist/src/commands/write-commands.js +127 -31
  134. package/dist/src/commands/write-commands.js.map +1 -1
  135. package/dist/src/constants.d.ts +7 -1
  136. package/dist/src/constants.js +7 -1
  137. package/dist/src/constants.js.map +1 -1
  138. package/dist/src/eval/manifest-v1.d.ts +71 -0
  139. package/dist/src/eval/manifest-v1.js +370 -0
  140. package/dist/src/eval/manifest-v1.js.map +1 -0
  141. package/dist/src/generators/local-plugin.d.ts +5 -1
  142. package/dist/src/generators/local-plugin.js +236 -109
  143. package/dist/src/generators/local-plugin.js.map +1 -1
  144. package/dist/src/index.d.ts +10 -4
  145. package/dist/src/index.js +1793 -486
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/output/command-receipt.d.ts +43 -46
  148. package/dist/src/output/command-receipt.js +256 -80
  149. package/dist/src/output/command-receipt.js.map +1 -1
  150. package/dist/src/output/model.d.ts +3 -44
  151. package/dist/src/output/model.js +1 -144
  152. package/dist/src/output/model.js.map +1 -1
  153. package/dist/src/output/rebuild-progress.js +1 -13
  154. package/dist/src/output/rebuild-progress.js.map +1 -1
  155. package/dist/src/portable/commands.d.ts +46 -7
  156. package/dist/src/portable/commands.js +349 -37
  157. package/dist/src/portable/commands.js.map +1 -1
  158. package/dist/src/portable/materializer.d.ts +17 -4
  159. package/dist/src/portable/materializer.js +179 -41
  160. package/dist/src/portable/materializer.js.map +1 -1
  161. package/dist/src/portable/skills-cli.d.ts +15 -7
  162. package/dist/src/portable/skills-cli.js +74 -20
  163. package/dist/src/portable/skills-cli.js.map +1 -1
  164. package/dist/src/review/eval-source-input.d.ts +43 -0
  165. package/dist/src/review/eval-source-input.js +207 -0
  166. package/dist/src/review/eval-source-input.js.map +1 -0
  167. package/dist/src/review/review-profile.d.ts +17 -0
  168. package/dist/src/review/review-profile.js +234 -0
  169. package/dist/src/review/review-profile.js.map +1 -0
  170. package/dist/src/review/review-selection.d.ts +30 -0
  171. package/dist/src/review/review-selection.js +527 -0
  172. package/dist/src/review/review-selection.js.map +1 -0
  173. package/dist/src/review/review-types.d.ts +68 -0
  174. package/dist/src/review/review-types.js +16 -0
  175. package/dist/src/review/review-types.js.map +1 -0
  176. package/dist/src/review/skill-materialization.d.ts +13 -0
  177. package/dist/src/review/skill-materialization.js +75 -0
  178. package/dist/src/review/skill-materialization.js.map +1 -0
  179. package/dist/src/review/source-binding.d.ts +183 -0
  180. package/dist/src/review/source-binding.js +708 -0
  181. package/dist/src/review/source-binding.js.map +1 -0
  182. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  183. package/dist/src/tui/catalog-freshness.js +2 -0
  184. package/dist/src/tui/catalog-freshness.js.map +1 -0
  185. package/dist/src/tui/catalog-generation.d.ts +21 -0
  186. package/dist/src/tui/catalog-generation.js +156 -0
  187. package/dist/src/tui/catalog-generation.js.map +1 -0
  188. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  189. package/dist/src/tui/catalog-sources/projection.js +17 -0
  190. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  191. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  192. package/dist/src/tui/catalog-sources/review.js +13 -0
  193. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  194. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  195. package/dist/src/tui/catalog-sources/screens.js +40 -0
  196. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  197. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  198. package/dist/src/tui/catalog-sources/session.js +300 -0
  199. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  200. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  201. package/dist/src/tui/catalog-sources/types.js +2 -0
  202. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  203. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  204. package/dist/src/tui/catalog-store-task.js +19 -0
  205. package/dist/src/tui/catalog-store-task.js.map +1 -0
  206. package/dist/src/tui/clipboard.d.ts +13 -0
  207. package/dist/src/tui/clipboard.js +95 -0
  208. package/dist/src/tui/clipboard.js.map +1 -0
  209. package/dist/src/tui/components.d.ts +110 -3
  210. package/dist/src/tui/components.js +183 -36
  211. package/dist/src/tui/components.js.map +1 -1
  212. package/dist/src/tui/config-array-draft.d.ts +29 -0
  213. package/dist/src/tui/config-array-draft.js +48 -0
  214. package/dist/src/tui/config-array-draft.js.map +1 -0
  215. package/dist/src/tui/config-leaf-editor.d.ts +16 -0
  216. package/dist/src/tui/config-leaf-editor.js +206 -0
  217. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  218. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  219. package/dist/src/tui/config-value-presentation.js +104 -0
  220. package/dist/src/tui/config-value-presentation.js.map +1 -0
  221. package/dist/src/tui/console-app-v4.d.ts +14 -4
  222. package/dist/src/tui/console-app-v4.js +8941 -1872
  223. package/dist/src/tui/console-app-v4.js.map +1 -1
  224. package/dist/src/tui/content-item-card.d.ts +13 -0
  225. package/dist/src/tui/content-item-card.js +51 -0
  226. package/dist/src/tui/content-item-card.js.map +1 -0
  227. package/dist/src/tui/controller-runtime.d.ts +10 -2
  228. package/dist/src/tui/controller-runtime.js +3211 -388
  229. package/dist/src/tui/controller-runtime.js.map +1 -1
  230. package/dist/src/tui/controller.d.ts +615 -45
  231. package/dist/src/tui/controller.js +3558 -768
  232. package/dist/src/tui/controller.js.map +1 -1
  233. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  234. package/dist/src/tui/dependency-graph-view.js +121 -0
  235. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  236. package/dist/src/tui/dependency-graph.d.ts +81 -0
  237. package/dist/src/tui/dependency-graph.js +452 -0
  238. package/dist/src/tui/dependency-graph.js.map +1 -0
  239. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  240. package/dist/src/tui/diagnostic-projection.js +567 -0
  241. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  242. package/dist/src/tui/diagnostics.d.ts +3 -3
  243. package/dist/src/tui/diagnostics.js +14 -2
  244. package/dist/src/tui/diagnostics.js.map +1 -1
  245. package/dist/src/tui/entity-cards.d.ts +55 -0
  246. package/dist/src/tui/entity-cards.js +220 -0
  247. package/dist/src/tui/entity-cards.js.map +1 -0
  248. package/dist/src/tui/glossary.d.ts +23 -0
  249. package/dist/src/tui/glossary.js +42 -0
  250. package/dist/src/tui/glossary.js.map +1 -0
  251. package/dist/src/tui/index.d.ts +6 -1
  252. package/dist/src/tui/index.js +5 -1
  253. package/dist/src/tui/index.js.map +1 -1
  254. package/dist/src/tui/input-display.d.ts +9 -0
  255. package/dist/src/tui/input-display.js +58 -0
  256. package/dist/src/tui/input-display.js.map +1 -0
  257. package/dist/src/tui/keys.d.ts +44 -0
  258. package/dist/src/tui/keys.js +43 -15
  259. package/dist/src/tui/keys.js.map +1 -1
  260. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  261. package/dist/src/tui/lifecycle-action-view.js +36 -0
  262. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  263. package/dist/src/tui/model.d.ts +223 -31
  264. package/dist/src/tui/model.js +1510 -397
  265. package/dist/src/tui/model.js.map +1 -1
  266. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  267. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  268. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  269. package/dist/src/tui/operation-history.d.ts +81 -0
  270. package/dist/src/tui/operation-history.js +136 -0
  271. package/dist/src/tui/operation-history.js.map +1 -0
  272. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  273. package/dist/src/tui/operation-review-planner.js +1295 -0
  274. package/dist/src/tui/operation-review-planner.js.map +1 -0
  275. package/dist/src/tui/plugin-content.d.ts +31 -0
  276. package/dist/src/tui/plugin-content.js +680 -0
  277. package/dist/src/tui/plugin-content.js.map +1 -0
  278. package/dist/src/tui/plugin-detail.d.ts +52 -0
  279. package/dist/src/tui/plugin-detail.js +165 -0
  280. package/dist/src/tui/plugin-detail.js.map +1 -0
  281. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  282. package/dist/src/tui/plugin-write-task.js +286 -0
  283. package/dist/src/tui/plugin-write-task.js.map +1 -0
  284. package/dist/src/tui/project-inventory.d.ts +68 -0
  285. package/dist/src/tui/project-inventory.js +203 -0
  286. package/dist/src/tui/project-inventory.js.map +1 -0
  287. package/dist/src/tui/prompt.js +4 -15
  288. package/dist/src/tui/prompt.js.map +1 -1
  289. package/dist/src/tui/query-header.d.ts +30 -0
  290. package/dist/src/tui/query-header.js +40 -0
  291. package/dist/src/tui/query-header.js.map +1 -0
  292. package/dist/src/tui/reader.d.ts +37 -0
  293. package/dist/src/tui/reader.js +47 -0
  294. package/dist/src/tui/reader.js.map +1 -0
  295. package/dist/src/tui/router.d.ts +197 -10
  296. package/dist/src/tui/router.js +338 -50
  297. package/dist/src/tui/router.js.map +1 -1
  298. package/dist/src/tui/screen-registry.d.ts +701 -0
  299. package/dist/src/tui/screen-registry.js +230 -0
  300. package/dist/src/tui/screen-registry.js.map +1 -0
  301. package/dist/src/tui/session-console-app.d.ts +6 -0
  302. package/dist/src/tui/session-console-app.js +13 -0
  303. package/dist/src/tui/session-console-app.js.map +1 -0
  304. package/dist/src/tui/session-host.d.ts +45 -0
  305. package/dist/src/tui/session-host.js +209 -0
  306. package/dist/src/tui/session-host.js.map +1 -0
  307. package/dist/src/tui/source-detail-card.d.ts +29 -0
  308. package/dist/src/tui/source-detail-card.js +45 -0
  309. package/dist/src/tui/source-detail-card.js.map +1 -0
  310. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  311. package/dist/src/tui/source-ref-presets.js +11 -0
  312. package/dist/src/tui/source-ref-presets.js.map +1 -0
  313. package/dist/src/tui/theme.d.ts +12 -0
  314. package/dist/src/tui/theme.js +12 -0
  315. package/dist/src/tui/theme.js.map +1 -1
  316. package/dist/src/tui/viewport.d.ts +1 -0
  317. package/dist/src/tui/viewport.js +23 -0
  318. package/dist/src/tui/viewport.js.map +1 -1
  319. package/dist/src/tui/views.js +31 -3
  320. package/dist/src/tui/views.js.map +1 -1
  321. package/dist/src/tui/wizard.js +37 -13
  322. package/dist/src/tui/wizard.js.map +1 -1
  323. package/dist/src/types.d.ts +244 -20
  324. package/dist/src/types.js +1 -0
  325. package/dist/src/types.js.map +1 -1
  326. package/dist/src/utils/agent-version.d.ts +7 -1
  327. package/dist/src/utils/agent-version.js +41 -8
  328. package/dist/src/utils/agent-version.js.map +1 -1
  329. package/dist/src/utils/artifact-plan.d.ts +5 -4
  330. package/dist/src/utils/artifact-plan.js +18 -7
  331. package/dist/src/utils/artifact-plan.js.map +1 -1
  332. package/dist/src/utils/artifact-renderer.d.ts +17 -7
  333. package/dist/src/utils/artifact-renderer.js +214 -216
  334. package/dist/src/utils/artifact-renderer.js.map +1 -1
  335. package/dist/src/utils/artifact-request.d.ts +21 -0
  336. package/dist/src/utils/artifact-request.js +78 -0
  337. package/dist/src/utils/artifact-request.js.map +1 -0
  338. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  339. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  340. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  341. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  342. package/dist/src/utils/bundle-integrity.js +0 -25
  343. package/dist/src/utils/bundle-integrity.js.map +1 -1
  344. package/dist/src/utils/bundle-layout.js +22 -29
  345. package/dist/src/utils/bundle-layout.js.map +1 -1
  346. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  347. package/dist/src/utils/catalog-capability-projection.js +14 -0
  348. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  349. package/dist/src/utils/catalog-digests.d.ts +10 -0
  350. package/dist/src/utils/catalog-digests.js +57 -20
  351. package/dist/src/utils/catalog-digests.js.map +1 -1
  352. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  353. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  354. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  355. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  356. package/dist/src/utils/catalog-generation-error.js +30 -0
  357. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  358. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  359. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  360. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  361. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  362. package/dist/src/utils/catalog-generation-service.js +1271 -0
  363. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  364. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  365. package/dist/src/utils/catalog-generation-state.js +192 -0
  366. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  367. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  368. package/dist/src/utils/catalog-generation-store.js +452 -0
  369. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  370. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  371. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  372. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  373. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  374. package/dist/src/utils/catalog-operation-context.js +142 -0
  375. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  376. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  377. package/dist/src/utils/catalog-public-error.js +28 -8
  378. package/dist/src/utils/catalog-public-error.js.map +1 -1
  379. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  380. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  381. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  382. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  383. package/dist/src/utils/catalog-snapshot.js +11 -3
  384. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  385. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  386. package/dist/src/utils/catalog-source-identity.js +21 -2
  387. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  388. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  389. package/dist/src/utils/catalog-source-impact.js +344 -0
  390. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  391. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  392. package/dist/src/utils/catalog-source-references.js +195 -347
  393. package/dist/src/utils/catalog-source-references.js.map +1 -1
  394. package/dist/src/utils/catalog-sources.d.ts +15 -1
  395. package/dist/src/utils/catalog-sources.js +206 -27
  396. package/dist/src/utils/catalog-sources.js.map +1 -1
  397. package/dist/src/utils/codex-config.d.ts +2 -0
  398. package/dist/src/utils/codex-config.js +26 -5
  399. package/dist/src/utils/codex-config.js.map +1 -1
  400. package/dist/src/utils/codex-manager.d.ts +79 -0
  401. package/dist/src/utils/codex-manager.js +747 -0
  402. package/dist/src/utils/codex-manager.js.map +1 -0
  403. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  404. package/dist/src/utils/codex-marketplace-path.js +45 -0
  405. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  406. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  407. package/dist/src/utils/codex-native-observation.js +154 -0
  408. package/dist/src/utils/codex-native-observation.js.map +1 -0
  409. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  410. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  411. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  412. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  413. package/dist/src/utils/codex-reconciler.js +298 -0
  414. package/dist/src/utils/codex-reconciler.js.map +1 -0
  415. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  416. package/dist/src/utils/codex-shared-native.js +81 -0
  417. package/dist/src/utils/codex-shared-native.js.map +1 -0
  418. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  419. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  420. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  421. package/dist/src/utils/codex-surface-analysis.js +247 -0
  422. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  423. package/dist/src/utils/dynamic-skill-tree.d.ts +4 -0
  424. package/dist/src/utils/dynamic-skill-tree.js +35 -5
  425. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  426. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  427. package/dist/src/utils/git-catalog-provider.js +177 -145
  428. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  429. package/dist/src/utils/local-marketplace.d.ts +18 -1
  430. package/dist/src/utils/local-marketplace.js +354 -84
  431. package/dist/src/utils/local-marketplace.js.map +1 -1
  432. package/dist/src/utils/manifest.d.ts +1 -3
  433. package/dist/src/utils/manifest.js +1 -3
  434. package/dist/src/utils/manifest.js.map +1 -1
  435. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  436. package/dist/src/utils/multi-source-catalog.js +54 -110
  437. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  438. package/dist/src/utils/native-cli.d.ts +55 -7
  439. package/dist/src/utils/native-cli.js +400 -58
  440. package/dist/src/utils/native-cli.js.map +1 -1
  441. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  442. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  443. package/dist/src/utils/ownership.d.ts +84 -20
  444. package/dist/src/utils/ownership.js +179 -222
  445. package/dist/src/utils/ownership.js.map +1 -1
  446. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  447. package/dist/src/utils/path-catalog-provider.js +54 -65
  448. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  449. package/dist/src/utils/paths.d.ts +0 -1
  450. package/dist/src/utils/paths.js +0 -1
  451. package/dist/src/utils/paths.js.map +1 -1
  452. package/dist/src/utils/plugin-config-impact.d.ts +33 -0
  453. package/dist/src/utils/plugin-config-impact.js +298 -0
  454. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  455. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  456. package/dist/src/utils/plugin-config-write.js +1000 -296
  457. package/dist/src/utils/plugin-config-write.js.map +1 -1
  458. package/dist/src/utils/plugin-config.d.ts +153 -93
  459. package/dist/src/utils/plugin-config.js +1116 -968
  460. package/dist/src/utils/plugin-config.js.map +1 -1
  461. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  462. package/dist/src/utils/plugin-intent-state.js +320 -0
  463. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  464. package/dist/src/utils/plugin-scripts.d.ts +65 -125
  465. package/dist/src/utils/plugin-scripts.js +484 -524
  466. package/dist/src/utils/plugin-scripts.js.map +1 -1
  467. package/dist/src/utils/process-tree.d.ts +2 -2
  468. package/dist/src/utils/process-tree.js +1 -1
  469. package/dist/src/utils/process-tree.js.map +1 -1
  470. package/dist/src/utils/project-boundary.d.ts +11 -13
  471. package/dist/src/utils/project-boundary.js +28 -34
  472. package/dist/src/utils/project-boundary.js.map +1 -1
  473. package/dist/src/utils/runtime-config.d.ts +20 -0
  474. package/dist/src/utils/runtime-config.js +75 -0
  475. package/dist/src/utils/runtime-config.js.map +1 -0
  476. package/dist/src/utils/safe-fs.d.ts +21 -0
  477. package/dist/src/utils/safe-fs.js +111 -0
  478. package/dist/src/utils/safe-fs.js.map +1 -0
  479. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  480. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  481. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  482. package/dist/src/utils/sensitive-content.d.ts +4 -0
  483. package/dist/src/utils/sensitive-content.js +36 -0
  484. package/dist/src/utils/sensitive-content.js.map +1 -0
  485. package/dist/src/utils/state-paths.js +7 -2
  486. package/dist/src/utils/state-paths.js.map +1 -1
  487. package/dist/src/utils/target-eligibility.d.ts +8 -2
  488. package/dist/src/utils/target-eligibility.js +17 -8
  489. package/dist/src/utils/target-eligibility.js.map +1 -1
  490. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  491. package/dist/src/utils/windows-claude-shim.js +10 -0
  492. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  493. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  494. package/dist/src/utils/windows-npm-shim.js +140 -0
  495. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  496. package/dist/vitest.config.js +92 -10
  497. package/dist/vitest.config.js.map +1 -1
  498. package/package.json +27 -18
  499. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  500. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  501. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  502. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  503. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  504. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  505. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  506. package/dist/scripts/codex-eval-app-server.js +0 -1228
  507. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  508. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  509. package/dist/scripts/codex-eval-isolation.js +0 -318
  510. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  511. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  512. package/dist/scripts/codex-eval-process-management.js +0 -69
  513. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  514. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  515. package/dist/scripts/codex-eval-process-tree.js +0 -803
  516. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  517. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  518. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  519. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  520. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  521. package/dist/scripts/codex-trigger-eval.js +0 -968
  522. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  523. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  524. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  525. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  526. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  527. package/dist/scripts/eval-plugin-skills.js +0 -1586
  528. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  529. package/dist/scripts/eval-run-layout.d.ts +0 -17
  530. package/dist/scripts/eval-run-layout.js +0 -26
  531. package/dist/scripts/eval-run-layout.js.map +0 -1
  532. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  533. package/dist/scripts/plugin-eval-contract.js +0 -695
  534. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  535. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  536. package/dist/scripts/plugin-eval-materializer.js +0 -421
  537. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  538. package/dist/scripts/skill-reporting.d.ts +0 -212
  539. package/dist/scripts/skill-reporting.js +0 -922
  540. package/dist/scripts/skill-reporting.js.map +0 -1
  541. package/dist/src/commands/status-v4.d.ts +0 -123
  542. package/dist/src/commands/status-v4.js +0 -905
  543. package/dist/src/commands/status-v4.js.map +0 -1
  544. package/dist/src/commands/status.d.ts +0 -93
  545. package/dist/src/commands/status.js +0 -442
  546. package/dist/src/commands/status.js.map +0 -1
  547. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  548. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  549. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  550. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  551. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  552. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  553. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  554. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  555. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  556. package/dist/src/utils/catalog-source-cache.js +0 -296
  557. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  558. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  559. package/dist/src/utils/codex-project-surface.js +0 -49
  560. package/dist/src/utils/codex-project-surface.js.map +0 -1
  561. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  562. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  563. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  564. package/dist/src/utils/plugin-release.d.ts +0 -2
  565. package/dist/src/utils/plugin-release.js +0 -2
  566. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -2,13 +2,12 @@ import crypto from 'node:crypto';
2
2
  import { promises as nodeFs } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import fs from 'fs-extra';
5
+ import { atomicReplaceSafeFile } from './safe-fs.js';
5
6
  export const SKILL_OWNER_MARKER = '.agent-workflows-owner.json';
6
7
  export const OWNED_TEXT_HEADER_PREFIX = '# agent-workflows-owner: ';
7
- export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-v2:';
8
+ export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-v3:';
8
9
  export function createSharedOwnerToken(identity) {
9
10
  validateOwnerIdentity(identity);
10
- if (!identity.sourceId)
11
- return identity.plugin;
12
11
  return `${SHARED_OWNER_TOKEN_PREFIX}${Buffer.from(createSkillOwnerMarkerContent(identity)).toString('base64url')}`;
13
12
  }
14
13
  export function parseSharedOwnerToken(value) {
@@ -22,17 +21,13 @@ export function parseSharedOwnerToken(value) {
22
21
  throw new Error('Shared owner token is invalid.');
23
22
  }
24
23
  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)
25
- || parsed.schemaVersion !== 2) {
26
- throw new Error('Shared owner token must contain schema 2 identity.');
24
+ || parsed.schemaVersion !== 3) {
25
+ throw new Error('Shared owner token must contain schema 3 identity.');
27
26
  }
28
27
  return parseOwnerIdentity(parsed, 'Shared owner token');
29
28
  }
30
29
  class OwnershipSymlinkError extends Error {
31
30
  }
32
- let atomicReplaceBeforeRenameHookForTests;
33
- export function setAtomicReplaceBeforeRenameHookForTests(hook) {
34
- atomicReplaceBeforeRenameHookForTests = hook;
35
- }
36
31
  function isMissing(error) {
37
32
  const code = error.code;
38
33
  return code === 'ENOENT' || code === 'ENOTDIR';
@@ -55,15 +50,12 @@ export function validateOwnerIdentity(identity) {
55
50
  }
56
51
  assertSafeOwnershipSegment(identity.plugin, 'Owner identity.plugin');
57
52
  assertSafeOwnershipSegment(identity.artifactKey, 'Owner identity.artifactKey');
58
- const sourceFields = [identity.sourceId, identity.sourceIdentity, identity.pluginId];
53
+ const sourceFields = [identity.sourceId, identity.pluginId];
59
54
  if (sourceFields.some((value) => value !== undefined)) {
60
55
  if (sourceFields.some((value) => typeof value !== 'string' || value.length === 0)) {
61
56
  throw new Error('Owner identity source fields must be present together.');
62
57
  }
63
58
  assertSafeOwnershipSegment(identity.sourceId, 'Owner identity.sourceId');
64
- if (!/^sha256:[0-9a-f]{64}$/u.test(identity.sourceIdentity)) {
65
- throw new Error('Owner identity.sourceIdentity must be a SHA-256 digest.');
66
- }
67
59
  if (identity.pluginId !== `${identity.sourceId}/${identity.plugin}`) {
68
60
  throw new Error('Owner identity.pluginId must be the canonical sourceId/plugin name.');
69
61
  }
@@ -78,7 +70,6 @@ export function validateOwnerIdentity(identity) {
78
70
  function identitiesEqual(left, right) {
79
71
  return left.owner === right.owner &&
80
72
  left.sourceId === right.sourceId &&
81
- left.sourceIdentity === right.sourceIdentity &&
82
73
  left.pluginId === right.pluginId &&
83
74
  left.plugin === right.plugin &&
84
75
  left.artifactKey === right.artifactKey &&
@@ -87,15 +78,11 @@ function identitiesEqual(left, right) {
87
78
  }
88
79
  function markerFromIdentity(identity) {
89
80
  validateOwnerIdentity(identity);
90
- const namespaced = identity.sourceId !== undefined;
91
81
  return {
92
- schemaVersion: namespaced ? 2 : 1,
82
+ schemaVersion: 3,
93
83
  owner: identity.owner,
94
- ...(namespaced ? {
95
- sourceId: identity.sourceId,
96
- sourceIdentity: identity.sourceIdentity,
97
- pluginId: identity.pluginId,
98
- } : {}),
84
+ sourceId: identity.sourceId,
85
+ pluginId: identity.pluginId,
99
86
  plugin: identity.plugin,
100
87
  artifactKey: identity.artifactKey,
101
88
  platform: identity.platform,
@@ -111,7 +98,6 @@ function parseOwnerIdentity(value, label) {
111
98
  'schemaVersion',
112
99
  'owner',
113
100
  'sourceId',
114
- 'sourceIdentity',
115
101
  'pluginId',
116
102
  'plugin',
117
103
  'artifactKey',
@@ -121,21 +107,14 @@ function parseOwnerIdentity(value, label) {
121
107
  if (Object.keys(record).some((key) => !allowedKeys.has(key))) {
122
108
  throw new Error(`${label} 包含未知字段。`);
123
109
  }
124
- if (record.schemaVersion !== 1 && record.schemaVersion !== 2) {
125
- throw new Error(`${label}.schemaVersion 不受支持。`);
126
- }
127
- if (record.schemaVersion === 2 && (typeof record.sourceId !== 'string'
128
- || typeof record.sourceIdentity !== 'string'
110
+ if (record.schemaVersion !== 3 || (typeof record.sourceId !== 'string'
129
111
  || typeof record.pluginId !== 'string')) {
130
- throw new Error(`${label}.schemaVersion 必须是 1,或提供完整 schema 2 source identity。`);
112
+ throw new Error(`${label} must use schema 3 stable plugin identity. This beta hard cut requires a new AW_HOME, or cleanup with the old CLI first.`);
131
113
  }
132
114
  const identity = {
133
115
  owner: record.owner,
134
- ...(record.schemaVersion === 2 ? {
135
- sourceId: record.sourceId,
136
- sourceIdentity: record.sourceIdentity,
137
- pluginId: record.pluginId,
138
- } : {}),
116
+ sourceId: record.sourceId,
117
+ pluginId: record.pluginId,
139
118
  plugin: record.plugin,
140
119
  artifactKey: record.artifactKey,
141
120
  platform: record.platform,
@@ -176,60 +155,15 @@ async function assertNoSymlinkInPath(allowedRoot, candidatePath) {
176
155
  }
177
156
  }
178
157
  }
179
- async function readDirectoryIdentity(directoryPath) {
180
- const stats = await fs.lstat(directoryPath);
181
- if (stats.isSymbolicLink() || !stats.isDirectory()) {
182
- throw new OwnershipSymlinkError(`Ownership 稳定目录必须是真实目录:${directoryPath}`);
183
- }
184
- return {
185
- dev: stats.dev,
186
- ino: stats.ino,
187
- realPath: await fs.realpath(directoryPath),
188
- };
189
- }
190
- function assertStableDirectory(label, before, after) {
191
- if (before.dev !== after.dev || before.ino !== after.ino || before.realPath !== after.realPath) {
192
- throw new Error(`${label} identity 在 atomic rename 前发生变化。`);
193
- }
194
- }
195
- function assertRealDirectoryBoundary(root, parent) {
196
- const relative = path.relative(root.realPath, parent.realPath);
197
- if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
198
- throw new Error('Ownership parent realpath 不在 allowedRoot realpath 内。');
199
- }
200
- }
201
158
  async function atomicReplaceFile(options) {
202
- await assertNoSymlinkInPath(options.allowedRoot, options.path);
203
- await fs.ensureDir(path.dirname(options.path));
204
- await assertNoSymlinkInPath(options.allowedRoot, options.path);
205
- const rootIdentity = await readDirectoryIdentity(path.resolve(options.allowedRoot));
206
- const parentIdentity = await readDirectoryIdentity(path.dirname(path.resolve(options.path)));
207
- assertRealDirectoryBoundary(rootIdentity, parentIdentity);
208
- const temporaryPath = path.join(path.dirname(options.path), `.${path.basename(options.path)}.owner-${process.pid}-${crypto.randomUUID()}`);
209
- assertPathBoundary(options.allowedRoot, temporaryPath);
210
- let handle;
211
- try {
212
- handle = await nodeFs.open(temporaryPath, 'wx', 0o666);
213
- await handle.writeFile(options.content, 'utf8');
214
- await handle.close();
215
- handle = undefined;
216
- await atomicReplaceBeforeRenameHookForTests?.();
217
- // Threat model: this blocks pre-existing symlinks/hardlinks, traversal, and callers that use
218
- // this API concurrently. Node has no portable dirfd/openat/renameat2 sequence, so this does not
219
- // claim to stop a process with the same file permissions from swapping a directory after this
220
- // final check and before rename; that process can already edit or delete the user's files.
221
- await assertNoSymlinkInPath(options.allowedRoot, options.path);
222
- const currentRootIdentity = await readDirectoryIdentity(path.resolve(options.allowedRoot));
223
- const currentParentIdentity = await readDirectoryIdentity(path.dirname(path.resolve(options.path)));
224
- assertRealDirectoryBoundary(currentRootIdentity, currentParentIdentity);
225
- assertStableDirectory('allowedRoot', rootIdentity, currentRootIdentity);
226
- assertStableDirectory('parent', parentIdentity, currentParentIdentity);
227
- await nodeFs.rename(temporaryPath, options.path);
228
- }
229
- finally {
230
- await handle?.close().catch(() => undefined);
231
- await nodeFs.rm(temporaryPath, { force: true }).catch(() => undefined);
232
- }
159
+ await atomicReplaceSafeFile({
160
+ filePath: options.path,
161
+ allowedRoot: options.allowedRoot,
162
+ content: options.content,
163
+ mode: 0o666,
164
+ label: 'Ownership path',
165
+ temporaryTag: 'owner',
166
+ });
233
167
  }
234
168
  export async function assertOwnedSkillPath(options) {
235
169
  validateOwnerIdentity(options.identity);
@@ -296,14 +230,6 @@ export async function readSkillOwnerMarker(options) {
296
230
  if (marker.artifactKey !== path.basename(options.skillRoot)) {
297
231
  throw new Error('Skill owner marker artifactKey 与目录名不一致。');
298
232
  }
299
- if (options.expectedIdentity?.sourceId !== undefined && marker.schemaVersion === 1) {
300
- throw new Error('legacyStateUnsupported: schema 1 owner marker is not supported.');
301
- }
302
- if (options.expectedIdentity?.sourceId !== undefined
303
- && marker.sourceId === options.expectedIdentity.sourceId
304
- && marker.sourceIdentity !== options.expectedIdentity.sourceIdentity) {
305
- throw new Error('sourceChanged: owner source identity does not match the configured source.');
306
- }
307
233
  if (options.expectedIdentity && !identitiesEqual(marker, options.expectedIdentity)) {
308
234
  throw new Error('Skill owner marker identity 与目标 identity 不匹配。');
309
235
  }
@@ -348,14 +274,6 @@ export function parseOwnedTextHeader(content, expectedIdentity) {
348
274
  throw new Error('Owner header 不是有效 JSON。');
349
275
  }
350
276
  const identity = parseOwnerIdentity(parsed, 'Owner header');
351
- if (expectedIdentity?.sourceId !== undefined && identity.sourceId === undefined) {
352
- throw new Error('legacyStateUnsupported: schema 1 owner header is not supported.');
353
- }
354
- if (expectedIdentity?.sourceId !== undefined
355
- && identity.sourceId === expectedIdentity.sourceId
356
- && identity.sourceIdentity !== expectedIdentity.sourceIdentity) {
357
- throw new Error('sourceChanged: owner source identity does not match the configured source.');
358
- }
359
277
  if (expectedIdentity && !identitiesEqual(identity, expectedIdentity)) {
360
278
  throw new Error('Owner header identity 与目标 identity 不匹配。');
361
279
  }
@@ -373,13 +291,13 @@ export async function writeOwnedTextFile(options) {
373
291
  content: renderOwnedTextFile(options.content, options.identity),
374
292
  });
375
293
  }
376
- async function inspectPathAt(component, actualPath, canonicalPath) {
294
+ async function inspectPathAt(component, actualPath, canonicalPath, executor) {
377
295
  try {
378
296
  await assertNoSymlinkInPath(component.allowedRoot, actualPath);
379
297
  }
380
298
  catch (error) {
381
299
  if (error instanceof OwnershipSymlinkError)
382
- return 'foreign';
300
+ return foreignProbe(component, 'typeMismatch');
383
301
  throw error;
384
302
  }
385
303
  const stats = await fs.lstat(actualPath).catch((error) => {
@@ -388,17 +306,17 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
388
306
  throw error;
389
307
  });
390
308
  if (!stats)
391
- return 'absent';
309
+ return { state: 'absent' };
392
310
  if (component.kind === 'skill-directory') {
393
311
  if (!stats.isDirectory())
394
- return 'foreign';
312
+ return foreignProbe(component, 'typeMismatch');
395
313
  const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
396
314
  try {
397
315
  await assertNoSymlinkInPath(component.allowedRoot, markerPath);
398
316
  }
399
317
  catch (error) {
400
318
  if (error instanceof OwnershipSymlinkError)
401
- return 'foreign';
319
+ return foreignProbe(component, 'typeMismatch');
402
320
  throw error;
403
321
  }
404
322
  let marker;
@@ -408,35 +326,143 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
408
326
  catch (error) {
409
327
  if (error.code)
410
328
  throw error;
411
- return 'foreign';
329
+ return foreignProbe(component, 'unownedContent');
412
330
  }
413
331
  if (!marker) {
414
- return await component.unownedIsPristine?.(actualPath) ? 'absent' : 'foreign';
332
+ const pristine = component.pristineTree && executor?.skillDirectoryMatchesPristineTree
333
+ ? await executor.skillDirectoryMatchesPristineTree({
334
+ actualPath,
335
+ files: component.pristineTree,
336
+ })
337
+ : false;
338
+ return pristine
339
+ ? { state: 'absent' }
340
+ : foreignProbe(component, 'unownedContent');
341
+ }
342
+ if (!identitiesEqual(marker, component.identity)) {
343
+ return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
415
344
  }
416
- if (!identitiesEqual(marker, component.identity))
417
- return 'foreign';
418
- if (canonicalPath && path.basename(actualPath) !== component.identity.artifactKey)
419
- return 'foreign';
420
- return 'present';
345
+ if (canonicalPath && path.basename(actualPath) !== component.identity.artifactKey) {
346
+ return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
347
+ }
348
+ return { state: 'present' };
421
349
  }
422
350
  if (!stats.isFile())
423
- return 'foreign';
351
+ return foreignProbe(component, 'typeMismatch');
424
352
  let raw;
425
353
  try {
426
354
  raw = await fs.readFile(actualPath, 'utf8');
427
355
  }
428
356
  catch (error) {
429
357
  if (isMissing(error))
430
- return 'absent';
358
+ return { state: 'absent' };
359
+ throw error;
360
+ }
361
+ try {
362
+ const parsed = parseOwnedTextHeader(raw);
363
+ if (!parsed)
364
+ return foreignProbe(component, 'unownedContent');
365
+ return identitiesEqual(parsed.identity, component.identity)
366
+ ? { state: 'present' }
367
+ : foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
368
+ }
369
+ catch {
370
+ return foreignProbe(component, 'unownedContent');
371
+ }
372
+ }
373
+ function publicOwner(identity) {
374
+ return identity.pluginId ?? identity.plugin;
375
+ }
376
+ function forceArtifactBasenameMatches(component) {
377
+ const basename = path.basename(component.path);
378
+ if (component.kind === 'skill-directory')
379
+ return basename === component.identity.artifactKey;
380
+ const stem = basename.replace(/\.[^.]+$/u, '');
381
+ const slug = (value) => value.trim().toLowerCase()
382
+ .replace(/[^a-z0-9]+/gu, '-')
383
+ .replace(/^-+|-+$/gu, '');
384
+ return stem === component.identity.artifactKey
385
+ || stem === `aw-${slug(component.identity.plugin)}-${slug(component.identity.artifactKey)}`;
386
+ }
387
+ async function inspectForceExclusivePathAt(component, actualPath, canonicalPath) {
388
+ validateOwnerIdentity(component.identity);
389
+ if (canonicalPath && !forceArtifactBasenameMatches(component)) {
390
+ return foreignProbe(component, 'ownerMismatch');
391
+ }
392
+ try {
393
+ await assertNoSymlinkInPath(component.allowedRoot, actualPath);
394
+ }
395
+ catch (error) {
396
+ if (error instanceof OwnershipSymlinkError)
397
+ return foreignProbe(component, 'typeMismatch');
398
+ throw error;
399
+ }
400
+ const stats = await fs.lstat(actualPath).catch((error) => {
401
+ if (isMissing(error))
402
+ return null;
431
403
  throw error;
404
+ });
405
+ if (!stats)
406
+ return { state: 'absent' };
407
+ if (component.kind === 'skill-directory') {
408
+ if (!stats.isDirectory())
409
+ return foreignProbe(component, 'typeMismatch');
410
+ const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
411
+ try {
412
+ await assertNoSymlinkInPath(component.allowedRoot, markerPath);
413
+ }
414
+ catch (error) {
415
+ if (error instanceof OwnershipSymlinkError)
416
+ return foreignProbe(component, 'typeMismatch');
417
+ throw error;
418
+ }
419
+ try {
420
+ const marker = await readMarkerAt(markerPath);
421
+ if (!marker)
422
+ return { state: 'present' };
423
+ return identitiesEqual(marker, component.identity)
424
+ ? { state: 'present' }
425
+ : foreignProbe(component, 'ownerMismatch', publicOwner(marker));
426
+ }
427
+ catch (error) {
428
+ if (error.code)
429
+ throw error;
430
+ return { state: 'present' };
431
+ }
432
432
  }
433
+ if (!stats.isFile())
434
+ return foreignProbe(component, 'typeMismatch');
435
+ const raw = await fs.readFile(actualPath, 'utf8').catch((error) => {
436
+ if (isMissing(error))
437
+ return null;
438
+ throw error;
439
+ });
440
+ if (raw === null)
441
+ return { state: 'absent' };
433
442
  try {
434
- return parseOwnedTextHeader(raw, component.identity) ? 'present' : 'foreign';
443
+ const parsed = parseOwnedTextHeader(raw);
444
+ if (!parsed)
445
+ return { state: 'present' };
446
+ return identitiesEqual(parsed.identity, component.identity)
447
+ ? { state: 'present' }
448
+ : foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
435
449
  }
436
450
  catch {
437
- return 'foreign';
451
+ return { state: 'present' };
438
452
  }
439
453
  }
454
+ function foreignProbe(component, reason, actualOwner) {
455
+ return {
456
+ state: 'foreign',
457
+ collision: {
458
+ reason,
459
+ artifactKind: component.kind,
460
+ artifactKey: component.identity.artifactKey,
461
+ expectedOwner: publicOwner(component.identity),
462
+ ...(actualOwner ? { actualOwner } : {}),
463
+ },
464
+ };
465
+ }
440
466
  function componentLabel(component) {
441
467
  if ('path' in component)
442
468
  return component.path;
@@ -453,17 +479,21 @@ function validateNativePlugin(component) {
453
479
  throw new Error(`Native plugin identity 必须使用 ${prefix} marketplace namespace。`);
454
480
  }
455
481
  }
456
- async function inspectComponent(component, nativeProbe) {
482
+ async function inspectComponent(component, nativeProbe, executor) {
457
483
  validateOwnerIdentity(component.identity);
458
484
  if ('path' in component)
459
- return inspectPathAt(component, component.path, true);
485
+ return inspectPathAt(component, component.path, true, executor);
460
486
  if (component.kind === 'native-plugin') {
461
487
  validateNativePlugin(component);
462
488
  if (!nativeProbe)
463
489
  throw new Error('Native ownership inspection 缺少 nativeProbe。');
464
- return nativeProbe(component);
490
+ const state = await nativeProbe(component);
491
+ return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
465
492
  }
466
- return component.inspect();
493
+ if (!executor)
494
+ throw new Error('Shared ownership inspection 缺少 executor。');
495
+ const state = await executor.inspectShared(component);
496
+ return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
467
497
  }
468
498
  export async function inspectOwnedComponents(options) {
469
499
  const components = [];
@@ -471,14 +501,20 @@ export async function inspectOwnedComponents(options) {
471
501
  for (const component of options.components) {
472
502
  const label = componentLabel(component);
473
503
  try {
474
- let probe = await inspectComponent(component, options.nativeProbe);
504
+ const result = await (options.forceExclusive && 'path' in component
505
+ ? inspectForceExclusivePathAt(component, component.path, true)
506
+ : inspectComponent(component, options.nativeProbe, options.executor));
507
+ let probe = result.state;
475
508
  let healthDiagnostic;
476
509
  if (options.verifyHealth
477
510
  && probe === 'present'
478
511
  && component.kind === 'skill-directory'
479
- && component.validateHealth) {
512
+ && component.validateHealth === true) {
480
513
  try {
481
- await component.validateHealth();
514
+ if (!options.executor?.validateSkillDirectory) {
515
+ throw new Error('Skill health inspection 缺少 executor。');
516
+ }
517
+ await options.executor.validateSkillDirectory(component);
482
518
  }
483
519
  catch (error) {
484
520
  probe = 'partial';
@@ -487,7 +523,8 @@ export async function inspectOwnedComponents(options) {
487
523
  }
488
524
  components.push({
489
525
  component,
490
- state: probe === 'foreign' ? 'partial' : probe,
526
+ state: probe,
527
+ ...(result.collision ? { collision: result.collision } : {}),
491
528
  ...(probe === 'foreign'
492
529
  ? { diagnostic: `存在 foreign collision:${label}` }
493
530
  : healthDiagnostic
@@ -505,7 +542,7 @@ export async function inspectOwnedComponents(options) {
505
542
  }
506
543
  const state = errors.length > 0
507
544
  ? 'error'
508
- : components.length === 0 || components.every((entry) => entry.state === 'absent')
545
+ : components.length === 0 || components.every((entry) => (entry.state === 'absent' || entry.state === 'foreign'))
509
546
  ? 'absent'
510
547
  : components.every((entry) => entry.state === 'present')
511
548
  ? 'present'
@@ -546,7 +583,9 @@ async function cleanupPathComponent(options) {
546
583
  }
547
584
  let verified;
548
585
  try {
549
- verified = await inspectPathAt(component, quarantinePath, false);
586
+ verified = (await (options.forceExclusive
587
+ ? inspectForceExclusivePathAt(component, quarantinePath, false)
588
+ : inspectPathAt(component, quarantinePath, false, options.executor))).state;
550
589
  }
551
590
  catch (error) {
552
591
  result.failures.push({
@@ -589,8 +628,8 @@ async function cleanupPathComponent(options) {
589
628
  return;
590
629
  }
591
630
  try {
592
- const after = await inspectComponent(component);
593
- if (after === 'absent')
631
+ const after = await inspectComponent(component, undefined, options.executor);
632
+ if (after.state === 'absent')
594
633
  pushUnique(result.removed, label);
595
634
  else
596
635
  pushUnique(result.residual, label);
@@ -612,7 +651,9 @@ export async function cleanupOwnedComponents(options) {
612
651
  for (const component of options.components) {
613
652
  const label = componentLabel(component);
614
653
  try {
615
- const probe = await inspectComponent(component, options.nativeProbe);
654
+ const probe = (await (options.forceExclusive && 'path' in component
655
+ ? inspectForceExclusivePathAt(component, component.path, true)
656
+ : inspectComponent(component, options.nativeProbe, options.executor))).state;
616
657
  probes.set(component, probe);
617
658
  if (probe === 'absent')
618
659
  pushUnique(result.absent, label);
@@ -641,6 +682,8 @@ export async function cleanupOwnedComponents(options) {
641
682
  component,
642
683
  result,
643
684
  afterQuarantine: options.afterQuarantine,
685
+ executor: options.executor,
686
+ forceExclusive: options.forceExclusive,
644
687
  });
645
688
  continue;
646
689
  }
@@ -653,7 +696,9 @@ export async function cleanupOwnedComponents(options) {
653
696
  await options.nativeRemove(component);
654
697
  }
655
698
  else {
656
- await component.remove();
699
+ if (!options.executor)
700
+ throw new Error('Shared ownership cleanup 缺少 executor。');
701
+ await options.executor.removeShared(component);
657
702
  }
658
703
  }
659
704
  catch (error) {
@@ -662,8 +707,8 @@ export async function cleanupOwnedComponents(options) {
662
707
  continue;
663
708
  }
664
709
  try {
665
- const after = await inspectComponent(component, options.nativeProbe);
666
- if (after === 'absent')
710
+ const after = await inspectComponent(component, options.nativeProbe, options.executor);
711
+ if (after.state === 'absent')
667
712
  pushUnique(result.removed, label);
668
713
  else
669
714
  pushUnique(result.residual, label);
@@ -675,92 +720,4 @@ export async function cleanupOwnedComponents(options) {
675
720
  }
676
721
  return result;
677
722
  }
678
- export async function cleanupCorruptExclusivePluginDirectory(options) {
679
- const markerPath = path.join(options.directory, SKILL_OWNER_MARKER);
680
- let raw = null;
681
- try {
682
- const [directoryStats, markerStats] = await Promise.all([
683
- nodeFs.lstat(options.directory),
684
- nodeFs.lstat(markerPath),
685
- ]);
686
- if (!directoryStats.isDirectory() || directoryStats.isSymbolicLink()
687
- || !markerStats.isFile() || markerStats.isSymbolicLink())
688
- return null;
689
- await assertNoSymlinkInPath(options.allowedRoot, markerPath);
690
- raw = await fs.readJson(markerPath);
691
- }
692
- catch {
693
- return null;
694
- }
695
- if (!raw
696
- || raw.schemaVersion !== 2
697
- || raw.owner !== 'agent-workflows'
698
- || raw.sourceId !== options.sourceId
699
- || raw.plugin !== options.pluginName
700
- || raw.pluginId !== `${options.sourceId}/${options.pluginName}`
701
- || raw.platform !== options.platform
702
- || raw.scope !== options.scope)
703
- return null;
704
- assertSafeOwnershipSegment(path.basename(options.directory), 'Exclusive plugin directory');
705
- const quarantinePath = path.join(path.resolve(options.allowedRoot), `.agent-workflows-quarantine-${process.pid}-${crypto.randomUUID()}`);
706
- assertPathBoundary(options.allowedRoot, quarantinePath);
707
- try {
708
- await (options.rename ?? nodeFs.rename)(options.directory, quarantinePath);
709
- }
710
- catch (error) {
711
- const [canonicalExists, quarantineExists] = await Promise.all([
712
- fs.pathExists(options.directory),
713
- fs.pathExists(quarantinePath),
714
- ]);
715
- if (!canonicalExists && !quarantineExists) {
716
- return {
717
- removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
718
- };
719
- }
720
- return {
721
- removed: [], absent: [],
722
- residual: [quarantineExists ? quarantinePath : options.directory],
723
- quarantined: quarantineExists ? [quarantinePath] : [],
724
- failures: [{
725
- label: options.directory,
726
- phase: 'mutation',
727
- message: errorMessage(error),
728
- ...(quarantineExists ? { quarantinePath } : {}),
729
- }],
730
- };
731
- }
732
- try {
733
- await (options.remove ?? fs.remove)(quarantinePath);
734
- }
735
- catch (error) {
736
- if (!await fs.pathExists(quarantinePath)) {
737
- return {
738
- removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
739
- };
740
- }
741
- return {
742
- removed: [], absent: [], residual: [quarantinePath], quarantined: [quarantinePath],
743
- failures: [{
744
- label: options.directory,
745
- phase: 'remove',
746
- message: errorMessage(error),
747
- quarantinePath,
748
- }],
749
- };
750
- }
751
- if (await fs.pathExists(quarantinePath)) {
752
- return {
753
- removed: [], absent: [], residual: [quarantinePath], quarantined: [quarantinePath],
754
- failures: [{
755
- label: options.directory,
756
- phase: 'verify',
757
- message: 'Exclusive plugin quarantine remained after removal.',
758
- quarantinePath,
759
- }],
760
- };
761
- }
762
- return {
763
- removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
764
- };
765
- }
766
723
  //# sourceMappingURL=ownership.js.map