@iowarp/clio-coder 0.4.2 → 0.4.3
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/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
- package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
- package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
- package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
- package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
- package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
- package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
- package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
- package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
- package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
- package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
- package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
- package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
- package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
- package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
- package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
- package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
- package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
- package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
- package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
- package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
- package/dist/cli/index.js +38 -37
- package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
- package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
- package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
- package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
- package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
- package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
- package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
- package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
- package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
- package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
- package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
- package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
- package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
- package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
- package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
- package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
- package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
- package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
- package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
- package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
- package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
- package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
- package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
- package/dist/worker/entry.js +61 -60
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +12 -1
- package/docs/architecture/prompt-envelope-and-tools.md +2 -0
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +15 -5
- package/docs/guide/built-in-agents.md +17 -3
- package/docs/guide/commands-and-modes.md +1 -1
- package/docs/guide/configuration-and-targets.md +97 -9
- package/docs/guide/configuration-reference.md +7 -2
- package/docs/guide/environment-variables.md +2 -0
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/process/development-pipeline.md +34 -1
- package/docs/process/eval-runner.md +67 -3
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +40 -5
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +46 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +23 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +65 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +117 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +86 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -528
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -2
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +134 -29
- package/src/domains/dispatch/types.ts +3 -0
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +6 -1
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/usage.ts +3 -3
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/external-subprocess.ts +114 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +405 -216
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/interactive-slash-runtime.ts +2 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +24 -6
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +1 -0
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* boundary; this module does not import pi-ai directly.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { streamSimple } from "../../../engine/ai.js";
|
|
14
14
|
import type { EngineModel, Usage } from "../../../engine/types.js";
|
|
15
15
|
import { foldWorkingSet } from "../../context/working-set/fold.js";
|
|
16
16
|
import { recallableRefListing } from "../../context/working-set/recall.js";
|
|
17
|
+
import { extractReasoningTokens } from "../context-accounting.js";
|
|
17
18
|
import type { CompactionUsage, SessionEntry } from "../entries.js";
|
|
18
19
|
import { serializeConversation } from "./branch-summary.js";
|
|
19
20
|
import { findCutPoint } from "./cut-point.js";
|
|
@@ -86,6 +87,14 @@ In addition to that carried-forward context, summarize ONLY the active-turn deta
|
|
|
86
87
|
|
|
87
88
|
Do NOT answer the user. Do NOT summarize unrelated older history.`;
|
|
88
89
|
|
|
90
|
+
/** One invoked summary stream, including failed calls that produce no checkpoint. */
|
|
91
|
+
export interface CompactionCallObservation {
|
|
92
|
+
outcome: "success" | "error" | "aborted";
|
|
93
|
+
usage: unknown;
|
|
94
|
+
timestamp: string;
|
|
95
|
+
durationMs: number;
|
|
96
|
+
}
|
|
97
|
+
|
|
89
98
|
export interface CompactInput {
|
|
90
99
|
/** Ordered session entries to compact. The caller reads these from the session domain. */
|
|
91
100
|
entries: ReadonlyArray<SessionEntry>;
|
|
@@ -105,6 +114,8 @@ export interface CompactInput {
|
|
|
105
114
|
reserveTokens?: number;
|
|
106
115
|
/** Override the built-in keep-recent default (DEFAULT_KEEP_RECENT_TOKENS). */
|
|
107
116
|
keepRecentTokens?: number;
|
|
117
|
+
/** Accounting observer; called once per invoked stream, including failures. */
|
|
118
|
+
onCall?: (call: CompactionCallObservation) => void;
|
|
108
119
|
}
|
|
109
120
|
|
|
110
121
|
export interface CompactResult {
|
|
@@ -367,6 +378,24 @@ function addCompactionUsage(total: CompactionUsage | undefined, raw: unknown): C
|
|
|
367
378
|
};
|
|
368
379
|
}
|
|
369
380
|
|
|
381
|
+
/** Keep attributable partial facts if a failed terminal object resets missing fields to zero. */
|
|
382
|
+
function retainReportedUsage(previous: Record<string, unknown>, raw: unknown): Record<string, unknown> {
|
|
383
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return previous;
|
|
384
|
+
const usage = raw as Record<string, unknown>;
|
|
385
|
+
const known = { ...previous };
|
|
386
|
+
for (const field of ["input", "output", "cacheRead", "cacheWrite", "totalTokens"]) {
|
|
387
|
+
const value = numberOrZero(usage[field]);
|
|
388
|
+
if (value > 0) known[field] = value;
|
|
389
|
+
}
|
|
390
|
+
const reasoning = extractReasoningTokens({ ...usage, reasoningTokens: undefined });
|
|
391
|
+
if (reasoning !== null && reasoning > 0) known.reasoning = reasoning;
|
|
392
|
+
if (usage.cost && typeof usage.cost === "object" && "total" in usage.cost) {
|
|
393
|
+
const cost = numberOrZero(usage.cost.total);
|
|
394
|
+
if (cost > 0) known.cost = { total: cost };
|
|
395
|
+
}
|
|
396
|
+
return known;
|
|
397
|
+
}
|
|
398
|
+
|
|
370
399
|
async function runSummaryStream(
|
|
371
400
|
input: CompactInput,
|
|
372
401
|
userText: string,
|
|
@@ -383,26 +412,47 @@ async function runSummaryStream(
|
|
|
383
412
|
messages: [buildUserMessage(userText)],
|
|
384
413
|
};
|
|
385
414
|
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
context as unknown as Parameters<typeof stream>[1],
|
|
389
|
-
options as unknown as Parameters<typeof stream>[2],
|
|
390
|
-
);
|
|
391
|
-
|
|
392
|
-
let summary = "";
|
|
415
|
+
const timestamp = new Date().toISOString();
|
|
416
|
+
const started = performance.now();
|
|
393
417
|
let usage: unknown;
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
418
|
+
let reported: Record<string, unknown> = {};
|
|
419
|
+
let outcome: CompactionCallObservation["outcome"] = "error";
|
|
420
|
+
try {
|
|
421
|
+
// Summarization requests thinking off, as its resolver does. Bare stream
|
|
422
|
+
// infers an active level from model.reasoning and would undo that choice.
|
|
423
|
+
const events = streamSimple(
|
|
424
|
+
input.model,
|
|
425
|
+
context as unknown as Parameters<typeof streamSimple>[1],
|
|
426
|
+
options as unknown as Parameters<typeof streamSimple>[2],
|
|
427
|
+
);
|
|
428
|
+
for await (const event of events) {
|
|
429
|
+
// Some transports throw after yielding a partial response. Retain the
|
|
430
|
+
// last reported usage even without a terminal error message.
|
|
431
|
+
if ("partial" in event) {
|
|
432
|
+
usage = event.partial.usage ?? usage;
|
|
433
|
+
reported = retainReportedUsage(reported, usage);
|
|
434
|
+
}
|
|
435
|
+
if (event.type === "done") {
|
|
436
|
+
usage = event.message.usage ?? usage;
|
|
437
|
+
outcome = "success";
|
|
438
|
+
return { text: textFromAssistant(event.message).trim(), usage };
|
|
439
|
+
}
|
|
440
|
+
if (event.type === "error") {
|
|
441
|
+
usage = event.error.usage ?? usage;
|
|
442
|
+
reported = retainReportedUsage(reported, usage);
|
|
443
|
+
outcome = event.error.stopReason === "aborted" ? "aborted" : "error";
|
|
444
|
+
throw new Error(`compaction stream failed: ${event.error.errorMessage ?? "unknown error"}`);
|
|
445
|
+
}
|
|
403
446
|
}
|
|
447
|
+
throw new Error("compaction stream ended without a terminal response");
|
|
448
|
+
} finally {
|
|
449
|
+
input.onCall?.({
|
|
450
|
+
outcome: outcome === "error" && input.signal?.aborted ? "aborted" : outcome,
|
|
451
|
+
usage: outcome === "success" ? usage : reported,
|
|
452
|
+
timestamp,
|
|
453
|
+
durationMs: Math.max(0, performance.now() - started),
|
|
454
|
+
});
|
|
404
455
|
}
|
|
405
|
-
return { text: summary.trim(), usage };
|
|
406
456
|
}
|
|
407
457
|
|
|
408
458
|
/**
|
|
@@ -464,16 +514,16 @@ export async function compact(input: CompactInput): Promise<CompactResult> {
|
|
|
464
514
|
const userText = buildUserText(conversationText, input.instructions, previousContextText);
|
|
465
515
|
const historySummary = await runSummaryStream(input, userText, systemPrompt, maxTokens);
|
|
466
516
|
usage = addCompactionUsage(usage, historySummary.usage);
|
|
467
|
-
if (historySummary.text.length
|
|
517
|
+
if (historySummary.text.length === 0) throw new Error("compaction returned an empty history summary");
|
|
518
|
+
summaryParts.push(historySummary.text);
|
|
468
519
|
}
|
|
469
520
|
if (turnPrefix.length > 0) {
|
|
470
521
|
const conversationText = serializeConversation(turnPrefix);
|
|
471
522
|
const userText = buildTurnPrefixUserText(conversationText, input.instructions, previousContextText);
|
|
472
523
|
const prefixSummary = await runSummaryStream(input, userText, systemPrompt, maxTokens);
|
|
473
524
|
usage = addCompactionUsage(usage, prefixSummary.usage);
|
|
474
|
-
if (prefixSummary.text.length
|
|
475
|
-
|
|
476
|
-
}
|
|
525
|
+
if (prefixSummary.text.length === 0) throw new Error("compaction returned an empty split-turn summary");
|
|
526
|
+
summaryParts.push(`**Turn Context (split turn):**\n\n${prefixSummary.text}`);
|
|
477
527
|
}
|
|
478
528
|
|
|
479
529
|
const summary = `${summaryParts.join("\n\n---\n\n").trim()}${formatFileOperations(fileOps)}${formatRecallableRefs(
|
|
@@ -101,6 +101,10 @@ export type CompactionTrigger = "auto" | "force" | "overflow";
|
|
|
101
101
|
* `usage` carries and the ledger usage fold reads both from one place.
|
|
102
102
|
*/
|
|
103
103
|
export interface CompactionUsage {
|
|
104
|
+
/** Executing route; absent on legacy checkpoints that used the active chat model. */
|
|
105
|
+
targetId?: string;
|
|
106
|
+
/** Requested wire model ID, not a verified physical backend identity. */
|
|
107
|
+
modelId?: string;
|
|
104
108
|
input: number;
|
|
105
109
|
output: number;
|
|
106
110
|
cacheRead: number;
|
|
@@ -515,6 +519,8 @@ function isOptionalCompactionUsage(value: unknown): boolean {
|
|
|
515
519
|
if (!isRecord(value)) return false;
|
|
516
520
|
const cost = value.cost;
|
|
517
521
|
return (
|
|
522
|
+
isOptionalString(value.targetId) &&
|
|
523
|
+
isOptionalString(value.modelId) &&
|
|
518
524
|
isNumber(value.input) &&
|
|
519
525
|
isNumber(value.output) &&
|
|
520
526
|
isNumber(value.cacheRead) &&
|
|
@@ -101,9 +101,9 @@ export function ledgerUsageCalls(
|
|
|
101
101
|
const usage = entry.usage;
|
|
102
102
|
if (!usage || usage.totalTokens <= 0) continue;
|
|
103
103
|
calls.push({
|
|
104
|
-
providerId: currentTarget ?? "unknown",
|
|
105
|
-
attributedModelId: currentModel ?? "unknown",
|
|
106
|
-
requestedModelId: currentModel ?? "unknown",
|
|
104
|
+
providerId: usage.targetId ?? currentTarget ?? "unknown",
|
|
105
|
+
attributedModelId: usage.modelId ?? currentModel ?? "unknown",
|
|
106
|
+
requestedModelId: usage.modelId ?? currentModel ?? "unknown",
|
|
107
107
|
responseModelIdObservation: { state: "not-observed" },
|
|
108
108
|
input: usage.input,
|
|
109
109
|
output: usage.output,
|
package/src/engine/agent.ts
CHANGED
|
@@ -14,7 +14,11 @@ import { Agent, type AgentOptions, type StreamFn } from "@earendil-works/pi-agen
|
|
|
14
14
|
import { isDispositionedToolResultError } from "../tools/result-disposition.js";
|
|
15
15
|
import { engineStreamSimple } from "./api-registry.js";
|
|
16
16
|
|
|
17
|
-
export type EngineAgentOptions = Omit<AgentOptions, "streamFn"> & {
|
|
17
|
+
export type EngineAgentOptions = Omit<AgentOptions, "streamFn"> & {
|
|
18
|
+
streamFn?: StreamFn;
|
|
19
|
+
/** Called immediately before each native stream delegate invocation. */
|
|
20
|
+
onStreamInvocation?: () => void;
|
|
21
|
+
};
|
|
18
22
|
|
|
19
23
|
export interface EngineAgentHandle {
|
|
20
24
|
agent: Agent;
|
|
@@ -34,9 +38,15 @@ function dispositionAwareAfterToolCall(
|
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
export function createEngineAgent(options: EngineAgentOptions = {}): EngineAgentHandle {
|
|
41
|
+
const { streamFn = engineStreamSimple, onStreamInvocation, ...agentOptions } = options;
|
|
37
42
|
const agent = new Agent({
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
...agentOptions,
|
|
44
|
+
streamFn: onStreamInvocation
|
|
45
|
+
? (...args) => {
|
|
46
|
+
onStreamInvocation();
|
|
47
|
+
return streamFn(...args);
|
|
48
|
+
}
|
|
49
|
+
: streamFn,
|
|
40
50
|
afterToolCall: dispositionAwareAfterToolCall(options.afterToolCall),
|
|
41
51
|
});
|
|
42
52
|
return {
|
package/src/engine/ai.ts
CHANGED
|
@@ -59,6 +59,8 @@ export interface EngineTextCompletionInput {
|
|
|
59
59
|
signal: AbortSignal;
|
|
60
60
|
timeoutMs: number;
|
|
61
61
|
apiKey?: string;
|
|
62
|
+
/** Accounting only: observed before terminal errors throw, never carries response content. */
|
|
63
|
+
onUsage?: (observation: Pick<EngineTextCompletionResult, "usage" | "backend">) => void;
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
export interface EngineTextCompletionResult {
|
|
@@ -98,16 +100,11 @@ export async function completeEngineText(input: EngineTextCompletionInput): Prom
|
|
|
98
100
|
...(input.apiKey === undefined ? {} : { apiKey: input.apiKey }),
|
|
99
101
|
},
|
|
100
102
|
);
|
|
101
|
-
|
|
103
|
+
const failed = response.stopReason === "error" || response.stopReason === "aborted";
|
|
104
|
+
if (failed && !response.usage) {
|
|
102
105
|
throw new Error(response.errorMessage ?? `model completion ${response.stopReason}`);
|
|
103
106
|
}
|
|
104
|
-
|
|
105
|
-
text: response.content
|
|
106
|
-
.filter((block): block is Extract<(typeof response.content)[number], { type: "text" }> => block.type === "text")
|
|
107
|
-
.map((block) => block.text)
|
|
108
|
-
.join(""),
|
|
109
|
-
inputTokens: response.usage.input,
|
|
110
|
-
outputTokens: response.usage.output,
|
|
107
|
+
const observation: Pick<EngineTextCompletionResult, "usage" | "backend"> = {
|
|
111
108
|
usage: {
|
|
112
109
|
input: response.usage.input,
|
|
113
110
|
output: response.usage.output,
|
|
@@ -119,6 +116,27 @@ export async function completeEngineText(input: EngineTextCompletionInput): Prom
|
|
|
119
116
|
},
|
|
120
117
|
backend: response.backendTimings ?? null,
|
|
121
118
|
};
|
|
119
|
+
// Pi synthesizes all-zero usage for failures with no provider accounting.
|
|
120
|
+
// Do not turn that placeholder into a measured zero-spend call.
|
|
121
|
+
if (!failed || Object.values(observation.usage).some((value) => Number.isFinite(value) && value > 0)) {
|
|
122
|
+
try {
|
|
123
|
+
input.onUsage?.(observation);
|
|
124
|
+
} catch {
|
|
125
|
+
// Accounting observers cannot change completion success/error behavior.
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (failed) {
|
|
129
|
+
throw new Error(response.errorMessage ?? `model completion ${response.stopReason}`);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
text: response.content
|
|
133
|
+
.filter((block): block is Extract<(typeof response.content)[number], { type: "text" }> => block.type === "text")
|
|
134
|
+
.map((block) => block.text)
|
|
135
|
+
.join(""),
|
|
136
|
+
inputTokens: response.usage.input,
|
|
137
|
+
outputTokens: response.usage.output,
|
|
138
|
+
...observation,
|
|
139
|
+
};
|
|
122
140
|
}
|
|
123
141
|
|
|
124
142
|
export interface EngineAi {
|