agentic-qe 3.14.5 → 3.14.6
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 +76 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/adapters/ag-ui/event-types.d.ts +1 -1
- package/dist/audit/witness-chain-hash.d.ts +18 -0
- package/dist/audit/witness-chain-hash.js +37 -0
- package/dist/audit/witness-chain-repair.d.ts +71 -0
- package/dist/audit/witness-chain-repair.js +203 -0
- package/dist/audit/witness-chain-verifier.d.ts +152 -0
- package/dist/audit/witness-chain-verifier.js +293 -0
- package/dist/audit/witness-chain.d.ts +10 -43
- package/dist/audit/witness-chain.js +16 -106
- package/dist/audit/witness-findings.js +4 -1
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-UYOJPTOX.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-2YGML6OU.js +2 -0
- package/dist/cli/chunks/{agent-handler-V6CZ7Q6S.js → agent-handler-D5SSQYNU.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-ZMD6ULC3.js → agent-memory-branch-YHPLTITV.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-JR5AVQXR.js +2 -0
- package/dist/cli/chunks/{arena-QLSBESC7.js → arena-7BGOXGXO.js} +2 -2
- package/dist/cli/chunks/{arena-4UPAEHFT.js → arena-MCE6EU7K.js} +4 -4
- package/dist/cli/chunks/audit-BMWTQECB.js +4 -0
- package/dist/cli/chunks/base-DRZ2LS6X.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-4DSBPDRH.js → better-sqlite3-PMUNGASU.js} +2 -2
- package/dist/cli/chunks/{brain-handler-GBY4EZ4P.js → brain-handler-QPUFYX7F.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-XYBVXCNO.js → branch-enumerator-WKFDGRN4.js} +2 -2
- package/dist/cli/chunks/{browser-32F6MREU.js → browser-VY5HKH5X.js} +2 -2
- package/dist/cli/chunks/browser-workflow-CJ7T3MXF.js +2 -0
- package/dist/cli/chunks/{chunk-C3Z4VVHP.js → chunk-257E2A5M.js} +5 -5
- package/dist/cli/chunks/{chunk-EFV4ADMO.js → chunk-2JVWITNK.js} +2 -2
- package/dist/cli/chunks/{chunk-IGBEJ4UJ.js → chunk-2NPKIBAZ.js} +2 -2
- package/dist/cli/chunks/{chunk-KIP6WZGV.js → chunk-2TMWAQQ3.js} +3 -3
- package/dist/cli/chunks/{chunk-DLF5BOJD.js → chunk-2YXGBZWV.js} +1 -1
- package/dist/cli/chunks/{chunk-KEY43ANX.js → chunk-3EA536JF.js} +2 -2
- package/dist/cli/chunks/{chunk-WX6RRIGW.js → chunk-3EZOZN25.js} +2 -2
- package/dist/cli/chunks/{chunk-BYG36QC5.js → chunk-3HZS4M3O.js} +2 -2
- package/dist/cli/chunks/{chunk-G3L5L6YQ.js → chunk-3NIG7S5W.js} +1 -1
- package/dist/cli/chunks/{chunk-CZO4BJG5.js → chunk-4N23RFDU.js} +2 -2
- package/dist/cli/chunks/{chunk-QWUXCG2L.js → chunk-5J6W7SIA.js} +1 -1
- package/dist/cli/chunks/{chunk-RD2VGOUH.js → chunk-5OOMJGFN.js} +1 -1
- package/dist/cli/chunks/{chunk-YDFL445W.js → chunk-5QQSIGUA.js} +2 -2
- package/dist/cli/chunks/{chunk-TUSSPKRM.js → chunk-5VFPCSK7.js} +1 -1
- package/dist/cli/chunks/{chunk-WLXK2KNU.js → chunk-62N4NUJH.js} +2 -2
- package/dist/cli/chunks/{chunk-JSZ663MU.js → chunk-64VGZQLB.js} +1 -1
- package/dist/cli/chunks/{chunk-UMGFMKDW.js → chunk-66VWCR67.js} +2 -2
- package/dist/cli/chunks/{chunk-6ITZZIQX.js → chunk-6LIHFV7O.js} +2 -2
- package/dist/cli/chunks/{chunk-DKUBQQFG.js → chunk-6OS76PHI.js} +2 -2
- package/dist/cli/chunks/{chunk-Y5L3ES4L.js → chunk-6RE3X4V5.js} +2 -2
- package/dist/cli/chunks/{chunk-CVMNJSCB.js → chunk-6SH5VZUD.js} +2 -2
- package/dist/cli/chunks/chunk-6SQM2MUX.js +4 -0
- package/dist/cli/chunks/{chunk-6CR4VQBQ.js → chunk-6U7LNMWZ.js} +2 -2
- package/dist/cli/chunks/{chunk-HYEJJJY3.js → chunk-72KXSMWI.js} +1 -1
- package/dist/cli/chunks/chunk-7CUQCCMD.js +27 -0
- package/dist/cli/chunks/chunk-7D3V65N5.js +2 -0
- package/dist/cli/chunks/{chunk-K7NJHFLZ.js → chunk-7J6QC567.js} +3 -3
- package/dist/cli/chunks/{chunk-6LKDHEBY.js → chunk-7LPR6HJG.js} +2 -2
- package/dist/cli/chunks/{chunk-RGGK6VZ7.js → chunk-7NITCZWD.js} +1 -1
- package/dist/cli/chunks/{chunk-IYTLXUBO.js → chunk-7Z5LHRC3.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCWERUYB.js → chunk-AHKELLIO.js} +3 -3
- package/dist/cli/chunks/{chunk-IJHCIXJC.js → chunk-AIRGNL55.js} +2 -2
- package/dist/cli/chunks/{chunk-2OMLTYQK.js → chunk-AJRUJAAK.js} +1 -1
- package/dist/cli/chunks/{chunk-QYOGD2VW.js → chunk-AVBJYI5I.js} +1 -1
- package/dist/cli/chunks/{chunk-PSPKSUF6.js → chunk-B6D2CHEH.js} +1 -1
- package/dist/cli/chunks/{chunk-M23ZOZVY.js → chunk-B6MOJC3X.js} +1 -1
- package/dist/cli/chunks/{chunk-VD5IO5EO.js → chunk-BAMN2CHI.js} +1 -1
- package/dist/cli/chunks/{chunk-KO4FNAUR.js → chunk-BBT64TII.js} +3 -3
- package/dist/cli/chunks/{chunk-7JZJJA7U.js → chunk-BJTJLJRZ.js} +3 -3
- package/dist/cli/chunks/{chunk-LULD4JV2.js → chunk-BMAPORJ7.js} +2 -2
- package/dist/cli/chunks/{chunk-GTKCGPJZ.js → chunk-BPEDWS6O.js} +2 -2
- package/dist/cli/chunks/{chunk-3DDXWYMO.js → chunk-BVR7RMC5.js} +1 -1
- package/dist/cli/chunks/{chunk-52L77RMG.js → chunk-C6KWXUFJ.js} +2 -2
- package/dist/cli/chunks/{chunk-BJPL6THQ.js → chunk-CCK4BF76.js} +1 -1
- package/dist/cli/chunks/{chunk-RP2ZKPYV.js → chunk-CD542DNJ.js} +1 -1
- package/dist/cli/chunks/{chunk-AFEDJ3RU.js → chunk-CF2ISEOJ.js} +2 -2
- package/dist/cli/chunks/chunk-CM7U6TAX.js +5 -0
- package/dist/cli/chunks/{chunk-R74ZKREV.js → chunk-D45SG6CP.js} +1 -1
- package/dist/cli/chunks/{chunk-YXP6BKGS.js → chunk-D6CJIGRU.js} +89 -83
- package/dist/cli/chunks/{chunk-NVYBM3R4.js → chunk-DBDPRORT.js} +2 -2
- package/dist/cli/chunks/{chunk-CYE2TJFV.js → chunk-DHVX5UB2.js} +2 -2
- package/dist/cli/chunks/{chunk-XUR2M2WB.js → chunk-DK4XN4CU.js} +2 -2
- package/dist/cli/chunks/{chunk-W2XCZU62.js → chunk-DPYSUDAO.js} +1 -1
- package/dist/cli/chunks/{chunk-WJHWH5D2.js → chunk-DUYOVM5I.js} +2 -2
- package/dist/cli/chunks/{chunk-XLAUGSW7.js → chunk-DZ3AUAAB.js} +2 -2
- package/dist/cli/chunks/{chunk-37TUN44F.js → chunk-E6G2RD5H.js} +2 -2
- package/dist/cli/chunks/{chunk-ELBZON4V.js → chunk-EAY2JMZG.js} +2 -2
- package/dist/cli/chunks/{chunk-HSVKZ5KI.js → chunk-ELLBS5RP.js} +2 -2
- package/dist/cli/chunks/chunk-ENGZ4D5V.js +2 -0
- package/dist/cli/chunks/chunk-FBMN7B46.js +4 -0
- package/dist/cli/chunks/{chunk-F34OAHOM.js → chunk-FWASDOT2.js} +2 -2
- package/dist/cli/chunks/{chunk-E4AZXCT5.js → chunk-FZOBD67M.js} +1 -1
- package/dist/cli/chunks/{chunk-QZMUXJHZ.js → chunk-GDSXITFH.js} +2 -2
- package/dist/cli/chunks/{chunk-LSUILON7.js → chunk-GGRHV6D7.js} +1 -1
- package/dist/cli/chunks/{chunk-3YUB5HER.js → chunk-GPYVDFB3.js} +101 -101
- package/dist/cli/chunks/{chunk-4FWTLJEP.js → chunk-GSF6MB64.js} +2 -2
- package/dist/cli/chunks/{chunk-3KDL6QDK.js → chunk-H52HZ67P.js} +2 -2
- package/dist/cli/chunks/{chunk-2JGEZHWY.js → chunk-H5BS5VH7.js} +2 -2
- package/dist/cli/chunks/{chunk-SQF6HRXR.js → chunk-H6ZM3PUT.js} +1 -1
- package/dist/cli/chunks/{chunk-OEIQTWQP.js → chunk-HM6ZSCPI.js} +1 -1
- package/dist/cli/chunks/{chunk-URVHZPWY.js → chunk-HNFVJP4I.js} +2 -2
- package/dist/cli/chunks/{chunk-RD6TEZ64.js → chunk-I33ERSGB.js} +2 -2
- package/dist/cli/chunks/{chunk-IUDWEOLX.js → chunk-IAF6T27S.js} +2 -2
- package/dist/cli/chunks/{chunk-XZSMZHM2.js → chunk-IB27QACC.js} +2 -2
- package/dist/cli/chunks/{chunk-I6X3EGJI.js → chunk-ICTXTNQZ.js} +1 -1
- package/dist/cli/chunks/chunk-IG5GNEC6.js +4 -0
- package/dist/cli/chunks/{chunk-6A44AOGN.js → chunk-IQO7UCFR.js} +2 -2
- package/dist/cli/chunks/{chunk-R6IU3EWP.js → chunk-IV5UZOHH.js} +2 -2
- package/dist/cli/chunks/{chunk-VTOVWHEM.js → chunk-JBTPOIAC.js} +2 -2
- package/dist/cli/chunks/{chunk-KLTP5IDB.js → chunk-JIXUMYKZ.js} +1 -1
- package/dist/cli/chunks/{chunk-3VIXOHMS.js → chunk-JMONHE4B.js} +1 -1
- package/dist/cli/chunks/{chunk-SX4JLSLV.js → chunk-JVNTSNWU.js} +2 -2
- package/dist/cli/chunks/{chunk-JVQBWYHW.js → chunk-JXGFRBUO.js} +2 -2
- package/dist/cli/chunks/{chunk-HVXJC3OC.js → chunk-JZOS5FCX.js} +2 -2
- package/dist/cli/chunks/{chunk-XEZIIQYJ.js → chunk-KNNISEDY.js} +1 -1
- package/dist/cli/chunks/{chunk-73EI4C2E.js → chunk-L4RUBPLR.js} +2 -2
- package/dist/cli/chunks/{chunk-AF4XKLXO.js → chunk-LL3IGZBI.js} +2 -2
- package/dist/cli/chunks/{chunk-UJWAWIRV.js → chunk-MBRHSU6W.js} +10 -10
- package/dist/cli/chunks/{chunk-J5UNP6W3.js → chunk-MJS53PRX.js} +2 -2
- package/dist/cli/chunks/{chunk-EOR2UT72.js → chunk-MQROI74N.js} +2 -2
- package/dist/cli/chunks/{chunk-BXVAVFGU.js → chunk-MUOG6QXR.js} +2 -2
- package/dist/cli/chunks/{chunk-O3JTQ7N4.js → chunk-MW2GGZZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-IIAR5S7Q.js → chunk-NHWGMJAP.js} +2 -2
- package/dist/cli/chunks/{chunk-WOIGKU2N.js → chunk-NMAIY4PX.js} +3 -3
- package/dist/cli/chunks/{chunk-QIRL6B3C.js → chunk-NQZ5AR3D.js} +2 -2
- package/dist/cli/chunks/{chunk-6TU7FEMD.js → chunk-P6OYS755.js} +1 -1
- package/dist/cli/chunks/{chunk-HVU64GP5.js → chunk-PI7TJS62.js} +2 -2
- package/dist/cli/chunks/{chunk-N7H767TP.js → chunk-PX5YDCRH.js} +2 -2
- package/dist/cli/chunks/{chunk-3EZ5DR2R.js → chunk-PZPWRQ2M.js} +2 -2
- package/dist/cli/chunks/{chunk-RKOUXVZZ.js → chunk-Q5XTSMWR.js} +2 -2
- package/dist/cli/chunks/{chunk-K27SU3RE.js → chunk-Q7EAGKAE.js} +2 -2
- package/dist/cli/chunks/{chunk-M5AEL7IS.js → chunk-QDFTT3RF.js} +2 -2
- package/dist/cli/chunks/{chunk-TY5WC3FT.js → chunk-QGA55PFM.js} +3 -3
- package/dist/cli/chunks/{chunk-NQI7FWCS.js → chunk-QW6VMTBR.js} +2 -2
- package/dist/cli/chunks/{chunk-BHFR2EXL.js → chunk-QZANMBIT.js} +1 -1
- package/dist/cli/chunks/{chunk-5D36YHS3.js → chunk-RETBYIAC.js} +4 -4
- package/dist/cli/chunks/{chunk-UKGXWW64.js → chunk-RFNPJK6N.js} +3 -3
- package/dist/cli/chunks/{chunk-G3W6BMVJ.js → chunk-RG52OKAM.js} +1 -1
- package/dist/cli/chunks/{chunk-DO6EI5KB.js → chunk-RSXXCL4A.js} +1 -1
- package/dist/cli/chunks/{chunk-E3W6XQ57.js → chunk-RTFO5UQH.js} +2 -2
- package/dist/cli/chunks/{chunk-DDCIYOGT.js → chunk-RZZCUIAI.js} +2 -2
- package/dist/cli/chunks/{chunk-C3HQL6S4.js → chunk-SDRHUMJB.js} +2 -2
- package/dist/cli/chunks/{chunk-KYA5LARK.js → chunk-SE4WIB26.js} +1 -1
- package/dist/cli/chunks/{chunk-NU7UTXMP.js → chunk-SESK3ARK.js} +2 -2
- package/dist/cli/chunks/{chunk-YQGPQBCX.js → chunk-SJUXE4IC.js} +2 -2
- package/dist/cli/chunks/{chunk-HBCGYMQU.js → chunk-SMDN3BQZ.js} +1 -1
- package/dist/cli/chunks/{chunk-D6OUCB2H.js → chunk-SNOBH4AZ.js} +2 -2
- package/dist/cli/chunks/{chunk-QRCIZFNK.js → chunk-SPV2VKC5.js} +2 -2
- package/dist/cli/chunks/chunk-TCHGOB2N.js +2 -0
- package/dist/cli/chunks/{chunk-2KJQ2UQE.js → chunk-TVYY3OCX.js} +1 -1
- package/dist/cli/chunks/{chunk-RIZVC4XY.js → chunk-UCFQALXO.js} +2 -2
- package/dist/cli/chunks/{chunk-XFPPERA2.js → chunk-UKA2KOXE.js} +2 -2
- package/dist/cli/chunks/{chunk-UTBYJ4RF.js → chunk-UNFFDHER.js} +16 -11
- package/dist/cli/chunks/{chunk-6VAZAHQG.js → chunk-UQ32JHES.js} +2 -2
- package/dist/cli/chunks/{chunk-CPC7FN52.js → chunk-V4DM6ELU.js} +2 -2
- package/dist/cli/chunks/{chunk-67YV75XP.js → chunk-VGFFFKGK.js} +2 -2
- package/dist/cli/chunks/{chunk-WK7B4B6Y.js → chunk-VMNWDJIZ.js} +2 -2
- package/dist/cli/chunks/chunk-W6HXLH5G.js +180 -0
- package/dist/cli/chunks/{chunk-7VFY7TUR.js → chunk-WCJBU2KI.js} +2 -2
- package/dist/cli/chunks/{chunk-JROVR6YS.js → chunk-WGM35YWL.js} +2 -2
- package/dist/cli/chunks/{chunk-IUHB5GVS.js → chunk-WO4QMXIG.js} +2 -2
- package/dist/cli/chunks/{chunk-JES6R5KP.js → chunk-XAS3XRYM.js} +1 -1
- package/dist/cli/chunks/chunk-Y3LZ35OG.js +2 -0
- package/dist/cli/chunks/{chunk-75QJ5HWE.js → chunk-Y3UOUNHM.js} +2 -2
- package/dist/cli/chunks/{chunk-WJTSY5MC.js → chunk-YFBSPLJG.js} +1 -1
- package/dist/cli/chunks/{chunk-DPBRWP4J.js → chunk-YHKEDEAA.js} +3 -3
- package/dist/cli/chunks/{chunk-NRE4NAVA.js → chunk-YS4FCTWF.js} +1 -1
- package/dist/cli/chunks/{chunk-I2NENQ44.js → chunk-YSLL6VSL.js} +2 -2
- package/dist/cli/chunks/chunk-Z6GGIRQQ.js +65 -0
- package/dist/cli/chunks/{chunk-E4EYPYR3.js → chunk-Z7WODOTH.js} +2 -2
- package/dist/cli/chunks/{chunk-7DETTOPZ.js → chunk-ZCRTRYXK.js} +2 -2
- package/dist/cli/chunks/{chunk-FUNGTIF2.js → chunk-ZEV3YTO7.js} +2 -2
- package/dist/cli/chunks/{chunk-SQKW3B6B.js → chunk-ZL6SYKUK.js} +1 -1
- package/dist/cli/chunks/{chunk-AMMQOV35.js → chunk-ZSPU4MOS.js} +2 -2
- package/dist/cli/chunks/{chunk-KKHYJF5U.js → chunk-ZVWVV4EX.js} +1 -1
- package/dist/cli/chunks/{ci-RACDAJMR.js → ci-W6K6G2KZ.js} +2 -2
- package/dist/cli/chunks/{ci-output-EHRSZBKG.js → ci-output-LDT24TS3.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GBV7M5XG.js → circuit-breaker-F5V4KITU.js} +2 -2
- package/dist/cli/chunks/claude-flow-setup-DT6WQQVD.js +2 -0
- package/dist/cli/chunks/client-KHWJT6FB.js +2 -0
- package/dist/cli/chunks/{cline-installer-W4NMXJSG.js → cline-installer-G7TJOAEX.js} +2 -2
- package/dist/cli/chunks/{code-JWXJMYXB.js → code-PGE6A42V.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-RVI2IFTM.js → code-index-extractor-RNITH372.js} +2 -2
- package/dist/cli/chunks/{codex-installer-3BORJINH.js → codex-installer-LBX77AI3.js} +6 -6
- package/dist/cli/chunks/{completions-A55NCTAO.js → completions-4AWLAARX.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-JCXHGGLY.js → complexity-analyzer-ZPNSS476.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-PUVFMGYW.js → continuedev-installer-UAPWX6OA.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-4DCMYWHB.js → copilot-installer-BJN2YJGI.js} +2 -2
- package/dist/cli/chunks/core-handlers-HING5RRG.js +2 -0
- package/dist/cli/chunks/{cost-tracker-5TV2GGKY.js → cost-tracker-MHP2VJ63.js} +2 -2
- package/dist/cli/chunks/{coverage-NNWM7TX3.js → coverage-PQB4IEFG.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-PQTD6AZN.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4NCHGJGK.js → cursor-installer-ZXBWYAS3.js} +2 -2
- package/dist/cli/chunks/{daemon-T4JO4IXP.js → daemon-64C7R6OJ.js} +3 -3
- package/dist/cli/chunks/{daemon-QIKCXKWO.js → daemon-N2BEGEFY.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-RPAAIDAD.js → dag-attention-scheduler-SPZDAPNL.js} +2 -2
- package/dist/cli/chunks/{detect-SBEEVDSN.js → detect-LXJBSSZW.js} +2 -2
- package/dist/cli/chunks/{dist-node-ZHI6NCSU.js → dist-node-U3TKZ2IZ.js} +2 -2
- package/dist/cli/chunks/{domain-handler-LBC3GJ7Z.js → domain-handler-3DDWUVSR.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-H6IZ5USZ.js → domain-plugins-JJVWI4OQ.js} +2 -2
- package/dist/cli/chunks/domain-transfer-M36KUJ2U.js +2 -0
- package/dist/cli/chunks/dream-WUGRSNCV.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-AHTR7CRU.js → embed-and-insert-pattern-JPAR7TXX.js} +2 -2
- package/dist/cli/chunks/{eval-DZU2KISM.js → eval-SOLG23EA.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-5IQCWKSL.js → experience-capture-middleware-T7G2VOOD.js} +3 -3
- package/dist/cli/chunks/{fast-paths-2KLDUWCY.js → fast-paths-32N3ELI4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-N6UAEZY4.js → feature-flags-APJDQ4N7.js} +2 -2
- package/dist/cli/chunks/{feature-flags-7AC3XDZA.js → feature-flags-NAHKLDRN.js} +2 -2
- package/dist/cli/chunks/{file-discovery-5SDIW4V2.js → file-discovery-YKVM3MDB.js} +2 -2
- package/dist/cli/chunks/{fleet-ZIQCAZ2Y.js → fleet-55M5CJS4.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-DUMBZJEV.js → gnn-wrapper-UD6E6S6Z.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-6HVM6ZMR.js → heartbeat-handler-OYVW3VSC.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-33XX5XNQ.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-XQPERX3H.js +2 -0
- package/dist/cli/chunks/hnsw-index-2GNXTWHH.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-5DRL5FLX.js → hnsw-legacy-bridge-HBYIS3ZW.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-GW67GTCL.js → hnswlib-node-EQPM42OU.js} +2 -2
- package/dist/cli/chunks/{hooks-QHH6FVO4.js → hooks-5ZSSJWO6.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-CCF7URKI.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-7XDCCVG2.js → hypergraph-engine-XBGVQ4PD.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-QHF7NOU5.js → hypergraph-handler-CAWAQ673.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HGKAZWIG.js +2 -0
- package/dist/cli/chunks/{init-handler-5UIVOM7K.js → init-handler-PRHXSARK.js} +6 -6
- package/dist/cli/chunks/init-wizard-72MFBI3G.js +2 -0
- package/dist/cli/chunks/kernel-BRCBVMSK.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TGGV6K5Q.js → kilocode-installer-F7LXBM7I.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-4XYBHZWW.js → kiro-installer-NM723ZRG.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-DG44IPEI.js +2 -0
- package/dist/cli/chunks/{learning-STE5W6BS.js → learning-5QYIDHH3.js} +3 -3
- package/dist/cli/chunks/{llm-router-NKF7J3RI.js → llm-router-43HKWPSX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-24KXFX32.js +2 -0
- package/dist/cli/chunks/{load-B2T77UJQ.js → load-5YDBWSCS.js} +2 -2
- package/dist/cli/chunks/load-test-N4TAYJY3.js +2 -0
- package/dist/cli/chunks/mcp-UMAPMNMY.js +2 -0
- package/dist/cli/chunks/{memory-WRFZKG56.js → memory-FWCPCQFP.js} +5 -5
- package/dist/cli/chunks/memory-backend-NVYFYVAU.js +2 -0
- package/dist/cli/chunks/memory-handlers-UTWCNCHL.js +2 -0
- package/dist/cli/chunks/multi-model-executor-2XTBGLE4.js +14 -0
- package/dist/cli/chunks/{opencode-installer-J36EMQU7.js → opencode-installer-GIXOJ6NS.js} +2 -2
- package/dist/cli/chunks/orchestrator-VW6BKHLI.js +393 -0
- package/dist/cli/chunks/pattern-null-store-SBPNYDBR.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-BVMTWI3E.js → pattern-usage-recorder-7CEUC3J7.js} +2 -2
- package/dist/cli/chunks/{pipeline-OWAHDUAQ.js → pipeline-IGUQPPPO.js} +2 -2
- package/dist/cli/chunks/{platform-ANGBFWBV.js → platform-2P636I7B.js} +2 -2
- package/dist/cli/chunks/{plugin-OO7ON2YW.js → plugin-NY6SWDPE.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-HFG3BXWU.js → prime-radiant-advanced-wasm-2UUDTIO2.js} +2 -2
- package/dist/cli/chunks/{project-root-LNOYVTYY.js → project-root-IOISG5KX.js} +2 -2
- package/dist/cli/chunks/protocol-executor-IBYEII5Q.js +2 -0
- package/dist/cli/chunks/{protocol-handler-CE3Q6LY4.js → protocol-handler-ZTPCRQ5W.js} +2 -2
- package/dist/cli/chunks/{prove-7XPN53PY.js → prove-SQX5A3IG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-7IETWW6W.js +2 -0
- package/dist/cli/chunks/{quality-TT23JRFX.js → quality-DROILKRY.js} +2 -2
- package/dist/cli/chunks/{quality-gate-PPPRP255.js → quality-gate-PWKWDJY2.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-NHUK2MWJ.js +2 -0
- package/dist/cli/chunks/{real-embeddings-EYNZIFJE.js → real-embeddings-P5U3MGYC.js} +2 -2
- package/dist/cli/chunks/{ref-validation-QQR64ZXD.js → ref-validation-KY73NQXD.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-UIGS7ZJD.js → roocode-installer-6JPPRB3W.js} +2 -2
- package/dist/cli/chunks/router-SRSO3IHF.js +2 -0
- package/dist/cli/chunks/routing-feedback-PASRE5HY.js +2 -0
- package/dist/cli/chunks/{routing-handler-6AENUIRG.js → routing-handler-VTJIVFUO.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-5AWMEV34.js → ruvector-commands-C6RPSJJO.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-4M4J67OU.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-TSXGT5LF.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-NWRJ7C22.js → rvf-migration-coordinator-R53URRIO.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-MOF3E7BR.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-ISKRP563.js → rvf-store-integrity-MMXN5TEJ.js} +2 -2
- package/dist/cli/chunks/safe-db-QJLFO33B.js +2 -0
- package/dist/cli/chunks/schedule-YIVXW5O2.js +2 -0
- package/dist/cli/chunks/scheduler-AON7DWSJ.js +2 -0
- package/dist/cli/chunks/{security-325A7FMB.js → security-3B3R2NL4.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-VIJB7JUS.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-THFDYS2Z.js → shared-rvf-dual-writer-UVWGDUWC.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-75VHKKQB.js +2 -0
- package/dist/cli/chunks/{standalone-memory-UD4MJ6GZ.js → standalone-memory-M4LWAAYZ.js} +2 -2
- package/dist/cli/chunks/{status-handler-CPFTN4XL.js → status-handler-YYFV6OZL.js} +2 -2
- package/dist/cli/chunks/{structural-health-2MG2IVBL.js → structural-health-27E6LLKB.js} +2 -2
- package/dist/cli/chunks/sync-26CEGSTC.js +2 -0
- package/dist/cli/chunks/{sync-EE4VVKOW.js → sync-J3LJ56WN.js} +2 -2
- package/dist/cli/chunks/{task-handler-7H5OYJG4.js → task-handler-4MCEBQZL.js} +2 -2
- package/dist/cli/chunks/{task-handlers-NH4GJHCJ.js → task-handlers-GYBAWKE2.js} +3 -3
- package/dist/cli/chunks/{test-MPHGT4T6.js → test-MPC5HRH5.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-CHQ4ZLLJ.js → test-scheduling-ZJBFRZ3J.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-2Y2XITBX.js +2 -0
- package/dist/cli/chunks/{token-usage-EBXUJNRB.js → token-usage-3X5WMTG2.js} +2 -2
- package/dist/cli/chunks/{transformers-ZEKS2OJZ.js → transformers-MVL4C5IX.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-SLW65ZFO.js +2 -0
- package/dist/cli/chunks/{types-KYAA5VLV.js → types-TG5P3CRS.js} +2 -2
- package/dist/cli/chunks/unified-memory-UCQ6AB32.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-IXYUMKRR.js +2 -0
- package/dist/cli/chunks/unified-persistence-7E6JQ4FZ.js +2 -0
- package/dist/cli/chunks/{upgrade-UJBJ5AYM.js → upgrade-ETBHDEPY.js} +2 -2
- package/dist/cli/chunks/{validate-RUV6YMWS.js → validate-C2A73LZK.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IVEVMGVM.js → validate-swarm-67XN42ML.js} +2 -2
- package/dist/cli/chunks/{vibium-HOGMFJ2Z.js → vibium-NILGKHLN.js} +2 -2
- package/dist/cli/chunks/visual-security-4VZXPEVG.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-AVWA6HKE.js → web-tree-sitter-USJN77P4.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DAH7HI2W.js → windsurf-installer-5GGZXGJW.js} +2 -2
- package/dist/cli/chunks/witness-chain-IWS5ZHHL.js +2 -0
- package/dist/cli/chunks/witness-chain-JQA2VPZI.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-4UA7IPS3.js +2 -0
- package/dist/cli/chunks/witness-chain-verifier-3GEADWPE.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-JSTBMG43.js → witness-key-manager-ZWEIK3VJ.js} +2 -2
- package/dist/cli/chunks/{workflow-TWOIA6LZ.js → workflow-KHMVVBBA.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-GI5NQH7C.js +2 -0
- package/dist/cli/chunks/wrappers-N6XIK5PT.js +2 -0
- package/dist/cli/commands/audit.d.ts +20 -2
- package/dist/cli/commands/audit.js +158 -16
- package/dist/cli/commands/claude-flow-setup.js +5 -4
- package/dist/cli/index.js +2 -1
- package/dist/init/agents-installer.d.ts +4 -0
- package/dist/init/agents-installer.js +24 -11
- package/dist/init/codex-installer.js +4 -2
- package/dist/init/idempotent-write.d.ts +53 -0
- package/dist/init/idempotent-write.js +160 -0
- package/dist/init/phases/05-learning.js +3 -1
- package/dist/init/phases/07-hooks.js +32 -16
- package/dist/init/phases/08-mcp.js +4 -2
- package/dist/init/phases/10-workers.js +7 -5
- package/dist/init/phases/12-verification.js +7 -2
- package/dist/init/project-analyzer.d.ts +9 -0
- package/dist/init/project-analyzer.js +20 -1
- package/dist/init/self-configurator.d.ts +5 -3
- package/dist/init/self-configurator.js +18 -29
- package/dist/init/skills-installer.js +4 -2
- package/dist/init/types.d.ts +6 -0
- package/dist/init/types.js +20 -24
- package/dist/integrations/coherence/coherence-service.js +84 -24
- package/dist/integrations/coherence/vote-tally.d.ts +38 -0
- package/dist/integrations/coherence/vote-tally.js +39 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +23 -0
- package/dist/integrations/ruvector/shared-rvf-adapter.js +24 -0
- package/dist/kernel/kernel.js +3 -2
- package/dist/learning/pattern-store.d.ts +11 -0
- package/dist/learning/pattern-store.js +26 -8
- package/dist/learning/qe-patterns.d.ts +6 -0
- package/dist/learning/qe-patterns.js +7 -1
- package/dist/learning/qe-reasoning-bank.js +3 -0
- package/dist/learning/rvf-pattern-store.js +20 -7
- package/dist/learning/sqlite-persistence.d.ts +8 -1
- package/dist/learning/sqlite-persistence.js +49 -9
- package/dist/logging/console-logger.d.ts +2 -5
- package/dist/logging/console-logger.js +10 -46
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.js +1 -0
- package/dist/logging/redaction.d.ts +27 -0
- package/dist/logging/redaction.js +170 -0
- package/dist/mcp/bundle.js +435 -421
- package/dist/mcp/handlers/core-handlers.js +5 -4
- package/dist/mcp/protocol-server.js +2 -1
- package/dist/mcp/tools/base.d.ts +9 -2
- package/dist/mcp/tools/base.js +7 -0
- package/dist/mcp/tools/coherence/consensus.js +51 -2
- package/dist/mcp/tools/planning/goap-plan.d.ts +20 -7
- package/dist/mcp/tools/planning/goap-plan.js +92 -20
- package/dist/mcp/tools/planning/goap-status.d.ts +37 -12
- package/dist/mcp/tools/planning/goap-status.js +52 -23
- package/dist/mcp/tools/planning/world-state.d.ts +101 -0
- package/dist/mcp/tools/planning/world-state.js +274 -0
- package/dist/mcp/types.d.ts +4 -2
- package/dist/planning/goap-planner.d.ts +60 -4
- package/dist/planning/goap-planner.js +218 -60
- package/dist/planning/index.d.ts +1 -1
- package/dist/planning/index.js +1 -1
- package/dist/planning/plan-executor.d.ts +20 -1
- package/dist/planning/plan-executor.js +209 -100
- package/dist/planning/types.d.ts +16 -0
- package/dist/planning/types.js +17 -0
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-IYC62SXA.js +0 -2
- package/dist/cli/chunks/agent-booster-wasm-EDNKP3SP.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-LLOU2IXD.js +0 -2
- package/dist/cli/chunks/audit-CVZQMF55.js +0 -3
- package/dist/cli/chunks/base-P3Z4IKCT.js +0 -2
- package/dist/cli/chunks/browser-workflow-YYHQQ25X.js +0 -2
- package/dist/cli/chunks/chunk-5WOSWNDN.js +0 -2
- package/dist/cli/chunks/chunk-7CD7PBHY.js +0 -3
- package/dist/cli/chunks/chunk-7X7JYWT4.js +0 -27
- package/dist/cli/chunks/chunk-J27F4NSB.js +0 -2
- package/dist/cli/chunks/chunk-MI5Q55DG.js +0 -65
- package/dist/cli/chunks/chunk-UDHVCKGA.js +0 -5
- package/dist/cli/chunks/chunk-XQSIRBKT.js +0 -180
- package/dist/cli/chunks/chunk-ZBABIZ2D.js +0 -2
- package/dist/cli/chunks/claude-flow-setup-5LVJOFKP.js +0 -2
- package/dist/cli/chunks/client-HUVFA5PF.js +0 -2
- package/dist/cli/chunks/core-handlers-UEXO3VAA.js +0 -2
- package/dist/cli/chunks/cross-domain-router-ODU5IZD6.js +0 -2
- package/dist/cli/chunks/domain-transfer-JZA5TMW3.js +0 -2
- package/dist/cli/chunks/dream-HE3OX42F.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-QUIFGGLX.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-42KB37KP.js +0 -2
- package/dist/cli/chunks/hnsw-index-T2PGO77J.js +0 -2
- package/dist/cli/chunks/hybrid-backend-FRNWYRKH.js +0 -2
- package/dist/cli/chunks/impact-analyzer-A5QYOYBR.js +0 -2
- package/dist/cli/chunks/init-wizard-XBU674YH.js +0 -2
- package/dist/cli/chunks/kernel-DV5MTNZD.js +0 -2
- package/dist/cli/chunks/knowledge-graph-4ACGVJQK.js +0 -2
- package/dist/cli/chunks/llm-router-service-PSMASERT.js +0 -2
- package/dist/cli/chunks/load-test-MRUO2VPF.js +0 -2
- package/dist/cli/chunks/mcp-JGSFCEMH.js +0 -2
- package/dist/cli/chunks/memory-backend-2MPGI6JW.js +0 -2
- package/dist/cli/chunks/memory-handlers-XT4HMITB.js +0 -2
- package/dist/cli/chunks/multi-model-executor-26Q5BSVG.js +0 -14
- package/dist/cli/chunks/orchestrator-D5IFV65I.js +0 -393
- package/dist/cli/chunks/pattern-null-store-TGWUL237.js +0 -2
- package/dist/cli/chunks/protocol-executor-GEVH5KD6.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-DJ2JL6QB.js +0 -2
- package/dist/cli/chunks/queen-coordinator-F7E3AS26.js +0 -2
- package/dist/cli/chunks/router-OZH3QSAU.js +0 -2
- package/dist/cli/chunks/routing-feedback-J2E3ADZB.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-HK525Y5Y.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-Q7FB3BKR.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-5ZRCGUI6.js +0 -2
- package/dist/cli/chunks/safe-db-3OYEPVEH.js +0 -2
- package/dist/cli/chunks/schedule-AG4C2EIQ.js +0 -2
- package/dist/cli/chunks/scheduler-SQS2CZFZ.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-NFL6QSZ6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-MAKDFSHC.js +0 -2
- package/dist/cli/chunks/sync-MBTW5XBF.js +0 -2
- package/dist/cli/chunks/token-bootstrap-SSDCYEKK.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-J6ZMAK37.js +0 -2
- package/dist/cli/chunks/unified-memory-DDWMC435.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-4JA7SGBK.js +0 -2
- package/dist/cli/chunks/unified-persistence-F6OSNTXY.js +0 -2
- package/dist/cli/chunks/visual-security-25SMBIYT.js +0 -2
- package/dist/cli/chunks/witness-chain-PJOQPFUX.js +0 -2
- package/dist/cli/chunks/witness-chain-ZW6KKUZU.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-UKSIDM7Q.js +0 -2
- package/dist/cli/chunks/wrappers-UR7BLXKV.js +0 -2
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import { randomUUID } from 'crypto';
|
|
15
15
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
16
16
|
import { getUnifiedPersistence } from '../kernel/unified-persistence.js';
|
|
17
|
+
import { DEFAULT_MAX_PLAN_STEPS, validateMaxSteps } from './types.js';
|
|
17
18
|
import { getAllQEActions, QE_GOALS } from './actions/qe-action-library.js';
|
|
18
19
|
// ============================================================================
|
|
19
20
|
// MinHeap for A* Open Set (O(log n) insert/extract vs O(n log n) sort+shift)
|
|
@@ -223,12 +224,20 @@ export class GOAPPlanner {
|
|
|
223
224
|
* @returns Optimal plan or null if no plan found
|
|
224
225
|
*/
|
|
225
226
|
async findPlan(currentState, goal, constraints) {
|
|
227
|
+
// Issue #535: reject a malformed step cap up front rather than silently
|
|
228
|
+
// ignoring it (maxSteps: 0 would otherwise mean "no plan ever").
|
|
229
|
+
const maxStepsError = validateMaxSteps(constraints?.maxSteps);
|
|
230
|
+
if (maxStepsError) {
|
|
231
|
+
throw new Error(maxStepsError);
|
|
232
|
+
}
|
|
226
233
|
await this.initialize();
|
|
227
234
|
const startTime = Date.now();
|
|
228
235
|
// Try to reuse a similar plan first
|
|
229
236
|
if (this.enablePlanReuse) {
|
|
230
237
|
const reusedPlan = await this.findSimilarPlan(goal, 0.75);
|
|
231
|
-
if (reusedPlan &&
|
|
238
|
+
if (reusedPlan &&
|
|
239
|
+
this.validatePlanForState(reusedPlan, currentState) &&
|
|
240
|
+
this.planSatisfiesConstraints(reusedPlan, currentState, goal, constraints)) {
|
|
232
241
|
// Update reuse stats
|
|
233
242
|
this.recordPlanReuse(reusedPlan.id, true);
|
|
234
243
|
const clonedPlan = {
|
|
@@ -297,13 +306,20 @@ export class GOAPPlanner {
|
|
|
297
306
|
// Entries are added on insert, updated when a better path is found, and
|
|
298
307
|
// removed when the node is popped (moved to the closed set).
|
|
299
308
|
const openSetCosts = new Map();
|
|
309
|
+
// Issue #535: cost-unit heuristic built once per search from the
|
|
310
|
+
// actions that can actually move each goal key (see buildHeuristic).
|
|
311
|
+
const heuristic = this.buildHeuristic(goal, availableActions);
|
|
312
|
+
const startH = heuristic(start);
|
|
313
|
+
if (!Number.isFinite(startH)) {
|
|
314
|
+
return null; // some unmet goal key can never be changed by any action
|
|
315
|
+
}
|
|
300
316
|
// Initialize start node
|
|
301
317
|
const startNode = {
|
|
302
318
|
state: this.cloneState(start),
|
|
303
319
|
action: null,
|
|
304
320
|
parent: null,
|
|
305
321
|
g: 0,
|
|
306
|
-
h:
|
|
322
|
+
h: startH,
|
|
307
323
|
f: 0,
|
|
308
324
|
depth: 0,
|
|
309
325
|
};
|
|
@@ -312,7 +328,8 @@ export class GOAPPlanner {
|
|
|
312
328
|
openSetCosts.set(this.hashState(start), 0);
|
|
313
329
|
// Constraint defaults
|
|
314
330
|
const maxIterations = 10000;
|
|
315
|
-
|
|
331
|
+
// Issue #535: constraints.maxSteps caps the search depth (= plan length).
|
|
332
|
+
const maxPlanLength = constraints?.maxSteps ?? DEFAULT_MAX_PLAN_STEPS;
|
|
316
333
|
const maxCost = constraints?.maxCost ?? Infinity;
|
|
317
334
|
const maxDuration = constraints?.maxDurationMs ?? Infinity;
|
|
318
335
|
let iterations = 0;
|
|
@@ -352,7 +369,10 @@ export class GOAPPlanner {
|
|
|
352
369
|
}
|
|
353
370
|
// Calculate costs
|
|
354
371
|
const g = current.g + this.getActionCost(action, current.state);
|
|
355
|
-
const h =
|
|
372
|
+
const h = heuristic(newState);
|
|
373
|
+
if (!Number.isFinite(h)) {
|
|
374
|
+
continue; // dead end: an unmet goal key no action can change
|
|
375
|
+
}
|
|
356
376
|
const f = g + h;
|
|
357
377
|
// Check cost constraints
|
|
358
378
|
if (g > maxCost) {
|
|
@@ -496,46 +516,84 @@ export class GOAPPlanner {
|
|
|
496
516
|
return true;
|
|
497
517
|
}
|
|
498
518
|
/**
|
|
499
|
-
*
|
|
519
|
+
* Build an admissible, cost-unit A* heuristic for `goal` over `actions`.
|
|
520
|
+
*
|
|
521
|
+
* Issue #535: the previous heuristic was the raw percentage gap / 100 (e.g.
|
|
522
|
+
* 0.9 for coverage 0 -> 90) while a single generate-coverage-tests step
|
|
523
|
+
* costs ~5, so it carried almost no information and A* degenerated into
|
|
524
|
+
* uniform-cost search: it enumerated every combination of the ~40 cheap
|
|
525
|
+
* flag-setting library actions and hit the iteration cap before reaching
|
|
526
|
+
* any deep goal. Now each unmet goal key contributes a lower bound on the
|
|
527
|
+
* cost still needed to satisfy it:
|
|
528
|
+
* - numeric min/max gap reachable by deltas: ceil(gap / largest delta)
|
|
529
|
+
* steps x cheapest such action;
|
|
530
|
+
* - any key an action can `set` (primitive or {set}) directly: that
|
|
531
|
+
* action's cost (one step);
|
|
532
|
+
* - unmet key no action can move: Infinity (dead end, pruned).
|
|
533
|
+
* The per-key bounds are combined with max(), which keeps the heuristic
|
|
534
|
+
* admissible and consistent even when one action moves several keys.
|
|
535
|
+
* Costs use the same base as getActionCost() (cost / successRate), whose
|
|
536
|
+
* risk multiplier only ever increases cost, so the bound never overshoots.
|
|
500
537
|
*/
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
538
|
+
buildHeuristic(goal, actions) {
|
|
539
|
+
const lowerBoundCost = (a) => a.successRate > 0 && a.successRate < 1 ? a.cost / a.successRate : a.cost;
|
|
540
|
+
const movers = new Map();
|
|
541
|
+
for (const key of Object.keys(goal)) {
|
|
542
|
+
const m = { setCost: Infinity, upDelta: 0, upCost: Infinity, downDelta: 0, downCost: Infinity };
|
|
543
|
+
for (const action of actions) {
|
|
544
|
+
if (!Object.hasOwn(action.effects, key))
|
|
545
|
+
continue;
|
|
546
|
+
const effect = action.effects[key];
|
|
547
|
+
const c = lowerBoundCost(action);
|
|
548
|
+
if (typeof effect !== 'object' || effect === null) {
|
|
549
|
+
m.setCost = Math.min(m.setCost, c);
|
|
550
|
+
continue;
|
|
512
551
|
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
condition !== null &&
|
|
516
|
-
'max' in condition) {
|
|
517
|
-
const maxValue = condition.max;
|
|
518
|
-
if (typeof currentValue === 'number' && currentValue > maxValue) {
|
|
519
|
-
distance += (currentValue - maxValue) / 100;
|
|
552
|
+
if ('set' in effect && effect.set !== undefined) {
|
|
553
|
+
m.setCost = Math.min(m.setCost, c);
|
|
520
554
|
}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
555
|
+
if ('delta' in effect && typeof effect.delta === 'number') {
|
|
556
|
+
if (effect.delta > 0) {
|
|
557
|
+
m.upDelta = Math.max(m.upDelta, effect.delta);
|
|
558
|
+
m.upCost = Math.min(m.upCost, c);
|
|
559
|
+
}
|
|
560
|
+
else if (effect.delta < 0) {
|
|
561
|
+
m.downDelta = Math.max(m.downDelta, -effect.delta);
|
|
562
|
+
m.downCost = Math.min(m.downCost, c);
|
|
563
|
+
}
|
|
527
564
|
}
|
|
528
565
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
566
|
+
movers.set(key, m);
|
|
567
|
+
}
|
|
568
|
+
return (state) => {
|
|
569
|
+
let h = 0;
|
|
570
|
+
for (const [key, condition] of Object.entries(goal)) {
|
|
571
|
+
if (this.checkCondition(state, key, condition))
|
|
572
|
+
continue;
|
|
573
|
+
const m = movers.get(key);
|
|
574
|
+
const value = this.getStateValue(state, key);
|
|
575
|
+
let bound = m.setCost;
|
|
576
|
+
if (typeof value === 'number' && typeof condition === 'object' && condition !== null) {
|
|
577
|
+
if ('min' in condition && typeof condition.min === 'number' && value < condition.min && m.upDelta > 0) {
|
|
578
|
+
bound = Math.min(bound, Math.ceil((condition.min - value) / m.upDelta) * m.upCost);
|
|
579
|
+
}
|
|
580
|
+
else if ('max' in condition && typeof condition.max === 'number' && value > condition.max && m.downDelta > 0) {
|
|
581
|
+
bound = Math.min(bound, Math.ceil((value - condition.max) / m.downDelta) * m.downCost);
|
|
582
|
+
}
|
|
583
|
+
else if ('eq' in condition && typeof condition.eq === 'number') {
|
|
584
|
+
// An eq target can be hit by a delta in (at least) one step.
|
|
585
|
+
bound = Math.min(bound, m.upCost, m.downCost);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
else if (typeof value === 'number' && typeof condition === 'number') {
|
|
589
|
+
bound = Math.min(bound, m.upCost, m.downCost);
|
|
535
590
|
}
|
|
591
|
+
if (!Number.isFinite(bound))
|
|
592
|
+
return Infinity;
|
|
593
|
+
h = Math.max(h, bound);
|
|
536
594
|
}
|
|
537
|
-
|
|
538
|
-
|
|
595
|
+
return h;
|
|
596
|
+
};
|
|
539
597
|
}
|
|
540
598
|
/**
|
|
541
599
|
* Get value from nested state using dot notation
|
|
@@ -580,31 +638,50 @@ export class GOAPPlanner {
|
|
|
580
638
|
Object.defineProperty(current, finalKey, { value, writable: true, enumerable: true, configurable: true });
|
|
581
639
|
}
|
|
582
640
|
/**
|
|
583
|
-
* Create hash of state for deduplication
|
|
641
|
+
* Create hash of state for deduplication.
|
|
642
|
+
*
|
|
643
|
+
* Issue #535: this previously hashed a fixed list of known fields only, so
|
|
644
|
+
* every action effect on any other key (coverage.gapsIdentified,
|
|
645
|
+
* quality.unitTestsRun, fleet.specialistAvailable, ... — most of the
|
|
646
|
+
* seeded action library) produced a successor state that hashed identical
|
|
647
|
+
* to its already-closed parent and was pruned. That made e.g. the seeded
|
|
648
|
+
* `achieve-90-percent-coverage` goal unplannable from any state (the
|
|
649
|
+
* analyze-coverage-gaps -> generate-coverage-tests chain was unreachable).
|
|
650
|
+
* Now every key in the state participates. Numbers are compared at 1e-6
|
|
651
|
+
* precision; resources.timeRemaining is bucketed per minute, as before.
|
|
584
652
|
*/
|
|
585
653
|
hashState(state) {
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
//
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
654
|
+
return GOAPPlanner.stableStateKey(state, '');
|
|
655
|
+
}
|
|
656
|
+
static stableStateKey(value, path) {
|
|
657
|
+
if (value === null || value === undefined)
|
|
658
|
+
return String(value);
|
|
659
|
+
if (typeof value === 'number') {
|
|
660
|
+
if (!Number.isFinite(value))
|
|
661
|
+
return String(value);
|
|
662
|
+
// Keep fractional progress distinguishable (codex review: integer
|
|
663
|
+
// rounding collapsed e.g. custom.progress 0 -> 0.4 into its parent);
|
|
664
|
+
// only timeRemaining is bucketed (per minute) to bound the space.
|
|
665
|
+
return path === 'resources.timeRemaining'
|
|
666
|
+
? String(Math.floor(value / 60))
|
|
667
|
+
: String(Math.round(value * 1e6) / 1e6);
|
|
668
|
+
}
|
|
669
|
+
if (typeof value === 'string')
|
|
670
|
+
return JSON.stringify(value);
|
|
671
|
+
if (typeof value === 'boolean')
|
|
672
|
+
return value ? 'true' : 'false';
|
|
673
|
+
if (Array.isArray(value)) {
|
|
674
|
+
// Copy before sort to avoid mutating the state's own array.
|
|
675
|
+
return `[${value.map((v) => GOAPPlanner.stableStateKey(v, path)).sort().join(',')}]`;
|
|
676
|
+
}
|
|
677
|
+
if (typeof value === 'object') {
|
|
678
|
+
const obj = value;
|
|
679
|
+
const parts = Object.keys(obj)
|
|
680
|
+
.sort()
|
|
681
|
+
.map((k) => `${k}:${GOAPPlanner.stableStateKey(obj[k], path ? `${path}.${k}` : k)}`);
|
|
682
|
+
return `{${parts.join(',')}}`;
|
|
683
|
+
}
|
|
684
|
+
return typeof value;
|
|
608
685
|
}
|
|
609
686
|
/**
|
|
610
687
|
* Deep clone world state.
|
|
@@ -727,6 +804,21 @@ export class GOAPPlanner {
|
|
|
727
804
|
await this.initialize();
|
|
728
805
|
return Array.from(this.actions.values()).filter((a) => a.category === category);
|
|
729
806
|
}
|
|
807
|
+
/**
|
|
808
|
+
* State keys referenced by any loaded action's preconditions or effects
|
|
809
|
+
* (seeded library plus custom actions added via addAction()). Used by the
|
|
810
|
+
* goap_plan tool to validate caller-supplied world-state keys (#535).
|
|
811
|
+
*/
|
|
812
|
+
getReferencedStateKeys() {
|
|
813
|
+
const keys = new Set();
|
|
814
|
+
for (const action of this.actions.values()) {
|
|
815
|
+
for (const k of Object.keys(action.preconditions))
|
|
816
|
+
keys.add(k);
|
|
817
|
+
for (const k of Object.keys(action.effects))
|
|
818
|
+
keys.add(k);
|
|
819
|
+
}
|
|
820
|
+
return [...keys];
|
|
821
|
+
}
|
|
730
822
|
/**
|
|
731
823
|
* Get available actions based on constraints
|
|
732
824
|
*/
|
|
@@ -784,6 +876,41 @@ export class GOAPPlanner {
|
|
|
784
876
|
similarityScore: row.similarity_score ?? undefined,
|
|
785
877
|
};
|
|
786
878
|
}
|
|
879
|
+
/**
|
|
880
|
+
* List persisted plan summaries without loading every plan into memory.
|
|
881
|
+
* Count includes all rows matching the optional status, before pagination.
|
|
882
|
+
*/
|
|
883
|
+
async listPlanSummaries(status, limit = 20) {
|
|
884
|
+
await this.initialize();
|
|
885
|
+
const db = this.ensureDb();
|
|
886
|
+
const where = status ? ' WHERE status = ?' : '';
|
|
887
|
+
const args = status ? [status] : [];
|
|
888
|
+
const boundedLimit = Number.isFinite(limit)
|
|
889
|
+
? Math.max(1, Math.min(100, Math.trunc(limit)))
|
|
890
|
+
: 20;
|
|
891
|
+
const { count } = db.prepare(`SELECT COUNT(*) AS count FROM goap_plans${where}`)
|
|
892
|
+
.get(...args);
|
|
893
|
+
const rows = db.prepare(`
|
|
894
|
+
SELECT id, status, action_sequence, total_cost, created_at
|
|
895
|
+
FROM goap_plans${where}
|
|
896
|
+
ORDER BY created_at DESC, id DESC
|
|
897
|
+
LIMIT ?
|
|
898
|
+
`).all(...args, boundedLimit);
|
|
899
|
+
const plans = rows.map((row) => {
|
|
900
|
+
const actionIds = safeJsonParse(row.action_sequence);
|
|
901
|
+
if (!Array.isArray(actionIds)) {
|
|
902
|
+
throw new Error(`Invalid action sequence in GOAP plan ${row.id}`);
|
|
903
|
+
}
|
|
904
|
+
return {
|
|
905
|
+
id: row.id,
|
|
906
|
+
status: row.status,
|
|
907
|
+
stepCount: actionIds.length,
|
|
908
|
+
totalCost: row.total_cost,
|
|
909
|
+
createdAt: row.created_at,
|
|
910
|
+
};
|
|
911
|
+
});
|
|
912
|
+
return { plans, count };
|
|
913
|
+
}
|
|
787
914
|
/**
|
|
788
915
|
* Find a similar plan by goal conditions
|
|
789
916
|
*/
|
|
@@ -859,6 +986,37 @@ export class GOAPPlanner {
|
|
|
859
986
|
}
|
|
860
987
|
return true;
|
|
861
988
|
}
|
|
989
|
+
/**
|
|
990
|
+
* Issue #535: a reused plan must honour the caller's constraints exactly
|
|
991
|
+
* like a freshly searched one — otherwise a cached 11-step plan is handed
|
|
992
|
+
* back for a `maxSteps: 3` request (or one using an excluded action, or
|
|
993
|
+
* over budget). Also requires that replaying the plan from the current
|
|
994
|
+
* state actually reaches the goal.
|
|
995
|
+
*/
|
|
996
|
+
planSatisfiesConstraints(plan, currentState, goal, constraints) {
|
|
997
|
+
const maxSteps = constraints?.maxSteps ?? DEFAULT_MAX_PLAN_STEPS;
|
|
998
|
+
if (plan.actions.length > maxSteps)
|
|
999
|
+
return false;
|
|
1000
|
+
if (constraints?.maxDurationMs !== undefined &&
|
|
1001
|
+
plan.estimatedDurationMs > constraints.maxDurationMs) {
|
|
1002
|
+
return false;
|
|
1003
|
+
}
|
|
1004
|
+
const allowed = new Set(this.getAvailableActions(constraints).map((a) => a.id));
|
|
1005
|
+
if (!plan.actions.every((a) => allowed.has(a.id)))
|
|
1006
|
+
return false;
|
|
1007
|
+
// Replay with the same effective cost fresh search enforces
|
|
1008
|
+
// (getActionCost: success-rate and risk adjusted), not raw totalCost.
|
|
1009
|
+
let state = this.cloneState(currentState);
|
|
1010
|
+
let effectiveCost = 0;
|
|
1011
|
+
for (const action of plan.actions) {
|
|
1012
|
+
effectiveCost += this.getActionCost(action, state);
|
|
1013
|
+
state = this.applyAction(state, action);
|
|
1014
|
+
}
|
|
1015
|
+
if (constraints?.maxCost !== undefined && effectiveCost > constraints.maxCost) {
|
|
1016
|
+
return false;
|
|
1017
|
+
}
|
|
1018
|
+
return this.meetsConditions(state, goal);
|
|
1019
|
+
}
|
|
862
1020
|
/**
|
|
863
1021
|
* Hash goal conditions for comparison
|
|
864
1022
|
*/
|
package/dist/planning/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @version 3.0.0
|
|
8
8
|
*/
|
|
9
9
|
export type { V3WorldState, StateConditions, ActionEffects, GOAPAction, GOAPGoal, GOAPPlan, ExecutionStep, PlanConstraints, GOAPGoalRecord, GOAPActionRecord, GOAPPlanRecord, } from './types.js';
|
|
10
|
-
export { DEFAULT_V3_WORLD_STATE } from './types.js';
|
|
10
|
+
export { DEFAULT_V3_WORLD_STATE, DEFAULT_MAX_PLAN_STEPS, validateMaxSteps } from './types.js';
|
|
11
11
|
export { QE_ACTIONS, QE_GOALS, getAllQEActions, getActionsByCategory, getActionsByDomain, getActionsByAgentType, getActionByName, seedQEActions, getActionStats, validateActionLibrary, toGOAPAction, } from './actions/qe-action-library.js';
|
|
12
12
|
export type { QEActionTemplate, QEGoalTemplate } from './actions/qe-action-library.js';
|
|
13
13
|
export { GOAPPlanner, getSharedGOAPPlanner, resetSharedGOAPPlanner, } from './goap-planner.js';
|
package/dist/planning/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @version 3.0.0
|
|
8
8
|
*/
|
|
9
9
|
// Constant exports
|
|
10
|
-
export { DEFAULT_V3_WORLD_STATE } from './types.js';
|
|
10
|
+
export { DEFAULT_V3_WORLD_STATE, DEFAULT_MAX_PLAN_STEPS, validateMaxSteps } from './types.js';
|
|
11
11
|
// Action Library exports
|
|
12
12
|
export { QE_ACTIONS, QE_GOALS, getAllQEActions, getActionsByCategory, getActionsByDomain, getActionsByAgentType, getActionByName, seedQEActions, getActionStats, validateActionLibrary, toGOAPAction, } from './actions/qe-action-library.js';
|
|
13
13
|
// Planner exports
|
|
@@ -32,6 +32,13 @@ export interface ExecutionConfig {
|
|
|
32
32
|
stepTimeoutMs: number;
|
|
33
33
|
/** Auto-replan if step fails (default: true) */
|
|
34
34
|
replanOnFailure: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Maximum number of successive replans within one execution (default: 3).
|
|
37
|
+
* Issue #535: once the planner could actually find plans again, an
|
|
38
|
+
* unbounded failure -> replan -> failure chain could ping-pong forever
|
|
39
|
+
* between two alternative actions.
|
|
40
|
+
*/
|
|
41
|
+
maxReplans?: number;
|
|
35
42
|
/** Execute independent steps in parallel (default: false) */
|
|
36
43
|
parallelExecution: boolean;
|
|
37
44
|
/** Record state before/after each step (default: true) */
|
|
@@ -210,6 +217,11 @@ export declare class PlanExecutor {
|
|
|
210
217
|
* @returns Execution result
|
|
211
218
|
*/
|
|
212
219
|
executeWithCallbacks(plan: GOAPPlan, onStepStart: (step: ExecutionStep) => void, onStepComplete: (step: ExecutedStep) => void, initialState?: V3WorldState): Promise<ExecutionResult>;
|
|
220
|
+
/**
|
|
221
|
+
* Run a plan's steps (and any replacement plans after a failure) without
|
|
222
|
+
* persisting or resetting execution tracking — see executeWithCallbacks.
|
|
223
|
+
*/
|
|
224
|
+
private runPlan;
|
|
213
225
|
/**
|
|
214
226
|
* Execute a single step
|
|
215
227
|
*/
|
|
@@ -224,6 +236,13 @@ export declare class PlanExecutor {
|
|
|
224
236
|
* `successRate: 0.95` roll.
|
|
225
237
|
*/
|
|
226
238
|
private executeRealAction;
|
|
239
|
+
/**
|
|
240
|
+
* Race `work` against the per-step timeout, clearing the timer once the
|
|
241
|
+
* race settles so completed steps don't leave a pending timer behind
|
|
242
|
+
* (codex review, #535: it kept short-lived processes alive for up to
|
|
243
|
+
* stepTimeoutMs and accumulated timers across executions).
|
|
244
|
+
*/
|
|
245
|
+
private withStepTimeout;
|
|
227
246
|
/**
|
|
228
247
|
* Build a task description for an agent
|
|
229
248
|
*/
|
|
@@ -236,7 +255,7 @@ export declare class PlanExecutor {
|
|
|
236
255
|
* @param currentState - Current world state at failure point
|
|
237
256
|
* @returns New plan or null if replanning fails
|
|
238
257
|
*/
|
|
239
|
-
replanFromFailure(originalPlan: GOAPPlan, failedStepIndex: number, currentState: V3WorldState): Promise<GOAPPlan | null>;
|
|
258
|
+
replanFromFailure(originalPlan: GOAPPlan, failedStepIndex: number, currentState: V3WorldState, additionalExcluded?: string[]): Promise<GOAPPlan | null>;
|
|
240
259
|
/**
|
|
241
260
|
* Cancel the current execution
|
|
242
261
|
*/
|