@iowarp/clio-coder 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +283 -0
- package/CHANGELOG.md +50 -0
- package/CONTRIBUTING.md +102 -29
- package/NOTICE +8 -0
- package/README.md +37 -5
- package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
- package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
- package/dist/assets/codewiki.json +1 -1
- package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
- package/dist/assets/tui-notices/marked-LICENSE +44 -0
- package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
- package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
- package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
- package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
- package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
- package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
- package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
- package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
- package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
- package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
- package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
- package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
- package/dist/chunk-4UHVS5T7.js +207 -0
- package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
- package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
- package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
- package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
- package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
- package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
- package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
- package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
- package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
- package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
- package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
- package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
- package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
- package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
- package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
- package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
- package/dist/chunk-CP3HIR5H.js +2119 -0
- package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
- package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
- package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
- package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
- package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
- package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
- package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
- package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
- package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
- package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
- package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
- package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
- package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
- package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
- package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
- package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
- package/dist/chunk-HRAKUPIH.js +57 -0
- package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
- package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
- package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
- package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
- package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
- package/dist/chunk-KKEYGFX4.js +915 -0
- package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
- package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
- package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
- package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
- package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
- package/dist/chunk-MNQN3X6Y.js +595 -0
- package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
- package/dist/chunk-MZNWZUJM.js +1801 -0
- package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
- package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
- package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
- package/dist/chunk-OH3YYA3B.js +15 -0
- package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
- package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
- package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
- package/dist/chunk-RFCKPS2V.js +26 -0
- package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
- package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
- package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
- package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
- package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
- package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
- package/dist/chunk-T7QQBNLH.js +691 -0
- package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
- package/dist/chunk-TZ6UVP2H.js +637 -0
- package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
- package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
- package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
- package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
- package/dist/chunk-UWD3JD5X.js +709 -0
- package/dist/chunk-V4ZKOKRB.js +13433 -0
- package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
- package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
- package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
- package/dist/chunk-WB7POC6M.js +891 -0
- package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
- package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
- package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
- package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
- package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
- package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
- package/dist/chunk-XW2UZICE.js +372 -0
- package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
- package/dist/chunk-Y3JU5RPK.js +8 -0
- package/dist/chunk-YKRJTYNP.js +1143 -0
- package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
- package/dist/cli/index.js +34 -36
- package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
- package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
- package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
- package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
- package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
- package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
- package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
- package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
- package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
- package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
- package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
- package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
- package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
- package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
- package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
- package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
- package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
- package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
- package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
- package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
- package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
- package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
- package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
- package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
- package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
- package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
- package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
- package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
- package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
- package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
- package/dist/interop-FVECHFKG.js +246 -0
- package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
- package/dist/library-NY2XOT75.js +492 -0
- package/dist/library-QAPAO23R.js +306 -0
- package/dist/library-import-5Y6MAS3R.js +183 -0
- package/dist/library-inventory-JT6HWITQ.js +56 -0
- package/dist/library-validation-EQUH25DC.js +42 -0
- package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
- package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
- package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
- package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
- package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
- package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
- package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
- package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
- package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
- package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
- package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
- package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
- package/dist/skills-BTVVNYVM.js +100 -0
- package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
- package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
- package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
- package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
- package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
- package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
- package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
- package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
- package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
- package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
- package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
- package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
- package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
- package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
- package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
- package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
- package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
- package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
- package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
- package/dist/worker/entry.js +283 -76
- package/docs/README.md +43 -0
- package/docs/architecture/architecture.md +8 -7
- package/docs/architecture/artifact-versions.md +3 -3
- package/docs/architecture/context-engine.md +35 -1
- package/docs/architecture/library.md +32 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -1
- package/docs/architecture/pi-boundary.md +18 -0
- package/docs/architecture/prompt-envelope-and-tools.md +5 -5
- package/docs/architecture/safety-model.md +21 -2
- package/docs/architecture/session-lifecycle.md +12 -1
- package/docs/architecture/tui-design.md +108 -9
- package/docs/architecture/worker-context.md +106 -0
- package/docs/guide/authoring-plugins.md +160 -0
- package/docs/guide/built-in-agents.md +5 -5
- package/docs/guide/commands-and-modes.md +161 -56
- package/docs/guide/configuration-and-targets.md +1 -1
- package/docs/guide/configuration-reference.md +27 -34
- package/docs/guide/environment-variables.md +2 -2
- package/docs/guide/exit-codes-and-output.md +1 -1
- package/docs/guide/extensions-and-sharing.md +93 -53
- package/docs/guide/fleet-dispatch.md +31 -4
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/harness-extensions.md +291 -0
- package/docs/guide/installation-and-lifecycle.md +9 -9
- package/docs/guide/interop.md +243 -0
- package/docs/guide/panes-and-files.md +3 -3
- package/docs/guide/plugins.md +80 -0
- package/docs/guide/resource-library.md +111 -45
- package/docs/guide/skills-marketplace.md +35 -72
- package/docs/guide/tool-usage.md +19 -7
- package/docs/guide/troubleshooting.md +1 -1
- package/docs/process/development-pipeline.md +14 -14
- package/docs/process/documentation-coverage.md +28 -1
- package/docs/process/documentation-guide.md +15 -7
- package/docs/process/eval-runner.md +8 -3
- package/docs/process/performance-methodology.md +1 -1
- package/docs/process/release-cut-checklist.md +4 -0
- package/docs/process/scientific-validation.md +23 -0
- package/evals/scalar-decision-machinery.ts +1 -1
- package/examples/extensions/README.md +67 -0
- package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
- package/examples/extensions/lab-status/extension.mjs +68 -0
- package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
- package/examples/extensions/measurements/clio-coder-extension.json +28 -0
- package/examples/extensions/measurements/summarize.cjs +23 -0
- package/library/README.md +109 -0
- package/library/_authoring/templates/agent/README.md +28 -0
- package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
- package/library/_authoring/templates/agent/plugin.json +23 -0
- package/library/_authoring/templates/fleet/README.md +29 -0
- package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
- package/library/_authoring/templates/fleet/plugin.json +23 -0
- package/library/_authoring/templates/plugin/README.md +37 -0
- package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
- package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
- package/library/_authoring/templates/plugin/plugin.json +42 -0
- package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
- package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
- package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
- package/library/_authoring/templates/prompt/README.md +28 -0
- package/library/_authoring/templates/prompt/plugin.json +23 -0
- package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
- package/library/_authoring/templates/skill/README.md +24 -0
- package/library/_authoring/templates/skill/SKILL.md +39 -0
- package/library/_authoring/templates/skill/evals.md +30 -0
- package/library/_authoring/templates/skill/plugin.json +23 -0
- package/library/agents/README.md +7 -0
- package/library/fleets/README.md +7 -0
- package/library/plugins/materio/README.md +137 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
- package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
- package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
- package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
- package/library/plugins/materio/assets/actions/add-task.md +86 -0
- package/library/plugins/materio/assets/actions/archive-task.md +84 -0
- package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
- package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
- package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
- package/library/plugins/materio/assets/actions/execute-task.md +290 -0
- package/library/plugins/materio/assets/actions/help.md +140 -0
- package/library/plugins/materio/assets/actions/identify-research.md +204 -0
- package/library/plugins/materio/assets/actions/literature-review.md +199 -0
- package/library/plugins/materio/assets/actions/pause-research.md +34 -0
- package/library/plugins/materio/assets/actions/progress.md +125 -0
- package/library/plugins/materio/assets/actions/remove-task.md +82 -0
- package/library/plugins/materio/assets/actions/resume-research.md +84 -0
- package/library/plugins/materio/assets/actions/settings.md +38 -0
- package/library/plugins/materio/assets/actions/status.md +112 -0
- package/library/plugins/materio/assets/actions/upload-data.md +123 -0
- package/library/plugins/materio/assets/actions/wtfp.md +179 -0
- package/library/plugins/materio/assets/references/research-domains.md +134 -0
- package/library/plugins/materio/assets/references/research-policy.md +77 -0
- package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
- package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
- package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
- package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
- package/library/plugins/materio/assets/scripts/research_state.py +400 -0
- package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
- package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
- package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
- package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
- package/library/plugins/materio/assets/templates/config.json +5 -0
- package/library/plugins/materio/evals/scripts.yaml +29 -0
- package/library/plugins/materio/plugin.json +530 -0
- package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
- package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
- package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
- package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
- package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
- package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
- package/library/plugins/materio/tests/test_check_physics.py +139 -0
- package/library/plugins/materio/tests/test_check_scripts.py +140 -0
- package/library/plugins/materio/tests/test_research_state.py +291 -0
- package/library/plugins/materio/tests/test_verify_citations.py +337 -0
- package/library/prompts/README.md +7 -0
- package/library/registry.yaml +921 -0
- package/library/skills/README.md +120 -0
- package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
- package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
- package/library/skills/coding/ast-grep/plugin.json +23 -0
- package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
- package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
- package/library/skills/coding/coding-standards/plugin.json +23 -0
- package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
- package/{skills → library/skills}/coding/prototype/evals.md +1 -1
- package/library/skills/coding/prototype/plugin.json +23 -0
- package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
- package/{skills → library/skills}/coding/tdd/evals.md +1 -1
- package/library/skills/coding/tdd/plugin.json +23 -0
- package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
- package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
- package/library/skills/context/context-handoff/plugin.json +23 -0
- package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
- package/{skills → library/skills}/context/context-prime/evals.md +1 -1
- package/library/skills/context/context-prime/plugin.json +23 -0
- package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
- package/library/skills/git/branch-closeout/plugin.json +23 -0
- package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
- package/library/skills/git/file-ticket/plugin.json +23 -0
- package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
- package/library/skills/git/fix-issue/plugin.json +23 -0
- package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
- package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
- package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
- package/{skills → library/skills}/git/ship/SKILL.md +1 -1
- package/library/skills/git/ship/plugin.json +23 -0
- package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
- package/library/skills/git/worktree-create/plugin.json +23 -0
- package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
- package/library/skills/git/worktree-merge/plugin.json +23 -0
- package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
- package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
- package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
- package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
- package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
- package/library/skills/meta/clio-coder-test/plugin.json +23 -0
- package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
- package/{skills → library/skills}/meta/credentials/evals.md +1 -1
- package/library/skills/meta/credentials/plugin.json +23 -0
- package/library/skills/meta/find-skills/SKILL.md +85 -0
- package/library/skills/meta/find-skills/evals.md +65 -0
- package/library/skills/meta/find-skills/plugin.json +23 -0
- package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
- package/{skills → library/skills}/meta/herdr/evals.md +1 -1
- package/library/skills/meta/herdr/plugin.json +23 -0
- package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
- package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
- package/library/skills/meta/skill-craft/plugin.json +23 -0
- package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
- package/library/skills/planning/archify/plugin.json +23 -0
- package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
- package/{skills → library/skills}/planning/architecture/evals.md +1 -1
- package/library/skills/planning/architecture/plugin.json +23 -0
- package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
- package/{skills → library/skills}/planning/backlog/evals.md +1 -1
- package/library/skills/planning/backlog/plugin.json +23 -0
- package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
- package/{skills → library/skills}/planning/prd/evals.md +1 -1
- package/library/skills/planning/prd/plugin.json +23 -0
- package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
- package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
- package/library/skills/planning/product-intent/plugin.json +23 -0
- package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
- package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
- package/library/skills/planning/tech-spec/plugin.json +23 -0
- package/{skills → library/skills}/registry.yaml +7 -7
- package/{skills → library/skills}/remote.yaml +1 -1
- package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
- package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
- package/library/skills/research/arxiv-literature/plugin.json +23 -0
- package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
- package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
- package/library/skills/research/experiment-protocol/plugin.json +23 -0
- package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
- package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
- package/library/skills/research/scientific-debugging/plugin.json +23 -0
- package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
- package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
- package/library/skills/research/scientific-modernization/plugin.json +23 -0
- package/{skills → library/skills}/skill-marketplace.json +37 -37
- package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
- package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
- package/library/skills/workflow/cut-it/plugin.json +23 -0
- package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
- package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
- package/library/skills/workflow/design-council/plugin.json +23 -0
- package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
- package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
- package/library/skills/workflow/grill-me/plugin.json +23 -0
- package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
- package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
- package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
- package/package.json +12 -5
- package/src/cli/agents.ts +1 -1
- package/src/cli/config-inspect.ts +1 -1
- package/src/cli/configure.ts +2 -2
- package/src/cli/eval.ts +40 -6
- package/src/cli/extensions.ts +74 -8
- package/src/cli/fleet-preflight.ts +2 -0
- package/src/cli/fleet.ts +2 -0
- package/src/cli/index.ts +1 -3
- package/src/cli/interop-inspect.ts +61 -33
- package/src/cli/interop.ts +79 -9
- package/src/cli/library-import.ts +139 -0
- package/src/cli/library.ts +418 -120
- package/src/cli/run.ts +26 -9
- package/src/cli/skills-eval.ts +43 -6
- package/src/cli/skills-inventory.ts +6 -2
- package/src/cli/skills.ts +44 -491
- package/src/core/bus-events.ts +5 -0
- package/src/core/defaults.ts +1 -1
- package/src/core/recent-models.ts +2 -2
- package/src/core/session-routing.ts +3 -3
- package/src/core/state-file-lock.ts +1 -1
- package/src/core/tool-names.ts +5 -0
- package/src/domains/agents/extension.ts +42 -6
- package/src/domains/agents/fleet-commands.ts +92 -1
- package/src/domains/agents/fleet-contract.ts +87 -19
- package/src/domains/agents/recipe.ts +5 -4
- package/src/domains/agents/registry.ts +80 -24
- package/src/domains/config/keybindings.ts +155 -95
- package/src/domains/context/worker/contract.ts +91 -0
- package/src/domains/context/worker/pressure.ts +120 -0
- package/src/domains/context/worker/recall.ts +62 -0
- package/src/domains/context/worker/select.ts +164 -0
- package/src/domains/context/worker/snapshot.ts +35 -0
- package/src/domains/context/worker/store.ts +16 -0
- package/src/domains/context/working-set/replay/synthetic.ts +2 -1
- package/src/domains/dispatch/active-route-planner.ts +2 -0
- package/src/domains/dispatch/backoff.ts +1 -0
- package/src/domains/dispatch/code-step.ts +12 -2
- package/src/domains/dispatch/contract.ts +3 -0
- package/src/domains/dispatch/execution-plan.ts +2 -0
- package/src/domains/dispatch/extension.ts +109 -27
- package/src/domains/dispatch/fleet-plan.ts +10 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/state.ts +1 -0
- package/src/domains/dispatch/types.ts +5 -0
- package/src/domains/dispatch/validation.ts +12 -0
- package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
- package/src/domains/evidence/failure-attribution.ts +1 -0
- package/src/domains/evidence/trust-status.ts +22 -3
- package/src/domains/extensions/command-schema.ts +145 -0
- package/src/domains/extensions/command-tools.ts +15 -0
- package/src/domains/extensions/compatibility.ts +7 -0
- package/src/domains/extensions/contract.ts +0 -4
- package/src/domains/extensions/discovery.ts +69 -205
- package/src/domains/extensions/extension.ts +0 -4
- package/src/domains/extensions/index.ts +1 -5
- package/src/domains/extensions/manager.ts +1 -6
- package/src/domains/extensions/operator-commands.ts +29 -0
- package/src/domains/extensions/operator-runtime.ts +483 -0
- package/src/domains/extensions/public-api.ts +53 -0
- package/src/domains/extensions/runtime-child.mjs +114 -0
- package/src/domains/extensions/runtime-process.ts +306 -0
- package/src/domains/extensions/runtime-schema.ts +146 -0
- package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
- package/src/domains/extensions/snapshot.ts +4 -32
- package/src/domains/extensions/state.ts +5 -83
- package/src/domains/extensions/types.ts +33 -34
- package/src/domains/interop/adopt.ts +546 -0
- package/src/domains/interop/detect.ts +50 -12
- package/src/domains/interop/foreign.ts +554 -0
- package/src/domains/interop/import.ts +277 -0
- package/src/domains/interop/index.ts +24 -0
- package/src/domains/interop/install.ts +6 -0
- package/src/domains/interop/inventory.ts +351 -0
- package/src/domains/interop/projection.ts +360 -0
- package/src/domains/interop/registry.ts +106 -3
- package/src/domains/interop/types.ts +51 -0
- package/src/domains/lifecycle/migrations/index.ts +0 -2
- package/src/domains/lifecycle/naming-resources.ts +1 -1
- package/src/domains/middleware/marketplace-offer.ts +1 -1
- package/src/domains/mux/contract.ts +1 -1
- package/src/domains/plugins/catalog.ts +204 -0
- package/src/domains/plugins/contract.ts +24 -0
- package/src/domains/plugins/discovery.ts +316 -0
- package/src/domains/plugins/extension.ts +40 -0
- package/src/domains/plugins/index.ts +77 -0
- package/src/domains/plugins/integrity.ts +6 -0
- package/src/domains/plugins/manifest.ts +3 -0
- package/src/domains/plugins/resources.ts +102 -0
- package/src/domains/plugins/state.ts +753 -0
- package/src/domains/plugins/types.ts +217 -0
- package/src/domains/prompts/extension.ts +9 -2
- package/src/domains/prompts/fragments/operating/skills.md +10 -10
- package/src/domains/resources/common-loader.ts +9 -6
- package/src/domains/resources/index.ts +67 -0
- package/src/domains/resources/library-actions.ts +836 -0
- package/src/domains/resources/library-evals.ts +38 -0
- package/src/domains/resources/library-inventory.ts +1048 -0
- package/src/domains/resources/library-types.ts +50 -0
- package/src/domains/resources/library-validation.ts +634 -0
- package/src/domains/resources/library.ts +437 -156
- package/src/domains/resources/package-references.ts +66 -0
- package/src/domains/resources/prompts/loader.ts +75 -41
- package/src/domains/resources/skills/install.ts +2 -2
- package/src/domains/resources/skills/loader.ts +77 -22
- package/src/domains/resources/skills/marketplace.ts +48 -57
- package/src/domains/resources/skills/promotion.ts +2 -2
- package/src/domains/resources/skills/provenance-pin.ts +17 -4
- package/src/domains/safety/action-classifier.ts +2 -2
- package/src/domains/safety/default-path-policy.ts +3 -1
- package/src/domains/safety/policy-engine.ts +1 -1
- package/src/domains/safety/protected-artifacts.ts +21 -5
- package/src/domains/safety/skill-authority.ts +5 -2
- package/src/domains/share/archive.ts +1 -1
- package/src/engine/apis/openai-completions.ts +52 -2
- package/src/engine/notices/pi-tui-LICENSE +21 -0
- package/src/engine/tui.ts +3 -0
- package/src/engine/worker-runtime.ts +58 -14
- package/src/engine/worker-tools.ts +5 -0
- package/src/entry/orchestrator.ts +26 -5
- package/src/entry/plugin-reload.ts +18 -0
- package/src/interactive/application-controller.ts +67 -21
- package/src/interactive/chat-loop.ts +32 -5
- package/src/interactive/chat-panel.ts +5 -1
- package/src/interactive/clio-editor.ts +53 -21
- package/src/interactive/command-output.ts +56 -1
- package/src/interactive/editor-submit.ts +65 -28
- package/src/interactive/fleet-run-preview.ts +2 -0
- package/src/interactive/follow-up-queue-panel.ts +3 -3
- package/src/interactive/footer/dashboard.ts +4 -1
- package/src/interactive/footer/notifications.ts +2 -2
- package/src/interactive/footer/widgets.ts +2 -2
- package/src/interactive/interactive-application.ts +209 -21
- package/src/interactive/interactive-input-runtime.ts +254 -7
- package/src/interactive/interactive-presentation.ts +41 -12
- package/src/interactive/interactive-slash-runtime.ts +37 -8
- package/src/interactive/keybinding-manager.ts +156 -79
- package/src/interactive/keyboard-owner.ts +37 -0
- package/src/interactive/leader-key.ts +49 -102
- package/src/interactive/leader-menu.ts +45 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
- package/src/interactive/overlay-frame.ts +15 -0
- package/src/interactive/overlay-key-routing.ts +46 -47
- package/src/interactive/overlay-lifecycle.ts +30 -15
- package/src/interactive/overlay-resource-openers.ts +56 -46
- package/src/interactive/overlays/ask-user.ts +630 -556
- package/src/interactive/overlays/extension-panel.ts +70 -0
- package/src/interactive/overlays/extensions.ts +28 -5
- package/src/interactive/overlays/fleet-run-approval.ts +7 -3
- package/src/interactive/overlays/help-reference.ts +89 -40
- package/src/interactive/overlays/interop.ts +122 -3
- package/src/interactive/overlays/keybinding-detail.ts +2 -2
- package/src/interactive/overlays/library-lifecycle.ts +90 -0
- package/src/interactive/overlays/library-model.ts +574 -0
- package/src/interactive/overlays/library-review.ts +557 -0
- package/src/interactive/overlays/library-tabs.ts +3 -15
- package/src/interactive/overlays/library.ts +602 -0
- package/src/interactive/overlays/list-overlay.ts +218 -39
- package/src/interactive/overlays/model-selector.ts +28 -25
- package/src/interactive/overlays/session-selector.ts +9 -3
- package/src/interactive/overlays/settings.ts +25 -18
- package/src/interactive/overlays/tree-selector.ts +16 -11
- package/src/interactive/permission-hint.ts +13 -0
- package/src/interactive/permission-overlay.ts +77 -28
- package/src/interactive/prompt-source-label.ts +21 -0
- package/src/interactive/renderers/reference-card.ts +35 -0
- package/src/interactive/renderers/worker-entry.ts +35 -3
- package/src/interactive/slash-autocomplete.ts +99 -1
- package/src/interactive/slash-commands.ts +390 -67
- package/src/interactive/slash-spec.ts +0 -1
- package/src/interactive/terminal-lease.ts +44 -12
- package/src/interactive/turn-queues.ts +8 -7
- package/src/interactive/turn-runtime.ts +1 -1
- package/src/interactive/view/view-overlay.ts +19 -14
- package/src/interactive/welcome-dashboard.ts +525 -408
- package/src/tools/bootstrap.ts +8 -0
- package/src/tools/builtin-tool-catalog.ts +7 -2
- package/src/tools/context/index.ts +58 -5
- package/src/tools/context/library.ts +465 -0
- package/src/tools/context/surface.ts +20 -6
- package/src/tools/core-bootstrap.ts +3 -0
- package/src/tools/dispatch-admission.ts +24 -1
- package/src/tools/dispatch-arguments.ts +8 -0
- package/src/tools/dispatch-plan.ts +32 -0
- package/src/tools/dispatch-schema.ts +31 -1
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/harness-extensions.ts +169 -0
- package/src/tools/observation.ts +4 -0
- package/src/tools/policy.ts +7 -1
- package/src/tools/registry.ts +19 -1
- package/src/tools/worker-evidence.ts +5 -0
- package/src/worker/context-seed.ts +192 -0
- package/src/worker/entry.ts +1 -0
- package/src/worker/spec-contract.ts +8 -1
- package/dist/chunk-3UW3KU4A.js +0 -21
- package/dist/chunk-536HXRFE.js +0 -1257
- package/dist/chunk-B3MOMLJ4.js +0 -433
- package/dist/chunk-CXQ37WJH.js +0 -45
- package/dist/chunk-KTFSFCVN.js +0 -46
- package/dist/chunk-QCOV5DFY.js +0 -911
- package/dist/chunk-QRFXEO6Y.js +0 -17
- package/dist/chunk-VAHLPXPY.js +0 -399
- package/dist/interop-RVCAYECG.js +0 -115
- package/dist/library-CTKZA7K3.js +0 -226
- package/dist/skills-OXFEAWMT.js +0 -510
- package/skills/README.md +0 -418
- package/skills/meta/find-skills/SKILL.md +0 -78
- package/skills/meta/find-skills/evals.md +0 -47
- package/src/domains/extensions/resource-path.ts +0 -27
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
- package/src/interactive/overlays/agents.ts +0 -70
- package/src/interactive/overlays/library-install-confirm.ts +0 -152
- package/src/interactive/overlays/prompts.ts +0 -89
- package/src/interactive/overlays/skills-hub.ts +0 -615
- /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
- /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
- /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
- /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
- /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
- /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
- /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
- /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
- /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
- /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
- /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
- /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
- /package/{skills → library/skills}/git/ship/evals.md +0 -0
- /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
- /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
- /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
- /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
- /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
- /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
- /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
- /package/{skills → library/skills}/planning/archify/evals.md +0 -0
package/src/cli/agents.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { printError } from "./shared.js";
|
|
|
9
9
|
|
|
10
10
|
const HELP = `clio-coder agents [--json] [--all]
|
|
11
11
|
|
|
12
|
-
List user-facing agent specs from built-in,
|
|
12
|
+
List user-facing agent specs from built-in, plugin, user, and project recipes.
|
|
13
13
|
|
|
14
14
|
Flags:
|
|
15
15
|
--json emit specs as JSON instead of the formatted table
|
|
@@ -52,7 +52,7 @@ export type CustomizationCategory =
|
|
|
52
52
|
| "safety"
|
|
53
53
|
| "memory";
|
|
54
54
|
|
|
55
|
-
/** `reload` means an explicit `/
|
|
55
|
+
/** `reload` means an explicit `/extensions reload` (or a restart) publishes the change. */
|
|
56
56
|
export type ReloadClass = "hot" | "next-turn" | "reload" | "restart" | "n/a";
|
|
57
57
|
|
|
58
58
|
export interface CustomizationEntry {
|
package/src/cli/configure.ts
CHANGED
|
@@ -1372,7 +1372,7 @@ const SECTIONS: ReadonlyArray<SectionSpec> = [
|
|
|
1372
1372
|
["Chat thinking", settings.chat.thinkingLevel],
|
|
1373
1373
|
["Fleet thinking", settings.fleet.default.thinkingLevel],
|
|
1374
1374
|
["Favorites", listOr(settings.chat.modelPicker.favorites)],
|
|
1375
|
-
["
|
|
1375
|
+
["Model cycle set", listOr(settings.chat.modelPicker.cycleSet)],
|
|
1376
1376
|
];
|
|
1377
1377
|
},
|
|
1378
1378
|
actions: [
|
|
@@ -1437,7 +1437,7 @@ const SECTIONS: ReadonlyArray<SectionSpec> = [
|
|
|
1437
1437
|
},
|
|
1438
1438
|
{
|
|
1439
1439
|
label: "Cycle set",
|
|
1440
|
-
hint: "comma-separated
|
|
1440
|
+
hint: "comma-separated models for the scoped cycle actions",
|
|
1441
1441
|
run: async (io) => {
|
|
1442
1442
|
await askList(io, "Cycle set", readSettings().chat.modelPicker.cycleSet, (values) => {
|
|
1443
1443
|
updateSettings((draft) => {
|
package/src/cli/eval.ts
CHANGED
|
@@ -18,11 +18,15 @@ import { EvalSuiteFileError, loadEvalSuiteFile, loadV1TaskFileAsSuite } from "..
|
|
|
18
18
|
import { resolveSuiteForRun } from "../domains/eval/suites/resolve.js";
|
|
19
19
|
import { runEvalSuiteV2 } from "../domains/eval/suites/run.js";
|
|
20
20
|
import { EvalTaskFileError } from "../domains/eval/task-file.js";
|
|
21
|
+
import { resolveLibraryEval } from "../domains/resources/library-evals.js";
|
|
21
22
|
import { printError } from "./shared.js";
|
|
22
23
|
|
|
23
24
|
const HELP = `clio-coder eval <command>
|
|
24
25
|
|
|
25
26
|
Commands:
|
|
27
|
+
clio-coder eval skill <name|path> [--scenario <id>] [--json]
|
|
28
|
+
clio-coder eval validate --package <path|kind:name> [--eval <name>] [--user|--project]
|
|
29
|
+
clio-coder eval run --package <path|kind:name> [--eval <name>] [--user|--project] [--out <path>]
|
|
26
30
|
clio-coder eval validate --suite <suite.yaml>
|
|
27
31
|
clio-coder eval run --suite <suite.yaml> [--trials <n>] [--target <id>] [--model <id>] [--out <path>] [--clio-coder-entry <path>]
|
|
28
32
|
clio-coder eval run --task-file <tasks.yaml> [--repeat <n>] [--out <path>] [--clio-coder-entry <path>]
|
|
@@ -60,6 +64,9 @@ interface ParsedEvalArgs {
|
|
|
60
64
|
baseline?: string;
|
|
61
65
|
thresholds?: string;
|
|
62
66
|
help: boolean;
|
|
67
|
+
package?: string;
|
|
68
|
+
packageEval?: string;
|
|
69
|
+
packageScope?: "user" | "project";
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
@@ -84,6 +91,21 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
84
91
|
}
|
|
85
92
|
throw new Error(`unknown eval command: ${arg}`);
|
|
86
93
|
}
|
|
94
|
+
if (parsed.command === "validate" || parsed.command === "run") {
|
|
95
|
+
if (arg === "--package" || arg === "--eval") {
|
|
96
|
+
const value = requiredValue(args, index++, arg);
|
|
97
|
+
if (arg === "--package") parsed.package = value;
|
|
98
|
+
else parsed.packageEval = value;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (arg === "--user" || arg === "--project") {
|
|
102
|
+
const scope = arg === "--user" ? "user" : "project";
|
|
103
|
+
if (parsed.packageScope && parsed.packageScope !== scope)
|
|
104
|
+
throw new Error("--user and --project are mutually exclusive");
|
|
105
|
+
parsed.packageScope = scope;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
87
109
|
if (parsed.command === "validate") {
|
|
88
110
|
if (arg === "--suite") {
|
|
89
111
|
parsed.suite = requiredValue(args, index, "--suite");
|
|
@@ -193,9 +215,12 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
193
215
|
}
|
|
194
216
|
if (parsed.help) return parsed;
|
|
195
217
|
if (parsed.command === undefined) throw new Error("eval requires a command");
|
|
196
|
-
if (parsed.
|
|
197
|
-
|
|
198
|
-
|
|
218
|
+
if (!parsed.package && (parsed.packageEval || parsed.packageScope))
|
|
219
|
+
throw new Error("--eval and scope flags require --package");
|
|
220
|
+
if (parsed.command === "validate" && [parsed.suite, parsed.package].filter(Boolean).length !== 1)
|
|
221
|
+
throw new Error("validate requires exactly one of --suite or --package");
|
|
222
|
+
if (parsed.command === "run" && [parsed.suite, parsed.taskFile, parsed.package].filter(Boolean).length !== 1) {
|
|
223
|
+
throw new Error("run requires exactly one of --suite, --task-file, or --package");
|
|
199
224
|
}
|
|
200
225
|
if (parsed.command === "report" && (parsed.evalId === undefined) === (parsed.artifact === undefined)) {
|
|
201
226
|
throw new Error("report requires exactly one of an eval id or --artifact <path>");
|
|
@@ -210,6 +235,7 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
210
235
|
}
|
|
211
236
|
|
|
212
237
|
export async function runEvalCommand(args: ReadonlyArray<string>): Promise<number> {
|
|
238
|
+
if (args[0] === "skill") return (await import("./skills-eval.js")).runSkillEvalCli(args.slice(1));
|
|
213
239
|
// Routed before the shared parser so the fixed read stays exactly fixed: no
|
|
214
240
|
// eval flag can reach it, and no flag it does not name can be spent on it.
|
|
215
241
|
if (args[0] === "inventory") {
|
|
@@ -239,7 +265,10 @@ export async function runEvalCommand(args: ReadonlyArray<string>): Promise<numbe
|
|
|
239
265
|
|
|
240
266
|
async function runEvalValidate(parsed: ParsedEvalArgs): Promise<number> {
|
|
241
267
|
try {
|
|
242
|
-
const
|
|
268
|
+
const declared = parsed.package
|
|
269
|
+
? resolveLibraryEval(parsed.package, parsed.packageEval, parsed.packageScope ? { scope: parsed.packageScope } : {})
|
|
270
|
+
: undefined;
|
|
271
|
+
const loaded = await loadEvalSuiteFile(declared?.path ?? parsed.suite ?? "");
|
|
243
272
|
process.stdout.write(`valid suite: ${loaded.suite.suite.id}\n`);
|
|
244
273
|
return 0;
|
|
245
274
|
} catch (error) {
|
|
@@ -249,10 +278,15 @@ async function runEvalValidate(parsed: ParsedEvalArgs): Promise<number> {
|
|
|
249
278
|
|
|
250
279
|
async function runEvalRun(parsed: ParsedEvalArgs): Promise<number> {
|
|
251
280
|
try {
|
|
281
|
+
const declared = parsed.package
|
|
282
|
+
? resolveLibraryEval(parsed.package, parsed.packageEval, parsed.packageScope ? { scope: parsed.packageScope } : {})
|
|
283
|
+
: undefined;
|
|
284
|
+
const suitePath = declared?.path ?? parsed.suite;
|
|
252
285
|
const loaded =
|
|
253
|
-
|
|
254
|
-
? await loadEvalSuiteFile(
|
|
286
|
+
suitePath !== undefined
|
|
287
|
+
? await loadEvalSuiteFile(suitePath)
|
|
255
288
|
: await loadV1TaskFileAsSuite(parsed.taskFile ?? "", parsed.trials ?? parsed.repeat);
|
|
289
|
+
if (declared) loaded.suite.suite.provenance = { ...loaded.suite.suite.provenance, library: declared.provenance };
|
|
256
290
|
const resolveOptions: { target?: string; model?: string } = {};
|
|
257
291
|
if (parsed.target !== undefined) resolveOptions.target = parsed.target;
|
|
258
292
|
if (parsed.model !== undefined) resolveOptions.model = parsed.model;
|
package/src/cli/extensions.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
listInstalledExtensions,
|
|
11
11
|
removeExtension,
|
|
12
12
|
} from "../domains/extensions/index.js";
|
|
13
|
+
import { extensionInvocation, OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
|
|
13
14
|
import { formatColumns, printError, printOk } from "./shared.js";
|
|
14
15
|
|
|
15
16
|
const HELP = `clio-coder extensions <command>
|
|
@@ -19,6 +20,7 @@ Manage Clio extension packages.
|
|
|
19
20
|
Commands:
|
|
20
21
|
clio-coder extensions list [--all] [--json] [--user|--project]
|
|
21
22
|
clio-coder extensions discover <path> [--json]
|
|
23
|
+
clio-coder extensions run <id> <command> [--json] -- [arguments]
|
|
22
24
|
clio-coder extensions install <path> [--user|--project] [--force] [--json]
|
|
23
25
|
clio-coder extensions enable <id> [--user|--project] [--json]
|
|
24
26
|
clio-coder extensions disable <id> [--user|--project] [--json]
|
|
@@ -37,7 +39,16 @@ interface Parsed {
|
|
|
37
39
|
|
|
38
40
|
function parse(argv: ReadonlyArray<string>): Parsed {
|
|
39
41
|
const out: Parsed = { positional: [], json: false, all: false, force: false, help: false };
|
|
42
|
+
let argumentsOnly = false;
|
|
40
43
|
for (const arg of argv) {
|
|
44
|
+
if (argumentsOnly) {
|
|
45
|
+
out.positional.push(arg);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (arg === "--") {
|
|
49
|
+
argumentsOnly = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
41
52
|
if (!out.command && !arg.startsWith("-")) {
|
|
42
53
|
out.command = arg;
|
|
43
54
|
continue;
|
|
@@ -85,9 +96,9 @@ function printDiagnostics(diagnostics: ReadonlyArray<ExtensionDiagnostic>): void
|
|
|
85
96
|
}
|
|
86
97
|
}
|
|
87
98
|
|
|
88
|
-
function
|
|
89
|
-
const
|
|
90
|
-
return
|
|
99
|
+
function toolSummary(extension: InstalledExtension): string {
|
|
100
|
+
const tools = extension.capabilities?.tools.map((tool) => tool.name) ?? [];
|
|
101
|
+
return tools.length > 0 ? tools.join(",") : "-";
|
|
91
102
|
}
|
|
92
103
|
|
|
93
104
|
function stateLabel(extension: InstalledExtension): string {
|
|
@@ -95,7 +106,7 @@ function stateLabel(extension: InstalledExtension): string {
|
|
|
95
106
|
if (!extension.compatible) return "incompatible";
|
|
96
107
|
if (!extension.enabled) return "disabled";
|
|
97
108
|
if (!extension.effective) return `shadowed:${extension.overriddenBy ?? "higher"}`;
|
|
98
|
-
return extension.loadable ? "
|
|
109
|
+
return extension.loadable ? "eligible" : "inactive";
|
|
99
110
|
}
|
|
100
111
|
|
|
101
112
|
function printList(items: ReadonlyArray<InstalledExtension>): void {
|
|
@@ -105,20 +116,20 @@ function printList(items: ReadonlyArray<InstalledExtension>): void {
|
|
|
105
116
|
}
|
|
106
117
|
process.stdout.write(
|
|
107
118
|
`${formatColumns([
|
|
108
|
-
["id", "scope", "state", "version", "
|
|
119
|
+
["id", "scope", "state", "version", "tools", "description"],
|
|
109
120
|
...items.map((extension) => [
|
|
110
121
|
extension.id,
|
|
111
122
|
extension.scope,
|
|
112
123
|
stateLabel(extension),
|
|
113
124
|
extension.version,
|
|
114
|
-
|
|
125
|
+
toolSummary(extension),
|
|
115
126
|
extension.description,
|
|
116
127
|
]),
|
|
117
128
|
])}\n`,
|
|
118
129
|
);
|
|
119
130
|
}
|
|
120
131
|
|
|
121
|
-
export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
|
|
132
|
+
export function runExtensionsCommand(argv: ReadonlyArray<string>): number | Promise<number> {
|
|
122
133
|
let parsed: Parsed;
|
|
123
134
|
try {
|
|
124
135
|
parsed = parse(argv);
|
|
@@ -142,6 +153,8 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
|
|
|
142
153
|
}
|
|
143
154
|
const scopeOptions = { ...(parsed.scope ? { scope: parsed.scope } : {}) };
|
|
144
155
|
switch (parsed.command) {
|
|
156
|
+
case "run":
|
|
157
|
+
return runOperatorCommand(parsed);
|
|
145
158
|
case "list": {
|
|
146
159
|
const items = listInstalledExtensions(process.cwd(), { ...scopeOptions, all: parsed.all });
|
|
147
160
|
if (parsed.json) process.stdout.write(`${JSON.stringify({ extensions: items }, null, 2)}\n`);
|
|
@@ -178,7 +191,13 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
|
|
|
178
191
|
if (parsed.json) process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
179
192
|
else {
|
|
180
193
|
printDiagnostics(result.diagnostics);
|
|
181
|
-
if (result.extension)
|
|
194
|
+
if (result.extension) {
|
|
195
|
+
printOk(`installed ${result.extension.id} (${result.extension.scope})`);
|
|
196
|
+
if (result.extension.runtime)
|
|
197
|
+
process.stderr.write(
|
|
198
|
+
"Operator runtime code starts on the next interactive startup/reload or explicit extensions run. Install only code you trust; it runs with your user account authority.\n",
|
|
199
|
+
);
|
|
200
|
+
}
|
|
182
201
|
}
|
|
183
202
|
return hasErrors(result.diagnostics) ? 1 : 0;
|
|
184
203
|
}
|
|
@@ -217,3 +236,50 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
|
|
|
217
236
|
return 2;
|
|
218
237
|
}
|
|
219
238
|
}
|
|
239
|
+
|
|
240
|
+
async function runOperatorCommand(parsed: Parsed): Promise<number> {
|
|
241
|
+
const [id, command, ...args] = parsed.positional;
|
|
242
|
+
if (!id || !command || parsed.scope || parsed.force || parsed.all) {
|
|
243
|
+
process.stderr.write("usage: clio-coder extensions run <id> <command> [--json] -- [arguments]\n");
|
|
244
|
+
return 2;
|
|
245
|
+
}
|
|
246
|
+
const selected = listInstalledExtensions(process.cwd(), { all: true }).find(
|
|
247
|
+
(entry) => entry.id === id && entry.loadable,
|
|
248
|
+
);
|
|
249
|
+
if (!selected?.runtime?.commands.some((entry) => entry.name === command)) {
|
|
250
|
+
printError(`extension ${id} has no eligible operator command '${command}'`);
|
|
251
|
+
return 1;
|
|
252
|
+
}
|
|
253
|
+
const runtime = new OperatorExtensionRuntime({
|
|
254
|
+
context: () => ({ workspace: process.cwd(), sessionId: null, mode: "headless" }),
|
|
255
|
+
isIdle: () => true,
|
|
256
|
+
onlyId: id,
|
|
257
|
+
});
|
|
258
|
+
const controller = new AbortController();
|
|
259
|
+
const cancel = (): void => {
|
|
260
|
+
controller.abort();
|
|
261
|
+
void runtime.dispose();
|
|
262
|
+
};
|
|
263
|
+
process.once("SIGINT", cancel);
|
|
264
|
+
process.once("SIGTERM", cancel);
|
|
265
|
+
try {
|
|
266
|
+
const reload = await runtime.reload("startup");
|
|
267
|
+
if (reload.status !== "committed") throw new Error(reload.message);
|
|
268
|
+
const provenance = runtime.entries().find((entry) => entry.id === id && entry.state === "ready")?.provenance;
|
|
269
|
+
const output = await runtime.invoke(extensionInvocation(id, command), args.join(" "), [], controller.signal);
|
|
270
|
+
if (!provenance) throw new Error("extension result has no activated provenance");
|
|
271
|
+
if (parsed.json)
|
|
272
|
+
process.stdout.write(
|
|
273
|
+
`${JSON.stringify({ extensionId: id, command, generation: reload.generation, provenance, output })}\n`,
|
|
274
|
+
);
|
|
275
|
+
else process.stdout.write(`${output.text}\n`);
|
|
276
|
+
return 0;
|
|
277
|
+
} catch (error) {
|
|
278
|
+
printError(error instanceof Error ? error.message : String(error));
|
|
279
|
+
return 1;
|
|
280
|
+
} finally {
|
|
281
|
+
process.off("SIGINT", cancel);
|
|
282
|
+
process.off("SIGTERM", cancel);
|
|
283
|
+
await runtime.dispose();
|
|
284
|
+
}
|
|
285
|
+
}
|
package/src/cli/fleet.ts
CHANGED
|
@@ -393,6 +393,8 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
393
393
|
let plan: ExecutionPlan;
|
|
394
394
|
try {
|
|
395
395
|
plan = compileFleetExecutionPlan({
|
|
396
|
+
commands,
|
|
397
|
+
...(vars ? { vars } : {}),
|
|
396
398
|
contract,
|
|
397
399
|
task: prompt,
|
|
398
400
|
resolveAgent(context) {
|
package/src/cli/index.ts
CHANGED
|
@@ -69,8 +69,7 @@ Usage:
|
|
|
69
69
|
clio-coder usage report cross-session usage facts and opportunities (experimental)
|
|
70
70
|
clio-coder trace query or view the durable dispatch trace mirror
|
|
71
71
|
clio-coder extensions install, list, enable, disable, or remove extension packages
|
|
72
|
-
clio-coder
|
|
73
|
-
clio-coder library list, search, add, or sync agents, prompts, fleets, and skills from catalogs
|
|
72
|
+
clio-coder library register, install, update, import, inspect, and manage packages of every kind
|
|
74
73
|
clio-coder tasks list, add, hand, finish, or drop project operator tasks
|
|
75
74
|
clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
|
|
76
75
|
clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
|
|
@@ -258,7 +257,6 @@ const COMMAND_HANDLERS = new Map<string, CommandHandler>([
|
|
|
258
257
|
["extensions", extensionsCommand],
|
|
259
258
|
["ext", extensionsCommand],
|
|
260
259
|
["fleet", async (subArgs) => (await import("./fleet.js")).runFleetCommand(subArgs)],
|
|
261
|
-
["skills", async (subArgs) => (await import("./skills.js")).runSkillsCommand(subArgs)],
|
|
262
260
|
["library", async (subArgs) => (await import("./library.js")).runLibraryCommand(subArgs)],
|
|
263
261
|
["tasks", async (subArgs) => (await import("./tasks.js")).runTasksCommand(subArgs)],
|
|
264
262
|
["verifiers", async (subArgs) => (await import("./verifiers.js")).runVerifiersCommand(subArgs)],
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fixed machine-readable projection of detected external coding agents.
|
|
3
|
-
*
|
|
4
|
-
* `configure --interop` is an interactive review that writes delegation peers
|
|
5
|
-
* into settings, so it is not a transport a GUI host can invoke. This command
|
|
6
|
-
* takes no identifier or flag beyond `--json`, decides nothing, and writes
|
|
7
|
-
* nothing.
|
|
8
|
-
*
|
|
9
|
-
* It also runs no foreign executable. Detection can probe `<bin> --version`,
|
|
10
|
-
* and this read deliberately does not: a GUI refresh must not become "execute
|
|
11
|
-
* every coding agent installed on this machine". The version still crosses,
|
|
12
|
-
* because a non-probing detection keeps the last version the harness observed
|
|
13
|
-
* for the same binary, so what the operator sees is a recorded fact rather than
|
|
14
|
-
* a fresh execution.
|
|
15
|
-
*
|
|
16
|
-
* Resolved binary paths and the agent's home directory are native filesystem
|
|
17
|
-
* facts and stay on the host. Whether a directory exists crosses; where it is
|
|
18
|
-
* does not.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
1
|
import { readSettings } from "../core/config.js";
|
|
22
2
|
import {
|
|
23
3
|
detectInteropAgents,
|
|
@@ -30,10 +10,26 @@ import {
|
|
|
30
10
|
export type InteropDecisionState = "accepted" | "declined";
|
|
31
11
|
|
|
32
12
|
export interface InteropInspectAgent {
|
|
13
|
+
readonly inventory: {
|
|
14
|
+
status: string;
|
|
15
|
+
diagnosticCount: number;
|
|
16
|
+
listing: "unknown";
|
|
17
|
+
counts: Record<string, number>;
|
|
18
|
+
items: ReadonlyArray<{
|
|
19
|
+
kind: string;
|
|
20
|
+
name: string;
|
|
21
|
+
scope: string;
|
|
22
|
+
version?: string;
|
|
23
|
+
marketplace?: string;
|
|
24
|
+
installation?: string;
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
adoption: string;
|
|
27
|
+
}>;
|
|
28
|
+
} | null;
|
|
33
29
|
readonly id: InteropAgentId;
|
|
34
30
|
readonly label: string;
|
|
35
31
|
readonly presence: InteropPresence;
|
|
36
|
-
/** The
|
|
32
|
+
/** The bounded version probe result, or last observed version. */
|
|
37
33
|
readonly version: string | null;
|
|
38
34
|
/** Whether the agent owns a directory under the operator's home. The path stays host-side. */
|
|
39
35
|
readonly hasUserDirectory: boolean;
|
|
@@ -65,22 +61,15 @@ export interface InteropInspectSnapshot {
|
|
|
65
61
|
readonly detectedAt: string;
|
|
66
62
|
/**
|
|
67
63
|
* How many agent kinds the registry knows, so an empty list reads as "none
|
|
68
|
-
* detected" rather than "nothing to detect".
|
|
69
|
-
*
|
|
64
|
+
* detected" rather than "nothing to detect". Explicit inspection includes all five inventory-enabled hosts, including absent
|
|
65
|
+
* binaries; lightweight bootstrap detection still drops empty kinds.
|
|
70
66
|
*/
|
|
71
67
|
readonly knownKinds: number;
|
|
72
68
|
readonly agents: readonly InteropInspectAgent[];
|
|
73
69
|
}
|
|
74
70
|
|
|
75
|
-
/**
|
|
76
|
-
* Skill and artifact counts are deliberately absent.
|
|
77
|
-
*
|
|
78
|
-
* Detection populates them only from sources the resources and context domains
|
|
79
|
-
* have already loaded, and this command loads neither. Reporting the structural
|
|
80
|
-
* zero that would result would state a fact this read did not establish.
|
|
81
|
-
*/
|
|
82
71
|
async function interopInspectSnapshot(now: () => number = Date.now): Promise<InteropInspectSnapshot> {
|
|
83
|
-
const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion:
|
|
72
|
+
const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion: true, inventory: true });
|
|
84
73
|
const settings = readSettings();
|
|
85
74
|
const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
|
|
86
75
|
const agents: InteropInspectAgent[] = [];
|
|
@@ -92,6 +81,27 @@ async function interopInspectSnapshot(now: () => number = Date.now): Promise<Int
|
|
|
92
81
|
const decisionStale = decision !== null && record.decidedFingerprint !== record.fingerprint;
|
|
93
82
|
const isConfigured = configured.has(kind.id);
|
|
94
83
|
agents.push({
|
|
84
|
+
inventory: record.inventory
|
|
85
|
+
? {
|
|
86
|
+
status: record.inventory.status,
|
|
87
|
+
diagnosticCount: record.inventory.diagnostics.length,
|
|
88
|
+
listing: record.inventory.listing,
|
|
89
|
+
counts: record.inventory.items.reduce<Record<string, number>>((counts, item) => {
|
|
90
|
+
counts[item.kind] = (counts[item.kind] ?? 0) + 1;
|
|
91
|
+
return counts;
|
|
92
|
+
}, {}),
|
|
93
|
+
items: record.inventory.items.map(({ kind, name, scope, version, marketplace, installation, enabled }) => ({
|
|
94
|
+
kind,
|
|
95
|
+
name,
|
|
96
|
+
scope,
|
|
97
|
+
...(version ? { version } : {}),
|
|
98
|
+
...(marketplace ? { marketplace } : {}),
|
|
99
|
+
...(installation ? { installation } : {}),
|
|
100
|
+
...(enabled !== undefined ? { enabled } : {}),
|
|
101
|
+
adoption: ["hook", "mcp", "executable", "output-style"].includes(kind) ? "not adoptable" : "review required",
|
|
102
|
+
})),
|
|
103
|
+
}
|
|
104
|
+
: null,
|
|
95
105
|
id: kind.id,
|
|
96
106
|
label: kind.label,
|
|
97
107
|
presence: record.presence,
|
|
@@ -119,10 +129,28 @@ async function interopInspectSnapshot(now: () => number = Date.now): Promise<Int
|
|
|
119
129
|
}
|
|
120
130
|
|
|
121
131
|
export async function runInteropInspect(args: ReadonlyArray<string>): Promise<number> {
|
|
122
|
-
if (args.length
|
|
132
|
+
if (args.length > 1 || (args.length === 1 && args[0] !== "--json")) {
|
|
123
133
|
process.stderr.write("clio-coder interop inspect: usage: clio-coder interop inspect --json\n");
|
|
124
134
|
return 2;
|
|
125
135
|
}
|
|
126
|
-
|
|
136
|
+
const snapshot = await interopInspectSnapshot();
|
|
137
|
+
if (args[0] === "--json") process.stdout.write(`${JSON.stringify(snapshot, null, 2)}\n`);
|
|
138
|
+
else
|
|
139
|
+
for (const agent of snapshot.agents) {
|
|
140
|
+
process.stdout.write(
|
|
141
|
+
`${agent.label}: ${agent.presence}; version ${agent.version ?? "unknown"}; ${agent.configured ? "connected" : "not connected"}; adapter ${agent.adapter ?? "unsupported"}\n`,
|
|
142
|
+
);
|
|
143
|
+
process.stdout.write(
|
|
144
|
+
` Inventory ${agent.inventory?.status ?? "unknown"}: ${
|
|
145
|
+
Object.entries(agent.inventory?.counts ?? {})
|
|
146
|
+
.map(([kind, count]) => `${count} ${kind}`)
|
|
147
|
+
.join(", ") || "none found"
|
|
148
|
+
}\n`,
|
|
149
|
+
);
|
|
150
|
+
for (const item of agent.inventory?.items ?? [])
|
|
151
|
+
process.stdout.write(
|
|
152
|
+
` ${item.scope} ${item.kind} ${item.name}${item.version ? ` @ ${item.version}` : ""}${item.marketplace ? ` (${item.marketplace})` : ""}; ${item.adoption}\n`,
|
|
153
|
+
);
|
|
154
|
+
}
|
|
127
155
|
return 0;
|
|
128
156
|
}
|
package/src/cli/interop.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `clio-coder interop`, the read half of external coding agent detection.
|
|
3
|
-
*
|
|
4
|
-
* Reviewing and wiring a detected agent as a delegation peer is an interactive
|
|
5
|
-
* mutation and stays on `configure --interop`. This command family carries the
|
|
6
|
-
* read only, and its one subcommand is the fixed projection a GUI host may run.
|
|
7
|
-
*/
|
|
1
|
+
/** Discover coding agents and review safe resource adoption without model calls. */
|
|
8
2
|
|
|
3
|
+
import { createInterface } from "node:readline/promises";
|
|
4
|
+
import {
|
|
5
|
+
type AdoptionKind,
|
|
6
|
+
applyInteropAdoption,
|
|
7
|
+
detectInteropAgents,
|
|
8
|
+
type InteropAgentId,
|
|
9
|
+
interopAgentKind,
|
|
10
|
+
planInteropAdoption,
|
|
11
|
+
renderInteropAdoptionPlan,
|
|
12
|
+
} from "../domains/interop/index.js";
|
|
9
13
|
import { runInteropInspect } from "./interop-inspect.js";
|
|
10
14
|
import { printError } from "./shared.js";
|
|
11
15
|
|
|
@@ -14,10 +18,13 @@ const HELP = `clio-coder interop <subcommand>
|
|
|
14
18
|
Detected external coding agents and how far each one is wired.
|
|
15
19
|
|
|
16
20
|
Subcommands:
|
|
17
|
-
inspect --json
|
|
21
|
+
inspect [--json] show host inventory and connection state
|
|
22
|
+
adopt <host> [--kind skill|agent|prompt|plugin] [--project|--user]
|
|
23
|
+
[--yes] [--dry-run]
|
|
24
|
+
review and adopt safe resources
|
|
18
25
|
|
|
19
26
|
Notes:
|
|
20
|
-
inspect
|
|
27
|
+
inspect changes no host or project files and starts no agent session. Wiring a detected agent
|
|
21
28
|
as a delegation peer is an explicit review: run \`clio-coder configure --interop\`.
|
|
22
29
|
`;
|
|
23
30
|
|
|
@@ -27,8 +34,71 @@ export async function runInteropCommand(args: ReadonlyArray<string>): Promise<nu
|
|
|
27
34
|
process.stdout.write(HELP);
|
|
28
35
|
return sub === undefined ? 2 : 0;
|
|
29
36
|
}
|
|
37
|
+
if (sub === "adopt") return await runAdopt(args.slice(1));
|
|
30
38
|
if (sub === "inspect") return await runInteropInspect(args.slice(1));
|
|
31
39
|
printError(`unknown interop command: ${sub}`);
|
|
32
40
|
process.stdout.write(HELP);
|
|
33
41
|
return 2;
|
|
34
42
|
}
|
|
43
|
+
|
|
44
|
+
async function runAdopt(args: ReadonlyArray<string>): Promise<number> {
|
|
45
|
+
const host = args[0] === "claude" ? "claude-code" : args[0] === "agy" ? "antigravity" : args[0];
|
|
46
|
+
const kind = host ? interopAgentKind(host as InteropAgentId) : undefined;
|
|
47
|
+
if (!kind?.inventory) {
|
|
48
|
+
printError("adopt requires a host: claude-code, codex, antigravity, copilot, opencode");
|
|
49
|
+
return 2;
|
|
50
|
+
}
|
|
51
|
+
let filter: AdoptionKind | undefined;
|
|
52
|
+
let scope: "user" | "project" | undefined;
|
|
53
|
+
let yes = false;
|
|
54
|
+
let dryRun = false;
|
|
55
|
+
for (let i = 1; i < args.length; i++) {
|
|
56
|
+
const arg = args[i];
|
|
57
|
+
if (arg === "--kind") {
|
|
58
|
+
const next = args[++i];
|
|
59
|
+
if (!next || !["skill", "agent", "prompt", "plugin"].includes(next)) {
|
|
60
|
+
printError("invalid adoption kind");
|
|
61
|
+
return 2;
|
|
62
|
+
}
|
|
63
|
+
filter = next as AdoptionKind;
|
|
64
|
+
} else if (arg === "--project" || arg === "--user") {
|
|
65
|
+
if (scope) {
|
|
66
|
+
printError("choose one destination scope");
|
|
67
|
+
return 2;
|
|
68
|
+
}
|
|
69
|
+
scope = arg === "--project" ? "project" : "user";
|
|
70
|
+
} else if (arg === "--yes") yes = true;
|
|
71
|
+
else if (arg === "--dry-run") dryRun = true;
|
|
72
|
+
else {
|
|
73
|
+
printError(`unknown adopt option: ${arg}`);
|
|
74
|
+
return 2;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const report = await detectInteropAgents({ inventory: true });
|
|
78
|
+
const inventory = report.agents.find((agent) => agent.kind === kind.id)?.inventory;
|
|
79
|
+
if (!inventory) {
|
|
80
|
+
printError("inventory is unknown");
|
|
81
|
+
return 1;
|
|
82
|
+
}
|
|
83
|
+
const plan = planInteropAdoption({
|
|
84
|
+
host: kind.id,
|
|
85
|
+
inventory,
|
|
86
|
+
...(scope ? { scope } : {}),
|
|
87
|
+
...(filter ? { kind: filter } : {}),
|
|
88
|
+
});
|
|
89
|
+
process.stdout.write(`${renderInteropAdoptionPlan(plan)}\n`);
|
|
90
|
+
for (const diagnostic of inventory.diagnostics) process.stdout.write(`Unknown: ${diagnostic}\n`);
|
|
91
|
+
if (dryRun || !plan.entries.some((entry) => entry.action === "install")) return 0;
|
|
92
|
+
if (!yes && process.stdin.isTTY && process.stdout.isTTY) {
|
|
93
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
94
|
+
try {
|
|
95
|
+
yes = (await rl.question("Install this plan? [y/N] ")).trim().toLowerCase() === "y";
|
|
96
|
+
} finally {
|
|
97
|
+
rl.close();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const result = applyInteropAdoption(plan, yes);
|
|
101
|
+
for (const id of result.installed) process.stdout.write(`Installed ${id}\n`);
|
|
102
|
+
for (const diagnostic of result.diagnostics) process.stderr.write(`${diagnostic}\n`);
|
|
103
|
+
return result.diagnostics.length > 0 ? 1 : 0;
|
|
104
|
+
}
|