@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
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { BusChannels, type PermissionRequestedPayload } from "../core/bus-events.js";
|
|
2
2
|
import type { ClioSettings } from "../core/config.js";
|
|
3
|
+
import { nextOutputStyle } from "../core/defaults.js";
|
|
3
4
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
4
5
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
5
6
|
import type { PendingSkillRequest } from "../core/skill-activation.js";
|
|
@@ -10,6 +11,7 @@ import type { ClioKeybinding } from "../domains/config/keybindings.js";
|
|
|
10
11
|
import type { ContextState } from "../domains/context/index.js";
|
|
11
12
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
12
13
|
import type { ExtensionsContract } from "../domains/extensions/index.js";
|
|
14
|
+
import { OperatorExtensionRuntime } from "../domains/extensions/operator-runtime.js";
|
|
13
15
|
import type { InteropContract } from "../domains/interop/index.js";
|
|
14
16
|
import type { TaskMemoryOperatorStatus } from "../domains/memory/index.js";
|
|
15
17
|
import { openDetachedBatchViews } from "../domains/middleware/index.js";
|
|
@@ -67,7 +69,6 @@ import type { createYaziBridge, YaziBridge } from "./yazi-bridge.js";
|
|
|
67
69
|
|
|
68
70
|
export {
|
|
69
71
|
IDLE_LEADER_STATE,
|
|
70
|
-
LEADER_TIMEOUT_MS,
|
|
71
72
|
type LeaderKeyController,
|
|
72
73
|
type LeaderKeyControllerDeps,
|
|
73
74
|
type LeaderKeyRouteDeps,
|
|
@@ -124,8 +125,9 @@ export interface InteractiveDeps {
|
|
|
124
125
|
initialNotices?: ReadonlyArray<string>;
|
|
125
126
|
resources?: ResourcesContract;
|
|
126
127
|
extensions?: ExtensionsContract;
|
|
127
|
-
/** `/
|
|
128
|
+
/** `/extensions reload` seam; the composition root supplies the coordinator. */
|
|
128
129
|
reloadExtensions?: SlashCommandContext["reloadExtensions"];
|
|
130
|
+
reloadPlugins?: SlashCommandContext["reloadPlugins"];
|
|
129
131
|
interop?: InteropContract;
|
|
130
132
|
share?: ShareContract;
|
|
131
133
|
/**
|
|
@@ -201,6 +203,12 @@ export interface InteractiveDeps {
|
|
|
201
203
|
registerAskUserHandler?: (handler: AskUserHandler) => () => void;
|
|
202
204
|
/** Live CLIO-CODER.md and memory state for the footer Context quadrant. */
|
|
203
205
|
getContextState?: (cwd?: string) => ContextState;
|
|
206
|
+
/**
|
|
207
|
+
* True when this process resumed an existing session at boot (`--continue`,
|
|
208
|
+
* `--session <id>`). The welcome header opens collapsed so a conversation
|
|
209
|
+
* with history is not topped by fresh-start onboarding.
|
|
210
|
+
*/
|
|
211
|
+
startsResumed?: boolean;
|
|
204
212
|
/**
|
|
205
213
|
* Persist a thinking level set by `/thinking <level>` or `/model <pattern>:<level>`.
|
|
206
214
|
* Scope "session" leaves settings.yaml alone; omitted means the historical
|
|
@@ -272,9 +280,17 @@ export interface InteractiveSubmitExpansion {
|
|
|
272
280
|
images: ImageContent[];
|
|
273
281
|
workingContextPaths: string[];
|
|
274
282
|
pendingSkillRequests: PendingSkillRequest[];
|
|
283
|
+
/**
|
|
284
|
+
* What the transcript paints as the operator's turn when `text` is a prompt
|
|
285
|
+
* template's body: the line they typed, and a note naming the template. The
|
|
286
|
+
* model still receives `text`; a `/wtfp:new-paper` body is several hundred
|
|
287
|
+
* lines the operator never wrote, and painting it as their message buried
|
|
288
|
+
* the command under it.
|
|
289
|
+
*/
|
|
290
|
+
display?: { text: string; note: string };
|
|
275
291
|
}
|
|
276
292
|
|
|
277
|
-
async function expandInteractiveSubmitAsync(
|
|
293
|
+
export async function expandInteractiveSubmitAsync(
|
|
278
294
|
text: string,
|
|
279
295
|
resources: ResourcesContract | undefined,
|
|
280
296
|
cwd = process.cwd(),
|
|
@@ -290,11 +306,18 @@ async function expandInteractiveSubmitAsync(
|
|
|
290
306
|
includeImages: true,
|
|
291
307
|
missing: "leave",
|
|
292
308
|
});
|
|
309
|
+
const display = promptExpansion?.expanded
|
|
310
|
+
? {
|
|
311
|
+
text: parsed.text.trim(),
|
|
312
|
+
note: `expanded prompt template ${promptExpansion.template.name} (${promptExpansion.text.split("\n").length} lines)`,
|
|
313
|
+
}
|
|
314
|
+
: undefined;
|
|
293
315
|
return {
|
|
294
316
|
text: fileExpansion.text,
|
|
295
317
|
images: fileExpansion.images,
|
|
296
318
|
workingContextPaths: fileExpansion.referencedPaths,
|
|
297
319
|
pendingSkillRequests: parsed.pendingSkillRequests,
|
|
320
|
+
...(display ? { display } : {}),
|
|
298
321
|
};
|
|
299
322
|
}
|
|
300
323
|
|
|
@@ -322,15 +345,12 @@ export interface KeyBindingDeps {
|
|
|
322
345
|
openDecisions: () => void;
|
|
323
346
|
backgroundDispatch: () => void;
|
|
324
347
|
openModelSelector: () => void;
|
|
348
|
+
openLibrary: () => void;
|
|
325
349
|
openTree: () => void;
|
|
326
350
|
cycleScopedModelForward: () => void;
|
|
327
351
|
cycleScopedModelBackward: () => void;
|
|
328
352
|
dismissNotifications: () => void;
|
|
329
|
-
|
|
330
|
-
toggleAllToolExpansion: () => void;
|
|
331
|
-
toggleLiveToolOutput: () => void;
|
|
332
|
-
toggleThinkingExpansion: () => void;
|
|
333
|
-
toggleAllThinkingExpansion: () => void;
|
|
353
|
+
cycleOutputStyle: () => void;
|
|
334
354
|
openExternalEditor: () => void;
|
|
335
355
|
queueFollowUp: () => void;
|
|
336
356
|
interruptWithMessage: () => void;
|
|
@@ -359,20 +379,14 @@ export function resolveCtrlCAction(deps: CtrlCActionDeps): CtrlCAction {
|
|
|
359
379
|
return "arm-shutdown";
|
|
360
380
|
}
|
|
361
381
|
|
|
362
|
-
function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
|
|
382
|
+
export function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): boolean {
|
|
363
383
|
switch (id) {
|
|
384
|
+
case "clio-coder.output.cycle":
|
|
385
|
+
deps.cycleOutputStyle();
|
|
386
|
+
return true;
|
|
364
387
|
case "clio-coder.notifications.dismiss":
|
|
365
388
|
deps.dismissNotifications();
|
|
366
389
|
return true;
|
|
367
|
-
case "clio-coder.tool.expand":
|
|
368
|
-
deps.toggleToolExpansion();
|
|
369
|
-
return true;
|
|
370
|
-
case "clio-coder.tool.expandAll":
|
|
371
|
-
deps.toggleAllToolExpansion();
|
|
372
|
-
return true;
|
|
373
|
-
case "clio-coder.tool.liveOutput":
|
|
374
|
-
deps.toggleLiveToolOutput();
|
|
375
|
-
return true;
|
|
376
390
|
case "clio-coder.editor.external":
|
|
377
391
|
deps.openExternalEditor();
|
|
378
392
|
return true;
|
|
@@ -385,12 +399,6 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
|
|
|
385
399
|
case "clio-coder.message.dequeue":
|
|
386
400
|
deps.restoreQueuedFollowUps();
|
|
387
401
|
return true;
|
|
388
|
-
case "clio-coder.thinking.expand":
|
|
389
|
-
deps.toggleThinkingExpansion();
|
|
390
|
-
return true;
|
|
391
|
-
case "clio-coder.thinking.expandAll":
|
|
392
|
-
deps.toggleAllThinkingExpansion();
|
|
393
|
-
return true;
|
|
394
402
|
case "clio-coder.status.toggle":
|
|
395
403
|
deps.toggleStatus();
|
|
396
404
|
return true;
|
|
@@ -418,6 +426,9 @@ function dispatchInteractiveAction(id: ClioKeybinding, deps: KeyBindingDeps): bo
|
|
|
418
426
|
case "clio-coder.model.select":
|
|
419
427
|
deps.openModelSelector();
|
|
420
428
|
return true;
|
|
429
|
+
case "clio-coder.library.toggle":
|
|
430
|
+
deps.openLibrary();
|
|
431
|
+
return true;
|
|
421
432
|
case "clio-coder.model.cycleBackward":
|
|
422
433
|
deps.cycleScopedModelBackward();
|
|
423
434
|
return true;
|
|
@@ -445,6 +456,7 @@ export function routeInteractiveKey(data: string, deps: KeyBindingDeps): boolean
|
|
|
445
456
|
"clio-coder.decisions.open",
|
|
446
457
|
"clio-coder.dispatch.background",
|
|
447
458
|
"clio-coder.model.select",
|
|
459
|
+
"clio-coder.library.toggle",
|
|
448
460
|
// Match cycleBackward before cycleForward so a user rebind where one key
|
|
449
461
|
// is a prefix of the other resolves to the more specific binding first.
|
|
450
462
|
// The defaults (alt+k / alt+j) do not prefix-match each other.
|
|
@@ -551,9 +563,49 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
551
563
|
* rail reads it through the optional chain before then as "no prompt".
|
|
552
564
|
*/
|
|
553
565
|
let overlayLifecycle: OverlayLifecycleController;
|
|
566
|
+
let refreshOperatorUi = (): void => {};
|
|
567
|
+
let scheduleOperatorMaintenance = (): void => {};
|
|
568
|
+
let operatorTimer: ReturnType<typeof setTimeout> | undefined;
|
|
569
|
+
let operatorPanelValid: (() => boolean) | undefined;
|
|
570
|
+
const operatorExtensions = deps.extensions
|
|
571
|
+
? new OperatorExtensionRuntime({
|
|
572
|
+
context: () => ({
|
|
573
|
+
workspace: process.cwd(),
|
|
574
|
+
sessionId: deps.session?.current()?.id ?? deps.getSessionId?.() ?? null,
|
|
575
|
+
mode: "interactive",
|
|
576
|
+
}),
|
|
577
|
+
isIdle: () =>
|
|
578
|
+
!deps.chat.isStreaming() &&
|
|
579
|
+
deps.chat.turnPreparation().phase === "idle" &&
|
|
580
|
+
(overlayLifecycle?.getState() ?? "closed") === "closed" &&
|
|
581
|
+
!editorSubmit?.hasActiveEditorBash(),
|
|
582
|
+
list: (cwd) => deps.extensions?.list(cwd, { all: true }) ?? [],
|
|
583
|
+
...(deps.reloadExtensions ? { commitHooks: deps.reloadExtensions } : {}),
|
|
584
|
+
onChange: () => refreshOperatorUi(),
|
|
585
|
+
...(deps.toolRegistry
|
|
586
|
+
? {
|
|
587
|
+
frozenTools: deps.toolRegistry
|
|
588
|
+
.listAll()
|
|
589
|
+
.flatMap((tool) => (tool.sourceInfo?.extension ? [tool.sourceInfo.extension] : [])),
|
|
590
|
+
}
|
|
591
|
+
: {}),
|
|
592
|
+
onDiagnostic: (message) => notify("warning", message, "operator-extensions:observation"),
|
|
593
|
+
onReload: (result) => {
|
|
594
|
+
if (result.status !== "deferred")
|
|
595
|
+
notify(result.status === "rejected" ? "error" : "info", result.message, "operator-extensions:reload");
|
|
596
|
+
},
|
|
597
|
+
})
|
|
598
|
+
: undefined;
|
|
554
599
|
const presentation = createInteractivePresentation({
|
|
555
600
|
bus: deps.bus,
|
|
556
601
|
getLeaderArmed: () => leaderArmed,
|
|
602
|
+
extensionCommands: () => operatorExtensions?.commands() ?? [],
|
|
603
|
+
getExtensionStatus: () =>
|
|
604
|
+
overlayLifecycle?.getState() === "permission-confirm"
|
|
605
|
+
? []
|
|
606
|
+
: (operatorExtensions?.entries() ?? []).flatMap((entry) =>
|
|
607
|
+
entry.status ? [`${entry.id}: ${entry.status.text}`] : [],
|
|
608
|
+
),
|
|
557
609
|
getShutdownArmed: () => shutdownArmed,
|
|
558
610
|
isAwaitingApproval: () => overlayLifecycle?.getState() === "permission-confirm",
|
|
559
611
|
getPermissionInspection: () => {
|
|
@@ -592,6 +644,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
592
644
|
...(deps.getTaskMemoryStatus ? { getTaskMemoryStatus: deps.getTaskMemoryStatus } : {}),
|
|
593
645
|
...(deps.getTaskMemorySeedOffer ? { getTaskMemorySeedOffer: deps.getTaskMemorySeedOffer } : {}),
|
|
594
646
|
...(deps.getContextState ? { getContextState: deps.getContextState } : {}),
|
|
647
|
+
...(deps.startsResumed === true ? { startsResumed: true } : {}),
|
|
595
648
|
});
|
|
596
649
|
const {
|
|
597
650
|
keybindings,
|
|
@@ -636,6 +689,15 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
636
689
|
: null;
|
|
637
690
|
const detachYaziBridge = yaziBridge ? deps.attachYaziBridge?.(yaziBridge) : undefined;
|
|
638
691
|
refreshPresentationFooter = () => footer.refresh();
|
|
692
|
+
refreshOperatorUi = () => {
|
|
693
|
+
scheduleOperatorMaintenance();
|
|
694
|
+
if (operatorPanelValid && !operatorPanelValid() && overlayLifecycle?.getState() === "extensions") {
|
|
695
|
+
operatorPanelValid = undefined;
|
|
696
|
+
overlayLifecycle.closeOverlay();
|
|
697
|
+
}
|
|
698
|
+
footer.refresh();
|
|
699
|
+
tui.requestRender();
|
|
700
|
+
};
|
|
639
701
|
const agentProgress = createAgentProgress(terminal);
|
|
640
702
|
// Desktop notifications are a protocol write on the terminal owner, issued
|
|
641
703
|
// outside any render transaction, so the sequence carries frameId null and
|
|
@@ -671,12 +733,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
671
733
|
recordToolStart: (toolName, toolCallId) => presentation.recordToolStart(toolCallId, toolName),
|
|
672
734
|
recordToolEnd: (_toolName, toolCallId, isError, truncated) =>
|
|
673
735
|
presentation.recordToolEnd({ toolCallId, isError, truncated }),
|
|
674
|
-
setStatusLine: (line) => chatPanel.setStatusLine(line),
|
|
675
|
-
setLiveReasoning: (view) => chatPanel.setLiveReasoning(view),
|
|
676
736
|
setLastTurnSummary: (summary) => presentation.setLastTurnSummary(summary),
|
|
677
737
|
startTerminalProgress: () => agentProgress.start(),
|
|
678
738
|
stopTerminalProgress: () => agentProgress.stop(),
|
|
679
|
-
onTurnEnded: () =>
|
|
739
|
+
onTurnEnded: () => {
|
|
740
|
+
desktopNotifications.turnEnded();
|
|
741
|
+
operatorExtensions?.observe({ event: "turn_end", reason: "completed" });
|
|
742
|
+
},
|
|
680
743
|
refreshLiveWorkspaceGit,
|
|
681
744
|
refreshFooter: () => footer.refresh(),
|
|
682
745
|
requestRender: () => tui.requestRender(),
|
|
@@ -685,6 +748,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
685
748
|
appendTranscriptNotice: (level, text) => appendNotice(level, text, busNoticeSink),
|
|
686
749
|
refreshSettingsOverlay: () => overlayLifecycle.refreshSettingsOverlay(),
|
|
687
750
|
onConfigHotReload: (settings) => {
|
|
751
|
+
keybindings.reload(settings.interface.keybindings ?? {});
|
|
752
|
+
footer.refresh();
|
|
753
|
+
tui.requestRender();
|
|
688
754
|
const mode = settings.interface.smoothStreaming;
|
|
689
755
|
const autoAllowed = processAutoPacingAllowed(shell.hasObservedBackpressure());
|
|
690
756
|
chatRenderer.setSmoothStreamingMode(mode);
|
|
@@ -700,6 +766,30 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
700
766
|
const toolRegistry = deps.toolRegistry;
|
|
701
767
|
const interopSurface = interop ? interopOverlaySurface(interop, (level, text) => notify(level, text)) : null;
|
|
702
768
|
const slashRuntime = createInteractiveSlashRuntime({
|
|
769
|
+
keyboardActions: {
|
|
770
|
+
background: () => backgroundActiveDispatch(),
|
|
771
|
+
editor: (text) => editorSubmit.openExternalEditorForInput(text),
|
|
772
|
+
interrupt: (text) => editorSubmit.interruptFromEditor(text),
|
|
773
|
+
dismiss: (all) => applicationController.dismissNotifications(all),
|
|
774
|
+
outputLabel: () => keybindings.actionLabel("clio-coder.output.cycle"),
|
|
775
|
+
},
|
|
776
|
+
...(operatorExtensions ? { operatorExtensions } : {}),
|
|
777
|
+
showExtensionOutput: (invocation, output) => {
|
|
778
|
+
const generation = operatorExtensions?.activeGeneration;
|
|
779
|
+
const id = invocation.split(":")[1];
|
|
780
|
+
const valid = () =>
|
|
781
|
+
operatorExtensions
|
|
782
|
+
?.entries()
|
|
783
|
+
.some((entry) => entry.id === id && entry.state === "ready" && entry.generation === generation) ?? false;
|
|
784
|
+
if (!valid()) return;
|
|
785
|
+
if (
|
|
786
|
+
output.panel &&
|
|
787
|
+
!deps.chat.isStreaming() &&
|
|
788
|
+
overlayLifecycle.openExtensionPanelState(id ?? invocation, output.panel, valid)
|
|
789
|
+
)
|
|
790
|
+
operatorPanelValid = valid;
|
|
791
|
+
else slashRuntime.context.showReference?.({ command: invocation, source: "operator extension", text: output.text });
|
|
792
|
+
},
|
|
703
793
|
io,
|
|
704
794
|
bus: deps.bus,
|
|
705
795
|
dispatch: deps.dispatch,
|
|
@@ -710,13 +800,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
710
800
|
chatPanel: {
|
|
711
801
|
appendReplayBlock: (...args) => chatRenderer.mutate(() => chatPanel.appendReplayBlock(...args), "slash-output"),
|
|
712
802
|
appendUser: (text, status) => chatRenderer.mutate(() => chatPanel.appendUser(text, status), "user-submit"),
|
|
713
|
-
clearFoldOverrides: () => chatRenderer.mutate(() => chatPanel.clearFoldOverrides(), "output-detail"),
|
|
714
803
|
},
|
|
715
804
|
beforeSemanticSubmit: () => chatRenderer.flush(),
|
|
716
805
|
settleVisibleFrame: (reason) => chatRenderer.flushAndCommit(reason),
|
|
717
806
|
...(deps.resources ? { resources: deps.resources } : {}),
|
|
718
807
|
...(deps.extensions ? { extensions: deps.extensions } : {}),
|
|
719
808
|
...(deps.reloadExtensions ? { reloadExtensions: deps.reloadExtensions } : {}),
|
|
809
|
+
...(deps.reloadPlugins ? { reloadPlugins: deps.reloadPlugins } : {}),
|
|
720
810
|
...(interopSurface ? { interop: interopSurface } : {}),
|
|
721
811
|
...(deps.agents ? { agents: deps.agents } : {}),
|
|
722
812
|
...(deps.share ? { share: deps.share } : {}),
|
|
@@ -739,7 +829,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
739
829
|
readStructuredEntries,
|
|
740
830
|
expandSubmit: (text) => expandInteractiveSubmitAsync(text, deps.resources),
|
|
741
831
|
openAskUser: (questions, options) => openAskUserOverlayState(questions, options),
|
|
742
|
-
openSkillsHub: (
|
|
832
|
+
openSkillsHub: (request) => openSkillsHubState(request),
|
|
743
833
|
openCost: () => openCostOverlayState(),
|
|
744
834
|
openSideQuestion: (question) => openSideQuestionOverlayState(question),
|
|
745
835
|
startHandoff: (goal) => startHandoffState(goal),
|
|
@@ -776,8 +866,6 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
776
866
|
openTree: () => openTreeOverlayState(),
|
|
777
867
|
openMessagePicker: () => openMessagePickerOverlayState(),
|
|
778
868
|
openHelp: (query) => openHelpOverlayState(query),
|
|
779
|
-
openAgents: () => openAgentsOverlayState(),
|
|
780
|
-
openPrompts: () => openPromptsOverlayState(),
|
|
781
869
|
openExtensions: () => openExtensionsOverlayState(),
|
|
782
870
|
openInterop: () => openInteropOverlayState(),
|
|
783
871
|
openContextReset: () => openContextResetOverlayState(),
|
|
@@ -788,6 +876,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
788
876
|
});
|
|
789
877
|
|
|
790
878
|
const editorSubmit = createEditorSubmitController({
|
|
879
|
+
onLocalBashRunning: presentation.setLocalBashRunning,
|
|
791
880
|
editor,
|
|
792
881
|
ui: tui,
|
|
793
882
|
io,
|
|
@@ -833,6 +922,21 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
833
922
|
interactiveSubscriptions.workers.reset();
|
|
834
923
|
});
|
|
835
924
|
};
|
|
925
|
+
/**
|
|
926
|
+
* The same reset, plus the header collapse that adopting an existing
|
|
927
|
+
* conversation implies. `/resume`, `/tree`, `/fork` and `/handoff` all rebuild
|
|
928
|
+
* the transcript from a session that already has turns, so the launchpad's
|
|
929
|
+
* fresh-start onboarding must not survive above it. `/new` deliberately calls
|
|
930
|
+
* the bare reset above and re-expands the launchpad instead.
|
|
931
|
+
*
|
|
932
|
+
* Collapsing here rather than at each overlay call site keeps one seam for
|
|
933
|
+
* all four paths; `collapseToSessionHeader` is idempotent, so a resume that is
|
|
934
|
+
* immediately submitted to cannot produce a second transition.
|
|
935
|
+
*/
|
|
936
|
+
const adoptExistingConversation = (): void => {
|
|
937
|
+
presentation.collapseWelcomeDashboard();
|
|
938
|
+
resetTranscript();
|
|
939
|
+
};
|
|
836
940
|
overlayLifecycle = createOverlayLifecycle({
|
|
837
941
|
app: deps,
|
|
838
942
|
tui,
|
|
@@ -845,7 +949,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
845
949
|
dispatchBoard,
|
|
846
950
|
setFleetRunPhase: (runId, phase) => dispatchBoardStore.setFleetPhase(runId, phase),
|
|
847
951
|
chatPanel,
|
|
848
|
-
resetTranscript,
|
|
952
|
+
resetTranscript: adoptExistingConversation,
|
|
849
953
|
io,
|
|
850
954
|
readStructuredEntries,
|
|
851
955
|
announceTaskMemorySeedOffer,
|
|
@@ -886,9 +990,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
886
990
|
openTreeOverlayState,
|
|
887
991
|
openMessagePickerOverlayState,
|
|
888
992
|
openHelpOverlayState,
|
|
889
|
-
openAgentsOverlayState,
|
|
890
993
|
openSkillsHubState,
|
|
891
|
-
openPromptsOverlayState,
|
|
892
994
|
openExtensionsOverlayState,
|
|
893
995
|
openInteropOverlayState,
|
|
894
996
|
toggleDispatchBoardOverlay,
|
|
@@ -905,13 +1007,14 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
905
1007
|
const { cancelSelectedDispatch, steerSelectedDispatch } = dispatchSteering;
|
|
906
1008
|
|
|
907
1009
|
const cancelActiveRun = (): void => {
|
|
1010
|
+
operatorExtensions?.cancel();
|
|
908
1011
|
// Esc must not eat typed work: queued steers and follow-ups return to the
|
|
909
1012
|
// editor before the abort, the same restore the reference implementation
|
|
910
1013
|
// performs. cancel() then finds both queues already empty.
|
|
911
1014
|
const restored = deps.chat.clearQueuedFollowUps();
|
|
912
1015
|
if (restored.length > 0) {
|
|
913
|
-
const current = editor.
|
|
914
|
-
editor.
|
|
1016
|
+
const current = editor.getExpandedText();
|
|
1017
|
+
editor.setLiteralText([restored.join("\n\n"), current].filter((part) => part.trim().length > 0).join("\n\n"));
|
|
915
1018
|
}
|
|
916
1019
|
chatRenderer.flush();
|
|
917
1020
|
deps.chat.cancel();
|
|
@@ -936,19 +1039,19 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
936
1039
|
tui.requestRender();
|
|
937
1040
|
};
|
|
938
1041
|
/**
|
|
939
|
-
*
|
|
1042
|
+
* Explicit model-cycle bindings with nothing to step to. The help center documents both
|
|
940
1043
|
* keys, so a keypress that changes no pixel reads as a broken binding rather
|
|
941
|
-
* than as an empty set; the set itself is chosen in `/
|
|
1044
|
+
* than as an empty set; the set itself is chosen in `/settings chat model-picker`.
|
|
942
1045
|
*/
|
|
943
1046
|
const announceEmptyScopedSet = (): void => {
|
|
944
1047
|
notify(
|
|
945
1048
|
"info",
|
|
946
|
-
"scoped models: nothing to cycle to; run /
|
|
1049
|
+
"scoped models: nothing to cycle to; run /settings chat model-picker to choose the configured cycle set",
|
|
947
1050
|
"scoped-models:empty",
|
|
948
1051
|
);
|
|
949
1052
|
};
|
|
950
1053
|
/**
|
|
951
|
-
*
|
|
1054
|
+
* Ctrl+G s / /background. The dispatch tool owns the conversion and answers with
|
|
952
1055
|
* the line to show, so the refusal a review-gated or compete call returns is
|
|
953
1056
|
* rendered verbatim rather than restated here.
|
|
954
1057
|
*/
|
|
@@ -1061,10 +1164,53 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1061
1164
|
});
|
|
1062
1165
|
|
|
1063
1166
|
applicationController = createInteractiveInputRuntime({
|
|
1167
|
+
tui,
|
|
1168
|
+
hasQueuedMessages: () => {
|
|
1169
|
+
const queue = deps.chat.queuedMessages();
|
|
1170
|
+
return queue.steer.length + queue.followUp.length > 0;
|
|
1171
|
+
},
|
|
1172
|
+
explainProtectedExit: () =>
|
|
1173
|
+
notify(
|
|
1174
|
+
"info",
|
|
1175
|
+
`Work or queued messages remain. Cancel with Ctrl+C, recover with ${keybindings.actionLabel("clio-coder.message.dequeue")}, or use /quit.`,
|
|
1176
|
+
"keyboard:exit",
|
|
1177
|
+
),
|
|
1178
|
+
explainThinkingUnavailable: () => notify("info", "This model supports only thinking off", "keyboard:thinking"),
|
|
1179
|
+
explainSearchUnavailable: () =>
|
|
1180
|
+
notify("info", "Clio transcript search requires fullscreen; use your terminal's Find", "keyboard:search"),
|
|
1064
1181
|
keybindings,
|
|
1065
1182
|
dispatchAction: dispatchInteractiveAction,
|
|
1066
1183
|
actions: {
|
|
1067
|
-
canExit: () =>
|
|
1184
|
+
canExit: () => {
|
|
1185
|
+
if (editor.getText().length > 0) return false;
|
|
1186
|
+
const queue = deps.chat.queuedMessages();
|
|
1187
|
+
if (
|
|
1188
|
+
deps.chat.isStreaming() ||
|
|
1189
|
+
deps.chat.turnPreparation().phase !== "idle" ||
|
|
1190
|
+
deps.dispatch.snapshot().running.length > 0 ||
|
|
1191
|
+
editorSubmit.hasActiveEditorBash() ||
|
|
1192
|
+
operatorExtensions?.busy ||
|
|
1193
|
+
queue.steer.length + queue.followUp.length > 0
|
|
1194
|
+
) {
|
|
1195
|
+
notify(
|
|
1196
|
+
"info",
|
|
1197
|
+
`Work or queued messages remain. Cancel with Ctrl+C, recover with ${keybindings.actionLabel("clio-coder.message.dequeue")}, or use /quit.`,
|
|
1198
|
+
"keyboard:exit",
|
|
1199
|
+
);
|
|
1200
|
+
return false;
|
|
1201
|
+
}
|
|
1202
|
+
return true;
|
|
1203
|
+
},
|
|
1204
|
+
cycleOutputStyle: () => {
|
|
1205
|
+
const settings = deps.getSettings?.();
|
|
1206
|
+
if (!settings || !deps.commitSetting) return;
|
|
1207
|
+
presentation.changeOutputStyle(() => {
|
|
1208
|
+
const next = structuredClone(settings) as ClioSettings;
|
|
1209
|
+
next.interface.outputDetail = nextOutputStyle(next.interface.outputDetail);
|
|
1210
|
+
deps.commitSetting?.("interface.outputDetail", next, "session");
|
|
1211
|
+
});
|
|
1212
|
+
footer.refresh();
|
|
1213
|
+
},
|
|
1068
1214
|
availableThinkingLevels: () => availableInteractiveThinkingLevels(deps),
|
|
1069
1215
|
onCycleThinking: () => deps.onCycleThinking?.(),
|
|
1070
1216
|
cycleScopedModelForward: () => {
|
|
@@ -1117,31 +1263,13 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1117
1263
|
steerSelectedDispatch,
|
|
1118
1264
|
cancelSelectedDispatch,
|
|
1119
1265
|
cancelActiveEditorBash: () => editorSubmit.cancelActiveEditorBash(),
|
|
1120
|
-
isStreaming: () =>
|
|
1266
|
+
isStreaming: () =>
|
|
1267
|
+
deps.chat.isStreaming() || deps.chat.turnPreparation().phase !== "idle" || (operatorExtensions?.busy ?? false),
|
|
1121
1268
|
cancelActiveRun,
|
|
1122
1269
|
editor,
|
|
1123
1270
|
editorSubmit,
|
|
1124
1271
|
requestRender: () => tui.requestRender(),
|
|
1125
1272
|
notifications,
|
|
1126
|
-
chatPanel: {
|
|
1127
|
-
toggleLastToolExpanded: () => chatPanel.toggleLastToolExpanded(),
|
|
1128
|
-
toggleAllToolsExpanded: () => chatPanel.toggleAllToolsExpanded(),
|
|
1129
|
-
toggleLiveToolOutput: () => chatPanel.toggleLiveToolOutput(),
|
|
1130
|
-
toggleLastThinking: () => {
|
|
1131
|
-
let changed = false;
|
|
1132
|
-
chatRenderer.mutate(() => {
|
|
1133
|
-
changed = chatPanel.toggleLastThinking();
|
|
1134
|
-
}, "thinking-visibility");
|
|
1135
|
-
return changed;
|
|
1136
|
-
},
|
|
1137
|
-
toggleAllThinking: () => {
|
|
1138
|
-
let changed = false;
|
|
1139
|
-
chatRenderer.mutate(() => {
|
|
1140
|
-
changed = chatPanel.toggleAllThinking();
|
|
1141
|
-
}, "thinking-visibility");
|
|
1142
|
-
return changed;
|
|
1143
|
-
},
|
|
1144
|
-
},
|
|
1145
1273
|
shutdown: {
|
|
1146
1274
|
stopTickers: presentation.stopTickers,
|
|
1147
1275
|
disposeInteractiveTickers: interactiveTickers.dispose,
|
|
@@ -1153,6 +1281,9 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1153
1281
|
stopAgentProgress: agentProgress.stop,
|
|
1154
1282
|
disposeChat: () => deps.chat.dispose(),
|
|
1155
1283
|
disposeSubscriptions: () => {
|
|
1284
|
+
clearTimeout(operatorTimer);
|
|
1285
|
+
for (const unsubscribe of operatorSubscriptions) unsubscribe();
|
|
1286
|
+
void operatorExtensions?.dispose();
|
|
1156
1287
|
detachYaziBridge?.();
|
|
1157
1288
|
yaziBridge?.dispose();
|
|
1158
1289
|
detachWatchPane?.();
|
|
@@ -1181,6 +1312,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1181
1312
|
if (leftBehind !== null) process.stderr.write(`${leftBehind}\n`);
|
|
1182
1313
|
try {
|
|
1183
1314
|
if (dumpInputWedgeOnTerminate) process.off("SIGTERM", dumpInputWedgeOnTerminate);
|
|
1315
|
+
await operatorExtensions?.dispose();
|
|
1184
1316
|
await deps.onShutdown();
|
|
1185
1317
|
} finally {
|
|
1186
1318
|
if (lease) await lease.close();
|
|
@@ -1189,7 +1321,7 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1189
1321
|
},
|
|
1190
1322
|
registerInputListener: (listener) => {
|
|
1191
1323
|
if (lease) lease.registerApplicationInput(listener);
|
|
1192
|
-
else tui.
|
|
1324
|
+
else tui.setApplicationInputPolicy(listener);
|
|
1193
1325
|
},
|
|
1194
1326
|
...(lease
|
|
1195
1327
|
? {
|
|
@@ -1206,6 +1338,36 @@ export async function createInteractiveApplication(deps: InteractiveDeps): Promi
|
|
|
1206
1338
|
: {}),
|
|
1207
1339
|
});
|
|
1208
1340
|
|
|
1341
|
+
const operatorSubscriptions = operatorExtensions
|
|
1342
|
+
? [
|
|
1343
|
+
BusChannels.SessionStart,
|
|
1344
|
+
BusChannels.SessionEnd,
|
|
1345
|
+
BusChannels.SessionParked,
|
|
1346
|
+
BusChannels.SessionResumed,
|
|
1347
|
+
BusChannels.SessionTurnSwitched,
|
|
1348
|
+
].map((channel) => deps.bus.on(channel, () => operatorExtensions.invalidateContext()))
|
|
1349
|
+
: [];
|
|
1350
|
+
scheduleOperatorMaintenance = () => {
|
|
1351
|
+
clearTimeout(operatorTimer);
|
|
1352
|
+
const delay = operatorExtensions?.maintenanceDelayMs;
|
|
1353
|
+
if (delay === undefined || delay === null) return;
|
|
1354
|
+
operatorTimer = setTimeout(() => {
|
|
1355
|
+
operatorExtensions?.maintenance();
|
|
1356
|
+
scheduleOperatorMaintenance();
|
|
1357
|
+
}, delay);
|
|
1358
|
+
operatorTimer.unref();
|
|
1359
|
+
};
|
|
1360
|
+
queueMicrotask(() => {
|
|
1361
|
+
void operatorExtensions?.reload("startup");
|
|
1362
|
+
});
|
|
1363
|
+
getTerminationCoordinator().onDrain(
|
|
1364
|
+
async () => {
|
|
1365
|
+
clearTimeout(operatorTimer);
|
|
1366
|
+
for (const unsubscribe of operatorSubscriptions) unsubscribe();
|
|
1367
|
+
await operatorExtensions?.dispose();
|
|
1368
|
+
},
|
|
1369
|
+
{ timeoutMs: 6500 },
|
|
1370
|
+
);
|
|
1209
1371
|
if (lease) {
|
|
1210
1372
|
const adopted = lease.adopt({
|
|
1211
1373
|
root: presentation.root,
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
import type { ClioSettings } from "../core/config.js";
|
|
12
12
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
13
13
|
import { routingChangeNotices } from "../core/session-routing.js";
|
|
14
|
-
import { visibleWidth } from "../engine/tui.js";
|
|
15
14
|
import {
|
|
16
15
|
budgetAlertNotice,
|
|
17
16
|
middlewareHookFailedSessionNotice,
|
|
@@ -26,27 +25,11 @@ import {
|
|
|
26
25
|
toolBudgetAuditReason,
|
|
27
26
|
toolBudgetStopReason,
|
|
28
27
|
} from "./loop-guard-interrupt.js";
|
|
29
|
-
import {
|
|
30
|
-
type AgentStatus,
|
|
31
|
-
INLINE_STATUS_INDENT_COLS,
|
|
32
|
-
type ReasoningUsageView,
|
|
33
|
-
reasoningFromTally,
|
|
34
|
-
resolveInlineVerb,
|
|
35
|
-
type StatusPhase,
|
|
36
|
-
spinnerFrame,
|
|
37
|
-
type TurnSummary,
|
|
38
|
-
type VerbRender,
|
|
39
|
-
} from "./status/index.js";
|
|
28
|
+
import type { AgentStatus, TurnSummary } from "./status/index.js";
|
|
40
29
|
|
|
41
30
|
export type InteractiveProjectionNoticeLevel = "info" | "success" | "warning" | "error";
|
|
42
31
|
export type InteractiveTranscriptNoticeLevel = "info" | "success" | "warn" | "error";
|
|
43
32
|
|
|
44
|
-
export interface InteractiveStatusLine {
|
|
45
|
-
phase: StatusPhase;
|
|
46
|
-
verb: string;
|
|
47
|
-
toneHint: VerbRender["toneHint"];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
33
|
export interface InteractiveEventProjectionDeps {
|
|
51
34
|
bus: SafeEventBus;
|
|
52
35
|
chat: {
|
|
@@ -69,12 +52,10 @@ export interface InteractiveEventProjectionDeps {
|
|
|
69
52
|
resetAskUserCancellation: () => void;
|
|
70
53
|
recordToolStart: (toolName: string, toolCallId: string) => void;
|
|
71
54
|
recordToolEnd: (toolName: string, toolCallId: string, isError: boolean, truncated: boolean) => void;
|
|
72
|
-
setStatusLine: (line: InteractiveStatusLine | null) => void;
|
|
73
55
|
/**
|
|
74
56
|
* Publish the live turn's reasoning projection to the transcript. Optional so
|
|
75
57
|
* a host without a chat panel still gets every other projection.
|
|
76
58
|
*/
|
|
77
|
-
setLiveReasoning?: (view: ReasoningUsageView | null) => void;
|
|
78
59
|
setLastTurnSummary: (summary: TurnSummary) => void;
|
|
79
60
|
startTerminalProgress: () => void;
|
|
80
61
|
stopTerminalProgress: () => void;
|
|
@@ -126,8 +107,6 @@ function askUserInterviewClosedByToolResult(event: {
|
|
|
126
107
|
* subscriptions.
|
|
127
108
|
*/
|
|
128
109
|
export function createInteractiveEventProjection(deps: InteractiveEventProjectionDeps): InteractiveEventProjection {
|
|
129
|
-
const now = deps.now ?? Date.now;
|
|
130
|
-
|
|
131
110
|
for (const notice of deps.initialNotices ?? []) {
|
|
132
111
|
const text = notice.trim();
|
|
133
112
|
if (text.length === 0) continue;
|
|
@@ -187,30 +166,9 @@ export function createInteractiveEventProjection(deps: InteractiveEventProjectio
|
|
|
187
166
|
}),
|
|
188
167
|
);
|
|
189
168
|
|
|
190
|
-
let statusInlineFrame = 0;
|
|
191
169
|
primaryUnsubscribers.push(
|
|
192
170
|
deps.status.subscribe((status) => {
|
|
193
|
-
|
|
194
|
-
// line, the turn receipt, and the footer state the same number.
|
|
195
|
-
deps.setLiveReasoning?.(
|
|
196
|
-
status.phase === "idle" || status.phase === "ended" ? null : reasoningFromTally(status.runTally),
|
|
197
|
-
);
|
|
198
|
-
if (status.phase === "idle") {
|
|
199
|
-
deps.setStatusLine(null);
|
|
200
|
-
} else if (status.phase === "ended") {
|
|
201
|
-
deps.setStatusLine(null);
|
|
202
|
-
if (status.summary) deps.setLastTurnSummary(status.summary);
|
|
203
|
-
} else {
|
|
204
|
-
const cols = deps.getTerminalColumns();
|
|
205
|
-
const frame = cols < 30 ? "" : `${spinnerFrame(statusInlineFrame)} `;
|
|
206
|
-
const verb = resolveInlineVerb(status, now(), cols, INLINE_STATUS_INDENT_COLS + visibleWidth(frame));
|
|
207
|
-
if (verb) {
|
|
208
|
-
deps.setStatusLine({ phase: status.phase, verb: `${frame}${verb.text}`, toneHint: verb.toneHint });
|
|
209
|
-
statusInlineFrame = (statusInlineFrame + 1) % 10;
|
|
210
|
-
} else {
|
|
211
|
-
deps.setStatusLine(null);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
171
|
+
if (status.phase === "ended" && status.summary) deps.setLastTurnSummary(status.summary);
|
|
214
172
|
deps.refreshFooter();
|
|
215
173
|
deps.requestRender();
|
|
216
174
|
}),
|