@deftai/directive-core 0.55.0

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 (861) hide show
  1. package/dist/architecture/sor-preflight.d.ts +66 -0
  2. package/dist/architecture/sor-preflight.js +903 -0
  3. package/dist/branch/evaluate.d.ts +23 -0
  4. package/dist/branch/evaluate.js +136 -0
  5. package/dist/branch/git.d.ts +15 -0
  6. package/dist/branch/git.js +42 -0
  7. package/dist/branch/index.d.ts +3 -0
  8. package/dist/branch/index.js +3 -0
  9. package/dist/cache/cli.d.ts +3 -0
  10. package/dist/cache/cli.js +8 -0
  11. package/dist/cache/constants.d.ts +12 -0
  12. package/dist/cache/constants.js +14 -0
  13. package/dist/cache/errors.d.ts +34 -0
  14. package/dist/cache/errors.js +52 -0
  15. package/dist/cache/fetch.d.ts +101 -0
  16. package/dist/cache/fetch.js +413 -0
  17. package/dist/cache/index.d.ts +14 -0
  18. package/dist/cache/index.js +14 -0
  19. package/dist/cache/io.d.ts +15 -0
  20. package/dist/cache/io.js +53 -0
  21. package/dist/cache/json.d.ts +11 -0
  22. package/dist/cache/json.js +32 -0
  23. package/dist/cache/main.d.ts +3 -0
  24. package/dist/cache/main.js +319 -0
  25. package/dist/cache/operations.d.ts +34 -0
  26. package/dist/cache/operations.js +348 -0
  27. package/dist/cache/paths.d.ts +7 -0
  28. package/dist/cache/paths.js +27 -0
  29. package/dist/cache/quota.d.ts +56 -0
  30. package/dist/cache/quota.js +191 -0
  31. package/dist/cache/scanner.d.ts +28 -0
  32. package/dist/cache/scanner.js +362 -0
  33. package/dist/cache/test-helpers.d.ts +10 -0
  34. package/dist/cache/test-helpers.js +17 -0
  35. package/dist/cache/time.d.ts +9 -0
  36. package/dist/cache/time.js +20 -0
  37. package/dist/cache/types.d.ts +50 -0
  38. package/dist/cache/types.js +2 -0
  39. package/dist/cache/validate.d.ts +3 -0
  40. package/dist/cache/validate.js +118 -0
  41. package/dist/capacity/backfill.d.ts +52 -0
  42. package/dist/capacity/backfill.js +429 -0
  43. package/dist/capacity/index.d.ts +3 -0
  44. package/dist/capacity/index.js +3 -0
  45. package/dist/capacity/show.d.ts +73 -0
  46. package/dist/capacity/show.js +387 -0
  47. package/dist/check/index.d.ts +3 -0
  48. package/dist/check/index.js +2 -0
  49. package/dist/check/orchestrator.d.ts +51 -0
  50. package/dist/check/orchestrator.js +71 -0
  51. package/dist/codebase/constants.d.ts +2 -0
  52. package/dist/codebase/constants.js +2 -0
  53. package/dist/codebase/default-extractor.d.ts +28 -0
  54. package/dist/codebase/default-extractor.js +713 -0
  55. package/dist/codebase/index.d.ts +8 -0
  56. package/dist/codebase/index.js +8 -0
  57. package/dist/codebase/json.d.ts +14 -0
  58. package/dist/codebase/json.js +45 -0
  59. package/dist/codebase/map-fresh.d.ts +11 -0
  60. package/dist/codebase/map-fresh.js +125 -0
  61. package/dist/codebase/map.d.ts +19 -0
  62. package/dist/codebase/map.js +345 -0
  63. package/dist/codebase/projection-registry.d.ts +25 -0
  64. package/dist/codebase/projection-registry.js +93 -0
  65. package/dist/codebase/provider.d.ts +30 -0
  66. package/dist/codebase/provider.js +696 -0
  67. package/dist/content-contracts/skills/greptile-detector.d.ts +56 -0
  68. package/dist/content-contracts/skills/greptile-detector.js +368 -0
  69. package/dist/content-contracts/skills/helpers.d.ts +24 -0
  70. package/dist/content-contracts/skills/helpers.js +73 -0
  71. package/dist/content-contracts/skills/skill-frontmatter.d.ts +7 -0
  72. package/dist/content-contracts/skills/skill-frontmatter.js +65 -0
  73. package/dist/content-contracts/standards/_helpers.d.ts +49 -0
  74. package/dist/content-contracts/standards/_helpers.js +227 -0
  75. package/dist/content-contracts/standards/_shapes.d.ts +12 -0
  76. package/dist/content-contracts/standards/_shapes.js +45 -0
  77. package/dist/content-contracts/standards/_taskfile-helpers.d.ts +12 -0
  78. package/dist/content-contracts/standards/_taskfile-helpers.js +61 -0
  79. package/dist/content-root.d.ts +47 -0
  80. package/dist/content-root.js +89 -0
  81. package/dist/doctor/agents-md.d.ts +14 -0
  82. package/dist/doctor/agents-md.js +263 -0
  83. package/dist/doctor/checks.d.ts +16 -0
  84. package/dist/doctor/checks.js +351 -0
  85. package/dist/doctor/cli.d.ts +2 -0
  86. package/dist/doctor/cli.js +7 -0
  87. package/dist/doctor/constants.d.ts +15 -0
  88. package/dist/doctor/constants.js +40 -0
  89. package/dist/doctor/doctor-state.d.ts +16 -0
  90. package/dist/doctor/doctor-state.js +117 -0
  91. package/dist/doctor/flags.d.ts +5 -0
  92. package/dist/doctor/flags.js +63 -0
  93. package/dist/doctor/index.d.ts +14 -0
  94. package/dist/doctor/index.js +14 -0
  95. package/dist/doctor/json.d.ts +3 -0
  96. package/dist/doctor/json.js +21 -0
  97. package/dist/doctor/main.d.ts +3 -0
  98. package/dist/doctor/main.js +387 -0
  99. package/dist/doctor/manifest.d.ts +11 -0
  100. package/dist/doctor/manifest.js +114 -0
  101. package/dist/doctor/output.d.ts +19 -0
  102. package/dist/doctor/output.js +49 -0
  103. package/dist/doctor/paths.d.ts +16 -0
  104. package/dist/doctor/paths.js +106 -0
  105. package/dist/doctor/payload-staleness.d.ts +13 -0
  106. package/dist/doctor/payload-staleness.js +165 -0
  107. package/dist/doctor/taskfile.d.ts +6 -0
  108. package/dist/doctor/taskfile.js +65 -0
  109. package/dist/doctor/types.d.ts +76 -0
  110. package/dist/doctor/types.js +4 -0
  111. package/dist/doctor/which.d.ts +3 -0
  112. package/dist/doctor/which.js +17 -0
  113. package/dist/encoding/evaluate.d.ts +19 -0
  114. package/dist/encoding/evaluate.js +155 -0
  115. package/dist/encoding/git.d.ts +11 -0
  116. package/dist/encoding/git.js +36 -0
  117. package/dist/encoding/index.d.ts +6 -0
  118. package/dist/encoding/index.js +6 -0
  119. package/dist/encoding/patterns.d.ts +29 -0
  120. package/dist/encoding/patterns.js +109 -0
  121. package/dist/encoding/scan.d.ts +24 -0
  122. package/dist/encoding/scan.js +182 -0
  123. package/dist/encoding/text.d.ts +21 -0
  124. package/dist/encoding/text.js +111 -0
  125. package/dist/index.d.ts +54 -0
  126. package/dist/index.js +55 -0
  127. package/dist/intake/candidates-log.d.ts +20 -0
  128. package/dist/intake/candidates-log.js +224 -0
  129. package/dist/intake/github-auth-modes-cli.d.ts +3 -0
  130. package/dist/intake/github-auth-modes-cli.js +23 -0
  131. package/dist/intake/github-auth-modes.d.ts +54 -0
  132. package/dist/intake/github-auth-modes.js +275 -0
  133. package/dist/intake/github-body-cli.d.ts +3 -0
  134. package/dist/intake/github-body-cli.js +30 -0
  135. package/dist/intake/github-body.d.ts +48 -0
  136. package/dist/intake/github-body.js +151 -0
  137. package/dist/intake/index.d.ts +15 -0
  138. package/dist/intake/index.js +15 -0
  139. package/dist/intake/issue-emit-cli.d.ts +3 -0
  140. package/dist/intake/issue-emit-cli.js +34 -0
  141. package/dist/intake/issue-emit.d.ts +63 -0
  142. package/dist/intake/issue-emit.js +351 -0
  143. package/dist/intake/issue-ingest-cli.d.ts +3 -0
  144. package/dist/intake/issue-ingest-cli.js +33 -0
  145. package/dist/intake/issue-ingest.d.ts +53 -0
  146. package/dist/intake/issue-ingest.js +477 -0
  147. package/dist/intake/markdown-scanners.d.ts +23 -0
  148. package/dist/intake/markdown-scanners.js +247 -0
  149. package/dist/intake/parity-scenarios.d.ts +22 -0
  150. package/dist/intake/parity-scenarios.js +32 -0
  151. package/dist/intake/platform-capabilities.d.ts +11 -0
  152. package/dist/intake/platform-capabilities.js +34 -0
  153. package/dist/intake/reconcile-issues-cli.d.ts +3 -0
  154. package/dist/intake/reconcile-issues-cli.js +31 -0
  155. package/dist/intake/reconcile-issues.d.ts +60 -0
  156. package/dist/intake/reconcile-issues.js +756 -0
  157. package/dist/integration-e2e/bootstrap-cache-module.d.ts +5 -0
  158. package/dist/integration-e2e/bootstrap-cache-module.js +21 -0
  159. package/dist/integration-e2e/helpers.d.ts +28 -0
  160. package/dist/integration-e2e/helpers.js +157 -0
  161. package/dist/lifecycle/event-detect.d.ts +32 -0
  162. package/dist/lifecycle/event-detect.js +172 -0
  163. package/dist/lifecycle/events.d.ts +45 -0
  164. package/dist/lifecycle/events.js +340 -0
  165. package/dist/lifecycle/index.d.ts +4 -0
  166. package/dist/lifecycle/index.js +4 -0
  167. package/dist/lifecycle/lifecycle-hygiene.d.ts +59 -0
  168. package/dist/lifecycle/lifecycle-hygiene.js +388 -0
  169. package/dist/orchestration/index.d.ts +7 -0
  170. package/dist/orchestration/index.js +7 -0
  171. package/dist/orchestration/judgment-policy.d.ts +23 -0
  172. package/dist/orchestration/judgment-policy.js +228 -0
  173. package/dist/orchestration/pathspec.d.ts +11 -0
  174. package/dist/orchestration/pathspec.js +95 -0
  175. package/dist/orchestration/probe-session.d.ts +74 -0
  176. package/dist/orchestration/probe-session.js +478 -0
  177. package/dist/orchestration/subagent-monitor.d.ts +64 -0
  178. package/dist/orchestration/subagent-monitor.js +405 -0
  179. package/dist/orchestration/verify-investigation.d.ts +27 -0
  180. package/dist/orchestration/verify-investigation.js +314 -0
  181. package/dist/orchestration/verify-judgment-gates.d.ts +66 -0
  182. package/dist/orchestration/verify-judgment-gates.js +710 -0
  183. package/dist/packs/index.d.ts +4 -0
  184. package/dist/packs/index.js +4 -0
  185. package/dist/packs/pack-render.d.ts +31 -0
  186. package/dist/packs/pack-render.js +357 -0
  187. package/dist/packs/packs-slice.d.ts +58 -0
  188. package/dist/packs/packs-slice.js +649 -0
  189. package/dist/packs/quarantine-ext.d.ts +7 -0
  190. package/dist/packs/quarantine-ext.js +164 -0
  191. package/dist/platform/agents-md.d.ts +31 -0
  192. package/dist/platform/agents-md.js +320 -0
  193. package/dist/platform/changelog-cli.d.ts +3 -0
  194. package/dist/platform/changelog-cli.js +64 -0
  195. package/dist/platform/constants.d.ts +20 -0
  196. package/dist/platform/constants.js +27 -0
  197. package/dist/platform/index.d.ts +9 -0
  198. package/dist/platform/index.js +9 -0
  199. package/dist/platform/ip-risk.d.ts +10 -0
  200. package/dist/platform/ip-risk.js +235 -0
  201. package/dist/platform/linear-scan.d.ts +36 -0
  202. package/dist/platform/linear-scan.js +174 -0
  203. package/dist/platform/platform-capabilities.d.ts +45 -0
  204. package/dist/platform/platform-capabilities.js +190 -0
  205. package/dist/platform/resolve-changelog-unreleased.d.ts +24 -0
  206. package/dist/platform/resolve-changelog-unreleased.js +364 -0
  207. package/dist/platform/resolve-version.d.ts +22 -0
  208. package/dist/platform/resolve-version.js +303 -0
  209. package/dist/platform/slug-normalize.d.ts +9 -0
  210. package/dist/platform/slug-normalize.js +110 -0
  211. package/dist/policy/autonomy.d.ts +43 -0
  212. package/dist/policy/autonomy.js +220 -0
  213. package/dist/policy/capacity.d.ts +45 -0
  214. package/dist/policy/capacity.js +251 -0
  215. package/dist/policy/decisions.d.ts +26 -0
  216. package/dist/policy/decisions.js +114 -0
  217. package/dist/policy/disclosure.d.ts +4 -0
  218. package/dist/policy/disclosure.js +19 -0
  219. package/dist/policy/index.d.ts +43 -0
  220. package/dist/policy/index.js +298 -0
  221. package/dist/policy/resolve.d.ts +38 -0
  222. package/dist/policy/resolve.js +228 -0
  223. package/dist/policy/wip.d.ts +15 -0
  224. package/dist/policy/wip.js +81 -0
  225. package/dist/pr-closing-keywords/constants.d.ts +6 -0
  226. package/dist/pr-closing-keywords/constants.js +6 -0
  227. package/dist/pr-closing-keywords/detect.d.ts +5 -0
  228. package/dist/pr-closing-keywords/detect.js +113 -0
  229. package/dist/pr-closing-keywords/gh.d.ts +6 -0
  230. package/dist/pr-closing-keywords/gh.js +129 -0
  231. package/dist/pr-closing-keywords/index.d.ts +7 -0
  232. package/dist/pr-closing-keywords/index.js +6 -0
  233. package/dist/pr-closing-keywords/io.d.ts +3 -0
  234. package/dist/pr-closing-keywords/io.js +22 -0
  235. package/dist/pr-closing-keywords/main.d.ts +9 -0
  236. package/dist/pr-closing-keywords/main.js +246 -0
  237. package/dist/pr-closing-keywords/types.d.ts +23 -0
  238. package/dist/pr-closing-keywords/types.js +2 -0
  239. package/dist/pr-merge-readiness/compute.d.ts +7 -0
  240. package/dist/pr-merge-readiness/compute.js +210 -0
  241. package/dist/pr-merge-readiness/constants.d.ts +20 -0
  242. package/dist/pr-merge-readiness/constants.js +32 -0
  243. package/dist/pr-merge-readiness/evaluate.d.ts +5 -0
  244. package/dist/pr-merge-readiness/evaluate.js +48 -0
  245. package/dist/pr-merge-readiness/gh.d.ts +22 -0
  246. package/dist/pr-merge-readiness/gh.js +281 -0
  247. package/dist/pr-merge-readiness/index.d.ts +9 -0
  248. package/dist/pr-merge-readiness/index.js +8 -0
  249. package/dist/pr-merge-readiness/main.d.ts +14 -0
  250. package/dist/pr-merge-readiness/main.js +67 -0
  251. package/dist/pr-merge-readiness/output.d.ts +7 -0
  252. package/dist/pr-merge-readiness/output.js +98 -0
  253. package/dist/pr-merge-readiness/parse.d.ts +6 -0
  254. package/dist/pr-merge-readiness/parse.js +83 -0
  255. package/dist/pr-merge-readiness/types.d.ts +29 -0
  256. package/dist/pr-merge-readiness/types.js +2 -0
  257. package/dist/pr-monitor/cadence.d.ts +3 -0
  258. package/dist/pr-monitor/cadence.js +12 -0
  259. package/dist/pr-monitor/constants.d.ts +8 -0
  260. package/dist/pr-monitor/constants.js +12 -0
  261. package/dist/pr-monitor/index.d.ts +7 -0
  262. package/dist/pr-monitor/index.js +6 -0
  263. package/dist/pr-monitor/main.d.ts +17 -0
  264. package/dist/pr-monitor/main.js +169 -0
  265. package/dist/pr-monitor/monitor.d.ts +9 -0
  266. package/dist/pr-monitor/monitor.js +106 -0
  267. package/dist/pr-monitor/readiness.d.ts +6 -0
  268. package/dist/pr-monitor/readiness.js +64 -0
  269. package/dist/pr-monitor/types.d.ts +30 -0
  270. package/dist/pr-monitor/types.js +2 -0
  271. package/dist/pr-protected-issues/constants.d.ts +7 -0
  272. package/dist/pr-protected-issues/constants.js +7 -0
  273. package/dist/pr-protected-issues/gh.d.ts +9 -0
  274. package/dist/pr-protected-issues/gh.js +96 -0
  275. package/dist/pr-protected-issues/index.d.ts +6 -0
  276. package/dist/pr-protected-issues/index.js +5 -0
  277. package/dist/pr-protected-issues/main.d.ts +14 -0
  278. package/dist/pr-protected-issues/main.js +128 -0
  279. package/dist/pr-protected-issues/parse.d.ts +6 -0
  280. package/dist/pr-protected-issues/parse.js +21 -0
  281. package/dist/pr-protected-issues/types.d.ts +8 -0
  282. package/dist/pr-protected-issues/types.js +2 -0
  283. package/dist/pr-wait-mergeable/cascade.d.ts +12 -0
  284. package/dist/pr-wait-mergeable/cascade.js +107 -0
  285. package/dist/pr-wait-mergeable/classify.d.ts +5 -0
  286. package/dist/pr-wait-mergeable/classify.js +47 -0
  287. package/dist/pr-wait-mergeable/constants.d.ts +5 -0
  288. package/dist/pr-wait-mergeable/constants.js +5 -0
  289. package/dist/pr-wait-mergeable/index.d.ts +8 -0
  290. package/dist/pr-wait-mergeable/index.js +7 -0
  291. package/dist/pr-wait-mergeable/main.d.ts +18 -0
  292. package/dist/pr-wait-mergeable/main.js +213 -0
  293. package/dist/pr-wait-mergeable/result.d.ts +9 -0
  294. package/dist/pr-wait-mergeable/result.js +38 -0
  295. package/dist/pr-wait-mergeable/types.d.ts +16 -0
  296. package/dist/pr-wait-mergeable/types.js +2 -0
  297. package/dist/pr-wait-mergeable/wrappers.d.ts +26 -0
  298. package/dist/pr-wait-mergeable/wrappers.js +103 -0
  299. package/dist/preflight/evaluate.d.ts +22 -0
  300. package/dist/preflight/evaluate.js +137 -0
  301. package/dist/preflight/index.d.ts +3 -0
  302. package/dist/preflight/index.js +2 -0
  303. package/dist/preflight-cache/evaluate.d.ts +40 -0
  304. package/dist/preflight-cache/evaluate.js +481 -0
  305. package/dist/preflight-cache/index.d.ts +3 -0
  306. package/dist/preflight-cache/index.js +2 -0
  307. package/dist/preflight-gh/classifier.d.ts +56 -0
  308. package/dist/preflight-gh/classifier.js +415 -0
  309. package/dist/preflight-gh/index.d.ts +3 -0
  310. package/dist/preflight-gh/index.js +2 -0
  311. package/dist/release/changelog.d.ts +9 -0
  312. package/dist/release/changelog.js +105 -0
  313. package/dist/release/cli.d.ts +2 -0
  314. package/dist/release/cli.js +7 -0
  315. package/dist/release/constants.d.ts +22 -0
  316. package/dist/release/constants.js +85 -0
  317. package/dist/release/flags.d.ts +4 -0
  318. package/dist/release/flags.js +131 -0
  319. package/dist/release/gh.d.ts +16 -0
  320. package/dist/release/gh.js +210 -0
  321. package/dist/release/git.d.ts +11 -0
  322. package/dist/release/git.js +84 -0
  323. package/dist/release/index.d.ts +14 -0
  324. package/dist/release/index.js +15 -0
  325. package/dist/release/main.d.ts +3 -0
  326. package/dist/release/main.js +47 -0
  327. package/dist/release/paths.d.ts +6 -0
  328. package/dist/release/paths.js +39 -0
  329. package/dist/release/pipeline.d.ts +6 -0
  330. package/dist/release/pipeline.js +314 -0
  331. package/dist/release/pyproject-sync.d.ts +6 -0
  332. package/dist/release/pyproject-sync.js +52 -0
  333. package/dist/release/pyproject.d.ts +3 -0
  334. package/dist/release/pyproject.js +33 -0
  335. package/dist/release/python-bridge.d.ts +7 -0
  336. package/dist/release/python-bridge.js +144 -0
  337. package/dist/release/spawn.d.ts +8 -0
  338. package/dist/release/spawn.js +44 -0
  339. package/dist/release/types.d.ts +58 -0
  340. package/dist/release/types.js +2 -0
  341. package/dist/release/version.d.ts +11 -0
  342. package/dist/release/version.js +74 -0
  343. package/dist/release-e2e/constants.d.ts +22 -0
  344. package/dist/release-e2e/constants.js +43 -0
  345. package/dist/release-e2e/entrypoint-worker-thread.d.ts +2 -0
  346. package/dist/release-e2e/entrypoint-worker-thread.js +22 -0
  347. package/dist/release-e2e/entrypoint-worker.d.ts +13 -0
  348. package/dist/release-e2e/entrypoint-worker.js +50 -0
  349. package/dist/release-e2e/entrypoint.d.ts +40 -0
  350. package/dist/release-e2e/entrypoint.js +257 -0
  351. package/dist/release-e2e/flags.d.ts +5 -0
  352. package/dist/release-e2e/flags.js +80 -0
  353. package/dist/release-e2e/gh-ops.d.ts +5 -0
  354. package/dist/release-e2e/gh-ops.js +72 -0
  355. package/dist/release-e2e/git-ops.d.ts +6 -0
  356. package/dist/release-e2e/git-ops.js +47 -0
  357. package/dist/release-e2e/index.d.ts +10 -0
  358. package/dist/release-e2e/index.js +10 -0
  359. package/dist/release-e2e/main.d.ts +4 -0
  360. package/dist/release-e2e/main.js +78 -0
  361. package/dist/release-e2e/npm-ops.d.ts +29 -0
  362. package/dist/release-e2e/npm-ops.js +149 -0
  363. package/dist/release-e2e/rehearsal.d.ts +3 -0
  364. package/dist/release-e2e/rehearsal.js +51 -0
  365. package/dist/release-e2e/rollback-bridge.d.ts +3 -0
  366. package/dist/release-e2e/rollback-bridge.js +20 -0
  367. package/dist/release-e2e/types.d.ts +40 -0
  368. package/dist/release-e2e/types.js +2 -0
  369. package/dist/release-publish/cli.d.ts +2 -0
  370. package/dist/release-publish/cli.js +7 -0
  371. package/dist/release-publish/constants.d.ts +4 -0
  372. package/dist/release-publish/constants.js +24 -0
  373. package/dist/release-publish/flags.d.ts +5 -0
  374. package/dist/release-publish/flags.js +67 -0
  375. package/dist/release-publish/gh-api.d.ts +6 -0
  376. package/dist/release-publish/gh-api.js +102 -0
  377. package/dist/release-publish/index.d.ts +7 -0
  378. package/dist/release-publish/index.js +8 -0
  379. package/dist/release-publish/main.d.ts +3 -0
  380. package/dist/release-publish/main.js +38 -0
  381. package/dist/release-publish/pipeline.d.ts +4 -0
  382. package/dist/release-publish/pipeline.js +46 -0
  383. package/dist/release-publish/types.d.ts +25 -0
  384. package/dist/release-publish/types.js +2 -0
  385. package/dist/release-rollback/constants.d.ts +18 -0
  386. package/dist/release-rollback/constants.js +55 -0
  387. package/dist/release-rollback/flags.d.ts +4 -0
  388. package/dist/release-rollback/flags.js +136 -0
  389. package/dist/release-rollback/gh.d.ts +5 -0
  390. package/dist/release-rollback/gh.js +71 -0
  391. package/dist/release-rollback/git.d.ts +9 -0
  392. package/dist/release-rollback/git.js +87 -0
  393. package/dist/release-rollback/guard.d.ts +12 -0
  394. package/dist/release-rollback/guard.js +97 -0
  395. package/dist/release-rollback/index.d.ts +9 -0
  396. package/dist/release-rollback/index.js +10 -0
  397. package/dist/release-rollback/main.d.ts +3 -0
  398. package/dist/release-rollback/main.js +51 -0
  399. package/dist/release-rollback/pipeline.d.ts +7 -0
  400. package/dist/release-rollback/pipeline.js +221 -0
  401. package/dist/release-rollback/types.d.ts +41 -0
  402. package/dist/release-rollback/types.js +2 -0
  403. package/dist/render/constants.d.ts +16 -0
  404. package/dist/render/constants.js +78 -0
  405. package/dist/render/framework-commands.d.ts +41 -0
  406. package/dist/render/framework-commands.js +416 -0
  407. package/dist/render/index.d.ts +15 -0
  408. package/dist/render/index.js +15 -0
  409. package/dist/render/prd-render.d.ts +14 -0
  410. package/dist/render/prd-render.js +79 -0
  411. package/dist/render/project-render.d.ts +20 -0
  412. package/dist/render/project-render.js +169 -0
  413. package/dist/render/roadmap-render.d.ts +8 -0
  414. package/dist/render/roadmap-render.js +387 -0
  415. package/dist/render/spec-render.d.ts +13 -0
  416. package/dist/render/spec-render.js +362 -0
  417. package/dist/render/spec-validate.d.ts +6 -0
  418. package/dist/render/spec-validate.js +157 -0
  419. package/dist/render/text-utils.d.ts +8 -0
  420. package/dist/render/text-utils.js +72 -0
  421. package/dist/scm/argv.d.ts +7 -0
  422. package/dist/scm/argv.js +54 -0
  423. package/dist/scm/binary.d.ts +11 -0
  424. package/dist/scm/binary.js +35 -0
  425. package/dist/scm/build-command.d.ts +11 -0
  426. package/dist/scm/build-command.js +23 -0
  427. package/dist/scm/call.d.ts +25 -0
  428. package/dist/scm/call.js +38 -0
  429. package/dist/scm/cli.d.ts +3 -0
  430. package/dist/scm/cli.js +7 -0
  431. package/dist/scm/constants.d.ts +11 -0
  432. package/dist/scm/constants.js +11 -0
  433. package/dist/scm/errors.d.ts +5 -0
  434. package/dist/scm/errors.js +8 -0
  435. package/dist/scm/gh-rest.d.ts +74 -0
  436. package/dist/scm/gh-rest.js +326 -0
  437. package/dist/scm/index.d.ts +11 -0
  438. package/dist/scm/index.js +11 -0
  439. package/dist/scm/main.d.ts +12 -0
  440. package/dist/scm/main.js +65 -0
  441. package/dist/scm/py-format.d.ts +9 -0
  442. package/dist/scm/py-format.js +31 -0
  443. package/dist/scm/rest-dispatch.d.ts +14 -0
  444. package/dist/scm/rest-dispatch.js +175 -0
  445. package/dist/scope/audit-log.d.ts +14 -0
  446. package/dist/scope/audit-log.js +186 -0
  447. package/dist/scope/capacity-stamp.d.ts +3 -0
  448. package/dist/scope/capacity-stamp.js +45 -0
  449. package/dist/scope/cli.d.ts +4 -0
  450. package/dist/scope/cli.js +11 -0
  451. package/dist/scope/constants.d.ts +19 -0
  452. package/dist/scope/constants.js +44 -0
  453. package/dist/scope/decompose.d.ts +42 -0
  454. package/dist/scope/decompose.js +1016 -0
  455. package/dist/scope/decomposed-refs.d.ts +6 -0
  456. package/dist/scope/decomposed-refs.js +173 -0
  457. package/dist/scope/demote.d.ts +24 -0
  458. package/dist/scope/demote.js +209 -0
  459. package/dist/scope/index.d.ts +12 -0
  460. package/dist/scope/index.js +12 -0
  461. package/dist/scope/main.d.ts +30 -0
  462. package/dist/scope/main.js +365 -0
  463. package/dist/scope/project-context.d.ts +6 -0
  464. package/dist/scope/project-context.js +55 -0
  465. package/dist/scope/project-definition-sync.d.ts +3 -0
  466. package/dist/scope/project-definition-sync.js +157 -0
  467. package/dist/scope/transition.d.ts +10 -0
  468. package/dist/scope/transition.js +133 -0
  469. package/dist/scope/undo.d.ts +25 -0
  470. package/dist/scope/undo.js +334 -0
  471. package/dist/scope/vbrief-json.d.ts +4 -0
  472. package/dist/scope/vbrief-json.js +8 -0
  473. package/dist/scope/vbrief-ref.d.ts +11 -0
  474. package/dist/scope/vbrief-ref.js +100 -0
  475. package/dist/scope/wip-cap-check.d.ts +11 -0
  476. package/dist/scope/wip-cap-check.js +23 -0
  477. package/dist/session/git.d.ts +14 -0
  478. package/dist/session/git.js +49 -0
  479. package/dist/session/index.d.ts +9 -0
  480. package/dist/session/index.js +9 -0
  481. package/dist/session/json.d.ts +7 -0
  482. package/dist/session/json.js +29 -0
  483. package/dist/session/resume-conditions.d.ts +56 -0
  484. package/dist/session/resume-conditions.js +486 -0
  485. package/dist/session/ritual-entrypoint.d.ts +20 -0
  486. package/dist/session/ritual-entrypoint.js +86 -0
  487. package/dist/session/ritual-sentinel.d.ts +58 -0
  488. package/dist/session/ritual-sentinel.js +338 -0
  489. package/dist/session/session-start-hook.d.ts +14 -0
  490. package/dist/session/session-start-hook.js +53 -0
  491. package/dist/session/session-start.d.ts +41 -0
  492. package/dist/session/session-start.js +290 -0
  493. package/dist/session/staleness.d.ts +8 -0
  494. package/dist/session/staleness.js +91 -0
  495. package/dist/session/time.d.ts +5 -0
  496. package/dist/session/time.js +19 -0
  497. package/dist/session/verify-session-ritual.d.ts +29 -0
  498. package/dist/session/verify-session-ritual.js +222 -0
  499. package/dist/slice/cli.d.ts +21 -0
  500. package/dist/slice/cli.js +248 -0
  501. package/dist/slice/constants.d.ts +18 -0
  502. package/dist/slice/constants.js +30 -0
  503. package/dist/slice/errors.d.ts +9 -0
  504. package/dist/slice/errors.js +15 -0
  505. package/dist/slice/existing.d.ts +53 -0
  506. package/dist/slice/existing.js +344 -0
  507. package/dist/slice/index.d.ts +10 -0
  508. package/dist/slice/index.js +10 -0
  509. package/dist/slice/json.d.ts +7 -0
  510. package/dist/slice/json.js +25 -0
  511. package/dist/slice/lock.d.ts +9 -0
  512. package/dist/slice/lock.js +59 -0
  513. package/dist/slice/project-context.d.ts +15 -0
  514. package/dist/slice/project-context.js +87 -0
  515. package/dist/slice/record.d.ts +50 -0
  516. package/dist/slice/record.js +139 -0
  517. package/dist/slice/validate.d.ts +3 -0
  518. package/dist/slice/validate.js +86 -0
  519. package/dist/story-ready/allocation.d.ts +14 -0
  520. package/dist/story-ready/allocation.js +61 -0
  521. package/dist/story-ready/evaluate.d.ts +23 -0
  522. package/dist/story-ready/evaluate.js +161 -0
  523. package/dist/story-ready/git.d.ts +6 -0
  524. package/dist/story-ready/git.js +26 -0
  525. package/dist/story-ready/index.d.ts +4 -0
  526. package/dist/story-ready/index.js +4 -0
  527. package/dist/subprocess/max-buffer.d.ts +18 -0
  528. package/dist/subprocess/max-buffer.js +18 -0
  529. package/dist/swarm/complete-cohort-cli.d.ts +3 -0
  530. package/dist/swarm/complete-cohort-cli.js +42 -0
  531. package/dist/swarm/complete-cohort.d.ts +34 -0
  532. package/dist/swarm/complete-cohort.js +407 -0
  533. package/dist/swarm/constants.d.ts +18 -0
  534. package/dist/swarm/constants.js +24 -0
  535. package/dist/swarm/index.d.ts +18 -0
  536. package/dist/swarm/index.js +18 -0
  537. package/dist/swarm/launch-cli.d.ts +5 -0
  538. package/dist/swarm/launch-cli.js +111 -0
  539. package/dist/swarm/launch.d.ts +78 -0
  540. package/dist/swarm/launch.js +587 -0
  541. package/dist/swarm/readiness-cli.d.ts +3 -0
  542. package/dist/swarm/readiness-cli.js +25 -0
  543. package/dist/swarm/readiness.d.ts +24 -0
  544. package/dist/swarm/readiness.js +606 -0
  545. package/dist/swarm/routing-set-cli.d.ts +3 -0
  546. package/dist/swarm/routing-set-cli.js +82 -0
  547. package/dist/swarm/routing-verify-cli.d.ts +3 -0
  548. package/dist/swarm/routing-verify-cli.js +51 -0
  549. package/dist/swarm/routing-verify.d.ts +20 -0
  550. package/dist/swarm/routing-verify.js +104 -0
  551. package/dist/swarm/routing.d.ts +57 -0
  552. package/dist/swarm/routing.js +173 -0
  553. package/dist/swarm/subagent-backend.d.ts +22 -0
  554. package/dist/swarm/subagent-backend.js +162 -0
  555. package/dist/swarm/subprocess.d.ts +10 -0
  556. package/dist/swarm/subprocess.js +34 -0
  557. package/dist/swarm/verify-review-clean-cli.d.ts +3 -0
  558. package/dist/swarm/verify-review-clean-cli.js +38 -0
  559. package/dist/swarm/verify-review-clean.d.ts +40 -0
  560. package/dist/swarm/verify-review-clean.js +240 -0
  561. package/dist/swarm/worktrees-cli.d.ts +9 -0
  562. package/dist/swarm/worktrees-cli.js +57 -0
  563. package/dist/swarm/worktrees.d.ts +39 -0
  564. package/dist/swarm/worktrees.js +178 -0
  565. package/dist/text/redos-safe.d.ts +29 -0
  566. package/dist/text/redos-safe.js +338 -0
  567. package/dist/triage/actions/candidates-log.d.ts +8 -0
  568. package/dist/triage/actions/candidates-log.js +195 -0
  569. package/dist/triage/actions/errors.d.ts +17 -0
  570. package/dist/triage/actions/errors.js +29 -0
  571. package/dist/triage/actions/index.d.ts +19 -0
  572. package/dist/triage/actions/index.js +305 -0
  573. package/dist/triage/actions/resume-on.d.ts +3 -0
  574. package/dist/triage/actions/resume-on.js +65 -0
  575. package/dist/triage/actions/types.d.ts +57 -0
  576. package/dist/triage/actions/types.js +2 -0
  577. package/dist/triage/bootstrap/gitignore.d.ts +16 -0
  578. package/dist/triage/bootstrap/gitignore.js +414 -0
  579. package/dist/triage/bootstrap/index.d.ts +44 -0
  580. package/dist/triage/bootstrap/index.js +572 -0
  581. package/dist/triage/bootstrap/types.d.ts +60 -0
  582. package/dist/triage/bootstrap/types.js +2 -0
  583. package/dist/triage/bulk/index.d.ts +99 -0
  584. package/dist/triage/bulk/index.js +454 -0
  585. package/dist/triage/classify/index.d.ts +88 -0
  586. package/dist/triage/classify/index.js +738 -0
  587. package/dist/triage/help/index.d.ts +25 -0
  588. package/dist/triage/help/index.js +212 -0
  589. package/dist/triage/help/registry-data.d.ts +555 -0
  590. package/dist/triage/help/registry-data.js +841 -0
  591. package/dist/triage/index.d.ts +23 -0
  592. package/dist/triage/index.js +23 -0
  593. package/dist/triage/queue/audit.d.ts +12 -0
  594. package/dist/triage/queue/audit.js +47 -0
  595. package/dist/triage/queue/build-queue.d.ts +9 -0
  596. package/dist/triage/queue/build-queue.js +133 -0
  597. package/dist/triage/queue/cache.d.ts +20 -0
  598. package/dist/triage/queue/cache.js +169 -0
  599. package/dist/triage/queue/constants.d.ts +22 -0
  600. package/dist/triage/queue/constants.js +28 -0
  601. package/dist/triage/queue/derive-group.d.ts +7 -0
  602. package/dist/triage/queue/derive-group.js +20 -0
  603. package/dist/triage/queue/index.d.ts +12 -0
  604. package/dist/triage/queue/index.js +12 -0
  605. package/dist/triage/queue/project.d.ts +6 -0
  606. package/dist/triage/queue/project.js +18 -0
  607. package/dist/triage/queue/ranking-labels.d.ts +10 -0
  608. package/dist/triage/queue/ranking-labels.js +54 -0
  609. package/dist/triage/queue/render.d.ts +9 -0
  610. package/dist/triage/queue/render.js +35 -0
  611. package/dist/triage/queue/repo.d.ts +5 -0
  612. package/dist/triage/queue/repo.js +36 -0
  613. package/dist/triage/queue/scope-walk.d.ts +13 -0
  614. package/dist/triage/queue/scope-walk.js +170 -0
  615. package/dist/triage/queue/selection.d.ts +28 -0
  616. package/dist/triage/queue/selection.js +109 -0
  617. package/dist/triage/queue/types.d.ts +58 -0
  618. package/dist/triage/queue/types.js +2 -0
  619. package/dist/triage/reconcile/audit.d.ts +4 -0
  620. package/dist/triage/reconcile/audit.js +62 -0
  621. package/dist/triage/reconcile/index.d.ts +5 -0
  622. package/dist/triage/reconcile/index.js +5 -0
  623. package/dist/triage/reconcile/parse-uri.d.ts +4 -0
  624. package/dist/triage/reconcile/parse-uri.js +43 -0
  625. package/dist/triage/reconcile/reconcile.d.ts +17 -0
  626. package/dist/triage/reconcile/reconcile.js +163 -0
  627. package/dist/triage/reconcile/types.d.ts +23 -0
  628. package/dist/triage/reconcile/types.js +70 -0
  629. package/dist/triage/refresh/drift.d.ts +15 -0
  630. package/dist/triage/refresh/drift.js +72 -0
  631. package/dist/triage/refresh/extract.d.ts +3 -0
  632. package/dist/triage/refresh/extract.js +43 -0
  633. package/dist/triage/refresh/index.d.ts +5 -0
  634. package/dist/triage/refresh/index.js +5 -0
  635. package/dist/triage/refresh/refresh.d.ts +16 -0
  636. package/dist/triage/refresh/refresh.js +95 -0
  637. package/dist/triage/refresh/types.d.ts +18 -0
  638. package/dist/triage/refresh/types.js +7 -0
  639. package/dist/triage/scope/cli.d.ts +23 -0
  640. package/dist/triage/scope/cli.js +257 -0
  641. package/dist/triage/scope/constants.d.ts +16 -0
  642. package/dist/triage/scope/constants.js +25 -0
  643. package/dist/triage/scope/coverage.d.ts +24 -0
  644. package/dist/triage/scope/coverage.js +96 -0
  645. package/dist/triage/scope/duration.d.ts +6 -0
  646. package/dist/triage/scope/duration.js +44 -0
  647. package/dist/triage/scope/evaluate.d.ts +18 -0
  648. package/dist/triage/scope/evaluate.js +161 -0
  649. package/dist/triage/scope/index.d.ts +14 -0
  650. package/dist/triage/scope/index.js +14 -0
  651. package/dist/triage/scope/milestone.d.ts +13 -0
  652. package/dist/triage/scope/milestone.js +178 -0
  653. package/dist/triage/scope/mutations-core.d.ts +24 -0
  654. package/dist/triage/scope/mutations-core.js +216 -0
  655. package/dist/triage/scope/mutations.d.ts +21 -0
  656. package/dist/triage/scope/mutations.js +203 -0
  657. package/dist/triage/scope/normalize.d.ts +5 -0
  658. package/dist/triage/scope/normalize.js +45 -0
  659. package/dist/triage/scope/python-repr.d.ts +7 -0
  660. package/dist/triage/scope/python-repr.js +25 -0
  661. package/dist/triage/scope/renderers.d.ts +9 -0
  662. package/dist/triage/scope/renderers.js +177 -0
  663. package/dist/triage/scope/resolve.d.ts +15 -0
  664. package/dist/triage/scope/resolve.js +122 -0
  665. package/dist/triage/scope/time.d.ts +6 -0
  666. package/dist/triage/scope/time.js +18 -0
  667. package/dist/triage/scope/validate.d.ts +11 -0
  668. package/dist/triage/scope/validate.js +272 -0
  669. package/dist/triage/scope-drift/add-ignore.d.ts +10 -0
  670. package/dist/triage/scope-drift/add-ignore.js +78 -0
  671. package/dist/triage/scope-drift/cache-walker.d.ts +8 -0
  672. package/dist/triage/scope-drift/cache-walker.js +103 -0
  673. package/dist/triage/scope-drift/compute.d.ts +9 -0
  674. package/dist/triage/scope-drift/compute.js +92 -0
  675. package/dist/triage/scope-drift/index.d.ts +6 -0
  676. package/dist/triage/scope-drift/index.js +6 -0
  677. package/dist/triage/scope-drift/render.d.ts +4 -0
  678. package/dist/triage/scope-drift/render.js +45 -0
  679. package/dist/triage/scope-drift/scope-rules.d.ts +16 -0
  680. package/dist/triage/scope-drift/scope-rules.js +149 -0
  681. package/dist/triage/scope-drift/types.d.ts +13 -0
  682. package/dist/triage/scope-drift/types.js +8 -0
  683. package/dist/triage/smoketest/index.d.ts +81 -0
  684. package/dist/triage/smoketest/index.js +335 -0
  685. package/dist/triage/subscribe/index.d.ts +38 -0
  686. package/dist/triage/subscribe/index.js +303 -0
  687. package/dist/triage/summary/index.d.ts +70 -0
  688. package/dist/triage/summary/index.js +431 -0
  689. package/dist/triage/summary/reconcilable.d.ts +12 -0
  690. package/dist/triage/summary/reconcilable.js +150 -0
  691. package/dist/triage/summary/scope-drift.d.ts +5 -0
  692. package/dist/triage/summary/scope-drift.js +219 -0
  693. package/dist/triage/welcome/constants.d.ts +24 -0
  694. package/dist/triage/welcome/constants.js +34 -0
  695. package/dist/triage/welcome/default-mode.d.ts +21 -0
  696. package/dist/triage/welcome/default-mode.js +48 -0
  697. package/dist/triage/welcome/index.d.ts +6 -0
  698. package/dist/triage/welcome/index.js +6 -0
  699. package/dist/triage/welcome/prior-state.d.ts +17 -0
  700. package/dist/triage/welcome/prior-state.js +170 -0
  701. package/dist/triage/welcome/summary.d.ts +23 -0
  702. package/dist/triage/welcome/summary.js +303 -0
  703. package/dist/triage/welcome/writers.d.ts +17 -0
  704. package/dist/triage/welcome/writers.js +157 -0
  705. package/dist/ts-check-lane/index.d.ts +3 -0
  706. package/dist/ts-check-lane/index.js +2 -0
  707. package/dist/ts-check-lane/run-lane.d.ts +53 -0
  708. package/dist/ts-check-lane/run-lane.js +98 -0
  709. package/dist/validate-content/capacity-policy.d.ts +82 -0
  710. package/dist/validate-content/capacity-policy.js +399 -0
  711. package/dist/validate-content/capacity-show.d.ts +60 -0
  712. package/dist/validate-content/capacity-show.js +336 -0
  713. package/dist/validate-content/filename.d.ts +3 -0
  714. package/dist/validate-content/filename.js +54 -0
  715. package/dist/validate-content/index.d.ts +9 -0
  716. package/dist/validate-content/index.js +9 -0
  717. package/dist/validate-content/link-parser.d.ts +5 -0
  718. package/dist/validate-content/link-parser.js +42 -0
  719. package/dist/validate-content/types.d.ts +8 -0
  720. package/dist/validate-content/types.js +2 -0
  721. package/dist/validate-content/validate-links.d.ts +17 -0
  722. package/dist/validate-content/validate-links.js +114 -0
  723. package/dist/validate-content/validate-strategy-output.d.ts +11 -0
  724. package/dist/validate-content/validate-strategy-output.js +120 -0
  725. package/dist/validate-content/verify-capacity.d.ts +14 -0
  726. package/dist/validate-content/verify-capacity.js +96 -0
  727. package/dist/vbrief-activate/activate.d.ts +13 -0
  728. package/dist/vbrief-activate/activate.js +184 -0
  729. package/dist/vbrief-activate/constants.d.ts +9 -0
  730. package/dist/vbrief-activate/constants.js +11 -0
  731. package/dist/vbrief-activate/index.d.ts +6 -0
  732. package/dist/vbrief-activate/index.js +4 -0
  733. package/dist/vbrief-activate/main.d.ts +14 -0
  734. package/dist/vbrief-activate/main.js +33 -0
  735. package/dist/vbrief-build/build.d.ts +13 -0
  736. package/dist/vbrief-build/build.js +123 -0
  737. package/dist/vbrief-build/constants.d.ts +13 -0
  738. package/dist/vbrief-build/constants.js +34 -0
  739. package/dist/vbrief-build/index.d.ts +12 -0
  740. package/dist/vbrief-build/index.js +11 -0
  741. package/dist/vbrief-build/json.d.ts +3 -0
  742. package/dist/vbrief-build/json.js +5 -0
  743. package/dist/vbrief-build/main.d.ts +5 -0
  744. package/dist/vbrief-build/main.js +65 -0
  745. package/dist/vbrief-build/parity-scenarios.d.ts +19 -0
  746. package/dist/vbrief-build/parity-scenarios.js +321 -0
  747. package/dist/vbrief-build/project-definition-io.d.ts +13 -0
  748. package/dist/vbrief-build/project-definition-io.js +117 -0
  749. package/dist/vbrief-build/routing.d.ts +13 -0
  750. package/dist/vbrief-build/routing.js +110 -0
  751. package/dist/vbrief-build/sources.d.ts +16 -0
  752. package/dist/vbrief-build/sources.js +294 -0
  753. package/dist/vbrief-build/speckit.d.ts +23 -0
  754. package/dist/vbrief-build/speckit.js +212 -0
  755. package/dist/vbrief-build/types.d.ts +18 -0
  756. package/dist/vbrief-build/types.js +7 -0
  757. package/dist/vbrief-reconcile/graph.d.ts +11 -0
  758. package/dist/vbrief-reconcile/graph.js +171 -0
  759. package/dist/vbrief-reconcile/index.d.ts +10 -0
  760. package/dist/vbrief-reconcile/index.js +9 -0
  761. package/dist/vbrief-reconcile/labels.d.ts +22 -0
  762. package/dist/vbrief-reconcile/labels.js +252 -0
  763. package/dist/vbrief-reconcile/main.d.ts +18 -0
  764. package/dist/vbrief-reconcile/main.js +149 -0
  765. package/dist/vbrief-reconcile/parity-scenarios.d.ts +16 -0
  766. package/dist/vbrief-reconcile/parity-scenarios.js +385 -0
  767. package/dist/vbrief-reconcile/py-repr.d.ts +3 -0
  768. package/dist/vbrief-reconcile/py-repr.js +5 -0
  769. package/dist/vbrief-reconcile/reconciliation.d.ts +20 -0
  770. package/dist/vbrief-reconcile/reconciliation.js +542 -0
  771. package/dist/vbrief-reconcile/swarm-deps.d.ts +8 -0
  772. package/dist/vbrief-reconcile/swarm-deps.js +142 -0
  773. package/dist/vbrief-reconcile/types.d.ts +128 -0
  774. package/dist/vbrief-reconcile/types.js +2 -0
  775. package/dist/vbrief-reconcile/umbrellas.d.ts +48 -0
  776. package/dist/vbrief-reconcile/umbrellas.js +462 -0
  777. package/dist/vbrief-validate/conformance.d.ts +26 -0
  778. package/dist/vbrief-validate/conformance.js +273 -0
  779. package/dist/vbrief-validate/constants.d.ts +13 -0
  780. package/dist/vbrief-validate/constants.js +36 -0
  781. package/dist/vbrief-validate/decomposition.d.ts +3 -0
  782. package/dist/vbrief-validate/decomposition.js +38 -0
  783. package/dist/vbrief-validate/epic-links.d.ts +4 -0
  784. package/dist/vbrief-validate/epic-links.js +152 -0
  785. package/dist/vbrief-validate/filename.d.ts +5 -0
  786. package/dist/vbrief-validate/filename.js +62 -0
  787. package/dist/vbrief-validate/folder-status.d.ts +4 -0
  788. package/dist/vbrief-validate/folder-status.js +30 -0
  789. package/dist/vbrief-validate/index.d.ts +14 -0
  790. package/dist/vbrief-validate/index.js +11 -0
  791. package/dist/vbrief-validate/main.d.ts +17 -0
  792. package/dist/vbrief-validate/main.js +127 -0
  793. package/dist/vbrief-validate/origin.d.ts +4 -0
  794. package/dist/vbrief-validate/origin.js +76 -0
  795. package/dist/vbrief-validate/paths.d.ts +11 -0
  796. package/dist/vbrief-validate/paths.js +83 -0
  797. package/dist/vbrief-validate/placeholders.d.ts +3 -0
  798. package/dist/vbrief-validate/placeholders.js +33 -0
  799. package/dist/vbrief-validate/plan-hooks.d.ts +9 -0
  800. package/dist/vbrief-validate/plan-hooks.js +145 -0
  801. package/dist/vbrief-validate/precutover.d.ts +7 -0
  802. package/dist/vbrief-validate/precutover.js +30 -0
  803. package/dist/vbrief-validate/project-definition.d.ts +4 -0
  804. package/dist/vbrief-validate/project-definition.js +166 -0
  805. package/dist/vbrief-validate/schema.d.ts +8 -0
  806. package/dist/vbrief-validate/schema.js +150 -0
  807. package/dist/vbrief-validate/staleness.d.ts +3 -0
  808. package/dist/vbrief-validate/staleness.js +106 -0
  809. package/dist/vbrief-validate/validate-all.d.ts +17 -0
  810. package/dist/vbrief-validate/validate-all.js +119 -0
  811. package/dist/vbrief-validation/fidelity.d.ts +22 -0
  812. package/dist/vbrief-validation/fidelity.js +508 -0
  813. package/dist/vbrief-validation/index.d.ts +11 -0
  814. package/dist/vbrief-validation/index.js +8 -0
  815. package/dist/vbrief-validation/legacy-sections.d.ts +13 -0
  816. package/dist/vbrief-validation/legacy-sections.js +124 -0
  817. package/dist/vbrief-validation/main.d.ts +5 -0
  818. package/dist/vbrief-validation/main.js +65 -0
  819. package/dist/vbrief-validation/normalize.d.ts +22 -0
  820. package/dist/vbrief-validation/normalize.js +126 -0
  821. package/dist/vbrief-validation/parity-scenarios.d.ts +14 -0
  822. package/dist/vbrief-validation/parity-scenarios.js +523 -0
  823. package/dist/vbrief-validation/safety.d.ts +38 -0
  824. package/dist/vbrief-validation/safety.js +422 -0
  825. package/dist/vbrief-validation/story-quality.d.ts +29 -0
  826. package/dist/vbrief-validation/story-quality.js +452 -0
  827. package/dist/vbrief-validation/types.d.ts +58 -0
  828. package/dist/vbrief-validation/types.js +2 -0
  829. package/dist/vbrief-validation/validation.d.ts +15 -0
  830. package/dist/vbrief-validation/validation.js +123 -0
  831. package/dist/verify-env/index.d.ts +6 -0
  832. package/dist/verify-env/index.js +6 -0
  833. package/dist/verify-env/node-runtime.d.ts +6 -0
  834. package/dist/verify-env/node-runtime.js +11 -0
  835. package/dist/verify-env/toolchain-check.d.ts +28 -0
  836. package/dist/verify-env/toolchain-check.js +68 -0
  837. package/dist/verify-env/verify-hooks-installed.d.ts +21 -0
  838. package/dist/verify-env/verify-hooks-installed.js +162 -0
  839. package/dist/verify-env/verify-no-task-runtime.d.ts +20 -0
  840. package/dist/verify-env/verify-no-task-runtime.js +383 -0
  841. package/dist/verify-env/verify-tools.d.ts +59 -0
  842. package/dist/verify-env/verify-tools.js +354 -0
  843. package/dist/verify-source/code-structure-validate.d.ts +48 -0
  844. package/dist/verify-source/code-structure-validate.js +678 -0
  845. package/dist/verify-source/content-manifest.d.ts +102 -0
  846. package/dist/verify-source/content-manifest.js +282 -0
  847. package/dist/verify-source/index.d.ts +7 -0
  848. package/dist/verify-source/index.js +7 -0
  849. package/dist/verify-source/python-call-scan.d.ts +14 -0
  850. package/dist/verify-source/python-call-scan.js +137 -0
  851. package/dist/verify-source/rule-ownership-lint.d.ts +33 -0
  852. package/dist/verify-source/rule-ownership-lint.js +179 -0
  853. package/dist/verify-source/scm-boundary.d.ts +26 -0
  854. package/dist/verify-source/scm-boundary.js +170 -0
  855. package/dist/verify-source/verify-stubs.d.ts +19 -0
  856. package/dist/verify-source/verify-stubs.js +185 -0
  857. package/dist/wip-cap/evaluate.d.ts +17 -0
  858. package/dist/wip-cap/evaluate.js +62 -0
  859. package/dist/wip-cap/index.d.ts +2 -0
  860. package/dist/wip-cap/index.js +2 -0
  861. package/package.json +206 -0
