@smartergpt/lexrunner 1.0.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 (1433) hide show
  1. package/.changes/ci-debug-added.txt +1 -0
  2. package/.changeset/tsconfig-solution-build.md +5 -0
  3. package/.editorconfig +9 -0
  4. package/.env.example +8 -0
  5. package/.github/COST_EFFICIENCY.md +60 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
  7. package/.github/ISSUE_TEMPLATE/epic.yml +123 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +26 -0
  9. package/.github/ISSUE_TEMPLATE/issue-A1-gate-input-validation.md +380 -0
  10. package/.github/ISSUE_TEMPLATE/issue-B1-scope-validation.md +509 -0
  11. package/.github/ISSUE_TEMPLATE/issue-C1-command-whitelist.md +463 -0
  12. package/.github/ISSUE_TEMPLATE/subtask.yml +153 -0
  13. package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
  14. package/.github/copilot-instructions-old.md +429 -0
  15. package/.github/copilot-instructions.md +33 -0
  16. package/.github/instructions/tests.instructions.md +10 -0
  17. package/.github/workflows/auto-delete-merged-branches.yml +103 -0
  18. package/.github/workflows/benchmarks.yml +72 -0
  19. package/.github/workflows/ci-debug.yml +33 -0
  20. package/.github/workflows/ci.yml +167 -0
  21. package/.github/workflows/cli-smoke-test.yml +345 -0
  22. package/.github/workflows/copilot-setup-steps.yml +20 -0
  23. package/.github/workflows/frame-emission-gate.yml +242 -0
  24. package/.github/workflows/project-auto.yml +24 -0
  25. package/.github/workflows/release.yml +260 -0
  26. package/.github/workflows/slow-cli-tests.yml +37 -0
  27. package/.github/workflows/tag-guard.yml +44 -0
  28. package/.husky/pre-commit +1 -0
  29. package/.nvmrc +2 -0
  30. package/.prettierignore +28 -0
  31. package/.prettierrc.json +10 -0
  32. package/.smartergpt/CONTROL_DECK_VISION.md +226 -0
  33. package/.smartergpt/allowed-commands.json +41 -0
  34. package/.smartergpt/allowed-commands.strict.json +56 -0
  35. package/.smartergpt/deliverables/.live.md +426 -0
  36. package/.smartergpt/deliverables/ISSUE_STATUS_2025-12-28.md +193 -0
  37. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/ADR_DISCUSSION.md +379 -0
  38. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_claude-haiku.md +109 -0
  39. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gemini-flash.md +42 -0
  40. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gpt-codex-mini.md +19 -0
  41. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_raptor-mini.md +37 -0
  42. package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Question.md +37 -0
  43. package/.smartergpt/deliverables/merge-weave-04469e41-24ba-4ed5-b0ff-13c7ea12858d.ndjson +2 -0
  44. package/.smartergpt/deps.yml +3 -0
  45. package/.smartergpt/docs/fanout-templates.md +213 -0
  46. package/.smartergpt/docs/merge-weave-interventions.md +261 -0
  47. package/.smartergpt/docs/test-fix-patterns.md +240 -0
  48. package/.smartergpt/fanout-templates.yml +263 -0
  49. package/.smartergpt/gates.yml +9 -0
  50. package/.smartergpt/intent.md +1 -0
  51. package/.smartergpt/issues/QOL-001-analysis-script-filtering.md +36 -0
  52. package/.smartergpt/issues/QOL-002-log-retention-policy.md +92 -0
  53. package/.smartergpt/issues/QOL-003-realtime-console-feedback.md +44 -0
  54. package/.smartergpt/issues/QOL-004-governance-report-cli.md +44 -0
  55. package/.smartergpt/issues/QOL-005-schema-versioning.md +46 -0
  56. package/.smartergpt/issues/QOL-006-debug-verbose-mode.md +45 -0
  57. package/.smartergpt/issues/QOL-COMPLETION-REPORT.md +359 -0
  58. package/.smartergpt/issues/QOL-REVIEW-SUMMARY.md +111 -0
  59. package/.smartergpt/issues/QOL-ROADMAP.md +71 -0
  60. package/.smartergpt/merge-policy.yml +41 -0
  61. package/.smartergpt/merge-weave-policy.yml +255 -0
  62. package/.smartergpt/o1.json +0 -0
  63. package/.smartergpt/o2.json +0 -0
  64. package/.smartergpt/personas/eager-pm.md +123 -0
  65. package/.smartergpt/personas/example.md +81 -0
  66. package/.smartergpt/personas/senior-dev.md +107 -0
  67. package/.smartergpt/profile.yml +2 -0
  68. package/.smartergpt/prompts/create-project.md +112 -0
  69. package/.smartergpt/prompts/idea.md +64 -0
  70. package/.smartergpt/pull-request-template.md +25 -0
  71. package/.smartergpt/schemas/behavior-rule.schema.d.ts +54 -0
  72. package/.smartergpt/schemas/behavior-rule.schema.js +56 -0
  73. package/.smartergpt/schemas/behavior-rule.schema.json +105 -0
  74. package/.smartergpt/schemas/behavior-rule.schema.ts +60 -0
  75. package/.smartergpt/schemas/execution-plan-v1.d.ts +47 -0
  76. package/.smartergpt/schemas/execution-plan-v1.js +22 -0
  77. package/.smartergpt/schemas/execution-plan-v1.json +113 -0
  78. package/.smartergpt/schemas/execution-plan-v1.ts +32 -0
  79. package/.smartergpt/schemas/execution-plan.schema.json +116 -0
  80. package/.smartergpt/schemas/feature-spec-v0.d.ts +13 -0
  81. package/.smartergpt/schemas/feature-spec-v0.js +12 -0
  82. package/.smartergpt/schemas/feature-spec-v0.json +58 -0
  83. package/.smartergpt/schemas/feature-spec-v0.ts +16 -0
  84. package/.smartergpt/schemas/feature-spec.schema.json +111 -0
  85. package/.smartergpt/schemas/gates.schema.d.ts +48 -0
  86. package/.smartergpt/schemas/gates.schema.js +20 -0
  87. package/.smartergpt/schemas/gates.schema.json +47 -0
  88. package/.smartergpt/schemas/gates.schema.ts +26 -0
  89. package/.smartergpt/schemas/idea.schema.json +81 -0
  90. package/.smartergpt/schemas/runner.scope.schema.d.ts +54 -0
  91. package/.smartergpt/schemas/runner.scope.schema.js +28 -0
  92. package/.smartergpt/schemas/runner.scope.schema.json +75 -0
  93. package/.smartergpt/schemas/runner.scope.schema.ts +36 -0
  94. package/.smartergpt/schemas/runner.stack.schema.d.ts +40 -0
  95. package/.smartergpt/schemas/runner.stack.schema.js +21 -0
  96. package/.smartergpt/schemas/runner.stack.schema.json +51 -0
  97. package/.smartergpt/schemas/runner.stack.schema.ts +27 -0
  98. package/.smartergpt/scope.yml +11 -0
  99. package/.smartergpt/stack.yml +16 -0
  100. package/.smartergpt/test-fix-patterns.yml +106 -0
  101. package/.tool-versions +13 -0
  102. package/AGENTS.md +402 -0
  103. package/CHANGELOG.md +256 -0
  104. package/CLAUDE.md +484 -0
  105. package/CONTRIBUTING.md +345 -0
  106. package/EAGER_PM_FANOUT_ANALYSIS.md +283 -0
  107. package/FAQ.md +292 -0
  108. package/FIXTURE_LIBRARY_SUMMARY.md +327 -0
  109. package/IMPLEMENTATION_SUMMARY.md +222 -0
  110. package/LICENSE +21 -0
  111. package/MANUAL_TEST_GUIDE.md +229 -0
  112. package/MCP-ALIGNMENT-SUMMARY.md +261 -0
  113. package/MCP-CONFIG.md +125 -0
  114. package/MERGE_WEAVE_QUICKSTART.md +450 -0
  115. package/MERGE_WEAVE_SUMMARY.md +259 -0
  116. package/MERGE_WEAVE_USAGE_GUIDE.md +368 -0
  117. package/NOTICE.md +43 -0
  118. package/README.mcp.md +770 -0
  119. package/README.md +1069 -0
  120. package/TEST_INFRASTRUCTURE_ASSESSMENT.md +225 -0
  121. package/bootstrap-lexrunner.sh +396 -0
  122. package/dist/api-7H7SJZIX.js +15 -0
  123. package/dist/api-U3X2WA6D.js +15 -0
  124. package/dist/audit-2TZ2LU72.js +60 -0
  125. package/dist/audit-5HH5BMKI.js +60 -0
  126. package/dist/audit-6K5K333I.js +60 -0
  127. package/dist/audit-DYQWS57J.js +60 -0
  128. package/dist/audit-JBWZ2GZ2.js +60 -0
  129. package/dist/audit-SJF3434D.js +60 -0
  130. package/dist/audit-TICGGVX5.js +60 -0
  131. package/dist/audit-YOBB27PY.js +60 -0
  132. package/dist/autopilot-3GAVXWWC.js +45 -0
  133. package/dist/autopilot-43NOYVQA.js +45 -0
  134. package/dist/autopilot-4UA3OWLU.js +45 -0
  135. package/dist/autopilot-54TK5CCG.js +45 -0
  136. package/dist/autopilot-5BHC2UQT.js +45 -0
  137. package/dist/autopilot-ABZUCVGY.js +45 -0
  138. package/dist/autopilot-ACJZP47Y.js +45 -0
  139. package/dist/autopilot-AL5F5AUS.js +46 -0
  140. package/dist/autopilot-BO67FWUC.js +45 -0
  141. package/dist/autopilot-BR6W4GEX.js +45 -0
  142. package/dist/autopilot-FOR2UKRY.js +45 -0
  143. package/dist/autopilot-GDTTXHEQ.js +45 -0
  144. package/dist/autopilot-GEAMFZBM.js +45 -0
  145. package/dist/autopilot-HDMBRZE6.js +45 -0
  146. package/dist/autopilot-IKI2Y6S4.js +44 -0
  147. package/dist/autopilot-ILTBWWOL.js +46 -0
  148. package/dist/autopilot-KI3MXIFI.js +44 -0
  149. package/dist/autopilot-LWNPZC3J.js +45 -0
  150. package/dist/autopilot-LXPJ4ZXF.js +45 -0
  151. package/dist/autopilot-MDIFIONK.js +46 -0
  152. package/dist/autopilot-NW3LDP6M.js +45 -0
  153. package/dist/autopilot-OKTSCG35.js +45 -0
  154. package/dist/autopilot-OR5PF5PD.js +45 -0
  155. package/dist/autopilot-PE65SBGN.js +45 -0
  156. package/dist/autopilot-PW7I4B6W.js +45 -0
  157. package/dist/autopilot-QMLBL5P6.js +45 -0
  158. package/dist/autopilot-QSN6ZU5O.js +45 -0
  159. package/dist/autopilot-R7EZJOGI.js +46 -0
  160. package/dist/autopilot-T544CPPD.js +44 -0
  161. package/dist/autopilot-TNQB6VGJ.js +44 -0
  162. package/dist/autopilot-UVIYCR6K.js +45 -0
  163. package/dist/autopilot-W3ZTTSH3.js +45 -0
  164. package/dist/autopilot-XPKWOFXO.js +44 -0
  165. package/dist/autopilot-XRX4QWRM.js +44 -0
  166. package/dist/autopilot-Y3BAGNI5.js +44 -0
  167. package/dist/autopilot-ZE64XW2K.js +44 -0
  168. package/dist/chunk-2ESYSVXG.js +48 -0
  169. package/dist/chunk-2VR554P7.js +668 -0
  170. package/dist/chunk-37DOWIVT.js +1084 -0
  171. package/dist/chunk-3DU2DWUP.js +400 -0
  172. package/dist/chunk-3DVXIZFM.js +11166 -0
  173. package/dist/chunk-3FABZF4V.js +811 -0
  174. package/dist/chunk-4FFGNTAV.js +515 -0
  175. package/dist/chunk-4GEC4HC3.js +11221 -0
  176. package/dist/chunk-4RVZNLD4.js +628 -0
  177. package/dist/chunk-55VWJYZY.js +39 -0
  178. package/dist/chunk-5CGWZH5X.js +340 -0
  179. package/dist/chunk-5QKWKK4M.js +11794 -0
  180. package/dist/chunk-5Z3XHND7.js +11755 -0
  181. package/dist/chunk-6A4IE3TI.js +302 -0
  182. package/dist/chunk-6KK5JFFE.js +106 -0
  183. package/dist/chunk-6YC2VSLE.js +11252 -0
  184. package/dist/chunk-7C4K2SHD.js +668 -0
  185. package/dist/chunk-ANXY4RGA.js +11091 -0
  186. package/dist/chunk-ASHKNUBR.js +11312 -0
  187. package/dist/chunk-B3OYDPOP.js +11793 -0
  188. package/dist/chunk-DBH7SQ2S.js +1084 -0
  189. package/dist/chunk-DEI7A5B4.js +11449 -0
  190. package/dist/chunk-DM4GHY3J.js +92 -0
  191. package/dist/chunk-EQKFCZLH.js +9823 -0
  192. package/dist/chunk-FAIJPBT5.js +40 -0
  193. package/dist/chunk-FDDKUDXR.js +11166 -0
  194. package/dist/chunk-FEAR6ETG.js +438 -0
  195. package/dist/chunk-FNBAHK5V.js +72 -0
  196. package/dist/chunk-FXL74C73.js +523 -0
  197. package/dist/chunk-GLJEDX4L.js +10247 -0
  198. package/dist/chunk-GTP4OHD7.js +1107 -0
  199. package/dist/chunk-HIHH7IVO.js +10557 -0
  200. package/dist/chunk-I3VXUVCB.js +10474 -0
  201. package/dist/chunk-I6BIFVWI.js +10519 -0
  202. package/dist/chunk-I72TRUTJ.js +1084 -0
  203. package/dist/chunk-J5B5KT2F.js +368 -0
  204. package/dist/chunk-JMTULZ66.js +11743 -0
  205. package/dist/chunk-JXIQ7HCK.js +11166 -0
  206. package/dist/chunk-K6HVPBDP.js +10692 -0
  207. package/dist/chunk-KBT5Y666.js +521 -0
  208. package/dist/chunk-LETPROKG.js +11092 -0
  209. package/dist/chunk-LLMY2BZF.js +1084 -0
  210. package/dist/chunk-NMNL4US2.js +1084 -0
  211. package/dist/chunk-O2XRP7JK.js +10247 -0
  212. package/dist/chunk-OGPWLFFO.js +11201 -0
  213. package/dist/chunk-OQJUWTZV.js +51 -0
  214. package/dist/chunk-PJRWPLQ6.js +669 -0
  215. package/dist/chunk-PYRVUCJR.js +370 -0
  216. package/dist/chunk-Q6Y524KH.js +669 -0
  217. package/dist/chunk-QF7DM5VW.js +106 -0
  218. package/dist/chunk-QGM4M3NI.js +37 -0
  219. package/dist/chunk-QIIELFTL.js +1107 -0
  220. package/dist/chunk-QUW6N7GR.js +10264 -0
  221. package/dist/chunk-QZASNLQX.js +11223 -0
  222. package/dist/chunk-RMN4IAWO.js +11808 -0
  223. package/dist/chunk-RN5NHU37.js +11465 -0
  224. package/dist/chunk-RNG3RILO.js +11755 -0
  225. package/dist/chunk-RSA6DEB4.js +9748 -0
  226. package/dist/chunk-RURYWSMX.js +10524 -0
  227. package/dist/chunk-SUEXK5U7.js +11201 -0
  228. package/dist/chunk-TVUF55OH.js +11807 -0
  229. package/dist/chunk-U5MMENCP.js +456 -0
  230. package/dist/chunk-U62I2R2D.js +434 -0
  231. package/dist/chunk-UHFMFO54.js +21 -0
  232. package/dist/chunk-UNZBDSEU.js +11166 -0
  233. package/dist/chunk-UOATTNQP.js +334 -0
  234. package/dist/chunk-UZFYNSMJ.js +334 -0
  235. package/dist/chunk-VP37GLU6.js +1084 -0
  236. package/dist/chunk-W6WDKBWO.js +11453 -0
  237. package/dist/chunk-XBKUFNVF.js +10745 -0
  238. package/dist/chunk-XOLVQTIE.js +670 -0
  239. package/dist/chunk-XVFTBVDS.js +257 -0
  240. package/dist/chunk-YABA7DB6.js +11091 -0
  241. package/dist/chunk-YWCJX5KL.js +10557 -0
  242. package/dist/chunk-Z5GP7FSR.js +309 -0
  243. package/dist/chunk-ZBT3DATZ.js +296 -0
  244. package/dist/chunk-ZDBAZXUQ.js +11201 -0
  245. package/dist/chunk-ZEMABYS4.js +92 -0
  246. package/dist/chunk-ZOA4HT7P.js +662 -0
  247. package/dist/cli.cjs +40431 -0
  248. package/dist/cli.d.cts +2709 -0
  249. package/dist/cli.d.ts +2709 -0
  250. package/dist/cli.js +21149 -0
  251. package/dist/commandValidator-42OUDFZ4.js +140 -0
  252. package/dist/commandValidator-7LQHTYL5.js +140 -0
  253. package/dist/commandValidator-AT5OYZFC.js +142 -0
  254. package/dist/commandValidator-DH3CX2OW.js +140 -0
  255. package/dist/commandValidator-GCQC7H4A.js +140 -0
  256. package/dist/commandValidator-K6VWB6O3.js +140 -0
  257. package/dist/commandValidator-L6WNDBYB.js +129 -0
  258. package/dist/commandValidator-O3KSNXD2.js +140 -0
  259. package/dist/commandValidator-ZHMUA5RQ.js +140 -0
  260. package/dist/constraints-M52FVL2X.js +11 -0
  261. package/dist/dist-CSOR2BL2.js +1144 -0
  262. package/dist/dist-PKOIS5NZ.js +1144 -0
  263. package/dist/fileAnalysis-3VMDDJ6I.js +9 -0
  264. package/dist/fileAnalysis-4QLHUT44.js +9 -0
  265. package/dist/fileAnalysis-H6M2Z7ZC.js +9 -0
  266. package/dist/fileAnalysis-HMI7IL6S.js +9 -0
  267. package/dist/fileAnalysis-JHABOPUQ.js +9 -0
  268. package/dist/gateMapping-E5MGNJH5.js +17 -0
  269. package/dist/jsonEnvelope-R4SWKX2N.js +62 -0
  270. package/dist/mergeTreeSimulator-ATOPJ3DU.js +11 -0
  271. package/dist/mergeTreeSimulator-AYUK4TZT.js +11 -0
  272. package/dist/mergeTreeSimulator-BBWJUQBK.js +11 -0
  273. package/dist/mergeTreeSimulator-DJJDRB5N.js +11 -0
  274. package/dist/mergeTreeSimulator-X4BA647P.js +11 -0
  275. package/dist/planDiff-37QHCPKO.js +109 -0
  276. package/dist/planDiff-BQHIUARB.js +109 -0
  277. package/dist/planDiff-QOK6KNB7.js +111 -0
  278. package/dist/planDiff-RXR4CWFS.js +109 -0
  279. package/dist/planDiff-W2BTH2MU.js +109 -0
  280. package/dist/planHistory-4J3Q6AJ3.js +126 -0
  281. package/dist/planHistory-DQRSB2Y7.js +118 -0
  282. package/dist/planHistory-GLCXP6AB.js +126 -0
  283. package/dist/planHistory-SMNRLEKG.js +126 -0
  284. package/dist/planHistory-UO4WZ6GO.js +126 -0
  285. package/dist/planReview-7BWVLABC.js +377 -0
  286. package/dist/planReview-7VB3OYKZ.js +385 -0
  287. package/dist/planReview-FAIBIAE6.js +377 -0
  288. package/dist/planReview-FXQBDNKJ.js +376 -0
  289. package/dist/planReview-HO4YYETA.js +377 -0
  290. package/dist/planReview-I26EKCUK.js +376 -0
  291. package/dist/planReview-JBOAJHSU.js +377 -0
  292. package/dist/planReview-SCNZWC6B.js +376 -0
  293. package/dist/planReview-TU7LMZIY.js +376 -0
  294. package/dist/planViewer-2YZCPVDM.js +155 -0
  295. package/dist/planViewer-72WZFUTU.js +154 -0
  296. package/dist/planViewer-G546TVHV.js +154 -0
  297. package/dist/planViewer-I7ZHNJQF.js +150 -0
  298. package/dist/planViewer-IRXHOY5U.js +155 -0
  299. package/dist/planViewer-IX2ICW45.js +154 -0
  300. package/dist/planViewer-PDWPUOP6.js +155 -0
  301. package/dist/planViewer-PEOADAGZ.js +155 -0
  302. package/dist/planViewer-PFYDEG6V.js +150 -0
  303. package/dist/planViewer-UIPOSRVW.js +151 -0
  304. package/dist/planViewer-V2JUKV7Q.js +154 -0
  305. package/dist/sarif-46TKOOJZ.js +9 -0
  306. package/dist/sarif-63JKTFFI.js +9 -0
  307. package/dist/sarif-CIYIWUNC.js +9 -0
  308. package/dist/sarif-OGAGDL6B.js +9 -0
  309. package/dist/sarif-XIREI5B5.js +9 -0
  310. package/dist/security-3V6FKJDA.js +423 -0
  311. package/dist/security-4JMEUM56.js +423 -0
  312. package/dist/security-QHPEWY5G.js +423 -0
  313. package/dist/security-V2LAL5TP.js +415 -0
  314. package/dist/security-WTASK6T6.js +423 -0
  315. package/dist/security-XE4GHVJD.js +423 -0
  316. package/dist/security-XLXM3UHT.js +423 -0
  317. package/dist/security-YDLHSMVY.js +441 -0
  318. package/dist/security-ZDAEZF7D.js +423 -0
  319. package/dist/signing-3EI734L4.js +14 -0
  320. package/dist/signing-5G7K6JXJ.js +14 -0
  321. package/dist/signing-7DK7SABM.js +14 -0
  322. package/dist/signing-JJJOUGCW.js +14 -0
  323. package/dist/signing-OAJ3MXGA.js +14 -0
  324. package/dist/verify-5F6PUXUQ.js +62 -0
  325. package/dist/verify-5ILURHV2.js +62 -0
  326. package/dist/verify-MRDZJUGO.js +62 -0
  327. package/dist/verify-SCUHB3SA.js +62 -0
  328. package/dist/verify-YZRHN2D3.js +62 -0
  329. package/docs/1.0.0-vertical-slice.md +214 -0
  330. package/docs/ADR-007-INTEGRATION-SUMMARY.md +232 -0
  331. package/docs/ALIASING_FOR_LEXRUNNER.md +709 -0
  332. package/docs/ALIASING_FOR_RUNNER.md +552 -0
  333. package/docs/AX.md +317 -0
  334. package/docs/CHECKPOINT_RESUME.md +208 -0
  335. package/docs/CLI_VERBS.md +219 -0
  336. package/docs/CONFLICT_DETECTION.md +198 -0
  337. package/docs/DISCIPLINED_FAILURE.md +224 -0
  338. package/docs/ENVIRONMENT_QUALITY.md +155 -0
  339. package/docs/ERROR_CODES.md +528 -0
  340. package/docs/EVENT_SCHEMA.md +659 -0
  341. package/docs/EXE-012-investigation-summary.md +300 -0
  342. package/docs/GATE_ATTESTATION_GUIDE.md +237 -0
  343. package/docs/JSON_OUTPUT_SCHEMAS.md +347 -0
  344. package/docs/LEXRUNNER_ALIASING.md +444 -0
  345. package/docs/LEX_INTEGRATION.md +83 -0
  346. package/docs/LEX_PUBLIC_API.md +306 -0
  347. package/docs/LICENSING.md +119 -0
  348. package/docs/MCP-CLI-PARITY.md +410 -0
  349. package/docs/MCP-MIGRATION.md +258 -0
  350. package/docs/MCP-PARITY.md +234 -0
  351. package/docs/MEMORY_TOOLS.md +278 -0
  352. package/docs/MERGE_WEAVE_SETUP.md +643 -0
  353. package/docs/MIGRATION_v0.1.md +760 -0
  354. package/docs/NAMING_CONVENTIONS.md +82 -0
  355. package/docs/PERSONA_FOUNDATION.md +124 -0
  356. package/docs/PHASE3_MEMORY_GUIDE.md +122 -0
  357. package/docs/PLAN_LOCK.md +114 -0
  358. package/docs/README.md +289 -0
  359. package/docs/RUNNER_LIFECYCLE.md +257 -0
  360. package/docs/SAFETY_MECHANISMS.md +325 -0
  361. package/docs/SECURITY_IMPLEMENTATION.md +535 -0
  362. package/docs/TERMS.md +34 -0
  363. package/docs/TOKEN_TRACKING.md +162 -0
  364. package/docs/WORKFLOW_GUIDANCE.md +277 -0
  365. package/docs/adr/ADR-000-product-naming-and-branding.md +115 -0
  366. package/docs/adr/ADR-001-plan-json-frozen-input.md +68 -0
  367. package/docs/adr/ADR-002-two-track-separation.md +84 -0
  368. package/docs/adr/ADR-003-gate-uniform-execution.md +69 -0
  369. package/docs/adr/ADR-004-runner-state-model.md +75 -0
  370. package/docs/adr/ADR-005-merge-pyramid-ordering.md +87 -0
  371. package/docs/adr/ADR-006-schema-versioning-semver.md +81 -0
  372. package/docs/adr/ADR-007-task-snapshot-contract.md +503 -0
  373. package/docs/adr/ADR-008-lex-packaging.md +243 -0
  374. package/docs/adr/ADR-009-ax-test-output-adapters.md +440 -0
  375. package/docs/adr/README.md +32 -0
  376. package/docs/advanced-cli.md +436 -0
  377. package/docs/agent-stall-detection.md +278 -0
  378. package/docs/architecture/executors.md +190 -0
  379. package/docs/architecture.md +316 -0
  380. package/docs/attestation/AX-SHARED-PLEDGE.md +83 -0
  381. package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0.md +99 -0
  382. package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0_VERIFICATION.md +115 -0
  383. package/docs/attestation/Lex_Guff_Version_Contract_Pact_v1.0.0.md +181 -0
  384. package/docs/attestation/README.md +87 -0
  385. package/docs/attestation/ax_pledge_2025-12-02.ots +0 -0
  386. package/docs/attestation/ax_pledge_timestamp_response.tsr +0 -0
  387. package/docs/attestation/copilot_summarization_2025-12-01.ots +0 -0
  388. package/docs/attestation/copilot_summarization_2025-12-01_VERIFICATION.md +100 -0
  389. package/docs/attestation/copilot_summarization_behavior_observation_2025-12-01.md +85 -0
  390. package/docs/attestation/copilot_summarization_screenshot_2025-12-01.png +0 -0
  391. package/docs/attestation/employment_separation_2025-11-26.ots +0 -0
  392. package/docs/attestation/employment_timestamp_response.tsr +0 -0
  393. package/docs/attestation/freetsa_cacert.pem +45 -0
  394. package/docs/attestation/freetsa_tsa.crt +45 -0
  395. package/docs/attestation/lex_employment_separation_2025-11-26.md +85 -0
  396. package/docs/attestation/lex_employment_separation_2025-11-26_VERIFICATION.md +126 -0
  397. package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md +350 -0
  398. package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md.ots +0 -0
  399. package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft_VERIFICATION.md +130 -0
  400. package/docs/attestation/patent/README.md +75 -0
  401. package/docs/attestation/patent/fig1_write_path.svg +58 -0
  402. package/docs/attestation/patent/fig2_read_normalize_rollup.svg +92 -0
  403. package/docs/attestation/timestamp_response.tsr +0 -0
  404. package/docs/attribution-README.md +264 -0
  405. package/docs/audit-compliance.md +283 -0
  406. package/docs/audit-outputs.md +1213 -0
  407. package/docs/audit-sdk.md +1134 -0
  408. package/docs/autopilot-levels.md +368 -0
  409. package/docs/autopilot.md +288 -0
  410. package/docs/ci-cd-integration.md +580 -0
  411. package/docs/ci-integration-guide.md +369 -0
  412. package/docs/ci-version-validation.md +198 -0
  413. package/docs/cli-mcp-weave-reporting.md +462 -0
  414. package/docs/cli.md +2262 -0
  415. package/docs/cluster-gates-rollback.md +222 -0
  416. package/docs/command-creation-guide.md +485 -0
  417. package/docs/command-whitelist.md +490 -0
  418. package/docs/commands/idea.md +253 -0
  419. package/docs/config.md +245 -0
  420. package/docs/conflict-clustering.md +225 -0
  421. package/docs/conflict-predictor.md +359 -0
  422. package/docs/context-diet.md +249 -0
  423. package/docs/counter-examples.md +199 -0
  424. package/docs/create-project.md +211 -0
  425. package/docs/deliverables-generator.md +299 -0
  426. package/docs/deliverables-management.md +474 -0
  427. package/docs/dependency-parser.md +354 -0
  428. package/docs/determinism.md +299 -0
  429. package/docs/diffgraph-planner.md +1211 -0
  430. package/docs/dogfood/README.md +33 -0
  431. package/docs/dogfood/wave-3-results.md +303 -0
  432. package/docs/dogfood-merge-weave-script.md +224 -0
  433. package/docs/enterprise-onboarding.md +291 -0
  434. package/docs/environment-variables.md +625 -0
  435. package/docs/error-recovery.md +466 -0
  436. package/docs/errors.md +288 -0
  437. package/docs/executor-authoring.md +854 -0
  438. package/docs/executor-decoupling.md +410 -0
  439. package/docs/front-end-capture-pipeline.md +312 -0
  440. package/docs/gate-report-examples.md +380 -0
  441. package/docs/gates.md +319 -0
  442. package/docs/github-automation.md +128 -0
  443. package/docs/governance-metrics.md +368 -0
  444. package/docs/integrations/README.md +588 -0
  445. package/docs/interactive-plan-review.md +493 -0
  446. package/docs/issue-orchestration.md +256 -0
  447. package/docs/lex_ax_session_key_rememberings_v0.1.md +195 -0
  448. package/docs/lexrunner-v1-summary.md +246 -0
  449. package/docs/lexrunner-v2-contract.md +404 -0
  450. package/docs/lexrunner-v2-migration-plan.md +388 -0
  451. package/docs/lexrunner-v2-salvage-map.md +355 -0
  452. package/docs/lexsona-rules.md +154 -0
  453. package/docs/merge-weave-analysis.md +403 -0
  454. package/docs/merge-weave-quickstart.md +770 -0
  455. package/docs/merge-weave-state-machine.md +390 -0
  456. package/docs/migration-guide.md +529 -0
  457. package/docs/monitoring-examples.md +470 -0
  458. package/docs/monitoring-implementation.md +252 -0
  459. package/docs/orchestration.md +234 -0
  460. package/docs/performance-scale.md +359 -0
  461. package/docs/plan-generation.md +407 -0
  462. package/docs/profile-resolution.md +455 -0
  463. package/docs/prompts.md +427 -0
  464. package/docs/quickstart.md +546 -0
  465. package/docs/release-process.md +310 -0
  466. package/docs/sample-prompts/merge-weave/cli-merge-weave-kickoff.md +274 -0
  467. package/docs/sample-prompts/merge-weave/mcp-merge-weave-kickoff.md +480 -0
  468. package/docs/sample-prompts/merge-weave/standalone-merge-weave-kickoff.md +237 -0
  469. package/docs/schemas.md +359 -0
  470. package/docs/scope-validation.md +444 -0
  471. package/docs/security/rotation-guide.md +325 -0
  472. package/docs/specs/Meeting_Control_Stack_Concept_v0.1.0.md +417 -0
  473. package/docs/specs/git-feature-flag-redesign.md +321 -0
  474. package/docs/specs/lex-pr-brief-behavior.md +269 -0
  475. package/docs/specs/smartergpt-structure-v1.md +705 -0
  476. package/docs/specs/task-brief-v0.1.md +224 -0
  477. package/docs/store-architecture.md +61 -0
  478. package/docs/templates/CONTRIBUTING-merge-weave-section.md +33 -0
  479. package/docs/templates/gates.example.yml +109 -0
  480. package/docs/templates/plan.example.json +77 -0
  481. package/docs/thesis/00-EVOLUTION-NOTES.md +383 -0
  482. package/docs/thesis/01-CORE-THESIS.md +285 -0
  483. package/docs/thesis/02-TURN-COST.md +498 -0
  484. package/docs/thesis/03-PERMISSION-TO-FAIL.md +581 -0
  485. package/docs/thesis/04-CROSS-MODEL-CONTINUITY.md +517 -0
  486. package/docs/thesis/05-RULE-FILE-SPEC.md +732 -0
  487. package/docs/thesis/06-CAPABILITY-TIERS.md +723 -0
  488. package/docs/thesis/07-ROBERT-FIELD-REPORT.md +433 -0
  489. package/docs/thesis/08-IMPLEMENTATION-GUIDE.md +1093 -0
  490. package/docs/thesis/09-METRICS-AND-TELEMETRY.md +793 -0
  491. package/docs/thesis/10-FAILURE-MODES.md +716 -0
  492. package/docs/thesis/README.md +151 -0
  493. package/docs/thesis/lex_governance-collab_systems_paper_draft.md +952 -0
  494. package/docs/thesis/lex_governance-collab_systems_paper_draft.pdf +0 -0
  495. package/docs/tool-grounded/READINESS_ANALYSIS.md +527 -0
  496. package/docs/tool-grounded/enforcement.md +361 -0
  497. package/docs/tool-grounded/tool-grounded-a-view-from-the-inside.md +437 -0
  498. package/docs/tool-grounded/tool-grounded-prompt.md +122 -0
  499. package/docs/tool-grounded/tool-grounded-run-centric.md +474 -0
  500. package/docs/troubleshooting-planner.md +910 -0
  501. package/docs/troubleshooting.md +745 -0
  502. package/docs/tutorials/README.md +201 -0
  503. package/docs/tutorials/diffgraph-planner/01-simple-stack.md +460 -0
  504. package/docs/tutorials/diffgraph-planner/02-diamond-pattern.md +431 -0
  505. package/docs/tutorials/diffgraph-planner/03-large-batch.md +525 -0
  506. package/docs/tutorials/diffgraph-planner/04-fixing-cycles.md +526 -0
  507. package/docs/tutorials/diffgraph-planner/05-hybrid-workflow.md +555 -0
  508. package/docs/tutorials/quick-merge-pyramid.md +364 -0
  509. package/docs/tutorials/video-scripts/01-getting-started.md +286 -0
  510. package/docs/tutorials/video-scripts/02-understanding-dependencies.md +376 -0
  511. package/docs/weave-contract.md +116 -0
  512. package/docs/weave-execution-log.md +153 -0
  513. package/docs/workflows/README.md +139 -0
  514. package/docs/workflows/enterprise.md +545 -0
  515. package/docs/workflows/small-team.md +398 -0
  516. package/docs/workflows/solo-developer.md +419 -0
  517. package/dogfood-merge-weave.sh +122 -0
  518. package/examples/README.md +22 -0
  519. package/examples/WORKING_EXAMPLE.md +309 -0
  520. package/examples/analyze-pr-files.js +100 -0
  521. package/examples/autopilot-level4-example.md +234 -0
  522. package/examples/cluster-gates-demo.sh +178 -0
  523. package/examples/complete-security-workflow.ts +248 -0
  524. package/examples/error-recovery/README.md +202 -0
  525. package/examples/executor-manifest.example.yaml +81 -0
  526. package/examples/front-end-capture-pipeline/README.md +99 -0
  527. package/examples/front-end-capture-pipeline/create-project-example.sh +83 -0
  528. package/examples/front-end-capture-pipeline/idea-dark-mode.json +14 -0
  529. package/examples/front-end-capture-pipeline/idea-example.sh +57 -0
  530. package/examples/front-end-capture-pipeline/manual-test-checklist.md +426 -0
  531. package/examples/gates/README.md +165 -0
  532. package/examples/gates/lint-gate.sh +40 -0
  533. package/examples/gates/lint-gate.ts +99 -0
  534. package/examples/gates/test-runner.ts +113 -0
  535. package/examples/gates/vuln-scanner.ts +95 -0
  536. package/examples/github-integration/README.md +111 -0
  537. package/examples/github-integration/example-plan.json +95 -0
  538. package/examples/performance-config.md +388 -0
  539. package/examples/profile-setup/.gitignore.template +66 -0
  540. package/examples/profile-setup/.smartergpt-example/README.md +190 -0
  541. package/examples/profile-setup/.smartergpt.local-example/README.md +365 -0
  542. package/examples/profile-setup/README.md +492 -0
  543. package/examples/profile-setup/cross-repo-prompts/README.md +606 -0
  544. package/examples/safety-framework-demo.ts +130 -0
  545. package/examples/safety-mechanisms-example.ts +191 -0
  546. package/examples/sample-plan.json +87 -0
  547. package/examples/sample-stack.yml +66 -0
  548. package/examples/sarif/README.md +224 -0
  549. package/examples/scope-validation-demo.ts +199 -0
  550. package/examples/security-integration.ts +293 -0
  551. package/examples/token-tracking-example.ts +71 -0
  552. package/executors/senior-dev/ARCHITECTURE.md +182 -0
  553. package/executors/senior-dev/MEMORY_INTEGRATION.md +236 -0
  554. package/executors/senior-dev/QUICK_START.md +145 -0
  555. package/executors/senior-dev/README.md +76 -0
  556. package/executors/senior-dev/examples/sample-review-session.md +228 -0
  557. package/executors/senior-dev/executor-manifest.yaml +79 -0
  558. package/executors/senior-dev/prompts/code-review.prompt.md +78 -0
  559. package/executors/senior-dev/prompts/mentorship-feedback.prompt.md +97 -0
  560. package/executors/senior-dev/prompts/pattern-recognition.prompt.md +80 -0
  561. package/executors/senior-dev/prompts/pr-analysis.prompt.md +75 -0
  562. package/executors/senior-dev/scripts/capture-review-frame.sh +129 -0
  563. package/executors/senior-dev/scripts/prepare-review-context.sh +61 -0
  564. package/executors/senior-dev/scripts/recall-context.sh +87 -0
  565. package/lexrunner-launcher.sh +12 -0
  566. package/mcp-config-example.json +14 -0
  567. package/mcp-server.mjs +1221 -0
  568. package/merge-weave-current-prs.md +170 -0
  569. package/merge-weave-dogfood.json +46 -0
  570. package/merge-weave-plan.json +56 -0
  571. package/package.json +140 -0
  572. package/procedures/merge-weave-main.yaml +90 -0
  573. package/procedures/pr-review.yaml +68 -0
  574. package/project/README.md +50 -0
  575. package/prompts/tool-grounded-mode.md +185 -0
  576. package/schemas/allowed-commands.schema.json +108 -0
  577. package/schemas/audit-events.schema.json +138 -0
  578. package/schemas/audit-events.v1.0.0.schema.json +138 -0
  579. package/schemas/edit-plan.schema.json +80 -0
  580. package/schemas/executor-manifest.schema.json +236 -0
  581. package/schemas/flake-report.schema.json +95 -0
  582. package/schemas/gate-report.schema.json +85 -0
  583. package/schemas/gates/build.schema.json +32 -0
  584. package/schemas/gates/coverage.schema.json +42 -0
  585. package/schemas/gates/lint.schema.json +34 -0
  586. package/schemas/gates/security-scan.schema.json +33 -0
  587. package/schemas/gates/test.schema.json +35 -0
  588. package/schemas/next-option.schema.json +60 -0
  589. package/schemas/persona-snapshot.schema.json +66 -0
  590. package/schemas/plan.schema.json +300 -0
  591. package/schemas/status-response.schema.json +193 -0
  592. package/scripts/README.md +354 -0
  593. package/scripts/analyze-governance-logs.mjs +51 -0
  594. package/scripts/benchmark-ci.ts +339 -0
  595. package/scripts/check-determinism.sh +23 -0
  596. package/scripts/check-license-compliance.mjs +319 -0
  597. package/scripts/check-release-drift.mjs +81 -0
  598. package/scripts/ci-debug.sh +24 -0
  599. package/scripts/ci-smoke.mjs +304 -0
  600. package/scripts/create-sample-repo.sh +245 -0
  601. package/scripts/dogfood-merge-weave.sh +552 -0
  602. package/scripts/gen_mcp_servers.py +252 -0
  603. package/scripts/generate-executor-manifest-schema.ts +30 -0
  604. package/scripts/generate-flake-schema.ts +32 -0
  605. package/scripts/generate-gate-schema.ts +32 -0
  606. package/scripts/generate-plan-schema.ts +30 -0
  607. package/scripts/generate-run-schemas.ts +69 -0
  608. package/scripts/load-prompt.mjs +147 -0
  609. package/scripts/merge-weave-wrapper.sh +445 -0
  610. package/scripts/merge-weave.sh +489 -0
  611. package/scripts/metrics-template.ts +134 -0
  612. package/scripts/package-lex.sh +267 -0
  613. package/scripts/quick-start-merge-weave.sh +218 -0
  614. package/scripts/release-prepare.ts +350 -0
  615. package/scripts/rotate-secrets-example.ts +134 -0
  616. package/scripts/test-lexsona-shadow.mjs +100 -0
  617. package/scripts/validate-manifests.ts +188 -0
  618. package/scripts/verify-audit-phase2.js +175 -0
  619. package/src/ai/README.md +456 -0
  620. package/src/ai/conflictStrategy.ts +223 -0
  621. package/src/ai/conflictStrategyCache.ts +164 -0
  622. package/src/ai/conflictStrategyPrompt.ts +128 -0
  623. package/src/ai/conflictStrategySchema.ts +165 -0
  624. package/src/ai/heuristicFallback.ts +162 -0
  625. package/src/ai/index.ts +64 -0
  626. package/src/ai/riskScoring.ts +174 -0
  627. package/src/aliases/index.ts +16 -0
  628. package/src/aliases/resolver.ts +212 -0
  629. package/src/audit/context.ts +284 -0
  630. package/src/audit/emitter.ts +685 -0
  631. package/src/audit/events.ts +210 -0
  632. package/src/audit/gateMatrix.ts +158 -0
  633. package/src/audit/index.ts +44 -0
  634. package/src/audit/manifest.ts +78 -0
  635. package/src/audit/profiles.ts +93 -0
  636. package/src/audit/redaction.ts +216 -0
  637. package/src/audit/sarif.ts +213 -0
  638. package/src/audit/schema/events.ts +366 -0
  639. package/src/audit/schema/manifest.ts +47 -0
  640. package/src/audit/schema.ts +159 -0
  641. package/src/audit/sdk/index.ts +145 -0
  642. package/src/audit/sdk/types.ts +88 -0
  643. package/src/audit/sidecar.ts +111 -0
  644. package/src/audit/signing.ts +521 -0
  645. package/src/autopilot/README.md +113 -0
  646. package/src/autopilot/artifacts.ts +287 -0
  647. package/src/autopilot/base.ts +132 -0
  648. package/src/autopilot/deliverables.ts +392 -0
  649. package/src/autopilot/index.ts +29 -0
  650. package/src/autopilot/level1.ts +187 -0
  651. package/src/autopilot/level2.ts +262 -0
  652. package/src/autopilot/level3.ts +263 -0
  653. package/src/autopilot/level4.ts +393 -0
  654. package/src/autopilot/safety/README.md +512 -0
  655. package/src/autopilot/safety/SafetyFramework.ts +634 -0
  656. package/src/autopilot/safety/index.ts +16 -0
  657. package/src/autopilot/types.ts +250 -0
  658. package/src/budget/index.ts +56 -0
  659. package/src/budget/manager.ts +547 -0
  660. package/src/budget/schema.ts +305 -0
  661. package/src/budget/tracker.ts +155 -0
  662. package/src/cache/issue-cache.ts +150 -0
  663. package/src/cli/command-map.ts +221 -0
  664. package/src/cli/commands/gate/test.ts +214 -0
  665. package/src/cli/exitHandler.ts +98 -0
  666. package/src/cli/flags.ts +123 -0
  667. package/src/cli/formatSuggestions.ts +202 -0
  668. package/src/cli/formatters.ts +294 -0
  669. package/src/cli/jsonEnvelope.ts +152 -0
  670. package/src/cli/output.ts +61 -0
  671. package/src/cli/runnerLifecycle.ts +118 -0
  672. package/src/cli-audit.ts +76 -0
  673. package/src/cli-security.ts +114 -0
  674. package/src/cli.ts +1231 -0
  675. package/src/commands/audit/index.ts +5 -0
  676. package/src/commands/audit/verify.ts +87 -0
  677. package/src/commands/autopilot.ts +131 -0
  678. package/src/commands/budget.ts +327 -0
  679. package/src/commands/bulkOps.ts +204 -0
  680. package/src/commands/completion.ts +287 -0
  681. package/src/commands/config/validate.ts +428 -0
  682. package/src/commands/config.ts +368 -0
  683. package/src/commands/counterExamples.ts +104 -0
  684. package/src/commands/create-project.ts +338 -0
  685. package/src/commands/discover.ts +192 -0
  686. package/src/commands/doctor.ts +436 -0
  687. package/src/commands/execute.ts +558 -0
  688. package/src/commands/explain.ts +157 -0
  689. package/src/commands/fanout-analyze.ts +684 -0
  690. package/src/commands/fanout-harvest.ts +328 -0
  691. package/src/commands/fanout-monitor.ts +224 -0
  692. package/src/commands/gateAttest.ts +95 -0
  693. package/src/commands/gateImport.ts +142 -0
  694. package/src/commands/gateImportChecks.ts +208 -0
  695. package/src/commands/gateReport.ts +184 -0
  696. package/src/commands/governanceCleanup.ts +171 -0
  697. package/src/commands/governanceReport.ts +497 -0
  698. package/src/commands/guards.ts +50 -0
  699. package/src/commands/idea.ts +281 -0
  700. package/src/commands/init.ts +414 -0
  701. package/src/commands/issues.ts +165 -0
  702. package/src/commands/merge.ts +677 -0
  703. package/src/commands/mergeOrder.ts +68 -0
  704. package/src/commands/metrics.ts +232 -0
  705. package/src/commands/migrateProfile.ts +187 -0
  706. package/src/commands/orchestrate/analyze-issues.ts +203 -0
  707. package/src/commands/orchestrate/assign-batch.ts +204 -0
  708. package/src/commands/orchestrate/generate-deliverables.ts +66 -0
  709. package/src/commands/orchestrate/pinToolchain.ts +102 -0
  710. package/src/commands/orchestrate/plan-batch.ts +119 -0
  711. package/src/commands/orchestrate/predict-conflicts.ts +210 -0
  712. package/src/commands/orchestrate.ts +186 -0
  713. package/src/commands/plan.ts +403 -0
  714. package/src/commands/planDiff.ts +56 -0
  715. package/src/commands/planReview.ts +112 -0
  716. package/src/commands/planViewer.ts +180 -0
  717. package/src/commands/preview-constraints.ts +97 -0
  718. package/src/commands/query.ts +313 -0
  719. package/src/commands/report.ts +56 -0
  720. package/src/commands/retry.ts +60 -0
  721. package/src/commands/schema.ts +128 -0
  722. package/src/commands/security.ts +140 -0
  723. package/src/commands/seniorDev.ts +326 -0
  724. package/src/commands/status.ts +97 -0
  725. package/src/commands/tokenReport.ts +167 -0
  726. package/src/commands/validation.ts +66 -0
  727. package/src/commands/weave-checkpoints.ts +145 -0
  728. package/src/commands/weave-fanout.ts +273 -0
  729. package/src/commands/weave-policy.ts +277 -0
  730. package/src/commands/weave.ts +518 -0
  731. package/src/config/localOverlay.ts +167 -0
  732. package/src/config/pathResolver.ts +106 -0
  733. package/src/config/profileResolver.ts +194 -0
  734. package/src/config/promptsResolver.ts +312 -0
  735. package/src/config/rulesResolver.ts +257 -0
  736. package/src/config/schemas.ts +142 -0
  737. package/src/core/bootstrap.ts +287 -0
  738. package/src/core/enterprise.ts +453 -0
  739. package/src/core/errorRecovery.ts +509 -0
  740. package/src/core/githubPlan.ts +282 -0
  741. package/src/core/inputs.ts +314 -0
  742. package/src/core/multiRepoPlan.ts +353 -0
  743. package/src/core/plan.ts +106 -0
  744. package/src/core/snapshot.ts +189 -0
  745. package/src/errors/adapters.ts +897 -0
  746. package/src/errors/index.ts +231 -0
  747. package/src/executionState.ts +356 -0
  748. package/src/executors/README_FRAME_CONTRACT.md +446 -0
  749. package/src/executors/frameContract.ts +270 -0
  750. package/src/executors/guardrailEnforcement.ts +294 -0
  751. package/src/executors/seniorDev/core.ts +548 -0
  752. package/src/executors/seniorDev/index.ts +30 -0
  753. package/src/executors/seniorDev/types.ts +176 -0
  754. package/src/executors/toolBudget.ts +194 -0
  755. package/src/fanout/analyzer.ts +735 -0
  756. package/src/fanout/github-adapter.ts +262 -0
  757. package/src/fanout/harvest.ts +517 -0
  758. package/src/fanout/monitor.ts +350 -0
  759. package/src/fanout/types.ts +428 -0
  760. package/src/frames/controller.ts +160 -0
  761. package/src/frames/emitter.ts +455 -0
  762. package/src/frames/index.ts +58 -0
  763. package/src/frames/storage.ts +203 -0
  764. package/src/frames/types.ts +258 -0
  765. package/src/gates/checkRunConverter.ts +91 -0
  766. package/src/gates/test/adapters/errors.ts +32 -0
  767. package/src/gates/test/adapters/index.ts +36 -0
  768. package/src/gates/test/adapters/interface.ts +63 -0
  769. package/src/gates/test/adapters/jest-json.ts +370 -0
  770. package/src/gates/test/adapters/junit-xml.ts +400 -0
  771. package/src/gates/test/adapters/registry.ts +149 -0
  772. package/src/gates/test/adapters/vitest-json.ts +339 -0
  773. package/src/gates/test/enrichment/failureId.ts +74 -0
  774. package/src/gates/test/enrichment/index.ts +25 -0
  775. package/src/gates/test/enrichment/nextActions.ts +322 -0
  776. package/src/gates/test/enrichment/rerunTemplates.ts +105 -0
  777. package/src/gates/test/enrichment/signature.ts +58 -0
  778. package/src/gates/test/enrichment/stackParser.ts +149 -0
  779. package/src/gates/test/enrichment/types.ts +67 -0
  780. package/src/gates/test/formatters/markdown.spec.ts +942 -0
  781. package/src/gates/test/formatters/markdown.ts +296 -0
  782. package/src/gates/test/index.ts +54 -0
  783. package/src/gates/test/schema.spec.ts +372 -0
  784. package/src/gates/test/schema.ts +327 -0
  785. package/src/gates/validator.ts +92 -0
  786. package/src/gates.ts +1022 -0
  787. package/src/git/operations.ts +592 -0
  788. package/src/git/parseRemote.ts +22 -0
  789. package/src/github/api.ts +584 -0
  790. package/src/github/batch-ops.ts +215 -0
  791. package/src/github/client.ts +647 -0
  792. package/src/github/contextDiet.ts +205 -0
  793. package/src/github/diffHunks.ts +285 -0
  794. package/src/github/index.ts +11 -0
  795. package/src/github/minimalContext.ts +212 -0
  796. package/src/github/minimalContextClient.ts +105 -0
  797. package/src/github/symbolMap.ts +370 -0
  798. package/src/github/types.ts +166 -0
  799. package/src/governance/index.ts +42 -0
  800. package/src/governance/mcpStatus.ts +258 -0
  801. package/src/governance/timeoutAdjustment.ts +149 -0
  802. package/src/governance/turnCostSummary.ts +182 -0
  803. package/src/hooks/events.ts +374 -0
  804. package/src/hooks/index.ts +8 -0
  805. package/src/hostility/checks.ts +408 -0
  806. package/src/hostility/index.ts +108 -0
  807. package/src/hostility/score.ts +143 -0
  808. package/src/interactive/planDiff.ts +168 -0
  809. package/src/interactive/planHistory.ts +205 -0
  810. package/src/interactive/planReview.ts +531 -0
  811. package/src/learning/counter-example.ts +174 -0
  812. package/src/learning/prompts.ts +107 -0
  813. package/src/learning/storage.ts +230 -0
  814. package/src/lexsona/client.ts +367 -0
  815. package/src/lexsona/index.ts +44 -0
  816. package/src/lexsona/logger.ts +408 -0
  817. package/src/lexsona/types.ts +177 -0
  818. package/src/mcp/DEPRECATED.md +33 -0
  819. package/src/mcp/server.ts +3587 -0
  820. package/src/mcp/types/guided-response.ts +95 -0
  821. package/src/mcp/types.ts +468 -0
  822. package/src/mcp/workflow/state-machine.ts +277 -0
  823. package/src/mergeEligibility.ts +355 -0
  824. package/src/mergeOrder.ts +170 -0
  825. package/src/metrics/export.ts +472 -0
  826. package/src/metrics/index.ts +35 -0
  827. package/src/metrics/turncost.ts +284 -0
  828. package/src/monitoring/README.md +222 -0
  829. package/src/monitoring/audit.ts +98 -0
  830. package/src/monitoring/cache.ts +121 -0
  831. package/src/monitoring/dashboards/grafana-dashboard.json +172 -0
  832. package/src/monitoring/errorRecovery.ts +334 -0
  833. package/src/monitoring/errors.ts +105 -0
  834. package/src/monitoring/fileLogger.ts +194 -0
  835. package/src/monitoring/hallucinations.ts +45 -0
  836. package/src/monitoring/health.ts +171 -0
  837. package/src/monitoring/index.ts +16 -0
  838. package/src/monitoring/lock.ts +158 -0
  839. package/src/monitoring/logger.ts +178 -0
  840. package/src/monitoring/metrics.ts +245 -0
  841. package/src/monitoring/profiler.ts +156 -0
  842. package/src/monitoring/tokenLogger.ts +141 -0
  843. package/src/orchestrate/analyzer.ts +461 -0
  844. package/src/orchestrate/index.ts +6 -0
  845. package/src/orchestrate/types.ts +65 -0
  846. package/src/orchestration/README.md +480 -0
  847. package/src/orchestration/agentAssigner.ts +206 -0
  848. package/src/orchestration/batchPlanner.ts +201 -0
  849. package/src/orchestration/conflictClustering.ts +344 -0
  850. package/src/orchestration/conflictGraph.ts +63 -0
  851. package/src/orchestration/conflictPredictor.ts +170 -0
  852. package/src/orchestration/deliverablesGenerator.ts +345 -0
  853. package/src/orchestration/determinism.ts +232 -0
  854. package/src/orchestration/index.ts +45 -0
  855. package/src/orchestration/mergeTreeSimulator.ts +137 -0
  856. package/src/orchestration/mis.ts +123 -0
  857. package/src/orchestration/toolchainManifest.ts +169 -0
  858. package/src/orchestration/types.ts +103 -0
  859. package/src/performance.README.md +99 -0
  860. package/src/performance.ts +279 -0
  861. package/src/planner/README.md +215 -0
  862. package/src/planner/dependencyParser.ts +404 -0
  863. package/src/planner/dependencyScoring.ts +346 -0
  864. package/src/planner/fileAnalysis.ts +693 -0
  865. package/src/planner/index.ts +41 -0
  866. package/src/planner/scopeValidator.ts +308 -0
  867. package/src/planner/types.ts +80 -0
  868. package/src/planner/validation.ts +493 -0
  869. package/src/preview/constraints.ts +333 -0
  870. package/src/procedures/index.ts +47 -0
  871. package/src/procedures/loader.ts +252 -0
  872. package/src/procedures/schema.ts +191 -0
  873. package/src/procedures/stateMachine.ts +160 -0
  874. package/src/procedures/types.ts +178 -0
  875. package/src/receipts/emit.ts +354 -0
  876. package/src/receipts/index.ts +48 -0
  877. package/src/receipts/schema.ts +227 -0
  878. package/src/report/aggregate.ts +160 -0
  879. package/src/runs/artifacts.ts +315 -0
  880. package/src/runs/attribution.ts +132 -0
  881. package/src/runs/context.ts +54 -0
  882. package/src/runs/decisions.ts +407 -0
  883. package/src/runs/enforcement.ts +395 -0
  884. package/src/runs/failures.ts +517 -0
  885. package/src/runs/index.ts +141 -0
  886. package/src/runs/manager.ts +910 -0
  887. package/src/runs/statusBuilder.ts +233 -0
  888. package/src/runs/storage.ts +290 -0
  889. package/src/runs/types.ts +216 -0
  890. package/src/schema/flakeReport.ts +74 -0
  891. package/src/schema/gateMapping.ts +107 -0
  892. package/src/schema/gateReport.ts +236 -0
  893. package/src/schema/weaveLock.ts +51 -0
  894. package/src/schema.ts +313 -0
  895. package/src/schemas/executorManifest.ts +204 -0
  896. package/src/schemas/feature-spec-v0.ts +40 -0
  897. package/src/schemas/persona.ts +162 -0
  898. package/src/schemas/project.ts +91 -0
  899. package/src/schemas/runCentric.ts +402 -0
  900. package/src/schemas/task-contract.ts +626 -0
  901. package/src/schemas/vacuumReadyPrompt.ts +128 -0
  902. package/src/sdk/index.ts +113 -0
  903. package/src/sdk/parser.ts +101 -0
  904. package/src/sdk/query.ts +315 -0
  905. package/src/sdk/validator.ts +114 -0
  906. package/src/security/README.md +496 -0
  907. package/src/security/authentication.ts +173 -0
  908. package/src/security/authorization.ts +348 -0
  909. package/src/security/commandValidator.ts +195 -0
  910. package/src/security/compliance.ts +688 -0
  911. package/src/security/index.ts +85 -0
  912. package/src/security/policy.ts +399 -0
  913. package/src/security/sarif.ts +179 -0
  914. package/src/security/scanning.ts +362 -0
  915. package/src/security/secrets.ts +520 -0
  916. package/src/shared/git/index.ts +30 -0
  917. package/src/shared/git/runGit.ts +281 -0
  918. package/src/shared/git/runtime.ts +66 -0
  919. package/src/snapshot/builder.ts +229 -0
  920. package/src/snapshot/index.ts +8 -0
  921. package/src/store/CONTRACT.md +189 -0
  922. package/src/store/README.md +22 -0
  923. package/src/store/index.ts +99 -0
  924. package/src/store/inmemory/index.ts +10 -0
  925. package/src/store/inmemory/run-store.ts +268 -0
  926. package/src/store/postgres/.gitkeep +0 -0
  927. package/src/store/run-store.ts +405 -0
  928. package/src/store/sqlite/index.ts +7 -0
  929. package/src/store/sqlite/run-store.ts +525 -0
  930. package/src/store/sqlite/schema.sql +67 -0
  931. package/src/telemetry/frames.ts +179 -0
  932. package/src/telemetry/index.ts +5 -0
  933. package/src/tiers/index.ts +34 -0
  934. package/src/tiers/metrics.ts +156 -0
  935. package/src/tiers/schema.ts +95 -0
  936. package/src/tiers/suggest.ts +183 -0
  937. package/src/types/guardrails.ts +452 -0
  938. package/src/types/index.ts +42 -0
  939. package/src/util/canonicalJson.ts +29 -0
  940. package/src/util/colorControl.ts +46 -0
  941. package/src/util/envUtils.ts +139 -0
  942. package/src/util/hash.ts +69 -0
  943. package/src/util/lockHash.ts +90 -0
  944. package/src/util/minHeap.ts +108 -0
  945. package/src/util/progress.ts +89 -0
  946. package/src/util/tokenEstimator.ts +55 -0
  947. package/src/utils/fingerprint.ts +105 -0
  948. package/src/utils/paths.ts +209 -0
  949. package/src/utils/tokens.ts +151 -0
  950. package/src/utils/validation.ts +53 -0
  951. package/src/verification/diff-applier.ts +60 -0
  952. package/src/verification/engine-verifier.ts +171 -0
  953. package/src/verification/errors.ts +30 -0
  954. package/src/verification/index.ts +13 -0
  955. package/src/weave/audit/index.ts +17 -0
  956. package/src/weave/audit/logger.ts +206 -0
  957. package/src/weave/authority/evaluator.ts +660 -0
  958. package/src/weave/authority/index.ts +30 -0
  959. package/src/weave/authority/schema.ts +292 -0
  960. package/src/weave/checkpoint/index.ts +7 -0
  961. package/src/weave/checkpoint/storage.ts +223 -0
  962. package/src/weave/checkpoint/types.ts +121 -0
  963. package/src/weave/checkpoint/utils.ts +207 -0
  964. package/src/weave/clusterGates.ts +366 -0
  965. package/src/weave/draftPR.ts +214 -0
  966. package/src/weave/executor/d1-executor.ts +822 -0
  967. package/src/weave/executor/d2-executor.ts +381 -0
  968. package/src/weave/executor/index.ts +24 -0
  969. package/src/weave/executor/types.ts +135 -0
  970. package/src/weave/fanout/generator.ts +186 -0
  971. package/src/weave/fanout/index.ts +51 -0
  972. package/src/weave/fanout/loader.ts +134 -0
  973. package/src/weave/fanout/matcher.ts +239 -0
  974. package/src/weave/fanout/schema.ts +178 -0
  975. package/src/weave/frameHelper.ts +126 -0
  976. package/src/weave/gateFailureHandler.ts +405 -0
  977. package/src/weave/index.ts +89 -0
  978. package/src/weave/lockFile.ts +193 -0
  979. package/src/weave/mergeHelpers.ts +377 -0
  980. package/src/weave/mergeWeaveSequential.ts +282 -0
  981. package/src/weave/metrics/calculator.ts +362 -0
  982. package/src/weave/metrics/index.ts +44 -0
  983. package/src/weave/metrics/logger.ts +291 -0
  984. package/src/weave/metrics/schema.ts +505 -0
  985. package/src/weave/planner/index.ts +23 -0
  986. package/src/weave/planner/planner.ts +411 -0
  987. package/src/weave/planner/types.ts +181 -0
  988. package/src/weave/policy/index.ts +63 -0
  989. package/src/weave/policy/loader.ts +148 -0
  990. package/src/weave/policy/schema.ts +290 -0
  991. package/src/weave/post-merge-checks.ts +220 -0
  992. package/src/weave/preflightConflicts.ts +375 -0
  993. package/src/weave/receiptHelper.ts +287 -0
  994. package/src/weave/recovery.ts +232 -0
  995. package/src/weave/resolutionGuidance.ts +173 -0
  996. package/src/weave/stateMachine.ts +426 -0
  997. package/src/weave/testfix/applier.ts +195 -0
  998. package/src/weave/testfix/index.ts +18 -0
  999. package/src/weave/testfix/loader.ts +116 -0
  1000. package/src/weave/testfix/matcher.ts +158 -0
  1001. package/src/weave/testfix/schema.ts +218 -0
  1002. package/src/weave/types.ts +305 -0
  1003. package/src/weave/utils/copilot-completion.ts +76 -0
  1004. package/test-mcp-dogfood.mjs +128 -0
  1005. package/test-mcp.mjs +116 -0
  1006. package/tests/README.md +155 -0
  1007. package/tests/advanced-cli-e2e.spec.ts +218 -0
  1008. package/tests/agentAssigner.spec.ts +261 -0
  1009. package/tests/ai-conflict-strategy-cache.spec.ts +254 -0
  1010. package/tests/ai-conflict-strategy-risk.spec.ts +287 -0
  1011. package/tests/ai-conflict-strategy-schema.spec.ts +252 -0
  1012. package/tests/ai-conflict-strategy.spec.ts +442 -0
  1013. package/tests/aliases/resolver.spec.ts +238 -0
  1014. package/tests/audit/context.spec.ts +283 -0
  1015. package/tests/audit/emitter.spec.ts +347 -0
  1016. package/tests/audit/gateMatrix.spec.ts +335 -0
  1017. package/tests/audit/integration.spec.ts +236 -0
  1018. package/tests/audit/redaction.spec.ts +290 -0
  1019. package/tests/audit/sarif-integration.spec.ts +303 -0
  1020. package/tests/audit/sarif.spec.ts +458 -0
  1021. package/tests/audit/schema-events.spec.ts +421 -0
  1022. package/tests/audit/schema.spec.ts +434 -0
  1023. package/tests/audit/sdk-integration.spec.ts +598 -0
  1024. package/tests/audit/sdk.spec.ts +318 -0
  1025. package/tests/audit/signing-integration.spec.ts +276 -0
  1026. package/tests/audit/signing.spec.ts +350 -0
  1027. package/tests/audit-signing.spec.ts +406 -0
  1028. package/tests/audit-verify-cli.spec.ts +176 -0
  1029. package/tests/autopilot-e2e-level3-4.spec.ts +741 -0
  1030. package/tests/autopilot-integration.spec.ts +274 -0
  1031. package/tests/autopilot-level1.spec.ts +449 -0
  1032. package/tests/autopilot-level2.spec.ts +188 -0
  1033. package/tests/autopilot-level3.spec.ts +266 -0
  1034. package/tests/autopilot-level4.spec.ts +454 -0
  1035. package/tests/autopilot.spec.ts +379 -0
  1036. package/tests/ax-error-adapters.spec.ts +580 -0
  1037. package/tests/batch-planner.spec.ts +500 -0
  1038. package/tests/benchmark-infrastructure.spec.ts +445 -0
  1039. package/tests/benchmarks/README.md +103 -0
  1040. package/tests/benchmarks/baselines/baseline.json +127 -0
  1041. package/tests/benchmarks/core/dependencyResolver.bench.ts +128 -0
  1042. package/tests/benchmarks/core/planParser.bench.ts +114 -0
  1043. package/tests/benchmarks/core/topologicalSort.bench.ts +102 -0
  1044. package/tests/benchmarks/index.ts +36 -0
  1045. package/tests/benchmarks/io/fileOperations.bench.ts +132 -0
  1046. package/tests/benchmarks/io/gitOperations.bench.ts +99 -0
  1047. package/tests/benchmarks/utils/graphGenerator.ts +201 -0
  1048. package/tests/benchmarks/utils/reporter.ts +231 -0
  1049. package/tests/benchmarks/workflows/endToEnd.bench.ts +132 -0
  1050. package/tests/bootstrap.test.ts +319 -0
  1051. package/tests/budget-tracker.spec.ts +279 -0
  1052. package/tests/bulkOps.spec.ts +166 -0
  1053. package/tests/bulletproof-determinism.test.ts +223 -0
  1054. package/tests/canonicalJson.test.ts +130 -0
  1055. package/tests/checkRunConverter.spec.ts +357 -0
  1056. package/tests/cli/commands/gate/test.spec.ts +564 -0
  1057. package/tests/cli/emit-frames-flag.spec.ts +117 -0
  1058. package/tests/cli/exitHandler.spec.ts +314 -0
  1059. package/tests/cli/flags.spec.ts +223 -0
  1060. package/tests/cli/formatters.spec.ts +513 -0
  1061. package/tests/cli/output.spec.ts +221 -0
  1062. package/tests/cli-autopilot.spec.ts +170 -0
  1063. package/tests/cli-budget-guards.spec.ts +210 -0
  1064. package/tests/cli-color-control.spec.ts +334 -0
  1065. package/tests/cli-deliverables-generator.spec.ts +185 -0
  1066. package/tests/cli-determinism.spec.ts +496 -0
  1067. package/tests/cli-init-enterprise.spec.ts +294 -0
  1068. package/tests/cli-init-json.spec.ts +154 -0
  1069. package/tests/cli-init-local.spec.ts +159 -0
  1070. package/tests/cli-json-envelope.spec.ts +140 -0
  1071. package/tests/cli-json.spec.ts +408 -0
  1072. package/tests/cli-orchestrate-plan-batch.spec.ts +329 -0
  1073. package/tests/cli-orchestrate.spec.ts +231 -0
  1074. package/tests/cli-plan-generation.spec.ts +367 -0
  1075. package/tests/cli-plan-review.spec.ts +300 -0
  1076. package/tests/cli-progress.spec.ts +193 -0
  1077. package/tests/cli-ux-enhancements.spec.ts +213 -0
  1078. package/tests/cliJsonPurity.spec.ts +437 -0
  1079. package/tests/cliSuggestDeps.spec.ts +360 -0
  1080. package/tests/cluster-gates-rollback.spec.ts +353 -0
  1081. package/tests/command-validator-integration.spec.ts +305 -0
  1082. package/tests/command-validator.spec.ts +380 -0
  1083. package/tests/commands/autopilot.spec.ts +124 -0
  1084. package/tests/commands/config-validate.spec.ts +301 -0
  1085. package/tests/commands/config.spec.ts +311 -0
  1086. package/tests/commands/create-project.spec.ts +90 -0
  1087. package/tests/commands/doctor.spec.ts +57 -0
  1088. package/tests/commands/execute.spec.ts +293 -0
  1089. package/tests/commands/gateAttest.spec.ts +172 -0
  1090. package/tests/commands/gateImport.spec.ts +176 -0
  1091. package/tests/commands/gateReport.spec.ts +130 -0
  1092. package/tests/commands/guards.spec.ts +114 -0
  1093. package/tests/commands/idea.spec.ts +177 -0
  1094. package/tests/commands/merge.spec.ts +166 -0
  1095. package/tests/commands/plan.spec.ts +123 -0
  1096. package/tests/commands/query.spec.ts +294 -0
  1097. package/tests/commands/report.spec.ts +54 -0
  1098. package/tests/commands/retry.spec.ts +300 -0
  1099. package/tests/commands/schema.spec.ts +136 -0
  1100. package/tests/commands/validation.spec.ts +229 -0
  1101. package/tests/completion.spec.ts +133 -0
  1102. package/tests/config-inspect.spec.ts +202 -0
  1103. package/tests/conflictClustering-e2e.spec.ts +278 -0
  1104. package/tests/conflictClustering.spec.ts +550 -0
  1105. package/tests/conflictGraph.spec.ts +126 -0
  1106. package/tests/conflictPredictor.spec.ts +238 -0
  1107. package/tests/deliverables-generator.spec.ts +329 -0
  1108. package/tests/deliverables.spec.ts +381 -0
  1109. package/tests/dependencyParser-github.spec.ts +244 -0
  1110. package/tests/dependencyParser.spec.ts +386 -0
  1111. package/tests/dependencyScoring.spec.ts +668 -0
  1112. package/tests/deterministic-applicable.test.ts +156 -0
  1113. package/tests/deterministic-build.test.ts +172 -0
  1114. package/tests/deterministic-simple.test.ts +32 -0
  1115. package/tests/discover-suggest-integration.spec.ts +340 -0
  1116. package/tests/dogfood-merge-weave-script.spec.ts +150 -0
  1117. package/tests/e2e/planner.spec.ts +596 -0
  1118. package/tests/e2e-comprehensive.test.ts +500 -0
  1119. package/tests/e2e-determinism.test.ts +293 -0
  1120. package/tests/e2e-synthetic-6pr-weave.spec.ts +329 -0
  1121. package/tests/enterprise-init.spec.ts +350 -0
  1122. package/tests/envUtils.spec.ts +267 -0
  1123. package/tests/error-handling.test.ts +104 -0
  1124. package/tests/error-recovery.spec.ts +451 -0
  1125. package/tests/execution-plan-v1.test.ts +257 -0
  1126. package/tests/executionState-loadGateResults.spec.ts +267 -0
  1127. package/tests/executionState.test.ts +169 -0
  1128. package/tests/executors/README.md +100 -0
  1129. package/tests/executors/frameContract-integration.spec.ts +324 -0
  1130. package/tests/executors/frameContract.spec.ts +531 -0
  1131. package/tests/executors/guardrailEnforcement.spec.ts +424 -0
  1132. package/tests/executors/lifecycle.spec.ts +313 -0
  1133. package/tests/executors/toolBudget.spec.ts +473 -0
  1134. package/tests/feature-spec-v0.test.ts +145 -0
  1135. package/tests/fileAnalysis.spec.ts +946 -0
  1136. package/tests/fingerprint.spec.ts +100 -0
  1137. package/tests/fixtures/README.md +380 -0
  1138. package/tests/fixtures/deliverables/batch-example-plan.json +62 -0
  1139. package/tests/fixtures/executors/README.md +57 -0
  1140. package/tests/fixtures/executors/index.ts +9 -0
  1141. package/tests/fixtures/executors/mock-executor.ts +204 -0
  1142. package/tests/fixtures/executors/registry.ts +51 -0
  1143. package/tests/fixtures/executors/types.ts +95 -0
  1144. package/tests/fixtures/fixtures.spec.ts +307 -0
  1145. package/tests/fixtures/gates/configs.ts +234 -0
  1146. package/tests/fixtures/gates/results.ts +234 -0
  1147. package/tests/fixtures/harvest-bundle-fixture.json +87 -0
  1148. package/tests/fixtures/index.ts +219 -0
  1149. package/tests/fixtures/invalid/plans.ts +178 -0
  1150. package/tests/fixtures/jest/all-passing.json +71 -0
  1151. package/tests/fixtures/jest/snapshot-failures.json +66 -0
  1152. package/tests/fixtures/jest/some-failing.json +100 -0
  1153. package/tests/fixtures/jest/with-location.json +84 -0
  1154. package/tests/fixtures/junit/cdata-messages.xml +29 -0
  1155. package/tests/fixtures/junit/multiple-suites.xml +30 -0
  1156. package/tests/fixtures/junit/single-suite.xml +17 -0
  1157. package/tests/fixtures/junit/with-errors.xml +19 -0
  1158. package/tests/fixtures/junit/with-skipped.xml +18 -0
  1159. package/tests/fixtures/npm-audit.json +32 -0
  1160. package/tests/fixtures/plan.bad-schema.json +5 -0
  1161. package/tests/fixtures/plan.bad-unknown-dep.json +10 -0
  1162. package/tests/fixtures/plan.ci-gates.json +36 -0
  1163. package/tests/fixtures/plan.complex-cycle.json +22 -0
  1164. package/tests/fixtures/plan.cycle.json +14 -0
  1165. package/tests/fixtures/plan.deep-chain.json +95 -0
  1166. package/tests/fixtures/plan.dogfood-execute.json +36 -0
  1167. package/tests/fixtures/plan.gates.json +30 -0
  1168. package/tests/fixtures/plan.integration-pyramid.json +56 -0
  1169. package/tests/fixtures/plan.orphans.json +22 -0
  1170. package/tests/fixtures/plan.parallel.json +30 -0
  1171. package/tests/fixtures/plan.tiny.json +18 -0
  1172. package/tests/fixtures/plan.wide-parallel.json +75 -0
  1173. package/tests/fixtures/plan.with-failures.json +26 -0
  1174. package/tests/fixtures/plan.with-vuln.json +25 -0
  1175. package/tests/fixtures/planner/cross-module.json +101 -0
  1176. package/tests/fixtures/planner/cycle-error.json +56 -0
  1177. package/tests/fixtures/planner/diamond-pattern.json +74 -0
  1178. package/tests/fixtures/planner/empty-repo.json +9 -0
  1179. package/tests/fixtures/planner/file-overlap-heavy.json +110 -0
  1180. package/tests/fixtures/planner/invalid-pr.json +25 -0
  1181. package/tests/fixtures/planner/merge-conflicts.json +42 -0
  1182. package/tests/fixtures/planner/mixed-deps.json +101 -0
  1183. package/tests/fixtures/planner/self-dependency.json +24 -0
  1184. package/tests/fixtures/planner/simple-stack.json +79 -0
  1185. package/tests/fixtures/planner/single-pr.json +25 -0
  1186. package/tests/fixtures/planner/stale-pr.json +40 -0
  1187. package/tests/fixtures/plans/complex.ts +201 -0
  1188. package/tests/fixtures/plans/diamond.ts +115 -0
  1189. package/tests/fixtures/plans/linear.ts +74 -0
  1190. package/tests/fixtures/plans/simple.ts +61 -0
  1191. package/tests/fixtures/prs/basic.ts +175 -0
  1192. package/tests/fixtures/prs/withDeps.ts +197 -0
  1193. package/tests/fixtures/scan-results-clean.sarif +15 -0
  1194. package/tests/fixtures/scan-results.sarif +74 -0
  1195. package/tests/fixtures/scenarios/mergeWorkflows.ts +300 -0
  1196. package/tests/fixtures/scenarios/syntheticWeave.ts +351 -0
  1197. package/tests/fixtures/snapshot/package.json +5 -0
  1198. package/tests/fixtures/snapshot/sample.ts +21 -0
  1199. package/tests/fixtures/utils/cleanup.ts +81 -0
  1200. package/tests/fixtures/utils/mockGitHub.ts +219 -0
  1201. package/tests/fixtures/utils/tempDir.ts +109 -0
  1202. package/tests/fixtures/verification/expected-verification.json +16 -0
  1203. package/tests/fixtures/verification/receipt.json +31 -0
  1204. package/tests/fixtures/verification/snapshot.json +44 -0
  1205. package/tests/fixtures/vitest/all-passing.json +67 -0
  1206. package/tests/fixtures/vitest/complex-nested-suites.json +98 -0
  1207. package/tests/fixtures/vitest/some-failing.json +98 -0
  1208. package/tests/fixtures/vitest/with-coverage.json +97 -0
  1209. package/tests/fixtures-usage-examples.spec.ts +304 -0
  1210. package/tests/flakeReport.spec.ts +267 -0
  1211. package/tests/frames/ci-gate-integration.spec.ts +331 -0
  1212. package/tests/frames/controller.spec.ts +165 -0
  1213. package/tests/frames/emitter.spec.ts +371 -0
  1214. package/tests/frames/idempotency.spec.ts +177 -0
  1215. package/tests/frames/storage.spec.ts +346 -0
  1216. package/tests/frames/types.spec.ts +249 -0
  1217. package/tests/frames/v2-schema-integration.spec.ts +435 -0
  1218. package/tests/gate-working-directory.spec.ts +204 -0
  1219. package/tests/gateMapping.spec.ts +161 -0
  1220. package/tests/gateReportIntegration.spec.ts +175 -0
  1221. package/tests/gateReportValidation.spec.ts +452 -0
  1222. package/tests/gates/test/adapters/jest-json.spec.ts +372 -0
  1223. package/tests/gates/test/adapters/junit-xml.spec.ts +421 -0
  1224. package/tests/gates/test/adapters/registry.spec.ts +376 -0
  1225. package/tests/gates/test/adapters/vitest-json.spec.ts +455 -0
  1226. package/tests/gates/test/enrichment/failureId.spec.ts +131 -0
  1227. package/tests/gates/test/enrichment/nextActions.spec.ts +365 -0
  1228. package/tests/gates/test/enrichment/rerunTemplates.spec.ts +187 -0
  1229. package/tests/gates/test/enrichment/signature.spec.ts +163 -0
  1230. package/tests/gates/test/enrichment/stackParser.spec.ts +203 -0
  1231. package/tests/gates/turncost-integration.spec.ts +221 -0
  1232. package/tests/gates/validation-integration.spec.ts +147 -0
  1233. package/tests/gates/validator.spec.ts +200 -0
  1234. package/tests/gates.test.ts +255 -0
  1235. package/tests/gatesWithPolicy.hostilityTimeoutAdjustment.spec.ts +156 -0
  1236. package/tests/git-operations-receipts.spec.ts +121 -0
  1237. package/tests/git-operations.test.ts +152 -0
  1238. package/tests/git-runtime.spec.ts +175 -0
  1239. package/tests/github-api.labels.spec.ts +21 -0
  1240. package/tests/github-api.test.ts +85 -0
  1241. package/tests/github-context-diet.spec.ts +441 -0
  1242. package/tests/github-diff-hunks.spec.ts +387 -0
  1243. package/tests/github-integration.spec.ts +774 -0
  1244. package/tests/github-minimal-context.spec.ts +338 -0
  1245. package/tests/github-symbol-map.spec.ts +414 -0
  1246. package/tests/githubClient.spec.ts +123 -0
  1247. package/tests/governance/mcpStatus.spec.ts +276 -0
  1248. package/tests/governance/timeoutAdjustment.spec.ts +149 -0
  1249. package/tests/governance/turnCostSummary.spec.ts +188 -0
  1250. package/tests/governance-retention.spec.ts +151 -0
  1251. package/tests/governance-wrapper-delegation.spec.ts +148 -0
  1252. package/tests/guardrails.spec.ts +860 -0
  1253. package/tests/hash.test.ts +83 -0
  1254. package/tests/helpers/cli.ts +23 -0
  1255. package/tests/helpers/getStd.ts +1 -0
  1256. package/tests/helpers/makeGate.ts +19 -0
  1257. package/tests/helpers/plannerTestHelpers.ts +314 -0
  1258. package/tests/hooks/events.spec.ts +518 -0
  1259. package/tests/hostility/checks.spec.ts +295 -0
  1260. package/tests/hostility/integration.spec.ts +123 -0
  1261. package/tests/hostility/score.spec.ts +175 -0
  1262. package/tests/init.spec.ts +270 -0
  1263. package/tests/integration/hipaa-encryption.spec.ts +148 -0
  1264. package/tests/integration/lex-smoke-test.spec.ts +328 -0
  1265. package/tests/integration-e2e.test.ts +244 -0
  1266. package/tests/integration-matrix.test.ts +409 -0
  1267. package/tests/interPRConflicts.spec.ts +254 -0
  1268. package/tests/interactive-plan-history.spec.ts +255 -0
  1269. package/tests/interactive-plan-review.spec.ts +287 -0
  1270. package/tests/issue-analyzer.spec.ts +593 -0
  1271. package/tests/lexsona-integration.spec.ts +311 -0
  1272. package/tests/localOverlay.spec.ts +203 -0
  1273. package/tests/lockHash.spec.ts +167 -0
  1274. package/tests/mcp-auth-errors.spec.ts +190 -0
  1275. package/tests/mcp-contracts.spec.ts +290 -0
  1276. package/tests/mcp-gates-external-plan.spec.ts +146 -0
  1277. package/tests/mcp-granular-tools.spec.ts +208 -0
  1278. package/tests/mcp-runstore-integration.spec.ts +334 -0
  1279. package/tests/mcp-scope-integration.spec.ts +318 -0
  1280. package/tests/mcp-task-handoff.spec.ts +320 -0
  1281. package/tests/mcp-workflow-guide.spec.ts +53 -0
  1282. package/tests/mcp.test.ts +151 -0
  1283. package/tests/merge-conflict-detection.spec.ts +260 -0
  1284. package/tests/mergeEligibility.test.ts +201 -0
  1285. package/tests/mergeLockHash.spec.ts +158 -0
  1286. package/tests/mergeOrder-with-fixtures.spec.ts +215 -0
  1287. package/tests/mergeOrder.test.ts +108 -0
  1288. package/tests/mergeTreeSimulator.spec.ts +145 -0
  1289. package/tests/metrics/export.spec.ts +446 -0
  1290. package/tests/metrics/turncost.spec.ts +309 -0
  1291. package/tests/metrics-template.spec.ts +137 -0
  1292. package/tests/migrateProfile.spec.ts +254 -0
  1293. package/tests/mis.spec.ts +202 -0
  1294. package/tests/monitoring-audit.spec.ts +181 -0
  1295. package/tests/monitoring-cache.spec.ts +331 -0
  1296. package/tests/monitoring-error-recovery.spec.ts +236 -0
  1297. package/tests/monitoring-errors.spec.ts +193 -0
  1298. package/tests/monitoring-fileLogger.spec.ts +319 -0
  1299. package/tests/monitoring-health.spec.ts +152 -0
  1300. package/tests/monitoring-lock.spec.ts +308 -0
  1301. package/tests/monitoring-logger.spec.ts +157 -0
  1302. package/tests/monitoring-metrics.spec.ts +158 -0
  1303. package/tests/monitoring-profiler.spec.ts +197 -0
  1304. package/tests/orchestration-determinism.spec.ts +204 -0
  1305. package/tests/parseRemote.spec.ts +25 -0
  1306. package/tests/pathResolver.spec.ts +122 -0
  1307. package/tests/paths.spec.ts +68 -0
  1308. package/tests/performance.spec.ts +322 -0
  1309. package/tests/pipeline-determinism.spec.ts +597 -0
  1310. package/tests/plan-tier-integration.spec.ts +184 -0
  1311. package/tests/precedence-resolution.spec.ts +682 -0
  1312. package/tests/preflightConflicts.spec.ts +205 -0
  1313. package/tests/procedures/keystone-policy.spec.ts +296 -0
  1314. package/tests/procedures/loader.spec.ts +585 -0
  1315. package/tests/procedures/pr-review.spec.ts +321 -0
  1316. package/tests/profileResolver.spec.ts +375 -0
  1317. package/tests/progress-indicators.spec.ts +139 -0
  1318. package/tests/promptsResolver.spec.ts +443 -0
  1319. package/tests/public-api.spec.ts +272 -0
  1320. package/tests/query.spec.ts +170 -0
  1321. package/tests/receipts.spec.ts +463 -0
  1322. package/tests/release-prepare.spec.ts +268 -0
  1323. package/tests/report.test.ts +335 -0
  1324. package/tests/resolutionGuidance.spec.ts +160 -0
  1325. package/tests/rotate-secrets-example.spec.ts +198 -0
  1326. package/tests/rulesResolver.spec.ts +232 -0
  1327. package/tests/runGit.spec.ts +229 -0
  1328. package/tests/runner-lifecycle-integration.spec.ts +283 -0
  1329. package/tests/runs/artifacts.spec.ts +367 -0
  1330. package/tests/runs/decisions.spec.ts +495 -0
  1331. package/tests/runs/enforcement.spec.ts +555 -0
  1332. package/tests/runs/failures.spec.ts +554 -0
  1333. package/tests/runs/manager-runstore-integration.spec.ts +455 -0
  1334. package/tests/runs/manager.spec.ts +678 -0
  1335. package/tests/runs-manager.spec.ts +485 -0
  1336. package/tests/safety-acceptance.spec.ts +278 -0
  1337. package/tests/safety-enhanced.spec.ts +329 -0
  1338. package/tests/safety-framework.spec.ts +427 -0
  1339. package/tests/safety-guards-integration.spec.ts +213 -0
  1340. package/tests/safety-integration.spec.ts +278 -0
  1341. package/tests/sarif-parser.spec.ts +148 -0
  1342. package/tests/schema.test.ts +88 -0
  1343. package/tests/schemas/behavior-rule.spec.ts +366 -0
  1344. package/tests/schemas/executorManifest.spec.ts +441 -0
  1345. package/tests/schemas/persona-integration.spec.ts +62 -0
  1346. package/tests/schemas/persona.spec.ts +172 -0
  1347. package/tests/schemas/project.spec.ts +247 -0
  1348. package/tests/schemas/run-store.spec.ts +553 -0
  1349. package/tests/schemas/runCentric.spec.ts +463 -0
  1350. package/tests/schemas/vacuumReadyPrompt.spec.ts +515 -0
  1351. package/tests/scope-github-auto-detection.spec.ts +200 -0
  1352. package/tests/scopeValidator.spec.ts +497 -0
  1353. package/tests/security-authentication.spec.ts +42 -0
  1354. package/tests/security-authorization.spec.ts +350 -0
  1355. package/tests/security-cli.spec.ts +264 -0
  1356. package/tests/security-compliance.spec.ts +334 -0
  1357. package/tests/security-policy.spec.ts +295 -0
  1358. package/tests/security-scanning.spec.ts +349 -0
  1359. package/tests/security-secrets.spec.ts +401 -0
  1360. package/tests/store/create-run-store.spec.ts +185 -0
  1361. package/tests/store/inmemory/run-store.spec.ts +533 -0
  1362. package/tests/store/sqlite/run-store.spec.ts +849 -0
  1363. package/tests/telemetry/frames.spec.ts +120 -0
  1364. package/tests/tiers.spec.ts +466 -0
  1365. package/tests/token-usage.spec.ts +309 -0
  1366. package/tests/toolchain-manifest.spec.ts +145 -0
  1367. package/tests/unified-budget.spec.ts +713 -0
  1368. package/tests/unit/cache/issue-cache.spec.ts +131 -0
  1369. package/tests/unit/fanout/analyzer-integration.spec.ts +398 -0
  1370. package/tests/unit/fanout/analyzer.spec.ts +605 -0
  1371. package/tests/unit/fanout/github-adapter.spec.ts +203 -0
  1372. package/tests/unit/fanout/harvest.spec.ts +93 -0
  1373. package/tests/unit/fanout/monitor.spec.ts +297 -0
  1374. package/tests/unit/fanout/types.spec.ts +308 -0
  1375. package/tests/unit/github/batch-ops.spec.ts +179 -0
  1376. package/tests/unit/learning/counter-example.spec.ts +168 -0
  1377. package/tests/unit/learning/storage.spec.ts +154 -0
  1378. package/tests/unit/preview/constraints.spec.ts +429 -0
  1379. package/tests/unit/runs/attribution.spec.ts +204 -0
  1380. package/tests/unit/schemas/task-contract.spec.ts +483 -0
  1381. package/tests/unit/snapshot/builder.spec.ts +389 -0
  1382. package/tests/unit/verification/engine-verifier.spec.ts +279 -0
  1383. package/tests/unit/weave/authority-evaluator.spec.ts +404 -0
  1384. package/tests/unit/weave/authority-schema.spec.ts +199 -0
  1385. package/tests/unit/weave/auto-undraft-integration.spec.ts +349 -0
  1386. package/tests/unit/weave/copilot-completion.spec.ts +182 -0
  1387. package/tests/unit/weave/d1-executor.spec.ts +269 -0
  1388. package/tests/unit/weave/d2-executor.spec.ts +334 -0
  1389. package/tests/unit/weave/fanout-generator.spec.ts +365 -0
  1390. package/tests/unit/weave/fanout-matcher.spec.ts +320 -0
  1391. package/tests/unit/weave/fanout-schema.spec.ts +221 -0
  1392. package/tests/unit/weave/mergeWeaveSequential.spec.ts +268 -0
  1393. package/tests/unit/weave/metrics-calculator.spec.ts +212 -0
  1394. package/tests/unit/weave/metrics-logger.spec.ts +233 -0
  1395. package/tests/unit/weave/metrics-schema.spec.ts +383 -0
  1396. package/tests/unit/weave/multi-repo-plan.spec.ts +221 -0
  1397. package/tests/unit/weave/planner.spec.ts +227 -0
  1398. package/tests/unit/weave/post-merge-checks.spec.ts +342 -0
  1399. package/tests/unit/weave/recovery.spec.ts +306 -0
  1400. package/tests/unit/weave/testfix/applier.spec.ts +364 -0
  1401. package/tests/unit/weave/testfix/e2e.spec.ts +273 -0
  1402. package/tests/unit/weave/testfix/integration.spec.ts +128 -0
  1403. package/tests/unit/weave/testfix/matcher.spec.ts +321 -0
  1404. package/tests/unit/weave/testfix/schema.spec.ts +298 -0
  1405. package/tests/utils/fingerprint.spec.ts +251 -0
  1406. package/tests/utils/paths.spec.ts +284 -0
  1407. package/tests/utils/tokens.spec.ts +210 -0
  1408. package/tests/utils/validation.spec.ts +215 -0
  1409. package/tests/utils-validation.spec.ts +80 -0
  1410. package/tests/validate-manifests.spec.ts +231 -0
  1411. package/tests/validation.spec.ts +501 -0
  1412. package/tests/vuln-gate.spec.ts +341 -0
  1413. package/tests/weave/adr007-integration.spec.ts +309 -0
  1414. package/tests/weave/checkpoint/cli-integration.spec.ts +118 -0
  1415. package/tests/weave/checkpoint/storage.spec.ts +302 -0
  1416. package/tests/weave/checkpoint/utils.spec.ts +223 -0
  1417. package/tests/weave/frameHelper.spec.ts +423 -0
  1418. package/tests/weave/gateFailureHandler.spec.ts +249 -0
  1419. package/tests/weave/lockFile.spec.ts +387 -0
  1420. package/tests/weave/mergeHelpers.spec.ts +173 -0
  1421. package/tests/weave/receiptHelper.spec.ts +261 -0
  1422. package/tests/weave/stateMachine.spec.ts +436 -0
  1423. package/tests/weave-contract.test.ts +517 -0
  1424. package/tests/weave-e2e.spec.ts +279 -0
  1425. package/tests/weaveLock.spec.ts +136 -0
  1426. package/tests/workflow-state-machine.spec.ts +274 -0
  1427. package/tests/write-protection.spec.ts +213 -0
  1428. package/tsconfig.json +18 -0
  1429. package/tsup.config.ts +12 -0
  1430. package/vitest.benchmark.config.ts +17 -0
  1431. package/vitest.config.ts +28 -0
  1432. package/vitest.git.config.ts +12 -0
  1433. package/vitest.slow-cli.config.ts +28 -0
