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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/dist/authoring/assets/aw-config.mjs +100 -501
  2. package/dist/authoring/assets/aw-config.mjs.map +1 -1
  3. package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
  4. package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
  5. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
  6. package/dist/authoring/scripts/add-skill.mjs +4 -4
  7. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  8. package/dist/authoring/scripts/init-plugin.mjs +67 -97
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  10. package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
  11. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
  12. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
  13. package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
  14. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  15. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -90
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -120
  17. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  18. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  19. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  20. package/dist/authoring/scripts/remove-plugin.mjs +3 -2
  21. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
  22. package/dist/authoring/scripts/validate-plugin.mjs +346 -1131
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  25. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  26. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  27. package/dist/scripts/bundle-plugins.d.ts +1 -0
  28. package/dist/scripts/bundle-plugins.js +20 -5
  29. package/dist/scripts/bundle-plugins.js.map +1 -1
  30. package/dist/scripts/plugin-staging.d.ts +7 -9
  31. package/dist/scripts/plugin-staging.js +18 -29
  32. package/dist/scripts/plugin-staging.js.map +1 -1
  33. package/dist/scripts/test-plugin-scripts.d.ts +2 -0
  34. package/dist/scripts/test-plugin-scripts.js +47 -76
  35. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  36. package/dist/scripts/test-workers.d.mts +24 -0
  37. package/dist/scripts/test-workers.mjs +59 -0
  38. package/dist/scripts/test-workers.mjs.map +1 -0
  39. package/dist/src/adapters/helpers.js +2 -2
  40. package/dist/src/adapters/helpers.js.map +1 -1
  41. package/dist/src/authoring/workspace-commands.d.ts +17 -1
  42. package/dist/src/authoring/workspace-commands.js +21 -4
  43. package/dist/src/authoring/workspace-commands.js.map +1 -1
  44. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  45. package/dist/src/commands/aw-capabilities.js +264 -0
  46. package/dist/src/commands/aw-capabilities.js.map +1 -0
  47. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  48. package/dist/src/commands/catalog-dev-source.js +655 -0
  49. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  50. package/dist/src/commands/catalog-generation.d.ts +21 -0
  51. package/dist/src/commands/catalog-generation.js +9 -0
  52. package/dist/src/commands/catalog-generation.js.map +1 -0
  53. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  54. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  55. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  56. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  57. package/dist/src/commands/catalog-publication-journal.js +292 -0
  58. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  59. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  60. package/dist/src/commands/catalog-publication-target.js +95 -0
  61. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  62. package/dist/src/commands/catalog-publish.d.ts +73 -15
  63. package/dist/src/commands/catalog-publish.js +701 -212
  64. package/dist/src/commands/catalog-publish.js.map +1 -1
  65. package/dist/src/commands/catalog-source.d.ts +60 -22
  66. package/dist/src/commands/catalog-source.js +311 -91
  67. package/dist/src/commands/catalog-source.js.map +1 -1
  68. package/dist/src/commands/catalog-status.d.ts +18 -22
  69. package/dist/src/commands/catalog-status.js +81 -115
  70. package/dist/src/commands/catalog-status.js.map +1 -1
  71. package/dist/src/commands/catalog-store.d.ts +104 -0
  72. package/dist/src/commands/catalog-store.js +685 -0
  73. package/dist/src/commands/catalog-store.js.map +1 -0
  74. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  75. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  76. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  77. package/dist/src/commands/console.js +28 -17
  78. package/dist/src/commands/console.js.map +1 -1
  79. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  80. package/dist/src/commands/dependency-operation-plan.js +289 -7
  81. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  82. package/dist/src/commands/init.d.ts +5 -11
  83. package/dist/src/commands/init.js +30 -51
  84. package/dist/src/commands/init.js.map +1 -1
  85. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  86. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  87. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  88. package/dist/src/commands/operation-plan.d.ts +146 -0
  89. package/dist/src/commands/operation-plan.js +71 -0
  90. package/dist/src/commands/operation-plan.js.map +1 -0
  91. package/dist/src/commands/operation-planner.d.ts +46 -0
  92. package/dist/src/commands/operation-planner.js +141 -0
  93. package/dist/src/commands/operation-planner.js.map +1 -0
  94. package/dist/src/commands/options.d.ts +9 -7
  95. package/dist/src/commands/options.js +83 -21
  96. package/dist/src/commands/options.js.map +1 -1
  97. package/dist/src/commands/plugin-capabilities.js +23 -3
  98. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  99. package/dist/src/commands/rebuild-command.d.ts +77 -31
  100. package/dist/src/commands/rebuild-command.js +4862 -729
  101. package/dist/src/commands/rebuild-command.js.map +1 -1
  102. package/dist/src/commands/rebuild-integration.d.ts +131 -21
  103. package/dist/src/commands/rebuild-integration.js +2866 -1339
  104. package/dist/src/commands/rebuild-integration.js.map +1 -1
  105. package/dist/src/commands/rebuild-operations.d.ts +58 -30
  106. package/dist/src/commands/rebuild-operations.js +260 -319
  107. package/dist/src/commands/rebuild-operations.js.map +1 -1
  108. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  109. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  110. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  111. package/dist/src/commands/review-inspection.d.ts +228 -0
  112. package/dist/src/commands/review-inspection.js +1341 -0
  113. package/dist/src/commands/review-inspection.js.map +1 -0
  114. package/dist/src/commands/review-preparation.d.ts +49 -0
  115. package/dist/src/commands/review-preparation.js +427 -0
  116. package/dist/src/commands/review-preparation.js.map +1 -0
  117. package/dist/src/commands/runtime.d.ts +1 -5
  118. package/dist/src/commands/runtime.js +24 -50
  119. package/dist/src/commands/runtime.js.map +1 -1
  120. package/dist/src/commands/skill-eval.d.ts +39 -0
  121. package/dist/src/commands/skill-eval.js +400 -0
  122. package/dist/src/commands/skill-eval.js.map +1 -0
  123. package/dist/src/commands/status-v6.d.ts +279 -0
  124. package/dist/src/commands/status-v6.js +2787 -0
  125. package/dist/src/commands/status-v6.js.map +1 -0
  126. package/dist/src/commands/sync-command.d.ts +40 -0
  127. package/dist/src/commands/sync-command.js +250 -0
  128. package/dist/src/commands/sync-command.js.map +1 -0
  129. package/dist/src/commands/wizard.d.ts +8 -5
  130. package/dist/src/commands/wizard.js +6 -4
  131. package/dist/src/commands/wizard.js.map +1 -1
  132. package/dist/src/commands/write-commands.d.ts +9 -3
  133. package/dist/src/commands/write-commands.js +127 -31
  134. package/dist/src/commands/write-commands.js.map +1 -1
  135. package/dist/src/constants.d.ts +7 -1
  136. package/dist/src/constants.js +7 -1
  137. package/dist/src/constants.js.map +1 -1
  138. package/dist/src/eval/manifest-v1.d.ts +71 -0
  139. package/dist/src/eval/manifest-v1.js +370 -0
  140. package/dist/src/eval/manifest-v1.js.map +1 -0
  141. package/dist/src/generators/local-plugin.d.ts +5 -1
  142. package/dist/src/generators/local-plugin.js +236 -109
  143. package/dist/src/generators/local-plugin.js.map +1 -1
  144. package/dist/src/index.d.ts +10 -4
  145. package/dist/src/index.js +1793 -486
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/output/command-receipt.d.ts +43 -46
  148. package/dist/src/output/command-receipt.js +256 -80
  149. package/dist/src/output/command-receipt.js.map +1 -1
  150. package/dist/src/output/model.d.ts +3 -44
  151. package/dist/src/output/model.js +1 -144
  152. package/dist/src/output/model.js.map +1 -1
  153. package/dist/src/output/rebuild-progress.js +1 -13
  154. package/dist/src/output/rebuild-progress.js.map +1 -1
  155. package/dist/src/portable/commands.d.ts +46 -7
  156. package/dist/src/portable/commands.js +349 -37
  157. package/dist/src/portable/commands.js.map +1 -1
  158. package/dist/src/portable/materializer.d.ts +17 -4
  159. package/dist/src/portable/materializer.js +179 -41
  160. package/dist/src/portable/materializer.js.map +1 -1
  161. package/dist/src/portable/skills-cli.d.ts +15 -7
  162. package/dist/src/portable/skills-cli.js +74 -20
  163. package/dist/src/portable/skills-cli.js.map +1 -1
  164. package/dist/src/review/eval-source-input.d.ts +43 -0
  165. package/dist/src/review/eval-source-input.js +207 -0
  166. package/dist/src/review/eval-source-input.js.map +1 -0
  167. package/dist/src/review/review-profile.d.ts +17 -0
  168. package/dist/src/review/review-profile.js +234 -0
  169. package/dist/src/review/review-profile.js.map +1 -0
  170. package/dist/src/review/review-selection.d.ts +30 -0
  171. package/dist/src/review/review-selection.js +527 -0
  172. package/dist/src/review/review-selection.js.map +1 -0
  173. package/dist/src/review/review-types.d.ts +68 -0
  174. package/dist/src/review/review-types.js +16 -0
  175. package/dist/src/review/review-types.js.map +1 -0
  176. package/dist/src/review/skill-materialization.d.ts +13 -0
  177. package/dist/src/review/skill-materialization.js +75 -0
  178. package/dist/src/review/skill-materialization.js.map +1 -0
  179. package/dist/src/review/source-binding.d.ts +183 -0
  180. package/dist/src/review/source-binding.js +708 -0
  181. package/dist/src/review/source-binding.js.map +1 -0
  182. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  183. package/dist/src/tui/catalog-freshness.js +2 -0
  184. package/dist/src/tui/catalog-freshness.js.map +1 -0
  185. package/dist/src/tui/catalog-generation.d.ts +21 -0
  186. package/dist/src/tui/catalog-generation.js +156 -0
  187. package/dist/src/tui/catalog-generation.js.map +1 -0
  188. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  189. package/dist/src/tui/catalog-sources/projection.js +17 -0
  190. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  191. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  192. package/dist/src/tui/catalog-sources/review.js +13 -0
  193. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  194. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  195. package/dist/src/tui/catalog-sources/screens.js +40 -0
  196. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  197. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  198. package/dist/src/tui/catalog-sources/session.js +300 -0
  199. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  200. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  201. package/dist/src/tui/catalog-sources/types.js +2 -0
  202. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  203. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  204. package/dist/src/tui/catalog-store-task.js +19 -0
  205. package/dist/src/tui/catalog-store-task.js.map +1 -0
  206. package/dist/src/tui/clipboard.d.ts +13 -0
  207. package/dist/src/tui/clipboard.js +95 -0
  208. package/dist/src/tui/clipboard.js.map +1 -0
  209. package/dist/src/tui/components.d.ts +110 -3
  210. package/dist/src/tui/components.js +183 -36
  211. package/dist/src/tui/components.js.map +1 -1
  212. package/dist/src/tui/config-array-draft.d.ts +29 -0
  213. package/dist/src/tui/config-array-draft.js +48 -0
  214. package/dist/src/tui/config-array-draft.js.map +1 -0
  215. package/dist/src/tui/config-leaf-editor.d.ts +16 -0
  216. package/dist/src/tui/config-leaf-editor.js +206 -0
  217. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  218. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  219. package/dist/src/tui/config-value-presentation.js +104 -0
  220. package/dist/src/tui/config-value-presentation.js.map +1 -0
  221. package/dist/src/tui/console-app-v4.d.ts +14 -4
  222. package/dist/src/tui/console-app-v4.js +8941 -1872
  223. package/dist/src/tui/console-app-v4.js.map +1 -1
  224. package/dist/src/tui/content-item-card.d.ts +13 -0
  225. package/dist/src/tui/content-item-card.js +51 -0
  226. package/dist/src/tui/content-item-card.js.map +1 -0
  227. package/dist/src/tui/controller-runtime.d.ts +10 -2
  228. package/dist/src/tui/controller-runtime.js +3211 -388
  229. package/dist/src/tui/controller-runtime.js.map +1 -1
  230. package/dist/src/tui/controller.d.ts +615 -45
  231. package/dist/src/tui/controller.js +3558 -768
  232. package/dist/src/tui/controller.js.map +1 -1
  233. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  234. package/dist/src/tui/dependency-graph-view.js +121 -0
  235. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  236. package/dist/src/tui/dependency-graph.d.ts +81 -0
  237. package/dist/src/tui/dependency-graph.js +452 -0
  238. package/dist/src/tui/dependency-graph.js.map +1 -0
  239. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  240. package/dist/src/tui/diagnostic-projection.js +567 -0
  241. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  242. package/dist/src/tui/diagnostics.d.ts +3 -3
  243. package/dist/src/tui/diagnostics.js +14 -2
  244. package/dist/src/tui/diagnostics.js.map +1 -1
  245. package/dist/src/tui/entity-cards.d.ts +55 -0
  246. package/dist/src/tui/entity-cards.js +220 -0
  247. package/dist/src/tui/entity-cards.js.map +1 -0
  248. package/dist/src/tui/glossary.d.ts +23 -0
  249. package/dist/src/tui/glossary.js +42 -0
  250. package/dist/src/tui/glossary.js.map +1 -0
  251. package/dist/src/tui/index.d.ts +6 -1
  252. package/dist/src/tui/index.js +5 -1
  253. package/dist/src/tui/index.js.map +1 -1
  254. package/dist/src/tui/input-display.d.ts +9 -0
  255. package/dist/src/tui/input-display.js +58 -0
  256. package/dist/src/tui/input-display.js.map +1 -0
  257. package/dist/src/tui/keys.d.ts +44 -0
  258. package/dist/src/tui/keys.js +43 -15
  259. package/dist/src/tui/keys.js.map +1 -1
  260. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  261. package/dist/src/tui/lifecycle-action-view.js +36 -0
  262. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  263. package/dist/src/tui/model.d.ts +223 -31
  264. package/dist/src/tui/model.js +1510 -397
  265. package/dist/src/tui/model.js.map +1 -1
  266. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  267. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  268. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  269. package/dist/src/tui/operation-history.d.ts +81 -0
  270. package/dist/src/tui/operation-history.js +136 -0
  271. package/dist/src/tui/operation-history.js.map +1 -0
  272. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  273. package/dist/src/tui/operation-review-planner.js +1295 -0
  274. package/dist/src/tui/operation-review-planner.js.map +1 -0
  275. package/dist/src/tui/plugin-content.d.ts +31 -0
  276. package/dist/src/tui/plugin-content.js +680 -0
  277. package/dist/src/tui/plugin-content.js.map +1 -0
  278. package/dist/src/tui/plugin-detail.d.ts +52 -0
  279. package/dist/src/tui/plugin-detail.js +165 -0
  280. package/dist/src/tui/plugin-detail.js.map +1 -0
  281. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  282. package/dist/src/tui/plugin-write-task.js +286 -0
  283. package/dist/src/tui/plugin-write-task.js.map +1 -0
  284. package/dist/src/tui/project-inventory.d.ts +68 -0
  285. package/dist/src/tui/project-inventory.js +203 -0
  286. package/dist/src/tui/project-inventory.js.map +1 -0
  287. package/dist/src/tui/prompt.js +4 -15
  288. package/dist/src/tui/prompt.js.map +1 -1
  289. package/dist/src/tui/query-header.d.ts +30 -0
  290. package/dist/src/tui/query-header.js +40 -0
  291. package/dist/src/tui/query-header.js.map +1 -0
  292. package/dist/src/tui/reader.d.ts +37 -0
  293. package/dist/src/tui/reader.js +47 -0
  294. package/dist/src/tui/reader.js.map +1 -0
  295. package/dist/src/tui/router.d.ts +197 -10
  296. package/dist/src/tui/router.js +338 -50
  297. package/dist/src/tui/router.js.map +1 -1
  298. package/dist/src/tui/screen-registry.d.ts +701 -0
  299. package/dist/src/tui/screen-registry.js +230 -0
  300. package/dist/src/tui/screen-registry.js.map +1 -0
  301. package/dist/src/tui/session-console-app.d.ts +6 -0
  302. package/dist/src/tui/session-console-app.js +13 -0
  303. package/dist/src/tui/session-console-app.js.map +1 -0
  304. package/dist/src/tui/session-host.d.ts +45 -0
  305. package/dist/src/tui/session-host.js +209 -0
  306. package/dist/src/tui/session-host.js.map +1 -0
  307. package/dist/src/tui/source-detail-card.d.ts +29 -0
  308. package/dist/src/tui/source-detail-card.js +45 -0
  309. package/dist/src/tui/source-detail-card.js.map +1 -0
  310. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  311. package/dist/src/tui/source-ref-presets.js +11 -0
  312. package/dist/src/tui/source-ref-presets.js.map +1 -0
  313. package/dist/src/tui/theme.d.ts +12 -0
  314. package/dist/src/tui/theme.js +12 -0
  315. package/dist/src/tui/theme.js.map +1 -1
  316. package/dist/src/tui/viewport.d.ts +1 -0
  317. package/dist/src/tui/viewport.js +23 -0
  318. package/dist/src/tui/viewport.js.map +1 -1
  319. package/dist/src/tui/views.js +31 -3
  320. package/dist/src/tui/views.js.map +1 -1
  321. package/dist/src/tui/wizard.js +37 -13
  322. package/dist/src/tui/wizard.js.map +1 -1
  323. package/dist/src/types.d.ts +244 -20
  324. package/dist/src/types.js +1 -0
  325. package/dist/src/types.js.map +1 -1
  326. package/dist/src/utils/agent-version.d.ts +7 -1
  327. package/dist/src/utils/agent-version.js +41 -8
  328. package/dist/src/utils/agent-version.js.map +1 -1
  329. package/dist/src/utils/artifact-plan.d.ts +5 -4
  330. package/dist/src/utils/artifact-plan.js +18 -7
  331. package/dist/src/utils/artifact-plan.js.map +1 -1
  332. package/dist/src/utils/artifact-renderer.d.ts +17 -7
  333. package/dist/src/utils/artifact-renderer.js +214 -216
  334. package/dist/src/utils/artifact-renderer.js.map +1 -1
  335. package/dist/src/utils/artifact-request.d.ts +21 -0
  336. package/dist/src/utils/artifact-request.js +78 -0
  337. package/dist/src/utils/artifact-request.js.map +1 -0
  338. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  339. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  340. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  341. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  342. package/dist/src/utils/bundle-integrity.js +0 -25
  343. package/dist/src/utils/bundle-integrity.js.map +1 -1
  344. package/dist/src/utils/bundle-layout.js +22 -29
  345. package/dist/src/utils/bundle-layout.js.map +1 -1
  346. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  347. package/dist/src/utils/catalog-capability-projection.js +14 -0
  348. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  349. package/dist/src/utils/catalog-digests.d.ts +10 -0
  350. package/dist/src/utils/catalog-digests.js +57 -20
  351. package/dist/src/utils/catalog-digests.js.map +1 -1
  352. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  353. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  354. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  355. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  356. package/dist/src/utils/catalog-generation-error.js +30 -0
  357. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  358. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  359. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  360. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  361. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  362. package/dist/src/utils/catalog-generation-service.js +1271 -0
  363. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  364. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  365. package/dist/src/utils/catalog-generation-state.js +192 -0
  366. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  367. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  368. package/dist/src/utils/catalog-generation-store.js +452 -0
  369. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  370. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  371. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  372. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  373. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  374. package/dist/src/utils/catalog-operation-context.js +142 -0
  375. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  376. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  377. package/dist/src/utils/catalog-public-error.js +28 -8
  378. package/dist/src/utils/catalog-public-error.js.map +1 -1
  379. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  380. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  381. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  382. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  383. package/dist/src/utils/catalog-snapshot.js +11 -3
  384. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  385. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  386. package/dist/src/utils/catalog-source-identity.js +21 -2
  387. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  388. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  389. package/dist/src/utils/catalog-source-impact.js +344 -0
  390. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  391. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  392. package/dist/src/utils/catalog-source-references.js +195 -347
  393. package/dist/src/utils/catalog-source-references.js.map +1 -1
  394. package/dist/src/utils/catalog-sources.d.ts +15 -1
  395. package/dist/src/utils/catalog-sources.js +206 -27
  396. package/dist/src/utils/catalog-sources.js.map +1 -1
  397. package/dist/src/utils/codex-config.d.ts +2 -0
  398. package/dist/src/utils/codex-config.js +26 -5
  399. package/dist/src/utils/codex-config.js.map +1 -1
  400. package/dist/src/utils/codex-manager.d.ts +79 -0
  401. package/dist/src/utils/codex-manager.js +747 -0
  402. package/dist/src/utils/codex-manager.js.map +1 -0
  403. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  404. package/dist/src/utils/codex-marketplace-path.js +45 -0
  405. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  406. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  407. package/dist/src/utils/codex-native-observation.js +154 -0
  408. package/dist/src/utils/codex-native-observation.js.map +1 -0
  409. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  410. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  411. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  412. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  413. package/dist/src/utils/codex-reconciler.js +298 -0
  414. package/dist/src/utils/codex-reconciler.js.map +1 -0
  415. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  416. package/dist/src/utils/codex-shared-native.js +81 -0
  417. package/dist/src/utils/codex-shared-native.js.map +1 -0
  418. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  419. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  420. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  421. package/dist/src/utils/codex-surface-analysis.js +247 -0
  422. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  423. package/dist/src/utils/dynamic-skill-tree.d.ts +4 -0
  424. package/dist/src/utils/dynamic-skill-tree.js +35 -5
  425. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  426. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  427. package/dist/src/utils/git-catalog-provider.js +177 -145
  428. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  429. package/dist/src/utils/local-marketplace.d.ts +18 -1
  430. package/dist/src/utils/local-marketplace.js +354 -84
  431. package/dist/src/utils/local-marketplace.js.map +1 -1
  432. package/dist/src/utils/manifest.d.ts +1 -3
  433. package/dist/src/utils/manifest.js +1 -3
  434. package/dist/src/utils/manifest.js.map +1 -1
  435. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  436. package/dist/src/utils/multi-source-catalog.js +54 -110
  437. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  438. package/dist/src/utils/native-cli.d.ts +55 -7
  439. package/dist/src/utils/native-cli.js +400 -58
  440. package/dist/src/utils/native-cli.js.map +1 -1
  441. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  442. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  443. package/dist/src/utils/ownership.d.ts +84 -20
  444. package/dist/src/utils/ownership.js +179 -222
  445. package/dist/src/utils/ownership.js.map +1 -1
  446. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  447. package/dist/src/utils/path-catalog-provider.js +54 -65
  448. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  449. package/dist/src/utils/paths.d.ts +0 -1
  450. package/dist/src/utils/paths.js +0 -1
  451. package/dist/src/utils/paths.js.map +1 -1
  452. package/dist/src/utils/plugin-config-impact.d.ts +33 -0
  453. package/dist/src/utils/plugin-config-impact.js +298 -0
  454. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  455. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  456. package/dist/src/utils/plugin-config-write.js +1000 -296
  457. package/dist/src/utils/plugin-config-write.js.map +1 -1
  458. package/dist/src/utils/plugin-config.d.ts +153 -93
  459. package/dist/src/utils/plugin-config.js +1116 -968
  460. package/dist/src/utils/plugin-config.js.map +1 -1
  461. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  462. package/dist/src/utils/plugin-intent-state.js +320 -0
  463. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  464. package/dist/src/utils/plugin-scripts.d.ts +65 -125
  465. package/dist/src/utils/plugin-scripts.js +484 -524
  466. package/dist/src/utils/plugin-scripts.js.map +1 -1
  467. package/dist/src/utils/process-tree.d.ts +2 -2
  468. package/dist/src/utils/process-tree.js +1 -1
  469. package/dist/src/utils/process-tree.js.map +1 -1
  470. package/dist/src/utils/project-boundary.d.ts +11 -13
  471. package/dist/src/utils/project-boundary.js +28 -34
  472. package/dist/src/utils/project-boundary.js.map +1 -1
  473. package/dist/src/utils/runtime-config.d.ts +20 -0
  474. package/dist/src/utils/runtime-config.js +75 -0
  475. package/dist/src/utils/runtime-config.js.map +1 -0
  476. package/dist/src/utils/safe-fs.d.ts +21 -0
  477. package/dist/src/utils/safe-fs.js +111 -0
  478. package/dist/src/utils/safe-fs.js.map +1 -0
  479. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  480. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  481. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  482. package/dist/src/utils/sensitive-content.d.ts +4 -0
  483. package/dist/src/utils/sensitive-content.js +36 -0
  484. package/dist/src/utils/sensitive-content.js.map +1 -0
  485. package/dist/src/utils/state-paths.js +7 -2
  486. package/dist/src/utils/state-paths.js.map +1 -1
  487. package/dist/src/utils/target-eligibility.d.ts +8 -2
  488. package/dist/src/utils/target-eligibility.js +17 -8
  489. package/dist/src/utils/target-eligibility.js.map +1 -1
  490. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  491. package/dist/src/utils/windows-claude-shim.js +10 -0
  492. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  493. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  494. package/dist/src/utils/windows-npm-shim.js +140 -0
  495. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  496. package/dist/vitest.config.js +92 -10
  497. package/dist/vitest.config.js.map +1 -1
  498. package/package.json +27 -18
  499. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  500. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  501. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  502. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  503. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  504. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  505. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  506. package/dist/scripts/codex-eval-app-server.js +0 -1228
  507. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  508. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  509. package/dist/scripts/codex-eval-isolation.js +0 -318
  510. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  511. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  512. package/dist/scripts/codex-eval-process-management.js +0 -69
  513. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  514. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  515. package/dist/scripts/codex-eval-process-tree.js +0 -803
  516. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  517. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  518. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  519. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  520. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  521. package/dist/scripts/codex-trigger-eval.js +0 -968
  522. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  523. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  524. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  525. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  526. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  527. package/dist/scripts/eval-plugin-skills.js +0 -1586
  528. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  529. package/dist/scripts/eval-run-layout.d.ts +0 -17
  530. package/dist/scripts/eval-run-layout.js +0 -26
  531. package/dist/scripts/eval-run-layout.js.map +0 -1
  532. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  533. package/dist/scripts/plugin-eval-contract.js +0 -695
  534. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  535. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  536. package/dist/scripts/plugin-eval-materializer.js +0 -421
  537. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  538. package/dist/scripts/skill-reporting.d.ts +0 -212
  539. package/dist/scripts/skill-reporting.js +0 -922
  540. package/dist/scripts/skill-reporting.js.map +0 -1
  541. package/dist/src/commands/status-v4.d.ts +0 -123
  542. package/dist/src/commands/status-v4.js +0 -905
  543. package/dist/src/commands/status-v4.js.map +0 -1
  544. package/dist/src/commands/status.d.ts +0 -93
  545. package/dist/src/commands/status.js +0 -442
  546. package/dist/src/commands/status.js.map +0 -1
  547. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  548. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  549. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  550. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  551. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  552. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  553. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  554. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  555. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  556. package/dist/src/utils/catalog-source-cache.js +0 -296
  557. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  558. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  559. package/dist/src/utils/codex-project-surface.js +0 -49
  560. package/dist/src/utils/codex-project-surface.js.map +0 -1
  561. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  562. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  563. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  564. package/dist/src/utils/plugin-release.d.ts +0 -2
  565. package/dist/src/utils/plugin-release.js +0 -2
  566. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -1,12 +1,32 @@
