@iowarp/clio-coder 0.4.5 → 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 +74 -0
- package/CONTRIBUTING.md +116 -38
- package/NOTICE +24 -0
- package/README.md +341 -682
- package/dist/{acp-H3CU2HBQ.js → acp-W3Y3TRHD.js} +12 -12
- package/dist/{agents-IXQQZ7BD.js → agents-J4ICNLQ3.js} +57 -56
- 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-R7KYF7N3.js → auth-X2UJUMOC.js} +25 -25
- package/dist/{builtins-CRFDQUVP.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-SE4ZKILO.js → chunk-3XE4NRLF.js} +30 -9
- package/dist/{chunk-YYB3MC65.js → chunk-4MFBBY2Z.js} +3 -3
- package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
- package/dist/{chunk-FKIOX6DS.js → chunk-4QKAITQT.js} +10 -5
- package/dist/chunk-4UHVS5T7.js +207 -0
- package/dist/{chunk-VLPTKCKT.js → chunk-5AJPUR72.js} +6 -6
- package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
- package/dist/{chunk-RXIOCVBZ.js → chunk-65BGHOUR.js} +8 -5
- package/dist/{chunk-T53XI6I7.js → chunk-6CA2BHOR.js} +2 -2
- package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
- package/dist/{chunk-HR3HPQ76.js → chunk-6LRLOJHQ.js} +3 -3
- package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
- package/dist/{chunk-WFKDPU7U.js → chunk-6YHPAAZR.js} +3 -3
- package/dist/{chunk-ZMZQEBKI.js → chunk-7EEGBKV4.js} +11 -11
- package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
- package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
- package/dist/{chunk-MDU3C27C.js → chunk-BO4XV5VX.js} +8 -8
- package/dist/{chunk-KF6GFW6O.js → chunk-BQQ5MXUC.js} +11 -11
- package/dist/{chunk-K6RDB7IA.js → chunk-C3G5PNUO.js} +23 -23
- package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
- package/dist/{chunk-U2JOLB7O.js → chunk-CE64C5K5.js} +227 -72
- package/dist/chunk-CP3HIR5H.js +2119 -0
- package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
- package/dist/{chunk-5DDOTTG4.js → chunk-CULVKYTK.js} +5 -5
- package/dist/{chunk-F34AR6O3.js → chunk-D2T66PDV.js} +6 -6
- package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
- package/dist/{chunk-4SVIVOMC.js → chunk-DLIYANB7.js} +20 -15
- package/dist/{chunk-E3BQTQUP.js → chunk-DO7M3LSX.js} +9 -9
- package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
- package/dist/chunk-EM2WNQS2.js +93 -0
- package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
- package/dist/{chunk-UL36QJX6.js → chunk-EUZRMP4Y.js} +18 -16
- package/dist/{chunk-R6MAYTMS.js → chunk-G4LGUTOE.js} +4 -4
- package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
- package/dist/{chunk-XXBQKW32.js → chunk-GFQ7P2UF.js} +7 -7
- package/dist/{chunk-SBZX6ARC.js → chunk-GI5RRMAH.js} +14 -14
- package/dist/{chunk-KDWLXVMN.js → chunk-GVZFCJHE.js} +343 -113
- package/dist/{chunk-633EXGZA.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-KYKNBD4Y.js → chunk-IJMW64DX.js} +978 -258
- package/dist/{chunk-DIMRLNIC.js → chunk-IMOD2YPV.js} +16 -9
- package/dist/{chunk-6CDNRHWH.js → chunk-IQCNVLO6.js} +28 -8
- package/dist/{chunk-UTUNT5QL.js → chunk-ISNCCX42.js} +9 -9
- package/dist/{chunk-RLTT5GVY.js → chunk-IZYTT3CD.js} +9 -5
- package/dist/{chunk-5ZMXGW7P.js → chunk-KAFMW7WM.js} +4 -85
- package/dist/chunk-KKEYGFX4.js +915 -0
- package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
- package/dist/{chunk-UXAC2FX4.js → chunk-L3Z5ANCV.js} +7 -7
- package/dist/{chunk-EHCPSZJF.js → chunk-LBFQMYS3.js} +2 -2
- package/dist/{chunk-QEQISF75.js → chunk-LK2FN5JY.js} +1 -1
- package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
- package/dist/{chunk-DRD2A54W.js → chunk-MBJO5VNZ.js} +18 -18
- package/dist/chunk-MNQN3X6Y.js +595 -0
- package/dist/{chunk-GXCCHKN6.js → chunk-MZHXENL7.js} +7 -7
- package/dist/chunk-MZNWZUJM.js +1801 -0
- package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
- package/dist/{chunk-WLMSOT73.js → chunk-NCCQ6DVS.js} +7 -7
- package/dist/{chunk-TZ7MFRG4.js → chunk-NO7J45X6.js} +170 -53
- package/dist/chunk-OH3YYA3B.js +15 -0
- package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
- package/dist/{chunk-R6MICQYU.js → chunk-PFLOULP3.js} +4 -4
- package/dist/{chunk-MC3JSVR6.js → chunk-QJMRYTCX.js} +7 -7
- package/dist/{chunk-ILJ7DWGE.js → chunk-QKWL7SYE.js} +12 -12
- package/dist/chunk-R2CT5YDO.js +66 -0
- package/dist/chunk-RFCKPS2V.js +26 -0
- package/dist/{chunk-ONRTXOZY.js → chunk-RTLNFZMD.js} +12 -4
- package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
- package/dist/{chunk-S32UQ5GL.js → chunk-SEDI5K5B.js} +18 -18
- package/dist/{chunk-ICO4TQ2F.js → chunk-SELG4SUR.js} +41 -25
- package/dist/{chunk-YEJIG7LN.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-HGSLRG33.js → chunk-TLTGZTXI.js} +3 -3
- package/dist/chunk-TZ6UVP2H.js +637 -0
- package/dist/{chunk-EWD5P3GK.js → chunk-TZHN5ITX.js} +13 -41
- package/dist/{chunk-7TKWWPD7.js → chunk-U3TPUXOQ.js} +398 -253
- package/dist/{chunk-GNQRWTMY.js → chunk-UA3W4FGC.js} +6 -6
- package/dist/{chunk-O2RQ7LCK.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-I7VLWRK2.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-GVYWZNRK.js → chunk-WBVKKTUT.js} +2 -2
- package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
- package/dist/{chunk-SDWNDICN.js → chunk-WN552PKN.js} +573 -316
- package/dist/{chunk-TEG3RYVZ.js → chunk-WT5TRMO4.js} +51 -26
- package/dist/{chunk-NY6IWDVU.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-FSTIBAGM.js → chunk-XZ6UFQ52.js} +11 -11
- package/dist/chunk-Y3JU5RPK.js +8 -0
- package/dist/chunk-YKRJTYNP.js +1143 -0
- package/dist/{chunk-7HBHHVCK.js → chunk-YPRSNUTC.js} +2 -2
- package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
- package/dist/cli/index.js +34 -36
- package/dist/{clio-5I2IBFYL.js → clio-L2P7S2R2.js} +9 -9
- package/dist/{code-nav-YXIAEZVS.js → code-nav-B5LNX4KU.js} +25 -25
- package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
- package/dist/{config-Y2JDJ3JJ.js → config-YXARKGTX.js} +81 -77
- package/dist/configure-LMVQJ46J.js +85 -0
- package/dist/{context-QQ53HSGJ.js → context-7HJEWTTP.js} +92 -48
- package/dist/{context-S2EEC3EJ.js → context-XSZKKFBW.js} +14 -14
- package/dist/{context-P5YSEO55.js → context-YG2LZDYZ.js} +67 -64
- package/dist/{context-clear-TMEQCOTH.js → context-clear-AC5NXHM2.js} +64 -61
- 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-CNLSQN5K.js → context-working-set-F4Q4J3NS.js} +15 -12
- package/dist/{detail-5572VLBO.js → detail-H73BEF2N.js} +65 -62
- package/dist/{dispatch-runner-FRHD6P2O.js → dispatch-runner-3RY5FSJC.js} +83 -80
- package/dist/{doctor-N3LCM2LG.js → doctor-EQYJOGUG.js} +47 -32
- package/dist/{eval-BUU3ZOUZ.js → eval-4P7O6CCE.js} +114 -50
- package/dist/{evidence-DTGEN456.js → evidence-D6GUSYJW.js} +64 -61
- package/dist/{evidence-SQ5DNFEN.js → evidence-O76QF7TZ.js} +69 -65
- package/dist/{evolve-IJNUFZDS.js → evolve-H47BCETS.js} +65 -62
- package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
- package/dist/{fleet-ZNNVSYFO.js → fleet-KMNS6NOM.js} +115 -107
- package/dist/{fleet-commands-5YE7NPJL.js → fleet-commands-DOWSYCBX.js} +15 -15
- package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
- package/dist/{fleet-graph-6HHPWF5T.js → fleet-graph-F2DE2TME.js} +26 -24
- package/dist/{fleet-inspect-JEYMGCGC.js → fleet-inspect-EN2Q6IVB.js} +67 -63
- package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
- package/dist/{fleet-validate-4PM4GDDL.js → fleet-validate-B2XDLS57.js} +28 -29
- package/dist/{fleet-verify-NJDTHTO3.js → fleet-verify-4JKUWGJ7.js} +64 -61
- package/dist/{fleet-view-UP2BWQQY.js → fleet-view-BHJFW26B.js} +67 -63
- package/dist/{init-S3GZQ5ZF.js → init-XAT5N5YM.js} +86 -80
- package/dist/interop-FVECHFKG.js +246 -0
- package/dist/{inventory-K2OZ36YJ.js → inventory-7KFQGLCV.js} +67 -63
- 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-OQOXQGYD.js → memory-DYVTTCP6.js} +65 -62
- package/dist/{models-3IK2Y5WE.js → models-MASFJ6Y2.js} +51 -38
- package/dist/{monitor-FTJLTKCQ.js → monitor-YMP4NXJJ.js} +73 -69
- package/dist/{orchestrator-N47O7SFD.js → orchestrator-AFQRRTEI.js} +4255 -2845
- 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-65U34NG6.js → preload-5Q7VXRFJ.js} +64 -61
- package/dist/{reset-MUVQDLNL.js → reset-7NKZK7JN.js} +11 -9
- package/dist/{resources-LM76COAO.js → resources-NILSIZAT.js} +94 -38
- package/dist/{run-3VFZQ33N.js → run-BPZGEBZV.js} +131 -114
- package/dist/{share-4JUB4BL7.js → share-EZ6ERBMH.js} +31 -28
- package/dist/skills-BTVVNYVM.js +100 -0
- package/dist/{skills-eval-G6T57L7M.js → skills-eval-UY34MNK7.js} +117 -78
- package/dist/{skills-inventory-WLM46PJH.js → skills-inventory-JDHSIA7I.js} +30 -25
- package/dist/{slash-commands-GBARG3Y7.js → slash-commands-K4FNQ2AT.js} +53 -49
- package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
- package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
- package/dist/{targets-N5REUETU.js → targets-44VKGFLN.js} +69 -47
- package/dist/{tasks-6BVY5YZF.js → tasks-3KODKFU7.js} +14 -14
- package/dist/{terminal-lease-57UEOJKS.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-4HD5HAIV.js → upgrade-7PMKM2JH.js} +17 -18
- package/dist/{usage-4GWM2WWP.js → usage-6EQV7EQK.js} +77 -73
- package/dist/{verifiers-GSKWKWVG.js → verifiers-JLITWSHU.js} +16 -16
- package/dist/{verify-3AS3ULCY.js → verify-T7NAEVIG.js} +13 -13
- package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
- package/dist/{wiki-generate-7BV7XWIY.js → wiki-generate-T2TJQJUA.js} +90 -84
- package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
- package/dist/worker/entry.js +297 -88
- 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 +36 -2
- 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 +153 -39
- 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 +186 -80
- package/docs/guide/configuration-and-targets.md +123 -28
- package/docs/guide/configuration-reference.md +36 -38
- 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 +32 -10
- package/docs/guide/glossary.md +2 -2
- package/docs/guide/harness-extensions.md +291 -0
- package/docs/guide/installation-and-lifecycle.md +53 -20
- 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 +15 -15
- package/docs/process/documentation-coverage.md +29 -2
- 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 +22 -6
- 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/ask.ts +10 -10
- package/src/cli/config-inspect.ts +1 -1
- package/src/cli/configure-editor.ts +51 -0
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure-oauth.ts +1 -1
- package/src/cli/configure-onboarding.ts +232 -96
- package/src/cli/configure-prompts.ts +76 -0
- package/src/cli/configure-quick.ts +274 -0
- package/src/cli/configure-target.ts +14 -2
- package/src/cli/configure.ts +415 -176
- 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/oauth-manual-input.ts +1 -1
- package/src/cli/reset.ts +2 -0
- package/src/cli/run.ts +26 -9
- package/src/cli/select.ts +35 -4
- 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/cli/upgrade.ts +2 -2
- package/src/core/bus-events.ts +5 -0
- package/src/core/config.ts +6 -1
- package/src/core/defaults.ts +34 -12
- package/src/{interactive → core}/external-editor.ts +4 -4
- 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/classify.ts +1 -1
- package/src/domains/config/keybindings.ts +156 -124
- 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/providers/probe/fingerprint.ts +13 -6
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
- 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 +68 -52
- package/src/interactive/chat-loop.ts +32 -5
- package/src/interactive/chat-panel.ts +168 -638
- package/src/interactive/chat-renderer.ts +13 -30
- package/src/interactive/clio-editor.ts +53 -21
- package/src/interactive/command-output.ts +56 -1
- package/src/interactive/dispatch-board.ts +1 -3
- package/src/interactive/editor-submit.ts +73 -59
- 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 +12 -4
- package/src/interactive/footer/notifications.ts +2 -2
- package/src/interactive/footer/widgets.ts +52 -93
- package/src/interactive/interactive-application.ts +225 -63
- package/src/interactive/interactive-event-projection.ts +2 -44
- package/src/interactive/interactive-input-runtime.ts +257 -35
- package/src/interactive/interactive-presentation.ts +71 -21
- package/src/interactive/interactive-slash-runtime.ts +40 -48
- package/src/interactive/keybinding-manager.ts +156 -79
- package/src/interactive/keyboard-owner.ts +37 -0
- package/src/interactive/layout.ts +29 -4
- 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-general-openers.ts +2 -0
- package/src/interactive/overlay-key-routing.ts +46 -47
- package/src/interactive/overlay-lifecycle.ts +31 -15
- package/src/interactive/overlay-resource-openers.ts +56 -46
- package/src/interactive/overlay-session-lifecycle.ts +1 -1
- 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 +34 -26
- 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/preview.ts +16 -0
- package/src/interactive/renderers/reference-card.ts +35 -0
- package/src/interactive/renderers/tool-execution.ts +67 -160
- package/src/interactive/renderers/worker-entry.ts +90 -42
- package/src/interactive/slash-autocomplete.ts +100 -7
- package/src/interactive/slash-commands.ts +396 -105
- package/src/interactive/slash-spec.ts +0 -1
- package/src/interactive/status/controller.ts +0 -5
- package/src/interactive/status/state-machine.ts +44 -26
- package/src/interactive/status/types.ts +3 -0
- package/src/interactive/status/verbs.ts +13 -12
- package/src/interactive/terminal-lease.ts +44 -12
- package/src/interactive/transcript-detail.ts +50 -112
- package/src/interactive/turn-queues.ts +8 -7
- package/src/interactive/turn-runtime.ts +1 -1
- package/src/interactive/view/artifacts.ts +4 -0
- package/src/interactive/view/view-overlay.ts +58 -43
- 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/presentation.ts +1 -1
- package/src/tools/registry.ts +20 -2
- package/src/tools/verify/numeric.ts +4 -4
- 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-6SYEGZI3.js +0 -433
- package/dist/chunk-CXQ37WJH.js +0 -45
- package/dist/chunk-EQEJJ53P.js +0 -399
- package/dist/chunk-KTFSFCVN.js +0 -46
- package/dist/chunk-QRFXEO6Y.js +0 -17
- package/dist/chunk-T7FDXNRU.js +0 -1257
- package/dist/chunk-U7VQ4NI4.js +0 -911
- package/dist/configure-SML6UBZ5.js +0 -55
- package/dist/interop-YOTGXFJM.js +0 -115
- package/dist/library-GJI6W6OK.js +0 -226
- package/dist/skills-S36AAJHU.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.",
|
|
@@ -229,7 +231,7 @@ export const SETTINGS_LABELS_BY_ID = {
|
|
|
229
231
|
"retry.maxDelayMs": "Max delay (ms)",
|
|
230
232
|
"retry.streamStallMs": "Stream stall timeout (ms)",
|
|
231
233
|
"terminal.showTerminalProgress": "Terminal progress badges",
|
|
232
|
-
"terminal.outputVerbosity": "Output
|
|
234
|
+
"terminal.outputVerbosity": "Output style",
|
|
233
235
|
"terminal.tuiMode": "TUI mode",
|
|
234
236
|
"terminal.fullscreenScrollbar": "Fullscreen scrollbar",
|
|
235
237
|
"terminal.smoothStreaming": "Smooth streaming",
|
|
@@ -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.",
|
|
@@ -514,7 +516,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
|
|
|
514
516
|
"Written by the confirm flow, not by hand, because confirming a remote here would be the record confirming itself. Sync refuses with library_remote_unconfirmed until this equals library.remote. Default: blank.",
|
|
515
517
|
"library.sync":
|
|
516
518
|
"Off means `clio-coder library sync` and `push` refuse before touching the network, whatever the remote says. Legal values: true, false · default: false.",
|
|
517
|
-
"budget.concurrency":
|
|
519
|
+
"budget.concurrency":
|
|
520
|
+
"auto allows four local workers. A fixed number caps how many workers run at once; the default is one.",
|
|
518
521
|
"skills.trustProjectCompatRoots":
|
|
519
522
|
"Project roots like .claude/skills and .codex/skills are untrusted by default; enabling exposes them to the model.",
|
|
520
523
|
"attribution.gitCommits":
|
|
@@ -539,7 +542,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
|
|
|
539
542
|
"Bind base, custom, and shadow native agents such as scout, researcher, and provenance to profiles. ACP delegation agents cannot be bound.",
|
|
540
543
|
"delegation.defaults.toolGovernance":
|
|
541
544
|
"clio-coder-policy gates the agent through Clio's safety net; agent-managed trusts the agent; deny-all blocks every tool.",
|
|
542
|
-
scope:
|
|
545
|
+
scope:
|
|
546
|
+
"Choose target-level or exact target/model refs. Explicit model-cycle bindings step the chat target through this list.",
|
|
543
547
|
runtimePlugins: "Comma-separated package names, loaded at startup. Restart Clio after changing.",
|
|
544
548
|
"terminal.notify":
|
|
545
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.",
|
|
@@ -550,7 +554,7 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
|
|
|
550
554
|
"watchdog.cadenceToolCalls":
|
|
551
555
|
"Mid-turn firing is how scope drift becomes visible before the turn ends. Leave blank and the watchdog fires at turn end only.",
|
|
552
556
|
keybindings:
|
|
553
|
-
"
|
|
557
|
+
"Alt+O cycles Output style: Compact, Standard, Detailed. Use /view for full reasoning and action details. Shift+Tab changes model thinking effort.",
|
|
554
558
|
};
|
|
555
559
|
|
|
556
560
|
/** Per-value meaning, surfaced for the current value of an enum knob. */
|
|
@@ -623,9 +627,9 @@ const SETTINGS_VALUE_HELP_BY_ID: Partial<Record<EditableSettingId, Record<string
|
|
|
623
627
|
false: "no terminal progress badges",
|
|
624
628
|
},
|
|
625
629
|
"terminal.outputVerbosity": {
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
630
|
+
compact: "quiet action summaries, answers, and visible failures",
|
|
631
|
+
standard: "short reasoning and change previews, clear action outcomes",
|
|
632
|
+
detailed: "larger bounded previews; full content is available in /view",
|
|
629
633
|
},
|
|
630
634
|
"terminal.tuiMode": {
|
|
631
635
|
regular: "preserve terminal scrollback and render the composer below the transcript",
|
|
@@ -834,6 +838,7 @@ export class SubmenuWrapper implements Component {
|
|
|
834
838
|
}
|
|
835
839
|
|
|
836
840
|
handleInput(data: string): void {
|
|
841
|
+
data = localKey(data);
|
|
837
842
|
this.child.handleInput?.(data);
|
|
838
843
|
}
|
|
839
844
|
|
|
@@ -1252,6 +1257,7 @@ class ScopedModelChecklist implements Component {
|
|
|
1252
1257
|
}
|
|
1253
1258
|
|
|
1254
1259
|
handleInput(data: string): void {
|
|
1260
|
+
data = localKey(data);
|
|
1255
1261
|
const kb = getKeybindings();
|
|
1256
1262
|
if (kb.matches(data, "tui.select.up") || data === "k") {
|
|
1257
1263
|
this.selectedRow = this.nextEntryIndex(this.selectedRow - 1, -1);
|
|
@@ -1923,7 +1929,7 @@ function buildSettingItems(settings: Readonly<ClioSettings>, options?: BuildSett
|
|
|
1923
1929
|
values: ["false", "true"],
|
|
1924
1930
|
}),
|
|
1925
1931
|
settingItem("terminal.outputVerbosity", terminal.outputDetail, {
|
|
1926
|
-
values: ["
|
|
1932
|
+
values: ["compact", "standard", "detailed"],
|
|
1927
1933
|
}),
|
|
1928
1934
|
settingItem("terminal.tuiMode", terminal.mode, {
|
|
1929
1935
|
values: ["regular", "fullscreen"],
|
|
@@ -2555,7 +2561,7 @@ function applySettingChange(settings: ClioSettings, id: string, value: string):
|
|
|
2555
2561
|
if (value === "true" || value === "false") settings.interface.terminalProgress = value === "true";
|
|
2556
2562
|
return;
|
|
2557
2563
|
case "terminal.outputVerbosity":
|
|
2558
|
-
if (value === "
|
|
2564
|
+
if (value === "compact" || value === "standard" || value === "detailed") settings.interface.outputDetail = value;
|
|
2559
2565
|
return;
|
|
2560
2566
|
case "terminal.tuiMode":
|
|
2561
2567
|
if (value === "regular" || value === "fullscreen") settings.interface.mode = value;
|
|
@@ -3036,10 +3042,6 @@ function fixedLines(lines: readonly string[], width: number, height: number): st
|
|
|
3036
3042
|
}
|
|
3037
3043
|
|
|
3038
3044
|
/** Typed text, as opposed to an escape sequence or a control byte. */
|
|
3039
|
-
function isPrintableInput(data: string): boolean {
|
|
3040
|
-
if (data.length === 0 || data.startsWith("\u001b")) return false;
|
|
3041
|
-
return Array.from(data).every((character) => character >= " " && character !== "\u007f");
|
|
3042
|
-
}
|
|
3043
3045
|
|
|
3044
3046
|
function scrollWindow(total: number, selected: number, height: number): [number, number] {
|
|
3045
3047
|
if (height <= 0 || total <= height) return [0, total];
|
|
@@ -3302,6 +3304,17 @@ export class SettingsCenter implements Component {
|
|
|
3302
3304
|
* Enter commits it and Esc restores the committed query.
|
|
3303
3305
|
*/
|
|
3304
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
|
+
}
|
|
3305
3318
|
/** Local cycle preview for the selected row; committed on Enter. */
|
|
3306
3319
|
private pendingValue: string | null = null;
|
|
3307
3320
|
|
|
@@ -3359,6 +3372,7 @@ export class SettingsCenter implements Component {
|
|
|
3359
3372
|
* presses and do nothing.
|
|
3360
3373
|
*/
|
|
3361
3374
|
handleInput(data: string): void {
|
|
3375
|
+
data = localKey(data);
|
|
3362
3376
|
if (isKeyRelease(data)) return;
|
|
3363
3377
|
if (matchesKey(data, "escape")) {
|
|
3364
3378
|
this.back();
|
|
@@ -3375,6 +3389,7 @@ export class SettingsCenter implements Component {
|
|
|
3375
3389
|
const kb = getKeybindings();
|
|
3376
3390
|
if (data === "/") {
|
|
3377
3391
|
this.filterDraft = this.filterQuery;
|
|
3392
|
+
this.filterInput.setValue(this.filterDraft);
|
|
3378
3393
|
return;
|
|
3379
3394
|
}
|
|
3380
3395
|
if (matchesKey(data, "tab")) {
|
|
@@ -3458,17 +3473,10 @@ export class SettingsCenter implements Component {
|
|
|
3458
3473
|
this.options.requestRender?.();
|
|
3459
3474
|
return;
|
|
3460
3475
|
}
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
return;
|
|
3466
|
-
}
|
|
3467
|
-
if (isPrintableInput(data)) {
|
|
3468
|
-
this.filterDraft = draft + data;
|
|
3469
|
-
this.normalizeSelection();
|
|
3470
|
-
this.options.requestRender?.();
|
|
3471
|
-
}
|
|
3476
|
+
this.filterInput.handleInput(data);
|
|
3477
|
+
this.filterDraft = this.filterInput.getValue();
|
|
3478
|
+
this.normalizeSelection();
|
|
3479
|
+
this.options.requestRender?.();
|
|
3472
3480
|
}
|
|
3473
3481
|
|
|
3474
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,16 @@
|
|
|
1
|
+
import { truncateToWidth } from "../../engine/tui.js";
|
|
2
|
+
import { clioTheme } from "../theme/index.js";
|
|
3
|
+
|
|
4
|
+
/** Count terminal rows after wrapping, including the inspection hint. */
|
|
5
|
+
export function previewRows(rows: readonly string[], limit: number, width: number, tail = false): string[] {
|
|
6
|
+
if (rows.length <= limit) return [...rows];
|
|
7
|
+
if (limit <= 0) return [];
|
|
8
|
+
const count = Math.max(0, limit - 1);
|
|
9
|
+
const hint = clioTheme().fg("dim", truncateToWidth(`… ${rows.length - count} rows · /view`, Math.max(1, width)));
|
|
10
|
+
return tail ? [hint, ...rows.slice(rows.length - count)] : [...rows.slice(0, count), hint];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Leave room for the composer and action identity in a short terminal. */
|
|
14
|
+
export function previewBudget(limit: number, terminalRows = 40): number {
|
|
15
|
+
return Math.min(limit, Math.max(2, Math.floor((terminalRows - 8) / 2)));
|
|
16
|
+
}
|
|
@@ -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
|
+
}
|