package/src/cli.ts ADDED
@@ -0,0 +1,1231 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import { Command, CommanderError } from "commander";
4
+ import { pathToFileURL, fileURLToPath } from "node:url";
5
+ import { resolve } from "node:path";
6
+ import chalk from "chalk";
7
+ import { Plan, loadPlan, SchemaValidationError } from "./schema.js";
8
+ import { computeMergeOrder, CycleError, UnknownDependencyError } from "./mergeOrder.js";
9
+ import { executeGatesWithPolicy } from "./gates.js";
10
+ import { ExecutionState } from "./executionState.js";
11
+ import { MergeEligibilityEvaluator } from "./mergeEligibility.js";
12
+ import { loadInputs } from "./core/inputs.js";
13
+ import { generatePlan } from "./core/plan.js";
14
+ import { generateSnapshot } from "./core/snapshot.js";
15
+ import { canonicalJSONStringify } from "./util/canonicalJson.js";
16
+ import { createGitHubAPI, GitHubAPI, GitHubAPIError } from "./github/api.js";
17
+ import { createGitOperations, GitOperationError } from "./git/operations.js";
18
+ import {
19
+ bootstrapWorkspace,
20
+ createMinimalWorkspace,
21
+ detectProjectType,
22
+ getEnvironmentSuggestions,
23
+ } from "./core/bootstrap.js";
24
+ import { initLocalOverlay, hasLocalOverlay } from "./config/localOverlay.js";
25
+ import {
26
+ WriteProtectionError,
27
+ resolveProfile,
28
+ validateWriteOperation,
29
+ } from "./config/profileResolver.js";
30
+ import {
31
+ parseAutopilotConfig,
32
+ AutopilotConfigError,
33
+ getAutopilotLevelDescription,
34
+ AutopilotLevel,
35
+ } from "./autopilot/index.js";
36
+ import { createLogger, Logger, generateCorrelationId, healthChecker } from "./monitoring/index.js";
37
+ import { runInit } from "./commands/init.js";
38
+ import { registerStatusCommand } from "./commands/status.js";
39
+ import { registerReportCommand } from "./commands/report.js";
40
+ import { registerRetryCommand } from "./commands/retry.js";
41
+ import { registerGateReportCommand } from "./commands/gateReport.js";
42
+ import { registerGateAttestCommand } from "./commands/gateAttest.js";
43
+ import { registerGateImportCommand } from "./commands/gateImport.js";
44
+ import { registerGateImportChecksCommand } from "./commands/gateImportChecks.js";
45
+ import { registerGateTestCommand } from "./cli/commands/gate/test.js";
46
+ import { registerGovernanceReportCommand } from "./commands/governanceReport.js";
47
+ import { registerGovernanceCleanupCommand } from "./commands/governanceCleanup.js";
48
+ import { registerSecurityCommands } from "./cli-security.js";
49
+ import { registerAuditCommands } from "./cli-audit.js";
50
+ import { registerCompletionCommand } from "./commands/completion.js";
51
+ import { registerMergeOrderCommand } from "./commands/mergeOrder.js";
52
+ import { registerMergeCommand } from "./commands/merge.js";
53
+ import { registerPreviewConstraintsCommand } from "./commands/preview-constraints.js";
54
+ import { registerQueryCommand } from "./commands/query.js";
55
+ import { registerPlanDiffCommand } from "./commands/planDiff.js";
56
+ import { registerPlanCommand } from "./commands/plan.js";
57
+ import { registerSchemaCommand } from "./commands/schema.js";
58
+ import { registerAutopilotCommand } from "./commands/autopilot.js";
59
+ import { registerExecuteCommand } from "./commands/execute.js";
60
+ import { registerDiscoverCommand } from "./commands/discover.js";
61
+ import { registerPlanReviewCommand } from "./commands/planReview.js";
62
+ import { registerPlanBatchCommand } from "./commands/orchestrate/plan-batch.js";
63
+ import { registerPinToolchainCommand } from "./commands/orchestrate/pinToolchain.js";
64
+ import { registerPredictConflictsCommand } from "./commands/orchestrate/predict-conflicts.js";
65
+ import { registerGenerateDeliverablesCommand } from "./commands/orchestrate/generate-deliverables.js";
66
+ import { registerAssignBatchCommand } from "./commands/orchestrate/assign-batch.js";
67
+ import { registerAnalyzeIssuesCommand } from "./commands/orchestrate/analyze-issues.js";
68
+ import { registerHarvestCommand } from "./commands/fanout-harvest.js";
69
+ import { registerAnalyzeCommand } from "./commands/fanout-analyze.js";
70
+ import { registerMonitorCommand } from "./commands/fanout-monitor.js";
71
+ import { registerDoctorCommand } from "./commands/doctor.js";
72
+ import { registerConfigCommand } from "./commands/config.js";
73
+ import { registerConfigValidateCommand } from "./commands/config/validate.js";
74
+ import { registerIdeaCommand } from "./commands/idea.js";
75
+ import { registerCreateProjectCommand } from "./commands/create-project.js";
76
+ import { registerSeniorDevCommand } from "./commands/seniorDev.js";
77
+ import { registerIssuesCommand } from "./commands/issues.js";
78
+ import { registerBudgetCommand } from "./commands/budget.js";
79
+ import { registerMetricsCommand } from "./commands/metrics.js";
80
+ import { registerTokenReportCommand } from "./commands/tokenReport.js";
81
+ import { registerCounterExamplesCommand } from "./commands/counterExamples.js";
82
+ import { runMigrateProfile } from "./commands/migrateProfile.js";
83
+ import { ProgressReporter } from "./util/progress.js";
84
+ import { initColorControl, isColorDisabled } from "./util/colorControl.js";
85
+ import { parseGlobalFlags, validateFlagCombinations } from "./cli/flags.js";
86
+ import { writeJsonOutput } from "./cli/output.js";
87
+ import { registerWeaveCommand } from "./commands/weave.js";
88
+ import { registerExplainCommand } from "./commands/explain.js";
89
+ import { setFrameEmissionEnabled } from "./frames/controller.js";
90
+ import {
91
+ CLIExitSignal,
92
+ throwExit,
93
+ installSignalHandlers,
94
+ installUnhandledRejectionHandler,
95
+ } from "./cli/exitHandler.js";
96
+ import { getStatusIcon, formatStatusTable, formatQueryResult } from "./cli/formatters.js";
97
+ import {
98
+ initAuditEmitter,
99
+ emitEvent,
100
+ finalizeAudit,
101
+ AuditEmitter,
102
+ AuditOptions,
103
+ EVENT_TYPES,
104
+ } from "./audit/index.js";
105
+ import { AUDIT_SCHEMA_VERSION } from "./audit/schema/events.js";
106
+ import { sha256 } from "./util/hash.js";
107
+ import { validatePlan as validatePlanDeps, formatValidationResult } from "./planner/validation.js";
108
+ import * as fs from "fs";
109
+ import * as path from "path";
110
+
111
+ let jsonModeActive = false;
112
+
113
+ // Guarded finalize: ensure HIPAA-prefixed errors rethrow (to map to exit 2),
114
+ // while non-HIPAA finalize errors are logged and ignored.
115
+ async function finalizeAuditGuard(emitter: AuditEmitter, status?: string): Promise<void> {
116
+ try {
117
+ await finalizeAudit(emitter, status);
118
+ } catch (e) {
119
+ if (e instanceof Error && typeof e.message === "string" && e.message.startsWith("HIPAA:")) {
120
+ throw e; // let top-level handler map to exit code 2
121
+ }
122
+ console.warn("[lex-pr] audit: finalize failed (ignored)", String(e));
123
+ }
124
+ }
125
+
126
+ /**
127
+ * CLI exit discipline with proper error codes
128
+ */
129
+ function exitWith(e: unknown, schemaCode = "ESCHEMA") {
130
+ // Let CLIExitSignal propagate - don't treat it as an error
131
+ if (e instanceof CLIExitSignal) {
132
+ throw e;
133
+ }
134
+
135
+ const err: any = e;
136
+ if (err?.code === schemaCode && Array.isArray(err.issues)) {
137
+ console.log(JSON.stringify({ errors: err.issues }, null, 2));
138
+ if (!jsonModeActive) {
139
+ console.error(err.message);
140
+ }
141
+ process.exitCode = 2;
142
+ throwExit(2);
143
+ }
144
+ if (
145
+ e instanceof SchemaValidationError ||
146
+ e instanceof CycleError ||
147
+ e instanceof UnknownDependencyError ||
148
+ e instanceof WriteProtectionError ||
149
+ e instanceof AutopilotConfigError
150
+ ) {
151
+ const prefix = jsonModeActive ? "[lex-pr]" : "❌";
152
+ console.error(`\n${prefix} Error: ${String(err?.message ?? e)}\n`);
153
+
154
+ // Add helpful suggestions based on error type (suppress in JSON mode)
155
+ if (!jsonModeActive) {
156
+ if (e instanceof WriteProtectionError) {
157
+ console.error("💡 Tip: Use a local profile directory for development:");
158
+ console.error(" lex-pr init --profile-dir .smartergpt.local\n");
159
+ } else if (e instanceof CycleError) {
160
+ console.error("💡 Tip: Check your dependency declarations in PR descriptions");
161
+ console.error(" Look for circular dependencies like: A→B→C→A\n");
162
+ } else if (e instanceof UnknownDependencyError) {
163
+ console.error("💡 Tip: Ensure all referenced PRs exist and are included in your plan");
164
+ console.error(" Run 'lex-pr discover' to find available PRs\n");
165
+ } else if (e instanceof SchemaValidationError) {
166
+ console.error("💡 Tip: Validate your configuration files:");
167
+ console.error(" lex-pr schema validate plan.json\n");
168
+ }
169
+ }
170
+
171
+ process.exitCode = 2;
172
+ throwExit(2); // Validation errors
173
+ }
174
+ // HIPAA fail-closed errors are surfaced as Error messages prefixed with 'HIPAA:'
175
+ if (e instanceof Error && typeof e.message === "string" && e.message.startsWith("HIPAA:")) {
176
+ const prefix = jsonModeActive ? "[lex-pr]" : "❌";
177
+ console.error(`\n${prefix} ${e.message.replace(/^HIPAA:\s*/, "")}\n`);
178
+ process.exitCode = 2;
179
+ throwExit(2);
180
+ }
181
+ const prefix = jsonModeActive ? "[lex-pr]" : "❌";
182
+ console.error(`\n${prefix} Unexpected error: ${String(err?.message ?? e)}\n`);
183
+ if (!jsonModeActive) {
184
+ console.error("💡 Tip: Run 'lex-pr doctor' to check your environment\n");
185
+ }
186
+ throwExit(1); // Unexpected failures
187
+ }
188
+
189
+ // Global logger instance
190
+ let logger: Logger;
191
+
192
+ const program = new Command();
193
+
194
+ // Intercept all Commander exits centrally - no brittle message filtering needed
195
+ program.exitOverride((err: CommanderError) => {
196
+ // Help/version often exit with code 0; normalize through CLIExitSignal
197
+ throw new CLIExitSignal(err.exitCode ?? 1, err.message);
198
+ });
199
+
200
+ // Configure output streams explicitly for JSON purity
201
+ program.configureOutput({
202
+ writeOut: (str) => process.stdout.write(str),
203
+ writeErr: (str) => process.stderr.write(str),
204
+ });
205
+
206
+ program
207
+ .name("lex-pr")
208
+ .description(
209
+ "Lex-PR Runner - Fan-out PRs, compute merge pyramid, run gates, and weave merges cleanly"
210
+ )
211
+ .version(`LexRunner 0.5.0 (lex-pr)`)
212
+ .option("--no-color", "Disable ANSI color codes in output")
213
+ .option("--audit-profile <profile>", "Audit logging profile: off|basic|soc2|hipaa-strict", "off")
214
+ .option("--audit-key <hex>", "Audit encryption key (64 hex chars) - overrides LEX_AUDIT_KEY_HEX")
215
+ .option("--json", "Enable JSON output mode (implies --no-color)")
216
+ .option(
217
+ "--log-format <format>",
218
+ "Log output format: 'json' or 'human'",
219
+ process.env.LOG_FORMAT || "human"
220
+ )
221
+ .option("--token-budget <number>", "Maximum token budget for operations (default: 5000)", "5000")
222
+ .option("--max-prompts <number>", "Maximum number of prompts allowed (default: 3)", "3")
223
+ .option(
224
+ "--emit-frames",
225
+ "Emit Frames to Lex memory during fanout/merge-weave operations (default: true, env: LEX_PR_EMIT_FRAMES)"
226
+ )
227
+ .option("--no-emit-frames", "Disable Frame emission")
228
+ .hook("preAction", (thisCommand) => {
229
+ // Initialize color control based on global flags
230
+ const opts = thisCommand.optsWithGlobals();
231
+ const jsonMode = opts.json || false;
232
+ const noColor = opts.noColor || false;
233
+
234
+ // Set global JSON mode
235
+ jsonModeActive = jsonMode;
236
+
237
+ // Initialize color control (--json implies --no-color)
238
+ initColorControl({ noColor, jsonMode });
239
+
240
+ // Parse global flags and set frame emission enabled state
241
+ const globalFlags = parseGlobalFlags(opts);
242
+ if (globalFlags.emitFrames !== undefined) {
243
+ setFrameEmissionEnabled(globalFlags.emitFrames);
244
+ }
245
+ })
246
+ .addHelpText(
247
+ "after",
248
+ `
249
+ Examples (Canonical Category-Action Pattern):
250
+ $ lex-pr workspace init Initialize workspace with interactive setup
251
+ $ lex-pr workspace doctor Validate environment and configuration
252
+ $ lex-pr idea Capture feature idea interactively
253
+ $ lex-pr idea --title "..." --description "..." --dry-run
254
+ $ lex-pr config show Display configuration with precedence chain
255
+ $ lex-pr config show --key scope.target Show specific configuration value
256
+ $ lex-pr config show --json Output configuration in JSON format
257
+ $ lex-pr config:inspect Display merged configuration with provenance map
258
+ $ lex-pr weave discover Find open PRs matching scope
259
+ $ lex-pr weave discover --suggest Generate dependency suggestions with heuristics
260
+ $ lex-pr weave plan --from-github Generate merge plan from GitHub PRs
261
+ $ lex-pr plan-review plan.json Interactively review and edit plan
262
+ $ lex-pr plan-diff plan1.json plan2.json Compare two plans
263
+ $ lex-pr gate run plan.json Run quality gates on plan
264
+ $ lex-pr orchestrate:analyze-issues Analyze issues for parallel work planning (fanout commands coming soon)
265
+ $ lex-pr orchestrate:analyze-issues --labels priority:P1 --json
266
+ $ lex-pr security check-rotation Check token rotation status
267
+ $ lex-pr security scan-plan Scan a plan file for secrets
268
+ $ lex-pr security validate-secrets GITHUB_TOKEN OTHER_SECRET
269
+
270
+ Governance (LexSona Shadow Mode):
271
+ $ lex-pr governance:report Analyze shadow governance logs
272
+ $ lex-pr governance:report --format markdown --disagreements-only
273
+ $ lex-pr governance:report --since 2025-12-01 --persona quality-first_engineering
274
+ $ lex-pr governance:cleanup Clean up old governance logs
275
+
276
+ Power User Commands:
277
+ $ lex-pr view plan.json Interactive plan viewer
278
+ $ lex-pr query plan.json --stats Plan statistics and analysis
279
+ $ lex-pr query plan.json "level eq 1" Query items by criteria
280
+ $ lex-pr retry --filter failed Retry failed gates
281
+ $ lex-pr completion bash Generate bash completion script
282
+
283
+ Canonical Workflow:
284
+ 1. Ideate: lex-pr idea (capture feature ideas as GitHub Issues)
285
+ 2. Discover: lex-pr weave discover (optionally add --suggest for dependencies)
286
+ 3. Plan: lex-pr weave plan --from-github --json > plan.json
287
+ 4. Review: lex-pr plan-review plan.json
288
+ 5. Execute: lex-pr gate run plan.json
289
+ 6. Report: lex-pr weave report artifacts --out md
290
+
291
+ Legacy Commands (Deprecated, use canonical forms above):
292
+ $ lex-pr init → lex-pr workspace init
293
+ $ lex-pr doctor → lex-pr workspace doctor
294
+ $ lex-pr discover → lex-pr weave discover
295
+ $ lex-pr plan → lex-pr weave plan
296
+ $ lex-pr status → lex-pr weave status
297
+ $ lex-pr report → lex-pr weave report
298
+ $ lex-pr execute → lex-pr gate run
299
+ $ lex-pr orchestrate:analyze-issues → lex-pr fanout analyze
300
+ $ lex-pr orchestrate:assign-batch → lex-pr fanout assign
301
+ `
302
+ );
303
+
304
+ // Gate report validation command - modular implementation
305
+ registerGateReportCommand(program);
306
+
307
+ // Governance report command (QOL-004) - modular implementation
308
+ registerGovernanceReportCommand(program);
309
+
310
+ // Governance cleanup command (QOL-002) - modular implementation
311
+ registerGovernanceCleanupCommand(program);
312
+
313
+ // Config inspect command
314
+ program
315
+ .command("config:inspect")
316
+ .description("Display merged configuration with provenance map")
317
+ .option("--json", "Output canonical JSON format")
318
+ .action((opts) => {
319
+ try {
320
+ // Load configuration with provenance tracking
321
+ const config = loadInputs();
322
+
323
+ // Check both command-level and global JSON mode
324
+ if (opts.json || jsonModeActive) {
325
+ // Output deterministic JSON with sorted keys
326
+ const output = {
327
+ config: {
328
+ items: config.items,
329
+ target: config.target,
330
+ version: config.version,
331
+ },
332
+ provenance: config.provenance || {},
333
+ sources: config.sources.map((s) => ({
334
+ exists: s.exists,
335
+ file: s.file,
336
+ })),
337
+ };
338
+ writeJsonOutput(output);
339
+ } else {
340
+ // Human-readable output
341
+ console.log(chalk.bold("\n📋 Configuration Inspection\n"));
342
+
343
+ console.log(chalk.cyan("Configuration:"));
344
+ console.log(` Version: ${config.version}`);
345
+ console.log(` Target: ${config.target}`);
346
+ console.log(` Items: ${config.items.length}\n`);
347
+
348
+ if (config.provenance) {
349
+ console.log(chalk.cyan("Provenance Map:"));
350
+ const sortedKeys = Object.keys(config.provenance).sort();
351
+ for (const key of sortedKeys) {
352
+ console.log(` ${key}: ${chalk.green(config.provenance[key])}`);
353
+ }
354
+ console.log("");
355
+ }
356
+
357
+ console.log(chalk.cyan("Configuration Sources:"));
358
+ for (const source of config.sources) {
359
+ const status = source.exists ? chalk.green("✓") : chalk.gray("✗");
360
+ console.log(` ${status} ${source.file}`);
361
+ }
362
+ console.log("");
363
+ }
364
+
365
+ process.exit(0);
366
+ } catch (error) {
367
+ exitWith(error);
368
+ } finally {
369
+ // no audit finalization here
370
+ }
371
+ });
372
+
373
+ // Plan review command - Interactive plan validation and editing
374
+ registerPlanReviewCommand(program, {
375
+ exitWith,
376
+ getProgramOpts: () => program.opts(),
377
+ });
378
+
379
+ // Plan diff command - modular implementation
380
+ registerPlanDiffCommand(program, {
381
+ jsonModeActive: () => jsonModeActive,
382
+ exitWith,
383
+ });
384
+
385
+ // Autopilot command - modular implementation
386
+ registerAutopilotCommand(program, {
387
+ jsonModeActive: () => jsonModeActive,
388
+ exitWith,
389
+ getAuditProfile: () => program.opts().auditProfile as string | undefined,
390
+ getAuditKey: () => program.opts().auditKey as string | undefined,
391
+ finalizeAuditGuard,
392
+ });
393
+
394
+ // Schema command - modularized in Phase 3.3
395
+ registerSchemaCommand(program, {
396
+ jsonModeActive: () => jsonModeActive,
397
+ });
398
+
399
+ // ============================================================================
400
+ // Category-Action Pattern Commands (ALN-003 Phase 2)
401
+ // ============================================================================
402
+
403
+ // Weave command group - Unified merge-weave workflow interface
404
+ // This is the primary interface for merge-weave operations
405
+ registerWeaveCommand(program, {
406
+ jsonModeActive: () => jsonModeActive,
407
+ getProgramOpts: () => program.opts(),
408
+ });
409
+
410
+ // Explain command - LR-TSF-001: Query constraint attributions
411
+ registerExplainCommand(program);
412
+
413
+ // Workspace category - Local workspace management
414
+ const workspaceCmd = program
415
+ .command("workspace")
416
+ .description("Workspace and profile configuration");
417
+
418
+ // workspace init - Already registered as top-level, need to create wrapper
419
+ workspaceCmd
420
+ .command("init")
421
+ .description("Initialize lexrunner workspace with interactive setup wizard")
422
+ .option("--force", "Overwrite existing configuration files")
423
+ .option("--non-interactive", "Run without prompts (use environment variables)")
424
+ .option("--github-token <token>", "GitHub token for authentication")
425
+ .option("--profile-dir <dir>", "Profile directory (default: .smartergpt.local)")
426
+ .option("--json", "Output JSON format")
427
+ .option("--enterprise", "Enable enterprise setup with audit and compliance features")
428
+ .option(
429
+ "--enterprise-audit-profile <profile>",
430
+ "Audit profile for enterprise setup: off|basic|soc2|hipaa-strict",
431
+ "soc2"
432
+ )
433
+ .option(
434
+ "--policy-template <template>",
435
+ "Policy template for enterprise setup: basic|enterprise-standard|strict",
436
+ "enterprise-standard"
437
+ )
438
+ .action(async (opts) => {
439
+ // Delegate to the init command handler (imported from runInit)
440
+ const isJsonMode = opts.json || jsonModeActive;
441
+
442
+ try {
443
+ const result = await runInit({
444
+ force: opts.force,
445
+ nonInteractive: opts.nonInteractive,
446
+ githubToken: opts.githubToken,
447
+ profileDir: opts.profileDir,
448
+ jsonMode: isJsonMode,
449
+ enterprise: opts.enterprise,
450
+ auditProfile: opts.enterpriseAuditProfile,
451
+ policyTemplate: opts.policyTemplate,
452
+ });
453
+
454
+ if (isJsonMode) {
455
+ const { writeSuccessEnvelope, writeErrorEnvelope } = await import("./cli/jsonEnvelope.js");
456
+ if (result.success) {
457
+ writeSuccessEnvelope("lex-pr workspace init", {
458
+ profileDir: result.profileDir,
459
+ message: result.message,
460
+ });
461
+ return;
462
+ } else {
463
+ writeErrorEnvelope("lex-pr workspace init", {
464
+ code: "EINIT",
465
+ message: result.message,
466
+ details: { profileDir: result.profileDir },
467
+ });
468
+ throwExit(1);
469
+ }
470
+ }
471
+
472
+ if (!result.success) {
473
+ console.error(`\n❌ ${result.message}\n`);
474
+ throwExit(1);
475
+ }
476
+
477
+ return;
478
+ } catch (error) {
479
+ if (error instanceof CLIExitSignal) {
480
+ throw error;
481
+ }
482
+
483
+ if (isJsonMode) {
484
+ const { writeErrorEnvelope, errorToJsonError } = await import("./cli/jsonEnvelope.js");
485
+ if (error instanceof WriteProtectionError) {
486
+ writeErrorEnvelope("lex-pr workspace init", {
487
+ code: "EWRITE_PROTECTED",
488
+ message: error.message,
489
+ });
490
+ throwExit(2);
491
+ }
492
+ writeErrorEnvelope("lex-pr workspace init", errorToJsonError(error, "EINIT_FAILED"));
493
+ throwExit(1);
494
+ }
495
+
496
+ if (error instanceof WriteProtectionError) {
497
+ console.error(`\n❌ ${error.message}\n`);
498
+ throwExit(2);
499
+ }
500
+ console.error(
501
+ `\n❌ Initialization failed: ${error instanceof Error ? error.message : String(error)}\n`
502
+ );
503
+ throwExit(1);
504
+ }
505
+ });
506
+
507
+ // workspace doctor - Environment validation
508
+ registerDoctorCommand(workspaceCmd, () => jsonModeActive);
509
+
510
+ // Fanout category - Issue discovery, analysis, and planning
511
+ const fanoutCmd = program.command("fanout").description("Issue discovery, analysis, and planning");
512
+
513
+ // Register D0 (harvest) and D1 (analyze) commands
514
+ registerHarvestCommand(fanoutCmd);
515
+ registerAnalyzeCommand(fanoutCmd);
516
+ registerMonitorCommand(fanoutCmd);
517
+
518
+ // Gate category - Quality gate execution
519
+ const gateCmd = program.command("gate").description("Quality gate execution");
520
+
521
+ registerExecuteCommand(gateCmd, {
522
+ jsonModeActive: () => jsonModeActive,
523
+ exitWith,
524
+ getProgramOpts: () => program.opts(),
525
+ });
526
+ registerGateTestCommand(gateCmd);
527
+ registerGateAttestCommand(gateCmd);
528
+ registerGateImportCommand(gateCmd);
529
+ registerGateImportChecksCommand(gateCmd);
530
+
531
+ // ============================================================================
532
+ // Legacy Commands (Deprecated - ALN-003 Phase 2)
533
+ // ============================================================================
534
+ // These commands are maintained for backward compatibility but show
535
+ // deprecation warnings directing users to the canonical category-action forms.
536
+ // The deprecation warnings are built into the command implementations themselves
537
+ // by checking if program.name() === "lex-pr" (top-level) vs a category name.
538
+
539
+ // Note: We DON'T re-register weave subcommands (discover, plan, status, report, merge-order)
540
+ // as top-level commands because that would create duplicate command errors.
541
+ // Instead, users can still use the old top-level commands if we register them separately.
542
+ // However, since the register functions check the parent program name, we just register them
543
+ // once and the commands themselves will show the deprecation warning.
544
+
545
+ // Legacy commands that need explicit registration (not part of weave):
546
+ // - execute -> gate run (already registered above on gateCmd)
547
+ // - doctor -> workspace doctor (already registered above on workspaceCmd)
548
+
549
+ // But we DO need top-level discover, plan, status, report, merge-order for backward compat
550
+ // Let's register them separately with deprecation built-in:
551
+
552
+ registerDiscoverCommand(program, { jsonModeActive: () => jsonModeActive });
553
+ registerPlanCommand(program, {
554
+ jsonModeActive: () => jsonModeActive,
555
+ setJsonMode: (active: boolean) => {
556
+ jsonModeActive = active;
557
+ },
558
+ exitWith,
559
+ });
560
+ registerStatusCommand(program, () => jsonModeActive);
561
+ registerReportCommand(program, { jsonModeActive: () => jsonModeActive });
562
+ registerMergeOrderCommand(program, () => jsonModeActive, exitWith);
563
+ registerExecuteCommand(program, {
564
+ jsonModeActive: () => jsonModeActive,
565
+ exitWith,
566
+ getProgramOpts: () => program.opts(),
567
+ });
568
+ registerDoctorCommand(program, () => jsonModeActive);
569
+
570
+ // ============================================================================
571
+ // Other Commands (Not Part of Category-Action Pattern)
572
+ // ============================================================================
573
+
574
+ // Merge command - Execute merge pyramid with git operations
575
+ registerMergeCommand(
576
+ program,
577
+ () => jsonModeActive,
578
+ () => program.opts()
579
+ );
580
+
581
+ // Preview Constraints command - Preview constraints for a plan
582
+ registerPreviewConstraintsCommand(program, { jsonModeActive: () => jsonModeActive });
583
+
584
+ // Config command - configuration inspection and debugging
585
+ registerConfigCommand(program, { jsonModeActive: () => jsonModeActive });
586
+
587
+ // Config validate command - configuration validation
588
+ registerConfigValidateCommand(program, () => jsonModeActive);
589
+
590
+ // Idea command - feature idea capture
591
+ registerIdeaCommand(program);
592
+
593
+ // Issues command - Check status of GitHub issues
594
+ registerIssuesCommand(program);
595
+
596
+ // Senior Dev executor commands
597
+ registerSeniorDevCommand(program, () => jsonModeActive);
598
+
599
+ // Budget command - governance budget management
600
+ registerBudgetCommand(program, () => jsonModeActive);
601
+
602
+ // Init command - Interactive workspace setup
603
+ program
604
+ .command("init")
605
+ .description("Initialize lexrunner workspace with interactive setup wizard")
606
+ .option("--force", "Overwrite existing configuration files")
607
+ .option("--non-interactive", "Run without prompts (use environment variables)")
608
+ .option("--github-token <token>", "GitHub token for authentication")
609
+ .option("--profile-dir <dir>", "Profile directory (default: .smartergpt.local)")
610
+ .option("--json", "Output JSON format")
611
+ .action(async (opts) => {
612
+ // Check both command-level and global JSON mode
613
+ const isJsonMode = opts.json || jsonModeActive;
614
+
615
+ try {
616
+ const result = await runInit({
617
+ force: opts.force,
618
+ nonInteractive: opts.nonInteractive,
619
+ githubToken: opts.githubToken,
620
+ profileDir: opts.profileDir,
621
+ jsonMode: isJsonMode,
622
+ });
623
+
624
+ if (isJsonMode) {
625
+ const { writeSuccessEnvelope, writeErrorEnvelope, errorToJsonError } =
626
+ await import("./cli/jsonEnvelope.js");
627
+ if (result.success) {
628
+ writeSuccessEnvelope("lex-pr init", {
629
+ profileDir: result.profileDir,
630
+ message: result.message,
631
+ });
632
+ return;
633
+ } else {
634
+ writeErrorEnvelope("lex-pr init", {
635
+ code: "EINIT",
636
+ message: result.message,
637
+ details: { profileDir: result.profileDir },
638
+ });
639
+ throwExit(1);
640
+ }
641
+ }
642
+
643
+ if (!result.success) {
644
+ console.error(`\n❌ ${result.message}\n`);
645
+ throwExit(1);
646
+ }
647
+
648
+ return;
649
+ } catch (error) {
650
+ // Skip CLIExitSignal in JSON mode to avoid duplicate output
651
+ if (error instanceof CLIExitSignal) {
652
+ throw error;
653
+ }
654
+
655
+ if (isJsonMode) {
656
+ const { writeErrorEnvelope, errorToJsonError } = await import("./cli/jsonEnvelope.js");
657
+ if (error instanceof WriteProtectionError) {
658
+ writeErrorEnvelope("lex-pr init", {
659
+ code: "EWRITE_PROTECTED",
660
+ message: error.message,
661
+ });
662
+ throwExit(2);
663
+ }
664
+ writeErrorEnvelope("lex-pr init", errorToJsonError(error, "EINIT_FAILED"));
665
+ throwExit(1);
666
+ }
667
+
668
+ if (error instanceof WriteProtectionError) {
669
+ console.error(`\n❌ ${error.message}\n`);
670
+ throwExit(2);
671
+ }
672
+ console.error(
673
+ `\n❌ Initialization failed: ${error instanceof Error ? error.message : String(error)}\n`
674
+ );
675
+ throwExit(1);
676
+ }
677
+ });
678
+
679
+ // Bootstrap command
680
+ program
681
+ .command("bootstrap")
682
+ .description("Create minimal workspace configuration")
683
+ .option("--force", "Overwrite existing configuration files")
684
+ .option("--json", "Output JSON format")
685
+ .action(async (opts) => {
686
+ try {
687
+ const bootstrap = bootstrapWorkspace();
688
+ const projectType = detectProjectType();
689
+
690
+ if (opts.json) {
691
+ if (bootstrap.hasConfiguration && !opts.force) {
692
+ console.log(
693
+ canonicalJSONStringify({
694
+ status: "exists",
695
+ message: "Configuration already exists",
696
+ bootstrap,
697
+ projectType,
698
+ })
699
+ );
700
+ } else {
701
+ createMinimalWorkspace();
702
+ console.log(
703
+ canonicalJSONStringify({
704
+ status: "created",
705
+ message: "Minimal configuration created",
706
+ projectType,
707
+ filesCreated: bootstrap.missingFiles,
708
+ })
709
+ );
710
+ }
711
+ } else {
712
+ console.log("🚀 Bootstrapping workspace configuration");
713
+ console.log(`📁 Project type detected: ${projectType}`);
714
+ console.log("");
715
+
716
+ if (bootstrap.hasConfiguration && !opts.force) {
717
+ console.log("✓ Configuration already exists");
718
+ console.log(` ${bootstrap.profileDir}/`);
719
+ console.log("");
720
+ console.log("Use --force to overwrite existing files");
721
+ } else {
722
+ createMinimalWorkspace();
723
+ console.log("✓ Created minimal configuration:");
724
+ console.log(` ${bootstrap.profileDir}/intent.md`);
725
+ console.log(` ${bootstrap.profileDir}/scope.yml`);
726
+ console.log(` ${bootstrap.profileDir}/deps.yml`);
727
+ console.log(` ${bootstrap.profileDir}/gates.yml`);
728
+ console.log("");
729
+ console.log("Next steps:");
730
+ console.log("1. Edit .smartergpt/intent.md to describe your project goals");
731
+ console.log("2. Update .smartergpt/scope.yml for PR discovery rules");
732
+ console.log("3. Configure .smartergpt/gates.yml for quality gates");
733
+ console.log("4. Run 'lex-pr doctor' to verify configuration");
734
+ }
735
+ }
736
+ } catch (error) {
737
+ if (error instanceof WriteProtectionError) {
738
+ console.error(`Error bootstrapping workspace: ${error.message}`);
739
+ throwExit(2); // Validation/config error
740
+ }
741
+ console.error(
742
+ `Error bootstrapping workspace: ${error instanceof Error ? error.message : String(error)}`
743
+ );
744
+ throwExit(1);
745
+ }
746
+ });
747
+
748
+ program
749
+ .command("init-local")
750
+ .description("Initialize local overlay directory with auto-detected project configuration")
751
+ .option("--force", "Force recreation even if local overlay exists")
752
+ .option("--json", "Output JSON format")
753
+ .action(async (opts) => {
754
+ try {
755
+ const result = initLocalOverlay(process.cwd(), opts.force);
756
+
757
+ if (opts.json || jsonModeActive) {
758
+ console.log(
759
+ canonicalJSONStringify({
760
+ created: result.created,
761
+ path: result.path,
762
+ config: result.config,
763
+ copiedFiles: result.copiedFiles,
764
+ })
765
+ );
766
+ } else {
767
+ if (result.created) {
768
+ console.log("🎉 Local overlay initialized successfully");
769
+ console.log("");
770
+ console.log(`📁 Created: ${result.path}/`);
771
+ console.log(`🔧 Project type: ${result.config.projectType}`);
772
+ console.log(`👤 Role: ${result.config.role}`);
773
+ console.log("");
774
+
775
+ if (result.copiedFiles.length > 0) {
776
+ console.log("📋 Copied files from .smartergpt/:");
777
+ result.copiedFiles.forEach((file) => {
778
+ console.log(` • ${file}`);
779
+ });
780
+ console.log("");
781
+ }
782
+
783
+ console.log("Next steps:");
784
+ console.log("1. Edit .smartergpt.local/ files to customize for local development");
785
+ console.log("2. .smartergpt.local/ is gitignored and won't be committed");
786
+ console.log("3. Run commands normally - local overlay takes precedence");
787
+ } else {
788
+ console.log("ℹ️ Local overlay already exists");
789
+ console.log("");
790
+ console.log(`📁 Location: ${result.path}/`);
791
+ console.log(`🔧 Project type: ${result.config.projectType}`);
792
+ console.log(`👤 Role: ${result.config.role}`);
793
+ console.log("");
794
+ console.log("Use --force to recreate");
795
+ }
796
+ }
797
+ } catch (error) {
798
+ console.error(
799
+ `Error initializing local overlay: ${
800
+ error instanceof Error ? error.message : String(error)
801
+ }`
802
+ );
803
+ throwExit(1);
804
+ }
805
+ });
806
+
807
+ // Migrate profile command
808
+ program
809
+ .command("migrate-profile")
810
+ .description("Migrate profile configuration structure (canonical: lex-pr workspace migrate)")
811
+ .option("--from-flat", "Migrate from flat structure to runner/ subdirectory")
812
+ .option("--dry-run", "Show what would be migrated without making changes")
813
+ .option("--profile-dir <path>", "Profile directory to migrate (default: auto-detect)")
814
+ .action(async (opts) => {
815
+ try {
816
+ const result = await runMigrateProfile({
817
+ fromFlat: opts.fromFlat,
818
+ dryRun: opts.dryRun,
819
+ profileDir: opts.profileDir,
820
+ });
821
+
822
+ if (opts.json || jsonModeActive) {
823
+ console.log(
824
+ canonicalJSONStringify({
825
+ success: result.success,
826
+ message: result.message,
827
+ migratedFiles: result.migratedFiles,
828
+ backupPath: result.backupPath,
829
+ skippedFiles: result.skippedFiles,
830
+ })
831
+ );
832
+ } else {
833
+ if (result.success) {
834
+ if (result.migratedFiles.length > 0) {
835
+ console.log("✅ Migration successful!");
836
+ console.log("");
837
+ console.log(`📦 Migrated ${result.migratedFiles.length} file(s):`);
838
+ result.migratedFiles.forEach((file) => {
839
+ console.log(` ✓ ${file}`);
840
+ });
841
+ if (result.backupPath) {
842
+ console.log("");
843
+ console.log(`💾 Backup created: ${result.backupPath}`);
844
+ }
845
+ if (result.skippedFiles.length > 0) {
846
+ console.log("");
847
+ console.log("ℹ️ Skipped files:");
848
+ result.skippedFiles.forEach((file) => {
849
+ console.log(` • ${file}`);
850
+ });
851
+ }
852
+ } else {
853
+ console.log("ℹ️ " + result.message);
854
+ }
855
+ } else {
856
+ console.log("❌ Migration failed");
857
+ console.log("");
858
+ console.log(result.message);
859
+ }
860
+ }
861
+
862
+ if (!result.success) {
863
+ throwExit(1);
864
+ }
865
+ } catch (error) {
866
+ console.error(
867
+ `Error during migration: ${error instanceof Error ? error.message : String(error)}`
868
+ );
869
+ throwExit(1);
870
+ }
871
+ });
872
+
873
+ // Interactive plan viewer command
874
+ program
875
+ .command("view")
876
+ .description("Interactive plan viewer with navigation and filtering")
877
+ .option("--plan <file>", "Path to plan.json file")
878
+ .argument("[file]", "Path to plan.json file (alternative to --plan)")
879
+ .option("--filter <text>", "Initial filter text")
880
+ .option("--no-deps", "Hide dependencies by default")
881
+ .option("--no-gates", "Hide gates by default")
882
+ .action(async (file: string | undefined, opts) => {
883
+ const planFile = opts.plan || file;
884
+ if (!planFile) {
885
+ console.error("Error: plan file is required (use --plan <file> or provide as argument)");
886
+ throwExit(1);
887
+ }
888
+
889
+ try {
890
+ const { InteractivePlanViewer } = await import("./commands/planViewer.js");
891
+ const planContent = fs.readFileSync(planFile, "utf-8");
892
+ const plan = loadPlan(planContent);
893
+
894
+ const viewer = new InteractivePlanViewer(plan, {
895
+ filter: opts.filter,
896
+ showDeps: opts.deps,
897
+ showGates: opts.gates,
898
+ });
899
+
900
+ await viewer.start();
901
+ return;
902
+ } catch (error) {
903
+ exitWith(error);
904
+ }
905
+ });
906
+
907
+ // Deliverables list command
908
+ program
909
+ .command("deliverables:list")
910
+ .description("List all autopilot deliverables with metadata")
911
+ .option("--profile-dir <dir>", "Profile directory (default: .smartergpt)")
912
+ .option("--json", "Output JSON format")
913
+ .action(async (opts) => {
914
+ try {
915
+ const profile = resolveProfile(opts.profileDir);
916
+ const { DeliverablesManager } = await import("./autopilot/index.js");
917
+ const manager = new DeliverablesManager(profile.path);
918
+ const deliverables = await manager.listDeliverables();
919
+
920
+ if (opts.json) {
921
+ writeJsonOutput(deliverables);
922
+ } else {
923
+ if (deliverables.length === 0) {
924
+ console.log("No deliverables found");
925
+ return;
926
+ }
927
+
928
+ console.log(`\n📦 Deliverables in ${manager.getDeliverablesRoot()}\n`);
929
+
930
+ deliverables.forEach((d, idx) => {
931
+ console.log(`${idx + 1}. ${d.timestamp}`);
932
+ console.log(` Level: ${d.levelExecuted}`);
933
+ console.log(` Plan Hash: ${d.planHash.substring(0, 12)}...`);
934
+ console.log(` Artifacts: ${d.artifacts.length}`);
935
+ console.log(` Environment: ${d.executionContext.environment}`);
936
+ if (d.executionContext.actor) {
937
+ console.log(` Actor: ${d.executionContext.actor}`);
938
+ }
939
+ console.log("");
940
+ });
941
+
942
+ const latest = manager.getLatestPath();
943
+ if (latest) {
944
+ console.log(`📍 Latest: ${path.basename(latest)}`);
945
+ }
946
+ }
947
+ } catch (error) {
948
+ console.error(
949
+ `Error listing deliverables: ${error instanceof Error ? error.message : String(error)}`
950
+ );
951
+ throwExit(1);
952
+ }
953
+ });
954
+
955
+ // Deliverables cleanup command
956
+ program
957
+ .command("deliverables:cleanup")
958
+ .description("Clean up old deliverables based on retention policy")
959
+ .option("--profile-dir <dir>", "Profile directory (default: .smartergpt)")
960
+ .option("--max-age <days>", "Maximum age in days (deletes older deliverables)")
961
+ .option("--max-count <count>", "Maximum number of deliverables to keep")
962
+ .option("--keep-latest", "Always keep the latest deliverables (default: true)", true)
963
+ .option("--dry-run", "Preview cleanup without deleting")
964
+ .option("--json", "Output JSON format")
965
+ .action(async (opts) => {
966
+ try {
967
+ const profile = resolveProfile(opts.profileDir);
968
+ const { DeliverablesManager } = await import("./autopilot/index.js");
969
+ const manager = new DeliverablesManager(profile.path);
970
+
971
+ const policy = {
972
+ maxAge: opts.maxAge ? parseInt(opts.maxAge) : undefined,
973
+ maxCount: opts.maxCount ? parseInt(opts.maxCount) : undefined,
974
+ keepLatest: opts.keepLatest,
975
+ };
976
+
977
+ if (opts.dryRun) {
978
+ // Preview mode - show what would be deleted
979
+ const deliverables = await manager.listDeliverables();
980
+ let toKeep = deliverables;
981
+
982
+ if (policy.maxCount !== undefined && policy.maxCount > 0) {
983
+ toKeep = toKeep.slice(0, policy.maxCount);
984
+ }
985
+
986
+ if (policy.maxAge !== undefined && policy.maxAge > 0) {
987
+ const cutoffDate = new Date();
988
+ cutoffDate.setDate(cutoffDate.getDate() - policy.maxAge);
989
+ toKeep = toKeep.filter((d) => new Date(d.timestamp) > cutoffDate);
990
+ }
991
+
992
+ if (policy.keepLatest && deliverables.length > 0 && !toKeep.includes(deliverables[0])) {
993
+ toKeep = [deliverables[0], ...toKeep];
994
+ }
995
+
996
+ const keepSet = new Set(toKeep.map((d) => d.timestamp));
997
+ const toRemove = deliverables.filter((d) => !keepSet.has(d.timestamp));
998
+
999
+ if (opts.json) {
1000
+ console.log(
1001
+ canonicalJSONStringify({
1002
+ dryRun: true,
1003
+ policy,
1004
+ toKeep: toKeep.length,
1005
+ toRemove: toRemove.length,
1006
+ deliverables: toRemove,
1007
+ })
1008
+ );
1009
+ } else {
1010
+ console.log("\n🔍 Cleanup Preview (dry-run)\n");
1011
+ console.log(
1012
+ `Policy: ${policy.maxAge ? `max-age=${policy.maxAge}d` : ""} ${
1013
+ policy.maxCount ? `max-count=${policy.maxCount}` : ""
1014
+ } keep-latest=${policy.keepLatest}`
1015
+ );
1016
+ console.log("");
1017
+ console.log(`Would keep: ${toKeep.length} deliverables`);
1018
+ console.log(`Would remove: ${toRemove.length} deliverables`);
1019
+
1020
+ if (toRemove.length > 0) {
1021
+ console.log("\nTo be removed:");
1022
+ toRemove.forEach((d) => {
1023
+ const dirName = `weave-${d.timestamp.replace(/[:.]/g, "-").replace("Z", "")}`;
1024
+ console.log(` - ${dirName} (${d.timestamp})`);
1025
+ });
1026
+ }
1027
+
1028
+ console.log("\nRun without --dry-run to apply changes");
1029
+ }
1030
+ } else {
1031
+ // Actual cleanup
1032
+ const result = await manager.cleanup(policy);
1033
+
1034
+ if (opts.json) {
1035
+ writeJsonOutput(result);
1036
+ } else {
1037
+ console.log("\n🧹 Cleanup Complete\n");
1038
+ console.log(`Removed: ${result.removed.length} deliverables`);
1039
+ console.log(`Kept: ${result.kept.length} deliverables`);
1040
+ console.log(`Freed space: ${(result.freedSpace / 1024).toFixed(2)} KB`);
1041
+
1042
+ if (result.removed.length > 0) {
1043
+ console.log("\nRemoved:");
1044
+ result.removed.forEach((path) => {
1045
+ console.log(` - ${path}`);
1046
+ });
1047
+ }
1048
+ }
1049
+ }
1050
+ } catch (error) {
1051
+ console.error(
1052
+ `Error cleaning up deliverables: ${error instanceof Error ? error.message : String(error)}`
1053
+ );
1054
+ throwExit(1);
1055
+ }
1056
+ });
1057
+
1058
+ // Query command - modular implementation
1059
+ registerQueryCommand(program, {
1060
+ exitWith,
1061
+ jsonModeActive: () => jsonModeActive,
1062
+ });
1063
+
1064
+ // Retry command
1065
+ registerRetryCommand(program, () => jsonModeActive, exitWith);
1066
+
1067
+ // Completion command
1068
+ registerCompletionCommand(program, throwExit, exitWith);
1069
+
1070
+ // Counter-examples command
1071
+ registerCounterExamplesCommand(program);
1072
+
1073
+ // Security operations command
1074
+ // Register security subcommands once (modular implementation)
1075
+ registerSecurityCommands(program);
1076
+
1077
+ // ============================================================================
1078
+ // Legacy Orchestration Commands (Deprecated - ALN-003 Phase 2)
1079
+ // ============================================================================
1080
+ // orchestrate:analyze-issues and orchestrate:assign-batch are deprecated
1081
+ // in favor of fanout analyze and fanout assign (registered above).
1082
+ // We still register them here on the main program for backward compatibility
1083
+ // but they show deprecation warnings.
1084
+ registerAnalyzeIssuesCommand(program, () => jsonModeActive);
1085
+ registerAssignBatchCommand(program);
1086
+
1087
+ // Keep other orchestrate commands that don't have category equivalents yet
1088
+ registerPlanBatchCommand(program, () => jsonModeActive);
1089
+ registerPinToolchainCommand(program);
1090
+ registerPredictConflictsCommand(program, () => jsonModeActive);
1091
+ registerGenerateDeliverablesCommand(program);
1092
+
1093
+ // Audit operations command
1094
+ registerAuditCommands(program);
1095
+
1096
+ // Create project command
1097
+ registerCreateProjectCommand(program);
1098
+
1099
+ // Metrics command for governance observability
1100
+ registerMetricsCommand(program, { jsonModeActive: () => jsonModeActive });
1101
+
1102
+ // Token usage tracking and reporting
1103
+ registerTokenReportCommand(program, { jsonModeActive: () => jsonModeActive });
1104
+
1105
+ export async function main(argv: string[] = process.argv): Promise<void> {
1106
+ try {
1107
+ await program.parseAsync(argv);
1108
+ if (process.exitCode === undefined || process.exitCode === null) {
1109
+ process.exitCode = 0;
1110
+ }
1111
+ } catch (error) {
1112
+ if (error instanceof CLIExitSignal) {
1113
+ process.exitCode = error.exitCode;
1114
+ // Don't output error message for successful exits
1115
+ if (error.exitCode !== 0) {
1116
+ // Only output custom messages, not the default "CLI exited with code N"
1117
+ if (error.message && !error.message.startsWith("CLI exited with code")) {
1118
+ process.stderr.write(`${error.message}\n`);
1119
+ }
1120
+ }
1121
+ return;
1122
+ }
1123
+ if (error instanceof CommanderError) {
1124
+ // Already intercepted by exitOverride and converted to CLIExitSignal
1125
+ // This branch should never execute, but handle defensively
1126
+ const exitCode = typeof error.exitCode === "number" ? error.exitCode : 1;
1127
+ process.exitCode = exitCode;
1128
+ if (exitCode !== 0 && error.message) {
1129
+ process.stderr.write(`${error.message}\n`);
1130
+ }
1131
+ return;
1132
+ }
1133
+ const message = error instanceof Error ? error.message : String(error);
1134
+ const prefix = jsonModeActive ? "[lex-pr]" : "❌";
1135
+ process.stderr.write(`${prefix} ${message}\n`);
1136
+ process.exitCode = 1;
1137
+ }
1138
+ }
1139
+
1140
+ // ============================================================================
1141
+ // Entry point detection (ESM/CJS compatible, cross-platform)
1142
+ // ============================================================================
1143
+ // CRITICAL: This must work in both ESM (.js) and CJS (.cjs) builds, and handle
1144
+ // Windows paths, symlinks, and URL encoding correctly.
1145
+ //
1146
+ // - ESM build: import.meta is available and we check import.meta.url
1147
+ // - CJS build: import.meta.url will be undefined/empty (tsup warning is expected)
1148
+ //
1149
+ // Using Node's pathToFileURL and resolve ensures:
1150
+ // 1. Windows paths are normalized correctly (C:\... → file:///C:/...)
1151
+ // 2. Symlinks are resolved consistently
1152
+ // 3. URL encoding is handled (spaces, special chars)
1153
+ //
1154
+ // tsup will emit a warning about import.meta in CJS, but that's acceptable since:
1155
+ // 1. The check prevents execution in CJS context
1156
+ // 2. The warning is cosmetic and doesn't affect runtime behavior
1157
+ // 3. Config-based suppression (tsup.config.ts) silences the noise
1158
+ //
1159
+ // DO NOT REFACTOR to simple string comparison - it breaks on Windows/symlinks.
1160
+ // ============================================================================
1161
+ const isDirectExec = (() => {
1162
+ try {
1163
+ if (typeof import.meta === "undefined") return false;
1164
+ const argHref = process.argv[1] ? pathToFileURL(resolve(process.argv[1])).href : "";
1165
+ return import.meta.url === argHref;
1166
+ } catch {
1167
+ return false;
1168
+ }
1169
+ })();
1170
+
1171
+ if (isDirectExec) {
1172
+ // Install global handlers before running main
1173
+ installSignalHandlers();
1174
+ installUnhandledRejectionHandler();
1175
+
1176
+ void main().catch((error) => {
1177
+ const message = error instanceof Error ? error.message : String(error);
1178
+ process.stderr.write(`[lex-pr] fatal: ${message}\n`);
1179
+ process.exitCode = process.exitCode ?? 1;
1180
+ });
1181
+ }
1182
+
1183
+ // ============================================================================
1184
+ // MCP Server Exports
1185
+ // ============================================================================
1186
+ // These exports are used by mcp-server.mjs for the aligned stdio protocol.
1187
+ // Keep functionality intact - only the protocol layer changes.
1188
+ export {
1189
+ // Core functionality
1190
+ loadInputs,
1191
+ generatePlan,
1192
+ generateSnapshot,
1193
+ loadPlan,
1194
+
1195
+ // Execution
1196
+ executeGatesWithPolicy,
1197
+ ExecutionState,
1198
+ MergeEligibilityEvaluator,
1199
+
1200
+ // Configuration
1201
+ initLocalOverlay,
1202
+ resolveProfile,
1203
+
1204
+ // Utilities
1205
+ canonicalJSONStringify,
1206
+
1207
+ // Monitoring
1208
+ healthChecker,
1209
+ };
1210
+
1211
+ // Run management exports for MCP tools
1212
+ export { createRunManager } from "./runs/index.js";
1213
+
1214
+ // AX-004: MCP/CLI parity exports
1215
+ export { computeMergeOrder } from "./mergeOrder.js";
1216
+ export { createGitHubAPI, GitHubAPI } from "./github/api.js";
1217
+ export { createGitHubClient } from "./github/client.js";
1218
+ export { generatePlanFromGitHub } from "./core/githubPlan.js";
1219
+ export { generateMultiRepoPlan } from "./core/multiRepoPlan.js";
1220
+ export type { RepoTarget, MultiRepoPlanOptions } from "./core/multiRepoPlan.js";
1221
+ export { generateGitHubSnapshot } from "./core/snapshot.js";
1222
+ export { createGitOperations } from "./git/operations.js";
1223
+ export {
1224
+ bootstrapWorkspace,
1225
+ detectProjectType,
1226
+ getEnvironmentSuggestions,
1227
+ } from "./core/bootstrap.js";
1228
+ export { createFileAnalyzer } from "./planner/fileAnalysis.js";
1229
+
1230
+ // LPR-037: Workflow guidance exports for MCP
1231
+ export { createWorkflowGuide } from "./mcp/workflow/state-machine.js";