@vibe-agent-toolkit/agent-skills 0.1.42 → 0.2.0-rc.10

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 (322) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts.map +1 -1
  3. package/dist/builder.js +7 -17
  4. package/dist/builder.js.map +1 -1
  5. package/dist/content-type-routing.d.ts +32 -0
  6. package/dist/content-type-routing.d.ts.map +1 -1
  7. package/dist/content-type-routing.js +23 -0
  8. package/dist/content-type-routing.js.map +1 -1
  9. package/dist/files-config.d.ts +34 -1
  10. package/dist/files-config.d.ts.map +1 -1
  11. package/dist/files-config.js +277 -39
  12. package/dist/files-config.js.map +1 -1
  13. package/dist/fs-attribution.d.ts +45 -0
  14. package/dist/fs-attribution.d.ts.map +1 -0
  15. package/dist/fs-attribution.js +57 -0
  16. package/dist/fs-attribution.js.map +1 -0
  17. package/dist/import.d.ts.map +1 -1
  18. package/dist/import.js +0 -4
  19. package/dist/import.js.map +1 -1
  20. package/dist/index.d.ts +13 -8
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +25 -7
  23. package/dist/index.js.map +1 -1
  24. package/dist/inventory/detectors/declared-but-missing.d.ts +1 -1
  25. package/dist/inventory/detectors/declared-but-missing.d.ts.map +1 -1
  26. package/dist/inventory/detectors/marketplace-source-missing.d.ts +1 -1
  27. package/dist/inventory/detectors/marketplace-source-missing.d.ts.map +1 -1
  28. package/dist/inventory/detectors/present-but-undeclared.d.ts +1 -1
  29. package/dist/inventory/detectors/present-but-undeclared.d.ts.map +1 -1
  30. package/dist/inventory/detectors/reference-target-missing.d.ts +1 -1
  31. package/dist/inventory/detectors/reference-target-missing.d.ts.map +1 -1
  32. package/dist/inventory/index.d.ts +1 -1
  33. package/dist/inventory/index.d.ts.map +1 -1
  34. package/dist/inventory/index.js +1 -1
  35. package/dist/inventory/index.js.map +1 -1
  36. package/dist/inventory/serialize.d.ts +4 -4
  37. package/dist/inventory/serialize.d.ts.map +1 -1
  38. package/dist/inventory/serialize.js +6 -6
  39. package/dist/inventory/serialize.js.map +1 -1
  40. package/dist/inventory/types.d.ts +8 -0
  41. package/dist/inventory/types.d.ts.map +1 -1
  42. package/dist/inventory/types.js.map +1 -1
  43. package/dist/link-graph-members.d.ts +18 -0
  44. package/dist/link-graph-members.d.ts.map +1 -0
  45. package/dist/link-graph-members.js +18 -0
  46. package/dist/link-graph-members.js.map +1 -0
  47. package/dist/parsers/frontmatter-parser.d.ts.map +1 -1
  48. package/dist/parsers/frontmatter-parser.js +30 -6
  49. package/dist/parsers/frontmatter-parser.js.map +1 -1
  50. package/dist/plugin-distribution-layout.d.ts +70 -6
  51. package/dist/plugin-distribution-layout.d.ts.map +1 -1
  52. package/dist/plugin-distribution-layout.js +84 -11
  53. package/dist/plugin-distribution-layout.js.map +1 -1
  54. package/dist/post-build-checks.d.ts +38 -1
  55. package/dist/post-build-checks.d.ts.map +1 -1
  56. package/dist/post-build-checks.js +68 -17
  57. package/dist/post-build-checks.js.map +1 -1
  58. package/dist/projection/skill-extent.d.ts +247 -0
  59. package/dist/projection/skill-extent.d.ts.map +1 -0
  60. package/dist/projection/skill-extent.js +560 -0
  61. package/dist/projection/skill-extent.js.map +1 -0
  62. package/dist/schemas/agent-skill-frontmatter.js +1 -1
  63. package/dist/schemas/agent-skill-frontmatter.js.map +1 -1
  64. package/dist/schemas/allowed-tools.d.ts +31 -0
  65. package/dist/schemas/allowed-tools.d.ts.map +1 -0
  66. package/dist/schemas/allowed-tools.js +88 -0
  67. package/dist/schemas/allowed-tools.js.map +1 -0
  68. package/dist/schemas/index.d.ts +1 -0
  69. package/dist/schemas/index.d.ts.map +1 -1
  70. package/dist/schemas/index.js +1 -0
  71. package/dist/schemas/index.js.map +1 -1
  72. package/dist/schemas/installed-plugins-registry.d.ts.map +1 -1
  73. package/dist/schemas/installed-plugins-registry.js +7 -1
  74. package/dist/schemas/installed-plugins-registry.js.map +1 -1
  75. package/dist/schemas/marketplace-manifest.d.ts.map +1 -1
  76. package/dist/schemas/marketplace-manifest.js +17 -6
  77. package/dist/schemas/marketplace-manifest.js.map +1 -1
  78. package/dist/skill-identity.d.ts +18 -3
  79. package/dist/skill-identity.d.ts.map +1 -1
  80. package/dist/skill-identity.js +25 -6
  81. package/dist/skill-identity.js.map +1 -1
  82. package/dist/skill-packager.d.ts +144 -20
  83. package/dist/skill-packager.d.ts.map +1 -1
  84. package/dist/skill-packager.js +447 -105
  85. package/dist/skill-packager.js.map +1 -1
  86. package/dist/skill-source/content-hash.d.ts.map +1 -1
  87. package/dist/skill-source/content-hash.js +21 -10
  88. package/dist/skill-source/content-hash.js.map +1 -1
  89. package/dist/skill-source/fetch-cache.d.ts.map +1 -1
  90. package/dist/skill-source/fetch-cache.js +0 -5
  91. package/dist/skill-source/fetch-cache.js.map +1 -1
  92. package/dist/skill-source/git-clone.d.ts +1 -1
  93. package/dist/skill-source/git-clone.d.ts.map +1 -1
  94. package/dist/skill-source/git-clone.js +10 -10
  95. package/dist/skill-source/git-clone.js.map +1 -1
  96. package/dist/skill-source/sources/url-source.d.ts.map +1 -1
  97. package/dist/skill-source/sources/url-source.js +2 -2
  98. package/dist/skill-source/sources/url-source.js.map +1 -1
  99. package/dist/skill-source/stage.d.ts.map +1 -1
  100. package/dist/skill-source/stage.js +0 -6
  101. package/dist/skill-source/stage.js.map +1 -1
  102. package/dist/skill-test/baseline-delta.d.ts +1575 -0
  103. package/dist/skill-test/baseline-delta.d.ts.map +1 -0
  104. package/dist/skill-test/baseline-delta.js +272 -0
  105. package/dist/skill-test/baseline-delta.js.map +1 -0
  106. package/dist/skill-test/baseline-integrity.d.ts +944 -0
  107. package/dist/skill-test/baseline-integrity.d.ts.map +1 -0
  108. package/dist/skill-test/baseline-integrity.js +3090 -0
  109. package/dist/skill-test/baseline-integrity.js.map +1 -0
  110. package/dist/skill-test/build-hook.d.ts +3 -2
  111. package/dist/skill-test/build-hook.d.ts.map +1 -1
  112. package/dist/skill-test/build-hook.js +4 -5
  113. package/dist/skill-test/build-hook.js.map +1 -1
  114. package/dist/skill-test/configure-writer.js +1 -1
  115. package/dist/skill-test/configure-writer.js.map +1 -1
  116. package/dist/skill-test/declared-env.d.ts +5 -4
  117. package/dist/skill-test/declared-env.d.ts.map +1 -1
  118. package/dist/skill-test/declared-env.js +8 -9
  119. package/dist/skill-test/declared-env.js.map +1 -1
  120. package/dist/skill-test/eval-executor.d.ts +21 -5
  121. package/dist/skill-test/eval-executor.d.ts.map +1 -1
  122. package/dist/skill-test/eval-executor.js +6 -6
  123. package/dist/skill-test/eval-executor.js.map +1 -1
  124. package/dist/skill-test/eval-fragment.d.ts +106 -28
  125. package/dist/skill-test/eval-fragment.d.ts.map +1 -1
  126. package/dist/skill-test/eval-fragment.js +78 -16
  127. package/dist/skill-test/eval-fragment.js.map +1 -1
  128. package/dist/skill-test/eval-grader.d.ts +65 -7
  129. package/dist/skill-test/eval-grader.d.ts.map +1 -1
  130. package/dist/skill-test/eval-grader.js +263 -64
  131. package/dist/skill-test/eval-grader.js.map +1 -1
  132. package/dist/skill-test/eval-inputs.d.ts +110 -8
  133. package/dist/skill-test/eval-inputs.d.ts.map +1 -1
  134. package/dist/skill-test/eval-inputs.js +177 -22
  135. package/dist/skill-test/eval-inputs.js.map +1 -1
  136. package/dist/skill-test/eval-lint.d.ts +17 -4
  137. package/dist/skill-test/eval-lint.d.ts.map +1 -1
  138. package/dist/skill-test/eval-lint.js +22 -9
  139. package/dist/skill-test/eval-lint.js.map +1 -1
  140. package/dist/skill-test/eval-suite-isolation.d.ts.map +1 -1
  141. package/dist/skill-test/eval-suite-isolation.js +8 -5
  142. package/dist/skill-test/eval-suite-isolation.js.map +1 -1
  143. package/dist/skill-test/evals-template.d.ts +1 -1
  144. package/dist/skill-test/evals-template.d.ts.map +1 -1
  145. package/dist/skill-test/evals-template.js +1 -3
  146. package/dist/skill-test/evals-template.js.map +1 -1
  147. package/dist/skill-test/executor-prompt.d.ts +15 -7
  148. package/dist/skill-test/executor-prompt.d.ts.map +1 -1
  149. package/dist/skill-test/executor-prompt.js +10 -7
  150. package/dist/skill-test/executor-prompt.js.map +1 -1
  151. package/dist/skill-test/failure-reason.d.ts +113 -0
  152. package/dist/skill-test/failure-reason.d.ts.map +1 -0
  153. package/dist/skill-test/failure-reason.js +124 -0
  154. package/dist/skill-test/failure-reason.js.map +1 -0
  155. package/dist/skill-test/fragment-merge.d.ts +3 -20
  156. package/dist/skill-test/fragment-merge.d.ts.map +1 -1
  157. package/dist/skill-test/fragment-merge.js +67 -8
  158. package/dist/skill-test/fragment-merge.js.map +1 -1
  159. package/dist/skill-test/grader-prompt.d.ts +29 -9
  160. package/dist/skill-test/grader-prompt.d.ts.map +1 -1
  161. package/dist/skill-test/grader-prompt.js +264 -68
  162. package/dist/skill-test/grader-prompt.js.map +1 -1
  163. package/dist/skill-test/grader-text.d.ts +145 -0
  164. package/dist/skill-test/grader-text.d.ts.map +1 -0
  165. package/dist/skill-test/grader-text.js +410 -0
  166. package/dist/skill-test/grader-text.js.map +1 -0
  167. package/dist/skill-test/grading-adapter.d.ts +38 -2
  168. package/dist/skill-test/grading-adapter.d.ts.map +1 -1
  169. package/dist/skill-test/grading-adapter.js +57 -9
  170. package/dist/skill-test/grading-adapter.js.map +1 -1
  171. package/dist/skill-test/grading-schema.d.ts +160 -5
  172. package/dist/skill-test/grading-schema.d.ts.map +1 -1
  173. package/dist/skill-test/grading-schema.js +66 -7
  174. package/dist/skill-test/grading-schema.js.map +1 -1
  175. package/dist/skill-test/harness-location.d.ts +3 -2
  176. package/dist/skill-test/harness-location.d.ts.map +1 -1
  177. package/dist/skill-test/harness-location.js +5 -16
  178. package/dist/skill-test/harness-location.js.map +1 -1
  179. package/dist/skill-test/index.d.ts +2 -2
  180. package/dist/skill-test/index.d.ts.map +1 -1
  181. package/dist/skill-test/index.js +2 -2
  182. package/dist/skill-test/index.js.map +1 -1
  183. package/dist/skill-test/lock.d.ts +58 -1
  184. package/dist/skill-test/lock.d.ts.map +1 -1
  185. package/dist/skill-test/lock.js +78 -6
  186. package/dist/skill-test/lock.js.map +1 -1
  187. package/dist/skill-test/pipeline.d.ts +19 -1
  188. package/dist/skill-test/pipeline.d.ts.map +1 -1
  189. package/dist/skill-test/pipeline.js +21 -10
  190. package/dist/skill-test/pipeline.js.map +1 -1
  191. package/dist/skill-test/preflight.d.ts +1 -1
  192. package/dist/skill-test/preflight.d.ts.map +1 -1
  193. package/dist/skill-test/preflight.js +59 -16
  194. package/dist/skill-test/preflight.js.map +1 -1
  195. package/dist/skill-test/prompt-invariants.d.ts +4 -2
  196. package/dist/skill-test/prompt-invariants.d.ts.map +1 -1
  197. package/dist/skill-test/prompt-invariants.js +5 -4
  198. package/dist/skill-test/prompt-invariants.js.map +1 -1
  199. package/dist/skill-test/run-harness.d.ts +665 -85
  200. package/dist/skill-test/run-harness.d.ts.map +1 -1
  201. package/dist/skill-test/run-harness.js +1522 -237
  202. package/dist/skill-test/run-harness.js.map +1 -1
  203. package/dist/skill-test/staging.d.ts +20 -8
  204. package/dist/skill-test/staging.d.ts.map +1 -1
  205. package/dist/skill-test/staging.js +25 -18
  206. package/dist/skill-test/staging.js.map +1 -1
  207. package/dist/skill-test/tier-plan.d.ts +1 -1
  208. package/dist/skill-test/tier-plan.js +1 -1
  209. package/dist/skill-test/tool-eval-schema.d.ts +6 -6
  210. package/dist/skill-test/tool-eval-schema.js +2 -2
  211. package/dist/skill-test/vendor-manifest.d.ts +2 -1
  212. package/dist/skill-test/vendor-manifest.d.ts.map +1 -1
  213. package/dist/skill-test/vendor-manifest.js +10 -10
  214. package/dist/skill-test/vendor-manifest.js.map +1 -1
  215. package/dist/test-input.d.ts +59 -8
  216. package/dist/test-input.d.ts.map +1 -1
  217. package/dist/test-input.js +64 -19
  218. package/dist/test-input.js.map +1 -1
  219. package/dist/validators/agent-instruction-presence.d.ts +1 -1
  220. package/dist/validators/agent-instruction-presence.d.ts.map +1 -1
  221. package/dist/validators/agent-instruction-presence.js +45 -2
  222. package/dist/validators/agent-instruction-presence.js.map +1 -1
  223. package/dist/validators/bundled-resource-link-detection.d.ts +6 -4
  224. package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
  225. package/dist/validators/bundled-resource-link-detection.js +39 -39
  226. package/dist/validators/bundled-resource-link-detection.js.map +1 -1
  227. package/dist/validators/compat-detectors.d.ts +18 -1
  228. package/dist/validators/compat-detectors.d.ts.map +1 -1
  229. package/dist/validators/compat-detectors.js +47 -20
  230. package/dist/validators/compat-detectors.js.map +1 -1
  231. package/dist/validators/cross-skill-dependency-detection.d.ts +1 -1
  232. package/dist/validators/cross-skill-dependency-detection.d.ts.map +1 -1
  233. package/dist/validators/cross-skill-dependency-detection.js +1 -1
  234. package/dist/validators/cross-skill-dependency-detection.js.map +1 -1
  235. package/dist/validators/description-style-detection.d.ts +1 -1
  236. package/dist/validators/description-style-detection.d.ts.map +1 -1
  237. package/dist/validators/description-style-detection.js +1 -1
  238. package/dist/validators/description-style-detection.js.map +1 -1
  239. package/dist/validators/format-detection.d.ts +3 -0
  240. package/dist/validators/format-detection.d.ts.map +1 -1
  241. package/dist/validators/format-detection.js +41 -26
  242. package/dist/validators/format-detection.js.map +1 -1
  243. package/dist/validators/frontmatter-validation.d.ts +1 -1
  244. package/dist/validators/frontmatter-validation.d.ts.map +1 -1
  245. package/dist/validators/frontmatter-validation.js +2 -2
  246. package/dist/validators/frontmatter-validation.js.map +1 -1
  247. package/dist/validators/imperative-body-detection.d.ts +1 -1
  248. package/dist/validators/imperative-body-detection.d.ts.map +1 -1
  249. package/dist/validators/imperative-body-detection.js +1 -1
  250. package/dist/validators/imperative-body-detection.js.map +1 -1
  251. package/dist/validators/index.d.ts +1 -1
  252. package/dist/validators/index.d.ts.map +1 -1
  253. package/dist/validators/kebab-case-detection.d.ts +1 -1
  254. package/dist/validators/kebab-case-detection.d.ts.map +1 -1
  255. package/dist/validators/kebab-case-detection.js +1 -1
  256. package/dist/validators/kebab-case-detection.js.map +1 -1
  257. package/dist/validators/marketplace-validator.d.ts.map +1 -1
  258. package/dist/validators/marketplace-validator.js +7 -2
  259. package/dist/validators/marketplace-validator.js.map +1 -1
  260. package/dist/validators/mcp-tool-qualification.d.ts +158 -0
  261. package/dist/validators/mcp-tool-qualification.d.ts.map +1 -0
  262. package/dist/validators/mcp-tool-qualification.js +467 -0
  263. package/dist/validators/mcp-tool-qualification.js.map +1 -0
  264. package/dist/validators/packaged-size-limit.d.ts +296 -0
  265. package/dist/validators/packaged-size-limit.d.ts.map +1 -0
  266. package/dist/validators/packaged-size-limit.js +492 -0
  267. package/dist/validators/packaged-size-limit.js.map +1 -0
  268. package/dist/validators/packaging-validator.d.ts +149 -10
  269. package/dist/validators/packaging-validator.d.ts.map +1 -1
  270. package/dist/validators/packaging-validator.js +371 -55
  271. package/dist/validators/packaging-validator.js.map +1 -1
  272. package/dist/validators/plugin-hosted-shape.d.ts +4 -2
  273. package/dist/validators/plugin-hosted-shape.d.ts.map +1 -1
  274. package/dist/validators/plugin-hosted-shape.js +6 -7
  275. package/dist/validators/plugin-hosted-shape.js.map +1 -1
  276. package/dist/validators/plugin-recommended-fields.d.ts +1 -1
  277. package/dist/validators/plugin-recommended-fields.d.ts.map +1 -1
  278. package/dist/validators/plugin-recommended-fields.js +1 -1
  279. package/dist/validators/plugin-recommended-fields.js.map +1 -1
  280. package/dist/validators/referenced-path-missing.d.ts +211 -0
  281. package/dist/validators/referenced-path-missing.d.ts.map +1 -0
  282. package/dist/validators/referenced-path-missing.js +378 -0
  283. package/dist/validators/referenced-path-missing.js.map +1 -0
  284. package/dist/validators/registry-validator.d.ts.map +1 -1
  285. package/dist/validators/registry-validator.js +1 -2
  286. package/dist/validators/registry-validator.js.map +1 -1
  287. package/dist/validators/rule-engine/index.d.ts +1 -1
  288. package/dist/validators/rule-engine/rule-context.d.ts +20 -3
  289. package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
  290. package/dist/validators/rule-engine/rule-context.js +3 -1
  291. package/dist/validators/rule-engine/rule-context.js.map +1 -1
  292. package/dist/validators/rule-engine/rule-engine.d.ts +2 -2
  293. package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
  294. package/dist/validators/rule-engine/rule-engine.js +52 -13
  295. package/dist/validators/rule-engine/rule-engine.js.map +1 -1
  296. package/dist/validators/skill-validator.d.ts.map +1 -1
  297. package/dist/validators/skill-validator.js +91 -54
  298. package/dist/validators/skill-validator.js.map +1 -1
  299. package/dist/validators/source-only-codes.js +1 -1
  300. package/dist/validators/source-only-codes.js.map +1 -1
  301. package/dist/validators/types.d.ts +21 -1
  302. package/dist/validators/types.d.ts.map +1 -1
  303. package/dist/validators/unified-validator.d.ts.map +1 -1
  304. package/dist/validators/unified-validator.js +4 -5
  305. package/dist/validators/unified-validator.js.map +1 -1
  306. package/dist/validators/validation-rules.d.ts +4 -4
  307. package/dist/validators/validation-rules.d.ts.map +1 -1
  308. package/dist/validators/validation-rules.js +9 -38
  309. package/dist/validators/validation-rules.js.map +1 -1
  310. package/dist/validators/walker-to-issues.d.ts +9 -3
  311. package/dist/validators/walker-to-issues.d.ts.map +1 -1
  312. package/dist/validators/walker-to-issues.js +64 -19
  313. package/dist/validators/walker-to-issues.js.map +1 -1
  314. package/dist/walk-link-graph.d.ts +64 -5
  315. package/dist/walk-link-graph.d.ts.map +1 -1
  316. package/dist/walk-link-graph.js +376 -92
  317. package/dist/walk-link-graph.js.map +1 -1
  318. package/package.json +14 -22
  319. package/dist/skill-test/exit-codes.d.ts +0 -97
  320. package/dist/skill-test/exit-codes.d.ts.map +0 -1
  321. package/dist/skill-test/exit-codes.js +0 -141
  322. package/dist/skill-test/exit-codes.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/skill-test/lock.ts"],"names":[],"mappings":"AAIA,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,QAAQ,EAAE,MAAM;CAI7B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,CAwBlG;AAWD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,2BAA2B,GAAG,MAAM,IAAI,CAgBlF"}
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/skill-test/lock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;aAEpB,QAAQ,EAAE,MAAM;IAD5C,QAAQ,CAAC,MAAM,EAAG,WAAW,CAAU;gBACX,QAAQ,EAAE,MAAM;CAS7C;AAED,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,CAyClG;AAWD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,2BAA2B,GAAG,MAAM,IAAI,CAgBlF"}
@@ -1,9 +1,36 @@
1
1
  import { closeSync, openSync, rmSync } from 'node:fs';
