@lesliechan721/aw 0.1.0-beta.3

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 (429) hide show
  1. package/dist/authoring/assets/aw-config.d.mts +2 -0
  2. package/dist/authoring/assets/aw-config.mjs +556 -0
  3. package/dist/authoring/assets/aw-config.mjs.map +1 -0
  4. package/dist/authoring/scripts/add-skill.d.mts +2 -0
  5. package/dist/authoring/scripts/add-skill.mjs +355 -0
  6. package/dist/authoring/scripts/add-skill.mjs.map +1 -0
  7. package/dist/authoring/scripts/check-plugin-versions.d.mts +2 -0
  8. package/dist/authoring/scripts/check-plugin-versions.mjs +5 -0
  9. package/dist/authoring/scripts/check-plugin-versions.mjs.map +1 -0
  10. package/dist/authoring/scripts/init-plugin.d.mts +2 -0
  11. package/dist/authoring/scripts/init-plugin.mjs +512 -0
  12. package/dist/authoring/scripts/init-plugin.mjs.map +1 -0
  13. package/dist/authoring/scripts/lib/javascript-import-scanner.d.mts +4 -0
  14. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs +261 -0
  15. package/dist/authoring/scripts/lib/javascript-import-scanner.mjs.map +1 -0
  16. package/dist/authoring/scripts/lib/plugin-root.d.mts +26 -0
  17. package/dist/authoring/scripts/lib/plugin-root.mjs +125 -0
  18. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -0
  19. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +55 -0
  20. package/dist/authoring/scripts/lib/plugin-version-check.mjs +777 -0
  21. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -0
  22. package/dist/authoring/scripts/lib/semver.d.mts +9 -0
  23. package/dist/authoring/scripts/lib/semver.mjs +63 -0
  24. package/dist/authoring/scripts/lib/semver.mjs.map +1 -0
  25. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +124 -0
  26. package/dist/authoring/scripts/lib/skill-scaffold.mjs +374 -0
  27. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -0
  28. package/dist/authoring/scripts/plugin-status.d.mts +2 -0
  29. package/dist/authoring/scripts/plugin-status.mjs +96 -0
  30. package/dist/authoring/scripts/plugin-status.mjs.map +1 -0
  31. package/dist/authoring/scripts/validate-plugin.d.mts +2 -0
  32. package/dist/authoring/scripts/validate-plugin.mjs +4442 -0
  33. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -0
  34. package/dist/authoring/scripts/validate-skill.d.mts +2 -0
  35. package/dist/authoring/scripts/validate-skill.mjs +126 -0
  36. package/dist/authoring/scripts/validate-skill.mjs.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +8 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/scripts/aw-skill-eval-engine.d.ts +13 -0
  41. package/dist/scripts/aw-skill-eval-engine.js +31 -0
  42. package/dist/scripts/aw-skill-eval-engine.js.map +1 -0
  43. package/dist/scripts/bundle-plugins.d.ts +18 -0
  44. package/dist/scripts/bundle-plugins.js +123 -0
  45. package/dist/scripts/bundle-plugins.js.map +1 -0
  46. package/dist/scripts/codex-eval-app-server.d.ts +89 -0
  47. package/dist/scripts/codex-eval-app-server.js +1228 -0
  48. package/dist/scripts/codex-eval-app-server.js.map +1 -0
  49. package/dist/scripts/codex-eval-isolation.d.ts +61 -0
  50. package/dist/scripts/codex-eval-isolation.js +318 -0
  51. package/dist/scripts/codex-eval-isolation.js.map +1 -0
  52. package/dist/scripts/codex-eval-process-management.d.ts +8 -0
  53. package/dist/scripts/codex-eval-process-management.js +69 -0
  54. package/dist/scripts/codex-eval-process-management.js.map +1 -0
  55. package/dist/scripts/codex-eval-process-tree.d.ts +38 -0
  56. package/dist/scripts/codex-eval-process-tree.js +803 -0
  57. package/dist/scripts/codex-eval-process-tree.js.map +1 -0
  58. package/dist/scripts/codex-eval-runtime-config.d.ts +62 -0
  59. package/dist/scripts/codex-eval-runtime-config.js +843 -0
  60. package/dist/scripts/codex-eval-runtime-config.js.map +1 -0
  61. package/dist/scripts/codex-trigger-eval.d.ts +84 -0
  62. package/dist/scripts/codex-trigger-eval.js +968 -0
  63. package/dist/scripts/codex-trigger-eval.js.map +1 -0
  64. package/dist/scripts/eval-plugin-skills-audited.d.ts +6 -0
  65. package/dist/scripts/eval-plugin-skills-audited.js +261 -0
  66. package/dist/scripts/eval-plugin-skills-audited.js.map +1 -0
  67. package/dist/scripts/eval-plugin-skills.d.ts +45 -0
  68. package/dist/scripts/eval-plugin-skills.js +1586 -0
  69. package/dist/scripts/eval-plugin-skills.js.map +1 -0
  70. package/dist/scripts/eval-run-layout.d.ts +17 -0
  71. package/dist/scripts/eval-run-layout.js +26 -0
  72. package/dist/scripts/eval-run-layout.js.map +1 -0
  73. package/dist/scripts/plugin-eval-contract.d.ts +185 -0
  74. package/dist/scripts/plugin-eval-contract.js +695 -0
  75. package/dist/scripts/plugin-eval-contract.js.map +1 -0
  76. package/dist/scripts/plugin-eval-materializer.d.ts +13 -0
  77. package/dist/scripts/plugin-eval-materializer.js +421 -0
  78. package/dist/scripts/plugin-eval-materializer.js.map +1 -0
  79. package/dist/scripts/plugin-staging.d.ts +43 -0
  80. package/dist/scripts/plugin-staging.js +196 -0
  81. package/dist/scripts/plugin-staging.js.map +1 -0
  82. package/dist/scripts/skill-reporting.d.ts +212 -0
  83. package/dist/scripts/skill-reporting.js +922 -0
  84. package/dist/scripts/skill-reporting.js.map +1 -0
  85. package/dist/scripts/test-plugin-scripts.d.ts +7 -0
  86. package/dist/scripts/test-plugin-scripts.js +674 -0
  87. package/dist/scripts/test-plugin-scripts.js.map +1 -0
  88. package/dist/src/adapters/helpers.d.ts +44 -0
  89. package/dist/src/adapters/helpers.js +95 -0
  90. package/dist/src/adapters/helpers.js.map +1 -0
  91. package/dist/src/authoring/workspace-commands.d.ts +46 -0
  92. package/dist/src/authoring/workspace-commands.js +133 -0
  93. package/dist/src/authoring/workspace-commands.js.map +1 -0
  94. package/dist/src/commands/catalog-publish.d.ts +33 -0
  95. package/dist/src/commands/catalog-publish.js +374 -0
  96. package/dist/src/commands/catalog-publish.js.map +1 -0
  97. package/dist/src/commands/catalog-source.d.ts +111 -0
  98. package/dist/src/commands/catalog-source.js +266 -0
  99. package/dist/src/commands/catalog-source.js.map +1 -0
  100. package/dist/src/commands/console.d.ts +3 -0
  101. package/dist/src/commands/console.js +44 -0
  102. package/dist/src/commands/console.js.map +1 -0
  103. package/dist/src/commands/dependency-operation-plan.d.ts +28 -0
  104. package/dist/src/commands/dependency-operation-plan.js +15 -0
  105. package/dist/src/commands/dependency-operation-plan.js.map +1 -0
  106. package/dist/src/commands/init.d.ts +31 -0
  107. package/dist/src/commands/init.js +63 -0
  108. package/dist/src/commands/init.js.map +1 -0
  109. package/dist/src/commands/options.d.ts +68 -0
  110. package/dist/src/commands/options.js +146 -0
  111. package/dist/src/commands/options.js.map +1 -0
  112. package/dist/src/commands/rebuild-command.d.ts +77 -0
  113. package/dist/src/commands/rebuild-command.js +1681 -0
  114. package/dist/src/commands/rebuild-command.js.map +1 -0
  115. package/dist/src/commands/rebuild-integration.d.ts +94 -0
  116. package/dist/src/commands/rebuild-integration.js +3289 -0
  117. package/dist/src/commands/rebuild-integration.js.map +1 -0
  118. package/dist/src/commands/rebuild-operations.d.ts +110 -0
  119. package/dist/src/commands/rebuild-operations.js +791 -0
  120. package/dist/src/commands/rebuild-operations.js.map +1 -0
  121. package/dist/src/commands/review-publication.d.ts +99 -0
  122. package/dist/src/commands/review-publication.js +904 -0
  123. package/dist/src/commands/review-publication.js.map +1 -0
  124. package/dist/src/commands/runtime.d.ts +176 -0
  125. package/dist/src/commands/runtime.js +746 -0
  126. package/dist/src/commands/runtime.js.map +1 -0
  127. package/dist/src/commands/status-v4.d.ts +102 -0
  128. package/dist/src/commands/status-v4.js +844 -0
  129. package/dist/src/commands/status-v4.js.map +1 -0
  130. package/dist/src/commands/status.d.ts +93 -0
  131. package/dist/src/commands/status.js +442 -0
  132. package/dist/src/commands/status.js.map +1 -0
  133. package/dist/src/commands/wizard.d.ts +57 -0
  134. package/dist/src/commands/wizard.js +58 -0
  135. package/dist/src/commands/wizard.js.map +1 -0
  136. package/dist/src/commands/write-commands.d.ts +7 -0
  137. package/dist/src/commands/write-commands.js +167 -0
  138. package/dist/src/commands/write-commands.js.map +1 -0
  139. package/dist/src/constants.d.ts +25 -0
  140. package/dist/src/constants.js +26 -0
  141. package/dist/src/constants.js.map +1 -0
  142. package/dist/src/generators/agents.d.ts +3 -0
  143. package/dist/src/generators/agents.js +46 -0
  144. package/dist/src/generators/agents.js.map +1 -0
  145. package/dist/src/generators/hooks.d.ts +15 -0
  146. package/dist/src/generators/hooks.js +76 -0
  147. package/dist/src/generators/hooks.js.map +1 -0
  148. package/dist/src/generators/instructions.d.ts +13 -0
  149. package/dist/src/generators/instructions.js +66 -0
  150. package/dist/src/generators/instructions.js.map +1 -0
  151. package/dist/src/generators/local-plugin.d.ts +53 -0
  152. package/dist/src/generators/local-plugin.js +1268 -0
  153. package/dist/src/generators/local-plugin.js.map +1 -0
  154. package/dist/src/generators/permissions.d.ts +10 -0
  155. package/dist/src/generators/permissions.js +37 -0
  156. package/dist/src/generators/permissions.js.map +1 -0
  157. package/dist/src/generators/shared.d.ts +2 -0
  158. package/dist/src/generators/shared.js +15 -0
  159. package/dist/src/generators/shared.js.map +1 -0
  160. package/dist/src/index.d.ts +35 -0
  161. package/dist/src/index.js +2344 -0
  162. package/dist/src/index.js.map +1 -0
  163. package/dist/src/output/command-receipt.d.ts +90 -0
  164. package/dist/src/output/command-receipt.js +129 -0
  165. package/dist/src/output/command-receipt.js.map +1 -0
  166. package/dist/src/output/debug-log.d.ts +4 -0
  167. package/dist/src/output/debug-log.js +97 -0
  168. package/dist/src/output/debug-log.js.map +1 -0
  169. package/dist/src/output/equivalent-command.d.ts +9 -0
  170. package/dist/src/output/equivalent-command.js +39 -0
  171. package/dist/src/output/equivalent-command.js.map +1 -0
  172. package/dist/src/output/model.d.ts +117 -0
  173. package/dist/src/output/model.js +145 -0
  174. package/dist/src/output/model.js.map +1 -0
  175. package/dist/src/output/rebuild-progress.d.ts +21 -0
  176. package/dist/src/output/rebuild-progress.js +138 -0
  177. package/dist/src/output/rebuild-progress.js.map +1 -0
  178. package/dist/src/output/redact.d.ts +3 -0
  179. package/dist/src/output/redact.js +39 -0
  180. package/dist/src/output/redact.js.map +1 -0
  181. package/dist/src/output/reporter.d.ts +9 -0
  182. package/dist/src/output/reporter.js +133 -0
  183. package/dist/src/output/reporter.js.map +1 -0
  184. package/dist/src/portable/commands.d.ts +120 -0
  185. package/dist/src/portable/commands.js +506 -0
  186. package/dist/src/portable/commands.js.map +1 -0
  187. package/dist/src/portable/materializer.d.ts +50 -0
  188. package/dist/src/portable/materializer.js +408 -0
  189. package/dist/src/portable/materializer.js.map +1 -0
  190. package/dist/src/portable/skills-cli.d.ts +43 -0
  191. package/dist/src/portable/skills-cli.js +148 -0
  192. package/dist/src/portable/skills-cli.js.map +1 -0
  193. package/dist/src/tui/components.d.ts +32 -0
  194. package/dist/src/tui/components.js +42 -0
  195. package/dist/src/tui/components.js.map +1 -0
  196. package/dist/src/tui/console-app-v4.d.ts +20 -0
  197. package/dist/src/tui/console-app-v4.js +2613 -0
  198. package/dist/src/tui/console-app-v4.js.map +1 -0
  199. package/dist/src/tui/controller-runtime.d.ts +11 -0
  200. package/dist/src/tui/controller-runtime.js +902 -0
  201. package/dist/src/tui/controller-runtime.js.map +1 -0
  202. package/dist/src/tui/controller.d.ts +367 -0
  203. package/dist/src/tui/controller.js +1724 -0
  204. package/dist/src/tui/controller.js.map +1 -0
  205. package/dist/src/tui/index.d.ts +13 -0
  206. package/dist/src/tui/index.js +14 -0
  207. package/dist/src/tui/index.js.map +1 -0
  208. package/dist/src/tui/keys.d.ts +12 -0
  209. package/dist/src/tui/keys.js +22 -0
  210. package/dist/src/tui/keys.js.map +1 -0
  211. package/dist/src/tui/layout.d.ts +12 -0
  212. package/dist/src/tui/layout.js +19 -0
  213. package/dist/src/tui/layout.js.map +1 -0
  214. package/dist/src/tui/model.d.ts +279 -0
  215. package/dist/src/tui/model.js +652 -0
  216. package/dist/src/tui/model.js.map +1 -0
  217. package/dist/src/tui/prompt.d.ts +8 -0
  218. package/dist/src/tui/prompt.js +242 -0
  219. package/dist/src/tui/prompt.js.map +1 -0
  220. package/dist/src/tui/router.d.ts +153 -0
  221. package/dist/src/tui/router.js +102 -0
  222. package/dist/src/tui/router.js.map +1 -0
  223. package/dist/src/tui/runner.d.ts +11 -0
  224. package/dist/src/tui/runner.js +71 -0
  225. package/dist/src/tui/runner.js.map +1 -0
  226. package/dist/src/tui/theme.d.ts +18 -0
  227. package/dist/src/tui/theme.js +20 -0
  228. package/dist/src/tui/theme.js.map +1 -0
  229. package/dist/src/tui/views.d.ts +57 -0
  230. package/dist/src/tui/views.js +173 -0
  231. package/dist/src/tui/views.js.map +1 -0
  232. package/dist/src/tui/wizard.d.ts +11 -0
  233. package/dist/src/tui/wizard.js +321 -0
  234. package/dist/src/tui/wizard.js.map +1 -0
  235. package/dist/src/types.d.ts +313 -0
  236. package/dist/src/types.js +33 -0
  237. package/dist/src/types.js.map +1 -0
  238. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +12 -0
  239. package/dist/src/utils/active-marketplace-runtime-lock.js +133 -0
  240. package/dist/src/utils/active-marketplace-runtime-lock.js.map +1 -0
  241. package/dist/src/utils/agent-version.d.ts +13 -0
  242. package/dist/src/utils/agent-version.js +172 -0
  243. package/dist/src/utils/agent-version.js.map +1 -0
  244. package/dist/src/utils/artifact-plan.d.ts +26 -0
  245. package/dist/src/utils/artifact-plan.js +444 -0
  246. package/dist/src/utils/artifact-plan.js.map +1 -0
  247. package/dist/src/utils/artifact-renderer.d.ts +124 -0
  248. package/dist/src/utils/artifact-renderer.js +442 -0
  249. package/dist/src/utils/artifact-renderer.js.map +1 -0
  250. package/dist/src/utils/artifact-sources.d.ts +8 -0
  251. package/dist/src/utils/artifact-sources.js +10 -0
  252. package/dist/src/utils/artifact-sources.js.map +1 -0
  253. package/dist/src/utils/aw-home-mutation-lock.d.ts +10 -0
  254. package/dist/src/utils/aw-home-mutation-lock.js +55 -0
  255. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -0
  256. package/dist/src/utils/bundle-integrity.d.ts +3 -0
  257. package/dist/src/utils/bundle-integrity.js +88 -0
  258. package/dist/src/utils/bundle-integrity.js.map +1 -0
  259. package/dist/src/utils/bundle-layout.d.ts +4 -0
  260. package/dist/src/utils/bundle-layout.js +546 -0
  261. package/dist/src/utils/bundle-layout.js.map +1 -0
  262. package/dist/src/utils/catalog-digests.d.ts +8 -0
  263. package/dist/src/utils/catalog-digests.js +108 -0
  264. package/dist/src/utils/catalog-digests.js.map +1 -0
  265. package/dist/src/utils/catalog-manifest-v3.d.ts +2 -0
  266. package/dist/src/utils/catalog-manifest-v3.js +3 -0
  267. package/dist/src/utils/catalog-manifest-v3.js.map +1 -0
  268. package/dist/src/utils/catalog-manifest-v4.d.ts +5 -0
  269. package/dist/src/utils/catalog-manifest-v4.js +106 -0
  270. package/dist/src/utils/catalog-manifest-v4.js.map +1 -0
  271. package/dist/src/utils/catalog-public-error.d.ts +15 -0
  272. package/dist/src/utils/catalog-public-error.js +84 -0
  273. package/dist/src/utils/catalog-public-error.js.map +1 -0
  274. package/dist/src/utils/catalog-runtime-projection.d.ts +36 -0
  275. package/dist/src/utils/catalog-runtime-projection.js +172 -0
  276. package/dist/src/utils/catalog-runtime-projection.js.map +1 -0
  277. package/dist/src/utils/catalog-snapshot.d.ts +8 -0
  278. package/dist/src/utils/catalog-snapshot.js +12 -0
  279. package/dist/src/utils/catalog-snapshot.js.map +1 -0
  280. package/dist/src/utils/catalog-source-cache.d.ts +61 -0
  281. package/dist/src/utils/catalog-source-cache.js +276 -0
  282. package/dist/src/utils/catalog-source-cache.js.map +1 -0
  283. package/dist/src/utils/catalog-source-identity.d.ts +4 -0
  284. package/dist/src/utils/catalog-source-identity.js +118 -0
  285. package/dist/src/utils/catalog-source-identity.js.map +1 -0
  286. package/dist/src/utils/catalog-source-presentation.d.ts +1 -0
  287. package/dist/src/utils/catalog-source-presentation.js +32 -0
  288. package/dist/src/utils/catalog-source-presentation.js.map +1 -0
  289. package/dist/src/utils/catalog-source-references.d.ts +65 -0
  290. package/dist/src/utils/catalog-source-references.js +1418 -0
  291. package/dist/src/utils/catalog-source-references.js.map +1 -0
  292. package/dist/src/utils/catalog-sources.d.ts +39 -0
  293. package/dist/src/utils/catalog-sources.js +293 -0
  294. package/dist/src/utils/catalog-sources.js.map +1 -0
  295. package/dist/src/utils/codex-config.d.ts +124 -0
  296. package/dist/src/utils/codex-config.js +1011 -0
  297. package/dist/src/utils/codex-config.js.map +1 -0
  298. package/dist/src/utils/codex-project-surface.d.ts +3 -0
  299. package/dist/src/utils/codex-project-surface.js +49 -0
  300. package/dist/src/utils/codex-project-surface.js.map +1 -0
  301. package/dist/src/utils/codex-roles.d.ts +71 -0
  302. package/dist/src/utils/codex-roles.js +257 -0
  303. package/dist/src/utils/codex-roles.js.map +1 -0
  304. package/dist/src/utils/codex-skill-staging.d.ts +9 -0
  305. package/dist/src/utils/codex-skill-staging.js +8 -0
  306. package/dist/src/utils/codex-skill-staging.js.map +1 -0
  307. package/dist/src/utils/config-value.d.ts +3 -0
  308. package/dist/src/utils/config-value.js +23 -0
  309. package/dist/src/utils/config-value.js.map +1 -0
  310. package/dist/src/utils/dynamic-skill-tree.d.ts +32 -0
  311. package/dist/src/utils/dynamic-skill-tree.js +436 -0
  312. package/dist/src/utils/dynamic-skill-tree.js.map +1 -0
  313. package/dist/src/utils/file-rules.d.ts +1 -0
  314. package/dist/src/utils/file-rules.js +2 -0
  315. package/dist/src/utils/file-rules.js.map +1 -0
  316. package/dist/src/utils/git-catalog-provider.d.ts +7 -0
  317. package/dist/src/utils/git-catalog-provider.js +510 -0
  318. package/dist/src/utils/git-catalog-provider.js.map +1 -0
  319. package/dist/src/utils/hooks-contract.d.ts +1 -0
  320. package/dist/src/utils/hooks-contract.js +2 -0
  321. package/dist/src/utils/hooks-contract.js.map +1 -0
  322. package/dist/src/utils/json.d.ts +4 -0
  323. package/dist/src/utils/json.js +29 -0
  324. package/dist/src/utils/json.js.map +1 -0
  325. package/dist/src/utils/lifecycle-active-store.d.ts +175 -0
  326. package/dist/src/utils/lifecycle-active-store.js +1276 -0
  327. package/dist/src/utils/lifecycle-active-store.js.map +1 -0
  328. package/dist/src/utils/local-marketplace.d.ts +41 -0
  329. package/dist/src/utils/local-marketplace.js +317 -0
  330. package/dist/src/utils/local-marketplace.js.map +1 -0
  331. package/dist/src/utils/manifest.d.ts +14 -0
  332. package/dist/src/utils/manifest.js +36 -0
  333. package/dist/src/utils/manifest.js.map +1 -0
  334. package/dist/src/utils/marketplace.d.ts +3 -0
  335. package/dist/src/utils/marketplace.js +76 -0
  336. package/dist/src/utils/marketplace.js.map +1 -0
  337. package/dist/src/utils/multi-source-catalog.d.ts +72 -0
  338. package/dist/src/utils/multi-source-catalog.js +402 -0
  339. package/dist/src/utils/multi-source-catalog.js.map +1 -0
  340. package/dist/src/utils/native-cli.d.ts +75 -0
  341. package/dist/src/utils/native-cli.js +435 -0
  342. package/dist/src/utils/native-cli.js.map +1 -0
  343. package/dist/src/utils/orphan-marketplace-cleanup.d.ts +18 -0
  344. package/dist/src/utils/orphan-marketplace-cleanup.js +202 -0
  345. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -0
  346. package/dist/src/utils/ownership.d.ts +130 -0
  347. package/dist/src/utils/ownership.js +766 -0
  348. package/dist/src/utils/ownership.js.map +1 -0
  349. package/dist/src/utils/path-catalog-provider.d.ts +7 -0
  350. package/dist/src/utils/path-catalog-provider.js +87 -0
  351. package/dist/src/utils/path-catalog-provider.js.map +1 -0
  352. package/dist/src/utils/paths.d.ts +41 -0
  353. package/dist/src/utils/paths.js +138 -0
  354. package/dist/src/utils/paths.js.map +1 -0
  355. package/dist/src/utils/platform-entries.d.ts +1 -0
  356. package/dist/src/utils/platform-entries.js +2 -0
  357. package/dist/src/utils/platform-entries.js.map +1 -0
  358. package/dist/src/utils/platform-support.d.ts +1 -0
  359. package/dist/src/utils/platform-support.js +2 -0
  360. package/dist/src/utils/platform-support.js.map +1 -0
  361. package/dist/src/utils/plugin-authoring-capabilities.d.ts +23 -0
  362. package/dist/src/utils/plugin-authoring-capabilities.js +37 -0
  363. package/dist/src/utils/plugin-authoring-capabilities.js.map +1 -0
  364. package/dist/src/utils/plugin-authoring-capabilities.json +92 -0
  365. package/dist/src/utils/plugin-config-write.d.ts +107 -0
  366. package/dist/src/utils/plugin-config-write.js +565 -0
  367. package/dist/src/utils/plugin-config-write.js.map +1 -0
  368. package/dist/src/utils/plugin-config.d.ts +396 -0
  369. package/dist/src/utils/plugin-config.js +1898 -0
  370. package/dist/src/utils/plugin-config.js.map +1 -0
  371. package/dist/src/utils/plugin-dependencies.d.ts +12 -0
  372. package/dist/src/utils/plugin-dependencies.js +162 -0
  373. package/dist/src/utils/plugin-dependencies.js.map +1 -0
  374. package/dist/src/utils/plugin-release.d.ts +2 -0
  375. package/dist/src/utils/plugin-release.js +2 -0
  376. package/dist/src/utils/plugin-release.js.map +1 -0
  377. package/dist/src/utils/plugin-script-contract.d.ts +1 -0
  378. package/dist/src/utils/plugin-script-contract.js +2 -0
  379. package/dist/src/utils/plugin-script-contract.js.map +1 -0
  380. package/dist/src/utils/plugin-scripts.d.ts +172 -0
  381. package/dist/src/utils/plugin-scripts.js +585 -0
  382. package/dist/src/utils/plugin-scripts.js.map +1 -0
  383. package/dist/src/utils/process-lock.d.ts +47 -0
  384. package/dist/src/utils/process-lock.js +532 -0
  385. package/dist/src/utils/process-lock.js.map +1 -0
  386. package/dist/src/utils/process-tree.d.ts +2 -0
  387. package/dist/src/utils/process-tree.js +2 -0
  388. package/dist/src/utils/process-tree.js.map +1 -0
  389. package/dist/src/utils/project-boundary.d.ts +21 -0
  390. package/dist/src/utils/project-boundary.js +95 -0
  391. package/dist/src/utils/project-boundary.js.map +1 -0
  392. package/dist/src/utils/rendered-contract.d.ts +8 -0
  393. package/dist/src/utils/rendered-contract.js +134 -0
  394. package/dist/src/utils/rendered-contract.js.map +1 -0
  395. package/dist/src/utils/runtime-skill-closure.d.ts +13 -0
  396. package/dist/src/utils/runtime-skill-closure.js +863 -0
  397. package/dist/src/utils/runtime-skill-closure.js.map +1 -0
  398. package/dist/src/utils/skill-authoring.d.ts +1 -0
  399. package/dist/src/utils/skill-authoring.js +2 -0
  400. package/dist/src/utils/skill-authoring.js.map +1 -0
  401. package/dist/src/utils/skill-frontmatter-capabilities.d.ts +201 -0
  402. package/dist/src/utils/skill-frontmatter-capabilities.js +5 -0
  403. package/dist/src/utils/skill-frontmatter-capabilities.js.map +1 -0
  404. package/dist/src/utils/skill-frontmatter-capabilities.json +200 -0
  405. package/dist/src/utils/skill-validation.d.ts +37 -0
  406. package/dist/src/utils/skill-validation.js +326 -0
  407. package/dist/src/utils/skill-validation.js.map +1 -0
  408. package/dist/src/utils/slash-commands.d.ts +1 -0
  409. package/dist/src/utils/slash-commands.js +2 -0
  410. package/dist/src/utils/slash-commands.js.map +1 -0
  411. package/dist/src/utils/state-paths.d.ts +13 -0
  412. package/dist/src/utils/state-paths.js +129 -0
  413. package/dist/src/utils/state-paths.js.map +1 -0
  414. package/dist/src/utils/target-eligibility.d.ts +7 -0
  415. package/dist/src/utils/target-eligibility.js +26 -0
  416. package/dist/src/utils/target-eligibility.js.map +1 -0
  417. package/dist/src/utils/target-order.d.ts +7 -0
  418. package/dist/src/utils/target-order.js +10 -0
  419. package/dist/src/utils/target-order.js.map +1 -0
  420. package/dist/src/utils/template-engine.d.ts +1 -0
  421. package/dist/src/utils/template-engine.js +2 -0
  422. package/dist/src/utils/template-engine.js.map +1 -0
  423. package/dist/src/utils/test-path-fence.d.ts +12 -0
  424. package/dist/src/utils/test-path-fence.js +31 -0
  425. package/dist/src/utils/test-path-fence.js.map +1 -0
  426. package/dist/vitest.config.d.ts +2 -0
  427. package/dist/vitest.config.js +16 -0
  428. package/dist/vitest.config.js.map +1 -0
  429. package/package.json +61 -0
