@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.
- package/.changes/ci-debug-added.txt +1 -0
- package/.changeset/tsconfig-solution-build.md +5 -0
- package/.editorconfig +9 -0
- package/.env.example +8 -0
- package/.github/COST_EFFICIENCY.md +60 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- package/.github/ISSUE_TEMPLATE/epic.yml +123 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +26 -0
- package/.github/ISSUE_TEMPLATE/issue-A1-gate-input-validation.md +380 -0
- package/.github/ISSUE_TEMPLATE/issue-B1-scope-validation.md +509 -0
- package/.github/ISSUE_TEMPLATE/issue-C1-command-whitelist.md +463 -0
- package/.github/ISSUE_TEMPLATE/subtask.yml +153 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
- package/.github/copilot-instructions-old.md +429 -0
- package/.github/copilot-instructions.md +33 -0
- package/.github/instructions/tests.instructions.md +10 -0
- package/.github/workflows/auto-delete-merged-branches.yml +103 -0
- package/.github/workflows/benchmarks.yml +72 -0
- package/.github/workflows/ci-debug.yml +33 -0
- package/.github/workflows/ci.yml +167 -0
- package/.github/workflows/cli-smoke-test.yml +345 -0
- package/.github/workflows/copilot-setup-steps.yml +20 -0
- package/.github/workflows/frame-emission-gate.yml +242 -0
- package/.github/workflows/project-auto.yml +24 -0
- package/.github/workflows/release.yml +260 -0
- package/.github/workflows/slow-cli-tests.yml +37 -0
- package/.github/workflows/tag-guard.yml +44 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +2 -0
- package/.prettierignore +28 -0
- package/.prettierrc.json +10 -0
- package/.smartergpt/CONTROL_DECK_VISION.md +226 -0
- package/.smartergpt/allowed-commands.json +41 -0
- package/.smartergpt/allowed-commands.strict.json +56 -0
- package/.smartergpt/deliverables/.live.md +426 -0
- package/.smartergpt/deliverables/ISSUE_STATUS_2025-12-28.md +193 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/ADR_DISCUSSION.md +379 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_claude-haiku.md +109 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gemini-flash.md +42 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gpt-codex-mini.md +19 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_raptor-mini.md +37 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Question.md +37 -0
- package/.smartergpt/deliverables/merge-weave-04469e41-24ba-4ed5-b0ff-13c7ea12858d.ndjson +2 -0
- package/.smartergpt/deps.yml +3 -0
- package/.smartergpt/docs/fanout-templates.md +213 -0
- package/.smartergpt/docs/merge-weave-interventions.md +261 -0
- package/.smartergpt/docs/test-fix-patterns.md +240 -0
- package/.smartergpt/fanout-templates.yml +263 -0
- package/.smartergpt/gates.yml +9 -0
- package/.smartergpt/intent.md +1 -0
- package/.smartergpt/issues/QOL-001-analysis-script-filtering.md +36 -0
- package/.smartergpt/issues/QOL-002-log-retention-policy.md +92 -0
- package/.smartergpt/issues/QOL-003-realtime-console-feedback.md +44 -0
- package/.smartergpt/issues/QOL-004-governance-report-cli.md +44 -0
- package/.smartergpt/issues/QOL-005-schema-versioning.md +46 -0
- package/.smartergpt/issues/QOL-006-debug-verbose-mode.md +45 -0
- package/.smartergpt/issues/QOL-COMPLETION-REPORT.md +359 -0
- package/.smartergpt/issues/QOL-REVIEW-SUMMARY.md +111 -0
- package/.smartergpt/issues/QOL-ROADMAP.md +71 -0
- package/.smartergpt/merge-policy.yml +41 -0
- package/.smartergpt/merge-weave-policy.yml +255 -0
- package/.smartergpt/o1.json +0 -0
- package/.smartergpt/o2.json +0 -0
- package/.smartergpt/personas/eager-pm.md +123 -0
- package/.smartergpt/personas/example.md +81 -0
- package/.smartergpt/personas/senior-dev.md +107 -0
- package/.smartergpt/profile.yml +2 -0
- package/.smartergpt/prompts/create-project.md +112 -0
- package/.smartergpt/prompts/idea.md +64 -0
- package/.smartergpt/pull-request-template.md +25 -0
- package/.smartergpt/schemas/behavior-rule.schema.d.ts +54 -0
- package/.smartergpt/schemas/behavior-rule.schema.js +56 -0
- package/.smartergpt/schemas/behavior-rule.schema.json +105 -0
- package/.smartergpt/schemas/behavior-rule.schema.ts +60 -0
- package/.smartergpt/schemas/execution-plan-v1.d.ts +47 -0
- package/.smartergpt/schemas/execution-plan-v1.js +22 -0
- package/.smartergpt/schemas/execution-plan-v1.json +113 -0
- package/.smartergpt/schemas/execution-plan-v1.ts +32 -0
- package/.smartergpt/schemas/execution-plan.schema.json +116 -0
- package/.smartergpt/schemas/feature-spec-v0.d.ts +13 -0
- package/.smartergpt/schemas/feature-spec-v0.js +12 -0
- package/.smartergpt/schemas/feature-spec-v0.json +58 -0
- package/.smartergpt/schemas/feature-spec-v0.ts +16 -0
- package/.smartergpt/schemas/feature-spec.schema.json +111 -0
- package/.smartergpt/schemas/gates.schema.d.ts +48 -0
- package/.smartergpt/schemas/gates.schema.js +20 -0
- package/.smartergpt/schemas/gates.schema.json +47 -0
- package/.smartergpt/schemas/gates.schema.ts +26 -0
- package/.smartergpt/schemas/idea.schema.json +81 -0
- package/.smartergpt/schemas/runner.scope.schema.d.ts +54 -0
- package/.smartergpt/schemas/runner.scope.schema.js +28 -0
- package/.smartergpt/schemas/runner.scope.schema.json +75 -0
- package/.smartergpt/schemas/runner.scope.schema.ts +36 -0
- package/.smartergpt/schemas/runner.stack.schema.d.ts +40 -0
- package/.smartergpt/schemas/runner.stack.schema.js +21 -0
- package/.smartergpt/schemas/runner.stack.schema.json +51 -0
- package/.smartergpt/schemas/runner.stack.schema.ts +27 -0
- package/.smartergpt/scope.yml +11 -0
- package/.smartergpt/stack.yml +16 -0
- package/.smartergpt/test-fix-patterns.yml +106 -0
- package/.tool-versions +13 -0
- package/AGENTS.md +402 -0
- package/CHANGELOG.md +256 -0
- package/CLAUDE.md +484 -0
- package/CONTRIBUTING.md +345 -0
- package/EAGER_PM_FANOUT_ANALYSIS.md +283 -0
- package/FAQ.md +292 -0
- package/FIXTURE_LIBRARY_SUMMARY.md +327 -0
- package/IMPLEMENTATION_SUMMARY.md +222 -0
- package/LICENSE +21 -0
- package/MANUAL_TEST_GUIDE.md +229 -0
- package/MCP-ALIGNMENT-SUMMARY.md +261 -0
- package/MCP-CONFIG.md +125 -0
- package/MERGE_WEAVE_QUICKSTART.md +450 -0
- package/MERGE_WEAVE_SUMMARY.md +259 -0
- package/MERGE_WEAVE_USAGE_GUIDE.md +368 -0
- package/NOTICE.md +43 -0
- package/README.mcp.md +770 -0
- package/README.md +1069 -0
- package/TEST_INFRASTRUCTURE_ASSESSMENT.md +225 -0
- package/bootstrap-lexrunner.sh +396 -0
- package/dist/api-7H7SJZIX.js +15 -0
- package/dist/api-U3X2WA6D.js +15 -0
- package/dist/audit-2TZ2LU72.js +60 -0
- package/dist/audit-5HH5BMKI.js +60 -0
- package/dist/audit-6K5K333I.js +60 -0
- package/dist/audit-DYQWS57J.js +60 -0
- package/dist/audit-JBWZ2GZ2.js +60 -0
- package/dist/audit-SJF3434D.js +60 -0
- package/dist/audit-TICGGVX5.js +60 -0
- package/dist/audit-YOBB27PY.js +60 -0
- package/dist/autopilot-3GAVXWWC.js +45 -0
- package/dist/autopilot-43NOYVQA.js +45 -0
- package/dist/autopilot-4UA3OWLU.js +45 -0
- package/dist/autopilot-54TK5CCG.js +45 -0
- package/dist/autopilot-5BHC2UQT.js +45 -0
- package/dist/autopilot-ABZUCVGY.js +45 -0
- package/dist/autopilot-ACJZP47Y.js +45 -0
- package/dist/autopilot-AL5F5AUS.js +46 -0
- package/dist/autopilot-BO67FWUC.js +45 -0
- package/dist/autopilot-BR6W4GEX.js +45 -0
- package/dist/autopilot-FOR2UKRY.js +45 -0
- package/dist/autopilot-GDTTXHEQ.js +45 -0
- package/dist/autopilot-GEAMFZBM.js +45 -0
- package/dist/autopilot-HDMBRZE6.js +45 -0
- package/dist/autopilot-IKI2Y6S4.js +44 -0
- package/dist/autopilot-ILTBWWOL.js +46 -0
- package/dist/autopilot-KI3MXIFI.js +44 -0
- package/dist/autopilot-LWNPZC3J.js +45 -0
- package/dist/autopilot-LXPJ4ZXF.js +45 -0
- package/dist/autopilot-MDIFIONK.js +46 -0
- package/dist/autopilot-NW3LDP6M.js +45 -0
- package/dist/autopilot-OKTSCG35.js +45 -0
- package/dist/autopilot-OR5PF5PD.js +45 -0
- package/dist/autopilot-PE65SBGN.js +45 -0
- package/dist/autopilot-PW7I4B6W.js +45 -0
- package/dist/autopilot-QMLBL5P6.js +45 -0
- package/dist/autopilot-QSN6ZU5O.js +45 -0
- package/dist/autopilot-R7EZJOGI.js +46 -0
- package/dist/autopilot-T544CPPD.js +44 -0
- package/dist/autopilot-TNQB6VGJ.js +44 -0
- package/dist/autopilot-UVIYCR6K.js +45 -0
- package/dist/autopilot-W3ZTTSH3.js +45 -0
- package/dist/autopilot-XPKWOFXO.js +44 -0
- package/dist/autopilot-XRX4QWRM.js +44 -0
- package/dist/autopilot-Y3BAGNI5.js +44 -0
- package/dist/autopilot-ZE64XW2K.js +44 -0
- package/dist/chunk-2ESYSVXG.js +48 -0
- package/dist/chunk-2VR554P7.js +668 -0
- package/dist/chunk-37DOWIVT.js +1084 -0
- package/dist/chunk-3DU2DWUP.js +400 -0
- package/dist/chunk-3DVXIZFM.js +11166 -0
- package/dist/chunk-3FABZF4V.js +811 -0
- package/dist/chunk-4FFGNTAV.js +515 -0
- package/dist/chunk-4GEC4HC3.js +11221 -0
- package/dist/chunk-4RVZNLD4.js +628 -0
- package/dist/chunk-55VWJYZY.js +39 -0
- package/dist/chunk-5CGWZH5X.js +340 -0
- package/dist/chunk-5QKWKK4M.js +11794 -0
- package/dist/chunk-5Z3XHND7.js +11755 -0
- package/dist/chunk-6A4IE3TI.js +302 -0
- package/dist/chunk-6KK5JFFE.js +106 -0
- package/dist/chunk-6YC2VSLE.js +11252 -0
- package/dist/chunk-7C4K2SHD.js +668 -0
- package/dist/chunk-ANXY4RGA.js +11091 -0
- package/dist/chunk-ASHKNUBR.js +11312 -0
- package/dist/chunk-B3OYDPOP.js +11793 -0
- package/dist/chunk-DBH7SQ2S.js +1084 -0
- package/dist/chunk-DEI7A5B4.js +11449 -0
- package/dist/chunk-DM4GHY3J.js +92 -0
- package/dist/chunk-EQKFCZLH.js +9823 -0
- package/dist/chunk-FAIJPBT5.js +40 -0
- package/dist/chunk-FDDKUDXR.js +11166 -0
- package/dist/chunk-FEAR6ETG.js +438 -0
- package/dist/chunk-FNBAHK5V.js +72 -0
- package/dist/chunk-FXL74C73.js +523 -0
- package/dist/chunk-GLJEDX4L.js +10247 -0
- package/dist/chunk-GTP4OHD7.js +1107 -0
- package/dist/chunk-HIHH7IVO.js +10557 -0
- package/dist/chunk-I3VXUVCB.js +10474 -0
- package/dist/chunk-I6BIFVWI.js +10519 -0
- package/dist/chunk-I72TRUTJ.js +1084 -0
- package/dist/chunk-J5B5KT2F.js +368 -0
- package/dist/chunk-JMTULZ66.js +11743 -0
- package/dist/chunk-JXIQ7HCK.js +11166 -0
- package/dist/chunk-K6HVPBDP.js +10692 -0
- package/dist/chunk-KBT5Y666.js +521 -0
- package/dist/chunk-LETPROKG.js +11092 -0
- package/dist/chunk-LLMY2BZF.js +1084 -0
- package/dist/chunk-NMNL4US2.js +1084 -0
- package/dist/chunk-O2XRP7JK.js +10247 -0
- package/dist/chunk-OGPWLFFO.js +11201 -0
- package/dist/chunk-OQJUWTZV.js +51 -0
- package/dist/chunk-PJRWPLQ6.js +669 -0
- package/dist/chunk-PYRVUCJR.js +370 -0
- package/dist/chunk-Q6Y524KH.js +669 -0
- package/dist/chunk-QF7DM5VW.js +106 -0
- package/dist/chunk-QGM4M3NI.js +37 -0
- package/dist/chunk-QIIELFTL.js +1107 -0
- package/dist/chunk-QUW6N7GR.js +10264 -0
- package/dist/chunk-QZASNLQX.js +11223 -0
- package/dist/chunk-RMN4IAWO.js +11808 -0
- package/dist/chunk-RN5NHU37.js +11465 -0
- package/dist/chunk-RNG3RILO.js +11755 -0
- package/dist/chunk-RSA6DEB4.js +9748 -0
- package/dist/chunk-RURYWSMX.js +10524 -0
- package/dist/chunk-SUEXK5U7.js +11201 -0
- package/dist/chunk-TVUF55OH.js +11807 -0
- package/dist/chunk-U5MMENCP.js +456 -0
- package/dist/chunk-U62I2R2D.js +434 -0
- package/dist/chunk-UHFMFO54.js +21 -0
- package/dist/chunk-UNZBDSEU.js +11166 -0
- package/dist/chunk-UOATTNQP.js +334 -0
- package/dist/chunk-UZFYNSMJ.js +334 -0
- package/dist/chunk-VP37GLU6.js +1084 -0
- package/dist/chunk-W6WDKBWO.js +11453 -0
- package/dist/chunk-XBKUFNVF.js +10745 -0
- package/dist/chunk-XOLVQTIE.js +670 -0
- package/dist/chunk-XVFTBVDS.js +257 -0
- package/dist/chunk-YABA7DB6.js +11091 -0
- package/dist/chunk-YWCJX5KL.js +10557 -0
- package/dist/chunk-Z5GP7FSR.js +309 -0
- package/dist/chunk-ZBT3DATZ.js +296 -0
- package/dist/chunk-ZDBAZXUQ.js +11201 -0
- package/dist/chunk-ZEMABYS4.js +92 -0
- package/dist/chunk-ZOA4HT7P.js +662 -0
- package/dist/cli.cjs +40431 -0
- package/dist/cli.d.cts +2709 -0
- package/dist/cli.d.ts +2709 -0
- package/dist/cli.js +21149 -0
- package/dist/commandValidator-42OUDFZ4.js +140 -0
- package/dist/commandValidator-7LQHTYL5.js +140 -0
- package/dist/commandValidator-AT5OYZFC.js +142 -0
- package/dist/commandValidator-DH3CX2OW.js +140 -0
- package/dist/commandValidator-GCQC7H4A.js +140 -0
- package/dist/commandValidator-K6VWB6O3.js +140 -0
- package/dist/commandValidator-L6WNDBYB.js +129 -0
- package/dist/commandValidator-O3KSNXD2.js +140 -0
- package/dist/commandValidator-ZHMUA5RQ.js +140 -0
- package/dist/constraints-M52FVL2X.js +11 -0
- package/dist/dist-CSOR2BL2.js +1144 -0
- package/dist/dist-PKOIS5NZ.js +1144 -0
- package/dist/fileAnalysis-3VMDDJ6I.js +9 -0
- package/dist/fileAnalysis-4QLHUT44.js +9 -0
- package/dist/fileAnalysis-H6M2Z7ZC.js +9 -0
- package/dist/fileAnalysis-HMI7IL6S.js +9 -0
- package/dist/fileAnalysis-JHABOPUQ.js +9 -0
- package/dist/gateMapping-E5MGNJH5.js +17 -0
- package/dist/jsonEnvelope-R4SWKX2N.js +62 -0
- package/dist/mergeTreeSimulator-ATOPJ3DU.js +11 -0
- package/dist/mergeTreeSimulator-AYUK4TZT.js +11 -0
- package/dist/mergeTreeSimulator-BBWJUQBK.js +11 -0
- package/dist/mergeTreeSimulator-DJJDRB5N.js +11 -0
- package/dist/mergeTreeSimulator-X4BA647P.js +11 -0
- package/dist/planDiff-37QHCPKO.js +109 -0
- package/dist/planDiff-BQHIUARB.js +109 -0
- package/dist/planDiff-QOK6KNB7.js +111 -0
- package/dist/planDiff-RXR4CWFS.js +109 -0
- package/dist/planDiff-W2BTH2MU.js +109 -0
- package/dist/planHistory-4J3Q6AJ3.js +126 -0
- package/dist/planHistory-DQRSB2Y7.js +118 -0
- package/dist/planHistory-GLCXP6AB.js +126 -0
- package/dist/planHistory-SMNRLEKG.js +126 -0
- package/dist/planHistory-UO4WZ6GO.js +126 -0
- package/dist/planReview-7BWVLABC.js +377 -0
- package/dist/planReview-7VB3OYKZ.js +385 -0
- package/dist/planReview-FAIBIAE6.js +377 -0
- package/dist/planReview-FXQBDNKJ.js +376 -0
- package/dist/planReview-HO4YYETA.js +377 -0
- package/dist/planReview-I26EKCUK.js +376 -0
- package/dist/planReview-JBOAJHSU.js +377 -0
- package/dist/planReview-SCNZWC6B.js +376 -0
- package/dist/planReview-TU7LMZIY.js +376 -0
- package/dist/planViewer-2YZCPVDM.js +155 -0
- package/dist/planViewer-72WZFUTU.js +154 -0
- package/dist/planViewer-G546TVHV.js +154 -0
- package/dist/planViewer-I7ZHNJQF.js +150 -0
- package/dist/planViewer-IRXHOY5U.js +155 -0
- package/dist/planViewer-IX2ICW45.js +154 -0
- package/dist/planViewer-PDWPUOP6.js +155 -0
- package/dist/planViewer-PEOADAGZ.js +155 -0
- package/dist/planViewer-PFYDEG6V.js +150 -0
- package/dist/planViewer-UIPOSRVW.js +151 -0
- package/dist/planViewer-V2JUKV7Q.js +154 -0
- package/dist/sarif-46TKOOJZ.js +9 -0
- package/dist/sarif-63JKTFFI.js +9 -0
- package/dist/sarif-CIYIWUNC.js +9 -0
- package/dist/sarif-OGAGDL6B.js +9 -0
- package/dist/sarif-XIREI5B5.js +9 -0
- package/dist/security-3V6FKJDA.js +423 -0
- package/dist/security-4JMEUM56.js +423 -0
- package/dist/security-QHPEWY5G.js +423 -0
- package/dist/security-V2LAL5TP.js +415 -0
- package/dist/security-WTASK6T6.js +423 -0
- package/dist/security-XE4GHVJD.js +423 -0
- package/dist/security-XLXM3UHT.js +423 -0
- package/dist/security-YDLHSMVY.js +441 -0
- package/dist/security-ZDAEZF7D.js +423 -0
- package/dist/signing-3EI734L4.js +14 -0
- package/dist/signing-5G7K6JXJ.js +14 -0
- package/dist/signing-7DK7SABM.js +14 -0
- package/dist/signing-JJJOUGCW.js +14 -0
- package/dist/signing-OAJ3MXGA.js +14 -0
- package/dist/verify-5F6PUXUQ.js +62 -0
- package/dist/verify-5ILURHV2.js +62 -0
- package/dist/verify-MRDZJUGO.js +62 -0
- package/dist/verify-SCUHB3SA.js +62 -0
- package/dist/verify-YZRHN2D3.js +62 -0
- package/docs/1.0.0-vertical-slice.md +214 -0
- package/docs/ADR-007-INTEGRATION-SUMMARY.md +232 -0
- package/docs/ALIASING_FOR_LEXRUNNER.md +709 -0
- package/docs/ALIASING_FOR_RUNNER.md +552 -0
- package/docs/AX.md +317 -0
- package/docs/CHECKPOINT_RESUME.md +208 -0
- package/docs/CLI_VERBS.md +219 -0
- package/docs/CONFLICT_DETECTION.md +198 -0
- package/docs/DISCIPLINED_FAILURE.md +224 -0
- package/docs/ENVIRONMENT_QUALITY.md +155 -0
- package/docs/ERROR_CODES.md +528 -0
- package/docs/EVENT_SCHEMA.md +659 -0
- package/docs/EXE-012-investigation-summary.md +300 -0
- package/docs/GATE_ATTESTATION_GUIDE.md +237 -0
- package/docs/JSON_OUTPUT_SCHEMAS.md +347 -0
- package/docs/LEXRUNNER_ALIASING.md +444 -0
- package/docs/LEX_INTEGRATION.md +83 -0
- package/docs/LEX_PUBLIC_API.md +306 -0
- package/docs/LICENSING.md +119 -0
- package/docs/MCP-CLI-PARITY.md +410 -0
- package/docs/MCP-MIGRATION.md +258 -0
- package/docs/MCP-PARITY.md +234 -0
- package/docs/MEMORY_TOOLS.md +278 -0
- package/docs/MERGE_WEAVE_SETUP.md +643 -0
- package/docs/MIGRATION_v0.1.md +760 -0
- package/docs/NAMING_CONVENTIONS.md +82 -0
- package/docs/PERSONA_FOUNDATION.md +124 -0
- package/docs/PHASE3_MEMORY_GUIDE.md +122 -0
- package/docs/PLAN_LOCK.md +114 -0
- package/docs/README.md +289 -0
- package/docs/RUNNER_LIFECYCLE.md +257 -0
- package/docs/SAFETY_MECHANISMS.md +325 -0
- package/docs/SECURITY_IMPLEMENTATION.md +535 -0
- package/docs/TERMS.md +34 -0
- package/docs/TOKEN_TRACKING.md +162 -0
- package/docs/WORKFLOW_GUIDANCE.md +277 -0
- package/docs/adr/ADR-000-product-naming-and-branding.md +115 -0
- package/docs/adr/ADR-001-plan-json-frozen-input.md +68 -0
- package/docs/adr/ADR-002-two-track-separation.md +84 -0
- package/docs/adr/ADR-003-gate-uniform-execution.md +69 -0
- package/docs/adr/ADR-004-runner-state-model.md +75 -0
- package/docs/adr/ADR-005-merge-pyramid-ordering.md +87 -0
- package/docs/adr/ADR-006-schema-versioning-semver.md +81 -0
- package/docs/adr/ADR-007-task-snapshot-contract.md +503 -0
- package/docs/adr/ADR-008-lex-packaging.md +243 -0
- package/docs/adr/ADR-009-ax-test-output-adapters.md +440 -0
- package/docs/adr/README.md +32 -0
- package/docs/advanced-cli.md +436 -0
- package/docs/agent-stall-detection.md +278 -0
- package/docs/architecture/executors.md +190 -0
- package/docs/architecture.md +316 -0
- package/docs/attestation/AX-SHARED-PLEDGE.md +83 -0
- package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0.md +99 -0
- package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0_VERIFICATION.md +115 -0
- package/docs/attestation/Lex_Guff_Version_Contract_Pact_v1.0.0.md +181 -0
- package/docs/attestation/README.md +87 -0
- package/docs/attestation/ax_pledge_2025-12-02.ots +0 -0
- package/docs/attestation/ax_pledge_timestamp_response.tsr +0 -0
- package/docs/attestation/copilot_summarization_2025-12-01.ots +0 -0
- package/docs/attestation/copilot_summarization_2025-12-01_VERIFICATION.md +100 -0
- package/docs/attestation/copilot_summarization_behavior_observation_2025-12-01.md +85 -0
- package/docs/attestation/copilot_summarization_screenshot_2025-12-01.png +0 -0
- package/docs/attestation/employment_separation_2025-11-26.ots +0 -0
- package/docs/attestation/employment_timestamp_response.tsr +0 -0
- package/docs/attestation/freetsa_cacert.pem +45 -0
- package/docs/attestation/freetsa_tsa.crt +45 -0
- package/docs/attestation/lex_employment_separation_2025-11-26.md +85 -0
- package/docs/attestation/lex_employment_separation_2025-11-26_VERIFICATION.md +126 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md +350 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md.ots +0 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft_VERIFICATION.md +130 -0
- package/docs/attestation/patent/README.md +75 -0
- package/docs/attestation/patent/fig1_write_path.svg +58 -0
- package/docs/attestation/patent/fig2_read_normalize_rollup.svg +92 -0
- package/docs/attestation/timestamp_response.tsr +0 -0
- package/docs/attribution-README.md +264 -0
- package/docs/audit-compliance.md +283 -0
- package/docs/audit-outputs.md +1213 -0
- package/docs/audit-sdk.md +1134 -0
- package/docs/autopilot-levels.md +368 -0
- package/docs/autopilot.md +288 -0
- package/docs/ci-cd-integration.md +580 -0
- package/docs/ci-integration-guide.md +369 -0
- package/docs/ci-version-validation.md +198 -0
- package/docs/cli-mcp-weave-reporting.md +462 -0
- package/docs/cli.md +2262 -0
- package/docs/cluster-gates-rollback.md +222 -0
- package/docs/command-creation-guide.md +485 -0
- package/docs/command-whitelist.md +490 -0
- package/docs/commands/idea.md +253 -0
- package/docs/config.md +245 -0
- package/docs/conflict-clustering.md +225 -0
- package/docs/conflict-predictor.md +359 -0
- package/docs/context-diet.md +249 -0
- package/docs/counter-examples.md +199 -0
- package/docs/create-project.md +211 -0
- package/docs/deliverables-generator.md +299 -0
- package/docs/deliverables-management.md +474 -0
- package/docs/dependency-parser.md +354 -0
- package/docs/determinism.md +299 -0
- package/docs/diffgraph-planner.md +1211 -0
- package/docs/dogfood/README.md +33 -0
- package/docs/dogfood/wave-3-results.md +303 -0
- package/docs/dogfood-merge-weave-script.md +224 -0
- package/docs/enterprise-onboarding.md +291 -0
- package/docs/environment-variables.md +625 -0
- package/docs/error-recovery.md +466 -0
- package/docs/errors.md +288 -0
- package/docs/executor-authoring.md +854 -0
- package/docs/executor-decoupling.md +410 -0
- package/docs/front-end-capture-pipeline.md +312 -0
- package/docs/gate-report-examples.md +380 -0
- package/docs/gates.md +319 -0
- package/docs/github-automation.md +128 -0
- package/docs/governance-metrics.md +368 -0
- package/docs/integrations/README.md +588 -0
- package/docs/interactive-plan-review.md +493 -0
- package/docs/issue-orchestration.md +256 -0
- package/docs/lex_ax_session_key_rememberings_v0.1.md +195 -0
- package/docs/lexrunner-v1-summary.md +246 -0
- package/docs/lexrunner-v2-contract.md +404 -0
- package/docs/lexrunner-v2-migration-plan.md +388 -0
- package/docs/lexrunner-v2-salvage-map.md +355 -0
- package/docs/lexsona-rules.md +154 -0
- package/docs/merge-weave-analysis.md +403 -0
- package/docs/merge-weave-quickstart.md +770 -0
- package/docs/merge-weave-state-machine.md +390 -0
- package/docs/migration-guide.md +529 -0
- package/docs/monitoring-examples.md +470 -0
- package/docs/monitoring-implementation.md +252 -0
- package/docs/orchestration.md +234 -0
- package/docs/performance-scale.md +359 -0
- package/docs/plan-generation.md +407 -0
- package/docs/profile-resolution.md +455 -0
- package/docs/prompts.md +427 -0
- package/docs/quickstart.md +546 -0
- package/docs/release-process.md +310 -0
- package/docs/sample-prompts/merge-weave/cli-merge-weave-kickoff.md +274 -0
- package/docs/sample-prompts/merge-weave/mcp-merge-weave-kickoff.md +480 -0
- package/docs/sample-prompts/merge-weave/standalone-merge-weave-kickoff.md +237 -0
- package/docs/schemas.md +359 -0
- package/docs/scope-validation.md +444 -0
- package/docs/security/rotation-guide.md +325 -0
- package/docs/specs/Meeting_Control_Stack_Concept_v0.1.0.md +417 -0
- package/docs/specs/git-feature-flag-redesign.md +321 -0
- package/docs/specs/lex-pr-brief-behavior.md +269 -0
- package/docs/specs/smartergpt-structure-v1.md +705 -0
- package/docs/specs/task-brief-v0.1.md +224 -0
- package/docs/store-architecture.md +61 -0
- package/docs/templates/CONTRIBUTING-merge-weave-section.md +33 -0
- package/docs/templates/gates.example.yml +109 -0
- package/docs/templates/plan.example.json +77 -0
- package/docs/thesis/00-EVOLUTION-NOTES.md +383 -0
- package/docs/thesis/01-CORE-THESIS.md +285 -0
- package/docs/thesis/02-TURN-COST.md +498 -0
- package/docs/thesis/03-PERMISSION-TO-FAIL.md +581 -0
- package/docs/thesis/04-CROSS-MODEL-CONTINUITY.md +517 -0
- package/docs/thesis/05-RULE-FILE-SPEC.md +732 -0
- package/docs/thesis/06-CAPABILITY-TIERS.md +723 -0
- package/docs/thesis/07-ROBERT-FIELD-REPORT.md +433 -0
- package/docs/thesis/08-IMPLEMENTATION-GUIDE.md +1093 -0
- package/docs/thesis/09-METRICS-AND-TELEMETRY.md +793 -0
- package/docs/thesis/10-FAILURE-MODES.md +716 -0
- package/docs/thesis/README.md +151 -0
- package/docs/thesis/lex_governance-collab_systems_paper_draft.md +952 -0
- package/docs/thesis/lex_governance-collab_systems_paper_draft.pdf +0 -0
- package/docs/tool-grounded/READINESS_ANALYSIS.md +527 -0
- package/docs/tool-grounded/enforcement.md +361 -0
- package/docs/tool-grounded/tool-grounded-a-view-from-the-inside.md +437 -0
- package/docs/tool-grounded/tool-grounded-prompt.md +122 -0
- package/docs/tool-grounded/tool-grounded-run-centric.md +474 -0
- package/docs/troubleshooting-planner.md +910 -0
- package/docs/troubleshooting.md +745 -0
- package/docs/tutorials/README.md +201 -0
- package/docs/tutorials/diffgraph-planner/01-simple-stack.md +460 -0
- package/docs/tutorials/diffgraph-planner/02-diamond-pattern.md +431 -0
- package/docs/tutorials/diffgraph-planner/03-large-batch.md +525 -0
- package/docs/tutorials/diffgraph-planner/04-fixing-cycles.md +526 -0
- package/docs/tutorials/diffgraph-planner/05-hybrid-workflow.md +555 -0
- package/docs/tutorials/quick-merge-pyramid.md +364 -0
- package/docs/tutorials/video-scripts/01-getting-started.md +286 -0
- package/docs/tutorials/video-scripts/02-understanding-dependencies.md +376 -0
- package/docs/weave-contract.md +116 -0
- package/docs/weave-execution-log.md +153 -0
- package/docs/workflows/README.md +139 -0
- package/docs/workflows/enterprise.md +545 -0
- package/docs/workflows/small-team.md +398 -0
- package/docs/workflows/solo-developer.md +419 -0
- package/dogfood-merge-weave.sh +122 -0
- package/examples/README.md +22 -0
- package/examples/WORKING_EXAMPLE.md +309 -0
- package/examples/analyze-pr-files.js +100 -0
- package/examples/autopilot-level4-example.md +234 -0
- package/examples/cluster-gates-demo.sh +178 -0
- package/examples/complete-security-workflow.ts +248 -0
- package/examples/error-recovery/README.md +202 -0
- package/examples/executor-manifest.example.yaml +81 -0
- package/examples/front-end-capture-pipeline/README.md +99 -0
- package/examples/front-end-capture-pipeline/create-project-example.sh +83 -0
- package/examples/front-end-capture-pipeline/idea-dark-mode.json +14 -0
- package/examples/front-end-capture-pipeline/idea-example.sh +57 -0
- package/examples/front-end-capture-pipeline/manual-test-checklist.md +426 -0
- package/examples/gates/README.md +165 -0
- package/examples/gates/lint-gate.sh +40 -0
- package/examples/gates/lint-gate.ts +99 -0
- package/examples/gates/test-runner.ts +113 -0
- package/examples/gates/vuln-scanner.ts +95 -0
- package/examples/github-integration/README.md +111 -0
- package/examples/github-integration/example-plan.json +95 -0
- package/examples/performance-config.md +388 -0
- package/examples/profile-setup/.gitignore.template +66 -0
- package/examples/profile-setup/.smartergpt-example/README.md +190 -0
- package/examples/profile-setup/.smartergpt.local-example/README.md +365 -0
- package/examples/profile-setup/README.md +492 -0
- package/examples/profile-setup/cross-repo-prompts/README.md +606 -0
- package/examples/safety-framework-demo.ts +130 -0
- package/examples/safety-mechanisms-example.ts +191 -0
- package/examples/sample-plan.json +87 -0
- package/examples/sample-stack.yml +66 -0
- package/examples/sarif/README.md +224 -0
- package/examples/scope-validation-demo.ts +199 -0
- package/examples/security-integration.ts +293 -0
- package/examples/token-tracking-example.ts +71 -0
- package/executors/senior-dev/ARCHITECTURE.md +182 -0
- package/executors/senior-dev/MEMORY_INTEGRATION.md +236 -0
- package/executors/senior-dev/QUICK_START.md +145 -0
- package/executors/senior-dev/README.md +76 -0
- package/executors/senior-dev/examples/sample-review-session.md +228 -0
- package/executors/senior-dev/executor-manifest.yaml +79 -0
- package/executors/senior-dev/prompts/code-review.prompt.md +78 -0
- package/executors/senior-dev/prompts/mentorship-feedback.prompt.md +97 -0
- package/executors/senior-dev/prompts/pattern-recognition.prompt.md +80 -0
- package/executors/senior-dev/prompts/pr-analysis.prompt.md +75 -0
- package/executors/senior-dev/scripts/capture-review-frame.sh +129 -0
- package/executors/senior-dev/scripts/prepare-review-context.sh +61 -0
- package/executors/senior-dev/scripts/recall-context.sh +87 -0
- package/lexrunner-launcher.sh +12 -0
- package/mcp-config-example.json +14 -0
- package/mcp-server.mjs +1221 -0
- package/merge-weave-current-prs.md +170 -0
- package/merge-weave-dogfood.json +46 -0
- package/merge-weave-plan.json +56 -0
- package/package.json +140 -0
- package/procedures/merge-weave-main.yaml +90 -0
- package/procedures/pr-review.yaml +68 -0
- package/project/README.md +50 -0
- package/prompts/tool-grounded-mode.md +185 -0
- package/schemas/allowed-commands.schema.json +108 -0
- package/schemas/audit-events.schema.json +138 -0
- package/schemas/audit-events.v1.0.0.schema.json +138 -0
- package/schemas/edit-plan.schema.json +80 -0
- package/schemas/executor-manifest.schema.json +236 -0
- package/schemas/flake-report.schema.json +95 -0
- package/schemas/gate-report.schema.json +85 -0
- package/schemas/gates/build.schema.json +32 -0
- package/schemas/gates/coverage.schema.json +42 -0
- package/schemas/gates/lint.schema.json +34 -0
- package/schemas/gates/security-scan.schema.json +33 -0
- package/schemas/gates/test.schema.json +35 -0
- package/schemas/next-option.schema.json +60 -0
- package/schemas/persona-snapshot.schema.json +66 -0
- package/schemas/plan.schema.json +300 -0
- package/schemas/status-response.schema.json +193 -0
- package/scripts/README.md +354 -0
- package/scripts/analyze-governance-logs.mjs +51 -0
- package/scripts/benchmark-ci.ts +339 -0
- package/scripts/check-determinism.sh +23 -0
- package/scripts/check-license-compliance.mjs +319 -0
- package/scripts/check-release-drift.mjs +81 -0
- package/scripts/ci-debug.sh +24 -0
- package/scripts/ci-smoke.mjs +304 -0
- package/scripts/create-sample-repo.sh +245 -0
- package/scripts/dogfood-merge-weave.sh +552 -0
- package/scripts/gen_mcp_servers.py +252 -0
- package/scripts/generate-executor-manifest-schema.ts +30 -0
- package/scripts/generate-flake-schema.ts +32 -0
- package/scripts/generate-gate-schema.ts +32 -0
- package/scripts/generate-plan-schema.ts +30 -0
- package/scripts/generate-run-schemas.ts +69 -0
- package/scripts/load-prompt.mjs +147 -0
- package/scripts/merge-weave-wrapper.sh +445 -0
- package/scripts/merge-weave.sh +489 -0
- package/scripts/metrics-template.ts +134 -0
- package/scripts/package-lex.sh +267 -0
- package/scripts/quick-start-merge-weave.sh +218 -0
- package/scripts/release-prepare.ts +350 -0
- package/scripts/rotate-secrets-example.ts +134 -0
- package/scripts/test-lexsona-shadow.mjs +100 -0
- package/scripts/validate-manifests.ts +188 -0
- package/scripts/verify-audit-phase2.js +175 -0
- package/src/ai/README.md +456 -0
- package/src/ai/conflictStrategy.ts +223 -0
- package/src/ai/conflictStrategyCache.ts +164 -0
- package/src/ai/conflictStrategyPrompt.ts +128 -0
- package/src/ai/conflictStrategySchema.ts +165 -0
- package/src/ai/heuristicFallback.ts +162 -0
- package/src/ai/index.ts +64 -0
- package/src/ai/riskScoring.ts +174 -0
- package/src/aliases/index.ts +16 -0
- package/src/aliases/resolver.ts +212 -0
- package/src/audit/context.ts +284 -0
- package/src/audit/emitter.ts +685 -0
- package/src/audit/events.ts +210 -0
- package/src/audit/gateMatrix.ts +158 -0
- package/src/audit/index.ts +44 -0
- package/src/audit/manifest.ts +78 -0
- package/src/audit/profiles.ts +93 -0
- package/src/audit/redaction.ts +216 -0
- package/src/audit/sarif.ts +213 -0
- package/src/audit/schema/events.ts +366 -0
- package/src/audit/schema/manifest.ts +47 -0
- package/src/audit/schema.ts +159 -0
- package/src/audit/sdk/index.ts +145 -0
- package/src/audit/sdk/types.ts +88 -0
- package/src/audit/sidecar.ts +111 -0
- package/src/audit/signing.ts +521 -0
- package/src/autopilot/README.md +113 -0
- package/src/autopilot/artifacts.ts +287 -0
- package/src/autopilot/base.ts +132 -0
- package/src/autopilot/deliverables.ts +392 -0
- package/src/autopilot/index.ts +29 -0
- package/src/autopilot/level1.ts +187 -0
- package/src/autopilot/level2.ts +262 -0
- package/src/autopilot/level3.ts +263 -0
- package/src/autopilot/level4.ts +393 -0
- package/src/autopilot/safety/README.md +512 -0
- package/src/autopilot/safety/SafetyFramework.ts +634 -0
- package/src/autopilot/safety/index.ts +16 -0
- package/src/autopilot/types.ts +250 -0
- package/src/budget/index.ts +56 -0
- package/src/budget/manager.ts +547 -0
- package/src/budget/schema.ts +305 -0
- package/src/budget/tracker.ts +155 -0
- package/src/cache/issue-cache.ts +150 -0
- package/src/cli/command-map.ts +221 -0
- package/src/cli/commands/gate/test.ts +214 -0
- package/src/cli/exitHandler.ts +98 -0
- package/src/cli/flags.ts +123 -0
- package/src/cli/formatSuggestions.ts +202 -0
- package/src/cli/formatters.ts +294 -0
- package/src/cli/jsonEnvelope.ts +152 -0
- package/src/cli/output.ts +61 -0
- package/src/cli/runnerLifecycle.ts +118 -0
- package/src/cli-audit.ts +76 -0
- package/src/cli-security.ts +114 -0
- package/src/cli.ts +1231 -0
- package/src/commands/audit/index.ts +5 -0
- package/src/commands/audit/verify.ts +87 -0
- package/src/commands/autopilot.ts +131 -0
- package/src/commands/budget.ts +327 -0
- package/src/commands/bulkOps.ts +204 -0
- package/src/commands/completion.ts +287 -0
- package/src/commands/config/validate.ts +428 -0
- package/src/commands/config.ts +368 -0
- package/src/commands/counterExamples.ts +104 -0
- package/src/commands/create-project.ts +338 -0
- package/src/commands/discover.ts +192 -0
- package/src/commands/doctor.ts +436 -0
- package/src/commands/execute.ts +558 -0
- package/src/commands/explain.ts +157 -0
- package/src/commands/fanout-analyze.ts +684 -0
- package/src/commands/fanout-harvest.ts +328 -0
- package/src/commands/fanout-monitor.ts +224 -0
- package/src/commands/gateAttest.ts +95 -0
- package/src/commands/gateImport.ts +142 -0
- package/src/commands/gateImportChecks.ts +208 -0
- package/src/commands/gateReport.ts +184 -0
- package/src/commands/governanceCleanup.ts +171 -0
- package/src/commands/governanceReport.ts +497 -0
- package/src/commands/guards.ts +50 -0
- package/src/commands/idea.ts +281 -0
- package/src/commands/init.ts +414 -0
- package/src/commands/issues.ts +165 -0
- package/src/commands/merge.ts +677 -0
- package/src/commands/mergeOrder.ts +68 -0
- package/src/commands/metrics.ts +232 -0
- package/src/commands/migrateProfile.ts +187 -0
- package/src/commands/orchestrate/analyze-issues.ts +203 -0
- package/src/commands/orchestrate/assign-batch.ts +204 -0
- package/src/commands/orchestrate/generate-deliverables.ts +66 -0
- package/src/commands/orchestrate/pinToolchain.ts +102 -0
- package/src/commands/orchestrate/plan-batch.ts +119 -0
- package/src/commands/orchestrate/predict-conflicts.ts +210 -0
- package/src/commands/orchestrate.ts +186 -0
- package/src/commands/plan.ts +403 -0
- package/src/commands/planDiff.ts +56 -0
- package/src/commands/planReview.ts +112 -0
- package/src/commands/planViewer.ts +180 -0
- package/src/commands/preview-constraints.ts +97 -0
- package/src/commands/query.ts +313 -0
- package/src/commands/report.ts +56 -0
- package/src/commands/retry.ts +60 -0
- package/src/commands/schema.ts +128 -0
- package/src/commands/security.ts +140 -0
- package/src/commands/seniorDev.ts +326 -0
- package/src/commands/status.ts +97 -0
- package/src/commands/tokenReport.ts +167 -0
- package/src/commands/validation.ts +66 -0
- package/src/commands/weave-checkpoints.ts +145 -0
- package/src/commands/weave-fanout.ts +273 -0
- package/src/commands/weave-policy.ts +277 -0
- package/src/commands/weave.ts +518 -0
- package/src/config/localOverlay.ts +167 -0
- package/src/config/pathResolver.ts +106 -0
- package/src/config/profileResolver.ts +194 -0
- package/src/config/promptsResolver.ts +312 -0
- package/src/config/rulesResolver.ts +257 -0
- package/src/config/schemas.ts +142 -0
- package/src/core/bootstrap.ts +287 -0
- package/src/core/enterprise.ts +453 -0
- package/src/core/errorRecovery.ts +509 -0
- package/src/core/githubPlan.ts +282 -0
- package/src/core/inputs.ts +314 -0
- package/src/core/multiRepoPlan.ts +353 -0
- package/src/core/plan.ts +106 -0
- package/src/core/snapshot.ts +189 -0
- package/src/errors/adapters.ts +897 -0
- package/src/errors/index.ts +231 -0
- package/src/executionState.ts +356 -0
- package/src/executors/README_FRAME_CONTRACT.md +446 -0
- package/src/executors/frameContract.ts +270 -0
- package/src/executors/guardrailEnforcement.ts +294 -0
- package/src/executors/seniorDev/core.ts +548 -0
- package/src/executors/seniorDev/index.ts +30 -0
- package/src/executors/seniorDev/types.ts +176 -0
- package/src/executors/toolBudget.ts +194 -0
- package/src/fanout/analyzer.ts +735 -0
- package/src/fanout/github-adapter.ts +262 -0
- package/src/fanout/harvest.ts +517 -0
- package/src/fanout/monitor.ts +350 -0
- package/src/fanout/types.ts +428 -0
- package/src/frames/controller.ts +160 -0
- package/src/frames/emitter.ts +455 -0
- package/src/frames/index.ts +58 -0
- package/src/frames/storage.ts +203 -0
- package/src/frames/types.ts +258 -0
- package/src/gates/checkRunConverter.ts +91 -0
- package/src/gates/test/adapters/errors.ts +32 -0
- package/src/gates/test/adapters/index.ts +36 -0
- package/src/gates/test/adapters/interface.ts +63 -0
- package/src/gates/test/adapters/jest-json.ts +370 -0
- package/src/gates/test/adapters/junit-xml.ts +400 -0
- package/src/gates/test/adapters/registry.ts +149 -0
- package/src/gates/test/adapters/vitest-json.ts +339 -0
- package/src/gates/test/enrichment/failureId.ts +74 -0
- package/src/gates/test/enrichment/index.ts +25 -0
- package/src/gates/test/enrichment/nextActions.ts +322 -0
- package/src/gates/test/enrichment/rerunTemplates.ts +105 -0
- package/src/gates/test/enrichment/signature.ts +58 -0
- package/src/gates/test/enrichment/stackParser.ts +149 -0
- package/src/gates/test/enrichment/types.ts +67 -0
- package/src/gates/test/formatters/markdown.spec.ts +942 -0
- package/src/gates/test/formatters/markdown.ts +296 -0
- package/src/gates/test/index.ts +54 -0
- package/src/gates/test/schema.spec.ts +372 -0
- package/src/gates/test/schema.ts +327 -0
- package/src/gates/validator.ts +92 -0
- package/src/gates.ts +1022 -0
- package/src/git/operations.ts +592 -0
- package/src/git/parseRemote.ts +22 -0
- package/src/github/api.ts +584 -0
- package/src/github/batch-ops.ts +215 -0
- package/src/github/client.ts +647 -0
- package/src/github/contextDiet.ts +205 -0
- package/src/github/diffHunks.ts +285 -0
- package/src/github/index.ts +11 -0
- package/src/github/minimalContext.ts +212 -0
- package/src/github/minimalContextClient.ts +105 -0
- package/src/github/symbolMap.ts +370 -0
- package/src/github/types.ts +166 -0
- package/src/governance/index.ts +42 -0
- package/src/governance/mcpStatus.ts +258 -0
- package/src/governance/timeoutAdjustment.ts +149 -0
- package/src/governance/turnCostSummary.ts +182 -0
- package/src/hooks/events.ts +374 -0
- package/src/hooks/index.ts +8 -0
- package/src/hostility/checks.ts +408 -0
- package/src/hostility/index.ts +108 -0
- package/src/hostility/score.ts +143 -0
- package/src/interactive/planDiff.ts +168 -0
- package/src/interactive/planHistory.ts +205 -0
- package/src/interactive/planReview.ts +531 -0
- package/src/learning/counter-example.ts +174 -0
- package/src/learning/prompts.ts +107 -0
- package/src/learning/storage.ts +230 -0
- package/src/lexsona/client.ts +367 -0
- package/src/lexsona/index.ts +44 -0
- package/src/lexsona/logger.ts +408 -0
- package/src/lexsona/types.ts +177 -0
- package/src/mcp/DEPRECATED.md +33 -0
- package/src/mcp/server.ts +3587 -0
- package/src/mcp/types/guided-response.ts +95 -0
- package/src/mcp/types.ts +468 -0
- package/src/mcp/workflow/state-machine.ts +277 -0
- package/src/mergeEligibility.ts +355 -0
- package/src/mergeOrder.ts +170 -0
- package/src/metrics/export.ts +472 -0
- package/src/metrics/index.ts +35 -0
- package/src/metrics/turncost.ts +284 -0
- package/src/monitoring/README.md +222 -0
- package/src/monitoring/audit.ts +98 -0
- package/src/monitoring/cache.ts +121 -0
- package/src/monitoring/dashboards/grafana-dashboard.json +172 -0
- package/src/monitoring/errorRecovery.ts +334 -0
- package/src/monitoring/errors.ts +105 -0
- package/src/monitoring/fileLogger.ts +194 -0
- package/src/monitoring/hallucinations.ts +45 -0
- package/src/monitoring/health.ts +171 -0
- package/src/monitoring/index.ts +16 -0
- package/src/monitoring/lock.ts +158 -0
- package/src/monitoring/logger.ts +178 -0
- package/src/monitoring/metrics.ts +245 -0
- package/src/monitoring/profiler.ts +156 -0
- package/src/monitoring/tokenLogger.ts +141 -0
- package/src/orchestrate/analyzer.ts +461 -0
- package/src/orchestrate/index.ts +6 -0
- package/src/orchestrate/types.ts +65 -0
- package/src/orchestration/README.md +480 -0
- package/src/orchestration/agentAssigner.ts +206 -0
- package/src/orchestration/batchPlanner.ts +201 -0
- package/src/orchestration/conflictClustering.ts +344 -0
- package/src/orchestration/conflictGraph.ts +63 -0
- package/src/orchestration/conflictPredictor.ts +170 -0
- package/src/orchestration/deliverablesGenerator.ts +345 -0
- package/src/orchestration/determinism.ts +232 -0
- package/src/orchestration/index.ts +45 -0
- package/src/orchestration/mergeTreeSimulator.ts +137 -0
- package/src/orchestration/mis.ts +123 -0
- package/src/orchestration/toolchainManifest.ts +169 -0
- package/src/orchestration/types.ts +103 -0
- package/src/performance.README.md +99 -0
- package/src/performance.ts +279 -0
- package/src/planner/README.md +215 -0
- package/src/planner/dependencyParser.ts +404 -0
- package/src/planner/dependencyScoring.ts +346 -0
- package/src/planner/fileAnalysis.ts +693 -0
- package/src/planner/index.ts +41 -0
- package/src/planner/scopeValidator.ts +308 -0
- package/src/planner/types.ts +80 -0
- package/src/planner/validation.ts +493 -0
- package/src/preview/constraints.ts +333 -0
- package/src/procedures/index.ts +47 -0
- package/src/procedures/loader.ts +252 -0
- package/src/procedures/schema.ts +191 -0
- package/src/procedures/stateMachine.ts +160 -0
- package/src/procedures/types.ts +178 -0
- package/src/receipts/emit.ts +354 -0
- package/src/receipts/index.ts +48 -0
- package/src/receipts/schema.ts +227 -0
- package/src/report/aggregate.ts +160 -0
- package/src/runs/artifacts.ts +315 -0
- package/src/runs/attribution.ts +132 -0
- package/src/runs/context.ts +54 -0
- package/src/runs/decisions.ts +407 -0
- package/src/runs/enforcement.ts +395 -0
- package/src/runs/failures.ts +517 -0
- package/src/runs/index.ts +141 -0
- package/src/runs/manager.ts +910 -0
- package/src/runs/statusBuilder.ts +233 -0
- package/src/runs/storage.ts +290 -0
- package/src/runs/types.ts +216 -0
- package/src/schema/flakeReport.ts +74 -0
- package/src/schema/gateMapping.ts +107 -0
- package/src/schema/gateReport.ts +236 -0
- package/src/schema/weaveLock.ts +51 -0
- package/src/schema.ts +313 -0
- package/src/schemas/executorManifest.ts +204 -0
- package/src/schemas/feature-spec-v0.ts +40 -0
- package/src/schemas/persona.ts +162 -0
- package/src/schemas/project.ts +91 -0
- package/src/schemas/runCentric.ts +402 -0
- package/src/schemas/task-contract.ts +626 -0
- package/src/schemas/vacuumReadyPrompt.ts +128 -0
- package/src/sdk/index.ts +113 -0
- package/src/sdk/parser.ts +101 -0
- package/src/sdk/query.ts +315 -0
- package/src/sdk/validator.ts +114 -0
- package/src/security/README.md +496 -0
- package/src/security/authentication.ts +173 -0
- package/src/security/authorization.ts +348 -0
- package/src/security/commandValidator.ts +195 -0
- package/src/security/compliance.ts +688 -0
- package/src/security/index.ts +85 -0
- package/src/security/policy.ts +399 -0
- package/src/security/sarif.ts +179 -0
- package/src/security/scanning.ts +362 -0
- package/src/security/secrets.ts +520 -0
- package/src/shared/git/index.ts +30 -0
- package/src/shared/git/runGit.ts +281 -0
- package/src/shared/git/runtime.ts +66 -0
- package/src/snapshot/builder.ts +229 -0
- package/src/snapshot/index.ts +8 -0
- package/src/store/CONTRACT.md +189 -0
- package/src/store/README.md +22 -0
- package/src/store/index.ts +99 -0
- package/src/store/inmemory/index.ts +10 -0
- package/src/store/inmemory/run-store.ts +268 -0
- package/src/store/postgres/.gitkeep +0 -0
- package/src/store/run-store.ts +405 -0
- package/src/store/sqlite/index.ts +7 -0
- package/src/store/sqlite/run-store.ts +525 -0
- package/src/store/sqlite/schema.sql +67 -0
- package/src/telemetry/frames.ts +179 -0
- package/src/telemetry/index.ts +5 -0
- package/src/tiers/index.ts +34 -0
- package/src/tiers/metrics.ts +156 -0
- package/src/tiers/schema.ts +95 -0
- package/src/tiers/suggest.ts +183 -0
- package/src/types/guardrails.ts +452 -0
- package/src/types/index.ts +42 -0
- package/src/util/canonicalJson.ts +29 -0
- package/src/util/colorControl.ts +46 -0
- package/src/util/envUtils.ts +139 -0
- package/src/util/hash.ts +69 -0
- package/src/util/lockHash.ts +90 -0
- package/src/util/minHeap.ts +108 -0
- package/src/util/progress.ts +89 -0
- package/src/util/tokenEstimator.ts +55 -0
- package/src/utils/fingerprint.ts +105 -0
- package/src/utils/paths.ts +209 -0
- package/src/utils/tokens.ts +151 -0
- package/src/utils/validation.ts +53 -0
- package/src/verification/diff-applier.ts +60 -0
- package/src/verification/engine-verifier.ts +171 -0
- package/src/verification/errors.ts +30 -0
- package/src/verification/index.ts +13 -0
- package/src/weave/audit/index.ts +17 -0
- package/src/weave/audit/logger.ts +206 -0
- package/src/weave/authority/evaluator.ts +660 -0
- package/src/weave/authority/index.ts +30 -0
- package/src/weave/authority/schema.ts +292 -0
- package/src/weave/checkpoint/index.ts +7 -0
- package/src/weave/checkpoint/storage.ts +223 -0
- package/src/weave/checkpoint/types.ts +121 -0
- package/src/weave/checkpoint/utils.ts +207 -0
- package/src/weave/clusterGates.ts +366 -0
- package/src/weave/draftPR.ts +214 -0
- package/src/weave/executor/d1-executor.ts +822 -0
- package/src/weave/executor/d2-executor.ts +381 -0
- package/src/weave/executor/index.ts +24 -0
- package/src/weave/executor/types.ts +135 -0
- package/src/weave/fanout/generator.ts +186 -0
- package/src/weave/fanout/index.ts +51 -0
- package/src/weave/fanout/loader.ts +134 -0
- package/src/weave/fanout/matcher.ts +239 -0
- package/src/weave/fanout/schema.ts +178 -0
- package/src/weave/frameHelper.ts +126 -0
- package/src/weave/gateFailureHandler.ts +405 -0
- package/src/weave/index.ts +89 -0
- package/src/weave/lockFile.ts +193 -0
- package/src/weave/mergeHelpers.ts +377 -0
- package/src/weave/mergeWeaveSequential.ts +282 -0
- package/src/weave/metrics/calculator.ts +362 -0
- package/src/weave/metrics/index.ts +44 -0
- package/src/weave/metrics/logger.ts +291 -0
- package/src/weave/metrics/schema.ts +505 -0
- package/src/weave/planner/index.ts +23 -0
- package/src/weave/planner/planner.ts +411 -0
- package/src/weave/planner/types.ts +181 -0
- package/src/weave/policy/index.ts +63 -0
- package/src/weave/policy/loader.ts +148 -0
- package/src/weave/policy/schema.ts +290 -0
- package/src/weave/post-merge-checks.ts +220 -0
- package/src/weave/preflightConflicts.ts +375 -0
- package/src/weave/receiptHelper.ts +287 -0
- package/src/weave/recovery.ts +232 -0
- package/src/weave/resolutionGuidance.ts +173 -0
- package/src/weave/stateMachine.ts +426 -0
- package/src/weave/testfix/applier.ts +195 -0
- package/src/weave/testfix/index.ts +18 -0
- package/src/weave/testfix/loader.ts +116 -0
- package/src/weave/testfix/matcher.ts +158 -0
- package/src/weave/testfix/schema.ts +218 -0
- package/src/weave/types.ts +305 -0
- package/src/weave/utils/copilot-completion.ts +76 -0
- package/test-mcp-dogfood.mjs +128 -0
- package/test-mcp.mjs +116 -0
- package/tests/README.md +155 -0
- package/tests/advanced-cli-e2e.spec.ts +218 -0
- package/tests/agentAssigner.spec.ts +261 -0
- package/tests/ai-conflict-strategy-cache.spec.ts +254 -0
- package/tests/ai-conflict-strategy-risk.spec.ts +287 -0
- package/tests/ai-conflict-strategy-schema.spec.ts +252 -0
- package/tests/ai-conflict-strategy.spec.ts +442 -0
- package/tests/aliases/resolver.spec.ts +238 -0
- package/tests/audit/context.spec.ts +283 -0
- package/tests/audit/emitter.spec.ts +347 -0
- package/tests/audit/gateMatrix.spec.ts +335 -0
- package/tests/audit/integration.spec.ts +236 -0
- package/tests/audit/redaction.spec.ts +290 -0
- package/tests/audit/sarif-integration.spec.ts +303 -0
- package/tests/audit/sarif.spec.ts +458 -0
- package/tests/audit/schema-events.spec.ts +421 -0
- package/tests/audit/schema.spec.ts +434 -0
- package/tests/audit/sdk-integration.spec.ts +598 -0
- package/tests/audit/sdk.spec.ts +318 -0
- package/tests/audit/signing-integration.spec.ts +276 -0
- package/tests/audit/signing.spec.ts +350 -0
- package/tests/audit-signing.spec.ts +406 -0
- package/tests/audit-verify-cli.spec.ts +176 -0
- package/tests/autopilot-e2e-level3-4.spec.ts +741 -0
- package/tests/autopilot-integration.spec.ts +274 -0
- package/tests/autopilot-level1.spec.ts +449 -0
- package/tests/autopilot-level2.spec.ts +188 -0
- package/tests/autopilot-level3.spec.ts +266 -0
- package/tests/autopilot-level4.spec.ts +454 -0
- package/tests/autopilot.spec.ts +379 -0
- package/tests/ax-error-adapters.spec.ts +580 -0
- package/tests/batch-planner.spec.ts +500 -0
- package/tests/benchmark-infrastructure.spec.ts +445 -0
- package/tests/benchmarks/README.md +103 -0
- package/tests/benchmarks/baselines/baseline.json +127 -0
- package/tests/benchmarks/core/dependencyResolver.bench.ts +128 -0
- package/tests/benchmarks/core/planParser.bench.ts +114 -0
- package/tests/benchmarks/core/topologicalSort.bench.ts +102 -0
- package/tests/benchmarks/index.ts +36 -0
- package/tests/benchmarks/io/fileOperations.bench.ts +132 -0
- package/tests/benchmarks/io/gitOperations.bench.ts +99 -0
- package/tests/benchmarks/utils/graphGenerator.ts +201 -0
- package/tests/benchmarks/utils/reporter.ts +231 -0
- package/tests/benchmarks/workflows/endToEnd.bench.ts +132 -0
- package/tests/bootstrap.test.ts +319 -0
- package/tests/budget-tracker.spec.ts +279 -0
- package/tests/bulkOps.spec.ts +166 -0
- package/tests/bulletproof-determinism.test.ts +223 -0
- package/tests/canonicalJson.test.ts +130 -0
- package/tests/checkRunConverter.spec.ts +357 -0
- package/tests/cli/commands/gate/test.spec.ts +564 -0
- package/tests/cli/emit-frames-flag.spec.ts +117 -0
- package/tests/cli/exitHandler.spec.ts +314 -0
- package/tests/cli/flags.spec.ts +223 -0
- package/tests/cli/formatters.spec.ts +513 -0
- package/tests/cli/output.spec.ts +221 -0
- package/tests/cli-autopilot.spec.ts +170 -0
- package/tests/cli-budget-guards.spec.ts +210 -0
- package/tests/cli-color-control.spec.ts +334 -0
- package/tests/cli-deliverables-generator.spec.ts +185 -0
- package/tests/cli-determinism.spec.ts +496 -0
- package/tests/cli-init-enterprise.spec.ts +294 -0
- package/tests/cli-init-json.spec.ts +154 -0
- package/tests/cli-init-local.spec.ts +159 -0
- package/tests/cli-json-envelope.spec.ts +140 -0
- package/tests/cli-json.spec.ts +408 -0
- package/tests/cli-orchestrate-plan-batch.spec.ts +329 -0
- package/tests/cli-orchestrate.spec.ts +231 -0
- package/tests/cli-plan-generation.spec.ts +367 -0
- package/tests/cli-plan-review.spec.ts +300 -0
- package/tests/cli-progress.spec.ts +193 -0
- package/tests/cli-ux-enhancements.spec.ts +213 -0
- package/tests/cliJsonPurity.spec.ts +437 -0
- package/tests/cliSuggestDeps.spec.ts +360 -0
- package/tests/cluster-gates-rollback.spec.ts +353 -0
- package/tests/command-validator-integration.spec.ts +305 -0
- package/tests/command-validator.spec.ts +380 -0
- package/tests/commands/autopilot.spec.ts +124 -0
- package/tests/commands/config-validate.spec.ts +301 -0
- package/tests/commands/config.spec.ts +311 -0
- package/tests/commands/create-project.spec.ts +90 -0
- package/tests/commands/doctor.spec.ts +57 -0
- package/tests/commands/execute.spec.ts +293 -0
- package/tests/commands/gateAttest.spec.ts +172 -0
- package/tests/commands/gateImport.spec.ts +176 -0
- package/tests/commands/gateReport.spec.ts +130 -0
- package/tests/commands/guards.spec.ts +114 -0
- package/tests/commands/idea.spec.ts +177 -0
- package/tests/commands/merge.spec.ts +166 -0
- package/tests/commands/plan.spec.ts +123 -0
- package/tests/commands/query.spec.ts +294 -0
- package/tests/commands/report.spec.ts +54 -0
- package/tests/commands/retry.spec.ts +300 -0
- package/tests/commands/schema.spec.ts +136 -0
- package/tests/commands/validation.spec.ts +229 -0
- package/tests/completion.spec.ts +133 -0
- package/tests/config-inspect.spec.ts +202 -0
- package/tests/conflictClustering-e2e.spec.ts +278 -0
- package/tests/conflictClustering.spec.ts +550 -0
- package/tests/conflictGraph.spec.ts +126 -0
- package/tests/conflictPredictor.spec.ts +238 -0
- package/tests/deliverables-generator.spec.ts +329 -0
- package/tests/deliverables.spec.ts +381 -0
- package/tests/dependencyParser-github.spec.ts +244 -0
- package/tests/dependencyParser.spec.ts +386 -0
- package/tests/dependencyScoring.spec.ts +668 -0
- package/tests/deterministic-applicable.test.ts +156 -0
- package/tests/deterministic-build.test.ts +172 -0
- package/tests/deterministic-simple.test.ts +32 -0
- package/tests/discover-suggest-integration.spec.ts +340 -0
- package/tests/dogfood-merge-weave-script.spec.ts +150 -0
- package/tests/e2e/planner.spec.ts +596 -0
- package/tests/e2e-comprehensive.test.ts +500 -0
- package/tests/e2e-determinism.test.ts +293 -0
- package/tests/e2e-synthetic-6pr-weave.spec.ts +329 -0
- package/tests/enterprise-init.spec.ts +350 -0
- package/tests/envUtils.spec.ts +267 -0
- package/tests/error-handling.test.ts +104 -0
- package/tests/error-recovery.spec.ts +451 -0
- package/tests/execution-plan-v1.test.ts +257 -0
- package/tests/executionState-loadGateResults.spec.ts +267 -0
- package/tests/executionState.test.ts +169 -0
- package/tests/executors/README.md +100 -0
- package/tests/executors/frameContract-integration.spec.ts +324 -0
- package/tests/executors/frameContract.spec.ts +531 -0
- package/tests/executors/guardrailEnforcement.spec.ts +424 -0
- package/tests/executors/lifecycle.spec.ts +313 -0
- package/tests/executors/toolBudget.spec.ts +473 -0
- package/tests/feature-spec-v0.test.ts +145 -0
- package/tests/fileAnalysis.spec.ts +946 -0
- package/tests/fingerprint.spec.ts +100 -0
- package/tests/fixtures/README.md +380 -0
- package/tests/fixtures/deliverables/batch-example-plan.json +62 -0
- package/tests/fixtures/executors/README.md +57 -0
- package/tests/fixtures/executors/index.ts +9 -0
- package/tests/fixtures/executors/mock-executor.ts +204 -0
- package/tests/fixtures/executors/registry.ts +51 -0
- package/tests/fixtures/executors/types.ts +95 -0
- package/tests/fixtures/fixtures.spec.ts +307 -0
- package/tests/fixtures/gates/configs.ts +234 -0
- package/tests/fixtures/gates/results.ts +234 -0
- package/tests/fixtures/harvest-bundle-fixture.json +87 -0
- package/tests/fixtures/index.ts +219 -0
- package/tests/fixtures/invalid/plans.ts +178 -0
- package/tests/fixtures/jest/all-passing.json +71 -0
- package/tests/fixtures/jest/snapshot-failures.json +66 -0
- package/tests/fixtures/jest/some-failing.json +100 -0
- package/tests/fixtures/jest/with-location.json +84 -0
- package/tests/fixtures/junit/cdata-messages.xml +29 -0
- package/tests/fixtures/junit/multiple-suites.xml +30 -0
- package/tests/fixtures/junit/single-suite.xml +17 -0
- package/tests/fixtures/junit/with-errors.xml +19 -0
- package/tests/fixtures/junit/with-skipped.xml +18 -0
- package/tests/fixtures/npm-audit.json +32 -0
- package/tests/fixtures/plan.bad-schema.json +5 -0
- package/tests/fixtures/plan.bad-unknown-dep.json +10 -0
- package/tests/fixtures/plan.ci-gates.json +36 -0
- package/tests/fixtures/plan.complex-cycle.json +22 -0
- package/tests/fixtures/plan.cycle.json +14 -0
- package/tests/fixtures/plan.deep-chain.json +95 -0
- package/tests/fixtures/plan.dogfood-execute.json +36 -0
- package/tests/fixtures/plan.gates.json +30 -0
- package/tests/fixtures/plan.integration-pyramid.json +56 -0
- package/tests/fixtures/plan.orphans.json +22 -0
- package/tests/fixtures/plan.parallel.json +30 -0
- package/tests/fixtures/plan.tiny.json +18 -0
- package/tests/fixtures/plan.wide-parallel.json +75 -0
- package/tests/fixtures/plan.with-failures.json +26 -0
- package/tests/fixtures/plan.with-vuln.json +25 -0
- package/tests/fixtures/planner/cross-module.json +101 -0
- package/tests/fixtures/planner/cycle-error.json +56 -0
- package/tests/fixtures/planner/diamond-pattern.json +74 -0
- package/tests/fixtures/planner/empty-repo.json +9 -0
- package/tests/fixtures/planner/file-overlap-heavy.json +110 -0
- package/tests/fixtures/planner/invalid-pr.json +25 -0
- package/tests/fixtures/planner/merge-conflicts.json +42 -0
- package/tests/fixtures/planner/mixed-deps.json +101 -0
- package/tests/fixtures/planner/self-dependency.json +24 -0
- package/tests/fixtures/planner/simple-stack.json +79 -0
- package/tests/fixtures/planner/single-pr.json +25 -0
- package/tests/fixtures/planner/stale-pr.json +40 -0
- package/tests/fixtures/plans/complex.ts +201 -0
- package/tests/fixtures/plans/diamond.ts +115 -0
- package/tests/fixtures/plans/linear.ts +74 -0
- package/tests/fixtures/plans/simple.ts +61 -0
- package/tests/fixtures/prs/basic.ts +175 -0
- package/tests/fixtures/prs/withDeps.ts +197 -0
- package/tests/fixtures/scan-results-clean.sarif +15 -0
- package/tests/fixtures/scan-results.sarif +74 -0
- package/tests/fixtures/scenarios/mergeWorkflows.ts +300 -0
- package/tests/fixtures/scenarios/syntheticWeave.ts +351 -0
- package/tests/fixtures/snapshot/package.json +5 -0
- package/tests/fixtures/snapshot/sample.ts +21 -0
- package/tests/fixtures/utils/cleanup.ts +81 -0
- package/tests/fixtures/utils/mockGitHub.ts +219 -0
- package/tests/fixtures/utils/tempDir.ts +109 -0
- package/tests/fixtures/verification/expected-verification.json +16 -0
- package/tests/fixtures/verification/receipt.json +31 -0
- package/tests/fixtures/verification/snapshot.json +44 -0
- package/tests/fixtures/vitest/all-passing.json +67 -0
- package/tests/fixtures/vitest/complex-nested-suites.json +98 -0
- package/tests/fixtures/vitest/some-failing.json +98 -0
- package/tests/fixtures/vitest/with-coverage.json +97 -0
- package/tests/fixtures-usage-examples.spec.ts +304 -0
- package/tests/flakeReport.spec.ts +267 -0
- package/tests/frames/ci-gate-integration.spec.ts +331 -0
- package/tests/frames/controller.spec.ts +165 -0
- package/tests/frames/emitter.spec.ts +371 -0
- package/tests/frames/idempotency.spec.ts +177 -0
- package/tests/frames/storage.spec.ts +346 -0
- package/tests/frames/types.spec.ts +249 -0
- package/tests/frames/v2-schema-integration.spec.ts +435 -0
- package/tests/gate-working-directory.spec.ts +204 -0
- package/tests/gateMapping.spec.ts +161 -0
- package/tests/gateReportIntegration.spec.ts +175 -0
- package/tests/gateReportValidation.spec.ts +452 -0
- package/tests/gates/test/adapters/jest-json.spec.ts +372 -0
- package/tests/gates/test/adapters/junit-xml.spec.ts +421 -0
- package/tests/gates/test/adapters/registry.spec.ts +376 -0
- package/tests/gates/test/adapters/vitest-json.spec.ts +455 -0
- package/tests/gates/test/enrichment/failureId.spec.ts +131 -0
- package/tests/gates/test/enrichment/nextActions.spec.ts +365 -0
- package/tests/gates/test/enrichment/rerunTemplates.spec.ts +187 -0
- package/tests/gates/test/enrichment/signature.spec.ts +163 -0
- package/tests/gates/test/enrichment/stackParser.spec.ts +203 -0
- package/tests/gates/turncost-integration.spec.ts +221 -0
- package/tests/gates/validation-integration.spec.ts +147 -0
- package/tests/gates/validator.spec.ts +200 -0
- package/tests/gates.test.ts +255 -0
- package/tests/gatesWithPolicy.hostilityTimeoutAdjustment.spec.ts +156 -0
- package/tests/git-operations-receipts.spec.ts +121 -0
- package/tests/git-operations.test.ts +152 -0
- package/tests/git-runtime.spec.ts +175 -0
- package/tests/github-api.labels.spec.ts +21 -0
- package/tests/github-api.test.ts +85 -0
- package/tests/github-context-diet.spec.ts +441 -0
- package/tests/github-diff-hunks.spec.ts +387 -0
- package/tests/github-integration.spec.ts +774 -0
- package/tests/github-minimal-context.spec.ts +338 -0
- package/tests/github-symbol-map.spec.ts +414 -0
- package/tests/githubClient.spec.ts +123 -0
- package/tests/governance/mcpStatus.spec.ts +276 -0
- package/tests/governance/timeoutAdjustment.spec.ts +149 -0
- package/tests/governance/turnCostSummary.spec.ts +188 -0
- package/tests/governance-retention.spec.ts +151 -0
- package/tests/governance-wrapper-delegation.spec.ts +148 -0
- package/tests/guardrails.spec.ts +860 -0
- package/tests/hash.test.ts +83 -0
- package/tests/helpers/cli.ts +23 -0
- package/tests/helpers/getStd.ts +1 -0
- package/tests/helpers/makeGate.ts +19 -0
- package/tests/helpers/plannerTestHelpers.ts +314 -0
- package/tests/hooks/events.spec.ts +518 -0
- package/tests/hostility/checks.spec.ts +295 -0
- package/tests/hostility/integration.spec.ts +123 -0
- package/tests/hostility/score.spec.ts +175 -0
- package/tests/init.spec.ts +270 -0
- package/tests/integration/hipaa-encryption.spec.ts +148 -0
- package/tests/integration/lex-smoke-test.spec.ts +328 -0
- package/tests/integration-e2e.test.ts +244 -0
- package/tests/integration-matrix.test.ts +409 -0
- package/tests/interPRConflicts.spec.ts +254 -0
- package/tests/interactive-plan-history.spec.ts +255 -0
- package/tests/interactive-plan-review.spec.ts +287 -0
- package/tests/issue-analyzer.spec.ts +593 -0
- package/tests/lexsona-integration.spec.ts +311 -0
- package/tests/localOverlay.spec.ts +203 -0
- package/tests/lockHash.spec.ts +167 -0
- package/tests/mcp-auth-errors.spec.ts +190 -0
- package/tests/mcp-contracts.spec.ts +290 -0
- package/tests/mcp-gates-external-plan.spec.ts +146 -0
- package/tests/mcp-granular-tools.spec.ts +208 -0
- package/tests/mcp-runstore-integration.spec.ts +334 -0
- package/tests/mcp-scope-integration.spec.ts +318 -0
- package/tests/mcp-task-handoff.spec.ts +320 -0
- package/tests/mcp-workflow-guide.spec.ts +53 -0
- package/tests/mcp.test.ts +151 -0
- package/tests/merge-conflict-detection.spec.ts +260 -0
- package/tests/mergeEligibility.test.ts +201 -0
- package/tests/mergeLockHash.spec.ts +158 -0
- package/tests/mergeOrder-with-fixtures.spec.ts +215 -0
- package/tests/mergeOrder.test.ts +108 -0
- package/tests/mergeTreeSimulator.spec.ts +145 -0
- package/tests/metrics/export.spec.ts +446 -0
- package/tests/metrics/turncost.spec.ts +309 -0
- package/tests/metrics-template.spec.ts +137 -0
- package/tests/migrateProfile.spec.ts +254 -0
- package/tests/mis.spec.ts +202 -0
- package/tests/monitoring-audit.spec.ts +181 -0
- package/tests/monitoring-cache.spec.ts +331 -0
- package/tests/monitoring-error-recovery.spec.ts +236 -0
- package/tests/monitoring-errors.spec.ts +193 -0
- package/tests/monitoring-fileLogger.spec.ts +319 -0
- package/tests/monitoring-health.spec.ts +152 -0
- package/tests/monitoring-lock.spec.ts +308 -0
- package/tests/monitoring-logger.spec.ts +157 -0
- package/tests/monitoring-metrics.spec.ts +158 -0
- package/tests/monitoring-profiler.spec.ts +197 -0
- package/tests/orchestration-determinism.spec.ts +204 -0
- package/tests/parseRemote.spec.ts +25 -0
- package/tests/pathResolver.spec.ts +122 -0
- package/tests/paths.spec.ts +68 -0
- package/tests/performance.spec.ts +322 -0
- package/tests/pipeline-determinism.spec.ts +597 -0
- package/tests/plan-tier-integration.spec.ts +184 -0
- package/tests/precedence-resolution.spec.ts +682 -0
- package/tests/preflightConflicts.spec.ts +205 -0
- package/tests/procedures/keystone-policy.spec.ts +296 -0
- package/tests/procedures/loader.spec.ts +585 -0
- package/tests/procedures/pr-review.spec.ts +321 -0
- package/tests/profileResolver.spec.ts +375 -0
- package/tests/progress-indicators.spec.ts +139 -0
- package/tests/promptsResolver.spec.ts +443 -0
- package/tests/public-api.spec.ts +272 -0
- package/tests/query.spec.ts +170 -0
- package/tests/receipts.spec.ts +463 -0
- package/tests/release-prepare.spec.ts +268 -0
- package/tests/report.test.ts +335 -0
- package/tests/resolutionGuidance.spec.ts +160 -0
- package/tests/rotate-secrets-example.spec.ts +198 -0
- package/tests/rulesResolver.spec.ts +232 -0
- package/tests/runGit.spec.ts +229 -0
- package/tests/runner-lifecycle-integration.spec.ts +283 -0
- package/tests/runs/artifacts.spec.ts +367 -0
- package/tests/runs/decisions.spec.ts +495 -0
- package/tests/runs/enforcement.spec.ts +555 -0
- package/tests/runs/failures.spec.ts +554 -0
- package/tests/runs/manager-runstore-integration.spec.ts +455 -0
- package/tests/runs/manager.spec.ts +678 -0
- package/tests/runs-manager.spec.ts +485 -0
- package/tests/safety-acceptance.spec.ts +278 -0
- package/tests/safety-enhanced.spec.ts +329 -0
- package/tests/safety-framework.spec.ts +427 -0
- package/tests/safety-guards-integration.spec.ts +213 -0
- package/tests/safety-integration.spec.ts +278 -0
- package/tests/sarif-parser.spec.ts +148 -0
- package/tests/schema.test.ts +88 -0
- package/tests/schemas/behavior-rule.spec.ts +366 -0
- package/tests/schemas/executorManifest.spec.ts +441 -0
- package/tests/schemas/persona-integration.spec.ts +62 -0
- package/tests/schemas/persona.spec.ts +172 -0
- package/tests/schemas/project.spec.ts +247 -0
- package/tests/schemas/run-store.spec.ts +553 -0
- package/tests/schemas/runCentric.spec.ts +463 -0
- package/tests/schemas/vacuumReadyPrompt.spec.ts +515 -0
- package/tests/scope-github-auto-detection.spec.ts +200 -0
- package/tests/scopeValidator.spec.ts +497 -0
- package/tests/security-authentication.spec.ts +42 -0
- package/tests/security-authorization.spec.ts +350 -0
- package/tests/security-cli.spec.ts +264 -0
- package/tests/security-compliance.spec.ts +334 -0
- package/tests/security-policy.spec.ts +295 -0
- package/tests/security-scanning.spec.ts +349 -0
- package/tests/security-secrets.spec.ts +401 -0
- package/tests/store/create-run-store.spec.ts +185 -0
- package/tests/store/inmemory/run-store.spec.ts +533 -0
- package/tests/store/sqlite/run-store.spec.ts +849 -0
- package/tests/telemetry/frames.spec.ts +120 -0
- package/tests/tiers.spec.ts +466 -0
- package/tests/token-usage.spec.ts +309 -0
- package/tests/toolchain-manifest.spec.ts +145 -0
- package/tests/unified-budget.spec.ts +713 -0
- package/tests/unit/cache/issue-cache.spec.ts +131 -0
- package/tests/unit/fanout/analyzer-integration.spec.ts +398 -0
- package/tests/unit/fanout/analyzer.spec.ts +605 -0
- package/tests/unit/fanout/github-adapter.spec.ts +203 -0
- package/tests/unit/fanout/harvest.spec.ts +93 -0
- package/tests/unit/fanout/monitor.spec.ts +297 -0
- package/tests/unit/fanout/types.spec.ts +308 -0
- package/tests/unit/github/batch-ops.spec.ts +179 -0
- package/tests/unit/learning/counter-example.spec.ts +168 -0
- package/tests/unit/learning/storage.spec.ts +154 -0
- package/tests/unit/preview/constraints.spec.ts +429 -0
- package/tests/unit/runs/attribution.spec.ts +204 -0
- package/tests/unit/schemas/task-contract.spec.ts +483 -0
- package/tests/unit/snapshot/builder.spec.ts +389 -0
- package/tests/unit/verification/engine-verifier.spec.ts +279 -0
- package/tests/unit/weave/authority-evaluator.spec.ts +404 -0
- package/tests/unit/weave/authority-schema.spec.ts +199 -0
- package/tests/unit/weave/auto-undraft-integration.spec.ts +349 -0
- package/tests/unit/weave/copilot-completion.spec.ts +182 -0
- package/tests/unit/weave/d1-executor.spec.ts +269 -0
- package/tests/unit/weave/d2-executor.spec.ts +334 -0
- package/tests/unit/weave/fanout-generator.spec.ts +365 -0
- package/tests/unit/weave/fanout-matcher.spec.ts +320 -0
- package/tests/unit/weave/fanout-schema.spec.ts +221 -0
- package/tests/unit/weave/mergeWeaveSequential.spec.ts +268 -0
- package/tests/unit/weave/metrics-calculator.spec.ts +212 -0
- package/tests/unit/weave/metrics-logger.spec.ts +233 -0
- package/tests/unit/weave/metrics-schema.spec.ts +383 -0
- package/tests/unit/weave/multi-repo-plan.spec.ts +221 -0
- package/tests/unit/weave/planner.spec.ts +227 -0
- package/tests/unit/weave/post-merge-checks.spec.ts +342 -0
- package/tests/unit/weave/recovery.spec.ts +306 -0
- package/tests/unit/weave/testfix/applier.spec.ts +364 -0
- package/tests/unit/weave/testfix/e2e.spec.ts +273 -0
- package/tests/unit/weave/testfix/integration.spec.ts +128 -0
- package/tests/unit/weave/testfix/matcher.spec.ts +321 -0
- package/tests/unit/weave/testfix/schema.spec.ts +298 -0
- package/tests/utils/fingerprint.spec.ts +251 -0
- package/tests/utils/paths.spec.ts +284 -0
- package/tests/utils/tokens.spec.ts +210 -0
- package/tests/utils/validation.spec.ts +215 -0
- package/tests/utils-validation.spec.ts +80 -0
- package/tests/validate-manifests.spec.ts +231 -0
- package/tests/validation.spec.ts +501 -0
- package/tests/vuln-gate.spec.ts +341 -0
- package/tests/weave/adr007-integration.spec.ts +309 -0
- package/tests/weave/checkpoint/cli-integration.spec.ts +118 -0
- package/tests/weave/checkpoint/storage.spec.ts +302 -0
- package/tests/weave/checkpoint/utils.spec.ts +223 -0
- package/tests/weave/frameHelper.spec.ts +423 -0
- package/tests/weave/gateFailureHandler.spec.ts +249 -0
- package/tests/weave/lockFile.spec.ts +387 -0
- package/tests/weave/mergeHelpers.spec.ts +173 -0
- package/tests/weave/receiptHelper.spec.ts +261 -0
- package/tests/weave/stateMachine.spec.ts +436 -0
- package/tests/weave-contract.test.ts +517 -0
- package/tests/weave-e2e.spec.ts +279 -0
- package/tests/weaveLock.spec.ts +136 -0
- package/tests/workflow-state-machine.spec.ts +274 -0
- package/tests/write-protection.spec.ts +213 -0
- package/tsconfig.json +18 -0
- package/tsup.config.ts +12 -0
- package/vitest.benchmark.config.ts +17 -0
- package/vitest.config.ts +28 -0
- package/vitest.git.config.ts +12 -0
- 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";
|