2
- import { safePath } from '@vibe-agent-toolkit/utils';
3
- export class HarnessLockBusyError extends Error {
2
+ import { safePath, VatError } from '@vibe-agent-toolkit/utils';
3
+ /**
4
+ * The harness root for a subject set is already locked.
5
+ *
6
+ * Reason `preflight`, not `internal`. This is the most user-correctable condition in
7
+ * the command — the remedy is "wait, or delete one file" — and it was the ONE error
8
+ * class in this feature with no declared reason, so it fell through
9
+ * `skillTestFailureReason`'s default to `internal`. The published CI recipe reads
10
+ * `internal` as "the harness broke, fail the build", which is exactly the wrong
11
+ * verdict for a lock held by the operator's own second terminal.
12
+ *
13
+ * The field below is what `skillTestFailureReason` READS — it is not decoration
14
+ * mirroring an `instanceof` row, which is what it was when it was added. Deleting it
15
+ * turns this back into `internal`.
16
+ *
17
+ * The message names `lockPath` because the lockfile is created `O_EXCL` in the
18
+ * DETERMINISTIC harness root and released only on normal exit or SIGINT/SIGTERM —
19
+ * a SIGKILL, an OOM, or a crash leaves it behind and every later run of that skill
20
+ * fails here, with no `--force` to escape. Until the staleness protocol (pid +
21
+ * timestamp + liveness probe + `--force`) lands in its own lane, naming the path
22
+ * and saying to delete it IS the escape hatch, so it belongs in the message rather
23
+ * than in a doc the operator is not currently reading.
24
+ */
25
+ export class HarnessLockBusyError extends VatError {
26
+ lockPath;
27
+ reason = 'preflight';
4
28
  constructor(lockPath) {
5
- super(`Another vat skill test run holds the harness lock: ${lockPath}. Wait for it to finish or use a different subject set.`);
6
- this.name = 'HarnessLockBusyError';
29
+ super('HARNESS_LOCK_BUSY', `Another vat skill test run holds the harness lock: ${lockPath}. ` +
30
+ 'Wait for it to finish, or use a different subject set. ' +
31
+ 'If no other run is in progress the lock is stale (a previous run was killed, ' +
32
+ `crashed, or ran out of memory) — delete ${lockPath} and re-run.`);
33
+ this.lockPath = lockPath;
7
34
  }
8
35
  }
9
36
  /**
@@ -11,6 +38,34 @@ export class HarnessLockBusyError extends Error {
11
38
  * vat-vs-vat staging/result races for the same subject set. `wait: false`
12
39
  * fails fast; the default `wait: true` is reserved for the CLI to poll (v1
13
40
  * keeps the simple fail-fast — the CLI surfaces the busy message).
41
+ *
42
+ * ACQUIRING can throw (that is the whole point: EEXIST → {@link HarnessLockBusyError}).
43
+ * RELEASING cannot, and that asymmetry is deliberate. `rmSync(..., {force: true})`
44
+ * swallows only ENOENT, so an EPERM/EACCES/EROFS on the lockfile — a read-only
45
+ * volume, a `root`-owned temp dir, a Windows handle still open — threw out of the
46
+ * harness `finally` and REPLACED an already-good result (verdict computed, artifacts
47
+ * written, summary composed) with exit 1 and no summary, every artifact sitting
48
+ * unread on disk.
49
+ *
50
+ * The guard lives HERE rather than at the call site, where it originally went. A
51
+ * call-site wrapper is invisible to the compiler: reverting it to a bare
52
+ * `lock.release()` left the whole unit suite AND the integration suite green, so
53
+ * nothing but review stood between the fix and its own silent removal. Owning the
54
+ * contract in the definition — `release()` never throws — means there is no unwrapped
55
+ * call site left to lose. Note what that does NOT mean: `release(): void` encodes
56
+ * nothing about throwing, because TypeScript has no throws clause. The contract is
57
+ * held up by the two nested `try`s below and by the tests that pin each one, not by
58
+ * the signature.
59
+ *
60
+ * BOTH statements of the catch are guarded, and the second one is why: the warning
61
+ * write is itself an fd-level operation, and a synchronous EBADF/EPIPE on a file- or
62
+ * TTY-backed fd 2 threw straight back out — reinstating the exact failure the outer
63
+ * catch was added to prevent, on a path only reachable once something had already
64
+ * gone wrong. A test that mocks `process.stderr.write` to RETURN cannot see it.
65
+ *
66
+ * The failure is not silent: a lockfile that could not be removed will fail the NEXT
67
+ * run of this skill with a "busy" error, and an operator who saw nothing here has no
68
+ * way to connect the two.
14
69
  */
15
70
  export function acquireHarnessLock(harnessRoot, opts = {}) {
16
71
  const lockPath = safePath.joinUnderRoot(harnessRoot, '.vat-skill-test.lock');
@@ -19,7 +74,6 @@ export function acquireHarnessLock(harnessRoot, opts = {}) {
19
74
  let fd;
20
75
  try {
21
76
  // 'wx' = O_CREAT | O_EXCL — fails with EEXIST if the lockfile already exists.
22
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived harness root
23
77
  fd = openSync(lockPath, 'wx');
24
78
  }
25
79
  catch (err) {
@@ -35,7 +89,25 @@ export function acquireHarnessLock(harnessRoot, opts = {}) {
35
89
  if (released)
36
90
  return;
37
91
  released = true;
38
- rmSync(lockPath, { force: true });
92
+ try {
93
+ rmSync(lockPath, { force: true });
94
+ }
95
+ catch (err) {
96
+ try {
97
+ process.stderr.write(`warning: could not remove the harness lockfile ${lockPath} (the run's result stands): ` +
98
+ `${err instanceof Error ? err.message : String(err)}. ` +
99
+ 'The next run of this skill will report the lock as busy until it is deleted.\n');
100
+ // eslint-disable-next-line local/no-blind-catch -- the REPORTING channel (fd 2) is what threw; there is no surface left to carry the error to, and a rethrow from a `finally` would destroy a good harness result
101
+ }
102
+ catch {
103
+ // The REPORTING channel is what failed — an EBADF/EPIPE on a file- or
104
+ // TTY-backed fd 2 throws synchronously out of `write`. There is nowhere
105
+ // left to report it to, and rethrowing here would do exactly what the
106
+ // outer catch exists to prevent: destroy a good result from the harness
107
+ // `finally`. Swallowed deliberately, and it is the only swallow in this
108
+ // module that has no alternative surface.
109
+ }
110
+ }
39
111
  },
40
112
  };
41
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/skill-test/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,QAAgB;QAC1B,KAAK,CAAC,sDAAsD,QAAQ,yDAAyD,CAAC,CAAC;QAC/H,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAMD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAA2B,EAAE;IACnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAC7E,wGAAwG;IACxG,KAAK,IAAI,CAAC,IAAI,CAAC;IACf,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,8EAA8E;QAC9E,mGAAmG;QACnG,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,mFAAmF;AACnF,MAAM,cAAc,GAAqD;IACvE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,SAAS,EAAE,EAAE,CAAC;CAChB,CAAC;AAgBF;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAiC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAiD,EAAE,CAAC;IACpE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/skill-test/lock.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
1
2
  /**
2
3
  * Generic, pure, unit-testable bounded-parallel pipeline runner.
3
4
  *
@@ -12,7 +13,8 @@
12
13
  * tests (no real timers, no `Math.random`).
13
14
  */
14
15
  /** Thrown by a worker to back off (sleep) and retry the current item. */
15
- export declare class RateLimitSignal extends Error {
16
+ export declare class RateLimitSignal extends VatError {
17
+ constructor(message: string);
16
18
  }
17
19
  export interface RunPipelineOptions<T, R> {
18
20
  readonly items: readonly T[];
@@ -24,6 +26,22 @@ export interface RunPipelineOptions<T, R> {
24
26
  readonly onRateLimit?: (attempt: number) => number;
25
27
  /** Injectable for tests; defaults to a real `setTimeout`-based sleep. */
26
28
  readonly sleep?: (ms: number) => Promise<void>;
29
+ /**
30
+ * What to do when an item's retry budget is SPENT, instead of failing the run.
31
+ *
32
+ * The pipeline is the only layer that knows retries are exhausted: a worker sees a
33
+ * `RateLimitSignal` and cannot tell whether it is the first of five or the last.
34
+ * That is why a control-arm rate limit still destroyed a `--baseline` run — the
35
+ * worker correctly rethrew the signal (it is the retry protocol, not a failure),
36
+ * `runItemWithRetry` rethrew the IDENTICAL class once the budget was gone, and
37
+ * nothing downstream could distinguish the two.
38
+ *
39
+ * Returning a result records the exhaustion as an outcome and lets the run
40
+ * continue; the handler may still throw for items whose failure IS fatal. Absent →
41
+ * rethrow, which is the historical behaviour and stays the default so a caller
42
+ * that has not thought about it does not silently swallow a dead item.
43
+ */
44
+ readonly onRetriesExhausted?: (item: T, index: number, error: RateLimitSignal) => Promise<R> | R;
27
45
  }
28
46
  export declare function runPipeline<T, R>(o: RunPipelineOptions<T, R>): Promise<R[]>;
29
47
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/skill-test/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD;2EACuE;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AA8CD,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CA8BjF"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/skill-test/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAG5B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD;2EACuE;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAClG;AAmDD,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAoCjF"}
@@ -1,3 +1,4 @@
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
1
2
  /**
2
3
  * Generic, pure, unit-testable bounded-parallel pipeline runner.
3
4
  *
@@ -12,7 +13,10 @@
12
13
  * tests (no real timers, no `Math.random`).
13
14
  */
14
15
  /** Thrown by a worker to back off (sleep) and retry the current item. */
15
- export class RateLimitSignal extends Error {
16
+ export class RateLimitSignal extends VatError {
17
+ constructor(message) {
18
+ super('RATE_LIMIT', message);
19
+ }
16
20
  }
17
21
  /** Bounded retries on RateLimitSignal before giving up and rethrowing. */
18
22
  const MAX_RATE_LIMIT_RETRIES = 5;
@@ -26,15 +30,11 @@ function defaultSleep(ms) {
26
30
  setTimeout(resolve, ms);
27
31
  });
28
32
  }
29
- /**
30
- * Runs a single item to completion, retrying on {@link RateLimitSignal} up to
31
- * {@link MAX_RATE_LIMIT_RETRIES} times using the provided backoff + sleep.
32
- */
33
- async function runItemWithRetry(item, index, worker, onRateLimit, sleep) {
33
+ async function runItemWithRetry(item, index, deps) {
34
34
  let attempt = 0;
35
35
  for (;;) {
36
36
  try {
37
- return await worker(item, index);
37
+ return await deps.worker(item, index);
38
38
  }
39
39
  catch (error) {
40
40
  if (!(error instanceof RateLimitSignal)) {
@@ -42,9 +42,14 @@ async function runItemWithRetry(item, index, worker, onRateLimit, sleep) {
42
42
  }
43
43
  attempt += 1;
44
44
  if (attempt > MAX_RATE_LIMIT_RETRIES) {
45
- throw error;
45
+ // Budget spent. This is the ONE place that can tell an exhausted signal from
46
+ // a retryable one, so it is the only place that can offer the caller the
47
+ // choice — see {@link RunPipelineOptions.onRetriesExhausted}.
48
+ if (deps.onRetriesExhausted === undefined)
49
+ throw error;
50
+ return await deps.onRetriesExhausted(item, index, error);
46
51
  }
47
- await sleep(onRateLimit(attempt));
52
+ await deps.sleep(deps.onRateLimit(attempt));
48
53
  }
49
54
  }
50
55
  }
@@ -56,6 +61,12 @@ export async function runPipeline(o) {
56
61
  throw new Error(`runPipeline: concurrency must be an integer >= 1 (got ${concurrency})`);
57
62
  }
58
63
  const results = new Array(items.length);
64
+ const deps = {
65
+ worker,
66
+ onRateLimit,
67
+ sleep,
68
+ ...(o.onRetriesExhausted === undefined ? {} : { onRetriesExhausted: o.onRetriesExhausted }),
69
+ };
59
70
  let nextIndex = 0;
60
71
  async function runWorkerLoop() {
61
72
  for (;;) {
@@ -66,7 +77,7 @@ export async function runPipeline(o) {
66
77
  }
67
78
  // Non-null: index < items.length was just checked above.
68
79
  const item = items[index];
69
- results[index] = await runItemWithRetry(item, index, worker, onRateLimit, sleep);
80
+ results[index] = await runItemWithRetry(item, index, deps);
70
81
  }
71
82
  }
72
83
  const poolSize = Math.min(concurrency, items.length);
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/skill-test/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yEAAyE;AACzE,MAAM,OAAO,eAAgB,SAAQ,KAAK;CAAG;AAc7C,0EAA0E;AAC1E,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,IAAO,EACP,KAAa,EACb,MAA8C,EAC9C,WAAwC,EACxC,KAAoC;IAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,OAAO,GAAG,sBAAsB,EAAE,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAO,CAA2B;IACjE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,kBAAkB,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC;IAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,yDAAyD,WAAW,GAAG,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,OAAO,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,UAAU,aAAa;QAC1B,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,SAAS,CAAC;YACxB,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,yDAAyD;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAM,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/skill-test/pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type AuthMechanism, type AuthMode, type AuthStatusProbe, type ResolvedAuth } from '@vibe-agent-toolkit/utils';
1
+ import { type AuthMechanism, type AuthMode, type AuthStatusProbe, type ResolvedAuth } from '@vibe-agent-toolkit/utils/skill-test';
2
2
  export interface PreflightCheck {
3
3
  name: string;
4
4
  passed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/skill-test/preflight.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzG,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAeD,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA4DnE"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/skill-test/preflight.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzG,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAyED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAgDnE"}
@@ -1,34 +1,77 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { AuthPreflightError, resolveAuth, } from '@vibe-agent-toolkit/utils';
2
+ import { AuthPreflightError, resolveAuth, } from '@vibe-agent-toolkit/utils/skill-test';
3
+ /**
4
+ * Flags vat's spawn argv depends on that `claude --help` DOES document, so their
5
+ * absence is a real, detectable incompatibility and a hard preflight failure.
6
+ *
7
+ * `--no-session-persistence` is here for integrity, not convenience: without it
8
+ * Claude Code writes each headless session — grading nonce, answer key, the whole
9
+ * transcript — to `$CLAUDE_CONFIG_DIR/projects/`, which vat hands the untrusted
10
+ * child. See {@link assembleClaudeArgs}. A `claude` that cannot suppress that
11
+ * cannot run these evals honestly, so it fails closed rather than silently
12
+ * persisting.
13
+ */
3
14
  const REQUIRED_FLAGS = [
4
15
  '--plugin-dir', '--setting-sources', '--output-format',
5
- '--permission-mode', '--max-turns', '--max-budget-usd',
16
+ '--permission-mode', '--max-budget-usd', '--no-session-persistence',
6
17
  ];
18
+ /**
19
+ * Flags vat passes that are functional but NOT listed in `claude --help`.
20
+ *
21
+ * `--max-turns` works and its absence would be load-bearing, but it is
22
+ * undocumented in 2.x — so a help-text probe reports it missing on a claude that
23
+ * supports it perfectly. Reporting these as verified would be a lie in the other
24
+ * direction, so they are surfaced as unverifiable and never fail the run.
25
+ *
26
+ * Keep this list SHORT and re-check it when the vendor documents a flag: an entry
27
+ * here is a check vat is choosing not to make.
28
+ */
29
+ const UNVERIFIABLE_FLAGS = ['--max-turns'];
7
30
  function checkExists(label, paths) {
8
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- our own resolved absolute paths
9
31
  const missing = paths.filter(p => !existsSync(p));
10
32
  return missing.length === 0
11
33
  ? { name: label, passed: true, message: `all ${paths.length} present` }
12
34
  : { name: label, passed: false, message: `missing: ${missing.join(', ')}`, suggestion: 'These are declared but absent (exit 2).' };
13
35
  }
36
+ /**
37
+ * Why a missing flag stops the run. `--no-session-persistence` gets its own text
38
+ * because its absence is not a compatibility inconvenience — it puts the grading
39
+ * nonce and the eval answer key on a disk the skill under test can read.
40
+ */
41
+ function upgradeSuggestionFor(flag) {
42
+ return flag === '--no-session-persistence'
43
+ ? 'Upgrade Claude Code. Without --no-session-persistence the harness cannot keep the grading nonce and answer key off a disk the skill under test can read, so it refuses to run.'
44
+ : 'Upgrade Claude Code — this flag is part of the harness spawn and has no fallback.';
45
+ }
46
+ /**
47
+ * One check per flag the spawn argv carries: gated for the ones `claude --help`
48
+ * documents, informational for the ones it does not (see {@link UNVERIFIABLE_FLAGS}).
49
+ * Both are REPORTED — the probe this replaced said "supported" about every flag
50
+ * without being able to tell, so silence about a flag is exactly the failure mode.
51
+ */
52
+ function flagChecks(probe) {
53
+ const gated = REQUIRED_FLAGS.map((flag) => {
54
+ const ok = probe(flag);
55
+ return {
56
+ name: `flag ${flag}`,
57
+ passed: ok,
58
+ message: ok ? 'supported' : 'NOT supported by this claude',
59
+ ...(ok ? {} : { suggestion: upgradeSuggestionFor(flag) }),
60
+ };
61
+ });
62
+ const informational = UNVERIFIABLE_FLAGS.map((flag) => ({
63
+ name: `flag ${flag}`,
64
+ passed: true,
65
+ message: 'passed but undocumented — support not verifiable from --help',
66
+ }));
67
+ return [...gated, ...informational];
68
+ }
14
69
  export function runPreflight(input) {
15
70
  const checks = [];
16
71
  const version = input.claudeVersionProbe();
17
72
  checks.push(version
18
73
  ? { name: 'claude binary', passed: true, message: version }
19
- : { name: 'claude binary', passed: false, message: 'not reachable', suggestion: 'Install Claude Code CLI.' });
20
- for (const flag of REQUIRED_FLAGS) {
21
- const ok = input.flagParseProbe(flag);
22
- checks.push({
23
- name: `flag ${flag}`,
24
- passed: ok,
25
- message: ok ? 'supported' : 'NOT supported by this claude',
26
- ...(flag === '--max-turns' && !ok
27
- ? { suggestion: '--max-turns is functional-but-undocumented in 2.x; its absence is load-bearing.' }
28
- : {}),
29
- });
30
- }
31
- checks.push(input.integrityOk()
74
+ : { name: 'claude binary', passed: false, message: 'not reachable', suggestion: 'Install Claude Code CLI.' }, ...flagChecks(input.flagParseProbe), input.integrityOk()
32
75
  ? { name: 'vendored skill-creator integrity', passed: true, message: 'manifest verified' }
33
76
  : { name: 'vendored skill-creator integrity', passed: false, message: 'hash manifest mismatch', suggestion: 'Re-sync the vendored copy.' }, checkExists('eval input files', input.evalInputPaths), checkExists('declared dependencies', input.declaredDepDirs));
34
77
  let resolvedAuth = null;
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/skill-test/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/skill-test/preflight.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
1
2
  /**
2
3
  * Thrown when a vat-generated prompt (executor or grader) violates one of its
3
4
  * required invariants — a missing required directive, or the presence of a
4
5
  * forbidden phrase (e.g. an executor "blinding breaker").
5
6
  *
6
7
  * Shared across the `*-prompt.ts` modules in `skill-test/` so
7
- * `exit-codes.ts`'s `mapErrorToExitCode` maps all of them to the same
8
+ * `failure-reason.ts`'s `skillTestFailureReason` maps all of them to the same
8
9
  * user-correctable preflight exit code (2), regardless of which prompt
9
10
  * builder raised it.
10
11
  */
11
- export declare class PromptInvariantError extends Error {
12
+ export declare class PromptInvariantError extends VatError {
13
+ readonly reason: "preflight";
12
14
  constructor(message: string);
13
15
  }
14
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-invariants.d.ts","sourceRoot":"","sources":["../../src/skill-test/prompt-invariants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnF"}
1
+ {"version":3,"file":"prompt-invariants.d.ts","sourceRoot":"","sources":["../../src/skill-test/prompt-invariants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,QAAQ,CAAC,MAAM,EAAG,WAAW,CAAU;gBAC3B,OAAO,EAAE,MAAM;CAG5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnF"}
@@ -1,17 +1,18 @@
1
+ import { VatError } from '@vibe-agent-toolkit/utils';
1
2
  /**
2
3
  * Thrown when a vat-generated prompt (executor or grader) violates one of its
3
4
  * required invariants — a missing required directive, or the presence of a
4
5
  * forbidden phrase (e.g. an executor "blinding breaker").
5
6
  *
6
7
  * Shared across the `*-prompt.ts` modules in `skill-test/` so
7
- * `exit-codes.ts`'s `mapErrorToExitCode` maps all of them to the same
8
+ * `failure-reason.ts`'s `skillTestFailureReason` maps all of them to the same
8
9
  * user-correctable preflight exit code (2), regardless of which prompt
9
10
  * builder raised it.
10
11
  */
11
- export class PromptInvariantError extends Error {
12
+ export class PromptInvariantError extends VatError {
13
+ reason = 'preflight';
12
14
  constructor(message) {
13
- super(`Prompt invariant violated: ${message}`);
14
- this.name = 'PromptInvariantError';
15
+ super('PROMPT_INVARIANT', `Prompt invariant violated: ${message}`);
15
16
  }
16
17
  }
17
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-invariants.js","sourceRoot":"","sources":["../../src/skill-test/prompt-invariants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAc,EAAE,KAAa;IACzE,OAAO;QACL,MAAM;QACN,EAAE;QACF,2EAA2E;QAC3E,6DAA6D,KAAK,EAAE;QACpE,+EAA+E;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"prompt-invariants.js","sourceRoot":"","sources":["../../src/skill-test/prompt-invariants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,MAAM,GAAG,WAAoB,CAAC;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,kBAAkB,EAAE,8BAA8B,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAc,EAAE,KAAa;IACzE,OAAO;QACL,MAAM;QACN,EAAE;QACF,2EAA2E;QAC3E,6DAA6D,KAAK,EAAE;QACpE,+EAA+E;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}