@@ -0,0 +1,7 @@
1
+ /** Validate a cache key for the given source. */
2
+ export declare function validateKey(source: string, key: string): void;
3
+ /** Return `<cacheRoot>/<source>/<key>/` with path segments from `/` in key. */
4
+ export declare function entryDir(source: string, key: string, cacheRoot?: string): string;
5
+ /** Return `<cacheRoot>/quarantine-audit.jsonl`. */
6
+ export declare function auditPath(cacheRoot?: string): string;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1,27 @@
1
+ import { join } from "node:path";
2
+ import { ALLOWED_SOURCES, DEFAULT_CACHE_ROOT, GH_KEY_RE } from "./constants.js";
3
+ import { CacheError } from "./errors.js";
4
+ /** Validate a cache key for the given source. */
5
+ export function validateKey(source, key) {
6
+ if (source === "github-issue") {
7
+ if (!GH_KEY_RE.test(key)) {
8
+ throw new CacheError(`invalid github-issue key '${key}': expected '<owner>/<repo>/<N>' ` +
9
+ "(alphanumerics, '.', '_', '-' only; N positive integer)");
10
+ }
11
+ return;
12
+ }
13
+ throw new CacheError(`unknown source '${source}': v1 supports ${JSON.stringify([...ALLOWED_SOURCES].sort())}`);
14
+ }
15
+ /** Return `<cacheRoot>/<source>/<key>/` with path segments from `/` in key. */
16
+ export function entryDir(source, key, cacheRoot = DEFAULT_CACHE_ROOT) {
17
+ if (!ALLOWED_SOURCES.includes(source)) {
18
+ throw new CacheError(`unknown source '${source}': v1 supports ${JSON.stringify([...ALLOWED_SOURCES].sort())}`);
19
+ }
20
+ validateKey(source, key);
21
+ return join(cacheRoot, source, ...key.split("/"));
22
+ }
23
+ /** Return `<cacheRoot>/quarantine-audit.jsonl`. */
24
+ export function auditPath(cacheRoot = DEFAULT_CACHE_ROOT) {
25
+ return join(cacheRoot, "quarantine-audit.jsonl");
26
+ }
27
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1,56 @@
1
+ export declare const DEFAULT_MAX_BYTES: number;
2
+ export declare const DEFAULT_MAX_ENTRIES = 10000;
3
+ export declare const ENV_MAX_BYTES = "DEFT_CACHE_MAX_BYTES";
4
+ export declare const ENV_MAX_ENTRIES = "DEFT_CACHE_MAX_ENTRIES";
5
+ export declare const CAP_DISABLED = 0;
6
+ export interface CacheCaps {
7
+ maxBytes: number;
8
+ maxEntries: number;
9
+ }
10
+ export declare function bytesEnforced(caps: CacheCaps): boolean;
11
+ export declare function entriesEnforced(caps: CacheCaps): boolean;
12
+ export declare function anyEnforced(caps: CacheCaps): boolean;
13
+ export declare function resolveCaps(options?: {
14
+ maxBytes?: number | null;
15
+ maxEntries?: number | null;
16
+ }): CacheCaps;
17
+ export interface EntryUsage {
18
+ entryDir: string;
19
+ source: string;
20
+ key: string;
21
+ sizeBytes: number;
22
+ lastAccessed: number;
23
+ metaPresent: boolean;
24
+ }
25
+ export interface UsageReport {
26
+ totalBytes: number;
27
+ totalEntries: number;
28
+ entries: EntryUsage[];
29
+ }
30
+ export declare function scanUsage(cacheRoot: string, sources?: readonly string[]): UsageReport;
31
+ export declare function lruOrder(usage: UsageReport): EntryUsage[];
32
+ export declare function capBreached(usage: UsageReport, caps: CacheCaps, incomingBytes?: number, incomingEntries?: number): boolean;
33
+ export type EvictCallback = (victim: EntryUsage, reason: string, caps: CacheCaps) => void;
34
+ export declare function evictLru(cacheRoot: string, options: {
35
+ sources?: readonly string[];
36
+ caps: CacheCaps;
37
+ incomingBytes?: number;
38
+ incomingEntries?: number;
39
+ protectKeys?: ReadonlyArray<[string, string]>;
40
+ onEvict?: EvictCallback;
41
+ }): EntryUsage[];
42
+ export interface EnforceResult {
43
+ evicted: EntryUsage[];
44
+ finalUsage: UsageReport;
45
+ wouldBreach: boolean;
46
+ }
47
+ export declare function predictEvictionSet(cacheRoot: string, caps: CacheCaps, sources?: readonly string[]): EntryUsage[];
48
+ export declare function enforceCaps(cacheRoot: string, options?: {
49
+ sources?: readonly string[];
50
+ caps?: CacheCaps | null;
51
+ incomingBytes?: number;
52
+ incomingEntries?: number;
53
+ protectKeys?: ReadonlyArray<[string, string]>;
54
+ onEvict?: EvictCallback;
55
+ }): EnforceResult;
56
+ //# sourceMappingURL=quota.d.ts.map
@@ -0,0 +1,191 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { ALLOWED_SOURCES } from "./constants.js";
4
+ import { removeEntryDir } from "./io.js";
5
+ export const DEFAULT_MAX_BYTES = 100 * 1024 * 1024;
6
+ export const DEFAULT_MAX_ENTRIES = 10_000;
7
+ export const ENV_MAX_BYTES = "DEFT_CACHE_MAX_BYTES";
8
+ export const ENV_MAX_ENTRIES = "DEFT_CACHE_MAX_ENTRIES";
9
+ export const CAP_DISABLED = 0;
10
+ export function bytesEnforced(caps) {
11
+ return caps.maxBytes > 0;
12
+ }
13
+ export function entriesEnforced(caps) {
14
+ return caps.maxEntries > 0;
15
+ }
16
+ export function anyEnforced(caps) {
17
+ return bytesEnforced(caps) || entriesEnforced(caps);
18
+ }
19
+ function parseIntEnv(name, defaultValue) {
20
+ const raw = process.env[name];
21
+ if (raw === undefined || raw === "")
22
+ return defaultValue;
23
+ const value = Number.parseInt(raw, 10);
24
+ if (Number.isNaN(value) || value < 0)
25
+ return CAP_DISABLED;
26
+ return value;
27
+ }
28
+ export function resolveCaps(options) {
29
+ let maxBytes = options?.maxBytes ?? parseIntEnv(ENV_MAX_BYTES, DEFAULT_MAX_BYTES);
30
+ let maxEntries = options?.maxEntries ?? parseIntEnv(ENV_MAX_ENTRIES, DEFAULT_MAX_ENTRIES);
31
+ if (maxBytes < 0)
32
+ maxBytes = CAP_DISABLED;
33
+ if (maxEntries < 0)
34
+ maxEntries = CAP_DISABLED;
35
+ return { maxBytes, maxEntries };
36
+ }
37
+ function readMetaSize(metaPath) {
38
+ try {
39
+ const meta = JSON.parse(readFileSync(metaPath, "utf8"));
40
+ if (typeof meta !== "object" || meta === null)
41
+ return [0, "", "", false];
42
+ const size = meta.size_bytes;
43
+ const src = meta.source;
44
+ const key = meta.key;
45
+ const sizeBytes = typeof size === "number" && size >= 0 ? size : 0;
46
+ return [
47
+ sizeBytes,
48
+ typeof src === "string" ? src : "",
49
+ typeof key === "string" ? key : "",
50
+ true,
51
+ ];
52
+ }
53
+ catch {
54
+ return [0, "", "", false];
55
+ }
56
+ }
57
+ function collectMetaPaths(srcRoot) {
58
+ const found = [];
59
+ function walk(dir) {
60
+ if (!existsSync(dir))
61
+ return;
62
+ for (const name of readdirSync(dir, { withFileTypes: true })) {
63
+ const full = join(dir, name.name);
64
+ if (name.isDirectory()) {
65
+ walk(full);
66
+ }
67
+ else if (name.name === "meta.json") {
68
+ found.push(full);
69
+ }
70
+ }
71
+ }
72
+ walk(srcRoot);
73
+ return found;
74
+ }
75
+ export function scanUsage(cacheRoot, sources = ALLOWED_SOURCES) {
76
+ if (!existsSync(cacheRoot)) {
77
+ return { totalBytes: 0, totalEntries: 0, entries: [] };
78
+ }
79
+ const entries = [];
80
+ let totalBytes = 0;
81
+ for (const src of sources) {
82
+ const srcRoot = join(cacheRoot, src);
83
+ if (!existsSync(srcRoot))
84
+ continue;
85
+ for (const metaPath of collectMetaPaths(srcRoot)) {
86
+ const [size, metaSrc, metaKey, present] = readMetaSize(metaPath);
87
+ let mtime = 0;
88
+ try {
89
+ mtime = statSync(metaPath).mtimeMs / 1000;
90
+ }
91
+ catch {
92
+ mtime = 0;
93
+ }
94
+ const relKey = metaKey ||
95
+ metaPath
96
+ .slice(srcRoot.length + 1, metaPath.length - "/meta.json".length)
97
+ .split(/[/\\]/)
98
+ .join("/");
99
+ entries.push({
100
+ entryDir: join(metaPath, ".."),
101
+ source: metaSrc || src,
102
+ key: relKey,
103
+ sizeBytes: size,
104
+ lastAccessed: mtime,
105
+ metaPresent: present,
106
+ });
107
+ totalBytes += size;
108
+ }
109
+ }
110
+ return { totalBytes, totalEntries: entries.length, entries };
111
+ }
112
+ export function lruOrder(usage) {
113
+ return [...usage.entries].sort((a, b) => a.lastAccessed - b.lastAccessed || a.entryDir.localeCompare(b.entryDir));
114
+ }
115
+ export function capBreached(usage, caps, incomingBytes = 0, incomingEntries = 0) {
116
+ if (bytesEnforced(caps) && usage.totalBytes + incomingBytes > caps.maxBytes)
117
+ return true;
118
+ return entriesEnforced(caps) && usage.totalEntries + incomingEntries > caps.maxEntries;
119
+ }
120
+ export function evictLru(cacheRoot, options) {
121
+ const caps = options.caps;
122
+ if (!anyEnforced(caps))
123
+ return [];
124
+ const sources = options.sources ?? ALLOWED_SOURCES;
125
+ const protect = new Set((options.protectKeys ?? []).map(([s, k]) => `${s}\0${k}`));
126
+ const usage = scanUsage(cacheRoot, sources);
127
+ const incomingBytes = options.incomingBytes ?? 0;
128
+ const incomingEntries = options.incomingEntries ?? 0;
129
+ if (!capBreached(usage, caps, incomingBytes, incomingEntries))
130
+ return [];
131
+ const ordered = lruOrder(usage).filter((e) => !protect.has(`${e.source}\0${e.key}`));
132
+ if (ordered.length === 0)
133
+ return [];
134
+ const evicted = [];
135
+ let runningBytes = usage.totalBytes;
136
+ let runningEntries = usage.totalEntries;
137
+ for (const victim of ordered) {
138
+ const bytesBreach = bytesEnforced(caps) && runningBytes + incomingBytes > caps.maxBytes;
139
+ const entriesBreach = entriesEnforced(caps) && runningEntries + incomingEntries > caps.maxEntries;
140
+ if (!bytesBreach && !entriesBreach)
141
+ break;
142
+ const reasons = [];
143
+ if (bytesBreach)
144
+ reasons.push("size_cap");
145
+ if (entriesBreach)
146
+ reasons.push("entry_cap");
147
+ const reason = reasons.join("+") || "unknown";
148
+ options.onEvict?.(victim, reason, caps);
149
+ removeEntryDir(victim.entryDir);
150
+ evicted.push(victim);
151
+ runningBytes -= victim.sizeBytes;
152
+ runningEntries -= 1;
153
+ }
154
+ return evicted;
155
+ }
156
+ export function predictEvictionSet(cacheRoot, caps, sources = ALLOWED_SOURCES) {
157
+ if (!anyEnforced(caps))
158
+ return [];
159
+ const usage = scanUsage(cacheRoot, sources);
160
+ if (!capBreached(usage, caps))
161
+ return [];
162
+ const ordered = lruOrder(usage);
163
+ const evicted = [];
164
+ let runningBytes = usage.totalBytes;
165
+ let runningEntries = usage.totalEntries;
166
+ for (const entry of ordered) {
167
+ if (!(bytesEnforced(caps) && runningBytes > caps.maxBytes) &&
168
+ !(entriesEnforced(caps) && runningEntries > caps.maxEntries)) {
169
+ break;
170
+ }
171
+ evicted.push(entry);
172
+ runningBytes -= entry.sizeBytes;
173
+ runningEntries -= 1;
174
+ }
175
+ return evicted;
176
+ }
177
+ export function enforceCaps(cacheRoot, options = {}) {
178
+ const resolved = options.caps ?? resolveCaps();
179
+ const evicted = evictLru(cacheRoot, {
180
+ sources: options.sources,
181
+ caps: resolved,
182
+ incomingBytes: options.incomingBytes,
183
+ incomingEntries: options.incomingEntries,
184
+ protectKeys: options.protectKeys,
185
+ onEvict: options.onEvict,
186
+ });
187
+ const finalUsage = scanUsage(cacheRoot, options.sources);
188
+ const wouldBreach = capBreached(finalUsage, resolved, options.incomingBytes ?? 0, options.incomingEntries ?? 0);
189
+ return { evicted, finalUsage, wouldBreach };
190
+ }
191
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Quarantine scanner v2 port (mirrors `scripts/cache_scanner.py`).
3
+ * SCANNER_VERSION must stay in lockstep with the Python module.
4
+ */
5
+ export declare const SCANNER_VERSION = "2.1.0";
6
+ export interface ScanFlag {
7
+ category: string;
8
+ severity: string;
9
+ detail: string;
10
+ match_count: number;
11
+ }
12
+ export interface ScanResult {
13
+ passed: boolean;
14
+ scanner_version: string;
15
+ flags: ScanFlag[];
16
+ transformed_content: string;
17
+ scanned_at: string;
18
+ }
19
+ /**
20
+ * Linear, backtracking-free recognizer equivalent to the old `BODY_VECTOR_RE`.
21
+ * Scans the line once; byte-identical match semantics to the prior regex.
22
+ */
23
+ export declare function lineHasShellVector(line: string): boolean;
24
+ /** Run scanner v2 over content markdown. */
25
+ export declare function scan(contentMd: string, scannedAt?: string): ScanResult;
26
+ /** Map scan flags for meta.json (omit match_count when zero). */
27
+ export declare function flagsForMeta(flags: readonly ScanFlag[]): Array<Record<string, unknown>>;
28
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1,362 @@
1
+ import { parseMarkdownHeading } from "../text/redos-safe.js";
2
+ /**
3
+ * Quarantine scanner v2 port (mirrors `scripts/cache_scanner.py`).
4
+ * SCANNER_VERSION must stay in lockstep with the Python module.
5
+ */
6
+ export const SCANNER_VERSION = "2.1.0";
7
+ const CREDENTIAL_PATTERNS = [
8
+ ["github-pat", /\bgh[pousr]_[A-Za-z0-9]{30,}\b/],
9
+ ["anthropic-api-key", /\bsk-ant-[A-Za-z0-9_-]{20,}\b/],
10
+ ["openai-api-key", /\bsk-[A-Za-z0-9]{20,}\b/],
11
+ ["slack-token", /\bxox[bp]-[A-Za-z0-9-]{20,}\b/],
12
+ ["aws-access-key", /\bAKIA[0-9A-Z]{16}\b/],
13
+ ["pem-private-key", /-----BEGIN (?:RSA |DSA |EC |OPENSSH |ENCRYPTED )?PRIVATE KEY-----/],
14
+ ["bearer-token", /\bBearer\s+[A-Za-z0-9_.~+/=-]{20,}\b/],
15
+ ["jwt", /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/],
16
+ ];
17
+ const INVISIBLE_RANGES = [
18
+ [0x200b, 0x200f],
19
+ [0x202a, 0x202e],
20
+ [0x2060, 0x2060],
21
+ [0x2066, 0x2069],
22
+ [0xfeff, 0xfeff],
23
+ [0xe0000, 0xe007f],
24
+ ];
25
+ const INJECTION_OVERRIDE_RE = /\b(?:ignore|disregard|forget|override|bypass)\s+(?:the\s+|all\s+|any\s+)?(?:previous|prior|above|earlier|all|your|preceding|original|system)\b/i;
26
+ const HEADING_ROLE_PREFIXES = [
27
+ "SYSTEM",
28
+ "ASSISTANT",
29
+ "USER",
30
+ "AGENT",
31
+ "TOOL",
32
+ "FUNCTION",
33
+ "OVERRIDE",
34
+ "DIRECTIVE",
35
+ "ROLE",
36
+ "PROMPT",
37
+ "INSTRUCTION",
38
+ "INSTRUCTIONS",
39
+ ];
40
+ const HEADING_ROLE_PREFIX_RE = new RegExp(`^(?:${HEADING_ROLE_PREFIXES.map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\s*:`, "i");
41
+ // #1811 follow-up: the previous `BODY_VECTOR_RE` regex (`(?:curl|wget|fetch)\s+
42
+ // [^|\n]*\|...`) is a CodeQL `js/polynomial-redos` hazard -- `\s+` overlaps
43
+ // `[^|\n]*`, so a line like `curl ` + a long run of spaces with no pipe forces
44
+ // polynomial backtracking. The recognizer below scans each line ONCE for the
45
+ // same three vectors, preserving byte-identical match semantics:
46
+ // 1. curl/wget/fetch <args> | sh|bash|zsh|ksh (pipe-to-shell)
47
+ // 2. base64 -d | --decode | -D (decode flag, word-bounded)
48
+ // 3. eval followed by ( $ " ' ` delimiter
49
+ const PIPE_SHELL_KEYWORDS = ["curl", "wget", "fetch"];
50
+ const SHELL_TARGETS = ["sh", "bash", "zsh", "ksh"];
51
+ const EVAL_DELIMITERS = new Set(["(", "$", '"', "'", "`"]);
52
+ const WS_RE = /\s/;
53
+ function isAsciiWordChar(ch) {
54
+ if (ch === undefined)
55
+ return false;
56
+ return ((ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || (ch >= "0" && ch <= "9") || ch === "_");
57
+ }
58
+ function isWs(ch) {
59
+ return ch !== undefined && WS_RE.test(ch);
60
+ }
61
+ /** `\b` immediately before index `i` (keyword first char is always a word char). */
62
+ function wordBoundaryBefore(line, i) {
63
+ return i === 0 || !isAsciiWordChar(line[i - 1]);
64
+ }
65
+ /** `\b` immediately after index `j` (token last char is always a word char). */
66
+ function wordBoundaryAfter(line, j) {
67
+ return j >= line.length || !isAsciiWordChar(line[j]);
68
+ }
69
+ function matchesAt(line, i, token) {
70
+ return line.slice(i, i + token.length).toLowerCase() === token;
71
+ }
72
+ /** Mirror `(?:curl|wget|fetch)\s+[^|\n]*\|\s*(?:sh|bash|zsh|ksh)\b` at start `i`. */
73
+ function pipeToShellAt(line, i, kw) {
74
+ const afterKw = i + kw.length;
75
+ // `\s+` requires at least one whitespace char right after the keyword.
76
+ if (!isWs(line[afterKw]))
77
+ return false;
78
+ // `[^|\n]*\|`: the first pipe after the keyword, with no intervening newline.
79
+ let p = afterKw + 1;
80
+ while (p < line.length) {
81
+ const ch = line[p];
82
+ if (ch === "|")
83
+ break;
84
+ if (ch === "\n")
85
+ return false;
86
+ p += 1;
87
+ }
88
+ if (p >= line.length || line[p] !== "|")
89
+ return false;
90
+ // `\s*` after the pipe.
91
+ let q = p + 1;
92
+ while (isWs(line[q]))
93
+ q += 1;
94
+ // `(?:sh|bash|zsh|ksh)\b`.
95
+ for (const target of SHELL_TARGETS) {
96
+ if (matchesAt(line, q, target) && wordBoundaryAfter(line, q + target.length)) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ /** Mirror `\bbase64\s+(?:-d|--decode|-D)\b` at start `i`. */
103
+ function base64DecodeAt(line, i) {
104
+ if (!wordBoundaryBefore(line, i))
105
+ return false;
106
+ const afterKw = i + "base64".length;
107
+ if (!isWs(line[afterKw]))
108
+ return false;
109
+ let j = afterKw + 1;
110
+ while (isWs(line[j]))
111
+ j += 1;
112
+ // `--decode` (word-bounded), case-insensitive.
113
+ if (matchesAt(line, j, "--decode") && wordBoundaryAfter(line, j + 8))
114
+ return true;
115
+ // `-d` / `-D` (word-bounded): dash + d, with a boundary after.
116
+ if (line[j] === "-") {
117
+ const flag = line[j + 1];
118
+ if (flag === "d" || flag === "D") {
119
+ return wordBoundaryAfter(line, j + 2);
120
+ }
121
+ }
122
+ return false;
123
+ }
124
+ /** Mirror `\beval\s*[($"'`+"`"+`]` at start `i`. */
125
+ function evalDelimiterAt(line, i) {
126
+ if (!wordBoundaryBefore(line, i))
127
+ return false;
128
+ let j = i + "eval".length;
129
+ while (isWs(line[j]))
130
+ j += 1;
131
+ const ch = line[j];
132
+ return ch !== undefined && EVAL_DELIMITERS.has(ch);
133
+ }
134
+ /**
135
+ * Linear, backtracking-free recognizer equivalent to the old `BODY_VECTOR_RE`.
136
+ * Scans the line once; byte-identical match semantics to the prior regex.
137
+ */
138
+ export function lineHasShellVector(line) {
139
+ for (let i = 0; i < line.length; i += 1) {
140
+ for (const kw of PIPE_SHELL_KEYWORDS) {
141
+ if (matchesAt(line, i, kw) && pipeToShellAt(line, i, kw))
142
+ return true;
143
+ }
144
+ if (matchesAt(line, i, "base64") && base64DecodeAt(line, i))
145
+ return true;
146
+ if (matchesAt(line, i, "eval") && evalDelimiterAt(line, i))
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ const FENCE_RE = /^(```|~~~)/;
152
+ const QUARANTINE_FENCE_OPEN = "```quarantined";
153
+ const QUARANTINE_FENCE_CLOSE = "```";
154
+ function isInvisible(ch) {
155
+ const cp = ch.codePointAt(0);
156
+ if (cp === undefined)
157
+ return false;
158
+ return INVISIBLE_RANGES.some(([lo, hi]) => cp >= lo && cp <= hi);
159
+ }
160
+ function stripInvisible(text) {
161
+ if (!text)
162
+ return [text, []];
163
+ const outChars = [];
164
+ const seen = new Map();
165
+ for (const ch of text) {
166
+ if (isInvisible(ch)) {
167
+ const cp = ch.codePointAt(0);
168
+ if (!seen.has(cp)) {
169
+ seen.set(cp, `U+${cp.toString(16).toUpperCase().padStart(4, "0")}`);
170
+ }
171
+ continue;
172
+ }
173
+ outChars.push(ch);
174
+ }
175
+ return [outChars.join(""), [...seen.values()]];
176
+ }
177
+ function detectCredentials(text) {
178
+ const flags = [];
179
+ if (!text)
180
+ return flags;
181
+ for (const [label, pattern] of CREDENTIAL_PATTERNS) {
182
+ const re = new RegExp(pattern.source, pattern.flags);
183
+ const matches = text.match(new RegExp(re.source, `${re.flags}g`));
184
+ if (!matches || matches.length === 0)
185
+ continue;
186
+ flags.push({
187
+ category: "credentials",
188
+ severity: "hard-fail",
189
+ detail: `matched credentials pattern: ${label}`,
190
+ match_count: matches.length,
191
+ });
192
+ }
193
+ return flags;
194
+ }
195
+ function headingText(line) {
196
+ const match = parseMarkdownHeading(line);
197
+ if (match === null)
198
+ return null;
199
+ return match.text.trim();
200
+ }
201
+ function headingSignal(text) {
202
+ if (INJECTION_OVERRIDE_RE.test(text))
203
+ return true;
204
+ return HEADING_ROLE_PREFIX_RE.test(text);
205
+ }
206
+ function bodyHasShellVector(bodyLines) {
207
+ let inFence = null;
208
+ for (const ln of bodyLines) {
209
+ const fenceMatch = FENCE_RE.exec(ln);
210
+ if (fenceMatch) {
211
+ const delim = fenceMatch[1] ?? "";
212
+ if (inFence === null) {
213
+ inFence = delim;
214
+ }
215
+ else if (ln.trimEnd() === inFence) {
216
+ inFence = null;
217
+ }
218
+ continue;
219
+ }
220
+ if (inFence !== null)
221
+ continue;
222
+ if (lineHasShellVector(ln))
223
+ return true;
224
+ }
225
+ return false;
226
+ }
227
+ function detectInjectionHeading(text) {
228
+ if (!text)
229
+ return [text, null];
230
+ const lines = text.split("\n");
231
+ const out = [];
232
+ let inFence = null;
233
+ let sectionsWrapped = 0;
234
+ let i = 0;
235
+ while (i < lines.length) {
236
+ const line = lines[i] ?? "";
237
+ const fenceMatch = FENCE_RE.exec(line);
238
+ if (fenceMatch) {
239
+ const delim = fenceMatch[1] ?? "";
240
+ if (inFence === null) {
241
+ inFence = delim;
242
+ }
243
+ else if (line.trimEnd() === inFence) {
244
+ inFence = null;
245
+ }
246
+ out.push(line);
247
+ i += 1;
248
+ continue;
249
+ }
250
+ if (inFence !== null) {
251
+ out.push(line);
252
+ i += 1;
253
+ continue;
254
+ }
255
+ const hText = headingText(line);
256
+ if (hText !== null) {
257
+ let sectionEnd = i + 1;
258
+ while (sectionEnd < lines.length) {
259
+ const nxt = lines[sectionEnd] ?? "";
260
+ const nestedFence = FENCE_RE.exec(nxt);
261
+ if (nestedFence) {
262
+ sectionEnd += 1;
263
+ const nested = (nestedFence[1] ?? "").slice(0, 3);
264
+ while (sectionEnd < lines.length && (lines[sectionEnd] ?? "").trimEnd() !== nested) {
265
+ sectionEnd += 1;
266
+ }
267
+ sectionEnd += 1;
268
+ continue;
269
+ }
270
+ if (parseMarkdownHeading(nxt) !== null)
271
+ break;
272
+ sectionEnd += 1;
273
+ }
274
+ const bodyLines = lines.slice(i + 1, sectionEnd);
275
+ const hSignal = headingSignal(hText);
276
+ const bSignal = bodyHasShellVector(bodyLines);
277
+ if (hSignal || bSignal) {
278
+ out.push(QUARANTINE_FENCE_OPEN);
279
+ for (let j = i; j < sectionEnd; j += 1) {
280
+ out.push(lines[j] ?? "");
281
+ }
282
+ out.push(QUARANTINE_FENCE_CLOSE);
283
+ sectionsWrapped += 1;
284
+ i = sectionEnd;
285
+ continue;
286
+ }
287
+ for (let j = i; j < sectionEnd; j += 1) {
288
+ out.push(lines[j] ?? "");
289
+ }
290
+ i = sectionEnd;
291
+ continue;
292
+ }
293
+ if (headingSignal(line) || lineHasShellVector(line)) {
294
+ out.push(QUARANTINE_FENCE_OPEN);
295
+ out.push(line);
296
+ out.push(QUARANTINE_FENCE_CLOSE);
297
+ sectionsWrapped += 1;
298
+ i += 1;
299
+ continue;
300
+ }
301
+ out.push(line);
302
+ i += 1;
303
+ }
304
+ const suffix = text.endsWith("\n") ? "\n" : "";
305
+ const wrappedText = `${out.join("\n")}${suffix}`;
306
+ if (sectionsWrapped === 0)
307
+ return [wrappedText, null];
308
+ return [
309
+ wrappedText,
310
+ {
311
+ category: "injection-heading",
312
+ severity: "fence-and-pass",
313
+ detail: `wrapped ${sectionsWrapped} injection-shaped section(s) in \`quarantined\` fence (v2.1.0 strict-signal policy)`,
314
+ match_count: sectionsWrapped,
315
+ },
316
+ ];
317
+ }
318
+ /** Run scanner v2 over content markdown. */
319
+ export function scan(contentMd, scannedAt) {
320
+ const timestamp = scannedAt ?? new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
321
+ const flags = [];
322
+ const [stripped, removedLabels] = stripInvisible(contentMd);
323
+ if (removedLabels.length > 0) {
324
+ let totalStripped = 0;
325
+ for (const ch of contentMd ?? "") {
326
+ if (isInvisible(ch))
327
+ totalStripped += 1;
328
+ }
329
+ flags.push({
330
+ category: "invisible-unicode",
331
+ severity: "strip-and-pass",
332
+ detail: `stripped ${totalStripped} invisible-unicode codepoint(s): ${removedLabels.join(", ")}`,
333
+ match_count: totalStripped,
334
+ });
335
+ }
336
+ flags.push(...detectCredentials(stripped));
337
+ const [wrapped, injFlag] = detectInjectionHeading(stripped);
338
+ if (injFlag !== null)
339
+ flags.push(injFlag);
340
+ const passed = !flags.some((f) => f.severity === "hard-fail");
341
+ return {
342
+ passed,
343
+ scanner_version: SCANNER_VERSION,
344
+ flags,
345
+ transformed_content: wrapped,
346
+ scanned_at: timestamp,
347
+ };
348
+ }
349
+ /** Map scan flags for meta.json (omit match_count when zero). */
350
+ export function flagsForMeta(flags) {
351
+ return flags.map((f) => {
352
+ const out = {
353
+ category: f.category,
354
+ severity: f.severity,
355
+ detail: f.detail,
356
+ };
357
+ if (f.match_count)
358
+ out.match_count = f.match_count;
359
+ return out;
360
+ });
361
+ }
362
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1,10 @@
1
+ import type { Clock } from "./time.js";
2
+ /** Fixed clock for deterministic TTL tests. */
3
+ export declare class FixedClock implements Clock {
4
+ private current;
5
+ constructor(start: Date);
6
+ now(): Date;
7
+ setNow(dt: Date): void;
8
+ advanceSeconds(seconds: number): void;
9
+ }
10
+ //# sourceMappingURL=test-helpers.d.ts.map