@iowarp/clio-coder 0.4.1 → 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 +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- 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 +78 -64
- 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 +88 -65
- 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 +101 -52
- 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/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- 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 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- 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/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- 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/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- 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 +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -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/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -5
- 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/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- 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 +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- 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/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- 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/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- 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 +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- 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/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- 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/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- 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/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
|
@@ -24,7 +24,7 @@ export const SKILLS_REMINDER_REGISTRATION_ID = "observer.skills-reminder";
|
|
|
24
24
|
|
|
25
25
|
export { SKILL_SUGGESTION_ANCHOR };
|
|
26
26
|
|
|
27
|
-
export function skillsReminderMessage(installed: number, installable = 0): string {
|
|
27
|
+
export function skillsReminderMessage(installed: number, installable = 0, modelActivation = false): string {
|
|
28
28
|
// Unconditional imperative, deliberately: the skill-mastery batteries
|
|
29
29
|
// showed literal local models comply with "list and check" but never act
|
|
30
30
|
// on wording that first asks them to classify the task as skill-shaped.
|
|
@@ -37,6 +37,17 @@ export function skillsReminderMessage(installed: number, installable = 0): strin
|
|
|
37
37
|
// operator" as the whole job, spent a 40-second turn deliberating over the
|
|
38
38
|
// suggestion, and ended without one repository read. The suggestion is one
|
|
39
39
|
// line, the task continues in the same turn, and only the operator loads.
|
|
40
|
+
// At auto-edit and full-auto the model activates installed skills itself,
|
|
41
|
+
// so the reminder must not repeat "only the operator loads a skill": the
|
|
42
|
+
// literal models this line exists for act on it over the listing footer.
|
|
43
|
+
if (modelActivation) {
|
|
44
|
+
return (
|
|
45
|
+
`[Skills] ${counts}. Start this task by listing them with context(scope="skills") ` +
|
|
46
|
+
'and checking for a match; if one matches, load it with context(scope="skills", name="<name>") and ' +
|
|
47
|
+
"continue the task in the same turn. A marketplace skill is not installed and is offered for install " +
|
|
48
|
+
"when the operator runs it. If none match, do not mention skills and continue with the task."
|
|
49
|
+
);
|
|
50
|
+
}
|
|
40
51
|
return (
|
|
41
52
|
`[Skills] ${counts}. Start this task by listing them with context(scope="skills") ` +
|
|
42
53
|
"and checking for a match; if one matches, open your reply with the line " +
|
|
@@ -55,6 +66,12 @@ export interface SkillsReminderDeps {
|
|
|
55
66
|
* zero. Either count above zero arms the reminder.
|
|
56
67
|
*/
|
|
57
68
|
countInstallableSkills?(): number;
|
|
69
|
+
/**
|
|
70
|
+
* True when the session's autonomy level lets the model activate an
|
|
71
|
+
* installed skill itself. Absent reads as false, the operator-gated wording
|
|
72
|
+
* every surface taught before the level became the opt-in.
|
|
73
|
+
*/
|
|
74
|
+
modelMayActivateSkills?(): boolean;
|
|
58
75
|
}
|
|
59
76
|
|
|
60
77
|
const NO_EFFECTS: ReadonlyArray<MiddlewareEffect> = [];
|
|
@@ -211,7 +228,19 @@ export function createSkillsReminderRegistration(deps: SkillsReminderDeps): Midd
|
|
|
211
228
|
return NO_EFFECTS;
|
|
212
229
|
}
|
|
213
230
|
if (installed <= 0 && installable <= 0) return NO_EFFECTS;
|
|
214
|
-
|
|
231
|
+
let modelActivation = false;
|
|
232
|
+
try {
|
|
233
|
+
modelActivation = deps.modelMayActivateSkills?.() ?? false;
|
|
234
|
+
} catch {
|
|
235
|
+
// An unreadable autonomy level falls back to the operator-gated wording.
|
|
236
|
+
}
|
|
237
|
+
return [
|
|
238
|
+
{
|
|
239
|
+
kind: "inject_reminder",
|
|
240
|
+
severity: "info",
|
|
241
|
+
message: skillsReminderMessage(installed, installable, modelActivation),
|
|
242
|
+
},
|
|
243
|
+
];
|
|
215
244
|
},
|
|
216
245
|
};
|
|
217
246
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { createHookBudgetTracker, resolveHookBudgetsFromEnv, resolveHookBudgetTunablesFromEnv } from "./budget.js";
|
|
2
2
|
import type { MiddlewareContract } from "./contract.js";
|
|
3
|
+
import { createMiddlewareRegistrationTable } from "./registrations.js";
|
|
3
4
|
import { cloneMiddlewareRule, listMiddlewareRuleDefinitions, listMiddlewareRules } from "./rules.js";
|
|
4
5
|
import {
|
|
5
6
|
cloneMiddlewareEffect,
|
|
6
7
|
type MiddlewareDiagnosticSink,
|
|
7
|
-
type MiddlewareHookRegistration,
|
|
8
8
|
type MiddlewareRuleDefinition,
|
|
9
9
|
registrationFromRuleDefinition,
|
|
10
10
|
runMiddlewareRegistrations,
|
|
11
|
+
writeMiddlewareDiagnosticToStderr,
|
|
11
12
|
} from "./runtime.js";
|
|
12
13
|
import type { MiddlewareRule, MiddlewareSnapshot } from "./types.js";
|
|
13
14
|
|
|
@@ -39,15 +40,20 @@ export function createMiddlewareContractFromSnapshot(snapshot: MiddlewareSnapsho
|
|
|
39
40
|
if (builtin?.predicate !== undefined) definition.predicate = builtin.predicate;
|
|
40
41
|
return definition;
|
|
41
42
|
});
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
let diagnosticSink: MiddlewareDiagnosticSink | undefined;
|
|
44
|
+
// Workers never receive owned registrations; the table exists so the
|
|
45
|
+
// worker contract satisfies the same interface with the same semantics.
|
|
46
|
+
const table = createMiddlewareRegistrationTable({
|
|
47
|
+
fixed: definitions.map(registrationFromRuleDefinition),
|
|
48
|
+
diagnosticSink: () => diagnosticSink ?? writeMiddlewareDiagnosticToStderr,
|
|
49
|
+
});
|
|
44
50
|
const budgetTracker = createHookBudgetTracker({
|
|
45
51
|
budgets: resolveHookBudgetsFromEnv(),
|
|
46
52
|
...resolveHookBudgetTunablesFromEnv(),
|
|
47
53
|
});
|
|
48
|
-
let diagnosticSink: MiddlewareDiagnosticSink | undefined;
|
|
49
54
|
return {
|
|
50
55
|
runHook(input) {
|
|
56
|
+
const registrations = table.list();
|
|
51
57
|
return runMiddlewareRegistrations(input, registrations, {
|
|
52
58
|
budgetTracker,
|
|
53
59
|
...(diagnosticSink !== undefined ? { onDiagnostic: diagnosticSink } : {}),
|
|
@@ -60,12 +66,19 @@ export function createMiddlewareContractFromSnapshot(snapshot: MiddlewareSnapsho
|
|
|
60
66
|
return createMiddlewareSnapshot(definitions.map((definition) => definition.rule));
|
|
61
67
|
},
|
|
62
68
|
registerHook(registration) {
|
|
63
|
-
|
|
64
|
-
registeredIds.add(registration.id);
|
|
65
|
-
registrations.push(registration);
|
|
69
|
+
table.registerHook(registration);
|
|
66
70
|
},
|
|
67
71
|
setDiagnosticSink(sink) {
|
|
68
72
|
diagnosticSink = sink;
|
|
69
73
|
},
|
|
74
|
+
prepareRegistrationReplacement(owner, generation, registrations) {
|
|
75
|
+
return table.prepareReplacement(owner, generation, registrations);
|
|
76
|
+
},
|
|
77
|
+
replaceRegistrations(owner, generation, registrations) {
|
|
78
|
+
return table.replaceRegistrations(owner, generation, registrations);
|
|
79
|
+
},
|
|
80
|
+
ownedGeneration(owner) {
|
|
81
|
+
return table.ownedGeneration(owner);
|
|
82
|
+
},
|
|
70
83
|
};
|
|
71
84
|
}
|
|
@@ -119,6 +119,20 @@ export interface MuxContract extends DomainContract {
|
|
|
119
119
|
focusPane(paneId: string): Promise<boolean>;
|
|
120
120
|
/** Zoom one Clio-created pane on, off, or toggled. Zooming steals focus; same rule as focusPane. */
|
|
121
121
|
zoomPane(paneId: string, mode: "on" | "off" | "toggle"): Promise<boolean>;
|
|
122
|
+
/**
|
|
123
|
+
* Bring keyboard focus back to Clio's own hosting pane. This is the return
|
|
124
|
+
* half of every explicit pane interaction: a pick in the files pane, a
|
|
125
|
+
* toggle that closed a pane the operator was looking at. False outside
|
|
126
|
+
* guest mode, without an anchor pane, or below the pane.focus floor.
|
|
127
|
+
*/
|
|
128
|
+
focusSelf(): Promise<boolean>;
|
|
129
|
+
/**
|
|
130
|
+
* Leave zoom on the tab that hosts Clio, so a dock split from the anchor is
|
|
131
|
+
* visible again. A zoomed tab hides every pane but one; opening or focusing
|
|
132
|
+
* the files pane behind a zoom would report success for a pane the operator
|
|
133
|
+
* cannot see. False when nothing was zoomed or the tier is absent.
|
|
134
|
+
*/
|
|
135
|
+
unzoomSelf(): Promise<boolean>;
|
|
122
136
|
/** Set a dock's share of its axis. False when the slot has no dock or the tier is absent. */
|
|
123
137
|
resizeDock(slot: DockSlot, share: number): Promise<boolean>;
|
|
124
138
|
/** Live dock geometry states, for `/panes` status. */
|
|
@@ -425,6 +439,30 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
425
439
|
);
|
|
426
440
|
},
|
|
427
441
|
|
|
442
|
+
async focusSelf(): Promise<boolean> {
|
|
443
|
+
if (anchorPaneId === null || !muxSupportsMethod(detection.server, "pane.focus")) return false;
|
|
444
|
+
return await attempt(
|
|
445
|
+
"focusSelf",
|
|
446
|
+
async (live) => {
|
|
447
|
+
await live.paneFocus(anchorPaneId);
|
|
448
|
+
return true;
|
|
449
|
+
},
|
|
450
|
+
false,
|
|
451
|
+
);
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
async unzoomSelf(): Promise<boolean> {
|
|
455
|
+
if (anchorPaneId === null || !muxSupportsMethod(detection.server, "pane.zoom")) return false;
|
|
456
|
+
return await attempt(
|
|
457
|
+
"unzoomSelf",
|
|
458
|
+
async (live) => {
|
|
459
|
+
const result = await live.paneZoom(anchorPaneId, "off");
|
|
460
|
+
return result.changed;
|
|
461
|
+
},
|
|
462
|
+
false,
|
|
463
|
+
);
|
|
464
|
+
},
|
|
465
|
+
|
|
428
466
|
async resizeDock(slot: DockSlot, share: number): Promise<boolean> {
|
|
429
467
|
if (!docks) return false;
|
|
430
468
|
return await attempt("resizeDock", () => docks.resize(slot, share), false);
|
|
@@ -126,19 +126,12 @@ export async function detectMux(options: DetectMuxOptions = {}): Promise<MuxDete
|
|
|
126
126
|
return { detection: none("panes are turned off"), client: null };
|
|
127
127
|
}
|
|
128
128
|
if (enabled === "embedded") {
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
detection: none(
|
|
136
|
-
"embedded mode is not implemented yet; it ships in phase 5, so this session has no panes at all. Set panes.enabled=auto for guest mode inside a herdr session.",
|
|
137
|
-
[],
|
|
138
|
-
true,
|
|
139
|
-
),
|
|
140
|
-
client: null,
|
|
141
|
-
};
|
|
129
|
+
// Embedded mode (Clio owning the pane host) is not implemented yet. An
|
|
130
|
+
// operator who picked it wanted panes, so the rung degrades to guest
|
|
131
|
+
// detection instead of refusing everything; the notice below says which
|
|
132
|
+
// mode actually runs. When the guest ladder also fails, that failure is
|
|
133
|
+
// reported on its own terms.
|
|
134
|
+
log("info", "interface.panes.enabled=embedded is not implemented yet; detecting a guest pane host instead");
|
|
142
135
|
}
|
|
143
136
|
if (env.HERDR_ENV !== "1") {
|
|
144
137
|
return { detection: none("HERDR_ENV is not 1, so Clio is not running inside a pane host"), client: null };
|
package/src/domains/mux/index.ts
CHANGED
|
@@ -14,13 +14,19 @@
|
|
|
14
14
|
* shell-escape territory (spec 4.8, and the risk register's "tool misuse" row).
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Utility pane presets, in the order `/panes open` lists them.
|
|
19
|
+
*
|
|
20
|
+
* The files preset is a Clio Coder surface named for what it does; yazi is
|
|
21
|
+
* the engine behind it and shows up only in the install command, because
|
|
22
|
+
* that is the registry id an operator types.
|
|
23
|
+
*/
|
|
18
24
|
export const PANES_PRESETS = [
|
|
19
25
|
{
|
|
20
|
-
id: "
|
|
26
|
+
id: "files",
|
|
21
27
|
/** Probed through the toolchain resolution ladder before the pane is split. */
|
|
22
28
|
binary: "yazi",
|
|
23
|
-
summary: "file
|
|
29
|
+
summary: "file view rooted at the workspace; picks land in the composer",
|
|
24
30
|
/** Printed verbatim when the probe finds nothing. */
|
|
25
31
|
installHint: "clio-coder tools install yazi",
|
|
26
32
|
},
|
|
@@ -42,10 +48,23 @@ export type PanesPresetId = (typeof PANES_PRESETS)[number]["id"];
|
|
|
42
48
|
|
|
43
49
|
export const PANES_PRESET_IDS: ReadonlyArray<PanesPresetId> = PANES_PRESETS.map((preset) => preset.id);
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
function isPanesPresetId(value: string): value is PanesPresetId {
|
|
46
52
|
return PANES_PRESETS.some((preset) => preset.id === value);
|
|
47
53
|
}
|
|
48
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Retired preset spellings that still parse. The files preset shipped as
|
|
57
|
+
* `yazi` in 0.4.0 and 0.4.1, so an operator's muscle memory and any script
|
|
58
|
+
* that says `/panes open yazi` keeps working and lands on the same pane.
|
|
59
|
+
*/
|
|
60
|
+
export const PANES_PRESET_ALIASES: Readonly<Record<string, PanesPresetId>> = { yazi: "files" };
|
|
61
|
+
|
|
62
|
+
/** The canonical preset id for an operator-typed name, or null when it is not a preset. */
|
|
63
|
+
export function resolvePanesPresetId(value: string): PanesPresetId | null {
|
|
64
|
+
if (isPanesPresetId(value)) return value;
|
|
65
|
+
return PANES_PRESET_ALIASES[value] ?? null;
|
|
66
|
+
}
|
|
67
|
+
|
|
49
68
|
/** One pane Clio owns, flattened for display. */
|
|
50
69
|
export interface PanesInventoryEntry {
|
|
51
70
|
paneId: string;
|
|
@@ -135,7 +154,8 @@ export interface PanesWatchController {
|
|
|
135
154
|
}
|
|
136
155
|
|
|
137
156
|
export type PanesOpenResult =
|
|
138
|
-
|
|
157
|
+
/** `existing` is true when the preset already had a live pane and it was focused instead of split again. */
|
|
158
|
+
| { status: "opened"; label: string; paneId: string | null; existing?: boolean }
|
|
139
159
|
| { status: "missing-binary"; preset: string; binary: string; installHint: string; detail: string }
|
|
140
160
|
| { status: "refused"; reason: string }
|
|
141
161
|
| { status: "unavailable"; reason: string };
|
|
@@ -166,9 +186,21 @@ export interface PanesYaziController {
|
|
|
166
186
|
| { status: "profile-error"; reason: string }
|
|
167
187
|
| { status: "unavailable"; reason: string }
|
|
168
188
|
>;
|
|
189
|
+
/** Close the files pane if it is open; false when nothing was open. */
|
|
190
|
+
close(): Promise<boolean>;
|
|
191
|
+
/** True while a files pane the host still reports is open. */
|
|
192
|
+
isOpen(): boolean;
|
|
169
193
|
status(): Readonly<PanesYaziStatus>;
|
|
170
194
|
}
|
|
171
195
|
|
|
196
|
+
/** What `/files` and the files keybinding settle to. */
|
|
197
|
+
export type PanesFilesResult =
|
|
198
|
+
| { status: "opened"; paneId: string | null; existing: boolean }
|
|
199
|
+
| { status: "closed" }
|
|
200
|
+
| { status: "missing-binary"; binary: string; installHint: string; detail: string }
|
|
201
|
+
| { status: "refused"; reason: string }
|
|
202
|
+
| { status: "unavailable"; reason: string };
|
|
203
|
+
|
|
172
204
|
/**
|
|
173
205
|
* The operations both callers drive. The tool sees a narrower door: its schema
|
|
174
206
|
* has no argv field at all, and `open` refuses one even if a caller fabricates
|
|
@@ -185,6 +217,13 @@ export interface PanesOperations {
|
|
|
185
217
|
*/
|
|
186
218
|
zoom(target: string): Promise<PanesZoomResult>;
|
|
187
219
|
close(target: string): Promise<PanesCloseResult>;
|
|
220
|
+
/**
|
|
221
|
+
* The files pane as one operator verb. `toggle` opens it when closed and
|
|
222
|
+
* closes it when open, which is what a keybinding needs; `open` and
|
|
223
|
+
* `close` are the explicit halves; `pick` borrows the pane for one
|
|
224
|
+
* selection and closes it afterwards.
|
|
225
|
+
*/
|
|
226
|
+
files(action: "toggle" | "open" | "close" | "pick"): Promise<PanesFilesResult>;
|
|
188
227
|
/** Bind the composer-facing Yazi bridge without rebuilding this shared object. */
|
|
189
228
|
attachYazi(controller: PanesYaziController): () => void;
|
|
190
229
|
/** Bind the workers-view watch controller; `show` routes runs through it. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { namingCompatibilityEnvironment } from "../../../core/naming-compat.js";
|
|
6
6
|
import { clioCacheDir } from "../../../core/xdg.js";
|
|
@@ -107,6 +107,37 @@ function readOptional(path: string): string {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
/** Transport files older than this are leftovers of a process that never reached its cleanup. */
|
|
111
|
+
export const YAZI_STALE_TRANSPORT_MS = 24 * 60 * 60 * 1000;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Drop transport files no live session can own. A crash, a kill, or a
|
|
115
|
+
* release before cleanup existed leaves `.stream`, `.chooser`, and `.cwd`
|
|
116
|
+
* files behind; a day is long past any pane's life, so anything older goes.
|
|
117
|
+
*/
|
|
118
|
+
export function sweepStaleTransportFiles(sessionsDir: string, now: number = Date.now()): number {
|
|
119
|
+
let removed = 0;
|
|
120
|
+
let entries: string[];
|
|
121
|
+
try {
|
|
122
|
+
entries = readdirSync(sessionsDir);
|
|
123
|
+
} catch {
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
for (const name of entries) {
|
|
127
|
+
if (!/\.(stream|chooser|cwd)$/u.test(name)) continue;
|
|
128
|
+
const path = join(sessionsDir, name);
|
|
129
|
+
try {
|
|
130
|
+
if (now - statSync(path).mtimeMs > YAZI_STALE_TRANSPORT_MS) {
|
|
131
|
+
rmSync(path, { force: true });
|
|
132
|
+
removed += 1;
|
|
133
|
+
}
|
|
134
|
+
} catch {
|
|
135
|
+
// A file that vanished between readdir and stat was someone else's to remove.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return removed;
|
|
139
|
+
}
|
|
140
|
+
|
|
110
141
|
/** Open one mux-hosted Yazi process and own its DDS or chooser-file transport. */
|
|
111
142
|
export async function createYaziSession(options: YaziSessionOptions): Promise<YaziSessionOpenResult> {
|
|
112
143
|
const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
|
|
@@ -125,6 +156,7 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
|
|
|
125
156
|
const sessionId = options.sessionId ?? randomUUID();
|
|
126
157
|
const sessionsDir = join(cacheDir, "yazi", "sessions");
|
|
127
158
|
mkdirSync(sessionsDir, { recursive: true });
|
|
159
|
+
sweepStaleTransportFiles(sessionsDir);
|
|
128
160
|
const managedProfile =
|
|
129
161
|
options.profileMode === "managed"
|
|
130
162
|
? (options.ensureProfile ?? ensureYaziProfile)({
|
|
@@ -163,10 +195,19 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
|
|
|
163
195
|
argv = [binaries.yaziPath, options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath];
|
|
164
196
|
}
|
|
165
197
|
|
|
198
|
+
// Transport files are per session and worthless once it ends: a pick has
|
|
199
|
+
// already been consumed by the bridge, and a chooser file has been read.
|
|
200
|
+
// Removing them here is what keeps `<cache>/yazi/sessions` from growing by
|
|
201
|
+
// three files per open for the life of the install.
|
|
202
|
+
const removeTransportFiles = (): void => {
|
|
203
|
+
for (const path of [streamPath, chooserPath, cwdPath]) rmSync(path, { force: true });
|
|
204
|
+
};
|
|
205
|
+
|
|
166
206
|
const pane = await options.mux.openUtilityPane({
|
|
167
207
|
argv,
|
|
168
208
|
cwd: options.cwd,
|
|
169
|
-
label: "
|
|
209
|
+
label: "files",
|
|
210
|
+
title: "files",
|
|
170
211
|
// The files dock: split down from the anchor at the configured share.
|
|
171
212
|
// Degrades to a plain split inside the contract when the layout tier is
|
|
172
213
|
// absent.
|
|
@@ -174,7 +215,10 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
|
|
|
174
215
|
...(Object.keys(env).length > 0 ? { env } : {}),
|
|
175
216
|
...(stdoutPath ? { stdoutPath } : {}),
|
|
176
217
|
});
|
|
177
|
-
if (!pane)
|
|
218
|
+
if (!pane) {
|
|
219
|
+
removeTransportFiles();
|
|
220
|
+
return { status: "unavailable", reason: "the pane host refused to open the files pane" };
|
|
221
|
+
}
|
|
178
222
|
|
|
179
223
|
let paneCwd = options.cwd;
|
|
180
224
|
let instanceId: string | null = null;
|
|
@@ -188,6 +232,7 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
|
|
|
188
232
|
if (chooserTimer) clearInterval(chooserTimer);
|
|
189
233
|
chooserTimer = null;
|
|
190
234
|
options.onStopped?.(reason);
|
|
235
|
+
removeTransportFiles();
|
|
191
236
|
};
|
|
192
237
|
|
|
193
238
|
if (options.mode === "companion") {
|
|
@@ -204,7 +249,11 @@ export async function createYaziSession(options: YaziSessionOptions): Promise<Ya
|
|
|
204
249
|
options.onEvent(event);
|
|
205
250
|
},
|
|
206
251
|
});
|
|
207
|
-
void stream.done.then((reason) =>
|
|
252
|
+
void stream.done.then((reason) => {
|
|
253
|
+
// A stream that ended on its own means the pane is gone or the file
|
|
254
|
+
// was lost; either way the session is over and says so.
|
|
255
|
+
stop(reason);
|
|
256
|
+
});
|
|
208
257
|
} else {
|
|
209
258
|
const pollChooser = (): void => {
|
|
210
259
|
if (stopped || alive()) return;
|
|
@@ -1,30 +1,130 @@
|
|
|
1
1
|
import { tokenHex } from "../../../core/theme-token-hex.js";
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Render the Clio overlay on Yazi's pinned preset theme.
|
|
5
|
+
*
|
|
6
|
+
* Every color comes from Clio's own token palette (`core/theme-token-hex.ts`),
|
|
7
|
+
* read when the managed profile is generated, which happens on the open that
|
|
8
|
+
* finds no current profile. The profile stamp carries this file's output hash,
|
|
9
|
+
* so a palette change regenerates the profile on the next open rather than
|
|
10
|
+
* leaving a pane in last release's colors. Only keys Yazi 26.8 documents are
|
|
11
|
+
* set; the rest of the preset stays, because a wrong key here is rejected by
|
|
12
|
+
* the validation open in `profile.ts` and would leave the operator with no
|
|
13
|
+
* files pane at all.
|
|
14
|
+
*/
|
|
4
15
|
export function renderYaziTheme(): string {
|
|
5
|
-
|
|
16
|
+
const accent = tokenHex("accent");
|
|
17
|
+
const action = tokenHex("action");
|
|
18
|
+
const success = tokenHex("success");
|
|
19
|
+
const warning = tokenHex("warning");
|
|
20
|
+
const error = tokenHex("error");
|
|
21
|
+
const info = tokenHex("info");
|
|
22
|
+
const dim = tokenHex("dim");
|
|
23
|
+
const muted = tokenHex("muted");
|
|
24
|
+
const frame = tokenHex("frame");
|
|
25
|
+
const frameStrong = tokenHex("frameStrong");
|
|
26
|
+
return `# Generated by Clio Coder from its theme tokens. Changes are replaced when the managed profile regenerates.
|
|
6
27
|
|
|
7
28
|
[mgr]
|
|
8
|
-
cwd = { fg = "${
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
29
|
+
cwd = { fg = "${accent}" }
|
|
30
|
+
hovered = { reversed = true }
|
|
31
|
+
preview_hovered = { underline = true }
|
|
32
|
+
find_keyword = { fg = "${warning}", bold = true }
|
|
33
|
+
find_position = { fg = "${action}", italic = true }
|
|
34
|
+
marker_selected = { fg = "${success}", bg = "${success}" }
|
|
35
|
+
marker_copied = { fg = "${accent}", bg = "${accent}" }
|
|
36
|
+
marker_cut = { fg = "${error}", bg = "${error}" }
|
|
37
|
+
marker_marked = { fg = "${info}", bg = "${info}" }
|
|
38
|
+
count_copied = { fg = "${accent}", bg = "${frame}" }
|
|
39
|
+
count_cut = { fg = "${error}", bg = "${frame}" }
|
|
40
|
+
count_selected = { fg = "${success}", bg = "${frame}" }
|
|
41
|
+
border_style = { fg = "${frame}" }
|
|
42
|
+
syntect_theme = ""
|
|
14
43
|
|
|
15
44
|
[mode]
|
|
16
|
-
normal_main = { bg = "${
|
|
17
|
-
normal_alt = { fg = "${
|
|
18
|
-
select_main = { bg = "${
|
|
19
|
-
select_alt = { fg = "${
|
|
20
|
-
unset_main = { bg = "${
|
|
21
|
-
unset_alt = { fg = "${
|
|
45
|
+
normal_main = { bg = "${accent}", bold = true }
|
|
46
|
+
normal_alt = { fg = "${accent}" }
|
|
47
|
+
select_main = { bg = "${action}", bold = true }
|
|
48
|
+
select_alt = { fg = "${action}" }
|
|
49
|
+
unset_main = { bg = "${error}", bold = true }
|
|
50
|
+
unset_alt = { fg = "${error}" }
|
|
22
51
|
|
|
23
52
|
[tabs]
|
|
24
|
-
active = { bg = "${
|
|
25
|
-
inactive = { fg = "${
|
|
53
|
+
active = { bg = "${accent}", bold = true }
|
|
54
|
+
inactive = { fg = "${accent}" }
|
|
26
55
|
|
|
27
56
|
[status]
|
|
28
|
-
|
|
57
|
+
perm_type = { fg = "${accent}" }
|
|
58
|
+
perm_read = { fg = "${warning}" }
|
|
59
|
+
perm_write = { fg = "${error}" }
|
|
60
|
+
perm_exec = { fg = "${success}" }
|
|
61
|
+
perm_sep = { fg = "${dim}" }
|
|
62
|
+
progress_label = { bold = true }
|
|
63
|
+
progress_normal = { fg = "${accent}" }
|
|
64
|
+
progress_error = { fg = "${error}" }
|
|
65
|
+
|
|
66
|
+
[which]
|
|
67
|
+
cols = 3
|
|
68
|
+
mask = { bg = "${frame}" }
|
|
69
|
+
cand = { fg = "${accent}" }
|
|
70
|
+
rest = { fg = "${muted}" }
|
|
71
|
+
desc = { fg = "${action}" }
|
|
72
|
+
separator_style = { fg = "${dim}" }
|
|
73
|
+
|
|
74
|
+
[confirm]
|
|
75
|
+
border = { fg = "${frameStrong}" }
|
|
76
|
+
title = { fg = "${accent}" }
|
|
77
|
+
btn_yes = { reversed = true }
|
|
78
|
+
btn_no = {}
|
|
79
|
+
|
|
80
|
+
[pick]
|
|
81
|
+
border = { fg = "${frameStrong}" }
|
|
82
|
+
active = { fg = "${action}", bold = true }
|
|
83
|
+
|
|
84
|
+
[input]
|
|
85
|
+
border = { fg = "${frameStrong}" }
|
|
86
|
+
title = { fg = "${accent}" }
|
|
87
|
+
selected = { reversed = true }
|
|
88
|
+
|
|
89
|
+
[cmp]
|
|
90
|
+
border = { fg = "${frameStrong}" }
|
|
91
|
+
active = { reversed = true }
|
|
92
|
+
|
|
93
|
+
[tasks]
|
|
94
|
+
border = { fg = "${frameStrong}" }
|
|
95
|
+
title = { fg = "${accent}" }
|
|
96
|
+
hovered = { fg = "${action}", underline = true }
|
|
97
|
+
|
|
98
|
+
[help]
|
|
99
|
+
on = { fg = "${accent}" }
|
|
100
|
+
run = { fg = "${action}" }
|
|
101
|
+
footer = { fg = "${muted}" }
|
|
102
|
+
|
|
103
|
+
[notify]
|
|
104
|
+
title_info = { fg = "${info}" }
|
|
105
|
+
title_warn = { fg = "${warning}" }
|
|
106
|
+
title_error = { fg = "${error}" }
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The same palette as a herdr `[theme.custom]` block.
|
|
112
|
+
*
|
|
113
|
+
* herdr themes its chrome (sidebar, tab bar, borders, agent rows) from its own
|
|
114
|
+
* config.toml and has no per-pane styling on the wire, so Clio cannot color
|
|
115
|
+
* the panes it opens. What it can do is hand the operator the block that makes
|
|
116
|
+
* herdr's chrome match Clio, to paste into herdr's config; Clio never writes
|
|
117
|
+
* another program's configuration itself.
|
|
118
|
+
*/
|
|
119
|
+
export function renderHerdrThemeBlock(): string {
|
|
120
|
+
return `# Clio Coder theme tokens for herdr. Paste into ~/.config/herdr/config.toml, then run \`herdr server reload-config\`.
|
|
121
|
+
[theme.custom]
|
|
122
|
+
accent = "${tokenHex("accent")}"
|
|
123
|
+
green = "${tokenHex("success")}"
|
|
124
|
+
blue = "${tokenHex("info")}"
|
|
125
|
+
red = "${tokenHex("error")}"
|
|
126
|
+
yellow = "${tokenHex("warning")}"
|
|
127
|
+
selection_bg = "${tokenHex("frame")}"
|
|
128
|
+
active_row_bg = "${tokenHex("frame")}"
|
|
29
129
|
`;
|
|
30
130
|
}
|