@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/skills.ts
CHANGED
|
@@ -1,495 +1,48 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const HELP = `clio-coder skills <command>
|
|
18
|
-
|
|
19
|
-
Manage local Clio and Agent Skills-compatible skills.
|
|
20
|
-
|
|
21
|
-
Commands:
|
|
22
|
-
clio-coder skills list [--json] [--all]
|
|
23
|
-
clio-coder skills inventory --json
|
|
24
|
-
clio-coder skills search <query> [--json]
|
|
25
|
-
clio-coder skills inspect <name> [--json]
|
|
26
|
-
clio-coder skills validate [path] [--json]
|
|
27
|
-
clio-coder skills install <name|path|github-url>... [--user|--project] [--name <name>] [--force]
|
|
28
|
-
clio-coder skills install --category <category> [--user|--project] [--force]
|
|
29
|
-
clio-coder skills update <name> | --all [--force]
|
|
30
|
-
clio-coder skills sync [--force]
|
|
31
|
-
clio-coder skills eval <name|path> [--scenario <id>] [--target <id>] [--workspace <path>] [--timeout <seconds>] [--trust-fixtures] [--allow-network] [--json]
|
|
32
|
-
|
|
33
|
-
inventory is the fixed machine-readable read a GUI host may run. Unlike a bare
|
|
34
|
-
list it reports every installed skill, not only the ones the model may load, and
|
|
35
|
-
says which are which; it carries no body, path, hash, or install URL.
|
|
36
|
-
|
|
37
|
-
search covers installed skills plus the local marketplace: CLIO_CODER_SKILL_CATALOG_DIR,
|
|
38
|
-
a repo skills/ catalog, or the catalog and skill-marketplace.json index the
|
|
39
|
-
installed clio-coder package carries. Installing from the shipped catalog copies
|
|
40
|
-
local files and needs no network.
|
|
41
|
-
|
|
42
|
-
install resolves a bare name through that marketplace; a path or GitHub URL
|
|
43
|
-
installs directly, and an existing local path always wins over a same-named
|
|
44
|
-
marketplace entry. Several sources install in one command, and --category
|
|
45
|
-
installs every marketplace skill in one catalog group (git, research, ...).
|
|
46
|
-
|
|
47
|
-
eval (experimental) executes the skill's evals.md RED-GREEN scenarios: per
|
|
48
|
-
scenario a baseline headless run without the skill, a treatment run with it,
|
|
49
|
-
and a judge run scoring each Expected bullet from the transcripts. Exit is 1
|
|
50
|
-
when a treatment bullet fails and 3 when a scenario was never measured (a
|
|
51
|
-
truncated or unparseable judge response scores no bullet, which is not a skill
|
|
52
|
-
failure). Every arm runs hermetic: the network tool plane is stripped from the
|
|
53
|
-
child runs unless you pass --allow-network. The baseline and treatment arms run
|
|
54
|
-
at autonomy full-auto in per-run disposable workspaces, because a headless run
|
|
55
|
-
has no operator to approve anything and a gated arm measures the harness rather
|
|
56
|
-
than the skill. --scenario takes a full id as written
|
|
57
|
-
in evals.md, whose prefix is per-skill (S1, but also D2 in clio-dev, T3 in
|
|
58
|
-
clio-test, F1 in find-skills, H2 in context-handoff), or a bare number that
|
|
59
|
-
selects that scenario whatever its prefix. --json emits one JSONL row per
|
|
60
|
-
(scenario, bullet) with schema: "experimental". --workspace copies an existing
|
|
61
|
-
checkout into a throwaway seed; the source checkout is not mutated. Fixture
|
|
62
|
-
commands declared in evals.md are real shell run in that seed; they only execute
|
|
63
|
-
with --trust-fixtures, after you have reviewed the evals.md.
|
|
64
|
-
`;
|
|
65
|
-
|
|
66
|
-
type SkillInstallScope = "user" | "project";
|
|
67
|
-
|
|
68
|
-
interface Parsed {
|
|
69
|
-
command?: string;
|
|
70
|
-
positional: string[];
|
|
71
|
-
json: boolean;
|
|
72
|
-
all: boolean;
|
|
73
|
-
help: boolean;
|
|
74
|
-
force: boolean;
|
|
75
|
-
name?: string;
|
|
76
|
-
category?: string;
|
|
77
|
-
scope?: SkillInstallScope;
|
|
78
|
-
scenario?: string;
|
|
79
|
-
target?: string;
|
|
80
|
-
workspace?: string;
|
|
81
|
-
timeoutSeconds?: number;
|
|
82
|
-
trustFixtures: boolean;
|
|
83
|
-
allowNetwork: boolean;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function parse(argv: ReadonlyArray<string>): Parsed {
|
|
87
|
-
const out: Parsed = {
|
|
88
|
-
positional: [],
|
|
89
|
-
json: false,
|
|
90
|
-
all: false,
|
|
91
|
-
help: false,
|
|
92
|
-
force: false,
|
|
93
|
-
trustFixtures: false,
|
|
94
|
-
allowNetwork: false,
|
|
95
|
-
};
|
|
96
|
-
for (let i = 0; i < argv.length; i++) {
|
|
97
|
-
const arg = argv[i];
|
|
98
|
-
if (arg === undefined) continue;
|
|
99
|
-
if (!out.command && !arg.startsWith("-")) {
|
|
100
|
-
out.command = arg;
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
switch (arg) {
|
|
104
|
-
case "--json":
|
|
105
|
-
out.json = true;
|
|
106
|
-
break;
|
|
107
|
-
case "--all":
|
|
108
|
-
out.all = true;
|
|
109
|
-
break;
|
|
110
|
-
case "--force":
|
|
111
|
-
out.force = true;
|
|
112
|
-
break;
|
|
113
|
-
case "--trust-fixtures":
|
|
114
|
-
out.trustFixtures = true;
|
|
115
|
-
break;
|
|
116
|
-
case "--allow-network":
|
|
117
|
-
out.allowNetwork = true;
|
|
118
|
-
break;
|
|
119
|
-
case "--name": {
|
|
120
|
-
const value = argv[i + 1];
|
|
121
|
-
if (!value || value.startsWith("-")) throw new Error("--name requires a value");
|
|
122
|
-
out.name = value;
|
|
123
|
-
i++;
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
case "--category": {
|
|
127
|
-
const value = argv[i + 1];
|
|
128
|
-
if (!value || value.startsWith("-")) throw new Error("--category requires a value");
|
|
129
|
-
out.category = value;
|
|
130
|
-
i++;
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
case "--scenario": {
|
|
134
|
-
const value = argv[i + 1];
|
|
135
|
-
if (!value || value.startsWith("-")) throw new Error("--scenario requires a value");
|
|
136
|
-
out.scenario = value;
|
|
137
|
-
i++;
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
case "--target": {
|
|
141
|
-
const value = argv[i + 1];
|
|
142
|
-
if (!value || value.startsWith("-")) throw new Error("--target requires a value");
|
|
143
|
-
out.target = value;
|
|
144
|
-
i++;
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
147
|
-
case "--workspace": {
|
|
148
|
-
const value = argv[i + 1];
|
|
149
|
-
if (!value || value.startsWith("-")) throw new Error("--workspace requires a value");
|
|
150
|
-
out.workspace = value;
|
|
151
|
-
i++;
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
case "--timeout": {
|
|
155
|
-
const value = argv[i + 1];
|
|
156
|
-
const seconds = value === undefined ? Number.NaN : Number.parseInt(value, 10);
|
|
157
|
-
if (!Number.isInteger(seconds) || seconds <= 0) throw new Error("--timeout requires a positive integer");
|
|
158
|
-
out.timeoutSeconds = seconds;
|
|
159
|
-
i++;
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
case "--user":
|
|
163
|
-
if (out.scope && out.scope !== "user") throw new Error("--user and --project are mutually exclusive");
|
|
164
|
-
out.scope = "user";
|
|
165
|
-
break;
|
|
166
|
-
case "--project":
|
|
167
|
-
if (out.scope && out.scope !== "project") throw new Error("--user and --project are mutually exclusive");
|
|
168
|
-
out.scope = "project";
|
|
169
|
-
break;
|
|
170
|
-
case "--help":
|
|
171
|
-
case "-h":
|
|
172
|
-
out.help = true;
|
|
173
|
-
break;
|
|
174
|
-
default:
|
|
175
|
-
if (arg.startsWith("-")) throw new Error(`unknown flag: ${arg}`);
|
|
176
|
-
out.positional.push(arg);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return out;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function printUpdateReports(reports: ReadonlyArray<SkillUpdateReport>): number {
|
|
183
|
-
if (reports.length === 0) {
|
|
184
|
-
process.stdout.write("skills: nothing to update (no installed skills with source-url provenance)\n");
|
|
185
|
-
return 0;
|
|
186
|
-
}
|
|
187
|
-
for (const report of reports) {
|
|
188
|
-
const detail = report.detail ? ` (${report.detail})` : "";
|
|
189
|
-
process.stdout.write(`${report.name}: ${report.status}${detail}\n`);
|
|
190
|
-
}
|
|
191
|
-
return reports.some((report) => report.status === "error") ? 1 : 0;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function printDiagnostics(diagnostics: ReadonlyArray<ResourceDiagnostic>): void {
|
|
195
|
-
for (const diag of diagnostics) {
|
|
196
|
-
const detail = diag.path ? `${diag.message}: ${diag.path}` : diag.message;
|
|
197
|
-
if (diag.type === "error") printError(detail);
|
|
198
|
-
else process.stderr.write(`warning: ${detail}\n`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function skillRows(skills: ReadonlyArray<Skill>): string[][] {
|
|
203
|
-
return skills.map((skill) => [
|
|
204
|
-
skill.name,
|
|
205
|
-
skill.scope,
|
|
206
|
-
skill.source,
|
|
207
|
-
skill.trusted ? "trusted" : "untrusted",
|
|
208
|
-
skill.disableModelInvocation ? "manual" : "model",
|
|
209
|
-
skill.hash.slice(0, 12),
|
|
210
|
-
// Blank for the ordinary operator-installed case; a worker install is
|
|
211
|
-
// the anomaly worth a column, so it is the only value that ever prints.
|
|
212
|
-
skill.provenance?.installedBy ?? "",
|
|
213
|
-
skill.description,
|
|
214
|
-
]);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function printList(skills: ReadonlyArray<Skill>): void {
|
|
218
|
-
if (skills.length === 0) {
|
|
219
|
-
process.stdout.write("skills: none\n");
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
process.stdout.write(
|
|
223
|
-
formatColumns([["name", "scope", "source", "trust", "invoke", "hash", "by", "description"], ...skillRows(skills)]),
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function printInspect(skill: Skill): void {
|
|
228
|
-
process.stdout.write(`name: ${skill.name}\n`);
|
|
229
|
-
process.stdout.write(`description: ${skill.description}\n`);
|
|
230
|
-
process.stdout.write(`path: ${skill.filePath}\n`);
|
|
231
|
-
process.stdout.write(`baseDir: ${skill.baseDir}\n`);
|
|
232
|
-
process.stdout.write(`scope: ${skill.scope}\n`);
|
|
233
|
-
process.stdout.write(`source: ${skill.source}\n`);
|
|
234
|
-
process.stdout.write(`trusted: ${skill.trusted}\n`);
|
|
235
|
-
process.stdout.write(`disableModelInvocation: ${skill.disableModelInvocation}\n`);
|
|
236
|
-
process.stdout.write(`hash: ${skill.hash}\n`);
|
|
237
|
-
if (skill.provenance?.installedBy) {
|
|
238
|
-
process.stdout.write(`installed-by: ${skill.provenance.installedBy}\n`);
|
|
239
|
-
}
|
|
240
|
-
if (skill.diagnostics.length > 0) {
|
|
241
|
-
process.stdout.write("diagnostics:\n");
|
|
242
|
-
for (const diag of skill.diagnostics) process.stdout.write(` ${diag.type}: ${diag.message}\n`);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function formatMarketplaceOrigin(skill: MarketplaceSkill): string {
|
|
247
|
-
const parts = [skill.origin === "catalog" ? "catalog" : "index"];
|
|
248
|
-
if (skill.version) parts.push(`v${skill.version}`);
|
|
249
|
-
if (skill.audit) parts.push(`audit: ${skill.audit}`);
|
|
250
|
-
return parts.join(", ");
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function validationLoad(pathArg: string | undefined): ReturnType<typeof loadSkills> {
|
|
254
|
-
if (!pathArg) return loadSkills({ cwd: process.cwd() });
|
|
255
|
-
return loadSkills({ disableDiscovery: true, explicitSkillPaths: [resolve(pathArg)] });
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
export async function runSkillsCommand(argv: ReadonlyArray<string>): Promise<number> {
|
|
259
|
-
// Routed before the shared parser so the fixed read stays exactly fixed: no
|
|
260
|
-
// skills flag can reach it, and no flag it does not name can be spent on it.
|
|
261
|
-
if (argv[0] === "inventory") {
|
|
262
|
-
const { runSkillsInventory } = await import("./skills-inventory.js");
|
|
263
|
-
return runSkillsInventory(argv.slice(1));
|
|
264
|
-
}
|
|
265
|
-
let parsed: Parsed;
|
|
266
|
-
try {
|
|
267
|
-
parsed = parse(argv);
|
|
268
|
-
} catch (error) {
|
|
269
|
-
printError(error instanceof Error ? error.message : String(error));
|
|
270
|
-
process.stderr.write(HELP);
|
|
2
|
+
import { readSettings } from "../core/config.js";
|
|
3
|
+
import { loadSkills, modelVisibleSkills, skillCatalogValidity } from "../domains/resources/index.js";
|
|
4
|
+
import { formatColumns } from "./shared.js";
|
|
5
|
+
|
|
6
|
+
/** Runtime discovery is a read surface of the library; package mutations live in library.ts. */
|
|
7
|
+
export function runSkillsRead(args: ReadonlyArray<string>): number {
|
|
8
|
+
const command = args[0];
|
|
9
|
+
const positional = args.slice(1).filter((arg) => !arg.startsWith("-"));
|
|
10
|
+
const json = args.includes("--json");
|
|
11
|
+
if (
|
|
12
|
+
(command !== "list" && command !== "validate") ||
|
|
13
|
+
args.slice(1).some((arg) => arg.startsWith("-") && arg !== "--json" && arg !== "--all") ||
|
|
14
|
+
positional.length > (command === "list" ? 0 : 1)
|
|
15
|
+
) {
|
|
16
|
+
process.stderr.write("usage: clio-coder library skills [--all] [--json], or library validate <SKILL.md> [--json]\n");
|
|
271
17
|
return 2;
|
|
272
18
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
const discovery = discoverMarketplaceSkills({ cwd: process.cwd() });
|
|
303
|
-
const installedNames = new Set(list.items.map((skill) => skill.name));
|
|
304
|
-
const matchesQuery = (name: string, description: string): boolean =>
|
|
305
|
-
name.toLowerCase().includes(query) || description.toLowerCase().includes(query);
|
|
306
|
-
const installed = list.items.filter((skill) => matchesQuery(skill.name, skill.description));
|
|
307
|
-
// A catalog group name is the other thing an operator types here, and
|
|
308
|
-
// `install --category git` treats it as a real field: without this,
|
|
309
|
-
// `search git` answered with the skills whose prose mentions git and
|
|
310
|
-
// omitted every member of skills/git/.
|
|
311
|
-
const marketplace = discovery.skills.filter(
|
|
312
|
-
(skill) =>
|
|
313
|
-
!installedNames.has(skill.name) &&
|
|
314
|
-
(matchesQuery(skill.name, skill.description) || skill.category?.toLowerCase() === query),
|
|
315
|
-
);
|
|
316
|
-
// Search must report anything that made the result incomplete: loader
|
|
317
|
-
// diagnostics (like list) plus marketplace discovery diagnostics, so a
|
|
318
|
-
// broken index looks different from a skill that does not exist.
|
|
319
|
-
const exitCode = list.diagnostics.some((diag) => diag.type === "error") ? 1 : 0;
|
|
320
|
-
if (parsed.json) {
|
|
321
|
-
process.stdout.write(
|
|
322
|
-
`${JSON.stringify(
|
|
323
|
-
{ query, installed, marketplace, diagnostics: list.diagnostics, marketplaceDiagnostics: discovery.diagnostics },
|
|
324
|
-
null,
|
|
325
|
-
2,
|
|
326
|
-
)}\n`,
|
|
327
|
-
);
|
|
328
|
-
return exitCode;
|
|
329
|
-
}
|
|
330
|
-
if (installed.length > 0) {
|
|
331
|
-
process.stdout.write("installed:\n");
|
|
332
|
-
for (const skill of installed) {
|
|
333
|
-
process.stdout.write(` ${skill.name.padEnd(24)} ${skill.description} (${skill.scope}/${skill.source})\n`);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
if (marketplace.length > 0) {
|
|
337
|
-
process.stdout.write("marketplace (clio-coder skills install <name>):\n");
|
|
338
|
-
for (const skill of marketplace) {
|
|
339
|
-
process.stdout.write(` ${skill.name.padEnd(24)} ${skill.description} (${formatMarketplaceOrigin(skill)})\n`);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
if (installed.length === 0 && marketplace.length === 0) {
|
|
343
|
-
process.stdout.write(`skills: no matches for "${query}"\n`);
|
|
344
|
-
}
|
|
345
|
-
printDiagnostics(list.diagnostics);
|
|
346
|
-
for (const message of discovery.diagnostics) process.stderr.write(`warning: ${message}\n`);
|
|
347
|
-
return exitCode;
|
|
348
|
-
}
|
|
349
|
-
case "inspect": {
|
|
350
|
-
const name = parsed.positional[0];
|
|
351
|
-
if (!name || parsed.positional.length !== 1) {
|
|
352
|
-
process.stderr.write("usage: clio-coder skills inspect <name> [--json]\n");
|
|
353
|
-
return 2;
|
|
354
|
-
}
|
|
355
|
-
const list = loadSkills({ cwd: process.cwd() });
|
|
356
|
-
const skill = list.items.find((entry) => entry.name === name);
|
|
357
|
-
if (!skill) {
|
|
358
|
-
// inspect reads an installed skill's loaded record, which a marketplace
|
|
359
|
-
// entry does not have yet. Saying "unknown skill" about a name `search`
|
|
360
|
-
// just listed denies the skill exists; name the state and the one
|
|
361
|
-
// command that changes it.
|
|
362
|
-
const available = discoverMarketplaceSkills({ cwd: process.cwd() }).skills.some((entry) => entry.name === name);
|
|
363
|
-
printError(
|
|
364
|
-
available
|
|
365
|
-
? `skill not installed: ${name} (available in the marketplace; install it with: clio-coder skills install ${name})`
|
|
366
|
-
: `unknown skill: ${name}`,
|
|
367
|
-
);
|
|
368
|
-
return 1;
|
|
369
|
-
}
|
|
370
|
-
if (parsed.json) process.stdout.write(`${JSON.stringify({ skill }, null, 2)}\n`);
|
|
371
|
-
else printInspect(skill);
|
|
372
|
-
return 0;
|
|
373
|
-
}
|
|
374
|
-
case "validate": {
|
|
375
|
-
const pathArg = parsed.positional[0];
|
|
376
|
-
if (parsed.positional.length > 1) {
|
|
377
|
-
process.stderr.write("usage: clio-coder skills validate [path] [--json]\n");
|
|
378
|
-
return 2;
|
|
379
|
-
}
|
|
380
|
-
const list = validationLoad(pathArg);
|
|
381
|
-
// The rule itself lives in the loader, because `skills inspect --json`
|
|
382
|
-
// reports the same verdict to a GUI host and a verdict that drifts
|
|
383
|
-
// between the terminal and the browser is worse than no verdict.
|
|
384
|
-
const { ok } = skillCatalogValidity(list);
|
|
385
|
-
if (parsed.json) {
|
|
386
|
-
process.stdout.write(`${JSON.stringify({ ok, skills: list.items, diagnostics: list.diagnostics }, null, 2)}\n`);
|
|
387
|
-
} else {
|
|
388
|
-
printDiagnostics(list.diagnostics);
|
|
389
|
-
process.stdout.write(`${ok ? "valid" : "invalid"}: ${list.items.length} skill(s)\n`);
|
|
390
|
-
}
|
|
391
|
-
return ok ? 0 : 1;
|
|
392
|
-
}
|
|
393
|
-
case "install": {
|
|
394
|
-
let sources = parsed.positional;
|
|
395
|
-
if (parsed.category !== undefined) {
|
|
396
|
-
if (sources.length > 0) {
|
|
397
|
-
process.stderr.write("--category installs a whole catalog group; do not also name skills\n");
|
|
398
|
-
return 2;
|
|
399
|
-
}
|
|
400
|
-
const grouped = discoverMarketplaceSkills().skills.filter((skill) => skill.category === parsed.category);
|
|
401
|
-
if (grouped.length === 0) {
|
|
402
|
-
printError(`no marketplace skills in category "${parsed.category}"`);
|
|
403
|
-
return 1;
|
|
404
|
-
}
|
|
405
|
-
sources = grouped.map((skill) => skill.name);
|
|
406
|
-
}
|
|
407
|
-
if (sources.length === 0) {
|
|
408
|
-
process.stderr.write(
|
|
409
|
-
"usage: clio-coder skills install <name|path|github-url>... [--user|--project] [--name <name>] [--force]\n" +
|
|
410
|
-
" clio-coder skills install --category <category> [--user|--project] [--force]\n",
|
|
411
|
-
);
|
|
412
|
-
return 2;
|
|
413
|
-
}
|
|
414
|
-
// --name renames the destination directory, which can only mean one
|
|
415
|
-
// thing for one source; silently applying it to a list would install
|
|
416
|
-
// every skill over the same directory.
|
|
417
|
-
if (parsed.name !== undefined && sources.length !== 1) {
|
|
418
|
-
process.stderr.write("--name applies to a single skill; install them one at a time to rename\n");
|
|
419
|
-
return 2;
|
|
420
|
-
}
|
|
421
|
-
let failed = 0;
|
|
422
|
-
for (const source of sources) {
|
|
423
|
-
try {
|
|
424
|
-
const result = installSkill({
|
|
425
|
-
source,
|
|
426
|
-
scope: parsed.scope ?? "project",
|
|
427
|
-
force: parsed.force,
|
|
428
|
-
...(parsed.name ? { name: parsed.name } : {}),
|
|
429
|
-
});
|
|
430
|
-
printOk(`installed ${result.scope} skill ${result.name} at ${result.path}`);
|
|
431
|
-
for (const warning of result.warnings) process.stderr.write(`warning: ${warning}\n`);
|
|
432
|
-
} catch (err) {
|
|
433
|
-
failed += 1;
|
|
434
|
-
printError(err instanceof Error ? err.message : String(err));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
if (failed === sources.length) return 1;
|
|
438
|
-
process.stdout.write("audit is set to unknown; review the skill and set audit: pass yourself\n");
|
|
439
|
-
return failed > 0 ? 1 : 0;
|
|
440
|
-
}
|
|
441
|
-
case "update": {
|
|
442
|
-
const name = parsed.positional[0];
|
|
443
|
-
if ((!name && !parsed.all) || parsed.positional.length > 1) {
|
|
444
|
-
process.stderr.write("usage: clio-coder skills update <name> | --all [--force]\n");
|
|
445
|
-
return 2;
|
|
446
|
-
}
|
|
447
|
-
try {
|
|
448
|
-
const reports = updateSkills({
|
|
449
|
-
...(name ? { name } : { all: true }),
|
|
450
|
-
force: parsed.force,
|
|
451
|
-
resolveShaping: resolveMarketplaceShaping(),
|
|
452
|
-
});
|
|
453
|
-
return printUpdateReports(reports);
|
|
454
|
-
} catch (err) {
|
|
455
|
-
printError(err instanceof Error ? err.message : String(err));
|
|
456
|
-
return 1;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
case "sync": {
|
|
460
|
-
try {
|
|
461
|
-
return printUpdateReports(
|
|
462
|
-
updateSkills({ all: true, force: parsed.force, resolveShaping: resolveMarketplaceShaping() }),
|
|
463
|
-
);
|
|
464
|
-
} catch (err) {
|
|
465
|
-
printError(err instanceof Error ? err.message : String(err));
|
|
466
|
-
return 1;
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
case "eval": {
|
|
470
|
-
const name = parsed.positional[0];
|
|
471
|
-
if (!name || parsed.positional.length !== 1) {
|
|
472
|
-
process.stderr.write(
|
|
473
|
-
"usage: clio-coder skills eval <name|path> [--scenario <id>] [--target <id>] [--workspace <path>] [--timeout <seconds>] [--trust-fixtures] [--allow-network] [--json]\n",
|
|
474
|
-
);
|
|
475
|
-
return 2;
|
|
476
|
-
}
|
|
477
|
-
// Dynamic import keeps the eval lane (evidence + eval domains) out of
|
|
478
|
-
// the chunk that clio-coder skills list/search load.
|
|
479
|
-
const { runSkillsEvalCommand } = await import("./skills-eval.js");
|
|
480
|
-
return runSkillsEvalCommand(name, {
|
|
481
|
-
json: parsed.json,
|
|
482
|
-
trustFixtures: parsed.trustFixtures,
|
|
483
|
-
allowNetwork: parsed.allowNetwork,
|
|
484
|
-
...(parsed.scenario !== undefined ? { scenario: parsed.scenario } : {}),
|
|
485
|
-
...(parsed.target !== undefined ? { target: parsed.target } : {}),
|
|
486
|
-
...(parsed.workspace !== undefined ? { workspace: parsed.workspace } : {}),
|
|
487
|
-
...(parsed.timeoutSeconds !== undefined ? { timeoutSeconds: parsed.timeoutSeconds } : {}),
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
default:
|
|
491
|
-
printError(`unknown skills command: ${parsed.command}`);
|
|
492
|
-
process.stderr.write(HELP);
|
|
493
|
-
return 2;
|
|
494
|
-
}
|
|
19
|
+
const list = loadSkills(
|
|
20
|
+
command === "validate" && positional[0]
|
|
21
|
+
? { disableDiscovery: true, explicitSkillPaths: [resolve(positional[0])] }
|
|
22
|
+
: { cwd: process.cwd(), trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports },
|
|
23
|
+
);
|
|
24
|
+
const skills = command === "validate" || args.includes("--all") ? list.items : modelVisibleSkills(list.items);
|
|
25
|
+
const valid =
|
|
26
|
+
command === "validate" ? skillCatalogValidity(list).ok : !list.diagnostics.some((diag) => diag.type === "error");
|
|
27
|
+
if (json)
|
|
28
|
+
process.stdout.write(
|
|
29
|
+
`${JSON.stringify({ ...(command === "validate" ? { ok: valid } : {}), skills, diagnostics: list.diagnostics }, null, 2)}\n`,
|
|
30
|
+
);
|
|
31
|
+
else {
|
|
32
|
+
process.stdout.write(
|
|
33
|
+
formatColumns([
|
|
34
|
+
["name", "scope", "source", "trust", "invoke", "description"],
|
|
35
|
+
...skills.map((skill) => [
|
|
36
|
+
skill.name,
|
|
37
|
+
skill.scope,
|
|
38
|
+
skill.source,
|
|
39
|
+
skill.trusted ? "trusted" : "untrusted",
|
|
40
|
+
skill.disableModelInvocation ? "manual" : "model",
|
|
41
|
+
skill.description,
|
|
42
|
+
]),
|
|
43
|
+
]),
|
|
44
|
+
);
|
|
45
|
+
for (const diagnostic of list.diagnostics) process.stderr.write(`${diagnostic.type}: ${diagnostic.message}\n`);
|
|
46
|
+
}
|
|
47
|
+
return valid ? 0 : 1;
|
|
495
48
|
}
|
package/src/core/bus-events.ts
CHANGED
|
@@ -64,6 +64,7 @@ export const BusChannels = {
|
|
|
64
64
|
CompactionEnd: "compaction.end",
|
|
65
65
|
MiddlewareHookFailed: "middleware.hookFailed",
|
|
66
66
|
ExtensionsReloaded: "extensions.reloaded",
|
|
67
|
+
PluginsReloaded: "plugins.reloaded",
|
|
67
68
|
ExtensionsLoadIssue: "extensions.loadIssue",
|
|
68
69
|
ContextActivity: "context.activity",
|
|
69
70
|
ContextSourcesChanged: "context.sourcesChanged",
|
|
@@ -726,6 +727,9 @@ export interface ExtensionsReloadedPayload {
|
|
|
726
727
|
digest: string;
|
|
727
728
|
}
|
|
728
729
|
|
|
730
|
+
/** Data-only plugin generation publication, independent of extension hook generations. */
|
|
731
|
+
export type PluginsReloadedPayload = ExtensionsReloadedPayload;
|
|
732
|
+
|
|
729
733
|
/** Operator diagnostics for skipped extension or project-hook configuration. */
|
|
730
734
|
export interface ExtensionsLoadIssuePayload {
|
|
731
735
|
message: string;
|
|
@@ -859,6 +863,7 @@ export type BusPayloadMap = {
|
|
|
859
863
|
[BusChannels.CompactionEnd]: CompactionPayload;
|
|
860
864
|
[BusChannels.MiddlewareHookFailed]: MiddlewareHookFailedPayload;
|
|
861
865
|
[BusChannels.ExtensionsReloaded]: ExtensionsReloadedPayload;
|
|
866
|
+
[BusChannels.PluginsReloaded]: PluginsReloadedPayload;
|
|
862
867
|
[BusChannels.ExtensionsLoadIssue]: ExtensionsLoadIssuePayload;
|
|
863
868
|
[BusChannels.ContextActivity]: ContextActivityPayload;
|
|
864
869
|
[BusChannels.ContextSourcesChanged]: ContextSourcesChangedPayload;
|
package/src/core/defaults.ts
CHANGED
|
@@ -283,7 +283,7 @@ export interface ReviewSettings {
|
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
export interface ModelSelectorSettings {
|
|
286
|
-
/** Exact target/model refs
|
|
286
|
+
/** Exact target/model refs used by the scoped model cycle actions. */
|
|
287
287
|
cycleSet: string[];
|
|
288
288
|
/** Exact target/model refs shown in the focused model picker. */
|
|
289
289
|
favorites: string[];
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Recents are runtime state, not user configuration, so they live in the state
|
|
5
5
|
* dir (recent-models.json) and never in settings.yaml. Keeping them out
|
|
6
|
-
* of the settings file means an Alt+
|
|
6
|
+
* of the settings file means an Alt+M model pick does not rewrite settings.yaml
|
|
7
7
|
* just to bump a recency list, which would fire the config watcher in every
|
|
8
8
|
* other running session. Favorites (modelSelector.favorites) remain in
|
|
9
9
|
* settings.yaml because they are deliberate user configuration.
|
|
@@ -72,7 +72,7 @@ export function rememberRecentModel(ref: string, limit: number): string[] {
|
|
|
72
72
|
const next = [ref, ...base.filter((entry) => entry !== ref)].slice(0, max);
|
|
73
73
|
cache = next;
|
|
74
74
|
cachePath = path;
|
|
75
|
-
// An Alt+
|
|
75
|
+
// An Alt+M model pick in a session outliving `clio-coder uninstall` must not
|
|
76
76
|
// rebuild the state root around recent-models.json. The in-memory list still
|
|
77
77
|
// updates so the picker behaves for the rest of the run; see stateRootRemoved().
|
|
78
78
|
if (stateRootRemoved()) return next;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Saved settings (settings.yaml) are defaults shared by every Clio process.
|
|
5
5
|
* Live routing for a running session — active orchestrator target/model/
|
|
6
|
-
* thinking, the fleet default used by /run, and the
|
|
6
|
+
* thinking, the fleet default used by /run, and the configured model-cycle scope list —
|
|
7
7
|
* is owned by the process that is running the session. Each process seeds its
|
|
8
8
|
* routing from saved settings at boot and afterwards reads everything through
|
|
9
9
|
* an effective view: the shared snapshot (targets, theme, safety, retry, …)
|
|
@@ -279,7 +279,7 @@ const ROUTING_FIELD_LABELS: ReadonlyArray<{
|
|
|
279
279
|
},
|
|
280
280
|
{
|
|
281
281
|
field: "chat.modelPicker.cycleSet",
|
|
282
|
-
label: "
|
|
282
|
+
label: "Scoped model cycle set",
|
|
283
283
|
read: (s) => s.chat.modelPicker.cycleSet.join(","),
|
|
284
284
|
},
|
|
285
285
|
];
|
|
@@ -317,7 +317,7 @@ export interface RoutingChangeNotice {
|
|
|
317
317
|
* moves settings.yaml underneath it. One helper feeds every surface — the TUI
|
|
318
318
|
* notification center and the ACP session ledger — so the wording cannot
|
|
319
319
|
* drift. `commandHints` appends the interactive remedies (/settings, /model,
|
|
320
|
-
* Alt+
|
|
320
|
+
* Alt+M), which only make sense where a user can type slash commands.
|
|
321
321
|
*/
|
|
322
322
|
export function routingChangeNotices(
|
|
323
323
|
changedPaths: ReadonlyArray<string>,
|
|
@@ -118,7 +118,7 @@ function tryAcquire(lockPath: string): boolean {
|
|
|
118
118
|
|
|
119
119
|
function timeoutError(lockPath: string, timeoutMs: number): Error {
|
|
120
120
|
return new Error(
|
|
121
|
-
`timed out after ${timeoutMs}ms waiting for ${lockPath} (owner pid=${readLockOwner(lockPath)?.pid ?? "?"}); delete it if no other clio process is running`,
|
|
121
|
+
`timed out after ${timeoutMs}ms waiting for ${lockPath} (owner pid=${readLockOwner(lockPath)?.pid ?? "?"}); delete it if no other clio-coder process is running`,
|
|
122
122
|
);
|
|
123
123
|
}
|
|
124
124
|
|
package/src/core/tool-names.ts
CHANGED
|
@@ -67,3 +67,8 @@ export const ALL_TOOL_NAMES: ReadonlyArray<BuiltinToolName> = Object.values(Tool
|
|
|
67
67
|
export function isBuiltinToolName(name: ToolName): name is BuiltinToolName {
|
|
68
68
|
return (ALL_TOOL_NAMES as ReadonlyArray<string>).includes(name);
|
|
69
69
|
}
|
|
70
|
+
|
|
71
|
+
/** Reserved command-capability namespace. Syntax conveys execution class, never availability. */
|
|
72
|
+
export function isHarnessExtensionToolName(name: string): name is DynamicToolName {
|
|
73
|
+
return name.length <= 64 && /^extension_[a-z0-9][a-z0-9_-]*__[a-z][a-z0-9_]*$/.test(name);
|
|
74
|
+
}
|