agentic-qe 3.10.1 → 3.10.2
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/hooks/README.txt +17 -0
- package/.claude/hooks/aqe-hook.cjs +98 -0
- package/.claude/hooks/cross-phase-memory.yaml +296 -0
- package/.claude/hooks/post-task-sync.sh +113 -0
- package/.claude/hooks/v3-domain-workers.json +121 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +76 -0
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-CR6J5C76.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-FZLWOPSX.js → agent-booster-wasm-DHSIPFTH.js} +2 -2
- package/dist/cli/chunks/{agent-handler-KAGRVCKS.js → agent-handler-FPQVHGGT.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-JJKFEXQW.js → agent-memory-branch-OLOF5ZHV.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-2MNTHMB6.js +2 -0
- package/dist/cli/chunks/{audit-DN5SY4JJ.js → audit-ALRYPHGP.js} +2 -2
- package/dist/cli/chunks/base-AOQNGMTL.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-YX6OOBN6.js → better-sqlite3-5BT5FO64.js} +2 -2
- package/dist/cli/chunks/{brain-handler-O7MP5BGY.js → brain-handler-ROZUHCOT.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-ZPTN5J6V.js → branch-enumerator-VK7G4NKJ.js} +2 -2
- package/dist/cli/chunks/{browser-PAZE2JSD.js → browser-Q2S75M2F.js} +2 -2
- package/dist/cli/chunks/browser-workflow-UJ4A2ZXO.js +2 -0
- package/dist/cli/chunks/{chunk-WDTCCPK4.js → chunk-2244IFZA.js} +1 -1
- package/dist/cli/chunks/{chunk-WPNZSL4S.js → chunk-22D6VBPD.js} +1 -1
- package/dist/cli/chunks/{chunk-2KTRRSKD.js → chunk-24LUQICS.js} +2 -2
- package/dist/cli/chunks/{chunk-IHDUWPFY.js → chunk-2EDWGHDA.js} +2 -2
- package/dist/cli/chunks/{chunk-TP77PNN6.js → chunk-2JDLQWSV.js} +2 -2
- package/dist/cli/chunks/{chunk-GTGONWGX.js → chunk-2OH3ALYB.js} +1 -1
- package/dist/cli/chunks/{chunk-WMG5F6R6.js → chunk-3RHHKYUR.js} +2 -2
- package/dist/cli/chunks/{chunk-6E7GI2UB.js → chunk-3Z4FHA2E.js} +1 -1
- package/dist/cli/chunks/{chunk-JLKHPIQF.js → chunk-4BXGVM2C.js} +1 -1
- package/dist/cli/chunks/{chunk-6D57DWQ6.js → chunk-4F3ZTXHP.js} +2 -2
- package/dist/cli/chunks/{chunk-3YOPJ7DY.js → chunk-4GTDW2XL.js} +2 -2
- package/dist/cli/chunks/{chunk-W2DT3CDE.js → chunk-5HB54RUS.js} +2 -2
- package/dist/cli/chunks/{chunk-LF7URN2X.js → chunk-5PL7WTCU.js} +2 -2
- package/dist/cli/chunks/{chunk-Y357YFLF.js → chunk-5PRFFHFV.js} +2 -2
- package/dist/cli/chunks/{chunk-GXJ4BCGC.js → chunk-5QHSLWLP.js} +2 -2
- package/dist/cli/chunks/{chunk-TL5F2S3Z.js → chunk-5WJ3FWL4.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTMWJQTZ.js → chunk-6KSCXPPL.js} +2 -2
- package/dist/cli/chunks/{chunk-SQBB2DC6.js → chunk-6NZHEM4V.js} +1 -1
- package/dist/cli/chunks/{chunk-EUJHHXE6.js → chunk-6ZFHIKQG.js} +2 -2
- package/dist/cli/chunks/{chunk-YPOTBXPU.js → chunk-7DKYCVJI.js} +2 -2
- package/dist/cli/chunks/{chunk-DQIS6J77.js → chunk-7IVQ6OVR.js} +2 -2
- package/dist/cli/chunks/{chunk-DMIYWPQQ.js → chunk-7IZ2OPC2.js} +2 -2
- package/dist/cli/chunks/{chunk-VOIWDPIU.js → chunk-7QRMARM7.js} +2 -2
- package/dist/cli/chunks/{chunk-KEC5FBAW.js → chunk-7SJX4CFK.js} +1 -1
- package/dist/cli/chunks/{chunk-2S4XHK26.js → chunk-7SWD3D6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-RRLQFFCO.js → chunk-7V5UHLNY.js} +2 -2
- package/dist/cli/chunks/{chunk-G3BQU3Q6.js → chunk-7Z46RDDV.js} +2 -2
- package/dist/cli/chunks/{chunk-TNVYKYTO.js → chunk-A5RMQG4N.js} +3 -3
- package/dist/cli/chunks/{chunk-PXFQSVA2.js → chunk-AH7FXNFE.js} +3 -3
- package/dist/cli/chunks/{chunk-K22TPWOJ.js → chunk-AIUSZC6K.js} +2 -2
- package/dist/cli/chunks/{chunk-IK6AJX3C.js → chunk-AOI67HA3.js} +1 -1
- package/dist/cli/chunks/{chunk-6VQ5MFJ6.js → chunk-AV7KYE5P.js} +7 -7
- package/dist/cli/chunks/{chunk-GTRXZJNX.js → chunk-AWFIEGR3.js} +2 -2
- package/dist/cli/chunks/{chunk-6A2NIR2E.js → chunk-BQCSCAUC.js} +2 -2
- package/dist/cli/chunks/{chunk-NQZYUH6S.js → chunk-C2M74HCN.js} +1 -1
- package/dist/cli/chunks/{chunk-5EU2VQK3.js → chunk-CIRPP7RQ.js} +2 -2
- package/dist/cli/chunks/{chunk-Q5VHBI4U.js → chunk-CMACGG4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-YGRTMAWB.js → chunk-CTDLI2ON.js} +1 -1
- package/dist/cli/chunks/{chunk-P7T5Y735.js → chunk-CV2SBMBW.js} +2 -2
- package/dist/cli/chunks/{chunk-UDFLR7GR.js → chunk-DMQPO43S.js} +1 -1
- package/dist/cli/chunks/{chunk-XKOKMS5A.js → chunk-DRWGK3YO.js} +2 -2
- package/dist/cli/chunks/{chunk-EBQ6YKP2.js → chunk-DZZEHPSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-7SQD2TTQ.js → chunk-EA7ZSN3V.js} +1 -1
- package/dist/cli/chunks/{chunk-KKNBYXYA.js → chunk-EQBEGDTG.js} +1 -1
- package/dist/cli/chunks/{chunk-2UN4DOBJ.js → chunk-ETN5563K.js} +2 -2
- package/dist/cli/chunks/{chunk-BECU52UY.js → chunk-EVCOCGVJ.js} +3 -3
- package/dist/cli/chunks/{chunk-OC3OJWLB.js → chunk-FO43SQXP.js} +2 -2
- package/dist/cli/chunks/{chunk-CKECJH2A.js → chunk-FO73PZVU.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2DPXMOR.js → chunk-FPAW77XV.js} +1 -1
- package/dist/cli/chunks/{chunk-UDVX34ZG.js → chunk-FY3CUPNN.js} +20 -17
- package/dist/cli/chunks/{chunk-EIROAH6N.js → chunk-G5U6Q42D.js} +2 -2
- package/dist/cli/chunks/{chunk-VKRMVTWU.js → chunk-HA63NBFK.js} +9 -9
- package/dist/cli/chunks/{chunk-2ETDES5W.js → chunk-HHCYSAH3.js} +2 -2
- package/dist/cli/chunks/{chunk-57NJQV57.js → chunk-HJME6G5M.js} +1 -1
- package/dist/cli/chunks/{chunk-BN7ERYXI.js → chunk-HJORBNXW.js} +1 -1
- package/dist/cli/chunks/{chunk-5KFCH7RH.js → chunk-HO37VP4O.js} +1 -1
- package/dist/cli/chunks/{chunk-622MIAOR.js → chunk-I677W5BT.js} +3 -3
- package/dist/cli/chunks/chunk-IAZEDWRX.js +2 -0
- package/dist/cli/chunks/{chunk-KRXKU54J.js → chunk-IICTTDAA.js} +2 -2
- package/dist/cli/chunks/{chunk-BGBSYF3K.js → chunk-JF53LRBL.js} +2 -2
- package/dist/cli/chunks/{chunk-RPL6K623.js → chunk-KB5L5TTF.js} +3 -3
- package/dist/cli/chunks/{chunk-Q24OJX44.js → chunk-L7VIX22Y.js} +2 -2
- package/dist/cli/chunks/{chunk-TFNLXAK5.js → chunk-LQTWPSYL.js} +1 -1
- package/dist/cli/chunks/{chunk-ECPB7IAH.js → chunk-LZCBSFAU.js} +4 -4
- package/dist/cli/chunks/{chunk-G5DTENO3.js → chunk-MCOFJHSJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XRK7FBTY.js → chunk-MCZHKXB4.js} +2 -2
- package/dist/cli/chunks/{chunk-H44WD7QX.js → chunk-MEY43PIQ.js} +2 -2
- package/dist/cli/chunks/{chunk-WL2J6ECN.js → chunk-MMIQ5DMA.js} +2 -2
- package/dist/cli/chunks/{chunk-PUXDXIUE.js → chunk-MNUTRAUV.js} +1 -1
- package/dist/cli/chunks/{chunk-KCTH5MHE.js → chunk-MNV3E5KY.js} +2 -2
- package/dist/cli/chunks/{chunk-EO4B5GS4.js → chunk-MYWQTCS4.js} +1 -1
- package/dist/cli/chunks/{chunk-32R7EA7B.js → chunk-NZO4WUSO.js} +3 -3
- package/dist/cli/chunks/{chunk-NOCYYXK4.js → chunk-OIEQF7PG.js} +2 -2
- package/dist/cli/chunks/{chunk-IPRDHKSI.js → chunk-OIRZJCZY.js} +2 -2
- package/dist/cli/chunks/{chunk-ELZ67OHQ.js → chunk-ON4D4TJ4.js} +2 -2
- package/dist/cli/chunks/chunk-OPFN5LFT.js +95 -0
- package/dist/cli/chunks/{chunk-4AWJ5PE4.js → chunk-ORF2UKQH.js} +1 -1
- package/dist/cli/chunks/{chunk-6LRCMFLV.js → chunk-OWQ6HEYI.js} +2 -2
- package/dist/cli/chunks/{chunk-GRG3OP34.js → chunk-OXCEUR5F.js} +2 -2
- package/dist/cli/chunks/{chunk-SLNGJW4G.js → chunk-PEK6NGVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-5ZCVMR5E.js → chunk-PIZYRPMT.js} +2 -2
- package/dist/cli/chunks/{chunk-K4T3RDCB.js → chunk-PXTDEO65.js} +2 -2
- package/dist/cli/chunks/{chunk-GRYXNWPF.js → chunk-PYIHZXCI.js} +12 -12
- package/dist/cli/chunks/{chunk-HRDGN3OK.js → chunk-QBRHKTFT.js} +1 -1
- package/dist/cli/chunks/{chunk-COZDJLIL.js → chunk-QEPFXY6G.js} +1 -1
- package/dist/cli/chunks/{chunk-HPNEZ7YN.js → chunk-QJ2EHLJ2.js} +1 -1
- package/dist/cli/chunks/{chunk-GMKGLZJU.js → chunk-QQNCSEZG.js} +2 -2
- package/dist/cli/chunks/{chunk-CR4ERDS2.js → chunk-QSE67XJO.js} +2 -2
- package/dist/cli/chunks/{chunk-7CKVAYP3.js → chunk-R2O6OKT2.js} +1 -1
- package/dist/cli/chunks/{chunk-OVENSL64.js → chunk-RLXTBL3H.js} +8 -8
- package/dist/cli/chunks/{chunk-PW6MOFXG.js → chunk-RNREAOY4.js} +2 -2
- package/dist/cli/chunks/{chunk-YYWIA5FX.js → chunk-S3OZ7XSY.js} +1 -1
- package/dist/cli/chunks/{chunk-KZJXVIAW.js → chunk-S3ZO7JXS.js} +2 -2
- package/dist/cli/chunks/{chunk-ZEMXMDD3.js → chunk-SJH3HYNC.js} +2 -2
- package/dist/cli/chunks/{chunk-5OTYBWRL.js → chunk-STEGWLH5.js} +2 -2
- package/dist/cli/chunks/{chunk-F3OVFA6W.js → chunk-SVYTN2GT.js} +2 -2
- package/dist/cli/chunks/{chunk-QNW335PD.js → chunk-SW4OKUTC.js} +2 -2
- package/dist/cli/chunks/{chunk-WS4XVJHI.js → chunk-THRTUW4Z.js} +1 -1
- package/dist/cli/chunks/{chunk-NPSBMDVU.js → chunk-TJKDATEU.js} +2 -2
- package/dist/cli/chunks/{chunk-H22MMMYY.js → chunk-U3EUH6LX.js} +2 -2
- package/dist/cli/chunks/{chunk-FJSR2U65.js → chunk-UUFOHMUG.js} +2 -2
- package/dist/cli/chunks/{chunk-RWYW573C.js → chunk-UVU7XLJY.js} +3 -3
- package/dist/cli/chunks/{chunk-BF7MUYWC.js → chunk-UWXH2UQK.js} +2 -2
- package/dist/cli/chunks/{chunk-UU2Q6XWF.js → chunk-UYYBPWU3.js} +1 -1
- package/dist/cli/chunks/{chunk-AUVC3DDB.js → chunk-VSUTI4G6.js} +2 -2
- package/dist/cli/chunks/{chunk-25QGPRWN.js → chunk-WDMPJ2M2.js} +2 -2
- package/dist/cli/chunks/{chunk-MVGVD6LS.js → chunk-WNR2KAUH.js} +2 -2
- package/dist/cli/chunks/{chunk-NDCPEXDN.js → chunk-WSVUSIAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-T3UXMPXX.js → chunk-WZJUMJ2S.js} +1 -1
- package/dist/cli/chunks/{chunk-TX7SNQKL.js → chunk-X2VAOIUY.js} +1 -1
- package/dist/cli/chunks/{chunk-DVOH75S4.js → chunk-XDSA7YUQ.js} +1 -1
- package/dist/cli/chunks/{chunk-TNGGVMPQ.js → chunk-XDU624HU.js} +1 -1
- package/dist/cli/chunks/{chunk-6ZRMQXVL.js → chunk-XGBAHAGC.js} +2 -2
- package/dist/cli/chunks/{chunk-IITKJCPK.js → chunk-XMJTTF5N.js} +2 -2
- package/dist/cli/chunks/{chunk-2TDWCXZ6.js → chunk-XPCNUX2U.js} +2 -2
- package/dist/cli/chunks/{chunk-W6ZF2CPN.js → chunk-XRJECWZE.js} +1 -1
- package/dist/cli/chunks/{chunk-MQYTW2IN.js → chunk-XTCUN36Z.js} +2 -2
- package/dist/cli/chunks/{chunk-7MSYTHZM.js → chunk-Y63MBMOV.js} +2 -2
- package/dist/cli/chunks/{chunk-6QFONVEE.js → chunk-YACT5WFC.js} +2 -2
- package/dist/cli/chunks/{chunk-PLRSKAFZ.js → chunk-YI6GNRQM.js} +2 -2
- package/dist/cli/chunks/chunk-YNNOY3XN.js +62 -0
- package/dist/cli/chunks/{chunk-XGUQYVJR.js → chunk-YWZHMXTO.js} +2 -2
- package/dist/cli/chunks/{chunk-OQP5OFRR.js → chunk-ZDHMZPSL.js} +1 -1
- package/dist/cli/chunks/{chunk-NRLT44YB.js → chunk-ZGNZJJFF.js} +1 -1
- package/dist/cli/chunks/{chunk-ELUERFGA.js → chunk-ZK2BH23O.js} +2 -2
- package/dist/cli/chunks/{chunk-AABKTWXC.js → chunk-ZQUXNG5X.js} +2 -2
- package/dist/cli/chunks/{chunk-WQEZKAUR.js → chunk-ZXTO4C7R.js} +2 -2
- package/dist/cli/chunks/{ci-EHRUN7O6.js → ci-PYCRCL7G.js} +2 -2
- package/dist/cli/chunks/{ci-output-EXDXVXKB.js → ci-output-EKQQFE2D.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-LM4QRAAL.js → circuit-breaker-RH3Q2MJO.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-ZHUCZVW7.js → claude-flow-setup-DUDXB4VV.js} +2 -2
- package/dist/cli/chunks/client-RDPWGOSA.js +2 -0
- package/dist/cli/chunks/{cline-installer-WMFLQOW2.js → cline-installer-3Q4WIWUG.js} +2 -2
- package/dist/cli/chunks/{code-L7KRLU5E.js → code-E4Q6DGOO.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-FTMUYQC6.js → code-index-extractor-2PCISUOW.js} +2 -2
- package/dist/cli/chunks/{codex-installer-B3F6WI3Z.js → codex-installer-YNNNOLJ6.js} +2 -2
- package/dist/cli/chunks/{completions-3JZQRNB6.js → completions-2F7TUFBD.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-LB2FFEKX.js → complexity-analyzer-2B6MHO7W.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-WH6IMV7R.js → continuedev-installer-ENOKRU5M.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-NOIEOFJM.js → copilot-installer-6YD2KM5F.js} +2 -2
- package/dist/cli/chunks/{cost-tracker-IKX2VYSA.js → cost-tracker-FCH4QOEA.js} +2 -2
- package/dist/cli/chunks/{coverage-TD37CYSY.js → coverage-JTOXZE3T.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-4K5ZVZEZ.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4NSVGRM5.js → cursor-installer-QZFBUGLQ.js} +2 -2
- package/dist/cli/chunks/{daemon-LYDV7NRW.js → daemon-K4QFB5FQ.js} +3 -3
- package/dist/cli/chunks/{daemon-UWEBUIDT.js → daemon-M422U3ZA.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-NECJGCHC.js → dag-attention-scheduler-BXAAW33V.js} +2 -2
- package/dist/cli/chunks/{detect-4XGC7ILO.js → detect-UGSWIOAD.js} +2 -2
- package/dist/cli/chunks/{dist-node-GGJDXRKJ.js → dist-node-FN3HX3OK.js} +2 -2
- package/dist/cli/chunks/{domain-handler-UOFONAUT.js → domain-handler-7PP7VYA7.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-6JLNOYPA.js → domain-transfer-XZM44W7I.js} +2 -2
- package/dist/cli/chunks/dream-RPNWM7VS.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-ZM75DQ4J.js → embed-and-insert-pattern-JZVERJ5L.js} +2 -2
- package/dist/cli/chunks/{eval-CYZJTHEB.js → eval-466NFF2D.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-RBOJLDUB.js → experience-capture-middleware-I7IQCC7V.js} +3 -3
- package/dist/cli/chunks/{fast-paths-S5BWZR3L.js → fast-paths-34OICNZA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6E7H3NYP.js → feature-flags-6UBIVTAD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-DUNQPDU3.js → feature-flags-X5WBBWSO.js} +2 -2
- package/dist/cli/chunks/{file-discovery-PFFKDGYG.js → file-discovery-NLMDBWXX.js} +2 -2
- package/dist/cli/chunks/{fleet-RCDZZFXN.js → fleet-W7CYCHDI.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-5AG3WDWF.js → gnn-wrapper-K4VTAG5X.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-O2KAEX4Y.js → heartbeat-handler-ZGKF2Z6T.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-JBCXMMZO.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-3SC2HZIG.js +2 -0
- package/dist/cli/chunks/hnsw-index-FQORAR6K.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-C7FG6YGW.js → hnsw-legacy-bridge-ELDRLKK5.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-XGPW4HK5.js → hnswlib-node-ZGSUMHDC.js} +2 -2
- package/dist/cli/chunks/{hooks-FUHNE2P7.js → hooks-T4CBINAV.js} +13 -13
- package/dist/cli/chunks/hybrid-router-6CBFDXPR.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-LQRYBNPV.js → hypergraph-engine-UWFW3XP5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-AFFNLZVD.js → hypergraph-handler-PK2BI46K.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-SOEFVZWG.js +2 -0
- package/dist/cli/chunks/{init-handler-BQ6IDBX4.js → init-handler-HNG6KJOU.js} +6 -6
- package/dist/cli/chunks/init-wizard-3E4IU5M4.js +2 -0
- package/dist/cli/chunks/kernel-GFZP4G5J.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-KS72HUSG.js → kilocode-installer-25V7FEJ4.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-2ZEFLGRX.js → kiro-installer-7RMTTCQB.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-BKRKBU26.js +2 -0
- package/dist/cli/chunks/{learning-GGHGJ6B6.js → learning-XQC2MG2R.js} +3 -3
- package/dist/cli/chunks/{llm-router-LP6K5BJF.js → llm-router-6KTTONH4.js} +4 -4
- package/dist/cli/chunks/llm-router-service-KE4IGZPP.js +2 -0
- package/dist/cli/chunks/{load-2MLKXOT2.js → load-BV64P3AL.js} +2 -2
- package/dist/cli/chunks/load-test-VSYJV2AO.js +2 -0
- package/dist/cli/chunks/{mcp-CDJBJG5H.js → mcp-U5ZN77TA.js} +2 -2
- package/dist/cli/chunks/{memory-4LAX7JZS.js → memory-WB5BNBK7.js} +5 -5
- package/dist/cli/chunks/memory-backend-B72RGHRF.js +2 -0
- package/dist/cli/chunks/{memory-handlers-OBAFR4WV.js → memory-handlers-NWCH7AUO.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-SLJV73HE.js → multi-model-executor-3X3W3UTY.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-M76SONWV.js → opencode-installer-TTTMG7ZZ.js} +2 -2
- package/dist/cli/chunks/{orchestrator-TJPUDJMP.js → orchestrator-BLCGSHMZ.js} +18 -18
- package/dist/cli/chunks/{pipeline-2PVNFT6J.js → pipeline-DZPGMRG7.js} +2 -2
- package/dist/cli/chunks/{platform-KCSEDKEE.js → platform-EVMZAUNV.js} +2 -2
- package/dist/cli/chunks/{plugin-QX47QF5U.js → plugin-OR55K4HT.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-L6VWL7VR.js → prime-radiant-advanced-wasm-4ODV27HD.js} +2 -2
- package/dist/cli/chunks/protocol-executor-V3F37FPO.js +2 -0
- package/dist/cli/chunks/{protocol-handler-WDNJDEUE.js → protocol-handler-ZOTI5PID.js} +2 -2
- package/dist/cli/chunks/{prove-3B75DA3S.js → prove-DIMBYJ7V.js} +2 -2
- package/dist/cli/chunks/provider-manager-2PN72TT6.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-P665QNIR.js +2 -0
- package/dist/cli/chunks/{quality-UGASS5WM.js → quality-7MX4VL6M.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-XD4F7BGB.js +2 -0
- package/dist/cli/chunks/{real-embeddings-COBP2LHS.js → real-embeddings-YPUHWRN2.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-TOZ4VLFT.js → roocode-installer-WG5AU4QM.js} +2 -2
- package/dist/cli/chunks/router-4SSNWDJC.js +2 -0
- package/dist/cli/chunks/routing-feedback-O2JSIBW6.js +2 -0
- package/dist/cli/chunks/{routing-handler-5TDVSILX.js → routing-handler-LZB4MN2K.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-AM63KWQN.js → ruvector-commands-YE4ADBMC.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-UANIFE2M.js → rvf-dual-writer-QS5ATW4C.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-LNPYWAPI.js → rvf-migration-adapter-YIGKSBD3.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-U47L63DQ.js → rvf-migration-coordinator-2NDCWP7F.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-WIUHYXRB.js +2 -0
- package/dist/cli/chunks/safe-db-WL5Y7ZNS.js +2 -0
- package/dist/cli/chunks/schedule-U7QDGU5A.js +2 -0
- package/dist/cli/chunks/scheduler-LXKGQYXA.js +2 -0
- package/dist/cli/chunks/{security-KDQ2AH7G.js → security-HT4SUT24.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-5MAGLLYJ.js → shared-rvf-adapter-4IZOJL33.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-GF2OPPM5.js → shared-rvf-dual-writer-ZKFO7CBY.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-4KFO3SEB.js +2 -0
- package/dist/cli/chunks/{status-handler-XZKEL7LO.js → status-handler-AMEMKBI4.js} +2 -2
- package/dist/cli/chunks/{structural-health-27QKWW25.js → structural-health-RBADRLC3.js} +2 -2
- package/dist/cli/chunks/{sync-V3HGPEJT.js → sync-ARDDLQBS.js} +2 -2
- package/dist/cli/chunks/{sync-INNKS6UK.js → sync-PCB23M4K.js} +2 -2
- package/dist/cli/chunks/{task-handler-LDUVOM6G.js → task-handler-J26FSCH5.js} +2 -2
- package/dist/cli/chunks/{task-handlers-HTCPV7OO.js → task-handlers-AQRLR6BL.js} +3 -3
- package/dist/cli/chunks/{test-PCUVGVJL.js → test-YXWSIOSB.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-GYVXWCAA.js → test-scheduling-XY532GI4.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-MJ2ANC4P.js → token-bootstrap-KL2QIQ36.js} +2 -2
- package/dist/cli/chunks/{token-usage-ZREHROTF.js → token-usage-2MJVE4DT.js} +2 -2
- package/dist/cli/chunks/{transformers-6B3FWFYL.js → transformers-QSNTOD2Z.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-JVV234MN.js → tree-sitter-wasm-parser-QJOKHOIW.js} +2 -2
- package/dist/cli/chunks/{types-MVZTJI2F.js → types-RNKRSYMO.js} +2 -2
- package/dist/cli/chunks/unified-memory-7AS4LIEF.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-GREESNJX.js +2 -0
- package/dist/cli/chunks/unified-persistence-BPJOMZOA.js +2 -0
- package/dist/cli/chunks/{upgrade-MKTFEILD.js → upgrade-EKJHIFWP.js} +2 -2
- package/dist/cli/chunks/{validate-IABGALSW.js → validate-KS4T7LWC.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-RHF53RF6.js → validate-swarm-SKKWRP2H.js} +2 -2
- package/dist/cli/chunks/{vibium-RAKW6FMF.js → vibium-FLUQO4IF.js} +2 -2
- package/dist/cli/chunks/visual-security-BW662FHQ.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-PYK7F4JZ.js → web-tree-sitter-UMC63DWD.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-S3U2HWZ4.js → windsurf-installer-V3FQGJIQ.js} +2 -2
- package/dist/cli/chunks/{witness-chain-435NKQLB.js → witness-chain-GE74TLSO.js} +2 -2
- package/dist/cli/chunks/witness-chain-OXVDLNVT.js +2 -0
- package/dist/cli/chunks/{workflow-5UHJCZ6J.js → workflow-4YZ2RPWA.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-KKNR46XV.js +2 -0
- package/dist/cli/chunks/{wrappers-RD3NCMLK.js → wrappers-37NLMKPE.js} +2 -2
- package/dist/cli/commands/hooks-handlers/command-hooks.js +1 -1
- package/dist/cli/commands/hooks-handlers/routing-hooks.js +1 -1
- package/dist/cli/commands/hooks-handlers/task-hooks.js +1 -1
- package/dist/init/init-wizard-hooks.js +271 -271
- package/dist/init/phases/07-hooks.d.ts +7 -0
- package/dist/init/phases/07-hooks.js +132 -96
- package/dist/learning/agent-routing.d.ts +19 -0
- package/dist/learning/agent-routing.js +27 -1
- package/dist/learning/dream/dream-scheduler.d.ts +11 -36
- package/dist/learning/dream/dream-scheduler.js +44 -0
- package/dist/learning/experience-consolidation.d.ts +16 -0
- package/dist/learning/experience-consolidation.js +55 -11
- package/dist/learning/pattern-lifecycle.d.ts +21 -0
- package/dist/learning/pattern-lifecycle.js +70 -6
- package/dist/mcp/bundle.js +352 -349
- package/dist/mcp/protocol-server.js +13 -14
- package/dist/mcp/transport/stdio.d.ts +20 -0
- package/dist/mcp/transport/stdio.js +35 -2
- package/dist/shared/utils/rabitq.d.ts +133 -0
- package/dist/shared/utils/rabitq.js +201 -0
- package/package.json +8 -2
- package/dist/cli/chunks/adapter-3JS2CN7C.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-Q4GFNGU6.js +0 -2
- package/dist/cli/chunks/base-Q3MAL22Y.js +0 -2
- package/dist/cli/chunks/browser-workflow-JX3M2UWG.js +0 -2
- package/dist/cli/chunks/chunk-IJ4BUSJN.js +0 -95
- package/dist/cli/chunks/chunk-VPCE5CIT.js +0 -2
- package/dist/cli/chunks/chunk-WO7KYT3X.js +0 -62
- package/dist/cli/chunks/client-PA3UJIHH.js +0 -2
- package/dist/cli/chunks/cross-domain-router-BVJRP2ZX.js +0 -2
- package/dist/cli/chunks/dream-BXZUEIW2.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-LEKAWFJF.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-2TCEG5M2.js +0 -2
- package/dist/cli/chunks/hnsw-index-VDPUTEES.js +0 -2
- package/dist/cli/chunks/hybrid-router-2EMDIYIG.js +0 -2
- package/dist/cli/chunks/impact-analyzer-HFD6CPWC.js +0 -2
- package/dist/cli/chunks/init-wizard-552QIVRC.js +0 -2
- package/dist/cli/chunks/kernel-5DN6O6EE.js +0 -2
- package/dist/cli/chunks/knowledge-graph-76Y77MB6.js +0 -2
- package/dist/cli/chunks/llm-router-service-4O6GCEFH.js +0 -2
- package/dist/cli/chunks/load-test-FCI2IWRJ.js +0 -2
- package/dist/cli/chunks/memory-backend-MKNCBNDE.js +0 -2
- package/dist/cli/chunks/protocol-executor-IA7WNT23.js +0 -2
- package/dist/cli/chunks/provider-manager-3K5KB5A6.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-V5Z3BBYY.js +0 -2
- package/dist/cli/chunks/queen-coordinator-QOMPA27Z.js +0 -2
- package/dist/cli/chunks/router-P5RZUPC4.js +0 -2
- package/dist/cli/chunks/routing-feedback-3PS3OZQC.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-TT7OJPKM.js +0 -2
- package/dist/cli/chunks/safe-db-PEW7VBAE.js +0 -2
- package/dist/cli/chunks/schedule-QHOTHBQE.js +0 -2
- package/dist/cli/chunks/scheduler-KXJBYTRT.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-TPXJK34J.js +0 -2
- package/dist/cli/chunks/unified-memory-ROS2NKR5.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-FLEUF3XO.js +0 -2
- package/dist/cli/chunks/unified-persistence-QC5L7UNQ.js +0 -2
- package/dist/cli/chunks/visual-security-NLIOUQCR.js +0 -2
- package/dist/cli/chunks/witness-chain-U7X6JX5J.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-APE6BAXH.js +0 -2
|
@@ -25,6 +25,8 @@ const DEFAULT_CONFIG = {
|
|
|
25
25
|
archiveMinAgeDays: 30,
|
|
26
26
|
archiveQualityThreshold: 0.15,
|
|
27
27
|
mergeQualityBoost: 0.02,
|
|
28
|
+
contradictionSimilarityThreshold: 0.85,
|
|
29
|
+
contradictionQualityDelta: 0.4,
|
|
28
30
|
};
|
|
29
31
|
// ============================================================================
|
|
30
32
|
// ExperienceConsolidator
|
|
@@ -59,6 +61,7 @@ export class ExperienceConsolidator {
|
|
|
59
61
|
this.ensureInitialized();
|
|
60
62
|
const totalResult = {
|
|
61
63
|
merged: 0,
|
|
64
|
+
contradicted: 0,
|
|
62
65
|
qualityUpdated: 0,
|
|
63
66
|
archived: 0,
|
|
64
67
|
hardDeleted: 0,
|
|
@@ -73,6 +76,7 @@ export class ExperienceConsolidator {
|
|
|
73
76
|
for (const { domain, cnt } of targetDomains) {
|
|
74
77
|
const result = await this.consolidateDomain(domain, cnt);
|
|
75
78
|
totalResult.merged += result.merged;
|
|
79
|
+
totalResult.contradicted += result.contradicted;
|
|
76
80
|
totalResult.qualityUpdated += result.qualityUpdated;
|
|
77
81
|
totalResult.archived += result.archived;
|
|
78
82
|
totalResult.hardDeleted += result.hardDeleted;
|
|
@@ -81,8 +85,9 @@ export class ExperienceConsolidator {
|
|
|
81
85
|
// Count total active remaining
|
|
82
86
|
const activeCount = this.db.prepare("SELECT COUNT(*) as cnt FROM captured_experiences WHERE consolidated_into IS NULL").get();
|
|
83
87
|
totalResult.activeRemaining = activeCount.cnt;
|
|
84
|
-
if (totalResult.merged > 0 || totalResult.archived > 0) {
|
|
88
|
+
if (totalResult.merged > 0 || totalResult.archived > 0 || totalResult.contradicted > 0) {
|
|
85
89
|
console.log(`[ExperienceConsolidator] Consolidated: ${totalResult.merged} merged, ` +
|
|
90
|
+
`${totalResult.contradicted} contradicted, ` +
|
|
86
91
|
`${totalResult.archived} archived, ${totalResult.activeRemaining} active`);
|
|
87
92
|
}
|
|
88
93
|
return totalResult;
|
|
@@ -94,14 +99,17 @@ export class ExperienceConsolidator {
|
|
|
94
99
|
this.ensureInitialized();
|
|
95
100
|
const result = {
|
|
96
101
|
merged: 0,
|
|
102
|
+
contradicted: 0,
|
|
97
103
|
qualityUpdated: 0,
|
|
98
104
|
archived: 0,
|
|
99
105
|
hardDeleted: 0,
|
|
100
106
|
activeRemaining: 0,
|
|
101
107
|
domainsProcessed: [domain],
|
|
102
108
|
};
|
|
103
|
-
// Phase 1: Cluster & Merge
|
|
104
|
-
|
|
109
|
+
// Phase 1: Cluster & Merge (+ contradiction suppression)
|
|
110
|
+
const clusterResult = await this.clusterAndMerge(domain);
|
|
111
|
+
result.merged = clusterResult.merged;
|
|
112
|
+
result.contradicted = clusterResult.contradicted;
|
|
105
113
|
// Phase 2: Quality Reinforcement
|
|
106
114
|
result.qualityUpdated = this.reinforceQuality(domain);
|
|
107
115
|
// Phase 3: Archive Valueless
|
|
@@ -129,7 +137,7 @@ export class ExperienceConsolidator {
|
|
|
129
137
|
if (flag) {
|
|
130
138
|
console.log(`[ExperienceConsolidator] Domain ${domain} already bootstrapped`);
|
|
131
139
|
return {
|
|
132
|
-
merged: 0, qualityUpdated: 0, archived: 0,
|
|
140
|
+
merged: 0, contradicted: 0, qualityUpdated: 0, archived: 0,
|
|
133
141
|
hardDeleted: 0, activeRemaining: 0, domainsProcessed: [domain],
|
|
134
142
|
};
|
|
135
143
|
}
|
|
@@ -165,7 +173,7 @@ export class ExperienceConsolidator {
|
|
|
165
173
|
ORDER BY quality DESC
|
|
166
174
|
`).all(domain);
|
|
167
175
|
if (candidates.length < 2)
|
|
168
|
-
return 0;
|
|
176
|
+
return { merged: 0, contradicted: 0 };
|
|
169
177
|
// Build a temporary HNSW index for this domain
|
|
170
178
|
const hnswIndex = new HNSWEmbeddingIndex({
|
|
171
179
|
dimension: 384,
|
|
@@ -196,7 +204,9 @@ export class ExperienceConsolidator {
|
|
|
196
204
|
// Track which IDs have been absorbed
|
|
197
205
|
const absorbed = new Set();
|
|
198
206
|
let mergeCount = 0;
|
|
207
|
+
let contradictionCount = 0;
|
|
199
208
|
const markConsolidated = this.db.prepare("UPDATE captured_experiences SET consolidated_into = ? WHERE id = ?");
|
|
209
|
+
const markContradicted = this.db.prepare("UPDATE captured_experiences SET consolidated_into = 'contradicted' WHERE id = ?");
|
|
200
210
|
const boostSurvivor = this.db.prepare(`
|
|
201
211
|
UPDATE captured_experiences
|
|
202
212
|
SET consolidation_count = consolidation_count + ?,
|
|
@@ -210,7 +220,7 @@ export class ExperienceConsolidator {
|
|
|
210
220
|
`);
|
|
211
221
|
// Iterate experiences by quality DESC
|
|
212
222
|
for (const row of candidates) {
|
|
213
|
-
if (mergeCount >= this.config.maxMergesPerRun)
|
|
223
|
+
if (mergeCount + contradictionCount >= this.config.maxMergesPerRun)
|
|
214
224
|
break;
|
|
215
225
|
if (absorbed.has(row.id))
|
|
216
226
|
continue;
|
|
@@ -232,21 +242,42 @@ export class ExperienceConsolidator {
|
|
|
232
242
|
namespace: 'experiences',
|
|
233
243
|
});
|
|
234
244
|
const mergedIds = [];
|
|
245
|
+
const contradictedIds = [];
|
|
235
246
|
for (const { id: hnswId, distance } of neighbors) {
|
|
236
|
-
if (mergeCount >= this.config.maxMergesPerRun)
|
|
247
|
+
if (mergeCount + contradictionCount >= this.config.maxMergesPerRun)
|
|
237
248
|
break;
|
|
238
249
|
const neighborId = idMap.get(hnswId);
|
|
239
250
|
if (!neighborId || neighborId === row.id || absorbed.has(neighborId))
|
|
240
251
|
continue;
|
|
241
252
|
const similarity = 1 - distance;
|
|
242
|
-
|
|
253
|
+
// Gate on the lower of the two thresholds so neither merge nor
|
|
254
|
+
// contradiction detection is starved if they are configured differently.
|
|
255
|
+
if (similarity < Math.min(this.config.mergeSimilarityThreshold, this.config.contradictionSimilarityThreshold))
|
|
243
256
|
continue;
|
|
244
257
|
// Find the neighbor in candidates
|
|
245
258
|
const neighbor = candidates.find(c => c.id === neighborId);
|
|
246
259
|
if (!neighbor)
|
|
247
260
|
continue;
|
|
248
|
-
//
|
|
249
|
-
|
|
261
|
+
// Contradiction (#510 item 7): same context (high similarity) but
|
|
262
|
+
// opposite outcome (large quality delta) => a conflict, not a duplicate.
|
|
263
|
+
// Suppress the lower-quality loser from retrieval even if it was applied
|
|
264
|
+
// (a used-but-low-quality contradictory experience is exactly the
|
|
265
|
+
// recall-poisoning case). Candidates are sorted quality DESC and absorbed
|
|
266
|
+
// ones are skipped, so when a gap exists `neighbor` is the strict loser.
|
|
267
|
+
const qualityDelta = Math.abs(row.quality - neighbor.quality);
|
|
268
|
+
if (similarity >= this.config.contradictionSimilarityThreshold
|
|
269
|
+
&& qualityDelta >= this.config.contradictionQualityDelta) {
|
|
270
|
+
if (neighbor.quality < row.quality) {
|
|
271
|
+
absorbed.add(neighborId);
|
|
272
|
+
contradictedIds.push(neighborId);
|
|
273
|
+
contradictionCount++;
|
|
274
|
+
}
|
|
275
|
+
continue; // never merge a contradictory pair
|
|
276
|
+
}
|
|
277
|
+
// Only merge lower-quality, unused neighbors into the survivor (requires
|
|
278
|
+
// the normal merge similarity threshold).
|
|
279
|
+
if (similarity >= this.config.mergeSimilarityThreshold
|
|
280
|
+
&& neighbor.quality <= row.quality && neighbor.application_count === 0) {
|
|
250
281
|
absorbed.add(neighborId);
|
|
251
282
|
mergedIds.push(neighborId);
|
|
252
283
|
mergeCount++;
|
|
@@ -264,10 +295,23 @@ export class ExperienceConsolidator {
|
|
|
264
295
|
});
|
|
265
296
|
transaction();
|
|
266
297
|
}
|
|
298
|
+
// Apply contradiction suppressions in a transaction. The loser is
|
|
299
|
+
// soft-suppressed (consolidated_into = 'contradicted'), so it is excluded
|
|
300
|
+
// from retrieval (WHERE consolidated_into IS NULL) but not deleted. The
|
|
301
|
+
// survivor is NOT boosted — a contradiction is a conflict, not a duplicate.
|
|
302
|
+
if (contradictedIds.length > 0) {
|
|
303
|
+
const tx = this.db.transaction(() => {
|
|
304
|
+
for (const loserId of contradictedIds) {
|
|
305
|
+
markContradicted.run(loserId);
|
|
306
|
+
}
|
|
307
|
+
logConsolidation.run(uuidv4(), domain, 'contradiction', JSON.stringify(contradictedIds), row.id, JSON.stringify({ count: contradictedIds.length, survivorQuality: row.quality }));
|
|
308
|
+
});
|
|
309
|
+
tx();
|
|
310
|
+
}
|
|
267
311
|
}
|
|
268
312
|
// Clean up HNSW index
|
|
269
313
|
hnswIndex.clearIndex('experiences');
|
|
270
|
-
return mergeCount;
|
|
314
|
+
return { merged: mergeCount, contradicted: contradictionCount };
|
|
271
315
|
}
|
|
272
316
|
// ============================================================================
|
|
273
317
|
// Phase 2: Quality Reinforcement
|
|
@@ -42,6 +42,27 @@ export interface PatternLifecycleConfig {
|
|
|
42
42
|
* Default lifecycle configuration
|
|
43
43
|
*/
|
|
44
44
|
export declare const DEFAULT_LIFECYCLE_CONFIG: PatternLifecycleConfig;
|
|
45
|
+
/** Minimum usage_count before success_rate is trusted as an importance signal. */
|
|
46
|
+
export declare const EWC_MIN_USAGE_FOR_PROTECTION = 5;
|
|
47
|
+
/**
|
|
48
|
+
* Fraction of the base decay rate a fully-important pattern is shielded from.
|
|
49
|
+
* 0.9 => a success_rate=1.0 pattern decays at 10% of the base rate.
|
|
50
|
+
* Low-importance patterns (importance 0) decay EXACTLY as before (no regression).
|
|
51
|
+
*/
|
|
52
|
+
export declare const EWC_DECAY_PROTECTION = 0.9;
|
|
53
|
+
/**
|
|
54
|
+
* Multiplier extending the stale window by importance.
|
|
55
|
+
* effectiveStaleDays = staleDaysThreshold * (1 + importance * EWC_STALE_PROTECTION_BONUS).
|
|
56
|
+
* 2 => a fully-important pattern survives 3x longer unused (e.g. 30d -> 90d)
|
|
57
|
+
* before stale-deprecation; importance-0 patterns are unchanged.
|
|
58
|
+
*/
|
|
59
|
+
export declare const EWC_STALE_PROTECTION_BONUS = 2;
|
|
60
|
+
/**
|
|
61
|
+
* Importance proxy in [0,1] for EWC++ forgetting protection.
|
|
62
|
+
* Returns 0 (no protection) until a pattern has been used enough to trust its
|
|
63
|
+
* success rate, then equals the clamped success rate.
|
|
64
|
+
*/
|
|
65
|
+
export declare function patternImportance(successRate: number, usageCount: number): number;
|
|
45
66
|
/**
|
|
46
67
|
* Experience aggregation for pattern candidate identification
|
|
47
68
|
*/
|
|
@@ -30,6 +30,51 @@ export const DEFAULT_LIFECYCLE_CONFIG = {
|
|
|
30
30
|
asymmetricLearning: {},
|
|
31
31
|
};
|
|
32
32
|
// ============================================================================
|
|
33
|
+
// EWC++ catastrophic-forgetting protection (#510 item 6)
|
|
34
|
+
// ----------------------------------------------------------------------------
|
|
35
|
+
// Confidence decay and stale/age deprecation were uniform: a proven,
|
|
36
|
+
// high-success pattern was forgotten at the same rate as noise, so an influx
|
|
37
|
+
// of new low-value patterns could crowd out historically valuable ones.
|
|
38
|
+
// Inspired by Elastic Weight Consolidation, we protect HIGH-IMPORTANCE
|
|
39
|
+
// patterns from being clobbered, weighted by an importance proxy.
|
|
40
|
+
//
|
|
41
|
+
// Honest framing (as in ruflo's EWC adapter): this is NOT true Fisher
|
|
42
|
+
// information — there are no model gradients here. Importance is a heuristic:
|
|
43
|
+
// success_rate gated on enough usage to trust it (and recency is already
|
|
44
|
+
// implied because only unused patterns decay / go stale).
|
|
45
|
+
//
|
|
46
|
+
// Protection applies ONLY to stale/age/decay forgetting. A high-importance
|
|
47
|
+
// pattern that STARTS failing or drops below minActiveConfidence is still
|
|
48
|
+
// deprecated — we blend retention, we don't permanently shield dead weight.
|
|
49
|
+
// ============================================================================
|
|
50
|
+
/** Minimum usage_count before success_rate is trusted as an importance signal. */
|
|
51
|
+
export const EWC_MIN_USAGE_FOR_PROTECTION = 5;
|
|
52
|
+
/**
|
|
53
|
+
* Fraction of the base decay rate a fully-important pattern is shielded from.
|
|
54
|
+
* 0.9 => a success_rate=1.0 pattern decays at 10% of the base rate.
|
|
55
|
+
* Low-importance patterns (importance 0) decay EXACTLY as before (no regression).
|
|
56
|
+
*/
|
|
57
|
+
export const EWC_DECAY_PROTECTION = 0.9;
|
|
58
|
+
/**
|
|
59
|
+
* Multiplier extending the stale window by importance.
|
|
60
|
+
* effectiveStaleDays = staleDaysThreshold * (1 + importance * EWC_STALE_PROTECTION_BONUS).
|
|
61
|
+
* 2 => a fully-important pattern survives 3x longer unused (e.g. 30d -> 90d)
|
|
62
|
+
* before stale-deprecation; importance-0 patterns are unchanged.
|
|
63
|
+
*/
|
|
64
|
+
export const EWC_STALE_PROTECTION_BONUS = 2;
|
|
65
|
+
/**
|
|
66
|
+
* Importance proxy in [0,1] for EWC++ forgetting protection.
|
|
67
|
+
* Returns 0 (no protection) until a pattern has been used enough to trust its
|
|
68
|
+
* success rate, then equals the clamped success rate.
|
|
69
|
+
*/
|
|
70
|
+
export function patternImportance(successRate, usageCount) {
|
|
71
|
+
if (usageCount < EWC_MIN_USAGE_FOR_PROTECTION)
|
|
72
|
+
return 0;
|
|
73
|
+
if (!Number.isFinite(successRate))
|
|
74
|
+
return 0;
|
|
75
|
+
return Math.min(Math.max(successRate, 0), 1);
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
33
78
|
// Pattern Lifecycle Manager
|
|
34
79
|
// ============================================================================
|
|
35
80
|
/**
|
|
@@ -402,12 +447,16 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
402
447
|
consecutiveFailures,
|
|
403
448
|
};
|
|
404
449
|
}
|
|
405
|
-
// Check staleness
|
|
450
|
+
// Check staleness (EWC++ #510 item 6: high-importance patterns get a
|
|
451
|
+
// longer grace period before stale-deprecation, so a proven pattern that
|
|
452
|
+
// simply went unused isn't forgotten like noise. importance=0 => unchanged.)
|
|
406
453
|
const lastUsedTime = pattern.lastUsedAt instanceof Date
|
|
407
454
|
? pattern.lastUsedAt.getTime()
|
|
408
455
|
: new Date(pattern.lastUsedAt).getTime();
|
|
409
456
|
const daysSinceLastUse = (Date.now() - lastUsedTime) / (1000 * 60 * 60 * 24);
|
|
410
|
-
|
|
457
|
+
const importance = patternImportance(pattern.successRate, pattern.usageCount);
|
|
458
|
+
const effectiveStaleDays = this.config.staleDaysThreshold * (1 + importance * EWC_STALE_PROTECTION_BONUS);
|
|
459
|
+
if (daysSinceLastUse >= effectiveStaleDays) {
|
|
411
460
|
return {
|
|
412
461
|
shouldDeprecate: true,
|
|
413
462
|
reason: 'stale',
|
|
@@ -496,16 +545,25 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
496
545
|
* Apply confidence decay to patterns that haven't been used recently
|
|
497
546
|
*/
|
|
498
547
|
applyConfidenceDecay(daysSinceLastRun = 1) {
|
|
499
|
-
|
|
548
|
+
// EWC++ (#510 item 6): per-row importance-weighted decay. The base decay
|
|
549
|
+
// amount is shielded by `EWC_DECAY_PROTECTION * importance`, where
|
|
550
|
+
// importance = success_rate (clamped) once usage_count >= the trust
|
|
551
|
+
// threshold, else 0. A pattern with importance 0 decays EXACTLY as before
|
|
552
|
+
// (1 - baseDecayAmount); a fully-proven pattern decays up to 10x slower,
|
|
553
|
+
// so it isn't forgotten as fast as new low-value patterns.
|
|
554
|
+
const baseDecayAmount = this.config.confidenceDecayRate * daysSinceLastRun;
|
|
500
555
|
// Get patterns that haven't been used in the decay period
|
|
501
556
|
const cutoffTime = Date.now() - (daysSinceLastRun * 24 * 60 * 60 * 1000);
|
|
502
557
|
const result = this.db.prepare(`
|
|
503
558
|
UPDATE qe_patterns
|
|
504
|
-
SET confidence = MAX(?, confidence * ?
|
|
559
|
+
SET confidence = MAX(?, confidence * (1 - ? * (1 - ? *
|
|
560
|
+
(CASE WHEN usage_count >= ?
|
|
561
|
+
THEN MIN(MAX(COALESCE(success_rate, 0.0), 0.0), 1.0)
|
|
562
|
+
ELSE 0.0 END)))),
|
|
505
563
|
updated_at = datetime('now')
|
|
506
564
|
WHERE deprecated_at IS NULL
|
|
507
565
|
AND (last_used_at IS NULL OR datetime(last_used_at) < datetime(?, 'unixepoch'))
|
|
508
|
-
`).run(this.config.minActiveConfidence,
|
|
566
|
+
`).run(this.config.minActiveConfidence, baseDecayAmount, EWC_DECAY_PROTECTION, EWC_MIN_USAGE_FOR_PROTECTION, cutoffTime / 1000);
|
|
509
567
|
return {
|
|
510
568
|
updated: result.changes,
|
|
511
569
|
decayed: result.changes,
|
|
@@ -765,7 +823,7 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
765
823
|
* Convert database row to QEPattern
|
|
766
824
|
*/
|
|
767
825
|
rowToPattern(row) {
|
|
768
|
-
|
|
826
|
+
const pattern = {
|
|
769
827
|
id: row.id,
|
|
770
828
|
patternType: row.pattern_type,
|
|
771
829
|
qeDomain: row.qe_domain,
|
|
@@ -785,7 +843,13 @@ Pattern extracted from ${exp.count} successful experiences.`;
|
|
|
785
843
|
reusable: row.reusable === 1,
|
|
786
844
|
reuseCount: row.reuse_count || 0,
|
|
787
845
|
averageTokenSavings: row.average_token_savings || 0,
|
|
846
|
+
// Surface deprecation/failure columns so checkDeprecation() can read them
|
|
847
|
+
// (these live on qe_patterns via ensureSchema ALTERs but aren't part of
|
|
848
|
+
// the base QEPattern shape — see PatternWithDeprecation).
|
|
849
|
+
deprecated_at: row.deprecated_at ?? null,
|
|
850
|
+
consecutive_failures: row.consecutive_failures ?? 0,
|
|
788
851
|
};
|
|
852
|
+
return pattern;
|
|
789
853
|
}
|
|
790
854
|
}
|
|
791
855
|
// ============================================================================
|