@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,106 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { DEFT_REPO_POSITIVE_MARKERS } from "./constants.js";
5
+ /** Resolve a user-supplied path string to an absolute path. */
6
+ export function resolvePath(pathStr, cwd = process.cwd()) {
7
+ if (!pathStr) {
8
+ return cwd;
9
+ }
10
+ const expanded = pathStr.startsWith("~")
11
+ ? join(process.env.HOME ?? cwd, pathStr.slice(1))
12
+ : pathStr;
13
+ return resolve(cwd, expanded);
14
+ }
15
+ /** Best-effort version string (mirrors Python `_resolve_version`). */
16
+ export function resolveVersion(frameworkRoot) {
17
+ const root = frameworkRoot ?? resolveDefaultFrameworkRoot();
18
+ const candidates = [
19
+ join(root, "VERSION"),
20
+ join(root, "scripts", "VERSION"),
21
+ join(process.cwd(), ".deft-version"),
22
+ ];
23
+ for (const cand of candidates) {
24
+ try {
25
+ if (existsSync(cand)) {
26
+ return readFileSync(cand, "utf8").trim();
27
+ }
28
+ }
29
+ catch {
30
+ // continue
31
+ }
32
+ }
33
+ return "dev";
34
+ }
35
+ /** Return the deft framework repo root (the directory containing `main.md`). */
36
+ export function resolveDefaultFrameworkRoot() {
37
+ const envRoot = process.env.DEFT_ROOT?.trim();
38
+ if (envRoot) {
39
+ return resolve(envRoot);
40
+ }
41
+ let dir = dirname(fileURLToPath(import.meta.url));
42
+ for (let i = 0; i < 8; i += 1) {
43
+ // #1875: templates/ moved under content/ in the source repo; main.md stays
44
+ // at root. Accept either layout (source checkout vs flattened deposit).
45
+ if (existsSync(join(dir, "main.md")) &&
46
+ (existsSync(join(dir, "content", "templates", "agents-entry.md")) ||
47
+ existsSync(join(dir, "templates", "agents-entry.md")))) {
48
+ return dir;
49
+ }
50
+ const parent = dirname(dir);
51
+ if (parent === dir) {
52
+ break;
53
+ }
54
+ dir = parent;
55
+ }
56
+ return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "..");
57
+ }
58
+ /** Directory containing doctor implementation (Python: scripts/). */
59
+ export function resolveScriptDir(frameworkRoot) {
60
+ return join(frameworkRoot ?? resolveDefaultFrameworkRoot(), "scripts");
61
+ }
62
+ export function readTextSafe(path, readText = defaultReadText) {
63
+ return readText(path);
64
+ }
65
+ function defaultReadText(path) {
66
+ try {
67
+ if (!existsSync(path)) {
68
+ return null;
69
+ }
70
+ return readFileSync(path, "utf8");
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ function defaultIsFile(p) {
77
+ try {
78
+ return statSync(p).isFile();
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ function defaultIsDir(p) {
85
+ try {
86
+ return statSync(p).isDirectory();
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ export function runningInsideDeftRepo(projectRoot, seams = {}) {
93
+ const fileCheck = seams.isFile ?? defaultIsFile;
94
+ const dirCheck = seams.isDir ?? defaultIsDir;
95
+ if (!fileCheck(join(projectRoot, "main.md"))) {
96
+ return false;
97
+ }
98
+ if (dirCheck(join(projectRoot, "deft"))) {
99
+ return false;
100
+ }
101
+ if (dirCheck(join(projectRoot, ".deft", "core"))) {
102
+ return false;
103
+ }
104
+ return DEFT_REPO_POSITIVE_MARKERS.every((m) => fileCheck(join(projectRoot, m)));
105
+ }
106
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1,13 @@
1
+ import type { OutputSink } from "./output.js";
2
+ import type { Finding } from "./types.js";
3
+ export interface PayloadStalenessSeams {
4
+ readonly readText?: (path: string) => string | null;
5
+ readonly isFile?: (path: string) => boolean;
6
+ readonly frameworkRoot?: string;
7
+ readonly runGitLsRemote?: (deftDir: string, ref: string) => {
8
+ ok: boolean;
9
+ stdout: string;
10
+ };
11
+ }
12
+ export declare function runPayloadStalenessCheck(projectRoot: string, sink: OutputSink, addFinding: (finding: Finding) => void, seams?: PayloadStalenessSeams): void;
13
+ //# sourceMappingURL=payload-staleness.d.ts.map
@@ -0,0 +1,165 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { dirname, join } from "node:path";
3
+ import { CANONICAL_UPGRADE_COMMAND } from "./constants.js";
4
+ import { locateManifest, parseInstallManifest } from "./manifest.js";
5
+ import { readTextSafe, resolveDefaultFrameworkRoot } from "./paths.js";
6
+ function isDeftFrameworkRepo(projectRoot, readText = readTextSafe) {
7
+ try {
8
+ const agents = join(projectRoot, "AGENTS.md");
9
+ const text = readText(agents);
10
+ return text !== null && text.includes("Deft — Development Framework (deft repo)");
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ function parseRemoteSha(stdout) {
17
+ let remoteSha = "";
18
+ let peeledSha = "";
19
+ for (const line of stdout.split("\n")) {
20
+ const parts = line.trim().split(/\s+/);
21
+ if (parts.length >= 2) {
22
+ const refname = parts[1] ?? "";
23
+ if (refname.endsWith("^{}")) {
24
+ peeledSha = parts[0] ?? "";
25
+ }
26
+ else if (!remoteSha) {
27
+ remoteSha = parts[0] ?? "";
28
+ }
29
+ }
30
+ }
31
+ if (peeledSha) {
32
+ return peeledSha;
33
+ }
34
+ if (remoteSha) {
35
+ return remoteSha;
36
+ }
37
+ const firstLine = stdout.split("\n").find((ln) => ln.trim()) ?? "";
38
+ return firstLine.trim().split(/\s+/)[0] ?? "";
39
+ }
40
+ export function runPayloadStalenessCheck(projectRoot, sink, addFinding, seams = {}) {
41
+ const checkName = "payload-staleness";
42
+ const readText = seams.readText ?? readTextSafe;
43
+ const isFile = seams.isFile ?? ((p) => readText(p) !== null);
44
+ if (isDeftFrameworkRepo(projectRoot, readText)) {
45
+ sink.info(`${checkName}: skip -- running inside deft framework repo`);
46
+ addFinding({
47
+ severity: "skip",
48
+ message: "inside framework repo (no install manifest)",
49
+ check: checkName,
50
+ status: "skip",
51
+ });
52
+ return;
53
+ }
54
+ const frameworkRoot = seams.frameworkRoot ?? resolveDefaultFrameworkRoot();
55
+ let manifestPath = join(frameworkRoot, "VERSION");
56
+ if (!isFile(manifestPath)) {
57
+ manifestPath = locateManifest(projectRoot, null, isFile);
58
+ }
59
+ if (manifestPath === null) {
60
+ const legacyMarker = join(projectRoot, ".deft-version");
61
+ if (isFile(legacyMarker)) {
62
+ manifestPath = legacyMarker;
63
+ }
64
+ }
65
+ if (manifestPath === null || !isFile(manifestPath)) {
66
+ sink.info(`${checkName}: skip -- no install manifest found (pre-v0.28 or legacy state)`);
67
+ addFinding({ severity: "skip", message: "no manifest", check: checkName, status: "skip" });
68
+ return;
69
+ }
70
+ const text = readText(manifestPath);
71
+ if (text === null) {
72
+ sink.info(`${checkName}: skip -- could not read manifest`);
73
+ addFinding({
74
+ severity: "skip",
75
+ message: "manifest unreadable",
76
+ check: checkName,
77
+ status: "skip",
78
+ });
79
+ return;
80
+ }
81
+ const manifest = parseInstallManifest(text);
82
+ const installedSha = (manifest.sha ?? "").trim();
83
+ const ref = (manifest.ref ?? manifest.tag ?? "").trim();
84
+ if (!installedSha) {
85
+ sink.info(`${checkName}: skip -- manifest has no sha (incomplete provenance)`);
86
+ addFinding({
87
+ severity: "skip",
88
+ message: "no sha in manifest",
89
+ check: checkName,
90
+ status: "skip",
91
+ });
92
+ return;
93
+ }
94
+ if (!ref) {
95
+ sink.info(`${checkName}: skip -- manifest has no ref or tag (cannot resolve remote sha)`);
96
+ addFinding({
97
+ severity: "skip",
98
+ message: "no ref/tag in manifest",
99
+ check: checkName,
100
+ status: "skip",
101
+ });
102
+ return;
103
+ }
104
+ const deftDir = dirname(manifestPath);
105
+ const runLsRemote = seams.runGitLsRemote ??
106
+ ((dir, r) => {
107
+ const proc = spawnSync("git", ["-C", dir, "ls-remote", "origin", r], {
108
+ encoding: "utf8",
109
+ timeout: 15_000,
110
+ });
111
+ return { ok: proc.status === 0, stdout: proc.stdout ?? "" };
112
+ });
113
+ let remoteResult;
114
+ try {
115
+ remoteResult = runLsRemote(deftDir, ref);
116
+ }
117
+ catch {
118
+ sink.info(`${checkName}: skip -- could not probe remote (Error)`);
119
+ addFinding({
120
+ severity: "skip",
121
+ message: "remote probe failed",
122
+ check: checkName,
123
+ status: "skip",
124
+ });
125
+ return;
126
+ }
127
+ if (!remoteResult.ok) {
128
+ sink.info(`${checkName}: skip -- git ls-remote failed (no network or no origin)`);
129
+ addFinding({
130
+ severity: "skip",
131
+ message: "ls-remote unavailable",
132
+ check: checkName,
133
+ status: "skip",
134
+ });
135
+ return;
136
+ }
137
+ const remoteSha = parseRemoteSha(remoteResult.stdout);
138
+ if (!remoteSha) {
139
+ sink.info(`${checkName}: skip -- ls-remote produced no sha`);
140
+ addFinding({
141
+ severity: "skip",
142
+ message: "no remote sha",
143
+ check: checkName,
144
+ status: "skip",
145
+ });
146
+ return;
147
+ }
148
+ if (installedSha === remoteSha) {
149
+ sink.info(`${checkName}: current (sha matches remote)`);
150
+ return;
151
+ }
152
+ const msg = `Framework payload is stale (installed sha ${installedSha.slice(0, 8)}... behind remote ${remoteSha.slice(0, 8)}... for ref '${ref}'). Recommendation: run the canonical headless upgrader \`${CANONICAL_UPGRADE_COMMAND}\` from your project root to pull the latest payload (drop \`--json\` for human-readable output). On an installer binary predating the headless flags, download the latest deft-install from GitHub Releases first.`;
153
+ sink.warn(msg);
154
+ addFinding({
155
+ severity: "warning",
156
+ message: msg,
157
+ check: checkName,
158
+ status: "stale",
159
+ installed_sha: installedSha,
160
+ remote_sha: remoteSha,
161
+ ref,
162
+ suggestion: CANONICAL_UPGRADE_COMMAND,
163
+ });
164
+ }
165
+ //# sourceMappingURL=payload-staleness.js.map
@@ -0,0 +1,6 @@
1
+ export declare function includesBlockHasDeftTaskfile(text: string): boolean;
2
+ export declare function resolveConsumerTaskfile(projectRoot: string): string | null;
3
+ export type TaskfileIncludeStatus = "ok" | "missing-file" | "missing-include" | "unreadable";
4
+ export declare function classifyTaskfileInclude(projectRoot: string): TaskfileIncludeStatus;
5
+ export declare function formatMissingIncludeSnippet(): string;
6
+ //# sourceMappingURL=taskfile.d.ts.map
@@ -0,0 +1,65 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ const TASKFILE_INCLUDES_KEY_RE = /^(?<indent>[\t ]*)includes\s*:\s*(?:#.*)?$/i;
4
+ const TASKFILE_INCLUDE_VALUE_RE = /^[\t ]+taskfile\s*:\s*["']?\.?\/(?:\.deft\/core|deft)\/Taskfile\.ya?ml["']?\s*(?:#.*)?$/i;
5
+ export function includesBlockHasDeftTaskfile(text) {
6
+ let includesIndent = null;
7
+ let inIncludes = false;
8
+ for (const rawLine of text.split("\n")) {
9
+ const stripped = rawLine.trim();
10
+ if (!stripped || stripped.startsWith("#")) {
11
+ continue;
12
+ }
13
+ const indent = rawLine.length - rawLine.trimStart().length;
14
+ if (!inIncludes) {
15
+ const match = TASKFILE_INCLUDES_KEY_RE.exec(rawLine);
16
+ if (match !== null && indent === 0) {
17
+ includesIndent = indent;
18
+ inIncludes = true;
19
+ }
20
+ continue;
21
+ }
22
+ if (indent <= (includesIndent ?? 0)) {
23
+ inIncludes = false;
24
+ const match = TASKFILE_INCLUDES_KEY_RE.exec(rawLine);
25
+ if (match !== null && indent === 0) {
26
+ includesIndent = indent;
27
+ inIncludes = true;
28
+ }
29
+ continue;
30
+ }
31
+ if (TASKFILE_INCLUDE_VALUE_RE.test(rawLine)) {
32
+ return true;
33
+ }
34
+ }
35
+ return false;
36
+ }
37
+ export function resolveConsumerTaskfile(projectRoot) {
38
+ for (const name of ["Taskfile.yml", "Taskfile.yaml"]) {
39
+ const candidate = join(projectRoot, name);
40
+ if (existsSync(candidate)) {
41
+ return candidate;
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ export function classifyTaskfileInclude(projectRoot) {
47
+ const taskfile = resolveConsumerTaskfile(projectRoot);
48
+ if (taskfile === null) {
49
+ return "missing-file";
50
+ }
51
+ try {
52
+ const text = readFileSync(taskfile, "utf8").replace(/^\uFEFF/, "");
53
+ if (includesBlockHasDeftTaskfile(text)) {
54
+ return "ok";
55
+ }
56
+ return "missing-include";
57
+ }
58
+ catch {
59
+ return "unreadable";
60
+ }
61
+ }
62
+ export function formatMissingIncludeSnippet() {
63
+ return " deft:\n taskfile: ./.deft/core/Taskfile.yml\n optional: true\n";
64
+ }
65
+ //# sourceMappingURL=taskfile.js.map
@@ -0,0 +1,76 @@
1
+ export declare const EXIT_CLEAN = 0;
2
+ export declare const EXIT_DRIFT = 1;
3
+ export declare const EXIT_CONFIG_ERROR = 2;
4
+ export type CheckStatus = "pass" | "fail" | "skip" | "error";
5
+ export interface CheckResult {
6
+ readonly name: string;
7
+ readonly status: CheckStatus;
8
+ readonly detail: string;
9
+ readonly data?: Readonly<Record<string, unknown>>;
10
+ }
11
+ export interface DoctorResult {
12
+ readonly projectRoot: string;
13
+ readonly installRoot: string | null;
14
+ readonly exitCode: number;
15
+ readonly checks: readonly CheckResult[];
16
+ readonly errors: readonly string[];
17
+ }
18
+ export interface Finding {
19
+ readonly severity: "error" | "warning" | "skip";
20
+ readonly message: string;
21
+ readonly check?: string;
22
+ readonly tool?: string;
23
+ readonly suggestion?: string | null;
24
+ readonly status?: string;
25
+ readonly [key: string]: unknown;
26
+ }
27
+ export interface DoctorFlags {
28
+ readonly session: boolean;
29
+ readonly fix: boolean;
30
+ readonly json: boolean;
31
+ readonly quiet: boolean;
32
+ readonly full: boolean;
33
+ readonly help: boolean;
34
+ readonly projectRoot: string | null;
35
+ readonly unknown: readonly string[];
36
+ }
37
+ export interface ThrottleDecision {
38
+ readonly skip: boolean;
39
+ readonly dirty: boolean;
40
+ readonly lastRunAt: Date | null;
41
+ readonly lastExitCode: number;
42
+ readonly lastFindingCount: number;
43
+ readonly lastErrorCount: number;
44
+ readonly nextEligibleAt: Date | null;
45
+ readonly ageHours: number;
46
+ }
47
+ export interface DoctorState {
48
+ readonly lastRunAt: Date;
49
+ readonly lastExitCode: number;
50
+ readonly lastFindingCount: number;
51
+ readonly lastErrorCount: number;
52
+ }
53
+ export interface DoctorSeams {
54
+ readonly whichFn?: (cmd: string) => string | null;
55
+ readonly frameworkRoot?: string;
56
+ readonly readText?: (path: string) => string | null;
57
+ readonly isDir?: (path: string) => boolean;
58
+ readonly isFile?: (path: string) => boolean;
59
+ readonly runGitLsRemote?: (deftDir: string, ref: string) => {
60
+ ok: boolean;
61
+ stdout: string;
62
+ };
63
+ readonly agentsRefreshPlan?: (projectRoot: string) => Record<string, unknown>;
64
+ readonly readState?: (projectRoot: string) => DoctorState | null;
65
+ readonly writeState?: (projectRoot: string, payload: {
66
+ exitCode: number;
67
+ findingCount: number;
68
+ errorCount: number;
69
+ now?: Date;
70
+ }) => string | null;
71
+ readonly isTty?: () => boolean;
72
+ readonly readYn?: (prompt: string, defaultYes: boolean) => boolean;
73
+ readonly writeText?: (path: string, content: string) => void;
74
+ readonly now?: () => Date;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,4 @@
1
+ export const EXIT_CLEAN = 0;
2
+ export const EXIT_DRIFT = 1;
3
+ export const EXIT_CONFIG_ERROR = 2;
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,3 @@
1
+ /** Default PATH lookup mirroring Python `shutil.which`. */
2
+ export declare function defaultWhich(name: string): string | null;
3
+ //# sourceMappingURL=which.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { execFileSync } from "node:child_process";
2
+ /** Default PATH lookup mirroring Python `shutil.which`. */
3
+ export function defaultWhich(name) {
4
+ const locator = process.platform === "win32" ? "where" : "which";
5
+ try {
6
+ const result = execFileSync(locator, [name], {
7
+ encoding: "utf8",
8
+ stdio: ["ignore", "pipe", "ignore"],
9
+ });
10
+ const first = result.split(/\r?\n/).find((line) => line.trim().length > 0);
11
+ return first !== undefined ? first.trim() : null;
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ //# sourceMappingURL=which.js.map
@@ -0,0 +1,19 @@
1
+ import { type Finding } from "./scan.js";
2
+ export type ScanMode = "all" | "staged";
3
+ /** Result of an encoding-gate evaluation; mirrors the Python `evaluate` tuple. */
4
+ export interface EvaluateResult {
5
+ readonly exitCode: 0 | 1 | 2;
6
+ readonly findings: Finding[];
7
+ readonly message: string;
8
+ }
9
+ export interface EvaluateOptions {
10
+ readonly mode?: ScanMode;
11
+ readonly allowListPath?: string | null;
12
+ }
13
+ /**
14
+ * Pure evaluation returning `{ exitCode, findings, message }`. Three-state
15
+ * exit (0 clean / 1 corruption / 2 config error), faithful to the Python
16
+ * `verify_encoding.evaluate`.
17
+ */
18
+ export declare function evaluate(projectRoot: string, options?: EvaluateOptions): EvaluateResult;
19
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1,155 @@
1
+ import { readFileSync, statSync } from "node:fs";
2
+ import { isAbsolute, relative, resolve } from "node:path";
3
+ import { GitCommandError, GitNotFoundError, gitStagedFiles, gitTrackedFiles } from "./git.js";
4
+ import { BUILTIN_ALLOW_LIST, SCANNABLE_EXTENSIONS } from "./patterns.js";
5
+ import { renderFinding, scanFile, suffixOf } from "./scan.js";
6
+ import { fnmatchCase } from "./text.js";
7
+ /** Raised by `loadAllowList` when the path does not exist. */
8
+ class AllowListNotFoundError extends Error {
9
+ }
10
+ function loadAllowList(path) {
11
+ if (path === null || path === undefined) {
12
+ return [];
13
+ }
14
+ let raw;
15
+ try {
16
+ raw = readFileSync(path, "utf8");
17
+ }
18
+ catch (err) {
19
+ const e = err;
20
+ if (e.code === "ENOENT") {
21
+ throw new AllowListNotFoundError(path);
22
+ }
23
+ throw err;
24
+ }
25
+ const out = [];
26
+ for (const line of raw.split(/\r\n|[\n\r]/)) {
27
+ const stripped = line.trim();
28
+ if (stripped.length === 0 || stripped.startsWith("#")) {
29
+ continue;
30
+ }
31
+ out.push(stripped);
32
+ }
33
+ return out;
34
+ }
35
+ function isAllowListed(relPath, patterns) {
36
+ return patterns.some((pat) => fnmatchCase(relPath, pat));
37
+ }
38
+ function isFile(fullPath) {
39
+ try {
40
+ return statSync(fullPath).isFile();
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ function filterScannable(relPaths, projectRoot, allowGlobs) {
47
+ const out = [];
48
+ const rootResolved = resolve(projectRoot);
49
+ for (const rel of relPaths) {
50
+ const posix = rel.replace(/\\/g, "/");
51
+ const full = resolve(rootResolved, rel);
52
+ const relCheck = relative(rootResolved, full);
53
+ if (relCheck.startsWith("..") || isAbsolute(relCheck)) {
54
+ continue;
55
+ }
56
+ if (!isFile(full)) {
57
+ continue;
58
+ }
59
+ if (!SCANNABLE_EXTENSIONS.has(suffixOf(full))) {
60
+ continue;
61
+ }
62
+ if (isAllowListed(posix, allowGlobs)) {
63
+ continue;
64
+ }
65
+ out.push([posix, full]);
66
+ }
67
+ return out;
68
+ }
69
+ /**
70
+ * Pure evaluation returning `{ exitCode, findings, message }`. Three-state
71
+ * exit (0 clean / 1 corruption / 2 config error), faithful to the Python
72
+ * `verify_encoding.evaluate`.
73
+ */
74
+ export function evaluate(projectRoot, options = {}) {
75
+ const mode = options.mode ?? "all";
76
+ if (mode !== "all" && mode !== "staged") {
77
+ return {
78
+ exitCode: 2,
79
+ findings: [],
80
+ message: `verify_encoding: unrecognised mode '${mode}' (expected 'all' or 'staged').`,
81
+ };
82
+ }
83
+ let customGlobs;
84
+ try {
85
+ customGlobs = loadAllowList(options.allowListPath);
86
+ }
87
+ catch (err) {
88
+ if (err instanceof AllowListNotFoundError) {
89
+ return {
90
+ exitCode: 2,
91
+ findings: [],
92
+ message: `verify_encoding: --allow-list file not found: ${err.message}\n` +
93
+ " Recovery: pass an existing path or omit the flag.",
94
+ };
95
+ }
96
+ return {
97
+ exitCode: 2,
98
+ findings: [],
99
+ message: `verify_encoding: --allow-list unreadable: ${String(err.message)}\n` +
100
+ " Recovery: check file permissions.",
101
+ };
102
+ }
103
+ const allowGlobs = [...BUILTIN_ALLOW_LIST, ...customGlobs];
104
+ let relPaths;
105
+ try {
106
+ relPaths = mode === "staged" ? gitStagedFiles(projectRoot) : gitTrackedFiles(projectRoot);
107
+ }
108
+ catch (err) {
109
+ if (err instanceof GitNotFoundError) {
110
+ return {
111
+ exitCode: 2,
112
+ findings: [],
113
+ message: "verify_encoding: 'git' executable not found on PATH.\n" +
114
+ " Recovery: install git or run inside a git working tree.",
115
+ };
116
+ }
117
+ if (err instanceof GitCommandError) {
118
+ return {
119
+ exitCode: 2,
120
+ findings: [],
121
+ message: `verify_encoding: git failed -- ${err.message}\n` +
122
+ " Recovery: ensure --project-root points at a git working tree.",
123
+ };
124
+ }
125
+ throw err;
126
+ }
127
+ const candidates = filterScannable(relPaths, projectRoot, allowGlobs);
128
+ const findings = [];
129
+ for (const [rel, full] of candidates) {
130
+ findings.push(...scanFile(rel, full));
131
+ }
132
+ if (findings.length > 0) {
133
+ const fileCount = new Set(findings.map((f) => f.path)).size;
134
+ const header = `verify_encoding: detected ${findings.length} mojibake / ` +
135
+ `U+FFFD / unexpected-BOM hit(s) across ${fileCount} file(s) (#798).\n` +
136
+ " Root cause: a Windows codepage (cp1252/cp437) decoded the bytes on the READ side\n" +
137
+ " before any safe write could preserve them. Fix: rewrite the offending files with\n" +
138
+ " UTF-8, re-read from a clean source (git checkout HEAD -- <path>), and do NOT\n" +
139
+ " round-trip through PowerShell 5.1 again. See AGENTS.md ## PowerShell.\n" +
140
+ " Allow-list a documented exception via --allow-list <path>.";
141
+ const shown = findings.slice(0, 50).map(renderFinding);
142
+ let body = shown.join("\n");
143
+ if (findings.length > 50) {
144
+ body += `\n ... and ${findings.length - 50} more`;
145
+ }
146
+ return { exitCode: 1, findings, message: `${header}\n${body}` };
147
+ }
148
+ return {
149
+ exitCode: 0,
150
+ findings,
151
+ message: `verify_encoding: ${candidates.length} file(s) clean -- no mojibake / ` +
152
+ "U+FFFD / unexpected-BOM detected (#798).",
153
+ };
154
+ }
155
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1,11 @@
1
+ /** Raised when `git` is not on PATH (caller maps to exit 2). */
2
+ export declare class GitNotFoundError extends Error {
3
+ }
4
+ /** Raised when a `git` invocation exits non-zero (caller maps to exit 2). */
5
+ export declare class GitCommandError extends Error {
6
+ }
7
+ /** Return `git ls-files` output as a list of POSIX-form rel paths. */
8
+ export declare function gitTrackedFiles(projectRoot: string): string[];
9
+ /** Return `git diff --cached --name-only` output as POSIX-form rel paths. */
10
+ export declare function gitStagedFiles(projectRoot: string): string[];
11
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { execFileSync } from "node:child_process";
2
+ /** Raised when `git` is not on PATH (caller maps to exit 2). */
3
+ export class GitNotFoundError extends Error {
4
+ }
5
+ /** Raised when a `git` invocation exits non-zero (caller maps to exit 2). */
6
+ export class GitCommandError extends Error {
7
+ }
8
+ function runGit(args, projectRoot) {
9
+ try {
10
+ return execFileSync("git", args, {
11
+ cwd: projectRoot,
12
+ encoding: "utf8",
13
+ stdio: ["ignore", "pipe", "pipe"],
14
+ });
15
+ }
16
+ catch (err) {
17
+ const e = err;
18
+ if (e.code === "ENOENT") {
19
+ throw new GitNotFoundError("'git' executable not found on PATH");
20
+ }
21
+ const stderr = typeof e.stderr === "string" ? e.stderr.trim() : String(e.message ?? err);
22
+ throw new GitCommandError(`git ${args.join(" ")} failed: ${stderr}`);
23
+ }
24
+ }
25
+ function splitLines(stdout) {
26
+ return stdout.split("\n").filter((line) => line.trim().length > 0);
27
+ }
28
+ /** Return `git ls-files` output as a list of POSIX-form rel paths. */
29
+ export function gitTrackedFiles(projectRoot) {
30
+ return splitLines(runGit(["ls-files"], projectRoot));
31
+ }
32
+ /** Return `git diff --cached --name-only` output as POSIX-form rel paths. */
33
+ export function gitStagedFiles(projectRoot) {
34
+ return splitLines(runGit(["diff", "--cached", "--name-only", "--diff-filter=ACMR"], projectRoot));
35
+ }
36
+ //# sourceMappingURL=git.js.map