1
1
  import { execFile } from 'node:child_process';
2
2
  import { randomUUID } from 'node:crypto';
3
- import { observeProcessTree, terminateProcessTree, } from './process-tree.js';
3
+ import path from 'node:path';
4
+ import { createWindowsJobInvocation, observeProcessTree, terminateProcessTree, } from './process-tree.js';
5
+ import { getCodexHome } from './state-paths.js';
6
+ import { resolveWindowsClaudeCommand } from './windows-claude-shim.js';
7
+ import { resolveWindowsNpmCommand } from './windows-npm-shim.js';
4
8
  const NATIVE_CLI_TIMEOUT_ENV = 'AW_NATIVE_CLI_TIMEOUT_MS';
5
9
  const DEFAULT_NATIVE_CLI_TIMEOUT_MS = 60_000;
6
10
  const MIN_NATIVE_CLI_TIMEOUT_MS = 1_000;
7
11
  const MAX_NATIVE_CLI_TIMEOUT_MS = 600_000;
8
12
  const NATIVE_CLI_CLEANUP_TIMEOUT_MS = 4_500;
13
+ const NATIVE_CLI_PROCESS_GROUP_TERM_GRACE_MS = 100;
14
+ const NATIVE_CLI_PROCESS_GROUP_POLL_MS = 25;
15
+ const NATIVE_CLI_PROCESS_GROUP_VERIFY_MS = 4_000;
9
16
  const NATIVE_CLI_PROCESS_MARKER_ENV = 'AW_NATIVE_CLI_PROCESS_MARKER';
