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

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