agentic-qe 3.10.3 → 3.10.4
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/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +33 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-A62ETL5C.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-NGC6LSQP.js → agent-booster-wasm-EJPDSWON.js} +2 -2
- package/dist/cli/chunks/{agent-handler-P2IJE4GK.js → agent-handler-2DZB7LGI.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-JXRJ5GKQ.js → agent-memory-branch-SSFYAVIK.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-MTCRAV6N.js +2 -0
- package/dist/cli/chunks/audit-42XG5JFB.js +3 -0
- package/dist/cli/chunks/base-KKEBUHZC.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-64EGGWIC.js → better-sqlite3-PX5JM3DG.js} +2 -2
- package/dist/cli/chunks/{brain-handler-SACNDFSW.js → brain-handler-LFHX2TYP.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-LFOTVUDA.js → branch-enumerator-AX7DKGV7.js} +2 -2
- package/dist/cli/chunks/{browser-FK7PRF3W.js → browser-4NYLZ7FA.js} +2 -2
- package/dist/cli/chunks/browser-workflow-XHYAJUB6.js +2 -0
- package/dist/cli/chunks/{chunk-3LRK7PYN.js → chunk-2B6ETC7C.js} +2 -2
- package/dist/cli/chunks/{chunk-VRXY4T22.js → chunk-2G2PVVQG.js} +2 -2
- package/dist/cli/chunks/{chunk-EETVN2OJ.js → chunk-2L5VFVCG.js} +1 -1
- package/dist/cli/chunks/{chunk-CNEWYJKT.js → chunk-2TYO4VZH.js} +3 -3
- package/dist/cli/chunks/{chunk-GHNNJHH3.js → chunk-3ISX5B77.js} +2 -2
- package/dist/cli/chunks/{chunk-X2B7SANM.js → chunk-3UGUX34A.js} +1 -1
- package/dist/cli/chunks/{chunk-VIWIO27R.js → chunk-4BX72XG4.js} +2 -2
- package/dist/cli/chunks/{chunk-3HBWDG62.js → chunk-4FTLYIMW.js} +2 -2
- package/dist/cli/chunks/{chunk-KG5SM36Y.js → chunk-5FNNCVXR.js} +1 -1
- package/dist/cli/chunks/{chunk-72LE6PHL.js → chunk-5Q3L4QEE.js} +2 -2
- package/dist/cli/chunks/{chunk-NZHOKLII.js → chunk-5T2HDET6.js} +3 -3
- package/dist/cli/chunks/{chunk-OX4R55T3.js → chunk-5T4J3IPG.js} +2 -2
- package/dist/cli/chunks/{chunk-QWG76RHA.js → chunk-6OLHPWSN.js} +2 -2
- package/dist/cli/chunks/{chunk-M5CDW2ZH.js → chunk-6SCIX2W2.js} +2 -2
- package/dist/cli/chunks/{chunk-MQOFFRTA.js → chunk-6WF2MOQB.js} +2 -2
- package/dist/cli/chunks/{chunk-JP63XACW.js → chunk-7BQXEYRV.js} +2 -2
- package/dist/cli/chunks/{chunk-H56AROF2.js → chunk-7VO5IEJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-YXH2CVAF.js → chunk-AIBE3J4A.js} +1 -1
- package/dist/cli/chunks/{chunk-BWP3UVPE.js → chunk-AMW27FSS.js} +3 -3
- package/dist/cli/chunks/{chunk-3JAOFKEU.js → chunk-AZJYDM2K.js} +1 -1
- package/dist/cli/chunks/{chunk-MBSJ5G4I.js → chunk-B6CT4ILU.js} +4 -4
- package/dist/cli/chunks/{chunk-FJGSEPFL.js → chunk-BEFRQOLH.js} +2 -2
- package/dist/cli/chunks/{chunk-UIJFU4KD.js → chunk-C2446H7G.js} +2 -2
- package/dist/cli/chunks/{chunk-YIYV2JB6.js → chunk-D7IWGQTW.js} +2 -2
- package/dist/cli/chunks/{chunk-JLL27IGU.js → chunk-D7PI4CYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-I42R57ON.js → chunk-DAIM72HV.js} +2 -2
- package/dist/cli/chunks/{chunk-YYAPO3CU.js → chunk-DPKECIKN.js} +2 -2
- package/dist/cli/chunks/{chunk-E2BJT6A7.js → chunk-E6CGBOZY.js} +2 -2
- package/dist/cli/chunks/{chunk-MC7K44M4.js → chunk-EGTOSQZK.js} +2 -2
- package/dist/cli/chunks/{chunk-NRCL3WCP.js → chunk-EMZ3DXMG.js} +2 -2
- package/dist/cli/chunks/{chunk-NNZMEYLT.js → chunk-EWI37TJA.js} +1 -1
- package/dist/cli/chunks/{chunk-NNVXHC74.js → chunk-F34OO2Q7.js} +3 -3
- package/dist/cli/chunks/{chunk-U7NMPZE2.js → chunk-F6QPAVWS.js} +2 -2
- package/dist/cli/chunks/chunk-F77X5DAF.js +2 -0
- package/dist/cli/chunks/{chunk-6GCOIIHY.js → chunk-FDFJJFQT.js} +2 -2
- package/dist/cli/chunks/{chunk-OPDTDKN3.js → chunk-FQ7I4JBQ.js} +2 -2
- package/dist/cli/chunks/{chunk-RNF47IJ5.js → chunk-G5FPWH5O.js} +2 -2
- package/dist/cli/chunks/{chunk-IRR7YA3Q.js → chunk-GDMH7NPV.js} +2 -2
- package/dist/cli/chunks/{chunk-6FL3GN4T.js → chunk-GILL32E2.js} +2 -2
- package/dist/cli/chunks/{chunk-JE3C7JYN.js → chunk-GLMDRGJD.js} +1 -1
- package/dist/cli/chunks/{chunk-JTF6D2RJ.js → chunk-GS33ZRJH.js} +2 -2
- package/dist/cli/chunks/chunk-HPYGMKZF.js +2 -0
- package/dist/cli/chunks/{chunk-6Q2PPOOF.js → chunk-HTLAPMTK.js} +1 -1
- package/dist/cli/chunks/{chunk-RZCAA2PZ.js → chunk-IAK76TIZ.js} +1 -1
- package/dist/cli/chunks/{chunk-LZ6TNTGO.js → chunk-ICF5RPQU.js} +2 -2
- package/dist/cli/chunks/{chunk-BO2OV2RH.js → chunk-IPAQ4HVX.js} +2 -2
- package/dist/cli/chunks/{chunk-FND6V2RV.js → chunk-ISRTT4I7.js} +8 -8
- package/dist/cli/chunks/{chunk-KTRB3L53.js → chunk-IYFMDIYZ.js} +2 -2
- package/dist/cli/chunks/{chunk-T63EK6GH.js → chunk-JRBGHWAM.js} +2 -2
- package/dist/cli/chunks/{chunk-GL3HZN3O.js → chunk-JYR3X4OC.js} +1 -1
- package/dist/cli/chunks/{chunk-R5ONQAQL.js → chunk-K72J52JO.js} +2 -2
- package/dist/cli/chunks/{chunk-FU77CDEM.js → chunk-K7CW2X6U.js} +2 -2
- package/dist/cli/chunks/{chunk-3X2ZQ55B.js → chunk-K7K4TFJM.js} +3 -3
- package/dist/cli/chunks/{chunk-2ULVCLOW.js → chunk-KCXE2LZU.js} +2 -2
- package/dist/cli/chunks/{chunk-UDV4YB42.js → chunk-KGPAWNNR.js} +1 -1
- package/dist/cli/chunks/{chunk-CTDO2UB2.js → chunk-KJ56OXH4.js} +1 -1
- package/dist/cli/chunks/{chunk-DF3MJ2YL.js → chunk-KUFC4DBX.js} +1 -1
- package/dist/cli/chunks/{chunk-UHDBM7QS.js → chunk-KWZEBHAP.js} +2 -2
- package/dist/cli/chunks/{chunk-WWD5IWTV.js → chunk-L6VNEEN6.js} +1 -1
- package/dist/cli/chunks/{chunk-7SEHQTYD.js → chunk-LHPR7ROV.js} +1 -1
- package/dist/cli/chunks/{chunk-YDKYLNKZ.js → chunk-LKK3NIHC.js} +1 -1
- package/dist/cli/chunks/{chunk-YDDZJCKY.js → chunk-LOFA3U4X.js} +1 -1
- package/dist/cli/chunks/{chunk-HAO3SPOE.js → chunk-LYKSIOOT.js} +2 -2
- package/dist/cli/chunks/chunk-M2PSXKTG.js +2 -0
- package/dist/cli/chunks/{chunk-UZL366ZI.js → chunk-M3MKP5VN.js} +1 -1
- package/dist/cli/chunks/{chunk-7YYTTWGY.js → chunk-M4ARHDY4.js} +1 -1
- package/dist/cli/chunks/{chunk-IL2KOW5W.js → chunk-M5DBKHM4.js} +2 -2
- package/dist/cli/chunks/{chunk-SL6YZAT4.js → chunk-MDWJXSBA.js} +2 -2
- package/dist/cli/chunks/{chunk-HMFEPKAR.js → chunk-MFWWPRBV.js} +2 -2
- package/dist/cli/chunks/{chunk-N7IBYDW5.js → chunk-MHWYQHGN.js} +1 -1
- package/dist/cli/chunks/{chunk-Q7EBD24B.js → chunk-MIQBRVK2.js} +1 -1
- package/dist/cli/chunks/{chunk-ERYMAYJW.js → chunk-MKZQBBCU.js} +2 -2
- package/dist/cli/chunks/{chunk-NEYYLAYS.js → chunk-MQ5WMWUK.js} +2 -2
- package/dist/cli/chunks/chunk-MQIAN57O.js +2 -0
- package/dist/cli/chunks/{chunk-6B4S7PKP.js → chunk-MU4P4P4E.js} +1 -1
- package/dist/cli/chunks/{chunk-B5MMDMH6.js → chunk-MWV4KPOB.js} +2 -2
- package/dist/cli/chunks/{chunk-SWOG3PBD.js → chunk-N244P4MM.js} +2 -2
- package/dist/cli/chunks/{chunk-7ZSPCGTI.js → chunk-N3MM4Z33.js} +2 -2
- package/dist/cli/chunks/{chunk-VDTFRMES.js → chunk-N4CXUGXE.js} +2 -2
- package/dist/cli/chunks/{chunk-C6BBRM2J.js → chunk-ND6YSW5N.js} +1 -1
- package/dist/cli/chunks/{chunk-5IBJURYB.js → chunk-NJYI7HX7.js} +2 -2
- package/dist/cli/chunks/{chunk-4CYLSXA6.js → chunk-NSRDP7RD.js} +2 -2
- package/dist/cli/chunks/{chunk-USFZ4IJD.js → chunk-NZGLDOU4.js} +15 -15
- package/dist/cli/chunks/{chunk-HM523MTQ.js → chunk-O3SG32PS.js} +1 -1
- package/dist/cli/chunks/{chunk-NXPFGPHV.js → chunk-OIFJH7TF.js} +1 -1
- package/dist/cli/chunks/{chunk-5EWWA4QP.js → chunk-OKKTDHHF.js} +6 -6
- package/dist/cli/chunks/{chunk-5SGEOO2F.js → chunk-OO7KJ34Y.js} +2 -2
- package/dist/cli/chunks/{chunk-Z2K5IZM6.js → chunk-OV4BLIKJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RTDHWOAG.js → chunk-PISW5HUX.js} +1 -1
- package/dist/cli/chunks/{chunk-5ER3COX3.js → chunk-PLD4IGDL.js} +2 -2
- package/dist/cli/chunks/{chunk-D2FBUOAR.js → chunk-PMWWWYUM.js} +1 -1
- package/dist/cli/chunks/{chunk-OG7CWWFR.js → chunk-PWJZZCHJ.js} +1 -1
- package/dist/cli/chunks/{chunk-GELF4ILR.js → chunk-PZ4PRZXN.js} +9 -9
- package/dist/cli/chunks/chunk-PZCSJZVJ.js +2 -0
- package/dist/cli/chunks/{chunk-ZXQNE4QV.js → chunk-Q53M4LI7.js} +1 -1
- package/dist/cli/chunks/{chunk-WPVCSFDA.js → chunk-QPMAXDJ2.js} +2 -2
- package/dist/cli/chunks/{chunk-L74CHKFR.js → chunk-RJKYPWFD.js} +2 -2
- package/dist/cli/chunks/{chunk-4OUAHZX2.js → chunk-RUC3FCRK.js} +2 -2
- package/dist/cli/chunks/{chunk-HRLXU4LH.js → chunk-SC6UFGJ6.js} +2 -2
- package/dist/cli/chunks/{chunk-AEJVOJPT.js → chunk-SJC7OKF3.js} +2 -2
- package/dist/cli/chunks/{chunk-X3RJ6SFC.js → chunk-STMMZXS6.js} +1 -1
- package/dist/cli/chunks/{chunk-CAMEFWRK.js → chunk-SVILIQQQ.js} +1 -1
- package/dist/cli/chunks/{chunk-ADV4DH3W.js → chunk-SXMGNMFL.js} +3 -3
- package/dist/cli/chunks/{chunk-ZG4P3DTL.js → chunk-SZKFT6CD.js} +2 -2
- package/dist/cli/chunks/{chunk-4QFAUSWQ.js → chunk-TBJ566KV.js} +2 -2
- package/dist/cli/chunks/{chunk-7RMZAVGO.js → chunk-TCV5DASI.js} +2 -2
- package/dist/cli/chunks/{chunk-U6UK3UMX.js → chunk-TWAWEP4X.js} +3 -3
- package/dist/cli/chunks/chunk-U27GVYXA.js +2 -0
- package/dist/cli/chunks/{chunk-JD2PG4KS.js → chunk-UFKVKNAA.js} +1 -1
- package/dist/cli/chunks/{chunk-FLTPHVZ3.js → chunk-USB7GCIC.js} +1 -1
- package/dist/cli/chunks/{chunk-HQJMCTWN.js → chunk-UW3ZSFFB.js} +2 -2
- package/dist/cli/chunks/{chunk-JTZ3Q2QS.js → chunk-UWAUYDW4.js} +2 -2
- package/dist/cli/chunks/{chunk-QEODION5.js → chunk-UXJVR323.js} +2 -2
- package/dist/cli/chunks/{chunk-QM65UGPV.js → chunk-V5G3SMAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-PL5SLO2W.js → chunk-VDKMBOUK.js} +1 -1
- package/dist/cli/chunks/{chunk-HWM2XJ3P.js → chunk-VJ2D6FST.js} +2 -2
- package/dist/cli/chunks/{chunk-5LON3MLI.js → chunk-VJOPNK2L.js} +2 -2
- package/dist/cli/chunks/{chunk-2L73WXA4.js → chunk-VRE2EBFI.js} +2 -2
- package/dist/cli/chunks/{chunk-3RZL4QTT.js → chunk-WI5WXYIS.js} +2 -2
- package/dist/cli/chunks/{chunk-XTP2GHI7.js → chunk-WIYWDON4.js} +2 -2
- package/dist/cli/chunks/{chunk-SNTMAVPH.js → chunk-WYMQ6FZR.js} +3 -3
- package/dist/cli/chunks/{chunk-BT3QLWII.js → chunk-XBFEHVBO.js} +2 -2
- package/dist/cli/chunks/{chunk-DY5KEOHX.js → chunk-XDZXLEJK.js} +1 -1
- package/dist/cli/chunks/{chunk-PFCAMX6H.js → chunk-XJXCSCCP.js} +1 -1
- package/dist/cli/chunks/{chunk-JXIPRMAY.js → chunk-XVA56PXZ.js} +4 -4
- package/dist/cli/chunks/{chunk-6ZK24V2Y.js → chunk-Y2EDDV5U.js} +2 -2
- package/dist/cli/chunks/{chunk-5G5AAEFF.js → chunk-YSLE6NNG.js} +2 -2
- package/dist/cli/chunks/{chunk-PZHZPX3O.js → chunk-Z4BTPQLG.js} +2 -2
- package/dist/cli/chunks/{chunk-GJUGSH7T.js → chunk-ZM4QGYGK.js} +3 -3
- package/dist/cli/chunks/{ci-AWZ3S5OT.js → ci-2BLMQNX3.js} +2 -2
- package/dist/cli/chunks/{ci-output-JLCYTIMT.js → ci-output-XK4PPSN7.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-BJDKBDIL.js → circuit-breaker-W7X4NPFE.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-KKOP5ZMO.js → claude-flow-setup-GLBLSYNJ.js} +2 -2
- package/dist/cli/chunks/client-C6CJOCRN.js +2 -0
- package/dist/cli/chunks/{cline-installer-7M525SEA.js → cline-installer-7WX7DBGI.js} +2 -2
- package/dist/cli/chunks/{code-27SUVJDO.js → code-SP3HAQWG.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-TTQQZLAK.js → code-index-extractor-44HH36UG.js} +2 -2
- package/dist/cli/chunks/{codex-installer-GHNGNPKP.js → codex-installer-LMXRWLPU.js} +2 -2
- package/dist/cli/chunks/{completions-JPJD24DG.js → completions-GL5FTZAN.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-Q74EJV33.js → complexity-analyzer-CQMYGETL.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-ULTRDIML.js → continuedev-installer-CYVYS5B7.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-EK52X4CG.js → copilot-installer-M7XVII2A.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-2GKBRYXL.js → cost-tracker-S4ET4FH3.js} +2 -2
- package/dist/cli/chunks/{coverage-YCLC3W2A.js → coverage-DFVSSQ4A.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-I3GEA5G6.js +2 -0
- package/dist/cli/chunks/{cursor-installer-B3ALFW5E.js → cursor-installer-KWDSQPQC.js} +2 -2
- package/dist/cli/chunks/{daemon-ZKEBVLJA.js → daemon-2HD54QVO.js} +3 -3
- package/dist/cli/chunks/daemon-CRX46BBO.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-OQPJ6ULA.js → dag-attention-scheduler-SCP6WPZB.js} +2 -2
- package/dist/cli/chunks/{detect-YMYIQH3Q.js → detect-XS2GDCEX.js} +2 -2
- package/dist/cli/chunks/{dist-node-R4FAYQRY.js → dist-node-U43MVQ3F.js} +2 -2
- package/dist/cli/chunks/{domain-handler-IGWXLF2S.js → domain-handler-HITMDULH.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-A7YNO76C.js → domain-transfer-TJF7DNI4.js} +2 -2
- package/dist/cli/chunks/dream-JCQMG2RL.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-KODZAS7Y.js → embed-and-insert-pattern-JKG33YZK.js} +2 -2
- package/dist/cli/chunks/{eval-ALQW7Q2S.js → eval-NF5Y4W37.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-3WK4RXWK.js → experience-capture-middleware-VMMFYJ4D.js} +3 -3
- package/dist/cli/chunks/{fast-paths-PQWDFIJZ.js → fast-paths-W2Q53IR2.js} +2 -2
- package/dist/cli/chunks/{feature-flags-JRUAZCND.js → feature-flags-B4PBMQJO.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6X33B3WX.js → feature-flags-PVI7A4RE.js} +2 -2
- package/dist/cli/chunks/{file-discovery-SA3YU3IH.js → file-discovery-E4L3I33I.js} +2 -2
- package/dist/cli/chunks/{fleet-7TXCAOKQ.js → fleet-LE5SHVLK.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-ZKNYACEC.js → gnn-wrapper-MWWJBLOH.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-KRZRZ23F.js → heartbeat-handler-XOUVNPQK.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-FBHE4ZWH.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-EOOA4WXD.js +2 -0
- package/dist/cli/chunks/hnsw-index-TD3KRPND.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-LVHQ5SG7.js → hnsw-legacy-bridge-W3T5ZDDP.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-HP4JZS6K.js → hnswlib-node-3TZFES5I.js} +2 -2
- package/dist/cli/chunks/hooks-RUPQVIUM.js +250 -0
- package/dist/cli/chunks/hybrid-router-64O6PXZ2.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-2EZBZMFK.js → hypergraph-engine-VDFK3JYH.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-GLPWYII2.js → hypergraph-handler-EUDGEF25.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-ITQHXGTM.js +2 -0
- package/dist/cli/chunks/{init-handler-ZSDO5VMA.js → init-handler-MZEAJOZK.js} +6 -6
- package/dist/cli/chunks/init-wizard-DZ4IKGQI.js +2 -0
- package/dist/cli/chunks/kernel-HSVY4ZYK.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-ATYSDWIV.js → kilocode-installer-ECBYWT6M.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-K66YT6PC.js → kiro-installer-KYFCSYTG.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-H32TXXX4.js +2 -0
- package/dist/cli/chunks/{learning-BVYCC4RI.js → learning-4RAFMDSB.js} +3 -3
- package/dist/cli/chunks/{llm-router-VBCXE6DN.js → llm-router-JHBNLYP3.js} +4 -4
- package/dist/cli/chunks/llm-router-service-3FKESBUX.js +2 -0
- package/dist/cli/chunks/{load-AREDQE2U.js → load-4DVQML7P.js} +2 -2
- package/dist/cli/chunks/load-test-LKHURZGZ.js +2 -0
- package/dist/cli/chunks/{mcp-NG6H6UC5.js → mcp-LCWMU4GZ.js} +2 -2
- package/dist/cli/chunks/{memory-Y65EHG6N.js → memory-3DTJAURT.js} +5 -5
- package/dist/cli/chunks/memory-backend-XRJRZ6CK.js +2 -0
- package/dist/cli/chunks/memory-handlers-BL6E3XAK.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-VRPRFUZT.js → multi-model-executor-AVR5SZOO.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-CKQXPM5R.js → opencode-installer-DW2426QM.js} +2 -2
- package/dist/cli/chunks/{orchestrator-I7JBKD6G.js → orchestrator-AHF4W5GS.js} +5 -5
- package/dist/cli/chunks/{pipeline-MV2RWCBI.js → pipeline-N6THEWYE.js} +2 -2
- package/dist/cli/chunks/{platform-VU5P3SOG.js → platform-MRCFQF7X.js} +2 -2
- package/dist/cli/chunks/{plugin-6TERLKCB.js → plugin-6YKUN5QM.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-WIUIN2DL.js → prime-radiant-advanced-wasm-2YPAHSVS.js} +2 -2
- package/dist/cli/chunks/protocol-executor-KABPB6PQ.js +2 -0
- package/dist/cli/chunks/{protocol-handler-HKWBGARO.js → protocol-handler-Y2NMUKWQ.js} +2 -2
- package/dist/cli/chunks/{prove-7CQPHBRJ.js → prove-DZUNWBFD.js} +2 -2
- package/dist/cli/chunks/provider-manager-U7EBM3FA.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-64O2OQIW.js +2 -0
- package/dist/cli/chunks/{quality-VLUVXKVG.js → quality-AIFQMGUV.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-SV3COGIL.js +2 -0
- package/dist/cli/chunks/{real-embeddings-JPZ64KK2.js → real-embeddings-5XL4LOG2.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-NONVB3UE.js → roocode-installer-LV3WONT5.js} +2 -2
- package/dist/cli/chunks/router-QARRPMED.js +2 -0
- package/dist/cli/chunks/routing-feedback-KD2JFTPK.js +2 -0
- package/dist/cli/chunks/{routing-handler-YYXDT4J2.js → routing-handler-WSMUILGD.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5PFMNDLR.js → ruvector-commands-BCEIDTW3.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-TF6H7AXH.js → rvf-dual-writer-LRSPC6H3.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-VNGIUZCO.js → rvf-migration-adapter-QHNX6353.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-VA52YAIY.js → rvf-migration-coordinator-SLNB3XPW.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-4LLGF5AY.js +2 -0
- package/dist/cli/chunks/safe-db-RAX3H2P7.js +2 -0
- package/dist/cli/chunks/schedule-RQZGLLUY.js +2 -0
- package/dist/cli/chunks/scheduler-ACWTN4LN.js +2 -0
- package/dist/cli/chunks/{security-62HEETBF.js → security-CYY6TECQ.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-U6JE4O6A.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-JTZK7LRD.js → shared-rvf-dual-writer-PJBSNBRV.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-SWNBO257.js +2 -0
- package/dist/cli/chunks/{status-handler-LSUPUKRF.js → status-handler-W723LXX5.js} +2 -2
- package/dist/cli/chunks/{structural-health-Z75A666N.js → structural-health-WZUPZBB5.js} +2 -2
- package/dist/cli/chunks/{sync-M3O4T3A3.js → sync-UA22CKUS.js} +2 -2
- package/dist/cli/chunks/sync-ZLMF53TB.js +2 -0
- package/dist/cli/chunks/{task-handler-AQBSZAQC.js → task-handler-SENTEEXZ.js} +2 -2
- package/dist/cli/chunks/{task-handlers-BOZP247V.js → task-handlers-FGVUZOCC.js} +3 -3
- package/dist/cli/chunks/{test-FTEGPNN2.js → test-Q37C3WI2.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-IGR4U2VQ.js → test-scheduling-E6SPIBTH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-HQFFMZUF.js +2 -0
- package/dist/cli/chunks/{token-usage-VCHV47EO.js → token-usage-JHNWTZ7L.js} +2 -2
- package/dist/cli/chunks/{transformers-M27QSNFH.js → transformers-TEXDUVNI.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-IIGEJYFU.js → tree-sitter-wasm-parser-MWSS52H6.js} +2 -2
- package/dist/cli/chunks/{types-RQFPUUKA.js → types-YQRKHYH3.js} +2 -2
- package/dist/cli/chunks/unified-memory-QG3FDRKR.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-KOR4EOIG.js +2 -0
- package/dist/cli/chunks/unified-persistence-J6NIRYKM.js +2 -0
- package/dist/cli/chunks/{upgrade-VJMYX3AL.js → upgrade-JKMEDURI.js} +2 -2
- package/dist/cli/chunks/{validate-ML7HUAU5.js → validate-URO7G6OE.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-RCR6EYRC.js → validate-swarm-VZVJ56Z5.js} +2 -2
- package/dist/cli/chunks/{vibium-ZOOS3W5L.js → vibium-G5WZILL6.js} +2 -2
- package/dist/cli/chunks/visual-security-RAWV6YLN.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-2YPGYLWK.js → web-tree-sitter-LECH5T6H.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-GOJWUWC5.js → windsurf-installer-2NPLC2YW.js} +2 -2
- package/dist/cli/chunks/{witness-chain-3MGSS3Q4.js → witness-chain-X347C36A.js} +2 -2
- package/dist/cli/chunks/witness-chain-ZO7FIM35.js +2 -0
- package/dist/cli/chunks/{workflow-B5Q77BI4.js → workflow-V4ALYZ73.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-7SKITNIJ.js +2 -0
- package/dist/cli/chunks/wrappers-QXOPRPR4.js +2 -0
- package/dist/cli/commands/hooks-handlers/task-hooks.js +50 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.js +12 -1
- package/dist/integrations/ruvector/shared-rvf-dual-writer.js +6 -2
- package/dist/kernel/project-root.d.ts +33 -0
- package/dist/kernel/project-root.js +86 -0
- package/dist/kernel/unified-memory.d.ts +2 -19
- package/dist/kernel/unified-memory.js +8 -64
- package/dist/learning/local-judge-client.d.ts +55 -0
- package/dist/learning/local-judge-client.js +127 -0
- package/dist/learning/nagual-client.d.ts +73 -0
- package/dist/learning/nagual-client.js +150 -0
- package/dist/learning/pattern-store.js +10 -3
- package/dist/mcp/bundle.js +392 -390
- package/dist/mcp/entry.js +44 -33
- package/dist/mcp/transport/stdio.d.ts +7 -0
- package/dist/mcp/transport/stdio.js +39 -2
- package/dist/workers/daemon.js +2 -0
- package/dist/workers/quality-daemon/git-watcher.js +2 -0
- package/dist/workers/quality-daemon/index.js +2 -0
- package/dist/workers/worker-manager.js +4 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-BHPUKMJ5.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-JQ5WD2HM.js +0 -2
- package/dist/cli/chunks/audit-BMQ3VESB.js +0 -3
- package/dist/cli/chunks/base-E32WLGY2.js +0 -2
- package/dist/cli/chunks/browser-workflow-LNNXXAJG.js +0 -2
- package/dist/cli/chunks/chunk-2EQVYYBF.js +0 -2
- package/dist/cli/chunks/chunk-3VF3HCG4.js +0 -2
- package/dist/cli/chunks/chunk-JOLDCS6X.js +0 -2
- package/dist/cli/chunks/chunk-JSFYPLMQ.js +0 -2
- package/dist/cli/chunks/chunk-YX2HY4MX.js +0 -2
- package/dist/cli/chunks/client-2UKBYFX4.js +0 -2
- package/dist/cli/chunks/cross-domain-router-FPM3L27L.js +0 -2
- package/dist/cli/chunks/daemon-YWINEHG4.js +0 -10
- package/dist/cli/chunks/dream-XM33US3V.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-GM3M2MTG.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-K62GEHIL.js +0 -2
- package/dist/cli/chunks/hnsw-index-VCAK3TWN.js +0 -2
- package/dist/cli/chunks/hooks-6Y3UHYI2.js +0 -248
- package/dist/cli/chunks/hybrid-router-432QNCNG.js +0 -2
- package/dist/cli/chunks/impact-analyzer-VTSISNN4.js +0 -2
- package/dist/cli/chunks/init-wizard-COB5AH7Q.js +0 -2
- package/dist/cli/chunks/kernel-ROK7X5FM.js +0 -2
- package/dist/cli/chunks/knowledge-graph-YUWIDIWW.js +0 -2
- package/dist/cli/chunks/llm-router-service-7VLXJ7VE.js +0 -2
- package/dist/cli/chunks/load-test-32524DL3.js +0 -2
- package/dist/cli/chunks/memory-backend-BI2V5AAB.js +0 -2
- package/dist/cli/chunks/memory-handlers-NSOFWVFN.js +0 -2
- package/dist/cli/chunks/protocol-executor-2UPB7SPI.js +0 -2
- package/dist/cli/chunks/provider-manager-PDT37MIJ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-AQQ2BI4V.js +0 -2
- package/dist/cli/chunks/queen-coordinator-6DVDVEU4.js +0 -2
- package/dist/cli/chunks/router-O2G4KQ6L.js +0 -2
- package/dist/cli/chunks/routing-feedback-TAGTD3KQ.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-46GRWQJR.js +0 -2
- package/dist/cli/chunks/safe-db-LNIPXXHH.js +0 -2
- package/dist/cli/chunks/schedule-AUH3ZALY.js +0 -2
- package/dist/cli/chunks/scheduler-KK3OYPWW.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-XWTQPGCT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-CYESP7NG.js +0 -2
- package/dist/cli/chunks/sync-VI37UHHH.js +0 -2
- package/dist/cli/chunks/token-bootstrap-2DFRVMBM.js +0 -2
- package/dist/cli/chunks/unified-memory-RISHEANP.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-2IKXGMNZ.js +0 -2
- package/dist/cli/chunks/unified-persistence-ZTTUJNTU.js +0 -2
- package/dist/cli/chunks/visual-security-D66DTAO5.js +0 -2
- package/dist/cli/chunks/witness-chain-RHWHHDLV.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-OQMFW2TC.js +0 -2
- package/dist/cli/chunks/wrappers-MM5VLEPG.js +0 -2
|
@@ -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.10.4");process.exit(0)}
|
|
2
|
+
import{a}from"./chunk-F6QPAVWS.js";import"./chunk-F77X5DAF.js";import"./chunk-TBJ566KV.js";import"./chunk-NZGLDOU4.js";import"./chunk-K72J52JO.js";import"./chunk-U27GVYXA.js";import"./chunk-IYFMDIYZ.js";import"./chunk-HPYGMKZF.js";import"./chunk-VRE2EBFI.js";import"./chunk-2B6ETC7C.js";import"./chunk-PISW5HUX.js";import"./chunk-RJKYPWFD.js";import"./chunk-2G2PVVQG.js";import"./chunk-UWAUYDW4.js";import"./chunk-N3MM4Z33.js";import"./chunk-6OLHPWSN.js";import"./chunk-WI5WXYIS.js";import"./chunk-EMZ3DXMG.js";import"./chunk-MFWWPRBV.js";import"./chunk-D7IWGQTW.js";import"./chunk-SVILIQQQ.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.10.
|
|
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.10.4");process.exit(0)}
|
|
2
|
+
import"./chunk-SVILIQQQ.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.10.
|
|
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.10.4");process.exit(0)}
|
|
2
|
+
import{b as u}from"./chunk-LOFA3U4X.js";import{a as f,c as h}from"./chunk-2B6ETC7C.js";import"./chunk-SVILIQQQ.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.10.
|
|
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.10.4");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g}from"./chunk-UW3ZSFFB.js";import"./chunk-HPYGMKZF.js";import"./chunk-VRE2EBFI.js";import"./chunk-D7IWGQTW.js";import"./chunk-SVILIQQQ.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.10.4");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i}from"./chunk-YSLE6NNG.js";import"./chunk-NZGLDOU4.js";import"./chunk-K72J52JO.js";import"./chunk-U27GVYXA.js";import"./chunk-IYFMDIYZ.js";import"./chunk-HPYGMKZF.js";import"./chunk-VRE2EBFI.js";import"./chunk-2B6ETC7C.js";import"./chunk-RJKYPWFD.js";import"./chunk-2G2PVVQG.js";import"./chunk-UWAUYDW4.js";import"./chunk-N3MM4Z33.js";import"./chunk-6OLHPWSN.js";import"./chunk-WI5WXYIS.js";import"./chunk-EMZ3DXMG.js";import"./chunk-MFWWPRBV.js";import"./chunk-D7IWGQTW.js";import"./chunk-SVILIQQQ.js";export{a as GENESIS_PREV_HASH,f as WitnessChain,i as _resetWitnessChainForTests,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.10.
|
|
2
|
-
import{b as $}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.10.4");process.exit(0)}
|
|
2
|
+
import{b as $}from"./chunk-KJ56OXH4.js";import"./chunk-WIYWDON4.js";import{d as R}from"./chunk-GILL32E2.js";import{b as k,c as C,d as b}from"./chunk-DPKECIKN.js";import{c as W}from"./chunk-IYFMDIYZ.js";import"./chunk-UFKVKNAA.js";import"./chunk-2B6ETC7C.js";import"./chunk-SVILIQQQ.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-XHYAJUB6.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-XHYAJUB6.js"),{writeOutput:u,toJSON:c}=await import("./ci-output-XK4PPSN7.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.10.4");process.exit(0)}
|
|
2
|
+
import{a,b,c,d}from"./chunk-4BX72XG4.js";import"./chunk-GDMH7NPV.js";import"./chunk-NZGLDOU4.js";import"./chunk-K72J52JO.js";import"./chunk-U27GVYXA.js";import"./chunk-IYFMDIYZ.js";import"./chunk-HPYGMKZF.js";import"./chunk-VRE2EBFI.js";import"./chunk-UFKVKNAA.js";import"./chunk-2B6ETC7C.js";import"./chunk-PISW5HUX.js";import"./chunk-RJKYPWFD.js";import"./chunk-2G2PVVQG.js";import"./chunk-UWAUYDW4.js";import"./chunk-N3MM4Z33.js";import"./chunk-6OLHPWSN.js";import"./chunk-WI5WXYIS.js";import"./chunk-EMZ3DXMG.js";import"./chunk-MFWWPRBV.js";import"./chunk-D7IWGQTW.js";import"./chunk-SVILIQQQ.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
|
|
@@ -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.10.4");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-N4CXUGXE.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-C2446H7G.js";import"./chunk-NZGLDOU4.js";import"./chunk-K72J52JO.js";import"./chunk-U27GVYXA.js";import"./chunk-IYFMDIYZ.js";import"./chunk-HPYGMKZF.js";import"./chunk-VRE2EBFI.js";import"./chunk-2B6ETC7C.js";import"./chunk-RJKYPWFD.js";import"./chunk-2G2PVVQG.js";import"./chunk-UWAUYDW4.js";import"./chunk-N3MM4Z33.js";import"./chunk-6OLHPWSN.js";import"./chunk-WI5WXYIS.js";import"./chunk-EMZ3DXMG.js";import"./chunk-MFWWPRBV.js";import"./chunk-D7IWGQTW.js";import"./chunk-SVILIQQQ.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};
|
|
@@ -9,6 +9,7 @@ import chalk from 'chalk';
|
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { QE_HOOK_EVENTS } from '../../../learning/qe-hooks.js';
|
|
11
11
|
import { findProjectRoot, getUnifiedMemory } from '../../../kernel/unified-memory.js';
|
|
12
|
+
import { getNagualClient } from '../../../learning/nagual-client.js';
|
|
12
13
|
import { applyHookBusyTimeout, getHooksSystem, createHybridBackendWithTimeout, incrementDreamExperience, persistTaskOutcome, updateHookRouterQValue, updateRoutingOutcomeQuality, printJson, printSuccess, } from './hooks-shared.js';
|
|
13
14
|
import { ensureRoutingOutcomesAdr095Columns } from '../../../routing/routing-outcomes-migration.js';
|
|
14
15
|
import { deriveTaskType } from '../../../learning/agent-routing.js';
|
|
@@ -32,6 +33,36 @@ const LOW_CONFIDENCE_THRESHOLD = 0.5;
|
|
|
32
33
|
function hashDescription(description) {
|
|
33
34
|
return createHash('sha256').update(description).digest('hex').slice(0, 16);
|
|
34
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* QE domains where nagual patterns add meaningful context.
|
|
38
|
+
* Skipped for trivial/short tasks to avoid latency with no benefit.
|
|
39
|
+
*/
|
|
40
|
+
const NAGUAL_SEARCH_DOMAINS = new Set([
|
|
41
|
+
'test-generation',
|
|
42
|
+
'coverage-analysis',
|
|
43
|
+
'defect-intelligence',
|
|
44
|
+
'security-compliance',
|
|
45
|
+
'quality-assessment',
|
|
46
|
+
'requirements-validation',
|
|
47
|
+
]);
|
|
48
|
+
const NAGUAL_SEARCH_MIN_DESCRIPTION_LENGTH = 80;
|
|
49
|
+
/**
|
|
50
|
+
* Search nagual for relevant patterns when the task is complex enough to benefit.
|
|
51
|
+
* Returns empty array silently on any failure — always best-effort.
|
|
52
|
+
*/
|
|
53
|
+
async function fetchNagualContext(description, domain) {
|
|
54
|
+
if (!process.env['NAGUAL_URL'] && !process.env['NAGUAL_CLOUD_URL'] && !process.env['NAGUAL_CLOUD_KEY']) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
if (description.length < NAGUAL_SEARCH_MIN_DESCRIPTION_LENGTH) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
if (domain && !NAGUAL_SEARCH_DOMAINS.has(domain)) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
const client = getNagualClient();
|
|
64
|
+
return client.search(description.slice(0, 300), domain, 3);
|
|
65
|
+
}
|
|
35
66
|
/**
|
|
36
67
|
* Register pre-task and post-task subcommands on the hooks command.
|
|
37
68
|
*/
|
|
@@ -63,6 +94,11 @@ export function registerTaskHooks(hooks) {
|
|
|
63
94
|
.slice(0, 5)
|
|
64
95
|
.map((p) => p?.id)
|
|
65
96
|
.filter((id) => typeof id === 'string');
|
|
97
|
+
// Nagual context: search cross-project knowledge hub for complex tasks
|
|
98
|
+
const nagualDomain = routing?.domains?.[0];
|
|
99
|
+
const nagualPatterns = options.description
|
|
100
|
+
? await fetchNagualContext(String(options.description), nagualDomain)
|
|
101
|
+
: [];
|
|
66
102
|
// Patches 090/100/160/300/320: signals derived from memory.db.
|
|
67
103
|
// All best-effort: failures fall through to empty/default values.
|
|
68
104
|
let historicalBest = null;
|
|
@@ -228,6 +264,14 @@ export function registerTaskHooks(hooks) {
|
|
|
228
264
|
lowConfidence,
|
|
229
265
|
// Bridge identifier so post-task can correlate (debug aid)
|
|
230
266
|
bridgeKey,
|
|
267
|
+
// Nagual cross-project context
|
|
268
|
+
nagualPatterns: nagualPatterns.map((p) => ({
|
|
269
|
+
id: p.id,
|
|
270
|
+
problem: p.problem,
|
|
271
|
+
solution: p.solution.slice(0, 400),
|
|
272
|
+
domain: p.domain,
|
|
273
|
+
reward: p.reward,
|
|
274
|
+
})),
|
|
231
275
|
});
|
|
232
276
|
}
|
|
233
277
|
else {
|
|
@@ -240,6 +284,12 @@ export function registerTaskHooks(hooks) {
|
|
|
240
284
|
console.log(chalk.yellow(' ⚠ Low confidence — consider providing more context'));
|
|
241
285
|
}
|
|
242
286
|
}
|
|
287
|
+
if (nagualPatterns.length > 0) {
|
|
288
|
+
console.log(chalk.bold('\n📚 Nagual context (cross-project):'));
|
|
289
|
+
for (const p of nagualPatterns) {
|
|
290
|
+
console.log(chalk.dim(` [${p.domain}] ${p.problem.slice(0, 80)} (reward: ${p.reward.toFixed(2)})`));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
243
293
|
}
|
|
244
294
|
return;
|
|
245
295
|
}
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module integrations/ruvector/shared-rvf-adapter
|
|
12
12
|
*/
|
|
13
|
+
// Issue #516: lightweight, sqlite-free project-root resolver (static import so it
|
|
14
|
+
// resolves under the test runner; avoids pulling unified-memory's sqlite graph).
|
|
15
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
13
16
|
let sharedAdapter = null;
|
|
14
17
|
let initAttempted = false;
|
|
15
18
|
// ---------------------------------------------------------------------------
|
|
@@ -62,7 +65,15 @@ export function getSharedRvfAdapter(dataDir = '.agentic-qe', dimensions = 384) {
|
|
|
62
65
|
}
|
|
63
66
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
64
67
|
const path = require('path');
|
|
65
|
-
|
|
68
|
+
// Issue #516: resolve a relative dataDir against the project root so the
|
|
69
|
+
// store lands in the project's own .agentic-qe/, not a cwd-relative one.
|
|
70
|
+
// A subfolder cwd (vendored builds, background workers, `aqe code index
|
|
71
|
+
// docs/`) otherwise scatters stray patterns.rvf-only stores. Explicit
|
|
72
|
+
// absolute dataDir args are honored as-is.
|
|
73
|
+
const baseDir = path.isAbsolute(dataDir)
|
|
74
|
+
? dataDir
|
|
75
|
+
: path.join(process.env.AQE_PROJECT_ROOT ?? findProjectRoot(), dataDir);
|
|
76
|
+
const rvfPath = path.join(baseDir, 'patterns.rvf');
|
|
66
77
|
// Open-or-create with a try-ladder rather than `existsSync` gate.
|
|
67
78
|
// Reasons:
|
|
68
79
|
// 1. RVF native's `RvfDatabase.create()` throws `0x0303 FsyncFailed`
|
|
@@ -56,16 +56,20 @@ export async function getSharedRvfDualWriter() {
|
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
58
|
// Get DB handle from unified memory
|
|
59
|
-
const { getUnifiedMemory } = await import('../../kernel/unified-memory.js');
|
|
59
|
+
const { getUnifiedMemory, findProjectRoot } = await import('../../kernel/unified-memory.js');
|
|
60
60
|
const unifiedMemory = getUnifiedMemory();
|
|
61
61
|
const db = unifiedMemory.getDatabase();
|
|
62
62
|
if (!db) {
|
|
63
63
|
return null;
|
|
64
64
|
}
|
|
65
|
+
// Issue #516: anchor brain.rvf to the project root rather than a
|
|
66
|
+
// cwd-relative path, so a subfolder cwd doesn't scatter a stray store.
|
|
67
|
+
const { join: joinPath } = await import('node:path');
|
|
68
|
+
const rvfPath = joinPath(process.env.AQE_PROJECT_ROOT ?? findProjectRoot(), '.agentic-qe', 'brain.rvf');
|
|
65
69
|
// Create dual-writer (dynamic import to avoid bundling .node files)
|
|
66
70
|
const { RvfDualWriter: DualWriterClass } = await import('./rvf-dual-writer.js');
|
|
67
71
|
const writer = new DualWriterClass(db, {
|
|
68
|
-
rvfPath
|
|
72
|
+
rvfPath,
|
|
69
73
|
mode: 'dual-write',
|
|
70
74
|
dimensions: 384,
|
|
71
75
|
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Root Detection
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, dependency-free resolution of the AQE project root. Kept in its
|
|
5
|
+
* own module (no SQLite / kernel imports) so hot paths — e.g. the RVF pattern
|
|
6
|
+
* store factory — can import it statically without dragging in the sqlite-heavy
|
|
7
|
+
* unified-memory graph, and so it resolves cleanly under the test runner.
|
|
8
|
+
*
|
|
9
|
+
* `unified-memory` re-exports `findProjectRoot` / `clearProjectRootCache` for
|
|
10
|
+
* backward compatibility, so existing import sites keep working.
|
|
11
|
+
*
|
|
12
|
+
* @module kernel/project-root
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Clear the cached project root. Useful for testing or when the
|
|
16
|
+
* environment changes at runtime.
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearProjectRootCache(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Find the project root by walking up the directory tree.
|
|
21
|
+
*
|
|
22
|
+
* Priority order:
|
|
23
|
+
* 1. AQE_PROJECT_ROOT environment variable (set by MCP config or init)
|
|
24
|
+
* 2. Walk up looking for the NEAREST .agentic-qe directory (existing AQE project)
|
|
25
|
+
* 3. Walk up looking for .git directory (git repo root)
|
|
26
|
+
* 4. Walk up looking for package.json WITHOUT node_modules sibling (monorepo root)
|
|
27
|
+
* 5. Fallback to current working directory
|
|
28
|
+
*
|
|
29
|
+
* Optimized: single upward walk checks all markers in one pass,
|
|
30
|
+
* and the result is cached at module level for subsequent calls.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findProjectRoot(startDir?: string): string;
|
|
33
|
+
//# sourceMappingURL=project-root.d.ts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Root Detection
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, dependency-free resolution of the AQE project root. Kept in its
|
|
5
|
+
* own module (no SQLite / kernel imports) so hot paths — e.g. the RVF pattern
|
|
6
|
+
* store factory — can import it statically without dragging in the sqlite-heavy
|
|
7
|
+
* unified-memory graph, and so it resolves cleanly under the test runner.
|
|
8
|
+
*
|
|
9
|
+
* `unified-memory` re-exports `findProjectRoot` / `clearProjectRootCache` for
|
|
10
|
+
* backward compatibility, so existing import sites keep working.
|
|
11
|
+
*
|
|
12
|
+
* @module kernel/project-root
|
|
13
|
+
*/
|
|
14
|
+
import * as fs from 'fs';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
/** Module-level cache for findProjectRoot result. */
|
|
17
|
+
let _cachedProjectRoot = null;
|
|
18
|
+
/**
|
|
19
|
+
* Clear the cached project root. Useful for testing or when the
|
|
20
|
+
* environment changes at runtime.
|
|
21
|
+
*/
|
|
22
|
+
export function clearProjectRootCache() {
|
|
23
|
+
_cachedProjectRoot = null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Find the project root by walking up the directory tree.
|
|
27
|
+
*
|
|
28
|
+
* Priority order:
|
|
29
|
+
* 1. AQE_PROJECT_ROOT environment variable (set by MCP config or init)
|
|
30
|
+
* 2. Walk up looking for the NEAREST .agentic-qe directory (existing AQE project)
|
|
31
|
+
* 3. Walk up looking for .git directory (git repo root)
|
|
32
|
+
* 4. Walk up looking for package.json WITHOUT node_modules sibling (monorepo root)
|
|
33
|
+
* 5. Fallback to current working directory
|
|
34
|
+
*
|
|
35
|
+
* Optimized: single upward walk checks all markers in one pass,
|
|
36
|
+
* and the result is cached at module level for subsequent calls.
|
|
37
|
+
*/
|
|
38
|
+
export function findProjectRoot(startDir = process.cwd()) {
|
|
39
|
+
if (_cachedProjectRoot) {
|
|
40
|
+
return _cachedProjectRoot;
|
|
41
|
+
}
|
|
42
|
+
if (process.env.AQE_PROJECT_ROOT) {
|
|
43
|
+
_cachedProjectRoot = process.env.AQE_PROJECT_ROOT;
|
|
44
|
+
return _cachedProjectRoot;
|
|
45
|
+
}
|
|
46
|
+
const dir = startDir;
|
|
47
|
+
const root = path.parse(dir).root;
|
|
48
|
+
let checkDir = dir;
|
|
49
|
+
let nearestAqeDir = null;
|
|
50
|
+
let lowestGitDir = null;
|
|
51
|
+
let topmostPackageJson = null;
|
|
52
|
+
while (checkDir !== root) {
|
|
53
|
+
// Issue #516: prefer the NEAREST (lowest) .agentic-qe, mirroring the
|
|
54
|
+
// .git logic below. Keeping the topmost match let an ancestor store
|
|
55
|
+
// (e.g. ~/.agentic-qe, created by any `aqe` run from $HOME) hijack
|
|
56
|
+
// every descendant project and fragment its learning into $HOME.
|
|
57
|
+
if (fs.existsSync(path.join(checkDir, '.agentic-qe'))) {
|
|
58
|
+
if (nearestAqeDir === null) {
|
|
59
|
+
nearestAqeDir = checkDir;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (fs.existsSync(path.join(checkDir, '.git'))) {
|
|
63
|
+
if (lowestGitDir === null) {
|
|
64
|
+
lowestGitDir = checkDir;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (fs.existsSync(path.join(checkDir, 'package.json'))) {
|
|
68
|
+
topmostPackageJson = checkDir;
|
|
69
|
+
}
|
|
70
|
+
checkDir = path.dirname(checkDir);
|
|
71
|
+
}
|
|
72
|
+
if (nearestAqeDir) {
|
|
73
|
+
_cachedProjectRoot = nearestAqeDir;
|
|
74
|
+
}
|
|
75
|
+
else if (lowestGitDir) {
|
|
76
|
+
_cachedProjectRoot = lowestGitDir;
|
|
77
|
+
}
|
|
78
|
+
else if (topmostPackageJson) {
|
|
79
|
+
_cachedProjectRoot = topmostPackageJson;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
_cachedProjectRoot = process.cwd();
|
|
83
|
+
}
|
|
84
|
+
return _cachedProjectRoot;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=project-root.js.map
|
|
@@ -25,25 +25,8 @@ import { type Database as DatabaseType, type Statement } from 'better-sqlite3';
|
|
|
25
25
|
export { validateTableName, ALLOWED_TABLE_NAMES } from '../shared/sql-safety.js';
|
|
26
26
|
export { BinaryHeap, UnifiedHnswIndex, createHnswIndex } from './unified-memory-hnsw.js';
|
|
27
27
|
import { type CRDTStore, type CRDTStoreState, type CRDTStoreDelta } from '../memory/crdt/index.js';
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
* environment changes at runtime.
|
|
31
|
-
*/
|
|
32
|
-
export declare function clearProjectRootCache(): void;
|
|
33
|
-
/**
|
|
34
|
-
* Find the project root by walking up the directory tree.
|
|
35
|
-
*
|
|
36
|
-
* Priority order:
|
|
37
|
-
* 1. AQE_PROJECT_ROOT environment variable (set by MCP config or init)
|
|
38
|
-
* 2. Walk up looking for .agentic-qe directory (existing AQE project)
|
|
39
|
-
* 3. Walk up looking for .git directory (git repo root)
|
|
40
|
-
* 4. Walk up looking for package.json WITHOUT node_modules sibling (monorepo root)
|
|
41
|
-
* 5. Fallback to current working directory
|
|
42
|
-
*
|
|
43
|
-
* Optimized: single upward walk checks all markers in one pass,
|
|
44
|
-
* and the result is cached at module level for subsequent calls.
|
|
45
|
-
*/
|
|
46
|
-
export declare function findProjectRoot(startDir?: string): string;
|
|
28
|
+
import { findProjectRoot, clearProjectRootCache } from './project-root.js';
|
|
29
|
+
export { findProjectRoot, clearProjectRootCache };
|
|
47
30
|
/**
|
|
48
31
|
* Get the default database path using project root detection.
|
|
49
32
|
* Always resolves to {project_root}/.agentic-qe/memory.db
|
|
@@ -46,70 +46,14 @@ import { createCRDTStore, } from '../memory/crdt/index.js';
|
|
|
46
46
|
// ============================================================================
|
|
47
47
|
// Project Root Detection
|
|
48
48
|
// ============================================================================
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Find the project root by walking up the directory tree.
|
|
60
|
-
*
|
|
61
|
-
* Priority order:
|
|
62
|
-
* 1. AQE_PROJECT_ROOT environment variable (set by MCP config or init)
|
|
63
|
-
* 2. Walk up looking for .agentic-qe directory (existing AQE project)
|
|
64
|
-
* 3. Walk up looking for .git directory (git repo root)
|
|
65
|
-
* 4. Walk up looking for package.json WITHOUT node_modules sibling (monorepo root)
|
|
66
|
-
* 5. Fallback to current working directory
|
|
67
|
-
*
|
|
68
|
-
* Optimized: single upward walk checks all markers in one pass,
|
|
69
|
-
* and the result is cached at module level for subsequent calls.
|
|
70
|
-
*/
|
|
71
|
-
export function findProjectRoot(startDir = process.cwd()) {
|
|
72
|
-
if (_cachedProjectRoot) {
|
|
73
|
-
return _cachedProjectRoot;
|
|
74
|
-
}
|
|
75
|
-
if (process.env.AQE_PROJECT_ROOT) {
|
|
76
|
-
_cachedProjectRoot = process.env.AQE_PROJECT_ROOT;
|
|
77
|
-
return _cachedProjectRoot;
|
|
78
|
-
}
|
|
79
|
-
const dir = startDir;
|
|
80
|
-
const root = path.parse(dir).root;
|
|
81
|
-
let checkDir = dir;
|
|
82
|
-
let topmostAqeDir = null;
|
|
83
|
-
let lowestGitDir = null;
|
|
84
|
-
let topmostPackageJson = null;
|
|
85
|
-
while (checkDir !== root) {
|
|
86
|
-
if (fs.existsSync(path.join(checkDir, '.agentic-qe'))) {
|
|
87
|
-
topmostAqeDir = checkDir;
|
|
88
|
-
}
|
|
89
|
-
if (fs.existsSync(path.join(checkDir, '.git'))) {
|
|
90
|
-
if (lowestGitDir === null) {
|
|
91
|
-
lowestGitDir = checkDir;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (fs.existsSync(path.join(checkDir, 'package.json'))) {
|
|
95
|
-
topmostPackageJson = checkDir;
|
|
96
|
-
}
|
|
97
|
-
checkDir = path.dirname(checkDir);
|
|
98
|
-
}
|
|
99
|
-
if (topmostAqeDir) {
|
|
100
|
-
_cachedProjectRoot = topmostAqeDir;
|
|
101
|
-
}
|
|
102
|
-
else if (lowestGitDir) {
|
|
103
|
-
_cachedProjectRoot = lowestGitDir;
|
|
104
|
-
}
|
|
105
|
-
else if (topmostPackageJson) {
|
|
106
|
-
_cachedProjectRoot = topmostPackageJson;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
_cachedProjectRoot = process.cwd();
|
|
110
|
-
}
|
|
111
|
-
return _cachedProjectRoot;
|
|
112
|
-
}
|
|
49
|
+
// Issue #516: findProjectRoot / clearProjectRootCache live in a lightweight,
|
|
50
|
+
// sqlite-free module so RVF hot paths can import them statically without
|
|
51
|
+
// pulling in this sqlite-heavy module. Re-exported here for backward compat —
|
|
52
|
+
// existing `import { findProjectRoot } from '.../unified-memory.js'` sites keep
|
|
53
|
+
// working unchanged. Imported (not bare re-exported) so internal callers below
|
|
54
|
+
// have a usable local binding.
|
|
55
|
+
import { findProjectRoot, clearProjectRootCache } from './project-root.js';
|
|
56
|
+
export { findProjectRoot, clearProjectRootCache };
|
|
113
57
|
/**
|
|
114
58
|
* Get the default database path using project root detection.
|
|
115
59
|
* Always resolves to {project_root}/.agentic-qe/memory.db
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Local LLM Judge Client
|
|
3
|
+
*
|
|
4
|
+
* Scores QE patterns for coherence, specificity, and reusability using a
|
|
5
|
+
* locally running Ollama-compatible LLM (OpenAI chat completions API).
|
|
6
|
+
*
|
|
7
|
+
* Reward blending: final_reward = 0.7 * outcome_reward + 0.3 * judge_score
|
|
8
|
+
* Escalation: score in [0.4, 0.6] → logged for human review (ambiguous zone)
|
|
9
|
+
*
|
|
10
|
+
* Env vars (all optional — client is disabled if none set):
|
|
11
|
+
* NAGUAL_JUDGE_URL — base URL of Ollama server (default: http://localhost:11434)
|
|
12
|
+
* NAGUAL_JUDGE_MODEL — model to use (default: qwen3:8b)
|
|
13
|
+
*
|
|
14
|
+
* Supported models (in preference order for M-series Macs):
|
|
15
|
+
* gemma4:12b-mlx — 10GB, MLX-optimised, best quality on Apple Silicon
|
|
16
|
+
* qwen3:8b — 5.2GB, strong reasoning, already installed
|
|
17
|
+
* qwen3:30b-a3b — 18GB, highest quality, use only if RAM permits
|
|
18
|
+
*/
|
|
19
|
+
/** Output of a judge evaluation. */
|
|
20
|
+
export interface JudgeResult {
|
|
21
|
+
/** Quality score in [0, 1]. */
|
|
22
|
+
score: number;
|
|
23
|
+
/** One-sentence reasoning from the model. */
|
|
24
|
+
reason: string;
|
|
25
|
+
/** Model that produced the score. */
|
|
26
|
+
model: string;
|
|
27
|
+
/** True if score falls in the ambiguous zone [0.4, 0.6]. */
|
|
28
|
+
needsReview: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Blend an outcome reward with a judge score.
|
|
32
|
+
* final = 0.7 * outcomeReward + 0.3 * judgeScore
|
|
33
|
+
* Falls back to outcomeReward if judgeResult is null (judge unavailable).
|
|
34
|
+
*/
|
|
35
|
+
export declare function blendReward(outcomeReward: number, judgeResult: JudgeResult | null): number;
|
|
36
|
+
/**
|
|
37
|
+
* Local LLM judge using OpenAI-compatible chat completions.
|
|
38
|
+
* Disabled automatically when NAGUAL_JUDGE_URL and NAGUAL_JUDGE_MODEL are both unset.
|
|
39
|
+
*/
|
|
40
|
+
export declare class LocalJudgeClient {
|
|
41
|
+
readonly baseUrl: string;
|
|
42
|
+
readonly model: string;
|
|
43
|
+
readonly enabled: boolean;
|
|
44
|
+
constructor(opts?: {
|
|
45
|
+
url?: string;
|
|
46
|
+
model?: string;
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Score a piece of text (pattern problem+solution) for QE quality.
|
|
50
|
+
* Returns null if judge is disabled or unavailable — callers use outcomeReward as-is.
|
|
51
|
+
*/
|
|
52
|
+
score(text: string): Promise<JudgeResult | null>;
|
|
53
|
+
}
|
|
54
|
+
export declare function getLocalJudgeClient(): LocalJudgeClient;
|
|
55
|
+
//# sourceMappingURL=local-judge-client.d.ts.map
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Local LLM Judge Client
|
|
3
|
+
*
|
|
4
|
+
* Scores QE patterns for coherence, specificity, and reusability using a
|
|
5
|
+
* locally running Ollama-compatible LLM (OpenAI chat completions API).
|
|
6
|
+
*
|
|
7
|
+
* Reward blending: final_reward = 0.7 * outcome_reward + 0.3 * judge_score
|
|
8
|
+
* Escalation: score in [0.4, 0.6] → logged for human review (ambiguous zone)
|
|
9
|
+
*
|
|
10
|
+
* Env vars (all optional — client is disabled if none set):
|
|
11
|
+
* NAGUAL_JUDGE_URL — base URL of Ollama server (default: http://localhost:11434)
|
|
12
|
+
* NAGUAL_JUDGE_MODEL — model to use (default: qwen3:8b)
|
|
13
|
+
*
|
|
14
|
+
* Supported models (in preference order for M-series Macs):
|
|
15
|
+
* gemma4:12b-mlx — 10GB, MLX-optimised, best quality on Apple Silicon
|
|
16
|
+
* qwen3:8b — 5.2GB, strong reasoning, already installed
|
|
17
|
+
* qwen3:30b-a3b — 18GB, highest quality, use only if RAM permits
|
|
18
|
+
*/
|
|
19
|
+
import { LoggerFactory } from '../logging/index.js';
|
|
20
|
+
const logger = LoggerFactory.create('local-judge');
|
|
21
|
+
const DEFAULT_URL = 'http://localhost:11434';
|
|
22
|
+
const DEFAULT_MODEL = 'qwen3:8b';
|
|
23
|
+
const JUDGE_TIMEOUT_MS = 30_000;
|
|
24
|
+
const MAX_TEXT_LENGTH = 600;
|
|
25
|
+
// Thinking models (gemma4, qwen3) need extra tokens to finish reasoning before output
|
|
26
|
+
const MAX_TOKENS = 600;
|
|
27
|
+
/** Score in this range is ambiguous — flagged for human review. */
|
|
28
|
+
const AMBIGUOUS_LOW = 0.4;
|
|
29
|
+
const AMBIGUOUS_HIGH = 0.6;
|
|
30
|
+
/**
|
|
31
|
+
* Blend an outcome reward with a judge score.
|
|
32
|
+
* final = 0.7 * outcomeReward + 0.3 * judgeScore
|
|
33
|
+
* Falls back to outcomeReward if judgeResult is null (judge unavailable).
|
|
34
|
+
*/
|
|
35
|
+
export function blendReward(outcomeReward, judgeResult) {
|
|
36
|
+
if (judgeResult === null)
|
|
37
|
+
return outcomeReward;
|
|
38
|
+
return 0.7 * outcomeReward + 0.3 * judgeResult.score;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Local LLM judge using OpenAI-compatible chat completions.
|
|
42
|
+
* Disabled automatically when NAGUAL_JUDGE_URL and NAGUAL_JUDGE_MODEL are both unset.
|
|
43
|
+
*/
|
|
44
|
+
export class LocalJudgeClient {
|
|
45
|
+
baseUrl;
|
|
46
|
+
model;
|
|
47
|
+
enabled;
|
|
48
|
+
constructor(opts) {
|
|
49
|
+
this.baseUrl = opts?.url ?? process.env['NAGUAL_JUDGE_URL'] ?? DEFAULT_URL;
|
|
50
|
+
this.model = opts?.model ?? process.env['NAGUAL_JUDGE_MODEL'] ?? DEFAULT_MODEL;
|
|
51
|
+
// Only active when explicitly configured via env or constructor options
|
|
52
|
+
this.enabled = Boolean(opts?.url ?? opts?.model ??
|
|
53
|
+
process.env['NAGUAL_JUDGE_URL'] ??
|
|
54
|
+
process.env['NAGUAL_JUDGE_MODEL']);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Score a piece of text (pattern problem+solution) for QE quality.
|
|
58
|
+
* Returns null if judge is disabled or unavailable — callers use outcomeReward as-is.
|
|
59
|
+
*/
|
|
60
|
+
async score(text) {
|
|
61
|
+
if (!this.enabled)
|
|
62
|
+
return null;
|
|
63
|
+
const truncated = text.slice(0, MAX_TEXT_LENGTH);
|
|
64
|
+
const prompt = [
|
|
65
|
+
'You are a QE pattern quality judge.',
|
|
66
|
+
'Rate the following pattern for: coherence, specificity, and reusability in a software quality engineering context.',
|
|
67
|
+
'Reply with valid JSON only, no other text: {"score": <float 0.0-1.0>, "reason": "<one sentence>"}',
|
|
68
|
+
'',
|
|
69
|
+
`Pattern:\n${truncated}`,
|
|
70
|
+
].join('\n');
|
|
71
|
+
try {
|
|
72
|
+
const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'Content-Type': 'application/json' },
|
|
75
|
+
body: JSON.stringify({
|
|
76
|
+
model: this.model,
|
|
77
|
+
messages: [{ role: 'user', content: prompt }],
|
|
78
|
+
temperature: 0.1,
|
|
79
|
+
max_tokens: MAX_TOKENS,
|
|
80
|
+
}),
|
|
81
|
+
signal: AbortSignal.timeout(JUDGE_TIMEOUT_MS),
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
logger.debug('judge request failed', { status: response.status, model: this.model });
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const data = await response.json();
|
|
88
|
+
const msg = data.choices?.[0]?.message;
|
|
89
|
+
// Thinking models (gemma4, qwen3) emit final answer in content; reasoning
|
|
90
|
+
// holds the internal chain-of-thought. Fall back to reasoning if content empty.
|
|
91
|
+
const rawText = (msg?.content ?? '') || (msg?.reasoning ?? '');
|
|
92
|
+
// Strip markdown code fences before parsing
|
|
93
|
+
const cleaned = rawText.replace(/```[\w]*\n?/g, '').replace(/```/g, '');
|
|
94
|
+
// Extract first JSON object — handles multiline values via [\s\S] inside quotes
|
|
95
|
+
const jsonMatch = cleaned.match(/\{[\s\S]*?"score"[\s\S]*?\}/);
|
|
96
|
+
if (!jsonMatch) {
|
|
97
|
+
logger.debug('judge response had no JSON', { rawText: rawText.slice(0, 150) });
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
101
|
+
if (typeof parsed.score !== 'number')
|
|
102
|
+
return null;
|
|
103
|
+
const score = Math.max(0, Math.min(1, parsed.score));
|
|
104
|
+
const reason = typeof parsed.reason === 'string' ? parsed.reason : '';
|
|
105
|
+
const needsReview = score >= AMBIGUOUS_LOW && score <= AMBIGUOUS_HIGH;
|
|
106
|
+
if (needsReview) {
|
|
107
|
+
logger.info('[SurpriseReview] ambiguous judge score — flag for human review', {
|
|
108
|
+
score,
|
|
109
|
+
reason,
|
|
110
|
+
model: this.model,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return { score, reason, model: this.model, needsReview };
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
logger.debug('judge unavailable (non-fatal)', { err, model: this.model });
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
let _instance;
|
|
122
|
+
export function getLocalJudgeClient() {
|
|
123
|
+
if (!_instance)
|
|
124
|
+
_instance = new LocalJudgeClient();
|
|
125
|
+
return _instance;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=local-judge-client.js.map
|