17
+ export const SYSTEM_CODEX_MANAGER = {
18
+ kind: 'system',
19
+ version: 'unknown',
20
+ command: 'codex',
21
+ argsPrefix: [],
22
+ };
23
+ export class CodexProjectConfigNotEffectiveError extends Error {
24
+ code = 'codexProjectConfigNotEffective';
25
+ constructor(pluginId) {
26
+ super(`codexProjectConfigNotEffective: Codex did not apply the expected project activation for ${pluginId}.`);
27
+ this.name = 'CodexProjectConfigNotEffectiveError';
28
+ }
29
+ }
10
30
  function renderNativeCliCleanupError(error) {
11
31
  return error.message
12
32
  .replace(/^Native CLI cleanup unconfirmed:\s*/u, '')
@@ -19,6 +39,7 @@ export class NativeCliError extends Error {
19
39
  stderr;
20
40
  reason;
21
41
  cleanupError;
42
+ operationDiagnostic;
22
43
  constructor(options) {
23
44
  const renderedArgs = options.invocation.args.join(' ');
24
45
  const detail = options.stderr.trim() ||
@@ -36,6 +57,20 @@ export class NativeCliError extends Error {
36
57
  this.reason = options.reason ?? 'exit';
37
58
  this.cleanupError = options.cleanupError;
38
59
  this.cause = options.cause;
60
+ const causeCode = readNativeCliErrorCode(options.cause);
61
+ const safeCauseCode = causeCode === 'ENOENT' || causeCode === 'EACCES' || causeCode === 'EPERM'
62
+ ? causeCode : undefined;
63
+ this.operationDiagnostic = {
64
+ code: safeCauseCode === 'ENOENT' ? 'nativeCliExecutableMissing'
65
+ : this.reason === 'timeout' ? 'nativeCliTimedOut' : 'nativeCliFailed',
66
+ safeMessage: causeCode === 'ENOENT' ? 'The required platform CLI is not installed or cannot be found.'
67
+ : this.reason === 'timeout' ? 'The platform CLI timed out.'
68
+ : 'The platform CLI exited unsuccessfully.',
69
+ exitCode: options.exitCode,
70
+ ...(safeCauseCode === undefined ? {} : {
71
+ cause: { code: safeCauseCode, safeMessage: `The platform CLI reported ${safeCauseCode}.` },
72
+ }),
73
+ };
39
74
  }
40
75
  }
41
76
  let nativeCliRunnerOverrideForTests = null;
@@ -105,7 +140,57 @@ function isTimeoutLikeError(error, timeoutMs) {
105
140
  const defaultNativeCliExecFile = (command, args, options, callback) => execFile(command, args, options, (error, stdout, stderr) => {
106
141
  callback(error, stdout, stderr);
107
142
  });
108
- function settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, observation, requireConfirmedCleanup) {
143
+ function delayNativeCliCleanup(delayMs) {
144
+ return new Promise((resolve) => {
145
+ setTimeout(resolve, delayMs);
146
+ });
147
+ }
148
+ function isProcessGroupMissing(error) {
149
+ return Boolean(error &&
150
+ typeof error === 'object' &&
151
+ 'code' in error &&
152
+ error.code === 'ESRCH');
153
+ }
154
+ function isPosixProcessInspectionUnavailableError(error) {
155
+ return /POSIX (?:process (?:identity|marker) lookup|termination (?:audit|verification)) failed/u
156
+ .test(error.message);
157
+ }
158
+ async function terminateNativeCliProcessGroup(pid, killProcess) {
159
+ const groupPid = -pid;
160
+ const signalGroup = (signal) => {
161
+ try {
162
+ killProcess(groupPid, signal);
163
+ }
164
+ catch (error) {
165
+ if (isProcessGroupMissing(error)) {
166
+ return;
167
+ }
168
+ throw new Error(`Native CLI cleanup unconfirmed: could not signal process group ${signal}.`, { cause: error });
169
+ }
170
+ };
171
+ const groupExists = () => {
172
+ try {
173
+ killProcess(groupPid, 0);
174
+ return true;
175
+ }
176
+ catch (error) {
177
+ if (isProcessGroupMissing(error)) {
178
+ return false;
179
+ }
180
+ throw new Error('Native CLI cleanup unconfirmed: could not verify process group exit.', { cause: error });
181
+ }
182
+ };
183
+ signalGroup('SIGTERM');
184
+ await delayNativeCliCleanup(NATIVE_CLI_PROCESS_GROUP_TERM_GRACE_MS);
185
+ signalGroup('SIGKILL');
186
+ for (let elapsedMs = 0; groupExists(); elapsedMs += NATIVE_CLI_PROCESS_GROUP_POLL_MS) {
187
+ if (elapsedMs >= NATIVE_CLI_PROCESS_GROUP_VERIFY_MS) {
188
+ throw new Error('Native CLI cleanup unconfirmed: process group is still running.');
189
+ }
190
+ await delayNativeCliCleanup(NATIVE_CLI_PROCESS_GROUP_POLL_MS);
191
+ }
192
+ }
193
+ function settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, observation, requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion, processGroup, allowUnavailablePosixAudit, processTreeAuditPreparationError, killProcess) {
109
194
  let directKillAttempted = false;
110
195
  const killDirectChild = () => {
111
196
  if (directKillAttempted) {
@@ -148,7 +233,42 @@ function settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, obse
148
233
  timeout.unref();
149
234
  let cleanup;
150
235
  try {
151
- cleanup = terminateProcessTreeImpl(childPid, () => killDirectChild(), {}, { observation, requireConfirmedCleanup });
236
+ cleanup = processGroup
237
+ ? (async () => {
238
+ let processGroupError;
239
+ try {
240
+ await terminateNativeCliProcessGroup(childPid, killProcess);
241
+ }
242
+ catch (error) {
243
+ processGroupError = error instanceof Error
244
+ ? error
245
+ : new Error('Native CLI cleanup unconfirmed: process-group cleanup rejected.');
246
+ }
247
+ let auditError = processTreeAuditPreparationError;
248
+ if (observation) {
249
+ try {
250
+ await terminateProcessTreeImpl(childPid, () => killDirectChild(), {}, { observation, requireConfirmedCleanup: true });
251
+ }
252
+ catch (error) {
253
+ auditError = error instanceof Error
254
+ ? error
255
+ : new Error('Native CLI cleanup unconfirmed: cleanup audit rejected.');
256
+ }
257
+ }
258
+ if (processGroupError)
259
+ throw processGroupError;
260
+ if (auditError &&
261
+ !(allowUnavailablePosixAudit && isPosixProcessInspectionUnavailableError(auditError))) {
262
+ throw auditError;
263
+ }
264
+ })()
265
+ : terminateProcessTreeImpl(childPid, () => killDirectChild(), {}, {
266
+ observation,
267
+ requireConfirmedCleanup,
268
+ ...(allowUnobservedWindowsProcessOnNormalCompletion
269
+ ? { allowUnobservedWindowsProcessOnNormalCompletion: true }
270
+ : {}),
271
+ });
152
272
  }
153
273
  catch (error) {
154
274
  finish(error instanceof Error
@@ -180,10 +300,44 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
180
300
  const observeProcessTreeImpl = dependencies.observeProcessTree ??
181
301
  (dependencies.terminateProcessTree ? undefined : observeProcessTree);
182
302
  const terminateProcessTreeImpl = dependencies.terminateProcessTree ?? terminateProcessTree;
303
+ const platform = dependencies.platform ?? process.platform;
304
+ const killProcess = dependencies.killProcess ?? process.kill;
305
+ const createWindowsJobInvocationImpl = dependencies.createWindowsJobInvocation ??
306
+ (dependencies.execFile ? undefined : createWindowsJobInvocation);
183
307
  return async (invocation) => {
184
308
  if (invocation.signal?.aborted) {
185
309
  throw createAbortedNativeCliError(invocation);
186
310
  }
311
+ let executableCommand = invocation.command;
312
+ let executableArgs = invocation.args;
313
+ const commandName = normalizeNativeCliCommandName(invocation.command);
314
+ if (platform === 'win32'
315
+ && createWindowsJobInvocationImpl
316
+ && (commandName === 'claude' || commandName === 'codex')) {
317
+ const commandOptions = {
318
+ command: invocation.command,
319
+ cwd: invocation.cwd,
320
+ env: invocation.env,
321
+ };
322
+ const resolved = commandName === 'claude'
323
+ ? await resolveWindowsClaudeCommand(commandOptions)
324
+ : await resolveWindowsNpmCommand({
325
+ ...commandOptions,
326
+ packageName: '@openai/codex',
327
+ binName: 'codex',
328
+ displayName: 'Codex',
329
+ });
330
+ executableCommand = resolved.command;
331
+ executableArgs = [...resolved.argsPrefix, ...invocation.args];
332
+ }
333
+ const windowsJobInvocation = platform === 'win32' && createWindowsJobInvocationImpl
334
+ ? createWindowsJobInvocationImpl(executableCommand, executableArgs)
335
+ : undefined;
336
+ const cleanupStrategy = windowsJobInvocation
337
+ ? 'windows-job'
338
+ : platform !== 'win32'
339
+ ? 'process-group'
340
+ : isAgentNativeCliInvocation(invocation) ? 'on-demand-tree' : 'observed-tree';
187
341
  return new Promise((resolve, reject) => {
188
342
  let settled = false;
189
343
  let terminationReason;
@@ -194,15 +348,38 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
194
348
  let streamedStderr = '';
195
349
  let timeout;
196
350
  let processTreeObservation;
351
+ let processTreeCleanup;
352
+ let processTreeAuditPreparationError;
353
+ let completionStarted = false;
354
+ let windowsJobCloseTimer;
197
355
  let detachOutputListeners = () => { };
198
356
  const abortListener = () => {
199
357
  startTermination('aborted', invocation.signal?.reason);
200
358
  };
359
+ const cleanupProcessTree = (requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion = false, allowUnavailablePosixAudit = false, auditTrustedPosixFailure = false) => {
360
+ if (cleanupStrategy === 'process-group' &&
361
+ (!trustedAgentCli || auditTrustedPosixFailure) &&
362
+ processTreeObservation === undefined &&
363
+ child.pid !== undefined) {
364
+ try {
365
+ processTreeObservation = observeProcessTreeImpl?.(child.pid, processMarker);
366
+ }
367
+ catch (error) {
368
+ processTreeAuditPreparationError = new Error('Native CLI cleanup unconfirmed: POSIX process marker lookup failed.', { cause: error });
369
+ }
370
+ }
371
+ processTreeCleanup ??= settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, processTreeObservation, requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion, cleanupStrategy === 'process-group', allowUnavailablePosixAudit, processTreeAuditPreparationError, killProcess);
372
+ return processTreeCleanup;
373
+ };
201
374
  const clearLifecycle = () => {
202
375
  if (timeout) {
203
376
  clearTimeout(timeout);
204
377
  timeout = undefined;
205
378
  }
379
+ if (windowsJobCloseTimer) {
380
+ clearTimeout(windowsJobCloseTimer);
381
+ windowsJobCloseTimer = undefined;
382
+ }
206
383
  invocation.signal?.removeEventListener('abort', abortListener);
207
384
  detachOutputListeners();
208
385
  processTreeObservation?.dispose();
@@ -255,17 +432,113 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
255
432
  clearTimeout(timeout);
256
433
  timeout = undefined;
257
434
  }
435
+ if (cleanupStrategy === 'windows-job') {
436
+ try {
437
+ if (child.exitCode == null &&
438
+ child.signalCode == null &&
439
+ child.kill('SIGKILL') === false) {
440
+ throw new Error('Windows Job helper did not accept termination.');
441
+ }
442
+ }
443
+ catch (error) {
444
+ finishTermination(error instanceof Error
445
+ ? error
446
+ : new Error('Windows Job helper termination failed.'));
447
+ return;
448
+ }
449
+ windowsJobCloseTimer = setTimeout(() => finishTermination(new Error('Windows Job helper exit could not be confirmed.')), NATIVE_CLI_CLEANUP_TIMEOUT_MS);
450
+ windowsJobCloseTimer.unref();
451
+ return;
452
+ }
453
+ if (cleanupStrategy === 'on-demand-tree' && child.pid !== undefined) {
454
+ try {
455
+ processTreeObservation = (observeProcessTreeImpl ?? observeProcessTree)(child.pid, processMarker);
456
+ }
457
+ catch (error) {
458
+ child.stdout?.destroy?.();
459
+ child.stderr?.destroy?.();
460
+ try {
461
+ child.kill('SIGKILL');
462
+ }
463
+ catch {
464
+ // The direct child can exit before fallback termination runs.
465
+ }
466
+ finishTermination(error instanceof Error
467
+ ? error
468
+ : new Error('Native CLI cleanup unconfirmed: process observation threw.'));
469
+ return;
470
+ }
471
+ }
258
472
  Promise.resolve()
259
- .then(() => settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, processTreeObservation, (child.exitCode != null || child.signalCode != null) && callbackOutput === undefined))
473
+ .then(() => cleanupProcessTree(cleanupStrategy === 'observed-tree'
474
+ ? (child.exitCode != null || child.signalCode != null) && callbackOutput === undefined
475
+ : true, false, false, true))
260
476
  .then(finishTermination);
261
477
  }
478
+ const finishCallback = (cleanupError) => {
479
+ if (terminationReason)
480
+ return;
481
+ const output = callbackOutput ?? { stdout: streamedStdout, stderr: streamedStderr };
482
+ const childFailed = child.exitCode != null && child.exitCode !== 0 || child.signalCode != null;
483
+ if (callbackError || childFailed) {
484
+ const callbackExitCode = callbackError && typeof callbackError === 'object' &&
485
+ typeof callbackError.code === 'number'
486
+ ? callbackError.code
487
+ : undefined;
488
+ const exitCode = callbackExitCode !== undefined
489
+ ? callbackExitCode
490
+ : child.exitCode != null
491
+ ? child.exitCode
492
+ : isAbortLikeError(callbackError) ||
493
+ isTimeoutLikeError(callbackError, invocation.timeoutMs)
494
+ ? 124
495
+ : 1;
496
+ rejectOnce(new NativeCliError({
497
+ invocation,
498
+ exitCode,
499
+ ...output,
500
+ cause: callbackError ?? new Error(`Command exited with ${child.signalCode ?? `code ${exitCode}`}.`),
501
+ cleanupError,
502
+ }));
503
+ return;
504
+ }
505
+ if (cleanupError) {
506
+ rejectOnce(new NativeCliError({
507
+ invocation,
508
+ exitCode: 1,
509
+ ...output,
510
+ cause: cleanupError,
511
+ cleanupError,
512
+ reason: 'exit',
513
+ }));
514
+ return;
515
+ }
516
+ resolveOnce({ exitCode: 0, ...output });
517
+ };
518
+ const startCompletion = (allowUnobservedWindowsProcessOnNormalCompletion = false) => {
519
+ if (settled || terminationReason || completionStarted)
520
+ return;
521
+ completionStarted = true;
522
+ if (timeout) {
523
+ clearTimeout(timeout);
524
+ timeout = undefined;
525
+ }
526
+ void cleanupProcessTree(true, allowUnobservedWindowsProcessOnNormalCompletion, platform !== 'win32' && callbackError == null &&
527
+ (child.exitCode == null || child.exitCode === 0) && child.signalCode == null, platform !== 'win32' && trustedAgentCli && Boolean(callbackError
528
+ || child.exitCode != null && child.exitCode !== 0
529
+ || child.signalCode != null)).then(finishCallback);
530
+ };
262
531
  const processMarker = randomUUID();
263
- child = execFileImpl(invocation.command, invocation.args, {
264
- cwd: invocation.cwd,
532
+ const trustedAgentCli = isAgentNativeCliInvocation(invocation);
533
+ child = execFileImpl(windowsJobInvocation?.command ?? executableCommand, windowsJobInvocation?.args ?? executableArgs, {
534
+ cwd: platform === 'win32' && invocation.cwd !== undefined
535
+ ? path.win32.toNamespacedPath(invocation.cwd)
536
+ : invocation.cwd,
265
537
  env: {
266
538
  ...(invocation.env ?? process.env),
267
539
  [NATIVE_CLI_PROCESS_MARKER_ENV]: processMarker,
268
540
  },
541
+ detached: platform !== 'win32',
269
542
  windowsHide: true,
270
543
  }, (error, stdout, stderr) => {
271
544
  if (settled) {
@@ -274,30 +547,29 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
274
547
  callbackError = error;
275
548
  callbackOutput = { stdout, stderr };
276
549
  if (terminationReason) {
550
+ if (cleanupStrategy === 'windows-job') {
551
+ if (windowsJobCloseTimer) {
552
+ clearTimeout(windowsJobCloseTimer);
553
+ windowsJobCloseTimer = undefined;
554
+ }
555
+ finishTermination();
556
+ }
277
557
  return;
278
558
  }
279
- if (!error) {
280
- resolveOnce({
281
- exitCode: 0,
282
- stdout,
283
- stderr,
284
- });
559
+ if (cleanupStrategy === 'windows-job') {
560
+ queueMicrotask(() => finishCallback());
285
561
  return;
286
562
  }
287
- const exitCode = typeof error.code === 'number'
288
- ? (error.code)
289
- : isAbortLikeError(error) || isTimeoutLikeError(error, invocation.timeoutMs)
290
- ? 124
291
- : 1;
292
- rejectOnce(new NativeCliError({
293
- invocation,
294
- exitCode,
295
- stdout,
296
- stderr,
297
- cause: error,
298
- }));
563
+ if (cleanupStrategy === 'on-demand-tree') {
564
+ queueMicrotask(() => finishCallback());
565
+ return;
566
+ }
567
+ queueMicrotask(() => startCompletion(platform === 'win32' &&
568
+ error === null &&
569
+ (child.exitCode == null || child.exitCode === 0) &&
570
+ child.signalCode == null));
299
571
  });
300
- if (child.pid !== undefined) {
572
+ if (cleanupStrategy === 'observed-tree' && child.pid !== undefined) {
301
573
  processTreeObservation = observeProcessTreeImpl?.(child.pid, processMarker);
302
574
  }
303
575
  const stdoutListener = (chunk) => {
@@ -312,6 +584,13 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
312
584
  child.stdout?.removeListener?.('data', stdoutListener);
313
585
  child.stderr?.removeListener?.('data', stderrListener);
314
586
  };
587
+ if (cleanupStrategy !== 'on-demand-tree' && cleanupStrategy !== 'windows-job') {
588
+ child.once('exit', () => {
589
+ if (!terminationReason) {
590
+ startCompletion(platform === 'win32' && child.exitCode === 0 && child.signalCode == null);
591
+ }
592
+ });
593
+ }
315
594
  if (invocation.timeoutMs && invocation.timeoutMs > 0) {
316
595
  child.once('spawn', () => {
317
596
  if (settled || terminationReason) {
@@ -337,6 +616,9 @@ function normalizeNativeCliCommandName(command) {
337
616
  return baseName.replace(/\.(?:bat|cmd|com|exe)$/u, '');
338
617
  }
339
618
  function isAgentNativeCliInvocation(invocation) {
619
+ if (invocation.agentKind !== undefined) {
620
+ return true;
621
+ }
340
622
  const commandName = normalizeNativeCliCommandName(invocation.command);
341
623
  return commandName === 'codex' || commandName === 'claude';
342
624
  }
@@ -372,54 +654,114 @@ export async function runNativeCli(invocation, runner) {
372
654
  const resolvedInvocation = applyAgentNativeCliDefaultTimeout(invocation);
373
655
  return (runner ?? getDefaultNativeCliRunner())(resolvedInvocation);
374
656
  }
375
- export function buildCodexPluginAddInvocation(pluginId, cwd, env) {
657
+ function buildCodexInvocation(manager, args, cwd, env) {
376
658
  return {
377
- command: 'codex',
378
- args: ['plugin', 'add', pluginId],
659
+ command: manager.command,
660
+ args: [...manager.argsPrefix, ...args],
661
+ agentKind: 'codex',
379
662
  cwd,
380
- env,
663
+ env: {
664
+ ...env,
665
+ CODEX_HOME: getCodexHome(env),
666
+ },
381
667
  };
382
668
  }
383
- export function buildCodexPluginListInvocation(cwd, env) {
384
- return {
385
- command: 'codex',
386
- args: ['plugin', 'list'],
387
- cwd,
388
- env,
389
- };
669
+ export function buildCodexPluginAddInvocation(manager, pluginId, cwd, env) {
670
+ return buildCodexInvocation(manager, ['plugin', 'add', pluginId], cwd, env);
390
671
  }
391
- export function buildCodexPluginRemoveInvocation(pluginId, cwd, env) {
392
- return {
393
- command: 'codex',
394
- args: ['plugin', 'remove', pluginId],
395
- cwd,
396
- env,
397
- };
672
+ export function buildCodexPluginListJsonInvocation(manager, marketplaceName, cwd, env) {
673
+ return buildCodexInvocation(manager, ['plugin', 'list', '--marketplace', marketplaceName, '--json'], cwd, env);
398
674
  }
399
- export function buildCodexMarketplaceAddInvocation(awHome, cwd, env) {
675
+ export function buildCodexProjectPluginListInvocations(manager, options) {
400
676
  return {
401
- command: 'codex',
402
- args: ['plugin', 'marketplace', 'add', awHome],
403
- cwd,
404
- env,
677
+ exact: buildCodexPluginListJsonInvocation(manager, options.marketplaceName, options.exactCwd, options.env),
678
+ neutral: buildCodexPluginListJsonInvocation(manager, options.marketplaceName, options.neutralCwd, options.env),
405
679
  };
406
680
  }
407
- export function buildCodexMarketplaceListInvocation(cwd, env) {
681
+ function readCodexPluginListEntry(value, index) {
682
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
683
+ throw new Error(`codexPluginListInvalid: installed[${index}] must be an object.`);
684
+ }
685
+ const record = value;
686
+ const pluginId = record.pluginId;
687
+ if (typeof pluginId !== 'string'
688
+ || pluginId !== pluginId.trim()
689
+ || !/^[^@\s]+@[^@\s]+$/u.test(pluginId)) {
690
+ throw new Error(`codexPluginListInvalid: installed[${index}].pluginId must be an exact namespaced ID.`);
691
+ }
692
+ if (record.installed !== true) {
693
+ throw new Error(`codexPluginListInvalid: installed[${index}].installed must be true.`);
694
+ }
695
+ if (typeof record.enabled !== 'boolean') {
696
+ throw new Error(`codexPluginListInvalid: installed[${index}].enabled must be boolean.`);
697
+ }
698
+ if (record.version !== undefined && typeof record.version !== 'string') {
699
+ throw new Error(`codexPluginListInvalid: installed[${index}].version must be string.`);
700
+ }
701
+ const source = record.source;
702
+ if (source !== undefined && (!source || typeof source !== 'object' || Array.isArray(source))) {
703
+ throw new Error(`codexPluginListInvalid: installed[${index}].source must be an object.`);
704
+ }
705
+ const pluginPath = source && typeof source === 'object'
706
+ ? source.path
707
+ : undefined;
708
+ if (pluginPath !== undefined && typeof pluginPath !== 'string') {
709
+ throw new Error(`codexPluginListInvalid: installed[${index}].source.path must be string.`);
710
+ }
408
711
  return {
409
- command: 'codex',
410
- args: ['plugin', 'marketplace', 'list'],
411
- cwd,
412
- env,
712
+ pluginId,
713
+ enabled: record.enabled,
714
+ ...(typeof record.version === 'string' ? { version: record.version } : {}),
715
+ ...(typeof pluginPath === 'string' ? { path: pluginPath } : {}),
413
716
  };
414
717
  }
415
- export function buildCodexMarketplaceRemoveInvocation(marketplaceName, cwd, env) {
718
+ export function parseCodexPluginListJson(stdout) {
719
+ let value;
720
+ try {
721
+ value = JSON.parse(stdout);
722
+ }
723
+ catch {
724
+ throw new Error('codexPluginListInvalid: Codex plugin list did not return JSON.');
725
+ }
726
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
727
+ throw new Error('codexPluginListInvalid: expected a Codex 0.151 plugin list object.');
728
+ }
729
+ const record = value;
730
+ if (!Array.isArray(record.installed) || !Array.isArray(record.available)) {
731
+ throw new Error('codexPluginListInvalid: expected installed[] and available[].');
732
+ }
733
+ return record.installed.map(readCodexPluginListEntry);
734
+ }
735
+ function isCodexPluginActive(entries, pluginId) {
736
+ const matches = entries.filter((entry) => entry.pluginId === pluginId);
737
+ if (matches.length > 1) {
738
+ throw new Error(`codexPluginListInvalid: duplicate plugin ID ${pluginId}.`);
739
+ }
740
+ return matches.length === 1 && matches[0].enabled;
741
+ }
742
+ export function postcheckCodexProjectPluginActivation(options) {
743
+ const exactActive = isCodexPluginActive(parseCodexPluginListJson(options.exactResult.stdout), options.pluginId);
744
+ const neutralActive = isCodexPluginActive(parseCodexPluginListJson(options.neutralResult.stdout), options.pluginId);
745
+ if (exactActive !== (options.userEnabled || options.projectEnabled)
746
+ || neutralActive !== options.userEnabled) {
747
+ throw new CodexProjectConfigNotEffectiveError(options.pluginId);
748
+ }
416
749
  return {
417
- command: 'codex',
418
- args: ['plugin', 'marketplace', 'remove', marketplaceName],
419
- cwd,
420
- env,
750
+ effective: true,
751
+ pluginId: options.pluginId,
752
+ exactActive,
753
+ neutralActive,
421
754
  };
422
755
  }
756
+ export function buildCodexPluginRemoveInvocation(manager, pluginId, cwd, env) {
757
+ return buildCodexInvocation(manager, ['plugin', 'remove', pluginId], cwd, env);
758
+ }
759
+ export function buildCodexMarketplaceAddInvocation(manager, awHome, cwd, env) {
760
+ return buildCodexInvocation(manager, ['plugin', 'marketplace', 'add', awHome], cwd, env);
761
+ }
762
+ export function buildCodexMarketplaceRemoveInvocation(manager, marketplaceName, cwd, env) {
763
+ return buildCodexInvocation(manager, ['plugin', 'marketplace', 'remove', marketplaceName], cwd, env);
764
+ }
423
765
  export async function runNativeCliChecked(invocation, runner) {
424
766
  const result = await runNativeCli(invocation, runner);
425
767
  if (result.exitCode !== 0) {