agentic-qe 3.9.8 → 3.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/_shared/executor-preamble.md +86 -0
- package/.claude/agents/v3/qe-coverage-specialist.md +20 -1
- package/.claude/agents/v3/qe-fleet-commander.md +20 -1
- package/.claude/agents/v3/qe-pentest-validator.md +20 -1
- package/.claude/agents/v3/qe-queen-coordinator.md +20 -1
- package/.claude/agents/v3/qe-risk-assessor.md +20 -1
- package/.claude/agents/v3/qe-root-cause-analyzer.md +19 -0
- package/.claude/agents/v3/qe-security-auditor.md +20 -1
- package/.claude/agents/v3/qe-test-architect.md +33 -1
- package/.claude/helpers/advisor-call.cjs +283 -0
- package/.claude/skills/README.md +4 -3
- package/.claude/skills/a11y-ally/SKILL.md +40 -18
- package/.claude/skills/accessibility-testing/SKILL.md +4 -0
- package/.claude/skills/compatibility-testing/SKILL.md +23 -0
- package/.claude/skills/e2e-flow-verifier/SKILL.md +87 -52
- package/.claude/skills/enterprise-integration-testing/SKILL.md +4 -0
- package/.claude/skills/localization-testing/SKILL.md +14 -0
- package/.claude/skills/observability-testing-patterns/SKILL.md +16 -0
- package/.claude/skills/qe-browser/SKILL.md +409 -0
- package/.claude/skills/qe-browser/evals/qe-browser.yaml +291 -0
- package/.claude/skills/qe-browser/fixtures/package.json +7 -0
- package/.claude/skills/qe-browser/fixtures/serve-skills.js +130 -0
- package/.claude/skills/qe-browser/references/assertion-kinds.md +132 -0
- package/.claude/skills/qe-browser/references/migration-from-playwright.md +195 -0
- package/.claude/skills/qe-browser/schemas/output.json +188 -0
- package/.claude/skills/qe-browser/scripts/assert.js +378 -0
- package/.claude/skills/qe-browser/scripts/batch.js +292 -0
- package/.claude/skills/qe-browser/scripts/check-injection.js +267 -0
- package/.claude/skills/qe-browser/scripts/intent-score.js +325 -0
- package/.claude/skills/qe-browser/scripts/lib/vibium.js +330 -0
- package/.claude/skills/qe-browser/scripts/package.json +7 -0
- package/.claude/skills/qe-browser/scripts/smoke-test.sh +212 -0
- package/.claude/skills/qe-browser/scripts/validate-config.json +46 -0
- package/.claude/skills/qe-browser/scripts/visual-diff.js +276 -0
- package/.claude/skills/qe-visual-accessibility/SKILL.md +31 -1
- package/.claude/skills/security-visual-testing/SKILL.md +18 -0
- package/.claude/skills/skills-manifest.json +20 -13
- package/.claude/skills/testability-scoring/SKILL.md +23 -0
- package/.claude/skills/trust-tier-manifest.json +14 -3
- package/.claude/skills/visual-testing-advanced/SKILL.md +41 -1
- package/CHANGELOG.md +75 -0
- package/README.md +5 -3
- package/assets/agents/v3/helpers/advisor-call.cjs +283 -0
- package/assets/agents/v3/qe-coverage-specialist.md +20 -1
- package/assets/agents/v3/qe-fleet-commander.md +20 -1
- package/assets/agents/v3/qe-pentest-validator.md +20 -1
- package/assets/agents/v3/qe-queen-coordinator.md +20 -1
- package/assets/agents/v3/qe-risk-assessor.md +20 -1
- package/assets/agents/v3/qe-root-cause-analyzer.md +19 -0
- package/assets/agents/v3/qe-security-auditor.md +20 -1
- package/assets/agents/v3/qe-test-architect.md +33 -1
- package/assets/skills/README.md +4 -3
- package/assets/skills/a11y-ally/SKILL.md +40 -18
- package/assets/skills/accessibility-testing/SKILL.md +4 -0
- package/assets/skills/compatibility-testing/SKILL.md +23 -0
- package/assets/skills/e2e-flow-verifier/SKILL.md +87 -52
- package/assets/skills/enterprise-integration-testing/SKILL.md +4 -0
- package/assets/skills/localization-testing/SKILL.md +14 -0
- package/assets/skills/observability-testing-patterns/SKILL.md +16 -0
- package/assets/skills/qe-browser/SKILL.md +409 -0
- package/assets/skills/qe-browser/evals/qe-browser.yaml +291 -0
- package/assets/skills/qe-browser/fixtures/package.json +7 -0
- package/assets/skills/qe-browser/fixtures/serve-skills.js +130 -0
- package/assets/skills/qe-browser/references/assertion-kinds.md +132 -0
- package/assets/skills/qe-browser/references/migration-from-playwright.md +195 -0
- package/assets/skills/qe-browser/schemas/output.json +188 -0
- package/assets/skills/qe-browser/scripts/assert.js +378 -0
- package/assets/skills/qe-browser/scripts/batch.js +292 -0
- package/assets/skills/qe-browser/scripts/check-injection.js +267 -0
- package/assets/skills/qe-browser/scripts/intent-score.js +325 -0
- package/assets/skills/qe-browser/scripts/lib/vibium.js +330 -0
- package/assets/skills/qe-browser/scripts/package.json +7 -0
- package/assets/skills/qe-browser/scripts/smoke-test.sh +212 -0
- package/assets/skills/qe-browser/scripts/validate-config.json +46 -0
- package/assets/skills/qe-browser/scripts/visual-diff.js +276 -0
- package/assets/skills/qe-visual-accessibility/SKILL.md +31 -1
- package/assets/skills/security-visual-testing/SKILL.md +18 -0
- package/assets/skills/skills-manifest.json +211 -15
- package/assets/skills/testability-scoring/SKILL.md +23 -0
- package/assets/skills/trust-tier-manifest.json +14 -3
- package/assets/skills/visual-testing-advanced/SKILL.md +41 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-IKCDCMSI.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-LAE4NTVX.js → agent-booster-wasm-HM4XSABF.js} +2 -2
- package/dist/cli/chunks/{agent-handler-FVXHR6XN.js → agent-handler-UDBDLLO4.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-Q7LLBA7C.js → agent-memory-branch-VIXQ3DAR.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-W4WW7SQW.js +2 -0
- package/dist/cli/chunks/{audit-YRLKHJLX.js → audit-FWTGLQHH.js} +2 -2
- package/dist/cli/chunks/base-UQKFTHOY.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-XFGOGICB.js → better-sqlite3-TYI3CCWU.js} +2 -2
- package/dist/cli/chunks/{brain-handler-KIUSNVSS.js → brain-handler-45ZGBLSB.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-VKZ4L3FH.js → branch-enumerator-ZBXELCQA.js} +2 -2
- package/dist/cli/chunks/{browser-GZVIYFIB.js → browser-2KM5IKEX.js} +2 -2
- package/dist/cli/chunks/browser-workflow-NMOEM3HW.js +2 -0
- package/dist/cli/chunks/{chunk-7PHNHFZI.js → chunk-226DSROQ.js} +3 -3
- package/dist/cli/chunks/{chunk-MGX2BZWE.js → chunk-27B575K6.js} +2 -2
- package/dist/cli/chunks/{chunk-P7APAQD6.js → chunk-2IJFZW3N.js} +12 -12
- package/dist/cli/chunks/{chunk-TWDWDKOI.js → chunk-32OB4ZYQ.js} +1 -1
- package/dist/cli/chunks/{chunk-E4D36LGH.js → chunk-335CCAOL.js} +1 -1
- package/dist/cli/chunks/{chunk-Q5PARJC6.js → chunk-34WI4QNF.js} +2 -2
- package/dist/cli/chunks/chunk-3A4BL62O.js +2 -0
- package/dist/cli/chunks/{chunk-6ZMM7MXA.js → chunk-3AG647MY.js} +2 -2
- package/dist/cli/chunks/{chunk-LPRHYSXN.js → chunk-3HIDCXW3.js} +1 -1
- package/dist/cli/chunks/{chunk-HN7HYUW6.js → chunk-4EKWEDHA.js} +9 -9
- package/dist/cli/chunks/{chunk-JCROLOP6.js → chunk-4FU6YNDP.js} +2 -2
- package/dist/cli/chunks/{chunk-A4DJMFDM.js → chunk-4LOJJ4VX.js} +1 -1
- package/dist/cli/chunks/{chunk-I25KIHQE.js → chunk-4VOGUZW5.js} +1 -1
- package/dist/cli/chunks/{chunk-KJZU3E5G.js → chunk-4ZR5G4MZ.js} +2 -2
- package/dist/cli/chunks/{chunk-W45FANJG.js → chunk-52ZHPZVX.js} +2 -2
- package/dist/cli/chunks/{chunk-LOANEFGZ.js → chunk-53G3OCGS.js} +2 -2
- package/dist/cli/chunks/{chunk-TZMKO6PC.js → chunk-54TZA65H.js} +2 -2
- package/dist/cli/chunks/{chunk-GHJRX7PV.js → chunk-5QKTLOGO.js} +1 -1
- package/dist/cli/chunks/{chunk-76UL224Z.js → chunk-5TATJQ3Z.js} +2 -2
- package/dist/cli/chunks/{chunk-OGFGNAKQ.js → chunk-5V6DRRLO.js} +2 -2
- package/dist/cli/chunks/{chunk-BXMIQRF3.js → chunk-6X7WKNDF.js} +2 -2
- package/dist/cli/chunks/chunk-7FWZHYYE.js +2 -0
- package/dist/cli/chunks/{chunk-R2LWLZ3Y.js → chunk-A2ULGMMG.js} +1 -1
- package/dist/cli/chunks/{chunk-AVKDT3UL.js → chunk-A53XKLEA.js} +8 -8
- package/dist/cli/chunks/{chunk-GOPE5OB5.js → chunk-A5OIXFFL.js} +1 -1
- package/dist/cli/chunks/{chunk-I7OH6RAC.js → chunk-ACNL4NFI.js} +2 -2
- package/dist/cli/chunks/{chunk-PBPOSPTY.js → chunk-AE6Y5CNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-TN72MXLI.js → chunk-AO4HDN62.js} +2 -2
- package/dist/cli/chunks/{chunk-IHJXFWUL.js → chunk-AOA454FC.js} +2 -2
- package/dist/cli/chunks/{chunk-N2L7RWNX.js → chunk-B2QVWL5R.js} +2 -2
- package/dist/cli/chunks/{chunk-7CFEGUEH.js → chunk-B3L3CT4X.js} +2 -2
- package/dist/cli/chunks/{chunk-XVXSQOQG.js → chunk-B4AFVIOA.js} +2 -2
- package/dist/cli/chunks/{chunk-S72TSJS4.js → chunk-BCSCJBYQ.js} +2 -2
- package/dist/cli/chunks/{chunk-UAI5NPPQ.js → chunk-BIV6HWMT.js} +2 -2
- package/dist/cli/chunks/{chunk-XPL3BXLM.js → chunk-BNNH3KZP.js} +1 -1
- package/dist/cli/chunks/{chunk-JK6JBNGL.js → chunk-C234RGWZ.js} +2 -2
- package/dist/cli/chunks/{chunk-4EAAHMVM.js → chunk-C55GEYDA.js} +2 -2
- package/dist/cli/chunks/{chunk-Y67OXEUM.js → chunk-CEBZHZ4O.js} +1 -1
- package/dist/cli/chunks/{chunk-A2QLTNN5.js → chunk-CFQHIWWH.js} +1 -1
- package/dist/cli/chunks/{chunk-KMGAJRQ6.js → chunk-CJO2V2FB.js} +1 -1
- package/dist/cli/chunks/{chunk-5TGK7VTS.js → chunk-CQNXIYQW.js} +2 -2
- package/dist/cli/chunks/{chunk-IP2Z4Z6X.js → chunk-D2A4TGZY.js} +1 -1
- package/dist/cli/chunks/{chunk-VVNR4R22.js → chunk-DG2OYKUQ.js} +2 -2
- package/dist/cli/chunks/{chunk-ELZ5SKEN.js → chunk-DPYCHODC.js} +2 -2
- package/dist/cli/chunks/{chunk-WUCWFDBE.js → chunk-E4YKNKQL.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCKNGICX.js → chunk-EEWTTYRC.js} +1 -1
- package/dist/cli/chunks/{chunk-IFIYNCT2.js → chunk-EGIYLRW5.js} +2 -2
- package/dist/cli/chunks/{chunk-DLKRK2GU.js → chunk-EHGTNSJ2.js} +1 -1
- package/dist/cli/chunks/{chunk-IIYXSWJN.js → chunk-EJNASXOY.js} +2 -2
- package/dist/cli/chunks/{chunk-ZJ4PMOIZ.js → chunk-F7HRGQRS.js} +2 -2
- package/dist/cli/chunks/{chunk-2QI5RYVR.js → chunk-FF7TSDO4.js} +2 -2
- package/dist/cli/chunks/{chunk-DDDEGBBJ.js → chunk-FIQNVPYY.js} +2 -2
- package/dist/cli/chunks/{chunk-F5VLJFVU.js → chunk-FJOBKT7N.js} +1 -1
- package/dist/cli/chunks/{chunk-JNJYWWBG.js → chunk-FYI52MFF.js} +6 -6
- package/dist/cli/chunks/{chunk-UOSKMAAY.js → chunk-GCNTU3QJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4GMV6Z7Y.js → chunk-H56YBNXW.js} +2 -2
- package/dist/cli/chunks/{chunk-HTL2WT64.js → chunk-HJMLJNCB.js} +1 -1
- package/dist/cli/chunks/chunk-I3IRIJOT.js +2 -0
- package/dist/cli/chunks/chunk-IEQ2VYMO.js +3 -0
- package/dist/cli/chunks/{chunk-PG7CZ6Q4.js → chunk-IGRKFVFD.js} +2 -2
- package/dist/cli/chunks/{chunk-SQ6XZGR4.js → chunk-IJPE6OGD.js} +10 -10
- package/dist/cli/chunks/{chunk-AYKMWP7F.js → chunk-IJUL2UMO.js} +1 -1
- package/dist/cli/chunks/{chunk-JVH7753D.js → chunk-ISZJAZ2D.js} +1 -1
- package/dist/cli/chunks/{chunk-NCXVOOA7.js → chunk-ITDYTODU.js} +2 -2
- package/dist/cli/chunks/{chunk-RGCCSAHI.js → chunk-JHUEBBSX.js} +2 -2
- package/dist/cli/chunks/{chunk-TDPHLQ2M.js → chunk-JN3CC2TX.js} +2 -2
- package/dist/cli/chunks/{chunk-TSDTRJOG.js → chunk-JOEEGNNX.js} +2 -2
- package/dist/cli/chunks/{chunk-QVGSD25D.js → chunk-JQX2DHQT.js} +1 -1
- package/dist/cli/chunks/{chunk-VHZ653XS.js → chunk-JRG4AFUR.js} +3 -3
- package/dist/cli/chunks/{chunk-SP3ZBJ63.js → chunk-JRMNQWRL.js} +3 -3
- package/dist/cli/chunks/{chunk-EKDFIYV5.js → chunk-JXDJMVIG.js} +2 -2
- package/dist/cli/chunks/{chunk-3WOQMFTD.js → chunk-JYPW22JV.js} +2 -2
- package/dist/cli/chunks/{chunk-WJDOOT2M.js → chunk-KK3KVYE7.js} +2 -2
- package/dist/cli/chunks/{chunk-4KX6TMKB.js → chunk-KSRAA6ZD.js} +3 -3
- package/dist/cli/chunks/chunk-KUCU5ML6.js +6 -0
- package/dist/cli/chunks/{chunk-MVW7AACO.js → chunk-KXXLMLMJ.js} +2 -2
- package/dist/cli/chunks/{chunk-HE2NWYHK.js → chunk-LKCFJC4Q.js} +1 -1
- package/dist/cli/chunks/{chunk-237NNDKL.js → chunk-LODXDV4G.js} +2 -2
- package/dist/cli/chunks/{chunk-W4IRWGGR.js → chunk-M4CYXAVP.js} +4 -4
- package/dist/cli/chunks/{chunk-R4VOIXJQ.js → chunk-MOLMS6MA.js} +2 -2
- package/dist/cli/chunks/{chunk-SDMGF3KD.js → chunk-NBTM2J4B.js} +2 -2
- package/dist/cli/chunks/{chunk-X66IXWSO.js → chunk-NIFVFUCU.js} +2 -2
- package/dist/cli/chunks/{chunk-266SKKFM.js → chunk-OOHKW3UE.js} +2 -2
- package/dist/cli/chunks/{chunk-WXEDVKJS.js → chunk-ORA6NIXN.js} +2 -2
- package/dist/cli/chunks/{chunk-ECYDMBDA.js → chunk-OSD55UO7.js} +2 -2
- package/dist/cli/chunks/{chunk-SSURIMCL.js → chunk-OWQRMH3G.js} +2 -2
- package/dist/cli/chunks/chunk-QFUINEBN.js +2 -0
- package/dist/cli/chunks/{chunk-HYACMUUR.js → chunk-RE2IBX7Z.js} +2 -2
- package/dist/cli/chunks/{chunk-2V5VKOJ2.js → chunk-RMQQ5UHM.js} +2 -2
- package/dist/cli/chunks/{chunk-U62WL3WZ.js → chunk-ROEMVTXC.js} +3 -3
- package/dist/cli/chunks/{chunk-YOKRSFGA.js → chunk-SMTAZQJ3.js} +2 -2
- package/dist/cli/chunks/{chunk-OZTSMI7P.js → chunk-TO4NGP3E.js} +1 -1
- package/dist/cli/chunks/{chunk-LFEBTWFS.js → chunk-TTXYZUTQ.js} +2 -2
- package/dist/cli/chunks/{chunk-IZTUAI5T.js → chunk-U4NODKRR.js} +2 -2
- package/dist/cli/chunks/{chunk-JD3GH47Z.js → chunk-U635PSAW.js} +2 -2
- package/dist/cli/chunks/{chunk-6DBYVKGA.js → chunk-UBT7VCKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-YSUMQBMY.js → chunk-UETM5XDO.js} +1 -1
- package/dist/cli/chunks/{chunk-BZB5D4BO.js → chunk-URXG7FMO.js} +4 -3
- package/dist/cli/chunks/{chunk-M2JBQVBP.js → chunk-VIWDVS24.js} +2 -2
- package/dist/cli/chunks/{chunk-6A4FEIE2.js → chunk-VNKCUKUJ.js} +3 -3
- package/dist/cli/chunks/{chunk-6KWX7A3R.js → chunk-VXIXHZCN.js} +2 -2
- package/dist/cli/chunks/{chunk-YIJDCZVX.js → chunk-WFEXEDMC.js} +2 -2
- package/dist/cli/chunks/{chunk-CG3HIYF4.js → chunk-WLX57ULC.js} +2 -2
- package/dist/cli/chunks/{chunk-FKODRXOU.js → chunk-WVQZGLCT.js} +2 -2
- package/dist/cli/chunks/{chunk-677V67MR.js → chunk-WW5DZ6BU.js} +1 -1
- package/dist/cli/chunks/{chunk-7L64UC5U.js → chunk-X364AIY6.js} +1 -1
- package/dist/cli/chunks/{chunk-UGJNR52C.js → chunk-XH7D6EGE.js} +1 -1
- package/dist/cli/chunks/{chunk-66DCG6RO.js → chunk-XICRAXUR.js} +4 -4
- package/dist/cli/chunks/{chunk-ETXK25IY.js → chunk-XMAV7AIC.js} +1 -1
- package/dist/cli/chunks/{chunk-NHXFAXEV.js → chunk-XSUPK7FI.js} +1 -1
- package/dist/cli/chunks/{chunk-3ZAGYTEC.js → chunk-XSWOB74I.js} +2 -2
- package/dist/cli/chunks/chunk-YPIZMTTA.js +14 -0
- package/dist/cli/chunks/{chunk-YDW522M7.js → chunk-YT6KBEXE.js} +2 -2
- package/dist/cli/chunks/{chunk-P2H5ARHM.js → chunk-ZENLP5LF.js} +1 -1
- package/dist/cli/chunks/{ci-A5ZXOEC4.js → ci-WS32HBBS.js} +2 -2
- package/dist/cli/chunks/{ci-output-S47BMRYC.js → ci-output-67R5MSLL.js} +2 -2
- package/dist/cli/chunks/circuit-breaker-MA562FT7.js +2 -0
- package/dist/cli/chunks/{claude-flow-setup-F5WBEBVK.js → claude-flow-setup-4QKGSRS7.js} +2 -2
- package/dist/cli/chunks/client-XQGZKXOB.js +2 -0
- package/dist/cli/chunks/{cline-installer-HLKR4QDR.js → cline-installer-6VSROHRY.js} +2 -2
- package/dist/cli/chunks/{code-MTZWS6JT.js → code-FBPBHVV3.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-BALTZ2WQ.js → code-index-extractor-62F622V2.js} +2 -2
- package/dist/cli/chunks/{codex-installer-LI2VIGET.js → codex-installer-LSR6DVCU.js} +2 -2
- package/dist/cli/chunks/{completions-TOF4GTNF.js → completions-56QOICBN.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-IPFXIT6T.js → complexity-analyzer-SDH4NWIS.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-KWI66RBI.js → continuedev-installer-S7ZPL3VC.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-REFOE6UF.js → copilot-installer-25GNNKNL.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-M2MZQXCN.js → cost-tracker-73J4Y2RS.js} +2 -2
- package/dist/cli/chunks/{coverage-UR2XSJCR.js → coverage-WEE2AZ5F.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-C2ZFCSXJ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-X4PXCVYH.js → cursor-installer-DHQ644T3.js} +2 -2
- package/dist/cli/chunks/{daemon-5R6ZEEBB.js → daemon-3WUJ5E3X.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-RUY2RJZA.js → dag-attention-scheduler-IRLAM43H.js} +2 -2
- package/dist/cli/chunks/{detect-PX2AYBHM.js → detect-DTSB4T4R.js} +2 -2
- package/dist/cli/chunks/{domain-handler-5JXWEO3E.js → domain-handler-DDN2Z5XC.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-6M2YLBJY.js → domain-transfer-3RRG4S6R.js} +2 -2
- package/dist/cli/chunks/dream-JSZZ67OO.js +2 -0
- package/dist/cli/chunks/esm-node-X4TES6NX.js +2 -0
- package/dist/cli/chunks/{eval-L6ZBG462.js → eval-UXEP425X.js} +2 -2
- package/dist/cli/chunks/{fast-paths-WIFDALFK.js → fast-paths-4XLHS2VN.js} +2 -2
- package/dist/cli/chunks/{feature-flags-YLBXFUCN.js → feature-flags-6C2HD76K.js} +2 -2
- package/dist/cli/chunks/{feature-flags-GRHF5MTK.js → feature-flags-KXXHAEYF.js} +2 -2
- package/dist/cli/chunks/{file-discovery-4HXUB4HN.js → file-discovery-YSDUIZO4.js} +2 -2
- package/dist/cli/chunks/{fleet-RPLJXOEP.js → fleet-TYDG5DWK.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-2D5IOGAT.js → gnn-wrapper-GJVYRPHB.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-D5SWZZGA.js → heartbeat-handler-X63CM35O.js} +4 -4
- package/dist/cli/chunks/{heartbeat-scheduler-WSG4Y3M2.js → heartbeat-scheduler-NYH4CMVM.js} +2 -2
- package/dist/cli/chunks/hnsw-adapter-SQCVEHB5.js +2 -0
- package/dist/cli/chunks/hnsw-index-UGVC5IDK.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-UH6RWE74.js → hnsw-legacy-bridge-YDVUZTJI.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-BJ4ZJPMP.js → hnswlib-node-TLBDFWA6.js} +2 -2
- package/dist/cli/chunks/{hooks-KGDQNB5T.js → hooks-B6PVGP7D.js} +6 -6
- package/dist/cli/chunks/hybrid-router-YZEBKUZJ.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-LARQCK7V.js → hypergraph-engine-OQ2ZEG53.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-RACF4AOX.js → hypergraph-handler-VPD424MI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-ZIXSRWED.js +2 -0
- package/dist/cli/chunks/{init-handler-64AOFMJD.js → init-handler-5WYP6NJW.js} +6 -6
- package/dist/cli/chunks/init-wizard-MO6PCXPX.js +2 -0
- package/dist/cli/chunks/kernel-P54KQB2F.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-4ICIP6QN.js → kilocode-installer-YVY4EVMY.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-J2GOV2OB.js → kiro-installer-GNT4BN3A.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-GU57FQAQ.js +2 -0
- package/dist/cli/chunks/{learning-QD4JVH3K.js → learning-LD2RSBRS.js} +3 -3
- package/dist/cli/chunks/llm-router-ALKXFKLQ.js +36 -0
- package/dist/cli/chunks/{load-EXKUJMBK.js → load-XAOTGZYB.js} +2 -2
- package/dist/cli/chunks/load-test-5RFBTSS7.js +2 -0
- package/dist/cli/chunks/{mcp-NSNDZSMH.js → mcp-WDAJHGH4.js} +2 -2
- package/dist/cli/chunks/{memory-63JTNVZN.js → memory-M7QD57JD.js} +5 -5
- package/dist/cli/chunks/memory-backend-GPOP3IR4.js +2 -0
- package/dist/cli/chunks/memory-handlers-2NHGZLQM.js +2 -0
- package/dist/cli/chunks/multi-model-executor-2XZQK2IN.js +14 -0
- package/dist/cli/chunks/{opencode-installer-244LFSPN.js → opencode-installer-ASCVY3GG.js} +2 -2
- package/dist/cli/chunks/{orchestrator-TZB457J6.js → orchestrator-GOZICWN3.js} +22 -19
- package/dist/cli/chunks/{pipeline-YLBD2Z5Q.js → pipeline-YHQRJWV3.js} +2 -2
- package/dist/cli/chunks/{platform-53PWFZSE.js → platform-4NESYFHN.js} +2 -2
- package/dist/cli/chunks/{plugin-6GUQEFJU.js → plugin-E24I2RVB.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-VCOK7FV5.js → prime-radiant-advanced-wasm-CDVSLR7R.js} +2 -2
- package/dist/cli/chunks/protocol-executor-M5IONISJ.js +2 -0
- package/dist/cli/chunks/{protocol-handler-25UEGTE2.js → protocol-handler-TGTDKSZB.js} +2 -2
- package/dist/cli/chunks/{prove-CTOU5F6G.js → prove-WUKDAMSE.js} +2 -2
- package/dist/cli/chunks/provider-manager-BTKK6W7M.js +24 -0
- package/dist/cli/chunks/qe-reasoning-bank-WIEXCBVE.js +2 -0
- package/dist/cli/chunks/{quality-PB7H5UEF.js → quality-RTIOIS2K.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-ZFK6DANW.js +2 -0
- package/dist/cli/chunks/{real-embeddings-RWWYCIE5.js → real-embeddings-4JJKAEMO.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-U4AGYVKL.js → roocode-installer-XU2IXRBM.js} +2 -2
- package/dist/cli/chunks/router-TOFBEI2Q.js +2 -0
- package/dist/cli/chunks/routing-feedback-RC2VDP6W.js +2 -0
- package/dist/cli/chunks/{routing-handler-NTDKDEBE.js → routing-handler-3KBOCIEN.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-RQKOLQSW.js → ruvector-commands-HHE2ZPX7.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-6EZ7S7OG.js → rvf-dual-writer-GAWM2BUZ.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-EBTV6FV2.js → rvf-migration-adapter-HQPEC4BN.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-MERU7VLY.js → rvf-migration-coordinator-A4K45EFU.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-ZOQDH3JY.js +2 -0
- package/dist/cli/chunks/safe-db-RIP3X32S.js +2 -0
- package/dist/cli/chunks/schedule-Q6KZRLWS.js +2 -0
- package/dist/cli/chunks/scheduler-SJO5QPAU.js +2 -0
- package/dist/cli/chunks/{security-JPDLGHMC.js → security-UIKUNOXB.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-JJCR3AWU.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-7OGLQE5Y.js → shared-rvf-dual-writer-ZUWSLFPH.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-HK2S6XAI.js +2 -0
- package/dist/cli/chunks/{status-handler-3TI3DHEL.js → status-handler-E3VSWGA6.js} +2 -2
- package/dist/cli/chunks/{structural-health-WCZKXVWS.js → structural-health-Y22H4BOU.js} +2 -2
- package/dist/cli/chunks/{sync-AM5T4GYO.js → sync-CA4KWZFS.js} +2 -2
- package/dist/cli/chunks/{task-handler-VHDTXPVP.js → task-handler-3EZPIAMD.js} +2 -2
- package/dist/cli/chunks/task-handlers-6UVAQAGP.js +2 -0
- package/dist/cli/chunks/{test-G6P5XGHM.js → test-Q5DOFSJI.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-37RBUN4E.js → test-scheduling-BSXWCIMQ.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-XGEZU2CS.js +2 -0
- package/dist/cli/chunks/{token-usage-5XGVBLFR.js → token-usage-BZX5TCG6.js} +2 -2
- package/dist/cli/chunks/{transformers-JTKWAZJU.js → transformers-7ITQPXAU.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-KW2GWIIQ.js → tree-sitter-wasm-parser-ZYBBNYR3.js} +2 -2
- package/dist/cli/chunks/{types-7R72BACI.js → types-ACZ5VVRC.js} +2 -2
- package/dist/cli/chunks/unified-memory-EXO6WK33.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-7HPSTFVV.js +2 -0
- package/dist/cli/chunks/unified-persistence-WC3O4WOJ.js +2 -0
- package/dist/cli/chunks/{validate-TYB4ZTUL.js → validate-IQL6OVXD.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-3TFI6PLT.js → validate-swarm-J52J2K5X.js} +2 -2
- package/dist/cli/chunks/{vibium-3YELURJT.js → vibium-XSE76PXE.js} +2 -2
- package/dist/cli/chunks/visual-security-COW3OCEE.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-7Q77A27Y.js → web-tree-sitter-YM6QXUIY.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-ASARRM2X.js → windsurf-installer-M27DVL4H.js} +2 -2
- package/dist/cli/chunks/{witness-chain-WZ6PNXEY.js → witness-chain-NB5LP73S.js} +2 -2
- package/dist/cli/chunks/witness-chain-XQXF3RSP.js +2 -0
- package/dist/cli/chunks/{workflow-JDTEE6TY.js → workflow-5DODQ6XS.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-HSIZEKZM.js +2 -0
- package/dist/cli/chunks/{wrappers-X7WZLBZD.js → wrappers-K7HHCIYD.js} +2 -2
- package/dist/cli/commands/llm-router.js +252 -0
- package/dist/coordination/queen-task-management.js +8 -1
- package/dist/init/browser-engine-installer.d.ts +60 -0
- package/dist/init/browser-engine-installer.js +92 -0
- package/dist/init/init-wizard-steps.js +9 -0
- package/dist/init/phases/09-assets.d.ts +2 -0
- package/dist/init/phases/09-assets.js +65 -0
- package/dist/init/phases/12-verification.js +8 -0
- package/dist/init/skills-installer.js +1 -0
- package/dist/kernel/unified-memory-schemas.d.ts +1 -1
- package/dist/kernel/unified-memory-schemas.js +2 -1
- package/dist/mcp/bundle.js +47 -44
- package/dist/mcp/protocol-server.js +87 -0
- package/dist/routing/advisor/circuit-breaker.d.ts +56 -0
- package/dist/routing/advisor/circuit-breaker.js +128 -0
- package/dist/routing/advisor/domain-prompts.d.ts +14 -0
- package/dist/routing/advisor/domain-prompts.js +53 -0
- package/dist/routing/advisor/index.d.ts +10 -0
- package/dist/routing/advisor/index.js +9 -0
- package/dist/routing/advisor/multi-model-executor.d.ts +60 -0
- package/dist/routing/advisor/multi-model-executor.js +176 -0
- package/dist/routing/advisor/redaction.d.ts +40 -0
- package/dist/routing/advisor/redaction.js +187 -0
- package/dist/routing/advisor/types.d.ts +101 -0
- package/dist/routing/advisor/types.js +9 -0
- package/dist/routing/queen-integration.d.ts +3 -0
- package/dist/routing/queen-integration.js +7 -1
- package/dist/routing/routing-feedback.d.ts +7 -1
- package/dist/routing/routing-feedback.js +57 -11
- package/dist/routing/tiny-dancer-router.d.ts +35 -1
- package/dist/routing/tiny-dancer-router.js +33 -0
- package/dist/routing/types.d.ts +12 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-D4XQUIJD.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-CGIWYLIP.js +0 -2
- package/dist/cli/chunks/base-BYVP2STR.js +0 -2
- package/dist/cli/chunks/browser-workflow-PC4N5TKL.js +0 -2
- package/dist/cli/chunks/chunk-2K3DJ3EK.js +0 -7
- package/dist/cli/chunks/chunk-JBQ4WGB4.js +0 -14
- package/dist/cli/chunks/chunk-OT4JADWW.js +0 -2
- package/dist/cli/chunks/client-56BU3GAX.js +0 -2
- package/dist/cli/chunks/cross-domain-router-XQT52BTB.js +0 -2
- package/dist/cli/chunks/dream-LFZCN5WK.js +0 -2
- package/dist/cli/chunks/esm-node-EBDIEPKS.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BMXTVGZB.js +0 -2
- package/dist/cli/chunks/hnsw-index-YX6XLICT.js +0 -2
- package/dist/cli/chunks/impact-analyzer-MGSI2WBK.js +0 -2
- package/dist/cli/chunks/init-wizard-TBDWRRMC.js +0 -2
- package/dist/cli/chunks/kernel-NV7TO2FK.js +0 -2
- package/dist/cli/chunks/knowledge-graph-7REGYH6A.js +0 -2
- package/dist/cli/chunks/llm-router-4K4IT2PQ.js +0 -30
- package/dist/cli/chunks/load-test-RYQK44TT.js +0 -2
- package/dist/cli/chunks/memory-backend-3EBE2DEX.js +0 -2
- package/dist/cli/chunks/memory-handlers-2335MVQJ.js +0 -2
- package/dist/cli/chunks/protocol-executor-MR37S7GX.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-DANGLPTH.js +0 -2
- package/dist/cli/chunks/queen-coordinator-4YJPYF5F.js +0 -2
- package/dist/cli/chunks/router-F4IPY4RQ.js +0 -2
- package/dist/cli/chunks/routing-feedback-VGHFIJ5S.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-2P75WF5A.js +0 -2
- package/dist/cli/chunks/safe-db-47NEO2RS.js +0 -2
- package/dist/cli/chunks/schedule-L5GJW25Z.js +0 -2
- package/dist/cli/chunks/scheduler-NGGGSZMO.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-NKNTYGHO.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-TE2ZRHKA.js +0 -2
- package/dist/cli/chunks/task-handlers-GEJ36WNB.js +0 -2
- package/dist/cli/chunks/token-bootstrap-JPE3LWXQ.js +0 -2
- package/dist/cli/chunks/unified-memory-KSBLUZT4.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-V3EOMQIZ.js +0 -2
- package/dist/cli/chunks/unified-persistence-URIRJ4BM.js +0 -2
- package/dist/cli/chunks/visual-security-DJOOVCBZ.js +0 -2
- package/dist/cli/chunks/witness-chain-ZWJUCXCJ.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-5CKA6Q74.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import{c as t}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{c as t}from"./chunk-335CCAOL.js";import{createRequire as o}from"module";var i,e,a,c,l,p,s,m,u,d,A,f,h,_,b,v,L,n=t(()=>{i=o(import.meta.url),e=i("vibium"),a=e,{RuvectorLayer:c,TensorCompress:l,differentiableSearch:p,hierarchicalForward:s,getCompressionLevel:m,init:u,FlashAttention:d,DotProductAttention:A,MultiHeadAttention:f,HyperbolicAttention:h,LinearAttention:_,MoEAttention:b,SonaEngine:v,pipeline:L}=e||{}});n();export{A as DotProductAttention,d as FlashAttention,h as HyperbolicAttention,_ as LinearAttention,b as MoEAttention,f as MultiHeadAttention,c as RuvectorLayer,v as SonaEngine,l as TensorCompress,a as default,p as differentiableSearch,m as getCompressionLevel,s as hierarchicalForward,u as init,L as pipeline};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{a}from"./chunk-U4NODKRR.js";import"./chunk-34WI4QNF.js";import"./chunk-JN3CC2TX.js";import"./chunk-URXG7FMO.js";import"./chunk-TTXYZUTQ.js";import"./chunk-7FWZHYYE.js";import"./chunk-WLX57ULC.js";import"./chunk-DG2OYKUQ.js";import"./chunk-IGRKFVFD.js";import"./chunk-D2A4TGZY.js";import"./chunk-RMQQ5UHM.js";import"./chunk-RE2IBX7Z.js";import"./chunk-SMTAZQJ3.js";import"./chunk-AOA454FC.js";import"./chunk-UBT7VCKQ.js";import"./chunk-B4AFVIOA.js";import"./chunk-4ZR5G4MZ.js";import"./chunk-KXXLMLMJ.js";import"./chunk-54TZA65H.js";import"./chunk-335CCAOL.js";export{a as VisualSecurityTool};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import"./chunk-335CCAOL.js";import{createRequire as t}from"module";var o=t(import.meta.url),e=o("web-tree-sitter"),i=e,{RuvectorLayer:n,TensorCompress:a,differentiableSearch:c,hierarchicalForward:s,getCompressionLevel:l,init:p,FlashAttention:m,DotProductAttention:u,MultiHeadAttention:d,HyperbolicAttention:A,LinearAttention:f,MoEAttention:h,SonaEngine:_,pipeline:b}=e||{};export{u as DotProductAttention,m as FlashAttention,A as HyperbolicAttention,f as LinearAttention,h as MoEAttention,d as MultiHeadAttention,n as RuvectorLayer,_ as SonaEngine,a as TensorCompress,i as default,c as differentiableSearch,l as getCompressionLevel,s as hierarchicalForward,p as init,b as pipeline};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import{b as u}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{b as u}from"./chunk-3HIDCXW3.js";import{a as f,c as h}from"./chunk-IGRKFVFD.js";import"./chunk-335CCAOL.js";h();import{existsSync as i,mkdirSync as d,readFileSync as g,writeFileSync as a}from"fs";import{join as p,dirname as v}from"path";var c=class{projectRoot;overwrite;generator;constructor(e){this.projectRoot=e.projectRoot,this.overwrite=e.overwrite??!1,this.generator=u()}async install(){let e={success:!0,mcpConfigured:!1,rulesInstalled:!1,errors:[],configPath:"",rulesPath:""};try{let t=this.generator.generateMcpConfig("windsurf"),r=p(this.projectRoot,t.path);if(e.configPath=r,!i(r)||this.overwrite){let o=v(r);if(i(o)||d(o,{recursive:!0}),i(r)&&this.overwrite){let m=this.mergeExistingConfig(r,t.content);a(r,m)}else a(r,t.content);e.mcpConfigured=!0}let n=this.generator.generateBehavioralRules("windsurf"),s=p(this.projectRoot,n.path);if(e.rulesPath=s,!i(s)||this.overwrite){if(i(s)&&this.overwrite){let o=this.mergeExistingRules(s,n.content);a(s,o)}else a(s,n.content);e.rulesInstalled=!0}}catch(t){e.success=!1,e.errors.push(`Windsurf installation failed: ${f(t)}`)}return e}mergeExistingConfig(e,t){try{let r=JSON.parse(g(e,"utf-8")),n=JSON.parse(t);return r.mcpServers||(r.mcpServers={}),Object.assign(r.mcpServers,n.mcpServers),JSON.stringify(r,null,2)+`
|
|
3
3
|
`}catch{return t}}mergeExistingRules(e,t){try{let r=g(e,"utf-8");return r.includes("Agentic QE")||r.includes("fleet_init")?r:r.trimEnd()+`
|
|
4
4
|
|
|
5
5
|
---
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import{a,b,c,d,e,f,g}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g}from"./chunk-ORA6NIXN.js";import"./chunk-7FWZHYYE.js";import"./chunk-WLX57ULC.js";import"./chunk-54TZA65H.js";import"./chunk-335CCAOL.js";export{c as PersistentWitnessChain,a as SPRTAccumulator,b as WitnessChain,f as createPersistentWitnessChain,e as createWitnessChain,d as createWitnessChainSQLitePersistence,g as isWitnessChainFeatureEnabled};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g,h}from"./chunk-AO4HDN62.js";import"./chunk-URXG7FMO.js";import"./chunk-TTXYZUTQ.js";import"./chunk-7FWZHYYE.js";import"./chunk-WLX57ULC.js";import"./chunk-DG2OYKUQ.js";import"./chunk-IGRKFVFD.js";import"./chunk-RMQQ5UHM.js";import"./chunk-RE2IBX7Z.js";import"./chunk-SMTAZQJ3.js";import"./chunk-AOA454FC.js";import"./chunk-UBT7VCKQ.js";import"./chunk-B4AFVIOA.js";import"./chunk-4ZR5G4MZ.js";import"./chunk-KXXLMLMJ.js";import"./chunk-54TZA65H.js";import"./chunk-335CCAOL.js";export{a as GENESIS_PREV_HASH,f as WitnessChain,h as createWitnessChain,g as getWitnessChain,d as hashWith,e as serializeEntry,b as sha256,c as shake256};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import"./chunk-WFEXEDMC.js";import{b as $}from"./chunk-CJO2V2FB.js";import{d as R}from"./chunk-DPYCHODC.js";import{b as k,c as C,d as b}from"./chunk-CQNXIYQW.js";import{c as W}from"./chunk-DG2OYKUQ.js";import"./chunk-A2ULGMMG.js";import"./chunk-IGRKFVFD.js";import"./chunk-335CCAOL.js";import{Command as O}from"commander";import o from"chalk";function P(d,a){let m=d.indexOf("=");return m>0&&(a[d.substring(0,m)]=d.substring(m+1)),a}function x(d,a,m){let y=new O("workflow").description("Manage QE workflows and pipelines (ADR-041)");return y.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(t,l)=>{if(!await m())return;let e=await import("fs"),c=(await import("path")).resolve(t);try{console.log(o.blue(`
|
|
3
3
|
Running workflow from: ${t}
|
|
4
4
|
`));let s=k(c);if(!s.success||!s.workflow){console.log(o.red("Failed to parse pipeline:"));for(let w of s.errors)console.log(o.red(` ${w}`));await a(1)}let r={...W(l.params,"params")};if(s.pipeline){for(let w of s.pipeline.stages)if(w.params)for(let[S,h]of Object.entries(w.params))r[S]=h}if(!d.workflowOrchestrator.getWorkflow(s.workflow.id)){let w=d.workflowOrchestrator.registerWorkflow(s.workflow);w.success||(console.log(o.red(`Failed to register workflow: ${w.error.message}`)),await a(1))}let n=await d.workflowOrchestrator.executeWorkflow(s.workflow.id,r);if(!n.success){console.log(o.red(`Failed to start workflow: ${n.error.message}`)),await a(1);return}let p=n.value;if(console.log(o.cyan(` Execution ID: ${p}`)),console.log(o.gray(` Workflow: ${s.workflow.name}`)),console.log(o.gray(` Stages: ${s.workflow.steps.length}`)),console.log(""),l.watch){console.log(o.blue(`Workflow Progress:
|
|
5
5
|
`));let w,S=Date.now();for(;;){let g=d.workflowOrchestrator.getWorkflowStatus(p);if(!g)break;if(!w||w.progress!==g.progress||w.status!==g.status||JSON.stringify(w.currentSteps)!==JSON.stringify(g.currentSteps)){process.stdout.write("\r\x1B[K");let v="\u2588".repeat(Math.floor(g.progress/5))+"\u2591".repeat(20-Math.floor(g.progress/5)),D=g.status==="completed"?o.green:g.status==="failed"?o.red:g.status==="running"?o.yellow:o.gray;console.log(` [${v}] ${g.progress}% - ${D(g.status)}`),g.currentSteps.length>0&&l.verbose&&console.log(o.gray(` Running: ${g.currentSteps.join(", ")}`)),w=g}if(g.status==="completed"||g.status==="failed"||g.status==="cancelled")break;await new Promise(v=>setTimeout(v,500))}let h=d.workflowOrchestrator.getWorkflowStatus(p);if(h){console.log("");let g=h.duration||Date.now()-S;h.status==="completed"?(console.log(o.green("Workflow completed successfully")),console.log(o.gray(` Duration: ${$(g)}`)),console.log(o.gray(` Completed: ${h.completedSteps.length} stages`)),h.skippedSteps.length>0&&console.log(o.yellow(` Skipped: ${h.skippedSteps.length} stages`))):h.status==="failed"?(console.log(o.red("Workflow failed")),console.log(o.red(` Error: ${h.error}`)),console.log(o.gray(` Failed stages: ${h.failedSteps.join(", ")}`))):console.log(o.yellow(`Workflow ${h.status}`))}}else console.log(o.green("Workflow execution started")),console.log(o.gray(` Use 'aqe workflow status ${p}' to check progress`));console.log(""),await a(0)}catch(s){console.error(o.red(`
|
|
@@ -35,10 +35,10 @@ Workflow cancelled: ${t}
|
|
|
35
35
|
`)):console.log(o.red(`
|
|
36
36
|
Failed to cancel workflow: ${l.error.message}
|
|
37
37
|
`)),await a(l.success?0:1)}catch(l){console.error(o.red(`
|
|
38
|
-
Failed to cancel workflow:`),l),await a(1)}}),y.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:t}=await import("./browser-workflow-
|
|
38
|
+
Failed to cancel workflow:`),l),await a(1)}}),y.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:t}=await import("./browser-workflow-NMOEM3HW.js"),e=await new t().invoke({});if(e.success&&e.data){console.log(o.blue(`
|
|
39
39
|
Browser Workflow Templates:
|
|
40
40
|
`));for(let u of e.data.availableTemplates)console.log(` ${o.cyan(u)}`);console.log("")}else console.log(o.red(`Failed: ${e.error||"Unknown error"}`));await a(0)}catch(t){console.error(o.red(`
|
|
41
|
-
Failed:`),t),await a(1)}}),y.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",P,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(t,l)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-
|
|
41
|
+
Failed:`),t),await a(1)}}),y.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",P,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(t,l)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-NMOEM3HW.js"),{writeOutput:u,toJSON:c}=await import("./ci-output-67R5MSLL.js"),s=new e,f={variables:l.var||{}};if(l.yaml)f.workflowYaml=l.yaml;else if(t)if(t.endsWith(".yaml")||t.endsWith(".yml")){let i=await import("fs"),p=(await import("path")).resolve(t);i.existsSync(p)||(console.log(o.red(`
|
|
42
42
|
File not found: ${p}
|
|
43
43
|
`)),await a(1)),f.workflowYaml=i.readFileSync(p,"utf-8")}else f.templateName=t;else console.log(o.red(`
|
|
44
44
|
Provide a template name or --yaml. Use "workflow browser-list" to see templates.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{a,b,c,d}from"./chunk-BIV6HWMT.js";import"./chunk-5TATJQ3Z.js";import"./chunk-URXG7FMO.js";import"./chunk-TTXYZUTQ.js";import"./chunk-7FWZHYYE.js";import"./chunk-WLX57ULC.js";import"./chunk-DG2OYKUQ.js";import"./chunk-A2ULGMMG.js";import"./chunk-IGRKFVFD.js";import"./chunk-D2A4TGZY.js";import"./chunk-RMQQ5UHM.js";import"./chunk-RE2IBX7Z.js";import"./chunk-SMTAZQJ3.js";import"./chunk-AOA454FC.js";import"./chunk-UBT7VCKQ.js";import"./chunk-B4AFVIOA.js";import"./chunk-4ZR5G4MZ.js";import"./chunk-KXXLMLMJ.js";import"./chunk-54TZA65H.js";import"./chunk-335CCAOL.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.
|
|
2
|
-
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.9.10");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-BCSCJBYQ.js";import"./chunk-URXG7FMO.js";import"./chunk-TTXYZUTQ.js";import"./chunk-7FWZHYYE.js";import"./chunk-WLX57ULC.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-OSD55UO7.js";import"./chunk-DG2OYKUQ.js";import"./chunk-IGRKFVFD.js";import"./chunk-RMQQ5UHM.js";import"./chunk-RE2IBX7Z.js";import"./chunk-SMTAZQJ3.js";import"./chunk-AOA454FC.js";import"./chunk-UBT7VCKQ.js";import"./chunk-B4AFVIOA.js";import"./chunk-4ZR5G4MZ.js";import"./chunk-KXXLMLMJ.js";import"./chunk-54TZA65H.js";import"./chunk-335CCAOL.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
|
|
@@ -35,6 +35,8 @@ Examples:
|
|
|
35
35
|
$ aqe llm config --set mode=cost-optimized
|
|
36
36
|
$ aqe llm health Check provider health
|
|
37
37
|
$ aqe llm cost claude-sonnet-4 --tokens 10000
|
|
38
|
+
$ aqe llm advise --transcript t.json --json Consult advisor (ADR-092)
|
|
39
|
+
$ aqe llm verify --session <id> Check advisor quality gate
|
|
38
40
|
`);
|
|
39
41
|
// llm providers
|
|
40
42
|
llmCmd
|
|
@@ -95,6 +97,35 @@ Examples:
|
|
|
95
97
|
.action(async (model, options) => {
|
|
96
98
|
await executeCost(model, options);
|
|
97
99
|
});
|
|
100
|
+
// llm verify (ADR-092 Phase 3 — quality gate enforcement)
|
|
101
|
+
llmCmd
|
|
102
|
+
.command('verify')
|
|
103
|
+
.description('Check whether an advisor was consulted for a session (ADR-092 quality gate)')
|
|
104
|
+
.requiredOption('--session <id>', 'Session ID to check')
|
|
105
|
+
.option('--min-calls <n>', 'Minimum required advisor calls (default: 1)', '1')
|
|
106
|
+
.option('--json', 'Output as JSON')
|
|
107
|
+
.action(async (options) => {
|
|
108
|
+
await executeVerify(options);
|
|
109
|
+
});
|
|
110
|
+
// llm advise (ADR-092)
|
|
111
|
+
llmCmd
|
|
112
|
+
.command('advise')
|
|
113
|
+
.description('Consult an advisor model on a forwarded transcript (ADR-092)')
|
|
114
|
+
.option('--transcript <path>', 'Path to a transcript JSON file')
|
|
115
|
+
.option('--session <id>', 'Claude Code session ID (reads JSONL from disk)')
|
|
116
|
+
.option('--stdin', 'Read transcript JSON from stdin')
|
|
117
|
+
.option('--provider <name>', 'Advisor provider (default: openrouter)')
|
|
118
|
+
.option('--model <id>', 'Advisor model ID (default: anthropic/claude-opus-4)')
|
|
119
|
+
.option('--max-words <n>', 'Max advice length in words', '100')
|
|
120
|
+
.option('--agent <name>', 'Agent invoking the advisor (for audit)')
|
|
121
|
+
.option('--trigger-reason <text>', 'Why the advisor is being called')
|
|
122
|
+
.option('--redact <mode>', 'Redaction mode: strict|balanced|off (default: strict)', 'strict')
|
|
123
|
+
.option('--advisor-prompt <text>', 'Domain-specific advisor system prompt (overrides default)')
|
|
124
|
+
.option('--json', 'Emit structured JSON to stdout (default)')
|
|
125
|
+
.option('--quiet', 'Suppress status messages')
|
|
126
|
+
.action(async (options) => {
|
|
127
|
+
await executeAdvise(options);
|
|
128
|
+
});
|
|
98
129
|
return llmCmd;
|
|
99
130
|
}
|
|
100
131
|
// ============================================================================
|
|
@@ -458,4 +489,225 @@ function findModel(modelId) {
|
|
|
458
489
|
}
|
|
459
490
|
return undefined;
|
|
460
491
|
}
|
|
492
|
+
// ============================================================================
|
|
493
|
+
// `aqe llm advise` — ADR-092 Phase 0
|
|
494
|
+
// ============================================================================
|
|
495
|
+
/**
|
|
496
|
+
* Read a transcript from one of three sources (--transcript, --session, --stdin).
|
|
497
|
+
* Phase 0 supports --transcript (JSON file) and --stdin; --session is Phase 1+.
|
|
498
|
+
*/
|
|
499
|
+
async function loadTranscript(options) {
|
|
500
|
+
const { readFile } = await import('fs/promises');
|
|
501
|
+
if (options.transcript) {
|
|
502
|
+
const raw = await readFile(options.transcript, 'utf-8');
|
|
503
|
+
const parsed = JSON.parse(raw);
|
|
504
|
+
if (!parsed.messages || !Array.isArray(parsed.messages)) {
|
|
505
|
+
throw new Error(`Transcript file must contain a 'messages' array: ${options.transcript}`);
|
|
506
|
+
}
|
|
507
|
+
return {
|
|
508
|
+
systemPrompt: parsed.systemPrompt,
|
|
509
|
+
taskDescription: parsed.taskDescription,
|
|
510
|
+
messages: parsed.messages,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
if (options.stdin) {
|
|
514
|
+
const chunks = [];
|
|
515
|
+
for await (const chunk of process.stdin) {
|
|
516
|
+
chunks.push(Buffer.from(chunk));
|
|
517
|
+
}
|
|
518
|
+
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
519
|
+
const parsed = JSON.parse(raw);
|
|
520
|
+
if (!parsed.messages || !Array.isArray(parsed.messages)) {
|
|
521
|
+
throw new Error('Transcript from stdin must contain a `messages` array');
|
|
522
|
+
}
|
|
523
|
+
return {
|
|
524
|
+
systemPrompt: parsed.systemPrompt,
|
|
525
|
+
taskDescription: parsed.taskDescription,
|
|
526
|
+
messages: parsed.messages,
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
if (options.session) {
|
|
530
|
+
const { readFile, readdir } = await import('fs/promises');
|
|
531
|
+
const { join } = await import('path');
|
|
532
|
+
const os = await import('os');
|
|
533
|
+
const projectsDir = join(os.homedir(), '.claude', 'projects');
|
|
534
|
+
let jsonlPath = null;
|
|
535
|
+
try {
|
|
536
|
+
const encodedDirs = await readdir(projectsDir);
|
|
537
|
+
for (const dir of encodedDirs) {
|
|
538
|
+
const sessionsDir = join(projectsDir, dir);
|
|
539
|
+
const files = await readdir(sessionsDir).catch(() => []);
|
|
540
|
+
const match = files.find(f => f.includes(options.session) && f.endsWith('.jsonl'));
|
|
541
|
+
if (match) {
|
|
542
|
+
jsonlPath = join(sessionsDir, match);
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
catch { /* projects dir doesn't exist */ }
|
|
548
|
+
if (!jsonlPath) {
|
|
549
|
+
throw new Error(`Could not find session JSONL for session ID "${options.session}" ` +
|
|
550
|
+
`in ~/.claude/projects/. Use --transcript <path> as fallback.`);
|
|
551
|
+
}
|
|
552
|
+
const raw = await readFile(jsonlPath, 'utf-8');
|
|
553
|
+
const lines = raw.trim().split('\n').filter(Boolean);
|
|
554
|
+
const messages = [];
|
|
555
|
+
for (const line of lines) {
|
|
556
|
+
try {
|
|
557
|
+
const entry = JSON.parse(line);
|
|
558
|
+
const entryType = entry.type;
|
|
559
|
+
const msg = entry.message;
|
|
560
|
+
if (!msg)
|
|
561
|
+
continue;
|
|
562
|
+
const role = msg.role;
|
|
563
|
+
const rawContent = msg.content;
|
|
564
|
+
if (entryType === 'user' && role === 'user') {
|
|
565
|
+
const text = typeof rawContent === 'string' ? rawContent
|
|
566
|
+
: Array.isArray(rawContent) ? rawContent.map((b) => b.text ?? '').join('')
|
|
567
|
+
: '';
|
|
568
|
+
if (text.trim())
|
|
569
|
+
messages.push({ role: 'user', content: text });
|
|
570
|
+
}
|
|
571
|
+
else if (entryType === 'assistant' && role === 'assistant') {
|
|
572
|
+
const text = typeof rawContent === 'string' ? rawContent
|
|
573
|
+
: Array.isArray(rawContent)
|
|
574
|
+
? rawContent
|
|
575
|
+
.filter((b) => b.type === 'text')
|
|
576
|
+
.map((b) => b.text ?? '')
|
|
577
|
+
.join('')
|
|
578
|
+
: '';
|
|
579
|
+
if (text.trim())
|
|
580
|
+
messages.push({ role: 'assistant', content: text });
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
catch { /* skip unparseable lines */ }
|
|
584
|
+
}
|
|
585
|
+
if (messages.length === 0) {
|
|
586
|
+
throw new Error(`Session JSONL at ${jsonlPath} contained no parseable messages.`);
|
|
587
|
+
}
|
|
588
|
+
return { messages };
|
|
589
|
+
}
|
|
590
|
+
throw new Error('aqe llm advise requires one of: --transcript <path>, --stdin, --session <id>');
|
|
591
|
+
}
|
|
592
|
+
async function executeAdvise(options) {
|
|
593
|
+
const useJson = options.json !== false; // default true
|
|
594
|
+
const quiet = options.quiet ?? false;
|
|
595
|
+
try {
|
|
596
|
+
const transcript = await loadTranscript(options);
|
|
597
|
+
if (!quiet && !useJson) {
|
|
598
|
+
console.log(chalk.gray('Consulting advisor...'));
|
|
599
|
+
}
|
|
600
|
+
// Lazy-load to keep CLI cold-start fast when advise is not used
|
|
601
|
+
const { createProviderManager } = await import('../../shared/llm/provider-manager.js');
|
|
602
|
+
const { createHybridRouter } = await import('../../shared/llm/router/hybrid-router.js');
|
|
603
|
+
const { MultiModelExecutor, DEFAULT_ADVISOR_PROVIDER, DEFAULT_ADVISOR_MODEL } = await import('../../routing/advisor/multi-model-executor.js');
|
|
604
|
+
const provider = (options.provider ?? DEFAULT_ADVISOR_PROVIDER);
|
|
605
|
+
const model = options.model ?? DEFAULT_ADVISOR_MODEL;
|
|
606
|
+
// Phase 0: bootstrap a minimal ProviderManager + HybridRouter for the advisor call.
|
|
607
|
+
// Phase 1+ reuses a shared router from the AQE kernel.
|
|
608
|
+
const providerManager = createProviderManager({
|
|
609
|
+
primary: provider === 'openrouter' ? 'openrouter' : provider,
|
|
610
|
+
providers: {
|
|
611
|
+
openrouter: {
|
|
612
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
613
|
+
model,
|
|
614
|
+
},
|
|
615
|
+
},
|
|
616
|
+
});
|
|
617
|
+
const router = createHybridRouter(providerManager, {
|
|
618
|
+
mode: 'manual',
|
|
619
|
+
defaultProvider: provider,
|
|
620
|
+
defaultModel: model,
|
|
621
|
+
});
|
|
622
|
+
await router.initialize();
|
|
623
|
+
const executor = new MultiModelExecutor(router);
|
|
624
|
+
const redactMode = (options.redact ?? 'strict');
|
|
625
|
+
const result = await executor.consult(transcript, {
|
|
626
|
+
provider,
|
|
627
|
+
model,
|
|
628
|
+
maxWords: options.maxWords ? parseInt(options.maxWords, 10) : undefined,
|
|
629
|
+
agentName: options.agent,
|
|
630
|
+
triggerReason: options.triggerReason ?? 'cli',
|
|
631
|
+
sessionId: options.session ?? 'cli-' + Date.now(),
|
|
632
|
+
redact: redactMode,
|
|
633
|
+
advisorSystemPrompt: options.advisorPrompt,
|
|
634
|
+
});
|
|
635
|
+
if (useJson) {
|
|
636
|
+
console.log(JSON.stringify({
|
|
637
|
+
advice: result.advice,
|
|
638
|
+
model: result.model,
|
|
639
|
+
provider: result.provider,
|
|
640
|
+
tokens_in: result.tokensIn,
|
|
641
|
+
tokens_out: result.tokensOut,
|
|
642
|
+
latency_ms: result.latencyMs,
|
|
643
|
+
cost_usd: result.costUsd,
|
|
644
|
+
advice_hash: result.adviceHash,
|
|
645
|
+
trigger_reason: result.triggerReason,
|
|
646
|
+
cache_hit: result.cacheHit,
|
|
647
|
+
redaction_applied: result.redactionsApplied.length > 0,
|
|
648
|
+
redactions: result.redactionsApplied,
|
|
649
|
+
circuit_breaker_remaining: result.circuitBreakerRemaining,
|
|
650
|
+
}, null, 2));
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
console.log(chalk.bold.cyan('\nAdvisor Response\n'));
|
|
654
|
+
console.log(result.advice);
|
|
655
|
+
console.log();
|
|
656
|
+
console.log(chalk.gray(`(${result.provider}/${result.model}, ${result.tokensIn}→${result.tokensOut} tokens, ` +
|
|
657
|
+
`${result.latencyMs}ms, $${result.costUsd.toFixed(4)})`));
|
|
658
|
+
}
|
|
659
|
+
process.exit(0);
|
|
660
|
+
}
|
|
661
|
+
catch (err) {
|
|
662
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
663
|
+
const exitCode = err?.exitCode ?? 1;
|
|
664
|
+
if (useJson) {
|
|
665
|
+
console.error(JSON.stringify({ error: message, exit_code: exitCode }, null, 2));
|
|
666
|
+
}
|
|
667
|
+
else {
|
|
668
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
669
|
+
}
|
|
670
|
+
process.exit(exitCode);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
// ============================================================================
|
|
674
|
+
// `aqe llm verify` — ADR-092 Phase 3 quality gate
|
|
675
|
+
// ============================================================================
|
|
676
|
+
async function executeVerify(options) {
|
|
677
|
+
const useJson = options.json ?? false;
|
|
678
|
+
const minCalls = parseInt(options.minCalls ?? '1', 10);
|
|
679
|
+
try {
|
|
680
|
+
const { AdvisorCircuitBreaker } = await import('../../routing/advisor/circuit-breaker.js');
|
|
681
|
+
const breaker = new AdvisorCircuitBreaker();
|
|
682
|
+
const state = breaker.getState(options.session);
|
|
683
|
+
const passed = state.callCount >= minCalls;
|
|
684
|
+
const result = {
|
|
685
|
+
session: options.session,
|
|
686
|
+
advisor_calls: state.callCount,
|
|
687
|
+
required: minCalls,
|
|
688
|
+
gate: passed ? 'PASS' : 'FAIL',
|
|
689
|
+
};
|
|
690
|
+
if (useJson) {
|
|
691
|
+
console.log(JSON.stringify(result, null, 2));
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
const icon = passed ? chalk.green('PASS') : chalk.red('FAIL');
|
|
695
|
+
console.log(`\nAdvisor Quality Gate: ${icon}`);
|
|
696
|
+
console.log(` Session: ${options.session}`);
|
|
697
|
+
console.log(` Advisor calls: ${state.callCount}`);
|
|
698
|
+
console.log(` Required: ≥${minCalls}`);
|
|
699
|
+
}
|
|
700
|
+
process.exit(passed ? 0 : 7);
|
|
701
|
+
}
|
|
702
|
+
catch (err) {
|
|
703
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
704
|
+
if (useJson) {
|
|
705
|
+
console.error(JSON.stringify({ error: message }, null, 2));
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
console.error(chalk.red(`Error: ${message}`));
|
|
709
|
+
}
|
|
710
|
+
process.exit(1);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
461
713
|
//# sourceMappingURL=llm-router.js.map
|
|
@@ -206,7 +206,14 @@ export async function assignTaskToDomain(ctx, task, domain) {
|
|
|
206
206
|
}
|
|
207
207
|
// Spawn an agent for this task if needed, using TinyDancer-recommended tier
|
|
208
208
|
const agentType = routeDecision?.tier || 'task-worker';
|
|
209
|
-
const
|
|
209
|
+
const spawnCapabilities = [
|
|
210
|
+
'task-execution', task.type,
|
|
211
|
+
...(routeDecision ? [`model:${routeDecision.model}`] : []),
|
|
212
|
+
// ADR-092: surface advisor trigger signal to spawned agent so the executor
|
|
213
|
+
// preamble can instruct it to call `aqe llm advise` before substantive work
|
|
214
|
+
...(routeDecision?.triggerMultiModel ? ['advisor:triggerMultiModel'] : []),
|
|
215
|
+
];
|
|
216
|
+
const spawnResult = await ctx.requestAgentSpawn(domain, agentType, spawnCapabilities);
|
|
210
217
|
const agentIds = [];
|
|
211
218
|
if (spawnResult.success) {
|
|
212
219
|
agentIds.push(spawnResult.value);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Engine Installer
|
|
3
|
+
*
|
|
4
|
+
* Installs Vibium (https://github.com/VibiumDev/vibium) — the WebDriver BiDi
|
|
5
|
+
* browser engine used by the `qe-browser` skill and all QE fleet skills that
|
|
6
|
+
* need to drive a real browser (visual testing, a11y audits, pentest
|
|
7
|
+
* validation, e2e flow verification).
|
|
8
|
+
*
|
|
9
|
+
* Design goals:
|
|
10
|
+
* - Graceful: never fail init if Vibium install fails; report and continue.
|
|
11
|
+
* - Idempotent: skip if Vibium is already on PATH.
|
|
12
|
+
* - Opt-out friendly: respect --minimal and --no-browser-engine flags.
|
|
13
|
+
* - No new runtime deps: shells out to `npm install -g vibium` via child_process.
|
|
14
|
+
*/
|
|
15
|
+
import { type SpawnSyncReturns } from 'node:child_process';
|
|
16
|
+
/**
|
|
17
|
+
* Spawner injected into {@link installBrowserEngine} so tests can mock the
|
|
18
|
+
* shell-out without monkey-patching the child_process module (ESM namespaces
|
|
19
|
+
* are non-configurable). Signature matches {@link spawnSync}'s (bin, args, opts).
|
|
20
|
+
*/
|
|
21
|
+
export type Spawner = (bin: string, args: string[], options: {
|
|
22
|
+
encoding: 'utf8';
|
|
23
|
+
timeout: number;
|
|
24
|
+
maxBuffer: number;
|
|
25
|
+
}) => SpawnSyncReturns<string>;
|
|
26
|
+
export interface BrowserEngineInstallerOptions {
|
|
27
|
+
/** Skip installation entirely (for --minimal or --no-browser-engine). */
|
|
28
|
+
skip?: boolean;
|
|
29
|
+
/** Package name/version spec. Defaults to "vibium". */
|
|
30
|
+
packageSpec?: string;
|
|
31
|
+
/** Override the npm binary (default: "npm"). */
|
|
32
|
+
npmBin?: string;
|
|
33
|
+
/** Timeout for the install command in ms (default: 180_000). */
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
/** Test seam — inject a spawner to avoid hitting real processes. */
|
|
36
|
+
spawner?: Spawner;
|
|
37
|
+
}
|
|
38
|
+
export type BrowserEngineInstallStatus = 'already-installed' | 'installed' | 'skipped' | 'install-failed' | 'npm-unavailable';
|
|
39
|
+
export interface BrowserEngineInstallResult {
|
|
40
|
+
status: BrowserEngineInstallStatus;
|
|
41
|
+
version?: string;
|
|
42
|
+
message?: string;
|
|
43
|
+
packageSpec: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Detect whether `vibium` is already on PATH. Returns the version string
|
|
47
|
+
* on success, `null` otherwise. Uses a short timeout because we don't want
|
|
48
|
+
* to block init for tens of seconds on a misbehaving shim.
|
|
49
|
+
*
|
|
50
|
+
* Reads BOTH stdout and stderr because many Go CLIs (including some Vibium
|
|
51
|
+
* versions) write `--version` output to stderr instead of stdout. Prefer
|
|
52
|
+
* stdout when both are non-empty. Devil's-advocate review finding H1.
|
|
53
|
+
*/
|
|
54
|
+
export declare function detectVibium(spawner?: Spawner, timeoutMs?: number): string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Install Vibium via `npm install -g`. Returns a structured result the
|
|
57
|
+
* assets phase can log/summarize — never throws for expected failures.
|
|
58
|
+
*/
|
|
59
|
+
export declare function installBrowserEngine(options?: BrowserEngineInstallerOptions): BrowserEngineInstallResult;
|
|
60
|
+
//# sourceMappingURL=browser-engine-installer.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Engine Installer
|
|
3
|
+
*
|
|
4
|
+
* Installs Vibium (https://github.com/VibiumDev/vibium) — the WebDriver BiDi
|
|
5
|
+
* browser engine used by the `qe-browser` skill and all QE fleet skills that
|
|
6
|
+
* need to drive a real browser (visual testing, a11y audits, pentest
|
|
7
|
+
* validation, e2e flow verification).
|
|
8
|
+
*
|
|
9
|
+
* Design goals:
|
|
10
|
+
* - Graceful: never fail init if Vibium install fails; report and continue.
|
|
11
|
+
* - Idempotent: skip if Vibium is already on PATH.
|
|
12
|
+
* - Opt-out friendly: respect --minimal and --no-browser-engine flags.
|
|
13
|
+
* - No new runtime deps: shells out to `npm install -g vibium` via child_process.
|
|
14
|
+
*/
|
|
15
|
+
import { spawnSync as realSpawnSync } from 'node:child_process';
|
|
16
|
+
import { toErrorMessage } from '../shared/error-utils.js';
|
|
17
|
+
function tryRun(spawner, bin, args, timeoutMs) {
|
|
18
|
+
return spawner(bin, args, {
|
|
19
|
+
encoding: 'utf8',
|
|
20
|
+
timeout: timeoutMs,
|
|
21
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const defaultSpawner = (bin, args, opts) => realSpawnSync(bin, args, opts);
|
|
25
|
+
/**
|
|
26
|
+
* Detect whether `vibium` is already on PATH. Returns the version string
|
|
27
|
+
* on success, `null` otherwise. Uses a short timeout because we don't want
|
|
28
|
+
* to block init for tens of seconds on a misbehaving shim.
|
|
29
|
+
*
|
|
30
|
+
* Reads BOTH stdout and stderr because many Go CLIs (including some Vibium
|
|
31
|
+
* versions) write `--version` output to stderr instead of stdout. Prefer
|
|
32
|
+
* stdout when both are non-empty. Devil's-advocate review finding H1.
|
|
33
|
+
*/
|
|
34
|
+
export function detectVibium(spawner = defaultSpawner, timeoutMs = 5_000) {
|
|
35
|
+
const result = tryRun(spawner, 'vibium', ['--version'], timeoutMs);
|
|
36
|
+
if (result.status !== 0)
|
|
37
|
+
return null;
|
|
38
|
+
const stdout = (result.stdout || '').trim();
|
|
39
|
+
const stderr = (result.stderr || '').trim();
|
|
40
|
+
// Prefer stdout, fall back to stderr. Strip leading "vibium" or "v" so the
|
|
41
|
+
// returned version is consistent regardless of where the binary printed it.
|
|
42
|
+
const raw = stdout || stderr;
|
|
43
|
+
if (!raw)
|
|
44
|
+
return 'unknown';
|
|
45
|
+
// Extract first semver-looking token if present (e.g. "vibium version 26.3.18" → "26.3.18")
|
|
46
|
+
const match = raw.match(/v?(\d+\.\d+\.\d+(?:[-+][\w.]+)?)/);
|
|
47
|
+
return match ? match[1] : raw.split(/\s+/)[0] || 'unknown';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Install Vibium via `npm install -g`. Returns a structured result the
|
|
51
|
+
* assets phase can log/summarize — never throws for expected failures.
|
|
52
|
+
*/
|
|
53
|
+
export function installBrowserEngine(options = {}) {
|
|
54
|
+
const packageSpec = options.packageSpec || 'vibium';
|
|
55
|
+
if (options.skip) {
|
|
56
|
+
return { status: 'skipped', packageSpec, message: 'install skipped by options' };
|
|
57
|
+
}
|
|
58
|
+
const spawner = options.spawner || defaultSpawner;
|
|
59
|
+
const alreadyInstalled = detectVibium(spawner);
|
|
60
|
+
if (alreadyInstalled) {
|
|
61
|
+
return {
|
|
62
|
+
status: 'already-installed',
|
|
63
|
+
version: alreadyInstalled,
|
|
64
|
+
packageSpec,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const npmBin = options.npmBin || 'npm';
|
|
68
|
+
// Sanity-check that npm is available before we attempt the install.
|
|
69
|
+
const npmCheck = tryRun(spawner, npmBin, ['--version'], 5_000);
|
|
70
|
+
if (npmCheck.error || npmCheck.status !== 0) {
|
|
71
|
+
return {
|
|
72
|
+
status: 'npm-unavailable',
|
|
73
|
+
packageSpec,
|
|
74
|
+
message: 'npm is not available on PATH. Install Node.js + npm, then run `npm install -g vibium`.',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const timeoutMs = options.timeoutMs || 180_000;
|
|
78
|
+
const install = tryRun(spawner, npmBin, ['install', '-g', packageSpec], timeoutMs);
|
|
79
|
+
if (install.status !== 0) {
|
|
80
|
+
return {
|
|
81
|
+
status: 'install-failed',
|
|
82
|
+
packageSpec,
|
|
83
|
+
message: install.stderr?.trim() ||
|
|
84
|
+
install.stdout?.trim() ||
|
|
85
|
+
toErrorMessage(install.error) ||
|
|
86
|
+
'unknown npm install failure',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const version = detectVibium(spawner) || 'unknown';
|
|
90
|
+
return { status: 'installed', version, packageSpec };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=browser-engine-installer.js.map
|
|
@@ -492,6 +492,15 @@ export function configToYAML(config) {
|
|
|
492
492
|
lines.push(` confidenceThreshold: ${config.routing.confidenceThreshold}`);
|
|
493
493
|
lines.push(` feedbackEnabled: ${config.routing.feedbackEnabled}`);
|
|
494
494
|
lines.push('');
|
|
495
|
+
// ADR-092: Advisor Strategy Configuration
|
|
496
|
+
lines.push('# ADR-092: Advisor Strategy — agents consult a stronger model for strategic guidance');
|
|
497
|
+
lines.push('# Set provider/model to override auto-detection from environment API keys');
|
|
498
|
+
lines.push('advisor:');
|
|
499
|
+
lines.push(' # provider: "openrouter" # openrouter | claude | ollama (auto-detected if not set)');
|
|
500
|
+
lines.push(' # model: "anthropic/claude-opus-4" # provider-specific model ID');
|
|
501
|
+
lines.push(' # maxUses: "3" # per-task advisor call cap');
|
|
502
|
+
lines.push(' redact: "strict" # strict | balanced | off');
|
|
503
|
+
lines.push('');
|
|
495
504
|
lines.push('workers:');
|
|
496
505
|
lines.push(' enabled:');
|
|
497
506
|
for (const worker of config.workers.enabled) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Installs skills and agents
|
|
4
4
|
*/
|
|
5
5
|
import { BasePhase, type InitContext } from './phase-interface.js';
|
|
6
|
+
import { type BrowserEngineInstallResult } from '../browser-engine-installer.js';
|
|
6
7
|
export interface AssetsResult {
|
|
7
8
|
skillsInstalled: number;
|
|
8
9
|
agentsInstalled: number;
|
|
@@ -14,6 +15,7 @@ export interface AssetsResult {
|
|
|
14
15
|
kiroSkills: number;
|
|
15
16
|
kiroHooks: number;
|
|
16
17
|
platformsConfigured: string[];
|
|
18
|
+
browserEngine?: BrowserEngineInstallResult;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Assets phase - installs skills and agents
|