@@ -0,0 +1,674 @@
1
+ import { spawn } from 'node:child_process';
2
+ import crypto from 'node:crypto';
3
+ import { fileURLToPath } from 'node:url';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import fs from 'fs-extra';
7
+ import { buildLifecycleSpawnEnv, bundleLocalPlugin, collectSensitivePluginConfigValues, coercePluginConfigValue, discoverPlugins, formatMarketplaceProductsForError, formatSupportedPlatforms, prepareLocalPluginBundleSource, readPluginManifest, redactPluginScriptOutput, resolveAwHome, resolveCliPackageRoot, resolveEffectivePluginConfig, resolvePluginConfigStorePath, resolveSupportedPlatforms, scanNodeImportContract, } from './plugin-staging.js';
8
+ import { createCatalogRuntimeImportResolver, } from '../src/utils/catalog-runtime-projection.js';
9
+ const NODE_RUNTIME_EXTENSIONS = new Set(['.js', '.mjs', '.cjs']);
10
+ const REPO_ROOT_ENV = 'AW_PLUGIN_TEST_REPO_ROOT';
11
+ const TEST_PLATFORM_ORDER = ['codex', 'claude'];
12
+ function resolveRepoRoot() {
13
+ return path.resolve(resolveCliPackageRoot(), '..', '..');
14
+ }
15
+ function print(write, text) {
16
+ write(`${text}\n`);
17
+ }
18
+ function parseArgs(args) {
19
+ const parsed = {
20
+ all: false,
21
+ scope: 'user',
22
+ platform: 'both',
23
+ };
24
+ const positional = [];
25
+ for (let index = 0; index < args.length; index += 1) {
26
+ const arg = args[index];
27
+ if (arg === '--') {
28
+ continue;
29
+ }
30
+ else if (arg === '--all') {
31
+ parsed.all = true;
32
+ }
33
+ else if (arg === '--scope') {
34
+ const value = args[++index];
35
+ if (value !== 'user' && value !== 'project') {
36
+ throw new Error('--scope must be one of: user, project.');
37
+ }
38
+ parsed.scope = value;
39
+ }
40
+ else if (arg === '--platform') {
41
+ const value = args[++index];
42
+ if (value !== 'codex' && value !== 'claude' && value !== 'both') {
43
+ throw new Error('--platform must be one of: codex, claude, both.');
44
+ }
45
+ parsed.platform = value;
46
+ }
47
+ else if (arg === '--test-name') {
48
+ parsed.testName = args[++index];
49
+ if (!parsed.testName) {
50
+ throw new Error('--test-name requires a pattern.');
51
+ }
52
+ }
53
+ else if (arg.startsWith('-')) {
54
+ throw new Error(`Unknown option "${arg}".`);
55
+ }
56
+ else {
57
+ positional.push(arg);
58
+ }
59
+ }
60
+ if (parsed.all && positional.length > 0) {
61
+ throw new Error('Use either <plugin> or --all, not both.');
62
+ }
63
+ if (!parsed.all && positional.length !== 1) {
64
+ throw new Error('Usage: pnpm plugin:test <plugin> | --all [--scope user|project] [--platform codex|claude|both] [--test-name <pattern>].');
65
+ }
66
+ if (parsed.all && positional.length !== 0) {
67
+ throw new Error('Use either <plugin> or --all, not both.');
68
+ }
69
+ parsed.pluginName = positional[0];
70
+ return parsed;
71
+ }
72
+ function stripDotSlash(value) {
73
+ return value.startsWith('./') ? value.slice(2) : value;
74
+ }
75
+ function normalizeRelativePath(value) {
76
+ return stripDotSlash(value).split(path.sep).join('/');
77
+ }
78
+ function escapeRegExp(value) {
79
+ return value.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
80
+ }
81
+ function globToRegExp(glob) {
82
+ const normalized = normalizeRelativePath(glob);
83
+ let output = '^';
84
+ for (let index = 0; index < normalized.length; index += 1) {
85
+ const char = normalized[index];
86
+ const next = normalized[index + 1];
87
+ if (char === '*' && next === '*') {
88
+ const after = normalized[index + 2];
89
+ if (after === '/') {
90
+ output += '(?:.*\\/)?';
91
+ index += 2;
92
+ }
93
+ else {
94
+ output += '.*';
95
+ index += 1;
96
+ }
97
+ }
98
+ else if (char === '*') {
99
+ output += '[^/]*';
100
+ }
101
+ else {
102
+ output += escapeRegExp(char);
103
+ }
104
+ }
105
+ output += '$';
106
+ return new RegExp(output);
107
+ }
108
+ async function listFiles(rootDir) {
109
+ const entries = await fs.readdir(rootDir, { withFileTypes: true }).catch(() => []);
110
+ const files = [];
111
+ for (const entry of entries) {
112
+ if (entry.name === 'node_modules' || entry.name === '.git') {
113
+ continue;
114
+ }
115
+ const entryPath = path.join(rootDir, entry.name);
116
+ if (entry.isDirectory()) {
117
+ const nested = await listFiles(entryPath);
118
+ files.push(...nested.map((file) => path.join(entry.name, file).split(path.sep).join('/')));
119
+ }
120
+ else {
121
+ files.push(entry.name);
122
+ }
123
+ }
124
+ return files.sort();
125
+ }
126
+ async function matchTestEntries(rootDir, globs) {
127
+ if (!globs || globs.length === 0) {
128
+ return [];
129
+ }
130
+ const files = await listFiles(rootDir);
131
+ const patterns = globs.map(globToRegExp);
132
+ return files.filter((file) => patterns.some((pattern) => pattern.test(file))).sort();
133
+ }
134
+ async function resolvePluginRuntimeSourceSet(repoRoot, initialPlugins) {
135
+ const plugins = new Map(initialPlugins.map((plugin) => [plugin.manifest.name, plugin]));
136
+ const queue = [...initialPlugins];
137
+ while (queue.length > 0) {
138
+ const plugin = queue.shift();
139
+ if (!plugin)
140
+ continue;
141
+ const references = [
142
+ ...(plugin.manifest.buildConfig?.buildImports ?? []),
143
+ ...(plugin.manifest.buildConfig?.skillRuntimeFiles ?? [])
144
+ .map((entry) => entry.import)
145
+ .filter((entry) => Boolean(entry)),
146
+ ];
147
+ for (const reference of references) {
148
+ if (reference.plugin.startsWith('@aw/') || plugins.has(reference.plugin))
149
+ continue;
150
+ const provider = await readPluginManifest(path.join(repoRoot, 'plugins', reference.plugin));
151
+ plugins.set(provider.manifest.name, provider);
152
+ queue.push(provider);
153
+ }
154
+ }
155
+ return [...plugins.values()];
156
+ }
157
+ async function stagePluginTestBundleSource(plugin, runtimeResolver) {
158
+ const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aw-plugin-test-bundle-'));
159
+ const prepared = await prepareLocalPluginBundleSource(plugin, {
160
+ buildMode: 'staging',
161
+ runtimeResolver,
162
+ });
163
+ try {
164
+ return {
165
+ pluginName: prepared.plugin.manifest.name,
166
+ sourceRoot: plugin.rootDir,
167
+ baselineRoot: prepared.plugin.rootDir,
168
+ bundleRoot: path.join(tempRoot, 'bundle'),
169
+ stagedPlugin: prepared.plugin,
170
+ manifest: prepared.plugin.manifest,
171
+ runtimeContext: prepared.runtimeContext,
172
+ cleanup: async () => {
173
+ await prepared.cleanup();
174
+ await fs.remove(tempRoot);
175
+ },
176
+ };
177
+ }
178
+ catch (error) {
179
+ await prepared.cleanup();
180
+ await fs.remove(tempRoot);
181
+ throw error;
182
+ }
183
+ }
184
+ async function buildPreparedPluginTestBundle(staged) {
185
+ const result = await bundleLocalPlugin(staged.stagedPlugin, staged.bundleRoot, {
186
+ buildMode: 'prepared',
187
+ preparedRuntimeContext: staged.runtimeContext,
188
+ });
189
+ return {
190
+ pluginName: result.plugin.manifest.name,
191
+ sourceRoot: staged.sourceRoot,
192
+ baselineRoot: staged.baselineRoot,
193
+ bundleRoot: staged.bundleRoot,
194
+ manifest: result.plugin.manifest,
195
+ runtimeContext: staged.runtimeContext,
196
+ cleanup: staged.cleanup,
197
+ };
198
+ }
199
+ function platformSelectionError(options) {
200
+ const supportedPlatforms = resolveSupportedPlatforms(options.manifest);
201
+ return new Error(`Cannot run plugin tests for "${options.pluginName}" with --platform=${options.selection}: staging manifest ${formatMarketplaceProductsForError(options.manifest)} resolves to supported platforms=${formatSupportedPlatforms(supportedPlatforms)}.`);
202
+ }
203
+ function resolveSelectedPlatforms(manifest, selection, pluginName) {
204
+ const supportedPlatforms = resolveSupportedPlatforms(manifest);
205
+ if (selection === 'both') {
206
+ const platforms = TEST_PLATFORM_ORDER.filter((platform) => supportedPlatforms.has(platform));
207
+ if (platforms.length === 0) {
208
+ throw platformSelectionError({ pluginName, selection, manifest });
209
+ }
210
+ return platforms;
211
+ }
212
+ if (!supportedPlatforms.has(selection)) {
213
+ throw platformSelectionError({ pluginName, selection, manifest });
214
+ }
215
+ return [selection];
216
+ }
217
+ function isExplicitSinglePlatformSelection(selection) {
218
+ return selection === 'codex' || selection === 'claude';
219
+ }
220
+ async function copyTestsIntoBundle(options) {
221
+ const entries = options.entries.map((entry) => normalizeRelativePath(entry));
222
+ const baselineFiles = await listFiles(options.baselineRoot);
223
+ const bundleFiles = await listFiles(options.bundleRoot);
224
+ const baselineFileSet = new Set(baselineFiles);
225
+ const bundleFileSet = new Set(bundleFiles);
226
+ for (const entry of entries) {
227
+ if (await fs.pathExists(path.join(options.bundleRoot, entry))) {
228
+ throw new Error(`Test entry "${entry}" conflicts with a runtime bundle file.`);
229
+ }
230
+ }
231
+ const filePaths = [...new Set([...baselineFiles, ...bundleFiles])];
232
+ const scanFiles = {};
233
+ await Promise.all(filePaths
234
+ .filter((file) => (NODE_RUNTIME_EXTENSIONS.has(path.posix.extname(file).toLowerCase())
235
+ || path.posix.basename(file) === 'package.json'))
236
+ .map(async (file) => {
237
+ const root = bundleFileSet.has(file) ? options.bundleRoot : options.baselineRoot;
238
+ scanFiles[file] = await fs.readFile(path.join(root, file), 'utf8');
239
+ }));
240
+ const { dependencies, devDependencies } = await readPackageDependencyNames(options.bundleRoot, options.manifest);
241
+ const scan = scanNodeImportContract({
242
+ files: scanFiles,
243
+ filePaths,
244
+ entryFiles: entries,
245
+ dependencies,
246
+ devDependencies,
247
+ allowDevDependencies: Boolean(options.manifest.scripts?.node?.packageRoot),
248
+ });
249
+ if (scan.errors.length > 0) {
250
+ throw new Error(`Invalid plugin test imports:\n${scan.errors.join('\n')}`);
251
+ }
252
+ for (const file of scan.files) {
253
+ if (bundleFileSet.has(file)) {
254
+ continue;
255
+ }
256
+ if (!baselineFileSet.has(file)) {
257
+ throw new Error(`Missing test file "${file}".`);
258
+ }
259
+ const targetPath = path.join(options.bundleRoot, file);
260
+ await fs.ensureDir(path.dirname(targetPath));
261
+ await fs.copyFile(path.join(options.baselineRoot, file), targetPath);
262
+ }
263
+ return entries;
264
+ }
265
+ async function readPackageDependencyNames(bundleRoot, manifest) {
266
+ const packageRoot = manifest.scripts?.node?.packageRoot;
267
+ if (!packageRoot) {
268
+ return { dependencies: [], devDependencies: [] };
269
+ }
270
+ const packageJson = await fs.readJson(path.join(bundleRoot, stripDotSlash(packageRoot), 'package.json'));
271
+ const dependencies = packageJson.dependencies && typeof packageJson.dependencies === 'object'
272
+ ? Object.keys(packageJson.dependencies)
273
+ : [];
274
+ const devDependencies = packageJson.devDependencies && typeof packageJson.devDependencies === 'object'
275
+ ? Object.keys(packageJson.devDependencies)
276
+ : [];
277
+ return { dependencies, devDependencies };
278
+ }
279
+ async function copyTestPackageNodeModules(options) {
280
+ const packageRoot = options.manifest.scripts?.node?.packageRoot;
281
+ if (!packageRoot) {
282
+ return;
283
+ }
284
+ const sourcePackageRoot = path.join(options.baselineRoot, stripDotSlash(packageRoot));
285
+ const targetPackageRoot = path.join(options.bundleRoot, stripDotSlash(packageRoot));
286
+ const sourceNodeModules = path.join(sourcePackageRoot, 'node_modules');
287
+ if (!(await fs.pathExists(sourceNodeModules))) {
288
+ return;
289
+ }
290
+ const targetNodeModules = path.join(targetPackageRoot, 'node_modules');
291
+ await fs.remove(targetNodeModules);
292
+ await fs.copy(sourceNodeModules, targetNodeModules, { dereference: false });
293
+ }
294
+ async function resolveConfigDefaults(options) {
295
+ const values = {};
296
+ const schema = options.manifest.config?.schema ?? {};
297
+ for (const [key, field] of Object.entries(schema)) {
298
+ const typedField = field;
299
+ if (typedField.default === undefined) {
300
+ continue;
301
+ }
302
+ values[key] = await coercePluginConfigValue({
303
+ key,
304
+ field: typedField,
305
+ value: typedField.default,
306
+ projectRoot: options.cwd,
307
+ });
308
+ }
309
+ return values;
310
+ }
311
+ async function writeTestContext(options) {
312
+ const sourceId = 'plugin-test';
313
+ const sourceIdentity = `sha256:${crypto.createHash('sha256')
314
+ .update(`${sourceId}/${options.manifest.name}`, 'utf8')
315
+ .digest('hex')}`;
316
+ const configStores = {
317
+ user: resolvePluginConfigStorePath({
318
+ sourceId,
319
+ pluginName: options.manifest.name,
320
+ scope: 'user',
321
+ cwd: options.projectRoot,
322
+ env: options.env,
323
+ }),
324
+ project: resolvePluginConfigStorePath({
325
+ sourceId,
326
+ pluginName: options.manifest.name,
327
+ scope: 'project',
328
+ cwd: options.projectRoot,
329
+ env: options.env,
330
+ }),
331
+ projectLocal: resolvePluginConfigStorePath({
332
+ sourceId,
333
+ pluginName: options.manifest.name,
334
+ scope: 'project',
335
+ cwd: options.projectRoot,
336
+ env: options.env,
337
+ projectLayer: 'local',
338
+ }),
339
+ };
340
+ if (options.manifest.config?.schema) {
341
+ await Promise.all(Object.values(configStores).map((storePath) => fs.outputJson(storePath, {
342
+ schemaVersion: 2,
343
+ sourceId,
344
+ sourceIdentity,
345
+ pluginName: options.manifest.name,
346
+ values: {},
347
+ }, { spaces: 2 })));
348
+ }
349
+ const effective = options.manifest.config?.schema
350
+ ? await resolveEffectivePluginConfig({
351
+ sourceId,
352
+ sourceIdentity,
353
+ manifest: options.manifest,
354
+ cwd: options.projectRoot,
355
+ env: options.env,
356
+ }).catch(async () => ({
357
+ values: await resolveConfigDefaults({
358
+ manifest: options.manifest,
359
+ cwd: options.projectRoot,
360
+ }),
361
+ sources: Object.fromEntries(Object.keys(options.manifest.config?.schema ?? {}).map((key) => [key, 'default'])),
362
+ schema: options.manifest.config?.schema,
363
+ issues: [],
364
+ }))
365
+ : { values: {}, sources: {}, schema: undefined, issues: [] };
366
+ const contextPath = path.join(options.tempDir, 'context.json');
367
+ await fs.writeJson(contextPath, {
368
+ version: 1,
369
+ event: 'test',
370
+ plugin: {
371
+ name: options.manifest.name,
372
+ version: options.manifest.version,
373
+ rootDir: options.bundleRoot,
374
+ sourceId,
375
+ sourceIdentity,
376
+ pluginId: `${sourceId}/${options.manifest.name}`,
377
+ },
378
+ sourceRoot: options.sourceRoot,
379
+ platform: options.platform,
380
+ scope: options.scope,
381
+ cwd: options.projectRoot,
382
+ paths: {
383
+ awHome: resolveAwHome(options.env),
384
+ configStores,
385
+ },
386
+ config: {
387
+ values: effective.values,
388
+ sources: effective.sources,
389
+ schema: effective.schema,
390
+ issues: effective.issues,
391
+ },
392
+ script: {
393
+ source: 'plugin-test',
394
+ runner: 'node',
395
+ path: null,
396
+ },
397
+ artifacts: [],
398
+ }, { spaces: 2 });
399
+ try {
400
+ await fs.chmod(contextPath, 0o600);
401
+ }
402
+ catch {
403
+ // Best effort.
404
+ }
405
+ return {
406
+ contextPath,
407
+ sensitiveValues: collectSensitivePluginConfigValues(options.manifest, effective.values),
408
+ };
409
+ }
410
+ function runNodeTest(options) {
411
+ return new Promise((resolve, reject) => {
412
+ const args = ['--test'];
413
+ if (options.testName) {
414
+ args.push('--test-name-pattern', options.testName);
415
+ }
416
+ args.push(...options.testFiles);
417
+ const child = spawn(process.execPath, args, {
418
+ cwd: options.cwd,
419
+ env: options.env,
420
+ stdio: ['ignore', 'pipe', 'pipe'],
421
+ });
422
+ let stdout = '';
423
+ let stderr = '';
424
+ child.stdout.setEncoding('utf8');
425
+ child.stderr.setEncoding('utf8');
426
+ child.stdout.on('data', (chunk) => {
427
+ stdout += chunk;
428
+ });
429
+ child.stderr.on('data', (chunk) => {
430
+ stderr += chunk;
431
+ });
432
+ child.on('error', reject);
433
+ child.on('close', (exitCode) => {
434
+ resolve({ exitCode, stdout, stderr });
435
+ });
436
+ });
437
+ }
438
+ async function runPreparedPluginTests(options) {
439
+ const entries = await matchTestEntries(options.prepared.baselineRoot, options.prepared.manifest.scripts?.tests?.node);
440
+ if (entries.length === 0) {
441
+ print(options.stdout, `${options.prepared.pluginName} / ${options.platform}: skipped (no tests matched)`);
442
+ return 0;
443
+ }
444
+ const runRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aw-plugin-test-run-'));
445
+ try {
446
+ const bundleRoot = path.join(runRoot, 'bundle');
447
+ const projectRoot = path.join(runRoot, 'project');
448
+ const awHome = path.join(runRoot, 'aw-home');
449
+ const tempDir = path.join(runRoot, 'tmp');
450
+ await fs.copy(options.prepared.bundleRoot, bundleRoot);
451
+ await copyTestPackageNodeModules({
452
+ baselineRoot: options.prepared.baselineRoot,
453
+ bundleRoot,
454
+ manifest: options.prepared.manifest,
455
+ });
456
+ await fs.ensureDir(projectRoot);
457
+ await fs.ensureDir(awHome);
458
+ await fs.ensureDir(tempDir);
459
+ await fs.ensureDir(path.join(tempDir, 'home'));
460
+ await fs.ensureDir(path.join(tempDir, 'tmp'));
461
+ const canonicalProjectRoot = await fs.realpath(projectRoot);
462
+ const copiedEntries = await copyTestsIntoBundle({
463
+ baselineRoot: options.prepared.baselineRoot,
464
+ bundleRoot,
465
+ entries,
466
+ manifest: options.prepared.manifest,
467
+ });
468
+ const env = {
469
+ ...options.env,
470
+ AW_HOME: awHome,
471
+ AW_CODEX_HOME: path.join(runRoot, 'codex-home'),
472
+ AW_CLAUDE_HOME: path.join(runRoot, 'claude-home'),
473
+ NODE_PATH: '',
474
+ };
475
+ const writtenContext = await writeTestContext({
476
+ bundleRoot,
477
+ sourceRoot: options.prepared.sourceRoot,
478
+ manifest: options.prepared.manifest,
479
+ platform: options.platform,
480
+ scope: options.scope,
481
+ projectRoot: canonicalProjectRoot,
482
+ env,
483
+ tempDir,
484
+ });
485
+ const spawnEnv = buildLifecycleSpawnEnv({
486
+ commandEnv: env,
487
+ contextPath: writtenContext.contextPath,
488
+ tempDir,
489
+ plugin: {
490
+ name: options.prepared.manifest.name,
491
+ version: options.prepared.manifest.version,
492
+ },
493
+ event: 'test',
494
+ platform: options.platform,
495
+ scope: options.scope,
496
+ bundleRoot,
497
+ });
498
+ spawnEnv.NODE_PATH = '';
499
+ const testFiles = copiedEntries.map((entry) => path.join(bundleRoot, entry));
500
+ const result = await runNodeTest({
501
+ testFiles,
502
+ cwd: canonicalProjectRoot,
503
+ env: spawnEnv,
504
+ testName: options.testName,
505
+ });
506
+ const stdout = redactPluginScriptOutput(result.stdout, writtenContext.sensitiveValues);
507
+ const stderr = redactPluginScriptOutput(result.stderr, writtenContext.sensitiveValues);
508
+ if (stdout.trim()) {
509
+ options.stdout(stdout);
510
+ }
511
+ if (stderr.trim()) {
512
+ options.stderr(stderr);
513
+ }
514
+ if (result.exitCode === 0) {
515
+ print(options.stdout, `${options.prepared.pluginName} / ${options.platform}: passed (${entries.length} test file${entries.length === 1 ? '' : 's'})`);
516
+ return 0;
517
+ }
518
+ print(options.stderr, `${options.prepared.pluginName} / ${options.platform}: failed`);
519
+ return result.exitCode ?? 1;
520
+ }
521
+ finally {
522
+ await fs.remove(runRoot);
523
+ }
524
+ }
525
+ async function preparePluginSelection(options) {
526
+ const staged = await stagePluginTestBundleSource(options.plugin, options.runtimeResolver);
527
+ try {
528
+ const platforms = resolveSelectedPlatforms(staged.manifest, options.parsed.platform, staged.pluginName);
529
+ return {
530
+ ...staged,
531
+ platforms,
532
+ };
533
+ }
534
+ catch (error) {
535
+ await staged.cleanup();
536
+ throw error;
537
+ }
538
+ }
539
+ async function runPreparedPluginSelection(options) {
540
+ let cleaned = false;
541
+ const cleanup = async () => {
542
+ if (cleaned) {
543
+ return;
544
+ }
545
+ cleaned = true;
546
+ await options.selection.cleanup();
547
+ };
548
+ try {
549
+ const prepared = await buildPreparedPluginTestBundle(options.selection);
550
+ try {
551
+ let exitCode = 0;
552
+ for (const platform of options.selection.platforms) {
553
+ const platformExitCode = await runPreparedPluginTests({
554
+ prepared,
555
+ scope: options.parsed.scope,
556
+ platform,
557
+ testName: options.parsed.testName,
558
+ env: options.env,
559
+ stdout: options.stdout,
560
+ stderr: options.stderr,
561
+ });
562
+ if (platformExitCode !== 0) {
563
+ exitCode = platformExitCode;
564
+ }
565
+ }
566
+ return exitCode;
567
+ }
568
+ finally {
569
+ await cleanup();
570
+ }
571
+ }
572
+ catch (error) {
573
+ await cleanup();
574
+ throw error;
575
+ }
576
+ }
577
+ export async function runPluginScriptTests(args, options = {}) {
578
+ const env = options.env ?? process.env;
579
+ const stdout = options.stdout ?? ((text) => process.stdout.write(text));
580
+ const stderr = options.stderr ?? ((text) => process.stderr.write(text));
581
+ let parsed;
582
+ try {
583
+ parsed = parseArgs(args);
584
+ }
585
+ catch (error) {
586
+ print(stderr, error instanceof Error ? error.message : String(error));
587
+ return 1;
588
+ }
589
+ const configuredRepoRoot = options.repoRoot ?? env[REPO_ROOT_ENV];
590
+ const repoRoot = configuredRepoRoot ? path.resolve(configuredRepoRoot) : resolveRepoRoot();
591
+ if (parsed.all) {
592
+ const plugins = await discoverPlugins(repoRoot);
593
+ const runtimeResolver = createCatalogRuntimeImportResolver(plugins);
594
+ if (isExplicitSinglePlatformSelection(parsed.platform)) {
595
+ const preparedSelections = [];
596
+ const failures = [];
597
+ for (const plugin of plugins) {
598
+ try {
599
+ preparedSelections.push(await preparePluginSelection({ plugin, parsed, runtimeResolver }));
600
+ }
601
+ catch (error) {
602
+ failures.push(`${plugin.manifest.name}: ${error instanceof Error ? error.message : String(error)}`);
603
+ }
604
+ }
605
+ if (failures.length > 0) {
606
+ await Promise.all(preparedSelections.map(async (selection) => selection.cleanup()));
607
+ failures.forEach((failure) => print(stderr, failure));
608
+ return 1;
609
+ }
610
+ let exitCode = 0;
611
+ for (const selection of preparedSelections) {
612
+ try {
613
+ const pluginExitCode = await runPreparedPluginSelection({
614
+ selection,
615
+ parsed,
616
+ env,
617
+ stdout,
618
+ stderr,
619
+ });
620
+ if (pluginExitCode !== 0) {
621
+ exitCode = pluginExitCode;
622
+ }
623
+ }
624
+ catch (error) {
625
+ print(stderr, `${selection.pluginName}: ${error instanceof Error ? error.message : String(error)}`);
626
+ exitCode = 1;
627
+ }
628
+ }
629
+ return exitCode;
630
+ }
631
+ let exitCode = 0;
632
+ for (const plugin of plugins) {
633
+ try {
634
+ const selection = await preparePluginSelection({ plugin, parsed, runtimeResolver });
635
+ const pluginExitCode = await runPreparedPluginSelection({
636
+ selection,
637
+ parsed,
638
+ env,
639
+ stdout,
640
+ stderr,
641
+ });
642
+ if (pluginExitCode !== 0) {
643
+ exitCode = pluginExitCode;
644
+ }
645
+ }
646
+ catch (error) {
647
+ print(stderr, `${plugin.manifest.name}: ${error instanceof Error ? error.message : String(error)}`);
648
+ exitCode = 1;
649
+ }
650
+ }
651
+ return exitCode;
652
+ }
653
+ try {
654
+ const plugin = await readPluginManifest(path.join(repoRoot, 'plugins', parsed.pluginName));
655
+ const sourceSet = await resolvePluginRuntimeSourceSet(repoRoot, [plugin]);
656
+ const runtimeResolver = createCatalogRuntimeImportResolver(sourceSet);
657
+ const selection = await preparePluginSelection({ plugin, parsed, runtimeResolver });
658
+ return await runPreparedPluginSelection({ selection, parsed, env, stdout, stderr });
659
+ }
660
+ catch (error) {
661
+ print(stderr, error instanceof Error ? error.message : String(error));
662
+ return 1;
663
+ }
664
+ }
665
+ const currentEntryPath = fileURLToPath(import.meta.url);
666
+ if (process.argv[1] && path.resolve(process.argv[1]) === currentEntryPath) {
667
+ runPluginScriptTests(process.argv.slice(2)).then((exitCode) => {
668
+ process.exitCode = exitCode;
669
+ }).catch((error) => {
670
+ console.error(error instanceof Error ? error.message : String(error));
671
+ process.exitCode = 1;
672
+ });
673
+ }
674
+ //# sourceMappingURL=test-plugin-scripts.js.map