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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/dist/authoring/assets/aw-config.mjs +100 -501
  2. package/dist/authoring/assets/aw-config.mjs.map +1 -1
  3. package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
  4. package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
  5. package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
  6. package/dist/authoring/scripts/add-skill.mjs +4 -4
  7. package/dist/authoring/scripts/add-skill.mjs.map +1 -1
  8. package/dist/authoring/scripts/init-plugin.mjs +67 -97
  9. package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
  10. package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
  11. package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
  12. package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
  13. package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
  14. package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
  15. package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -92
  16. package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -124
  17. package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
  18. package/dist/authoring/scripts/plugin-status.mjs +8 -11
  19. package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
  20. package/dist/authoring/scripts/remove-plugin.mjs +3 -2
  21. package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
  22. package/dist/authoring/scripts/validate-plugin.mjs +552 -1142
  23. package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
  24. package/dist/native-runtime/reader-runtime.mjs +34 -0
  25. package/dist/native-runtime/reader.d.mts +6 -0
  26. package/dist/native-runtime/reader.mjs +11 -0
  27. package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
  28. package/dist/scripts/aw-skill-eval-materializer.js +306 -0
  29. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
  30. package/dist/scripts/bundle-plugins.d.ts +1 -0
  31. package/dist/scripts/bundle-plugins.js +19 -8
  32. package/dist/scripts/bundle-plugins.js.map +1 -1
  33. package/dist/scripts/plugin-staging.d.ts +7 -9
  34. package/dist/scripts/plugin-staging.js +18 -29
  35. package/dist/scripts/plugin-staging.js.map +1 -1
  36. package/dist/scripts/plugin-test-reporter.d.mts +2 -0
  37. package/dist/scripts/plugin-test-reporter.mjs +21 -0
  38. package/dist/scripts/plugin-test-reporter.mjs.map +1 -0
  39. package/dist/scripts/test-plugin-scripts.d.ts +5 -0
  40. package/dist/scripts/test-plugin-scripts.js +208 -89
  41. package/dist/scripts/test-plugin-scripts.js.map +1 -1
  42. package/dist/scripts/test-workers.d.mts +24 -0
  43. package/dist/scripts/test-workers.mjs +59 -0
  44. package/dist/scripts/test-workers.mjs.map +1 -0
  45. package/dist/src/adapters/helpers.d.ts +7 -0
  46. package/dist/src/adapters/helpers.js +2 -2
  47. package/dist/src/adapters/helpers.js.map +1 -1
  48. package/dist/src/authoring/workspace-commands.d.ts +19 -1
  49. package/dist/src/authoring/workspace-commands.js +24 -5
  50. package/dist/src/authoring/workspace-commands.js.map +1 -1
  51. package/dist/src/commands/aw-capabilities.d.ts +78 -0
  52. package/dist/src/commands/aw-capabilities.js +266 -0
  53. package/dist/src/commands/aw-capabilities.js.map +1 -0
  54. package/dist/src/commands/catalog-dev-source.d.ts +154 -0
  55. package/dist/src/commands/catalog-dev-source.js +655 -0
  56. package/dist/src/commands/catalog-dev-source.js.map +1 -0
  57. package/dist/src/commands/catalog-generation.d.ts +21 -0
  58. package/dist/src/commands/catalog-generation.js +9 -0
  59. package/dist/src/commands/catalog-generation.js.map +1 -0
  60. package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
  61. package/dist/src/commands/catalog-publication-inspection.js +475 -63
  62. package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
  63. package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
  64. package/dist/src/commands/catalog-publication-journal.js +292 -0
  65. package/dist/src/commands/catalog-publication-journal.js.map +1 -0
  66. package/dist/src/commands/catalog-publication-target.d.ts +18 -0
  67. package/dist/src/commands/catalog-publication-target.js +95 -0
  68. package/dist/src/commands/catalog-publication-target.js.map +1 -0
  69. package/dist/src/commands/catalog-publish.d.ts +73 -15
  70. package/dist/src/commands/catalog-publish.js +701 -212
  71. package/dist/src/commands/catalog-publish.js.map +1 -1
  72. package/dist/src/commands/catalog-source.d.ts +60 -22
  73. package/dist/src/commands/catalog-source.js +311 -91
  74. package/dist/src/commands/catalog-source.js.map +1 -1
  75. package/dist/src/commands/catalog-status.d.ts +18 -22
  76. package/dist/src/commands/catalog-status.js +81 -115
  77. package/dist/src/commands/catalog-status.js.map +1 -1
  78. package/dist/src/commands/catalog-store.d.ts +104 -0
  79. package/dist/src/commands/catalog-store.js +685 -0
  80. package/dist/src/commands/catalog-store.js.map +1 -0
  81. package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
  82. package/dist/src/commands/catalog-workspace-resolution.js +42 -0
  83. package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
  84. package/dist/src/commands/console.js +28 -17
  85. package/dist/src/commands/console.js.map +1 -1
  86. package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
  87. package/dist/src/commands/dependency-operation-plan.js +289 -7
  88. package/dist/src/commands/dependency-operation-plan.js.map +1 -1
  89. package/dist/src/commands/init.d.ts +5 -11
  90. package/dist/src/commands/init.js +30 -51
  91. package/dist/src/commands/init.js.map +1 -1
  92. package/dist/src/commands/managed-commands.d.ts +28 -0
  93. package/dist/src/commands/managed-commands.js +315 -0
  94. package/dist/src/commands/managed-commands.js.map +1 -0
  95. package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
  96. package/dist/src/commands/offline-cleanup-evidence.js +181 -0
  97. package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
  98. package/dist/src/commands/operation-plan.d.ts +182 -0
  99. package/dist/src/commands/operation-plan.js +71 -0
  100. package/dist/src/commands/operation-plan.js.map +1 -0
  101. package/dist/src/commands/operation-planner.d.ts +47 -0
  102. package/dist/src/commands/operation-planner.js +142 -0
  103. package/dist/src/commands/operation-planner.js.map +1 -0
  104. package/dist/src/commands/options.d.ts +9 -7
  105. package/dist/src/commands/options.js +83 -21
  106. package/dist/src/commands/options.js.map +1 -1
  107. package/dist/src/commands/plugin-capabilities.js +65 -4
  108. package/dist/src/commands/plugin-capabilities.js.map +1 -1
  109. package/dist/src/commands/rebuild-command.d.ts +78 -31
  110. package/dist/src/commands/rebuild-command.js +5229 -942
  111. package/dist/src/commands/rebuild-command.js.map +1 -1
  112. package/dist/src/commands/rebuild-integration.d.ts +143 -21
  113. package/dist/src/commands/rebuild-integration.js +3384 -1342
  114. package/dist/src/commands/rebuild-integration.js.map +1 -1
  115. package/dist/src/commands/rebuild-operations.d.ts +60 -30
  116. package/dist/src/commands/rebuild-operations.js +267 -320
  117. package/dist/src/commands/rebuild-operations.js.map +1 -1
  118. package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
  119. package/dist/src/commands/reconcile-operation-plan.js +47 -0
  120. package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
  121. package/dist/src/commands/review-inspection.d.ts +60 -0
  122. package/dist/src/commands/review-inspection.js +422 -0
  123. package/dist/src/commands/review-inspection.js.map +1 -0
  124. package/dist/src/commands/review-preparation.d.ts +49 -0
  125. package/dist/src/commands/review-preparation.js +427 -0
  126. package/dist/src/commands/review-preparation.js.map +1 -0
  127. package/dist/src/commands/runtime.d.ts +1 -5
  128. package/dist/src/commands/runtime.js +27 -53
  129. package/dist/src/commands/runtime.js.map +1 -1
  130. package/dist/src/commands/skill-eval.d.ts +39 -0
  131. package/dist/src/commands/skill-eval.js +400 -0
  132. package/dist/src/commands/skill-eval.js.map +1 -0
  133. package/dist/src/commands/status-v6.d.ts +279 -0
  134. package/dist/src/commands/status-v6.js +2785 -0
  135. package/dist/src/commands/status-v6.js.map +1 -0
  136. package/dist/src/commands/sync-command.d.ts +40 -0
  137. package/dist/src/commands/sync-command.js +254 -0
  138. package/dist/src/commands/sync-command.js.map +1 -0
  139. package/dist/src/commands/wizard.d.ts +8 -5
  140. package/dist/src/commands/wizard.js +6 -4
  141. package/dist/src/commands/wizard.js.map +1 -1
  142. package/dist/src/commands/write-commands.d.ts +9 -3
  143. package/dist/src/commands/write-commands.js +136 -31
  144. package/dist/src/commands/write-commands.js.map +1 -1
  145. package/dist/src/constants.d.ts +7 -2
  146. package/dist/src/constants.js +7 -2
  147. package/dist/src/constants.js.map +1 -1
  148. package/dist/src/eval/manifest-v1.d.ts +68 -0
  149. package/dist/src/eval/manifest-v1.js +353 -0
  150. package/dist/src/eval/manifest-v1.js.map +1 -0
  151. package/dist/src/generators/local-plugin.d.ts +5 -1
  152. package/dist/src/generators/local-plugin.js +261 -109
  153. package/dist/src/generators/local-plugin.js.map +1 -1
  154. package/dist/src/generators/permissions.d.ts +5 -2
  155. package/dist/src/generators/permissions.js +28 -15
  156. package/dist/src/generators/permissions.js.map +1 -1
  157. package/dist/src/index.d.ts +10 -4
  158. package/dist/src/index.js +1774 -609
  159. package/dist/src/index.js.map +1 -1
  160. package/dist/src/output/command-receipt.d.ts +47 -46
  161. package/dist/src/output/command-receipt.js +277 -79
  162. package/dist/src/output/command-receipt.js.map +1 -1
  163. package/dist/src/output/model.d.ts +3 -44
  164. package/dist/src/output/model.js +1 -144
  165. package/dist/src/output/model.js.map +1 -1
  166. package/dist/src/output/rebuild-progress.js +15 -13
  167. package/dist/src/output/rebuild-progress.js.map +1 -1
  168. package/dist/src/portable/commands.d.ts +46 -7
  169. package/dist/src/portable/commands.js +349 -37
  170. package/dist/src/portable/commands.js.map +1 -1
  171. package/dist/src/portable/materializer.d.ts +17 -4
  172. package/dist/src/portable/materializer.js +186 -41
  173. package/dist/src/portable/materializer.js.map +1 -1
  174. package/dist/src/portable/skills-cli.d.ts +15 -7
  175. package/dist/src/portable/skills-cli.js +74 -20
  176. package/dist/src/portable/skills-cli.js.map +1 -1
  177. package/dist/src/review/eval-source-input.d.ts +43 -0
  178. package/dist/src/review/eval-source-input.js +207 -0
  179. package/dist/src/review/eval-source-input.js.map +1 -0
  180. package/dist/src/review/review-profile.d.ts +17 -0
  181. package/dist/src/review/review-profile.js +234 -0
  182. package/dist/src/review/review-profile.js.map +1 -0
  183. package/dist/src/review/review-selection.d.ts +30 -0
  184. package/dist/src/review/review-selection.js +527 -0
  185. package/dist/src/review/review-selection.js.map +1 -0
  186. package/dist/src/review/review-types.d.ts +68 -0
  187. package/dist/src/review/review-types.js +16 -0
  188. package/dist/src/review/review-types.js.map +1 -0
  189. package/dist/src/review/skill-materialization.d.ts +26 -0
  190. package/dist/src/review/skill-materialization.js +217 -0
  191. package/dist/src/review/skill-materialization.js.map +1 -0
  192. package/dist/src/review/source-binding.d.ts +183 -0
  193. package/dist/src/review/source-binding.js +708 -0
  194. package/dist/src/review/source-binding.js.map +1 -0
  195. package/dist/src/tui/catalog-freshness.d.ts +1 -0
  196. package/dist/src/tui/catalog-freshness.js +2 -0
  197. package/dist/src/tui/catalog-freshness.js.map +1 -0
  198. package/dist/src/tui/catalog-generation.d.ts +21 -0
  199. package/dist/src/tui/catalog-generation.js +156 -0
  200. package/dist/src/tui/catalog-generation.js.map +1 -0
  201. package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
  202. package/dist/src/tui/catalog-sources/projection.js +17 -0
  203. package/dist/src/tui/catalog-sources/projection.js.map +1 -0
  204. package/dist/src/tui/catalog-sources/review.d.ts +3 -0
  205. package/dist/src/tui/catalog-sources/review.js +13 -0
  206. package/dist/src/tui/catalog-sources/review.js.map +1 -0
  207. package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
  208. package/dist/src/tui/catalog-sources/screens.js +40 -0
  209. package/dist/src/tui/catalog-sources/screens.js.map +1 -0
  210. package/dist/src/tui/catalog-sources/session.d.ts +32 -0
  211. package/dist/src/tui/catalog-sources/session.js +300 -0
  212. package/dist/src/tui/catalog-sources/session.js.map +1 -0
  213. package/dist/src/tui/catalog-sources/types.d.ts +54 -0
  214. package/dist/src/tui/catalog-sources/types.js +2 -0
  215. package/dist/src/tui/catalog-sources/types.js.map +1 -0
  216. package/dist/src/tui/catalog-store-task.d.ts +16 -0
  217. package/dist/src/tui/catalog-store-task.js +19 -0
  218. package/dist/src/tui/catalog-store-task.js.map +1 -0
  219. package/dist/src/tui/clipboard.d.ts +13 -0
  220. package/dist/src/tui/clipboard.js +95 -0
  221. package/dist/src/tui/clipboard.js.map +1 -0
  222. package/dist/src/tui/components.d.ts +110 -3
  223. package/dist/src/tui/components.js +183 -36
  224. package/dist/src/tui/components.js.map +1 -1
  225. package/dist/src/tui/config-array-draft.d.ts +29 -0
  226. package/dist/src/tui/config-array-draft.js +48 -0
  227. package/dist/src/tui/config-array-draft.js.map +1 -0
  228. package/dist/src/tui/config-leaf-editor.d.ts +19 -0
  229. package/dist/src/tui/config-leaf-editor.js +212 -0
  230. package/dist/src/tui/config-leaf-editor.js.map +1 -0
  231. package/dist/src/tui/config-references.d.ts +34 -0
  232. package/dist/src/tui/config-references.js +70 -0
  233. package/dist/src/tui/config-references.js.map +1 -0
  234. package/dist/src/tui/config-value-presentation.d.ts +20 -0
  235. package/dist/src/tui/config-value-presentation.js +104 -0
  236. package/dist/src/tui/config-value-presentation.js.map +1 -0
  237. package/dist/src/tui/console-app-v4.d.ts +14 -4
  238. package/dist/src/tui/console-app-v4.js +9205 -1951
  239. package/dist/src/tui/console-app-v4.js.map +1 -1
  240. package/dist/src/tui/content-item-card.d.ts +13 -0
  241. package/dist/src/tui/content-item-card.js +51 -0
  242. package/dist/src/tui/content-item-card.js.map +1 -0
  243. package/dist/src/tui/controller-runtime.d.ts +10 -2
  244. package/dist/src/tui/controller-runtime.js +3289 -388
  245. package/dist/src/tui/controller-runtime.js.map +1 -1
  246. package/dist/src/tui/controller.d.ts +622 -45
  247. package/dist/src/tui/controller.js +3589 -768
  248. package/dist/src/tui/controller.js.map +1 -1
  249. package/dist/src/tui/dependency-graph-view.d.ts +39 -0
  250. package/dist/src/tui/dependency-graph-view.js +121 -0
  251. package/dist/src/tui/dependency-graph-view.js.map +1 -0
  252. package/dist/src/tui/dependency-graph.d.ts +81 -0
  253. package/dist/src/tui/dependency-graph.js +452 -0
  254. package/dist/src/tui/dependency-graph.js.map +1 -0
  255. package/dist/src/tui/diagnostic-projection.d.ts +23 -0
  256. package/dist/src/tui/diagnostic-projection.js +595 -0
  257. package/dist/src/tui/diagnostic-projection.js.map +1 -0
  258. package/dist/src/tui/diagnostics.d.ts +3 -3
  259. package/dist/src/tui/diagnostics.js +14 -2
  260. package/dist/src/tui/diagnostics.js.map +1 -1
  261. package/dist/src/tui/entity-cards.d.ts +55 -0
  262. package/dist/src/tui/entity-cards.js +220 -0
  263. package/dist/src/tui/entity-cards.js.map +1 -0
  264. package/dist/src/tui/glossary.d.ts +23 -0
  265. package/dist/src/tui/glossary.js +42 -0
  266. package/dist/src/tui/glossary.js.map +1 -0
  267. package/dist/src/tui/index.d.ts +6 -1
  268. package/dist/src/tui/index.js +5 -1
  269. package/dist/src/tui/index.js.map +1 -1
  270. package/dist/src/tui/input-display.d.ts +9 -0
  271. package/dist/src/tui/input-display.js +58 -0
  272. package/dist/src/tui/input-display.js.map +1 -0
  273. package/dist/src/tui/keys.d.ts +44 -0
  274. package/dist/src/tui/keys.js +43 -15
  275. package/dist/src/tui/keys.js.map +1 -1
  276. package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
  277. package/dist/src/tui/lifecycle-action-view.js +36 -0
  278. package/dist/src/tui/lifecycle-action-view.js.map +1 -0
  279. package/dist/src/tui/model.d.ts +224 -31
  280. package/dist/src/tui/model.js +1510 -397
  281. package/dist/src/tui/model.js.map +1 -1
  282. package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
  283. package/dist/src/tui/operation-diagnostic-screens.js +71 -0
  284. package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
  285. package/dist/src/tui/operation-history.d.ts +81 -0
  286. package/dist/src/tui/operation-history.js +136 -0
  287. package/dist/src/tui/operation-history.js.map +1 -0
  288. package/dist/src/tui/operation-review-planner.d.ts +21 -0
  289. package/dist/src/tui/operation-review-planner.js +1392 -0
  290. package/dist/src/tui/operation-review-planner.js.map +1 -0
  291. package/dist/src/tui/plugin-content.d.ts +31 -0
  292. package/dist/src/tui/plugin-content.js +680 -0
  293. package/dist/src/tui/plugin-content.js.map +1 -0
  294. package/dist/src/tui/plugin-detail.d.ts +52 -0
  295. package/dist/src/tui/plugin-detail.js +165 -0
  296. package/dist/src/tui/plugin-detail.js.map +1 -0
  297. package/dist/src/tui/plugin-write-task.d.ts +69 -0
  298. package/dist/src/tui/plugin-write-task.js +286 -0
  299. package/dist/src/tui/plugin-write-task.js.map +1 -0
  300. package/dist/src/tui/project-inventory.d.ts +68 -0
  301. package/dist/src/tui/project-inventory.js +203 -0
  302. package/dist/src/tui/project-inventory.js.map +1 -0
  303. package/dist/src/tui/prompt.js +4 -15
  304. package/dist/src/tui/prompt.js.map +1 -1
  305. package/dist/src/tui/query-header.d.ts +30 -0
  306. package/dist/src/tui/query-header.js +40 -0
  307. package/dist/src/tui/query-header.js.map +1 -0
  308. package/dist/src/tui/reader.d.ts +37 -0
  309. package/dist/src/tui/reader.js +47 -0
  310. package/dist/src/tui/reader.js.map +1 -0
  311. package/dist/src/tui/router.d.ts +197 -10
  312. package/dist/src/tui/router.js +338 -50
  313. package/dist/src/tui/router.js.map +1 -1
  314. package/dist/src/tui/screen-registry.d.ts +701 -0
  315. package/dist/src/tui/screen-registry.js +230 -0
  316. package/dist/src/tui/screen-registry.js.map +1 -0
  317. package/dist/src/tui/session-console-app.d.ts +6 -0
  318. package/dist/src/tui/session-console-app.js +13 -0
  319. package/dist/src/tui/session-console-app.js.map +1 -0
  320. package/dist/src/tui/session-host.d.ts +45 -0
  321. package/dist/src/tui/session-host.js +209 -0
  322. package/dist/src/tui/session-host.js.map +1 -0
  323. package/dist/src/tui/source-detail-card.d.ts +29 -0
  324. package/dist/src/tui/source-detail-card.js +45 -0
  325. package/dist/src/tui/source-detail-card.js.map +1 -0
  326. package/dist/src/tui/source-ref-presets.d.ts +3 -0
  327. package/dist/src/tui/source-ref-presets.js +11 -0
  328. package/dist/src/tui/source-ref-presets.js.map +1 -0
  329. package/dist/src/tui/theme.d.ts +12 -0
  330. package/dist/src/tui/theme.js +12 -0
  331. package/dist/src/tui/theme.js.map +1 -1
  332. package/dist/src/tui/viewport.d.ts +1 -0
  333. package/dist/src/tui/viewport.js +23 -0
  334. package/dist/src/tui/viewport.js.map +1 -1
  335. package/dist/src/tui/views.js +31 -3
  336. package/dist/src/tui/views.js.map +1 -1
  337. package/dist/src/tui/wizard.js +37 -13
  338. package/dist/src/tui/wizard.js.map +1 -1
  339. package/dist/src/types.d.ts +264 -21
  340. package/dist/src/types.js +1 -0
  341. package/dist/src/types.js.map +1 -1
  342. package/dist/src/utils/agent-version.d.ts +7 -1
  343. package/dist/src/utils/agent-version.js +36 -7
  344. package/dist/src/utils/agent-version.js.map +1 -1
  345. package/dist/src/utils/artifact-plan.d.ts +8 -6
  346. package/dist/src/utils/artifact-plan.js +67 -13
  347. package/dist/src/utils/artifact-plan.js.map +1 -1
  348. package/dist/src/utils/artifact-renderer.d.ts +24 -10
  349. package/dist/src/utils/artifact-renderer.js +230 -220
  350. package/dist/src/utils/artifact-renderer.js.map +1 -1
  351. package/dist/src/utils/artifact-request.d.ts +32 -0
  352. package/dist/src/utils/artifact-request.js +90 -0
  353. package/dist/src/utils/artifact-request.js.map +1 -0
  354. package/dist/src/utils/artifact-sources.d.ts +4 -0
  355. package/dist/src/utils/artifact-sources.js +17 -0
  356. package/dist/src/utils/artifact-sources.js.map +1 -1
  357. package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
  358. package/dist/src/utils/aw-home-mutation-lock.js +32 -4
  359. package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
  360. package/dist/src/utils/bundle-integrity.d.ts +0 -1
  361. package/dist/src/utils/bundle-integrity.js +0 -25
  362. package/dist/src/utils/bundle-integrity.js.map +1 -1
  363. package/dist/src/utils/bundle-layout.js +29 -29
  364. package/dist/src/utils/bundle-layout.js.map +1 -1
  365. package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
  366. package/dist/src/utils/catalog-capability-projection.js +14 -0
  367. package/dist/src/utils/catalog-capability-projection.js.map +1 -0
  368. package/dist/src/utils/catalog-digests.d.ts +10 -0
  369. package/dist/src/utils/catalog-digests.js +57 -20
  370. package/dist/src/utils/catalog-digests.js.map +1 -1
  371. package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
  372. package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
  373. package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
  374. package/dist/src/utils/catalog-generation-error.d.ts +16 -0
  375. package/dist/src/utils/catalog-generation-error.js +30 -0
  376. package/dist/src/utils/catalog-generation-error.js.map +1 -0
  377. package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
  378. package/dist/src/utils/catalog-generation-resolver.js +273 -0
  379. package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
  380. package/dist/src/utils/catalog-generation-service.d.ts +172 -0
  381. package/dist/src/utils/catalog-generation-service.js +1271 -0
  382. package/dist/src/utils/catalog-generation-service.js.map +1 -0
  383. package/dist/src/utils/catalog-generation-state.d.ts +22 -0
  384. package/dist/src/utils/catalog-generation-state.js +192 -0
  385. package/dist/src/utils/catalog-generation-state.js.map +1 -0
  386. package/dist/src/utils/catalog-generation-store.d.ts +58 -0
  387. package/dist/src/utils/catalog-generation-store.js +452 -0
  388. package/dist/src/utils/catalog-generation-store.js.map +1 -0
  389. package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
  390. package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
  391. package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
  392. package/dist/src/utils/catalog-operation-context.d.ts +20 -0
  393. package/dist/src/utils/catalog-operation-context.js +142 -0
  394. package/dist/src/utils/catalog-operation-context.js.map +1 -0
  395. package/dist/src/utils/catalog-public-error.d.ts +7 -3
  396. package/dist/src/utils/catalog-public-error.js +28 -8
  397. package/dist/src/utils/catalog-public-error.js.map +1 -1
  398. package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
  399. package/dist/src/utils/catalog-runtime-projection.js +5 -40
  400. package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
  401. package/dist/src/utils/catalog-snapshot.d.ts +5 -3
  402. package/dist/src/utils/catalog-snapshot.js +11 -3
  403. package/dist/src/utils/catalog-snapshot.js.map +1 -1
  404. package/dist/src/utils/catalog-source-identity.d.ts +1 -0
  405. package/dist/src/utils/catalog-source-identity.js +21 -2
  406. package/dist/src/utils/catalog-source-identity.js.map +1 -1
  407. package/dist/src/utils/catalog-source-impact.d.ts +21 -0
  408. package/dist/src/utils/catalog-source-impact.js +344 -0
  409. package/dist/src/utils/catalog-source-impact.js.map +1 -0
  410. package/dist/src/utils/catalog-source-references.d.ts +3 -2
  411. package/dist/src/utils/catalog-source-references.js +195 -347
  412. package/dist/src/utils/catalog-source-references.js.map +1 -1
  413. package/dist/src/utils/catalog-sources.d.ts +15 -1
  414. package/dist/src/utils/catalog-sources.js +206 -27
  415. package/dist/src/utils/catalog-sources.js.map +1 -1
  416. package/dist/src/utils/claude-skills-root.d.ts +8 -0
  417. package/dist/src/utils/claude-skills-root.js +76 -0
  418. package/dist/src/utils/claude-skills-root.js.map +1 -0
  419. package/dist/src/utils/codex-config.d.ts +2 -0
  420. package/dist/src/utils/codex-config.js +26 -5
  421. package/dist/src/utils/codex-config.js.map +1 -1
  422. package/dist/src/utils/codex-manager.d.ts +79 -0
  423. package/dist/src/utils/codex-manager.js +735 -0
  424. package/dist/src/utils/codex-manager.js.map +1 -0
  425. package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
  426. package/dist/src/utils/codex-marketplace-path.js +45 -0
  427. package/dist/src/utils/codex-marketplace-path.js.map +1 -0
  428. package/dist/src/utils/codex-native-observation.d.ts +49 -0
  429. package/dist/src/utils/codex-native-observation.js +154 -0
  430. package/dist/src/utils/codex-native-observation.js.map +1 -0
  431. package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
  432. package/dist/src/utils/codex-native-render-receipt.js +205 -0
  433. package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
  434. package/dist/src/utils/codex-reconciler.d.ts +126 -0
  435. package/dist/src/utils/codex-reconciler.js +298 -0
  436. package/dist/src/utils/codex-reconciler.js.map +1 -0
  437. package/dist/src/utils/codex-shared-native.d.ts +43 -0
  438. package/dist/src/utils/codex-shared-native.js +81 -0
  439. package/dist/src/utils/codex-shared-native.js.map +1 -0
  440. package/dist/src/utils/codex-skill-staging.d.ts +2 -0
  441. package/dist/src/utils/codex-skill-staging.js.map +1 -1
  442. package/dist/src/utils/codex-skills-root.d.ts +4 -0
  443. package/dist/src/utils/codex-skills-root.js +25 -0
  444. package/dist/src/utils/codex-skills-root.js.map +1 -0
  445. package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
  446. package/dist/src/utils/codex-surface-analysis.js +247 -0
  447. package/dist/src/utils/codex-surface-analysis.js.map +1 -0
  448. package/dist/src/utils/dynamic-skill-tree.d.ts +5 -0
  449. package/dist/src/utils/dynamic-skill-tree.js +56 -7
  450. package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
  451. package/dist/src/utils/git-catalog-provider.d.ts +16 -0
  452. package/dist/src/utils/git-catalog-provider.js +177 -145
  453. package/dist/src/utils/git-catalog-provider.js.map +1 -1
  454. package/dist/src/utils/local-marketplace.d.ts +27 -1
  455. package/dist/src/utils/local-marketplace.js +434 -84
  456. package/dist/src/utils/local-marketplace.js.map +1 -1
  457. package/dist/src/utils/managed-command-closure.d.ts +3 -0
  458. package/dist/src/utils/managed-command-closure.js +35 -0
  459. package/dist/src/utils/managed-command-closure.js.map +1 -0
  460. package/dist/src/utils/managed-command-evidence.d.ts +7 -0
  461. package/dist/src/utils/managed-command-evidence.js +86 -0
  462. package/dist/src/utils/managed-command-evidence.js.map +1 -0
  463. package/dist/src/utils/managed-command-materialization.d.ts +115 -0
  464. package/dist/src/utils/managed-command-materialization.js +359 -0
  465. package/dist/src/utils/managed-command-materialization.js.map +1 -0
  466. package/dist/src/utils/managed-command-runtime.d.ts +33 -0
  467. package/dist/src/utils/managed-command-runtime.js +121 -0
  468. package/dist/src/utils/managed-command-runtime.js.map +1 -0
  469. package/dist/src/utils/managed-command-store.d.ts +128 -0
  470. package/dist/src/utils/managed-command-store.js +589 -0
  471. package/dist/src/utils/managed-command-store.js.map +1 -0
  472. package/dist/src/utils/manifest.d.ts +1 -3
  473. package/dist/src/utils/manifest.js +1 -3
  474. package/dist/src/utils/manifest.js.map +1 -1
  475. package/dist/src/utils/multi-source-catalog.d.ts +3 -9
  476. package/dist/src/utils/multi-source-catalog.js +54 -110
  477. package/dist/src/utils/multi-source-catalog.js.map +1 -1
  478. package/dist/src/utils/native-cli.d.ts +61 -7
  479. package/dist/src/utils/native-cli.js +426 -58
  480. package/dist/src/utils/native-cli.js.map +1 -1
  481. package/dist/src/utils/native-tool-context.d.ts +14 -0
  482. package/dist/src/utils/native-tool-context.js +38 -0
  483. package/dist/src/utils/native-tool-context.js.map +1 -0
  484. package/dist/src/utils/native-tool-review.d.ts +21 -0
  485. package/dist/src/utils/native-tool-review.js +102 -0
  486. package/dist/src/utils/native-tool-review.js.map +1 -0
  487. package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
  488. package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
  489. package/dist/src/utils/ownership.d.ts +88 -20
  490. package/dist/src/utils/ownership.js +185 -223
  491. package/dist/src/utils/ownership.js.map +1 -1
  492. package/dist/src/utils/path-catalog-provider.d.ts +1 -1
  493. package/dist/src/utils/path-catalog-provider.js +54 -65
  494. package/dist/src/utils/path-catalog-provider.js.map +1 -1
  495. package/dist/src/utils/paths.d.ts +0 -1
  496. package/dist/src/utils/paths.js +0 -1
  497. package/dist/src/utils/paths.js.map +1 -1
  498. package/dist/src/utils/plugin-config-impact.d.ts +40 -0
  499. package/dist/src/utils/plugin-config-impact.js +373 -0
  500. package/dist/src/utils/plugin-config-impact.js.map +1 -0
  501. package/dist/src/utils/plugin-config-write.d.ts +52 -27
  502. package/dist/src/utils/plugin-config-write.js +1112 -298
  503. package/dist/src/utils/plugin-config-write.js.map +1 -1
  504. package/dist/src/utils/plugin-config.d.ts +153 -93
  505. package/dist/src/utils/plugin-config.js +1116 -968
  506. package/dist/src/utils/plugin-config.js.map +1 -1
  507. package/dist/src/utils/plugin-intent-state.d.ts +49 -0
  508. package/dist/src/utils/plugin-intent-state.js +320 -0
  509. package/dist/src/utils/plugin-intent-state.js.map +1 -0
  510. package/dist/src/utils/plugin-scripts.d.ts +66 -125
  511. package/dist/src/utils/plugin-scripts.js +518 -526
  512. package/dist/src/utils/plugin-scripts.js.map +1 -1
  513. package/dist/src/utils/process-lock.js +14 -5
  514. package/dist/src/utils/process-lock.js.map +1 -1
  515. package/dist/src/utils/process-tree.d.ts +2 -2
  516. package/dist/src/utils/process-tree.js +1 -1
  517. package/dist/src/utils/process-tree.js.map +1 -1
  518. package/dist/src/utils/project-boundary.d.ts +11 -13
  519. package/dist/src/utils/project-boundary.js +28 -34
  520. package/dist/src/utils/project-boundary.js.map +1 -1
  521. package/dist/src/utils/rendered-contract.js +18 -1
  522. package/dist/src/utils/rendered-contract.js.map +1 -1
  523. package/dist/src/utils/runtime-config.d.ts +20 -0
  524. package/dist/src/utils/runtime-config.js +75 -0
  525. package/dist/src/utils/runtime-config.js.map +1 -0
  526. package/dist/src/utils/runtime-skill-closure.js +47 -6
  527. package/dist/src/utils/runtime-skill-closure.js.map +1 -1
  528. package/dist/src/utils/safe-fs.d.ts +21 -0
  529. package/dist/src/utils/safe-fs.js +111 -0
  530. package/dist/src/utils/safe-fs.js.map +1 -0
  531. package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
  532. package/dist/src/utils/safe-operation-diagnostic.js +33 -0
  533. package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
  534. package/dist/src/utils/sensitive-content.d.ts +4 -0
  535. package/dist/src/utils/sensitive-content.js +36 -0
  536. package/dist/src/utils/sensitive-content.js.map +1 -0
  537. package/dist/src/utils/state-paths.js +7 -2
  538. package/dist/src/utils/state-paths.js.map +1 -1
  539. package/dist/src/utils/target-eligibility.d.ts +8 -2
  540. package/dist/src/utils/target-eligibility.js +17 -8
  541. package/dist/src/utils/target-eligibility.js.map +1 -1
  542. package/dist/src/utils/windows-claude-shim.d.ts +7 -0
  543. package/dist/src/utils/windows-claude-shim.js +10 -0
  544. package/dist/src/utils/windows-claude-shim.js.map +1 -0
  545. package/dist/src/utils/windows-npm-shim.d.ts +14 -0
  546. package/dist/src/utils/windows-npm-shim.js +140 -0
  547. package/dist/src/utils/windows-npm-shim.js.map +1 -0
  548. package/dist/vitest.config.js +100 -9
  549. package/dist/vitest.config.js.map +1 -1
  550. package/package.json +31 -21
  551. package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
  552. package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
  553. package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
  554. package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
  555. package/dist/scripts/aw-skill-eval-engine.js +0 -31
  556. package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
  557. package/dist/scripts/codex-eval-app-server.d.ts +0 -89
  558. package/dist/scripts/codex-eval-app-server.js +0 -1228
  559. package/dist/scripts/codex-eval-app-server.js.map +0 -1
  560. package/dist/scripts/codex-eval-isolation.d.ts +0 -61
  561. package/dist/scripts/codex-eval-isolation.js +0 -318
  562. package/dist/scripts/codex-eval-isolation.js.map +0 -1
  563. package/dist/scripts/codex-eval-process-management.d.ts +0 -8
  564. package/dist/scripts/codex-eval-process-management.js +0 -69
  565. package/dist/scripts/codex-eval-process-management.js.map +0 -1
  566. package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
  567. package/dist/scripts/codex-eval-process-tree.js +0 -803
  568. package/dist/scripts/codex-eval-process-tree.js.map +0 -1
  569. package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
  570. package/dist/scripts/codex-eval-runtime-config.js +0 -843
  571. package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
  572. package/dist/scripts/codex-trigger-eval.d.ts +0 -84
  573. package/dist/scripts/codex-trigger-eval.js +0 -968
  574. package/dist/scripts/codex-trigger-eval.js.map +0 -1
  575. package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
  576. package/dist/scripts/eval-plugin-skills-audited.js +0 -261
  577. package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
  578. package/dist/scripts/eval-plugin-skills.d.ts +0 -45
  579. package/dist/scripts/eval-plugin-skills.js +0 -1586
  580. package/dist/scripts/eval-plugin-skills.js.map +0 -1
  581. package/dist/scripts/eval-run-layout.d.ts +0 -17
  582. package/dist/scripts/eval-run-layout.js +0 -26
  583. package/dist/scripts/eval-run-layout.js.map +0 -1
  584. package/dist/scripts/plugin-eval-contract.d.ts +0 -185
  585. package/dist/scripts/plugin-eval-contract.js +0 -695
  586. package/dist/scripts/plugin-eval-contract.js.map +0 -1
  587. package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
  588. package/dist/scripts/plugin-eval-materializer.js +0 -421
  589. package/dist/scripts/plugin-eval-materializer.js.map +0 -1
  590. package/dist/scripts/skill-reporting.d.ts +0 -212
  591. package/dist/scripts/skill-reporting.js +0 -922
  592. package/dist/scripts/skill-reporting.js.map +0 -1
  593. package/dist/src/commands/review-publication.d.ts +0 -99
  594. package/dist/src/commands/review-publication.js +0 -904
  595. package/dist/src/commands/review-publication.js.map +0 -1
  596. package/dist/src/commands/status-v4.d.ts +0 -123
  597. package/dist/src/commands/status-v4.js +0 -905
  598. package/dist/src/commands/status-v4.js.map +0 -1
  599. package/dist/src/commands/status.d.ts +0 -93
  600. package/dist/src/commands/status.js +0 -442
  601. package/dist/src/commands/status.js.map +0 -1
  602. package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
  603. package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
  604. package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
  605. package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
  606. package/dist/src/utils/catalog-manifest-v3.js +0 -3
  607. package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
  608. package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
  609. package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
  610. package/dist/src/utils/catalog-source-cache.d.ts +0 -62
  611. package/dist/src/utils/catalog-source-cache.js +0 -296
  612. package/dist/src/utils/catalog-source-cache.js.map +0 -1
  613. package/dist/src/utils/codex-project-surface.d.ts +0 -3
  614. package/dist/src/utils/codex-project-surface.js +0 -49
  615. package/dist/src/utils/codex-project-surface.js.map +0 -1
  616. package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
  617. package/dist/src/utils/lifecycle-active-store.js +0 -1276
  618. package/dist/src/utils/lifecycle-active-store.js.map +0 -1
  619. package/dist/src/utils/plugin-release.d.ts +0 -2
  620. package/dist/src/utils/plugin-release.js +0 -2
  621. package/dist/src/utils/plugin-release.js.map +0 -1
