@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
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
wrapTextWithAnsi,
|
|
55
55
|
} from "../../engine/tui.js";
|
|
56
56
|
import { clockLocal } from "../format-time.js";
|
|
57
|
+
import { localKey } from "../keyboard-owner.js";
|
|
57
58
|
import { buildHint, DEFAULT_SELECT_THEME, showClioOverlayFrame } from "../overlay-frame.js";
|
|
58
59
|
import { barSep, clioTheme, GLYPH, padAnsi, rule, screenTitle } from "../theme/index.js";
|
|
59
60
|
import { modelsForTarget } from "./model-selector.js";
|
|
@@ -119,6 +120,7 @@ const SELECT_DOWN = "\u001b[B";
|
|
|
119
120
|
/** Settings pickers accept the same j/k navigation as the rows that open them. */
|
|
120
121
|
class SettingsSelectList extends SelectList {
|
|
121
122
|
override handleInput(data: string): void {
|
|
123
|
+
data = localKey(data);
|
|
122
124
|
super.handleInput(data === "j" ? SELECT_DOWN : data === "k" ? SELECT_UP : data);
|
|
123
125
|
}
|
|
124
126
|
}
|
|
@@ -149,7 +151,7 @@ const SETTINGS_SECTION_DESCRIPTIONS = {
|
|
|
149
151
|
orchestrator: "Interactive chat routing, prompt pre-warm, and the optional proactive-memory model plane.",
|
|
150
152
|
fleet: "Defaults, profiles, agent bindings, and route activation for dispatched workers, and where they run.",
|
|
151
153
|
targets: "Configured inference targets: which one chat and the fleet use, and whether each answers.",
|
|
152
|
-
models: "The /model picker, favorites, and
|
|
154
|
+
models: "The /model picker, favorites, and configured model cycling.",
|
|
153
155
|
budget: "Cost ceiling, per-turn output budget, worker concurrency, and the guardrail backstops.",
|
|
154
156
|
compaction: "When and how the context window is evicted and summarized under pressure.",
|
|
155
157
|
retry: "Automatic recovery from transient provider, network, and stalled-stream errors.",
|
|
@@ -422,7 +424,7 @@ const SETTINGS_DESCRIPTIONS_BY_ID = {
|
|
|
422
424
|
"panes.yazi.profile": "Use Clio's managed, themed engine profile or the operator's own file-manager configuration.",
|
|
423
425
|
"panes.yazi.followCwd": "Push the conversation directory into an already-open companion pane.",
|
|
424
426
|
"panes.yazi.ratio": "Share of the height the files dock takes, at most half.",
|
|
425
|
-
scope: "
|
|
427
|
+
scope: "Configured model-cycle action set.",
|
|
426
428
|
"modelSelector.recentLimit": "How many recently used models /model remembers.",
|
|
427
429
|
"modelSelector.favorites": "Exact target/model refs pinned in /model.",
|
|
428
430
|
"budget.sessionCeilingUsd": "Per-session cost cap.",
|
|
@@ -540,7 +542,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
|
|
|
540
542
|
"Bind base, custom, and shadow native agents such as scout, researcher, and provenance to profiles. ACP delegation agents cannot be bound.",
|
|
541
543
|
"delegation.defaults.toolGovernance":
|
|
542
544
|
"clio-coder-policy gates the agent through Clio's safety net; agent-managed trusts the agent; deny-all blocks every tool.",
|
|
543
|
-
scope:
|
|
545
|
+
scope:
|
|
546
|
+
"Choose target-level or exact target/model refs. Explicit model-cycle bindings step the chat target through this list.",
|
|
544
547
|
runtimePlugins: "Comma-separated package names, loaded at startup. Restart Clio after changing.",
|
|
545
548
|
"terminal.notify":
|
|
546
549
|
"OSC 777, or OSC 9 on iTerm2, Windows Terminal, and ConEmu. Interactive TTY runs only; the body never carries prompt text, file paths, or model output.",
|
|
@@ -835,6 +838,7 @@ export class SubmenuWrapper implements Component {
|
|
|
835
838
|
}
|
|
836
839
|
|
|
837
840
|
handleInput(data: string): void {
|
|
841
|
+
data = localKey(data);
|
|
838
842
|
this.child.handleInput?.(data);
|
|
839
843
|
}
|
|
840
844
|
|
|
@@ -1253,6 +1257,7 @@ class ScopedModelChecklist implements Component {
|
|
|
1253
1257
|
}
|
|
1254
1258
|
|
|
1255
1259
|
handleInput(data: string): void {
|
|
1260
|
+
data = localKey(data);
|
|
1256
1261
|
const kb = getKeybindings();
|
|
1257
1262
|
if (kb.matches(data, "tui.select.up") || data === "k") {
|
|
1258
1263
|
this.selectedRow = this.nextEntryIndex(this.selectedRow - 1, -1);
|
|
@@ -3037,10 +3042,6 @@ function fixedLines(lines: readonly string[], width: number, height: number): st
|
|
|
3037
3042
|
}
|
|
3038
3043
|
|
|
3039
3044
|
/** Typed text, as opposed to an escape sequence or a control byte. */
|
|
3040
|
-
function isPrintableInput(data: string): boolean {
|
|
3041
|
-
if (data.length === 0 || data.startsWith("\u001b")) return false;
|
|
3042
|
-
return Array.from(data).every((character) => character >= " " && character !== "\u007f");
|
|
3043
|
-
}
|
|
3044
3045
|
|
|
3045
3046
|
function scrollWindow(total: number, selected: number, height: number): [number, number] {
|
|
3046
3047
|
if (height <= 0 || total <= height) return [0, total];
|
|
@@ -3303,6 +3304,17 @@ export class SettingsCenter implements Component {
|
|
|
3303
3304
|
* Enter commits it and Esc restores the committed query.
|
|
3304
3305
|
*/
|
|
3305
3306
|
private filterDraft: string | null = null;
|
|
3307
|
+
private readonly filterInput = new Input();
|
|
3308
|
+
get keyboardScope(): "edit" | "review" {
|
|
3309
|
+
return this.filterDraft !== null ? "edit" : "review";
|
|
3310
|
+
}
|
|
3311
|
+
undoInput(): boolean {
|
|
3312
|
+
if (this.filterDraft === null) return false;
|
|
3313
|
+
this.filterInput.applyEdit("undo");
|
|
3314
|
+
this.filterDraft = this.filterInput.getValue();
|
|
3315
|
+
this.normalizeSelection();
|
|
3316
|
+
return true;
|
|
3317
|
+
}
|
|
3306
3318
|
/** Local cycle preview for the selected row; committed on Enter. */
|
|
3307
3319
|
private pendingValue: string | null = null;
|
|
3308
3320
|
|
|
@@ -3360,6 +3372,7 @@ export class SettingsCenter implements Component {
|
|
|
3360
3372
|
* presses and do nothing.
|
|
3361
3373
|
*/
|
|
3362
3374
|
handleInput(data: string): void {
|
|
3375
|
+
data = localKey(data);
|
|
3363
3376
|
if (isKeyRelease(data)) return;
|
|
3364
3377
|
if (matchesKey(data, "escape")) {
|
|
3365
3378
|
this.back();
|
|
@@ -3376,6 +3389,7 @@ export class SettingsCenter implements Component {
|
|
|
3376
3389
|
const kb = getKeybindings();
|
|
3377
3390
|
if (data === "/") {
|
|
3378
3391
|
this.filterDraft = this.filterQuery;
|
|
3392
|
+
this.filterInput.setValue(this.filterDraft);
|
|
3379
3393
|
return;
|
|
3380
3394
|
}
|
|
3381
3395
|
if (matchesKey(data, "tab")) {
|
|
@@ -3459,17 +3473,10 @@ export class SettingsCenter implements Component {
|
|
|
3459
3473
|
this.options.requestRender?.();
|
|
3460
3474
|
return;
|
|
3461
3475
|
}
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
return;
|
|
3467
|
-
}
|
|
3468
|
-
if (isPrintableInput(data)) {
|
|
3469
|
-
this.filterDraft = draft + data;
|
|
3470
|
-
this.normalizeSelection();
|
|
3471
|
-
this.options.requestRender?.();
|
|
3472
|
-
}
|
|
3476
|
+
this.filterInput.handleInput(data);
|
|
3477
|
+
this.filterDraft = this.filterInput.getValue();
|
|
3478
|
+
this.normalizeSelection();
|
|
3479
|
+
this.options.requestRender?.();
|
|
3473
3480
|
}
|
|
3474
3481
|
|
|
3475
3482
|
/** The query the catalog is narrowed by right now: the live draft while the
|
|
@@ -2,6 +2,7 @@ import type { SessionContract } from "../../domains/session/contract.js";
|
|
|
2
2
|
import type { TreeSnapshot, TreeSnapshotNode } from "../../domains/session/tree/navigator.js";
|
|
3
3
|
import {
|
|
4
4
|
type Component,
|
|
5
|
+
Input,
|
|
5
6
|
matchesKey,
|
|
6
7
|
type OverlayHandle,
|
|
7
8
|
type TUI,
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
visibleWidth,
|
|
10
11
|
} from "../../engine/tui.js";
|
|
11
12
|
import { clockLocal, dateLocal } from "../format-time.js";
|
|
13
|
+
import { localKey } from "../keyboard-owner.js";
|
|
12
14
|
import { buildHint, clioError, FocusBox, showClioOverlayFrame } from "../overlay-frame.js";
|
|
13
15
|
import { type ClioTheme, clioTheme, GLYPH } from "../theme/index.js";
|
|
14
16
|
|
|
@@ -204,6 +206,13 @@ export class TreeOverlayView implements Component {
|
|
|
204
206
|
private showTimestamps = false;
|
|
205
207
|
private submode: Submode = "browse";
|
|
206
208
|
private labelBuffer = "";
|
|
209
|
+
private readonly labelInput = new Input();
|
|
210
|
+
undoInput(): boolean {
|
|
211
|
+
if (this.submode !== "edit-label") return false;
|
|
212
|
+
this.labelInput.applyEdit("undo");
|
|
213
|
+
this.labelBuffer = this.labelInput.getValue();
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
207
216
|
private status = "";
|
|
208
217
|
private statusKind: "info" | "error" = "info";
|
|
209
218
|
|
|
@@ -300,7 +309,11 @@ export class TreeOverlayView implements Component {
|
|
|
300
309
|
|
|
301
310
|
invalidate(): void {}
|
|
302
311
|
|
|
312
|
+
get keyboardScope(): "edit" | "browse" {
|
|
313
|
+
return this.submode === "edit-label" ? "edit" : "browse";
|
|
314
|
+
}
|
|
303
315
|
handleInput(data: string): void {
|
|
316
|
+
data = localKey(data);
|
|
304
317
|
if (this.submode === "edit-label") {
|
|
305
318
|
this.handleLabelInput(data);
|
|
306
319
|
return;
|
|
@@ -344,6 +357,7 @@ export class TreeOverlayView implements Component {
|
|
|
344
357
|
if (data === "e") {
|
|
345
358
|
this.submode = "edit-label";
|
|
346
359
|
this.labelBuffer = this.currentRow()?.node.label ?? "";
|
|
360
|
+
this.labelInput.setValue(this.labelBuffer);
|
|
347
361
|
this.setStatus("");
|
|
348
362
|
return;
|
|
349
363
|
}
|
|
@@ -375,17 +389,8 @@ export class TreeOverlayView implements Component {
|
|
|
375
389
|
this.refresh();
|
|
376
390
|
return;
|
|
377
391
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
this.labelBuffer = this.labelBuffer.slice(0, -1);
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
// Swallow other control sequences (arrows, etc.) so they do not end up
|
|
384
|
-
// in the label buffer.
|
|
385
|
-
if (data.length === 0) return;
|
|
386
|
-
// Accept printable chars (including multi-byte UTF-8 runs).
|
|
387
|
-
if (data.charCodeAt(0) < 0x20) return;
|
|
388
|
-
this.labelBuffer += data;
|
|
392
|
+
this.labelInput.handleInput(data);
|
|
393
|
+
this.labelBuffer = this.labelInput.getValue();
|
|
389
394
|
}
|
|
390
395
|
|
|
391
396
|
private setStatus(status: string, kind: "info" | "error" = "info"): void {
|
|
@@ -14,6 +14,12 @@ export const MUTATION_PREVIEW_KEY = "v";
|
|
|
14
14
|
*/
|
|
15
15
|
export type PermissionInspectionHint = "none" | "closed" | "open";
|
|
16
16
|
|
|
17
|
+
/** The key that folds and unfolds the standing approval terms on the card. */
|
|
18
|
+
export const PERMISSION_TERMS_KEY = "?";
|
|
19
|
+
|
|
20
|
+
/** Whether the terms are open. The composer rail never shows this key, so it defaults closed there. */
|
|
21
|
+
export type PermissionTermsHint = "closed" | "open";
|
|
22
|
+
|
|
17
23
|
/**
|
|
18
24
|
* The keys that answer a parked call, as data, so the dialog footer and the
|
|
19
25
|
* composer rail render the same policy at any width.
|
|
@@ -46,11 +52,18 @@ export type PermissionInspectionHint = "none" | "closed" | "open";
|
|
|
46
52
|
export function permissionHintEntries(
|
|
47
53
|
composerHasDraft = false,
|
|
48
54
|
inspection: PermissionInspectionHint = "none",
|
|
55
|
+
terms?: PermissionTermsHint,
|
|
49
56
|
): HintEntry[] {
|
|
50
57
|
return [
|
|
51
58
|
composerHasDraft
|
|
52
59
|
? { key: "Backspace", verb: "clear the draft to allow", short: "clear draft", critical: true }
|
|
53
60
|
: { key: "Enter", verb: "allow once", short: "allow", critical: true },
|
|
61
|
+
// The terms key is the card's own and the most droppable entry: the folded
|
|
62
|
+
// card already states what the keys do in one row. It sits before the
|
|
63
|
+
// inspect key so the narrowing drops it first.
|
|
64
|
+
...(terms === undefined
|
|
65
|
+
? []
|
|
66
|
+
: [{ key: PERMISSION_TERMS_KEY, verb: terms === "open" ? "hide terms" : "terms", short: "terms", critical: false }]),
|
|
54
67
|
...(inspection === "none"
|
|
55
68
|
? []
|
|
56
69
|
: inspection === "open"
|
|
@@ -15,12 +15,24 @@ import {
|
|
|
15
15
|
mutationPreviewWindow,
|
|
16
16
|
} from "./mutation-preview.js";
|
|
17
17
|
import { fitHintEntries } from "./overlay-frame.js";
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
MUTATION_PREVIEW_KEY,
|
|
20
|
+
PERMISSION_TERMS_KEY,
|
|
21
|
+
type PermissionInspectionHint,
|
|
22
|
+
type PermissionTermsHint,
|
|
23
|
+
permissionHintEntries,
|
|
24
|
+
} from "./permission-hint.js";
|
|
19
25
|
import type { ClioToken } from "./theme/index.js";
|
|
20
26
|
|
|
21
27
|
export { type AskAxis, askAxis } from "../domains/safety/approval-axis.js";
|
|
22
28
|
export { describeCallTarget, sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
23
|
-
export {
|
|
29
|
+
export {
|
|
30
|
+
MUTATION_PREVIEW_KEY,
|
|
31
|
+
PERMISSION_TERMS_KEY,
|
|
32
|
+
type PermissionInspectionHint,
|
|
33
|
+
type PermissionTermsHint,
|
|
34
|
+
permissionHintEntries,
|
|
35
|
+
} from "./permission-hint.js";
|
|
24
36
|
|
|
25
37
|
export interface ApprovalRequestView {
|
|
26
38
|
requestId: string;
|
|
@@ -106,12 +118,16 @@ export interface PermissionOverlayBodyHandle extends Component {
|
|
|
106
118
|
isInspecting(): boolean;
|
|
107
119
|
toggleInspect(): void;
|
|
108
120
|
scrollInspect(delta: number): void;
|
|
121
|
+
/** The standing approval terms, folded behind `?` (see `permissionOverlayLines`). */
|
|
122
|
+
isShowingTerms(): boolean;
|
|
123
|
+
toggleTerms(): void;
|
|
109
124
|
}
|
|
110
125
|
|
|
111
126
|
class PermissionOverlayBody implements PermissionOverlayBodyHandle {
|
|
112
127
|
private preview: MutationPreview | null = null;
|
|
113
128
|
private scroll = 0;
|
|
114
129
|
private lastLineCount = 0;
|
|
130
|
+
private terms = false;
|
|
115
131
|
|
|
116
132
|
constructor(
|
|
117
133
|
private readonly view: ApprovalRequestView,
|
|
@@ -143,8 +159,16 @@ class PermissionOverlayBody implements PermissionOverlayBodyHandle {
|
|
|
143
159
|
this.scroll = Math.max(0, Math.min(this.scroll + delta, maxScroll));
|
|
144
160
|
}
|
|
145
161
|
|
|
162
|
+
isShowingTerms(): boolean {
|
|
163
|
+
return this.terms;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
toggleTerms(): void {
|
|
167
|
+
this.terms = !this.terms;
|
|
168
|
+
}
|
|
169
|
+
|
|
146
170
|
render(width: number): string[] {
|
|
147
|
-
if (this.preview === null) return permissionOverlayLines(this.view, width);
|
|
171
|
+
if (this.preview === null) return permissionOverlayLines(this.view, width, this.terms);
|
|
148
172
|
const rendered = permissionInspectionLines(this.view, this.preview, width, this.scroll);
|
|
149
173
|
this.lastLineCount = rendered.wrappedLineCount;
|
|
150
174
|
return rendered.lines;
|
|
@@ -153,13 +177,18 @@ class PermissionOverlayBody implements PermissionOverlayBodyHandle {
|
|
|
153
177
|
invalidate(): void {}
|
|
154
178
|
}
|
|
155
179
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
180
|
+
/**
|
|
181
|
+
* `label: value`, folded under the label rather than ellipsized.
|
|
182
|
+
*
|
|
183
|
+
* The target used to end in an ellipsis at the box edge, so a deep path lost
|
|
184
|
+
* its file name, which is the one token that says what the write touches. The
|
|
185
|
+
* value now wraps at spaces and hard-folds a token longer than the row, and a
|
|
186
|
+
* continuation row hangs under the value's first column.
|
|
187
|
+
*/
|
|
188
|
+
function field(label: string, value: string, width: number): string[] {
|
|
189
|
+
const indent = " ".repeat(label.length);
|
|
190
|
+
const rows = wrapSentence(value, Math.max(1, width - label.length));
|
|
191
|
+
return rows.map((row, index) => `${index === 0 ? label : indent}${row}`);
|
|
163
192
|
}
|
|
164
193
|
|
|
165
194
|
/**
|
|
@@ -235,8 +264,9 @@ export function permissionOverlayHint(
|
|
|
235
264
|
innerWidth: number,
|
|
236
265
|
composerHasDraft = false,
|
|
237
266
|
inspection: PermissionInspectionHint = "none",
|
|
267
|
+
terms: PermissionTermsHint = "closed",
|
|
238
268
|
): string {
|
|
239
|
-
return fitHintEntries(permissionHintEntries(composerHasDraft, inspection), innerWidth - 3);
|
|
269
|
+
return fitHintEntries(permissionHintEntries(composerHasDraft, inspection, terms), innerWidth - 3);
|
|
240
270
|
}
|
|
241
271
|
|
|
242
272
|
/** The tools whose parked call mutates a file, so a card without a preview owes the operator a reason. */
|
|
@@ -287,8 +317,8 @@ function permissionInspectionLines(
|
|
|
287
317
|
if (preview.neutralized) notes.push("control characters shown as ·");
|
|
288
318
|
if (preview.tabsExpanded) notes.push("tabs shown as spaces");
|
|
289
319
|
const lines = [
|
|
290
|
-
field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
|
|
291
|
-
...(view.target !== undefined && view.target.length > 0 ?
|
|
320
|
+
...field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
|
|
321
|
+
...(view.target !== undefined && view.target.length > 0 ? field("Target: ", view.target, content) : []),
|
|
292
322
|
...wrapSentence(`Mutation: ${mutationFactsLine(preview.facts)}`, content),
|
|
293
323
|
"",
|
|
294
324
|
...wrapSentence(preview.heading, content),
|
|
@@ -299,6 +329,16 @@ function permissionInspectionLines(
|
|
|
299
329
|
return { lines, wrappedLineCount: wrapped.length };
|
|
300
330
|
}
|
|
301
331
|
|
|
332
|
+
/**
|
|
333
|
+
* The one-row statement of what the three keys do, in the presentation's own
|
|
334
|
+
* words, so the folded card still says what allow, deny, and stop mean.
|
|
335
|
+
*/
|
|
336
|
+
function termsSummary(presentation: DecisionPresentation, actionClass: string): string {
|
|
337
|
+
const stop = presentation.requiredActions.find((action) => action.id === "stop");
|
|
338
|
+
const stopWords = stop?.consequence.includes("main-agent turn") ? "ends the main-agent turn" : "ends the turn";
|
|
339
|
+
return `Allow runs this one ${actionClass} call and leaves the autonomy level alone. Deny skips it. Stop ${stopWords}. Press ${PERMISSION_TERMS_KEY} for the full terms.`;
|
|
340
|
+
}
|
|
341
|
+
|
|
302
342
|
/**
|
|
303
343
|
* The overlay's body, laid out for the width the frame gives it.
|
|
304
344
|
*
|
|
@@ -306,8 +346,14 @@ function permissionInspectionLines(
|
|
|
306
346
|
* rest, so a 40-column terminal saw the safety sentences end mid-word and an
|
|
307
347
|
* 80-column one saw the command being authorized end mid-argument, both with
|
|
308
348
|
* nothing marking the cut.
|
|
349
|
+
*
|
|
350
|
+
* Seven of the card's thirteen rows were then the same on every call: the
|
|
351
|
+
* approval, consequence, reversibility, deny, stop, and hard-block sentences.
|
|
352
|
+
* They are the terms of the decision, not the decision, so they fold behind
|
|
353
|
+
* `?` and the card leads with what changes per call: the tool, the target in
|
|
354
|
+
* full, the mutation facts, and who asked.
|
|
309
355
|
*/
|
|
310
|
-
function permissionOverlayLines(view: ApprovalRequestView, width: number): string[] {
|
|
356
|
+
function permissionOverlayLines(view: ApprovalRequestView, width: number, terms = false): string[] {
|
|
311
357
|
const content = Math.max(8, Math.floor(width));
|
|
312
358
|
const presentation = permissionDecisionPresentation(view);
|
|
313
359
|
// The parked call is awaiting a decision, not blocked: the raw rejection
|
|
@@ -315,19 +361,18 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
|
|
|
315
361
|
// wording contradicts the ask. Tool, Target, Action, and the asking axis
|
|
316
362
|
// carry everything the operator needs to decide.
|
|
317
363
|
const lines = [
|
|
318
|
-
field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
|
|
319
|
-
...(view.target !== undefined && view.target.length > 0 ?
|
|
364
|
+
...field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
|
|
365
|
+
...(view.target !== undefined && view.target.length > 0 ? field("Target: ", view.target, content) : []),
|
|
320
366
|
// Size and digest stay on the collapsed card whether or not the operator
|
|
321
367
|
// opens the mutation, so the decision always carries the identity of the
|
|
322
|
-
// bytes it applies to.
|
|
323
|
-
//
|
|
324
|
-
//
|
|
325
|
-
// to the bytes it applies to.
|
|
368
|
+
// bytes it applies to. Wrapped, never ellipsized: at 40 columns the digest
|
|
369
|
+
// is the tail of the line, and ellipsizing it would drop the one fact that
|
|
370
|
+
// ties the decision to the bytes it applies to.
|
|
326
371
|
...(view.mutation !== undefined
|
|
327
|
-
?
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
372
|
+
? wrapSentence(
|
|
373
|
+
`Mutation: ${mutationFactsLine(view.mutation)} · press ${MUTATION_PREVIEW_KEY} to read it before deciding`,
|
|
374
|
+
content,
|
|
375
|
+
)
|
|
331
376
|
: []),
|
|
332
377
|
...(view.mutation === undefined && view.origin.kind === "worker" && isFileMutationTool(view.tool)
|
|
333
378
|
? wrapSentence(
|
|
@@ -336,6 +381,7 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
|
|
|
336
381
|
)
|
|
337
382
|
: []),
|
|
338
383
|
...wrapSentence(`Requested by: ${presentation.requestedByCopy}`, content),
|
|
384
|
+
...(view.queueDepth !== undefined && view.queueDepth > 1 ? [`1 of ${view.queueDepth} parked`] : []),
|
|
339
385
|
...(view.artifact !== undefined
|
|
340
386
|
? [
|
|
341
387
|
"",
|
|
@@ -344,16 +390,19 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
|
|
|
344
390
|
]
|
|
345
391
|
: []),
|
|
346
392
|
"",
|
|
393
|
+
];
|
|
394
|
+
if (!terms) {
|
|
395
|
+
lines.push(...wrapSentence(termsSummary(presentation, view.actionClass), content));
|
|
396
|
+
return lines;
|
|
397
|
+
}
|
|
398
|
+
lines.push(
|
|
347
399
|
...wrapSentence(`Approval: ${presentation.authorizationCopy}`, content),
|
|
348
400
|
...wrapSentence(`Consequence: ${presentation.consequenceCopy}`, content),
|
|
349
401
|
...wrapSentence(presentation.reversibilityCopy, content),
|
|
350
402
|
...wrapSentence(`Deny: ${actionConsequence(presentation, "deny")}`, content),
|
|
351
403
|
...wrapSentence(`Stop: ${actionConsequence(presentation, "stop")}`, content),
|
|
352
404
|
...wrapSentence("Hard-blocked actions remain blocked.", content),
|
|
353
|
-
|
|
354
|
-
if (view.queueDepth !== undefined && view.queueDepth > 1) {
|
|
355
|
-
lines.splice(lines.indexOf(""), 0, `1 of ${view.queueDepth} parked`);
|
|
356
|
-
}
|
|
405
|
+
);
|
|
357
406
|
return lines;
|
|
358
407
|
}
|
|
359
408
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ResourceSourceInfo } from "../domains/resources/collision.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The package a prompt came from, in the words the operator installed it by.
|
|
5
|
+
* A plugin root's source is `plugin:<scope>:<id>`; the rest are Clio's own
|
|
6
|
+
* roots and the foreign roots it reads, which carry the agent kind and scope.
|
|
7
|
+
* A leaf on purpose: the slash registry names the source in a card and must
|
|
8
|
+
* stay off the render graph.
|
|
9
|
+
*/
|
|
10
|
+
export function promptSourceLabel(sourceInfo: Pick<ResourceSourceInfo, "source" | "scope">): string {
|
|
11
|
+
const source = sourceInfo.source;
|
|
12
|
+
if (source === undefined) return `${sourceInfo.scope} prompts`;
|
|
13
|
+
const plugin = /^plugin:(?:[^:]+):(.+)$/u.exec(source);
|
|
14
|
+
if (plugin?.[1]) return `plugin ${plugin[1]}`;
|
|
15
|
+
if (source === "config") return "user prompts";
|
|
16
|
+
if (source === "project") return "project prompts";
|
|
17
|
+
if (source === "library") return "library";
|
|
18
|
+
const foreign = /^([a-z0-9-]+)-(user|project)$/u.exec(source);
|
|
19
|
+
if (foreign?.[1] && foreign[2]) return `${foreign[1]} ${foreign[2]} prompts`;
|
|
20
|
+
return source;
|
|
21
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { wrapTextWithAnsi } from "../../engine/tui.js";
|
|
2
|
+
import type { PromptReferenceCard } from "../slash-commands.js";
|
|
3
|
+
import { clioTheme, GLYPH } from "../theme/index.js";
|
|
4
|
+
|
|
5
|
+
/** Matches the transcript's prose gutter so the card's body aligns with turns. */
|
|
6
|
+
const CARD_GUTTER = " ";
|
|
7
|
+
const TAB_WIDTH = 4;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* An operator card: a header naming the command and where it came from, then
|
|
11
|
+
* the body wrapped to the width with nothing cut. Box-drawing rows that outrun
|
|
12
|
+
* the width fold onto a second row rather than losing their tail, which is the
|
|
13
|
+
* one rendering rule the card exists for: the words that carry the information
|
|
14
|
+
* are at the ends of the sentences.
|
|
15
|
+
*/
|
|
16
|
+
export function renderReferenceCard(card: PromptReferenceCard, width: number): string[] {
|
|
17
|
+
const theme = clioTheme();
|
|
18
|
+
const safeWidth = Math.max(8, width);
|
|
19
|
+
const header = `${theme.fg("dim", GLYPH.user)} ${theme.style("title", `/${card.command}`, { bold: true })} ${theme.fg(
|
|
20
|
+
"dim",
|
|
21
|
+
`reference · ${card.source}`,
|
|
22
|
+
)}`;
|
|
23
|
+
const lines = wrapTextWithAnsi(header, safeWidth);
|
|
24
|
+
const bodyWidth = Math.max(4, safeWidth - CARD_GUTTER.length);
|
|
25
|
+
for (const raw of card.text.split("\n")) {
|
|
26
|
+
const expanded = raw.replace(/\t/g, " ".repeat(TAB_WIDTH)).trimEnd();
|
|
27
|
+
if (expanded.length === 0) {
|
|
28
|
+
lines.push("");
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
for (const wrapped of wrapTextWithAnsi(expanded, bodyWidth)) lines.push(`${CARD_GUTTER}${wrapped}`);
|
|
32
|
+
}
|
|
33
|
+
lines.push("");
|
|
34
|
+
return lines;
|
|
35
|
+
}
|
|
@@ -75,6 +75,26 @@ function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
|
|
|
75
75
|
return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* A settled worker whose answer is a question for the operator.
|
|
80
|
+
*
|
|
81
|
+
* Materio and WTF-P workers return `needs_input: checkpoint:decision` (or
|
|
82
|
+
* `task_blocked`, or a `## CHECKPOINT REACHED` heading) followed by the
|
|
83
|
+
* questions the orchestrator has to relay. That is a prose convention, not a
|
|
84
|
+
* receipt field, so the transcript reads the first line of the answer.
|
|
85
|
+
*/
|
|
86
|
+
const CHECKPOINT_PREFIX = /^\s*(?:needs_input\b|task_blocked\b|##\s*CHECKPOINT REACHED\b|##\s*BLOCKED\b)/iu;
|
|
87
|
+
/** Rows a checkpoint's body keeps on the folded row: the questions are the point of the entry. */
|
|
88
|
+
const CHECKPOINT_PREVIEW_ROWS = 16;
|
|
89
|
+
|
|
90
|
+
export function workerNeedsInput(entry: Pick<WorkerEntryState, "text" | "receipt">): boolean {
|
|
91
|
+
return entry.receipt !== undefined && entry.receipt.stillRunning !== true && CHECKPOINT_PREFIX.test(entry.text);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function needsInputUnit(): string {
|
|
95
|
+
return theme.fg("warning", `${GLYPH.phaseBlocked} needs input`);
|
|
96
|
+
}
|
|
97
|
+
|
|
78
98
|
/** A block with no settled receipt yet: a spinner-free, honest "running". */
|
|
79
99
|
function pendingUnit(entry: WorkerEntryState): string {
|
|
80
100
|
return theme.fg(
|
|
@@ -100,6 +120,7 @@ function isPending(entry: WorkerEntryState): boolean {
|
|
|
100
120
|
*/
|
|
101
121
|
function footerUnits(entry: WorkerEntryState, receipt: WorkerReceiptSummary): string[] {
|
|
102
122
|
const units = [outcomeUnit(receipt, true)];
|
|
123
|
+
if (workerNeedsInput(entry)) units.push(needsInputUnit());
|
|
103
124
|
if (receipt.exitCode !== undefined && receipt.exitCode !== 0) {
|
|
104
125
|
units.push(theme.fg("error", `exit=${receipt.exitCode}`));
|
|
105
126
|
}
|
|
@@ -374,7 +395,11 @@ function footerLine(entry: WorkerEntryState, width: number): string {
|
|
|
374
395
|
function actionLine(entry: WorkerEntryState, width: number): string {
|
|
375
396
|
const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
|
|
376
397
|
const status =
|
|
377
|
-
isPending(entry) || entry.receipt === undefined
|
|
398
|
+
isPending(entry) || entry.receipt === undefined
|
|
399
|
+
? pendingUnit(entry)
|
|
400
|
+
: workerNeedsInput(entry)
|
|
401
|
+
? needsInputUnit()
|
|
402
|
+
: outcomeUnit(entry.receipt, false);
|
|
378
403
|
const elapsed =
|
|
379
404
|
entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
|
|
380
405
|
const full = ` ${status}${elapsed}`;
|
|
@@ -413,7 +438,14 @@ export function renderWorkerEntryLines(
|
|
|
413
438
|
].map(redactSecretString);
|
|
414
439
|
}
|
|
415
440
|
const budget = (limit: number) => previewBudget(limit, options.terminalRows);
|
|
416
|
-
|
|
441
|
+
// A checkpoint's body is the question the operator answers next, so it keeps
|
|
442
|
+
// its rows whatever the transcript preset hides of an ordinary answer, and
|
|
443
|
+
// it renders in the warning token rather than as folded prose.
|
|
444
|
+
const needsInput = workerNeedsInput(entry);
|
|
445
|
+
const summaryRows = needsInput ? CHECKPOINT_PREVIEW_ROWS : budget(detail.workerRows);
|
|
446
|
+
const summary = bodySourceLines(entry).flatMap((line) =>
|
|
447
|
+
railLines(redactSecretString(line), needsInput ? "warning" : "muted", safeWidth),
|
|
448
|
+
);
|
|
417
449
|
const actions = entry.progress
|
|
418
450
|
? [...entry.progress.recentActions]
|
|
419
451
|
.reverse()
|
|
@@ -431,7 +463,7 @@ export function renderWorkerEntryLines(
|
|
|
431
463
|
const presented = presentedContractAnswer(entry)?.footer;
|
|
432
464
|
return [
|
|
433
465
|
actionLine(entry, safeWidth),
|
|
434
|
-
...(detail.workerRows > 0 ? previewRows(summary,
|
|
466
|
+
...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
|
|
435
467
|
...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
|
|
436
468
|
...(tools ? [tools] : []),
|
|
437
469
|
...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
|