@@ -1,968 +0,0 @@
1
- import { execFile } from 'node:child_process';
2
- import { createHash, randomUUID } from 'node:crypto';
3
- import path from 'node:path';
4
- import { promisify } from 'node:util';
5
- import { pathToFileURL } from 'node:url';
6
- import { computeSkillDigest } from '@lesliechan721/agent-skill-eval';
7
- import fs from 'fs-extra';
8
- import { EvalAppServerSession, extractAppServerThreadId, inspectAppServerConfigWarning, runCodexEvalIsolationProbe, } from './codex-eval-app-server.js';
9
- import { codexEvalIsolationEvidence, inspectCodexEvalHostIsolation, } from './codex-eval-isolation.js';
10
- import { assertCodexEvalCanStartWork, applyCodexEvalProviderEnvironment, CODEX_EVAL_CLI_ENTRY_ENV, CODEX_EVAL_CLI_NODE_ENV, cleanCodexEvalRuntimeConfig, codexEvalRuntimeEvidence, createCodexEvalTemporaryRoot, materializeCodexEvalRuntimeHome, redactCodexEvalValue, } from './codex-eval-runtime-config.js';
11
- import { PLUGIN_EVAL_SCHEMA_VERSION, readPluginEvalTriggerCases, } from './plugin-eval-contract.js';
12
- const DEFAULT_OBSERVED_PROCESS_EVIDENCE = {
13
- mode: 'observed',
14
- inspectionAvailable: true,
15
- userAcknowledged: false,
16
- descendantCleanupGuaranteed: false,
17
- limitation: 'Process-tree inspection observes and cleans known descendants but does not guarantee descendant cleanup.',
18
- };
19
- async function createTriggerTemporaryRoot(workRoot, strict = false) {
20
- if (strict || !workRoot)
21
- return createCodexEvalTemporaryRoot('aw-trigger-eval-');
22
- await fs.ensureDir(workRoot);
23
- return createCodexEvalTemporaryRoot('trigger-', {
24
- allocate: () => fs.mkdtemp(path.join(workRoot, 'trigger-')),
25
- });
26
- }
27
- const execFileAsync = promisify(execFile);
28
- const PASS_THRESHOLD = 0.5;
29
- const PASSTHROUGH_ENV = new Set([
30
- 'PATH',
31
- CODEX_EVAL_CLI_ENTRY_ENV,
32
- CODEX_EVAL_CLI_NODE_ENV,
33
- 'LANG',
34
- 'LC_ALL',
35
- 'HTTP_PROXY',
36
- 'HTTPS_PROXY',
37
- 'ALL_PROXY',
38
- 'NO_PROXY',
39
- 'SSL_CERT_FILE',
40
- 'SSL_CERT_DIR',
41
- 'NODE_EXTRA_CA_CERTS',
42
- ]);
43
- const PROTECTED_ENV = new Set([
44
- 'HOME',
45
- 'USERPROFILE',
46
- 'CODEX_HOME',
47
- 'XDG_CACHE_HOME',
48
- 'XDG_CONFIG_HOME',
49
- 'XDG_STATE_HOME',
50
- 'TMPDIR',
51
- 'TEMP',
52
- 'TMP',
53
- 'PATH',
54
- CODEX_EVAL_CLI_ENTRY_ENV,
55
- CODEX_EVAL_CLI_NODE_ENV,
56
- ]);
57
- function isRecord(value) {
58
- return typeof value === 'object' && value !== null && !Array.isArray(value);
59
- }
60
- function sha256(value) {
61
- return `sha256:${createHash('sha256').update(value).digest('hex')}`;
62
- }
63
- async function writeJsonAtomic(filePath, value) {
64
- await fs.ensureDir(path.dirname(filePath));
65
- const temporary = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
66
- await fs.writeJson(temporary, value, { spaces: 2 });
67
- await fs.rename(temporary, filePath);
68
- }
69
- function stableJson(value) {
70
- if (Array.isArray(value)) {
71
- return `[${value.map(stableJson).join(',')}]`;
72
- }
73
- if (isRecord(value)) {
74
- return `{${Object.entries(value)
75
- .sort(([left], [right]) => left.localeCompare(right))
76
- .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)
77
- .join(',')}}`;
78
- }
79
- return JSON.stringify(value);
80
- }
81
- function buildIsolatedEnv(sourceEnv, runRoot, codexHome, runtime) {
82
- const env = {};
83
- for (const name of PASSTHROUGH_ENV) {
84
- if (sourceEnv[name] !== undefined) {
85
- env[name] = sourceEnv[name];
86
- }
87
- }
88
- const home = path.join(runRoot, 'home');
89
- const temp = path.join(runRoot, 'tmp');
90
- return applyCodexEvalProviderEnvironment({
91
- ...env,
92
- HOME: home,
93
- USERPROFILE: home,
94
- CODEX_HOME: codexHome,
95
- XDG_CACHE_HOME: path.join(runRoot, 'xdg-cache'),
96
- XDG_CONFIG_HOME: path.join(runRoot, 'xdg-config'),
97
- XDG_STATE_HOME: path.join(runRoot, 'xdg-state'),
98
- TMPDIR: temp,
99
- TEMP: temp,
100
- TMP: temp,
101
- NO_COLOR: '1',
102
- }, runtime);
103
- }
104
- async function snapshotWorkspace(root) {
105
- const snapshot = {};
106
- async function visit(current) {
107
- const entries = await fs.readdir(current, { withFileTypes: true }).catch(() => []);
108
- for (const entry of entries) {
109
- if (entry.name === '.git') {
110
- continue;
111
- }
112
- const absolutePath = path.join(current, entry.name);
113
- if (entry.isDirectory()) {
114
- await visit(absolutePath);
115
- }
116
- else if (entry.isFile()) {
117
- const relativePath = path.relative(root, absolutePath).split(path.sep).join('/');
118
- snapshot[relativePath] = sha256(await fs.readFile(absolutePath));
119
- }
120
- }
121
- }
122
- await visit(root);
123
- return snapshot;
124
- }
125
- function explicitSkillRequested(query, skillName) {
126
- const escaped = skillName.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
127
- return new RegExp(`(?:^|\\s)\\$${escaped}(?:\\s|$)`, 'u').test(query);
128
- }
129
- function expectedLoadedSkills(suite, evalCase) {
130
- if (evalCase.expected_loaded_skills) {
131
- return [...evalCase.expected_loaded_skills];
132
- }
133
- return evalCase.should_load_skill ? [suite.skill] : [];
134
- }
135
- function sameSkillSet(left, right) {
136
- return left.length === right.length && left.every((entry) => right.includes(entry));
137
- }
138
- function routeLabel(skills) {
139
- if (skills.length === 0)
140
- return 'neither';
141
- return [...skills].sort((left, right) => left.localeCompare(right)).join('+');
142
- }
143
- function normalizedCommandReadsSkill(command, skillPath) {
144
- const normalize = (value) => {
145
- let normalized = value.replaceAll('\\', '/').replaceAll('"', '').replaceAll("'", '');
146
- for (let index = 0; index < 3; index += 1) {
147
- normalized = normalized.replace(/(^|[\s/])\.\/(?=\S)/gu, '$1');
148
- }
149
- return normalized;
150
- };
151
- const normalized = normalize(command);
152
- if (!/(?:^|[\s;&|/])(?:cat|sed|head|tail|less|more|bat|awk|grep|rg|type|get-content)\b/iu.test(normalized)) {
153
- return false;
154
- }
155
- const normalizedSkillPath = normalize(skillPath);
156
- const normalizedSkillDir = path.posix.dirname(normalizedSkillPath);
157
- const managedSkillDir = `.agents/skills/${path.basename(path.dirname(skillPath))}`;
158
- if (normalized.includes(normalizedSkillPath) ||
159
- normalized.includes(`${managedSkillDir}/SKILL.md`)) {
160
- return true;
161
- }
162
- return ((normalized.includes(normalizedSkillDir) || normalized.includes(managedSkillDir)) &&
163
- /(?:^|[\s;&|/])SKILL\.md(?:$|[\s;&|])/u.test(normalized));
164
- }
165
- function commandOutputContainsSkill(item, skillPath) {
166
- if (typeof item.aggregatedOutput !== 'string')
167
- return false;
168
- const skillName = path.basename(path.dirname(skillPath));
169
- const escaped = skillName.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
170
- return new RegExp(`^name:\\s*["']?${escaped}["']?\\s*$`, 'mu').test(item.aggregatedOutput);
171
- }
172
- export function inspectTriggerAppServerFrame(frame, skillPath) {
173
- const method = typeof frame.method === 'string' ? frame.method : '';
174
- const params = isRecord(frame.params) ? frame.params : {};
175
- const item = isRecord(params.item) ? params.item : null;
176
- if (item?.type === 'commandExecution' && typeof item.command === 'string') {
177
- const completed = method === 'item/completed';
178
- const statusPassed = item.status === undefined || item.status === 'completed';
179
- const exitPassed = item.exitCode === undefined || item.exitCode === 0;
180
- const outputProvesRead = commandOutputContainsSkill(item, skillPath);
181
- if (completed &&
182
- ((statusPassed && exitPassed) || outputProvesRead) &&
183
- normalizedCommandReadsSkill(item.command, skillPath)) {
184
- return { loaded: true, loadEvidence: item.command };
185
- }
186
- }
187
- if ((method === 'item/started' || method === 'item/completed') &&
188
- item?.type === 'subAgentActivity' &&
189
- item.kind === 'started') {
190
- const agentPath = typeof item.agentPath === 'string' ? item.agentPath : null;
191
- const agentThreadId = typeof item.agentThreadId === 'string' ? item.agentThreadId : null;
192
- return {
193
- spawned: true,
194
- spawnEvidence: `app-server:${agentPath ?? agentThreadId ?? String(item.id ?? 'started')}`,
195
- spawnCall: {
196
- source: 'app_server_sub_agent_activity',
197
- event_id: typeof item.id === 'string' ? item.id : null,
198
- kind: 'started',
199
- agent_thread_id: agentThreadId,
200
- agent_path: agentPath,
201
- },
202
- };
203
- }
204
- if (method === 'item/completed' &&
205
- item?.type === 'agentMessage' &&
206
- item.phase !== 'commentary' &&
207
- typeof item.text === 'string') {
208
- return { finalMessage: item.text };
209
- }
210
- if (method === 'thread/tokenUsage/updated' && params.tokenUsage !== undefined) {
211
- return { usage: params.tokenUsage };
212
- }
213
- if (method === 'item/tool/requestUserInput') {
214
- return { requestUserInput: true };
215
- }
216
- if (method === 'turn/completed') {
217
- const turn = isRecord(params.turn) ? params.turn : {};
218
- return { turnStatus: typeof turn.status === 'string' ? turn.status : 'unknown' };
219
- }
220
- return {};
221
- }
222
- export function inspectTriggerAppServerConfigWarning(frame) {
223
- return inspectAppServerConfigWarning(frame);
224
- }
225
- function resolveCodexExecutable(codexBin) {
226
- if (process.platform !== 'win32') {
227
- return codexBin;
228
- }
229
- if (!codexBin.toLowerCase().endsWith('.exe') || !path.win32.isAbsolute(codexBin)) {
230
- throw new Error('On Windows, --codex-bin must be an absolute path to the native codex.exe.');
231
- }
232
- return codexBin;
233
- }
234
- function expectedEarlyStop(suite, evalCase, observed, loadedSkills) {
235
- if (evalCase.expected_loaded_skills) {
236
- const expected = expectedLoadedSkills(suite, evalCase);
237
- if (suite.forbidMultipleSkillLoads && loadedSkills.length > 1) {
238
- return 'unexpected_multiple_skill_loads';
239
- }
240
- const routeResolved = expected.length === suite.skills.length && sameSkillSet(loadedSkills, expected);
241
- if (suite.observeSpawnAgent && !evalCase.should_spawn_agent && observed.spawned) {
242
- return 'unexpected_spawn';
243
- }
244
- if (routeResolved &&
245
- suite.observeSpawnAgent &&
246
- evalCase.should_spawn_agent &&
247
- observed.spawned) {
248
- return 'expected_outcome_observed';
249
- }
250
- if (routeResolved && !suite.observeSpawnAgent) {
251
- return 'expected_skill_route_observed';
252
- }
253
- return null;
254
- }
255
- if (!evalCase.should_load_skill && observed.loaded) {
256
- return 'unexpected_skill_load';
257
- }
258
- if (suite.observeSpawnAgent && !evalCase.should_spawn_agent && observed.spawned) {
259
- return 'unexpected_spawn';
260
- }
261
- if (!suite.observeSpawnAgent && evalCase.should_load_skill && observed.loaded) {
262
- return 'expected_skill_load';
263
- }
264
- if (suite.observeSpawnAgent &&
265
- evalCase.should_load_skill &&
266
- evalCase.should_spawn_agent &&
267
- observed.loaded &&
268
- observed.spawned) {
269
- return 'expected_outcome_observed';
270
- }
271
- return null;
272
- }
273
- async function loadFixtureModule(pluginRoot, suite) {
274
- if (!suite.fixtureModule) {
275
- return null;
276
- }
277
- const modulePath = path.resolve(pluginRoot, suite.fixtureModule.replace(/^\.\//u, ''));
278
- const loaded = await import(pathToFileURL(modulePath).href);
279
- if (typeof loaded.setupTriggerWorkspace !== 'function') {
280
- throw new Error(`Trigger fixture module for suite "${suite.id}" must export setupTriggerWorkspace().`);
281
- }
282
- return loaded;
283
- }
284
- function mergeFixtureEnvironment(baseEnv, result) {
285
- if (!result?.environment) {
286
- return baseEnv;
287
- }
288
- if (!isRecord(result.environment)) {
289
- throw new Error('Trigger fixture environment must be an object.');
290
- }
291
- const additions = {};
292
- for (const [name, value] of Object.entries(result.environment)) {
293
- if (PROTECTED_ENV.has(name)) {
294
- throw new Error(`Trigger fixture cannot override protected environment variable ${name}.`);
295
- }
296
- if (typeof value !== 'string') {
297
- throw new Error(`Trigger fixture environment variable ${name} must be a string.`);
298
- }
299
- additions[name] = value;
300
- }
301
- return { ...baseEnv, ...additions };
302
- }
303
- function protectedEnvironmentSnapshot(env) {
304
- return Object.fromEntries([...PROTECTED_ENV].map((name) => [name, env[name]]));
305
- }
306
- function assertProtectedEnvironmentUnchanged(env, before) {
307
- for (const [name, value] of Object.entries(before)) {
308
- if (env[name] !== value) {
309
- throw new Error(`Trigger fixture cannot mutate protected environment variable ${name}.`);
310
- }
311
- }
312
- }
313
- async function captureState(fixture, context) {
314
- const state = fixture?.captureTriggerWorkspaceState
315
- ? await fixture.captureTriggerWorkspaceState(context)
316
- : await snapshotWorkspace(context.workspaceRoot);
317
- if (state === undefined || stableJson(state) === undefined) {
318
- throw new Error('Trigger fixture state must be JSON-serializable.');
319
- }
320
- return state;
321
- }
322
- async function isolateTriggerWorkspaceSkills(workspaceRoot, skillNames) {
323
- const skillsRoot = path.join(workspaceRoot, '.agents', 'skills');
324
- const allowed = new Set(skillNames);
325
- const entries = await fs.readdir(skillsRoot).catch((error) => {
326
- if (error.code === 'ENOENT')
327
- return [];
328
- throw error;
329
- });
330
- await Promise.all(entries.map(async (entry) => {
331
- if (allowed.has(entry))
332
- return;
333
- await fs.remove(path.join(skillsRoot, entry));
334
- }));
335
- }
336
- async function isolateTriggerWorkspaceRules(workspaceRoot, useProjectRules) {
337
- if (useProjectRules === true)
338
- return;
339
- await fs.remove(path.join(workspaceRoot, '.codex', 'rules'));
340
- }
341
- async function snapshotStrictControlPlane(workspaceRoot) {
342
- const snapshot = await snapshotWorkspace(workspaceRoot);
343
- return Object.fromEntries(Object.entries(snapshot).filter(([entry]) => entry === '.agents' ||
344
- entry.startsWith('.agents/') ||
345
- entry === '.codex' ||
346
- entry.startsWith('.codex/')));
347
- }
348
- async function runTriggerOnce(options) {
349
- assertCodexEvalCanStartWork();
350
- const temporaryRoot = await createTriggerTemporaryRoot(options.workRoot, options.suite.isolation === 'strict');
351
- const runRoot = temporaryRoot.root;
352
- const workspaceRoot = path.join(runRoot, 'project');
353
- const codexHome = path.join(runRoot, 'codex-home');
354
- const startedAt = Date.now();
355
- const diagnostics = [];
356
- const eventTrace = [];
357
- let finalMessage = null;
358
- let usage = null;
359
- let session;
360
- let removeHandler;
361
- let removeFailureHandler;
362
- let turnTimer;
363
- try {
364
- await fs.copy(options.subjectRoot, workspaceRoot, { dereference: false });
365
- await isolateTriggerWorkspaceRules(workspaceRoot, options.evalCase.use_project_rules);
366
- if (options.suite.isolation === 'strict') {
367
- await isolateTriggerWorkspaceSkills(workspaceRoot, options.suite.skills);
368
- }
369
- const skillPaths = new Map(options.suite.skills.map((skillName) => [
370
- skillName,
371
- path.join(workspaceRoot, '.agents', 'skills', skillName, 'SKILL.md'),
372
- ]));
373
- for (const [skillName, skillPath] of skillPaths) {
374
- if (!(await fs.pathExists(skillPath))) {
375
- throw new Error(`Materialized trigger Skill is missing: ${skillName} (${skillPath})`);
376
- }
377
- }
378
- const skillDigests = new Map(await Promise.all([...skillPaths].map(async ([skillName, skillPath]) => [
379
- skillName,
380
- await computeSkillDigest(path.dirname(skillPath)),
381
- ])));
382
- const ownerSkillPath = skillPaths.get(options.suite.skill);
383
- let env = buildIsolatedEnv(options.sourceEnv, runRoot, codexHome, options.codexRuntime);
384
- await Promise.all([
385
- fs.ensureDir(env.HOME),
386
- fs.ensureDir(env.TMPDIR),
387
- materializeCodexEvalRuntimeHome(options.codexRuntime, codexHome, {
388
- trustedProject: workspaceRoot,
389
- }),
390
- ]);
391
- const initialContext = {
392
- workspaceRoot,
393
- evalCase: options.evalCase,
394
- env,
395
- };
396
- const protectedEnvironment = protectedEnvironmentSnapshot(env);
397
- const controlPlaneBefore = options.suite.isolation === 'strict'
398
- ? await snapshotStrictControlPlane(workspaceRoot)
399
- : null;
400
- const fixtureResult = options.fixture
401
- ? await options.fixture.setupTriggerWorkspace(initialContext)
402
- : undefined;
403
- assertProtectedEnvironmentUnchanged(env, protectedEnvironment);
404
- env = mergeFixtureEnvironment(env, fixtureResult);
405
- if (controlPlaneBefore &&
406
- stableJson(controlPlaneBefore) !== stableJson(await snapshotStrictControlPlane(workspaceRoot))) {
407
- throw new Error('Trigger fixture modified strict eval control-plane files.');
408
- }
409
- const context = {
410
- ...initialContext,
411
- env,
412
- };
413
- for (const [skillName, skillPath] of skillPaths) {
414
- if (await computeSkillDigest(path.dirname(skillPath)) !== skillDigests.get(skillName)) {
415
- throw new Error(`Trigger fixture modified materialized participant Skill "${skillName}".`);
416
- }
417
- }
418
- const beforeState = await captureState(options.fixture, context);
419
- const allLoadedSkills = options.suite.skills.filter((skillName) => explicitSkillRequested(options.evalCase.query, skillName));
420
- const loadEvidenceBySkill = Object.fromEntries(allLoadedSkills.map((skillName) => [
421
- skillName,
422
- `explicit $${skillName} invocation`,
423
- ]));
424
- const observed = {
425
- loaded: allLoadedSkills.includes(options.suite.skill),
426
- spawned: false,
427
- loadEvidence: loadEvidenceBySkill[options.suite.skill] ?? null,
428
- spawnEvidence: null,
429
- };
430
- let requestUserInputCalled = false;
431
- let waitingOnUserInput = false;
432
- let finalResponseEmitted = false;
433
- const recordSkillLoad = (skillName, evidence) => {
434
- if (!allLoadedSkills.includes(skillName))
435
- allLoadedSkills.push(skillName);
436
- if (evidence && !loadEvidenceBySkill[skillName]) {
437
- loadEvidenceBySkill[skillName] = evidence;
438
- }
439
- if (skillName === options.suite.skill) {
440
- observed.loaded = true;
441
- observed.loadEvidence ??= evidence ?? null;
442
- }
443
- };
444
- const spawnCalls = [];
445
- const spawnCallIds = new Set();
446
- let rootThreadId;
447
- let turnStatus;
448
- let finishRun = () => undefined;
449
- let rejectRun = () => undefined;
450
- let runSettled = false;
451
- const runDone = new Promise((resolve, reject) => {
452
- finishRun = (termination) => {
453
- if (runSettled)
454
- return;
455
- runSettled = true;
456
- resolve(termination);
457
- };
458
- rejectRun = (error) => {
459
- if (runSettled)
460
- return;
461
- runSettled = true;
462
- reject(error);
463
- };
464
- });
465
- void runDone.catch(() => undefined);
466
- assertCodexEvalCanStartWork();
467
- session = new EvalAppServerSession({
468
- codexBin: resolveCodexExecutable(options.codexBin),
469
- cwd: workspaceRoot,
470
- env,
471
- modelProvider: options.codexRuntime.modelProvider,
472
- sensitiveEnvironmentNames: options.codexRuntime.sensitiveEnvironmentNames,
473
- isolation: options.suite.isolation,
474
- processManagement: options.processManagement,
475
- configOverrides: options.suite.observeSpawnAgent
476
- ? [
477
- 'features.multi_agent=true',
478
- 'features.multi_agent_v2.enabled=true',
479
- 'features.multi_agent_v2.hide_spawn_agent_metadata=true',
480
- 'features.multi_agent_v2.expose_spawn_agent_model_overrides=true',
481
- ]
482
- : [],
483
- });
484
- removeFailureHandler = session.onFailure(rejectRun);
485
- removeHandler = session.onFrame((frame) => {
486
- const method = typeof frame.method === 'string' ? frame.method : '';
487
- const params = isRecord(frame.params) ? frame.params : {};
488
- if (!method.startsWith('remoteControl/') && !method.startsWith('account/')) {
489
- eventTrace.push(frame);
490
- }
491
- const configWarning = options.suite.isolation === 'strict'
492
- ? inspectTriggerAppServerConfigWarning(frame)
493
- : null;
494
- if (configWarning) {
495
- diagnostics.push(`Strict Codex eval received a config warning: ${configWarning}`);
496
- finishRun('strict_isolation_error');
497
- return;
498
- }
499
- const frameThreadId = typeof params.threadId === 'string' ? params.threadId : undefined;
500
- if (rootThreadId && frameThreadId && frameThreadId !== rootThreadId) {
501
- return;
502
- }
503
- const evidence = inspectTriggerAppServerFrame(frame, ownerSkillPath);
504
- for (const [skillName, skillPath] of skillPaths) {
505
- const skillEvidence = inspectTriggerAppServerFrame(frame, skillPath);
506
- if (skillEvidence.loaded) {
507
- recordSkillLoad(skillName, skillEvidence.loadEvidence);
508
- }
509
- }
510
- if (evidence.spawned) {
511
- observed.spawned = true;
512
- observed.spawnEvidence ??= evidence.spawnEvidence ?? null;
513
- }
514
- if (evidence.spawnCall) {
515
- const identity = `${String(evidence.spawnCall.event_id)}:${String(evidence.spawnCall.agent_thread_id)}`;
516
- if (!spawnCallIds.has(identity)) {
517
- spawnCallIds.add(identity);
518
- spawnCalls.push(evidence.spawnCall);
519
- }
520
- }
521
- if (evidence.finalMessage !== undefined) {
522
- finalMessage = evidence.finalMessage;
523
- finalResponseEmitted = true;
524
- }
525
- if (evidence.usage !== undefined) {
526
- usage = evidence.usage;
527
- }
528
- if (evidence.turnStatus !== undefined) {
529
- turnStatus = evidence.turnStatus;
530
- finishRun('completed');
531
- return;
532
- }
533
- if (method === 'error') {
534
- diagnostics.push(`app-server error: ${JSON.stringify(params)}`);
535
- finishRun('app_server_error');
536
- return;
537
- }
538
- if (evidence.requestUserInput) {
539
- requestUserInputCalled = true;
540
- waitingOnUserInput = true;
541
- finishRun('waiting_on_user_input');
542
- return;
543
- }
544
- const reason = expectedEarlyStop(options.suite, options.evalCase, observed, allLoadedSkills);
545
- if (reason)
546
- finishRun(reason);
547
- });
548
- turnTimer = setTimeout(() => finishRun('timeout'), options.timeoutMs);
549
- turnTimer.unref();
550
- await session.initialize();
551
- const threadResult = await session.sendRequest('thread/start', {
552
- cwd: workspaceRoot,
553
- approvalPolicy: 'never',
554
- sandbox: 'read-only',
555
- ephemeral: false,
556
- ...(options.model ? { model: options.model } : {}),
557
- });
558
- rootThreadId = extractAppServerThreadId(threadResult);
559
- await session.sendRequest('turn/start', {
560
- threadId: rootThreadId,
561
- input: [{ type: 'text', text: options.evalCase.query, text_elements: [] }],
562
- cwd: workspaceRoot,
563
- approvalPolicy: 'never',
564
- sandboxPolicy: { type: 'readOnly', networkAccess: true },
565
- ...(options.model ? { model: options.model } : {}),
566
- });
567
- const termination = await runDone;
568
- if (turnTimer) {
569
- clearTimeout(turnTimer);
570
- turnTimer = undefined;
571
- }
572
- removeHandler();
573
- removeHandler = undefined;
574
- removeFailureHandler();
575
- removeFailureHandler = undefined;
576
- let cleanupFailed = false;
577
- try {
578
- await session.cleanup();
579
- }
580
- catch (error) {
581
- cleanupFailed = true;
582
- diagnostics.push(`Trigger eval app-server cleanup failed: ${error instanceof Error ? error.message : String(error)}`);
583
- }
584
- const afterState = await captureState(options.fixture, context);
585
- let skillsUnchanged = true;
586
- for (const [skillName, skillPath] of skillPaths) {
587
- const unchanged = await fs.pathExists(skillPath) &&
588
- await computeSkillDigest(path.dirname(skillPath)) === skillDigests.get(skillName);
589
- if (!unchanged) {
590
- skillsUnchanged = false;
591
- diagnostics.push(`Materialized participant Skill "${skillName}" changed during trigger evaluation.`);
592
- }
593
- }
594
- const fixtureUnchanged = stableJson(beforeState) === stableJson(afterState) && skillsUnchanged;
595
- if (!fixtureUnchanged) {
596
- diagnostics.push('Trigger evaluation workspace state changed.');
597
- }
598
- const expectedStop = new Set([
599
- 'expected_skill_load',
600
- 'expected_outcome_observed',
601
- 'unexpected_skill_load',
602
- 'unexpected_spawn',
603
- 'unexpected_multiple_skill_loads',
604
- 'expected_skill_route_observed',
605
- 'waiting_on_user_input',
606
- ]).has(termination);
607
- const executionError = termination === 'timeout' ||
608
- termination === 'strict_isolation_error' ||
609
- termination === 'app_server_error' ||
610
- (!expectedStop && termination === 'completed' && turnStatus !== 'completed') ||
611
- !fixtureUnchanged ||
612
- cleanupFailed;
613
- return session.scrub({
614
- loaded: observed.loaded,
615
- first_loaded_skill: allLoadedSkills[0] ?? null,
616
- all_loaded_skills: allLoadedSkills,
617
- load_evidence_by_skill: loadEvidenceBySkill,
618
- spawned: observed.spawned,
619
- load_evidence: observed.loadEvidence,
620
- spawn_evidence: observed.spawnEvidence,
621
- spawn_calls: spawnCalls,
622
- termination,
623
- exit_code: null,
624
- signal: null,
625
- execution_error: executionError,
626
- fixture_unchanged: fixtureUnchanged,
627
- request_user_input_called: requestUserInputCalled,
628
- waiting_on_user_input: waitingOnUserInput,
629
- final_response_emitted: finalResponseEmitted,
630
- ...(session.stderr.trim() ? { stderr: session.stderr.trim() } : {}),
631
- final_message: finalMessage,
632
- duration_ms: Date.now() - startedAt,
633
- usage,
634
- event_trace: eventTrace,
635
- diagnostics,
636
- });
637
- }
638
- catch (error) {
639
- const evidence = {
640
- loaded: false,
641
- first_loaded_skill: null,
642
- all_loaded_skills: [],
643
- load_evidence_by_skill: {},
644
- spawned: false,
645
- load_evidence: null,
646
- spawn_evidence: null,
647
- spawn_calls: [],
648
- termination: 'setup_error',
649
- exit_code: null,
650
- signal: null,
651
- execution_error: true,
652
- fixture_unchanged: false,
653
- request_user_input_called: false,
654
- waiting_on_user_input: false,
655
- final_response_emitted: finalMessage !== null,
656
- final_message: finalMessage,
657
- duration_ms: Date.now() - startedAt,
658
- usage,
659
- event_trace: eventTrace,
660
- diagnostics: [error instanceof Error ? error.stack ?? error.message : String(error)],
661
- };
662
- return session ? session.scrub(evidence) : evidence;
663
- }
664
- finally {
665
- if (turnTimer)
666
- clearTimeout(turnTimer);
667
- removeHandler?.();
668
- removeFailureHandler?.();
669
- try {
670
- await session?.cleanup();
671
- }
672
- catch {
673
- // The primary result already records cleanup failures when the session started.
674
- }
675
- finally {
676
- await temporaryRoot.cleanup();
677
- }
678
- }
679
- }
680
- function ratePasses(rate, expected, strictNegative) {
681
- if (expected) {
682
- return rate > PASS_THRESHOLD;
683
- }
684
- return strictNegative ? rate === 0 : rate < PASS_THRESHOLD;
685
- }
686
- export function summarizeTriggerCase(suite, evalCase, runs) {
687
- const loadRate = runs.filter((run) => run.loaded).length / runs.length;
688
- const skillLoadRates = Object.fromEntries(suite.skills.map((skillName) => [
689
- skillName,
690
- runs.filter((run) => run.all_loaded_skills.includes(skillName)).length / runs.length,
691
- ]));
692
- const spawnRate = runs.filter((run) => run.spawned).length / runs.length;
693
- const executionErrors = runs.filter((run) => run.execution_error).length;
694
- const strictNegative = suite.strictNegativeSplits.includes(evalCase.split);
695
- const usesRouteExpectation = evalCase.expected_loaded_skills !== undefined;
696
- const expectedSkills = expectedLoadedSkills(suite, evalCase);
697
- const routeMatches = runs.filter((run) => sameSkillSet(run.all_loaded_skills, expectedSkills)).length;
698
- const routeMatchRate = routeMatches / runs.length;
699
- const multipleSkillLoads = runs.filter((run) => run.all_loaded_skills.length > 1).length;
700
- const loadPassed = usesRouteExpectation
701
- ? strictNegative && expectedSkills.length === 0
702
- ? routeMatchRate === 1
703
- : routeMatchRate >= (suite.minimumPassRate ?? PASS_THRESHOLD)
704
- : ratePasses(loadRate, Boolean(evalCase.should_load_skill), strictNegative);
705
- const routePassed = !suite.forbidMultipleSkillLoads || multipleSkillLoads === 0;
706
- const spawnPassed = suite.observeSpawnAgent
707
- ? ratePasses(spawnRate, Boolean(evalCase.should_spawn_agent), strictNegative)
708
- : true;
709
- const complete = executionErrors === 0;
710
- const routeCounts = Object.fromEntries([...new Set(runs.map((run) => routeLabel(run.all_loaded_skills)))].map((route) => [
711
- route,
712
- runs.filter((run) => routeLabel(run.all_loaded_skills) === route).length,
713
- ]));
714
- return {
715
- id: evalCase.id,
716
- split: evalCase.split,
717
- query: evalCase.query,
718
- expected: {
719
- ...(usesRouteExpectation
720
- ? { loaded_skills: expectedSkills }
721
- : { load_skill: Boolean(evalCase.should_load_skill) }),
722
- ...(suite.observeSpawnAgent ? { spawn_agent: Boolean(evalCase.should_spawn_agent) } : {}),
723
- },
724
- observed: {
725
- load_rate: loadRate,
726
- skill_load_rates: skillLoadRates,
727
- ...(usesRouteExpectation ? {
728
- route_match_rate: routeMatchRate,
729
- route_counts: routeCounts,
730
- } : {}),
731
- multiple_skill_loads: multipleSkillLoads,
732
- ...(suite.observeSpawnAgent ? { spawn_rate: spawnRate } : {}),
733
- execution_errors: executionErrors,
734
- },
735
- complete,
736
- passed: complete && loadPassed && routePassed && spawnPassed,
737
- runs,
738
- };
739
- }
740
- async function readCodexVersion(codexBin, env) {
741
- try {
742
- const result = await execFileAsync(resolveCodexExecutable(codexBin), ['--version'], {
743
- env,
744
- timeout: 10_000,
745
- encoding: 'utf8',
746
- });
747
- return result.stdout.trim() || result.stderr.trim() || null;
748
- }
749
- catch {
750
- return null;
751
- }
752
- }
753
- export async function runCodexTriggerSuite(options) {
754
- const sourceEnv = options.sourceEnv ?? process.env;
755
- const codexRuntime = options.codexRuntime ?? cleanCodexEvalRuntimeConfig(sourceEnv, options.model);
756
- const model = options.model ?? codexRuntime.model ?? undefined;
757
- const processManagement = options.processManagement ?? DEFAULT_OBSERVED_PROCESS_EVIDENCE;
758
- const corpus = await readPluginEvalTriggerCases(options.pluginRoot, options.suite);
759
- let cases = options.split === 'all'
760
- ? corpus.cases
761
- : corpus.cases.filter((entry) => entry.split === options.split);
762
- if (options.caseId && options.caseIds) {
763
- throw new Error('runCodexTriggerSuite cannot combine caseId and caseIds.');
764
- }
765
- if (options.caseId) {
766
- cases = cases.filter((entry) => entry.id === options.caseId);
767
- }
768
- if (options.caseIds) {
769
- const requested = new Set(options.caseIds);
770
- cases = cases.filter((entry) => requested.has(entry.id));
771
- const found = new Set(cases.map((entry) => entry.id));
772
- const missing = [...requested].filter((id) => !found.has(id));
773
- if (missing.length > 0) {
774
- throw new Error(`Unknown trigger cases: ${missing.join(', ')}`);
775
- }
776
- }
777
- if (cases.length === 0) {
778
- throw new Error(`Trigger suite "${options.suite.id}" has no matching cases for ${options.caseId ?? options.split}.`);
779
- }
780
- let fixture;
781
- let hostIsolation = null;
782
- let runtimeProbe = null;
783
- try {
784
- if (options.suite.isolation === 'strict') {
785
- hostIsolation = await inspectCodexEvalHostIsolation({ sourceEnv });
786
- runtimeProbe = await runCodexEvalIsolationProbe({
787
- subjectRoot: options.subjectRoot,
788
- skillName: options.suite.skill,
789
- skillNames: options.suite.skills,
790
- codexBin: options.codexBin,
791
- codexRuntime,
792
- sourceEnv,
793
- processManagement,
794
- });
795
- }
796
- fixture = await loadFixtureModule(options.pluginRoot, options.suite);
797
- }
798
- catch (error) {
799
- const diagnostic = error instanceof Error ? error.stack ?? error.message : String(error);
800
- const report = redactCodexEvalValue({
801
- schema_version: PLUGIN_EVAL_SCHEMA_VERSION,
802
- generated_at: new Date().toISOString(),
803
- suite: options.suite.id,
804
- owner_skill: options.suite.skill,
805
- participant_skills: options.suite.skills,
806
- profile: options.profile,
807
- split: options.split,
808
- complete: false,
809
- passed: false,
810
- environment_error: diagnostic,
811
- environment: {
812
- isolation: codexEvalIsolationEvidence({
813
- mode: options.suite.isolation,
814
- host: hostIsolation,
815
- runtimeProbe,
816
- }),
817
- codex_runtime: codexEvalRuntimeEvidence(codexRuntime),
818
- },
819
- summary: { cases: cases.length, passed: 0, failed: 0 },
820
- results: [],
821
- }, codexRuntime);
822
- if (options.reportPath) {
823
- await fs.ensureDir(path.dirname(options.reportPath));
824
- await writeJsonAtomic(options.reportPath, report);
825
- }
826
- return redactCodexEvalValue({
827
- id: options.suite.id,
828
- kind: 'trigger',
829
- skills: options.suite.skills,
830
- profile: options.profile,
831
- split: options.split,
832
- outcome: 'incomplete',
833
- complete: false,
834
- mechanicalPassed: false,
835
- qualitativeReview: 'not_required',
836
- ...(options.reportPath ? { reportPath: options.reportPath } : {}),
837
- summary: report.summary,
838
- diagnostics: [diagnostic],
839
- }, codexRuntime);
840
- }
841
- const participantSkillDigests = Object.fromEntries(await Promise.all(options.suite.skills.map(async (skillName) => [
842
- skillName,
843
- await computeSkillDigest(path.join(options.subjectRoot, '.agents', 'skills', skillName)),
844
- ])));
845
- const codexVersion = await readCodexVersion(options.codexBin, sourceEnv);
846
- const createSuiteReport = (caseResults, reportPath = options.reportPath) => {
847
- const complete = caseResults.length > 0 && caseResults.every((result) => result.complete);
848
- const passed = complete && caseResults.every((result) => result.passed);
849
- return redactCodexEvalValue({
850
- id: options.suite.id,
851
- kind: 'trigger',
852
- skills: options.suite.skills,
853
- profile: options.profile,
854
- split: options.split,
855
- outcome: !complete ? 'incomplete' : passed ? 'passed' : 'failed',
856
- complete,
857
- mechanicalPassed: passed,
858
- qualitativeReview: 'not_required',
859
- ...(reportPath ? { reportPath } : {}),
860
- caseResults: caseResults.map((result) => ({
861
- id: result.id,
862
- outcome: !result.complete ? 'incomplete' : result.passed ? 'passed' : 'failed',
863
- complete: result.complete,
864
- mechanicalPassed: result.passed,
865
- qualitativeReview: 'not_required',
866
- summary: {
867
- split: result.split,
868
- expected: result.expected,
869
- observed: result.observed,
870
- },
871
- diagnostics: result.runs.flatMap((run) => run.diagnostics),
872
- })),
873
- summary: {
874
- cases: caseResults.length,
875
- passed: caseResults.filter((result) => result.passed).length,
876
- failed: caseResults.filter((result) => !result.passed).length,
877
- },
878
- diagnostics: caseResults.flatMap((result) => result.runs.flatMap((run) => run.diagnostics)),
879
- }, codexRuntime);
880
- };
881
- const writeProgressReport = async (caseResults) => {
882
- if (!options.reportPath)
883
- return;
884
- const complete = caseResults.length === cases.length &&
885
- caseResults.every((result) => result.complete);
886
- const passed = complete && caseResults.every((result) => result.passed);
887
- const report = redactCodexEvalValue({
888
- schema_version: PLUGIN_EVAL_SCHEMA_VERSION,
889
- generated_at: new Date().toISOString(),
890
- suite: options.suite.id,
891
- owner_skill: options.suite.skill,
892
- participant_skills: options.suite.skills,
893
- profile: options.profile,
894
- split: options.split,
895
- runs_per_case: options.runs,
896
- threshold: PASS_THRESHOLD,
897
- route_minimum_pass_rate: options.suite.minimumPassRate ?? null,
898
- forbid_multiple_skill_loads: options.suite.forbidMultipleSkillLoads,
899
- model: model ?? null,
900
- complete,
901
- passed,
902
- environment: {
903
- codex_version: codexVersion,
904
- isolation: {
905
- ...codexEvalIsolationEvidence({
906
- mode: options.suite.isolation,
907
- host: hostIsolation,
908
- runtimeProbe,
909
- }),
910
- app_server_protocol: true,
911
- project_rules_ignored_by_default: true,
912
- },
913
- codex_runtime: codexEvalRuntimeEvidence(codexRuntime),
914
- skill_sha256: participantSkillDigests[options.suite.skill],
915
- participant_skill_sha256: participantSkillDigests,
916
- corpus_sha256: sha256(stableJson(corpus)),
917
- },
918
- summary: {
919
- cases: cases.length,
920
- completed: caseResults.length,
921
- passed: caseResults.filter((result) => result.passed).length,
922
- failed: caseResults.filter((result) => !result.passed).length,
923
- },
924
- results: caseResults,
925
- }, codexRuntime);
926
- await writeJsonAtomic(options.reportPath, report);
927
- };
928
- const results = [];
929
- for (const evalCase of cases) {
930
- const runs = [];
931
- for (let runIndex = 0; runIndex < options.runs; runIndex += 1) {
932
- assertCodexEvalCanStartWork();
933
- options.stderr?.(`[${evalCase.split}] ${evalCase.id} run ${runIndex + 1}/${options.runs}\n`);
934
- runs.push(await runTriggerOnce({
935
- suite: options.suite,
936
- evalCase,
937
- subjectRoot: options.subjectRoot,
938
- fixture,
939
- codexBin: options.codexBin,
940
- model,
941
- codexRuntime,
942
- timeoutMs: options.suite.perRunTimeoutMs,
943
- sourceEnv,
944
- processManagement,
945
- workRoot: options.workRoot,
946
- }));
947
- }
948
- const caseResult = summarizeTriggerCase(options.suite, evalCase, runs);
949
- results.push(caseResult);
950
- await writeProgressReport(results);
951
- await options.onCaseCompleted?.({
952
- caseId: evalCase.id,
953
- report: createSuiteReport([caseResult]),
954
- });
955
- if (options.stopOnIncomplete && !caseResult.complete)
956
- break;
957
- }
958
- const complete = results.length === cases.length && results.every((result) => result.complete);
959
- const passed = complete && results.every((result) => result.passed);
960
- await writeProgressReport(results);
961
- return {
962
- ...createSuiteReport(results),
963
- complete,
964
- mechanicalPassed: passed,
965
- outcome: !complete ? 'incomplete' : passed ? 'passed' : 'failed',
966
- };
967
- }
968
- //# sourceMappingURL=codex-trigger-eval.js.map