@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
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { existsSync } from "node:fs";
|
|
17
|
-
import { ToolNames } from "../core/tool-names.js";
|
|
18
17
|
import { foldWorkingSet } from "../domains/context/working-set/fold.js";
|
|
19
18
|
import { compactionCut } from "../domains/context/working-set/visible.js";
|
|
20
19
|
import { captureSkillContext } from "../domains/session/compaction/compact.js";
|
|
@@ -52,7 +51,6 @@ import {
|
|
|
52
51
|
} from "../engine/messages.js";
|
|
53
52
|
import { wrapTextWithAnsi } from "../engine/tui.js";
|
|
54
53
|
import type { AgentMessage } from "../engine/types.js";
|
|
55
|
-
import { toolPresentationPolicy } from "../tools/presentation.js";
|
|
56
54
|
import { toolResultPresentationText } from "../tools/result-disposition.js";
|
|
57
55
|
import type { ChatLoopEvent, RetryStatusPayload } from "./chat-loop.js";
|
|
58
56
|
import { isSelfExplainingAbort, toolResultSummary } from "./chat-loop-messages.js";
|
|
@@ -69,7 +67,7 @@ import {
|
|
|
69
67
|
type StreamPacer,
|
|
70
68
|
type StreamPacerSlice,
|
|
71
69
|
} from "./stream-pacer.js";
|
|
72
|
-
import
|
|
70
|
+
import type { TranscriptDetailPolicy } from "./transcript-detail.js";
|
|
73
71
|
import { readWorkerReceiptFactsForReplay } from "./worker-receipts.js";
|
|
74
72
|
import { workerEntriesFromRunEntries } from "./worker-replay.js";
|
|
75
73
|
import type { WorkerReceiptReader } from "./worker-stream.js";
|
|
@@ -804,25 +802,24 @@ function appendReplayLine(chatPanel: ChatPanel, text: string): void {
|
|
|
804
802
|
function renderBashExecutionEntry(
|
|
805
803
|
entry: BashExecutionEntry,
|
|
806
804
|
width: number,
|
|
807
|
-
|
|
805
|
+
detail: TranscriptDetailPolicy,
|
|
808
806
|
unbounded: boolean,
|
|
809
807
|
): string[] {
|
|
810
808
|
const normalizedOutput = entry.output.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\s+$/g, "");
|
|
811
809
|
return renderBashTranscriptExecution(
|
|
812
810
|
{
|
|
813
811
|
command: entry.command,
|
|
814
|
-
output:
|
|
812
|
+
output: normalizedOutput,
|
|
815
813
|
running: false,
|
|
816
814
|
exitCode: entry.exitCode,
|
|
817
815
|
cancelled: entry.cancelled,
|
|
818
816
|
truncated: entry.truncated,
|
|
819
817
|
fullOutputPath: entry.fullOutputPath,
|
|
820
818
|
excludeFromContext: entry.excludeFromContext,
|
|
821
|
-
folded,
|
|
822
819
|
},
|
|
823
820
|
width,
|
|
824
821
|
undefined,
|
|
825
|
-
{ unbounded, diffStyle: "plain" },
|
|
822
|
+
{ unbounded, diffStyle: "plain", detail },
|
|
826
823
|
);
|
|
827
824
|
}
|
|
828
825
|
|
|
@@ -1259,16 +1256,16 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1259
1256
|
case "message": {
|
|
1260
1257
|
if (entry.role === "user") {
|
|
1261
1258
|
runAssistantMessages = [];
|
|
1262
|
-
const text =
|
|
1259
|
+
const text = replayedUserText(entry);
|
|
1263
1260
|
if (text.length > 0) chatPanel.appendUser(text);
|
|
1264
1261
|
break;
|
|
1265
1262
|
}
|
|
1266
1263
|
if (entry.role === "assistant") {
|
|
1267
1264
|
const text = chatMessageText(entry);
|
|
1268
1265
|
const failure = messageFailure(entry);
|
|
1269
|
-
const richMessage = richMessageFromEntry(entry,
|
|
1266
|
+
const richMessage = richMessageFromEntry(entry, Number.POSITIVE_INFINITY);
|
|
1270
1267
|
if (richMessage || text.length > 0 || failure) {
|
|
1271
|
-
const message = richMessage ?? makeTextMessage("assistant",
|
|
1268
|
+
const message = richMessage ?? makeTextMessage("assistant", text, entry.timestamp);
|
|
1272
1269
|
if (failure) {
|
|
1273
1270
|
(message as { stopReason?: string; errorMessage?: string }).stopReason = failure.stopReason;
|
|
1274
1271
|
(message as { stopReason?: string; errorMessage?: string }).errorMessage = failure.errorMessage;
|
|
@@ -1303,7 +1300,7 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1303
1300
|
type: "tool_execution_end",
|
|
1304
1301
|
toolCallId: fallbackId,
|
|
1305
1302
|
toolName: result.name,
|
|
1306
|
-
result: displayReplayToolResult(result.result,
|
|
1303
|
+
result: displayReplayToolResult(result.result, true),
|
|
1307
1304
|
isError: result.isError,
|
|
1308
1305
|
...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
|
|
1309
1306
|
...(resultSummary !== undefined ? { resultSummary } : {}),
|
|
@@ -1312,12 +1309,12 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1312
1309
|
...(evictedReason !== undefined ? { evictedReason } : {}),
|
|
1313
1310
|
} as ChatLoopEvent);
|
|
1314
1311
|
} else {
|
|
1315
|
-
chatPanel.appendReplayBlock((width) =>
|
|
1312
|
+
chatPanel.appendReplayBlock((width, detail, unbounded) =>
|
|
1316
1313
|
renderToolResultOnly(
|
|
1317
1314
|
{
|
|
1318
1315
|
toolCallId: result.id ?? "",
|
|
1319
1316
|
toolName: result.name,
|
|
1320
|
-
result: displayReplayToolResult(result.result,
|
|
1317
|
+
result: displayReplayToolResult(result.result, true),
|
|
1321
1318
|
isError: result.isError,
|
|
1322
1319
|
...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {}),
|
|
1323
1320
|
...(resultSummary !== undefined ? { resultSummary } : {}),
|
|
@@ -1326,7 +1323,7 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1326
1323
|
...(evictedReason !== undefined ? { evictedReason } : {}),
|
|
1327
1324
|
},
|
|
1328
1325
|
width,
|
|
1329
|
-
{ unbounded: options.unboundedToolBodies === true },
|
|
1326
|
+
{ unbounded: unbounded || options.unboundedToolBodies === true, detail },
|
|
1330
1327
|
),
|
|
1331
1328
|
);
|
|
1332
1329
|
}
|
|
@@ -1345,21 +1342,8 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1345
1342
|
break;
|
|
1346
1343
|
}
|
|
1347
1344
|
case "bashExecution": {
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
const policyFold = (detail: TranscriptDetailPolicy) => policyToolFold(detail, presentation);
|
|
1351
|
-
const unbounded = options.unboundedToolBodies === true;
|
|
1352
|
-
chatPanel.appendReplayBlock(
|
|
1353
|
-
(width, detail) =>
|
|
1354
|
-
renderBashExecutionEntry(entry, width, resolveFold(fold, policyFold(detail)) === "folded", unbounded),
|
|
1355
|
-
undefined,
|
|
1356
|
-
{
|
|
1357
|
-
policyFold,
|
|
1358
|
-
fold: () => fold,
|
|
1359
|
-
setFold: (next: FoldOverride) => {
|
|
1360
|
-
fold = next;
|
|
1361
|
-
},
|
|
1362
|
-
},
|
|
1345
|
+
chatPanel.appendReplayBlock((width, detail, unbounded) =>
|
|
1346
|
+
renderBashExecutionEntry(entry, width, detail, unbounded || options.unboundedToolBodies === true),
|
|
1363
1347
|
);
|
|
1364
1348
|
break;
|
|
1365
1349
|
}
|
|
@@ -1427,5 +1411,4 @@ export function rehydrateChatPanelFromTurns(
|
|
|
1427
1411
|
// whatever the operator had opened or folded before the switch belonged to
|
|
1428
1412
|
// the transcript they left. /export reaches the same policy with a verbose
|
|
1429
1413
|
// panel, so nothing here is terminal-only.
|
|
1430
|
-
chatPanel.clearFoldOverrides();
|
|
1431
1414
|
}
|
|
@@ -112,7 +112,7 @@ function composerMode(chrome: EditorChrome, text: string): ComposerMode {
|
|
|
112
112
|
function lowerRailHint(theme: ClioTheme, chrome: EditorChrome): string {
|
|
113
113
|
return theme.fg(
|
|
114
114
|
"dim",
|
|
115
|
-
`${chrome.getSubmitKeyLabel?.() ?? "Enter"} send · ${chrome.getNewlineKeyLabel?.() ?? "
|
|
115
|
+
`${chrome.getSubmitKeyLabel?.() ?? "Enter"} send · ${chrome.getNewlineKeyLabel?.() ?? "Ctrl+J"} newline`,
|
|
116
116
|
);
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -205,6 +205,25 @@ function startsWithPastedOperator(text: string, pastedBangOffsets: ReadonlySet<n
|
|
|
205
205
|
export class ClioEditor extends Editor {
|
|
206
206
|
private pastedBangOffsets = new Set<number>();
|
|
207
207
|
private bracketedPasteActive = false;
|
|
208
|
+
private revision = 0;
|
|
209
|
+
private pastedOperatorTokens = new Set<string>();
|
|
210
|
+
|
|
211
|
+
get draftRevision(): number {
|
|
212
|
+
return this.revision;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Restored queues and external buffers are literal editor content. */
|
|
216
|
+
setLiteralText(text: string): void {
|
|
217
|
+
this.setText(text);
|
|
218
|
+
this.pastedBangOffsets = new Set([...text.matchAll(/!/gu)].map((match) => match.index));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
override applyEdit(operation: Parameters<Editor["applyEdit"]>[0]): void {
|
|
222
|
+
const before = this.getText();
|
|
223
|
+
super.applyEdit(operation);
|
|
224
|
+
this.revision += 1;
|
|
225
|
+
this.pastedBangOffsets = remapPastedBangOffsets(before, this.getText(), this.pastedBangOffsets, operation === "undo");
|
|
226
|
+
}
|
|
208
227
|
|
|
209
228
|
constructor(
|
|
210
229
|
tui: TUI,
|
|
@@ -270,18 +289,20 @@ export class ClioEditor extends Editor {
|
|
|
270
289
|
*/
|
|
271
290
|
getTextForSubmit(): string {
|
|
272
291
|
const text = this.getExpandedText();
|
|
273
|
-
return
|
|
292
|
+
return this.startsWithLiteralOperator() ? guardPastedEditorOperator(text) : text;
|
|
274
293
|
}
|
|
275
294
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
295
|
+
private startsWithLiteralOperator(): boolean {
|
|
296
|
+
const visible = this.getText();
|
|
297
|
+
return (
|
|
298
|
+
startsWithPastedOperator(visible, this.pastedBangOffsets) ||
|
|
299
|
+
[...this.pastedOperatorTokens].some((token) => visible.trimStart().startsWith(token))
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** Paste is always literal; a later deliberate key submits it. */
|
|
284
304
|
override handleInput(data: string): void {
|
|
305
|
+
this.revision += 1;
|
|
285
306
|
const openedPaste = data.includes("\x1b[200~");
|
|
286
307
|
const closedPaste = data.includes("\x1b[201~");
|
|
287
308
|
const pasteMutation = this.bracketedPasteActive || openedPaste;
|
|
@@ -291,10 +312,7 @@ export class ClioEditor extends Editor {
|
|
|
291
312
|
// pasted bang draft for that synchronous handoff so the Bash parser can
|
|
292
313
|
// distinguish it from a typed operator; the submit controller unwraps it
|
|
293
314
|
// before sending the literal prompt onward.
|
|
294
|
-
if (
|
|
295
|
-
startsWithPastedOperator(textBeforeInput, this.pastedBangOffsets) &&
|
|
296
|
-
keybindings.matches(data, "tui.input.submit")
|
|
297
|
-
) {
|
|
315
|
+
if (this.startsWithLiteralOperator() && keybindings.matches(data, "tui.input.submit")) {
|
|
298
316
|
const pastedText = this.getTextForSubmit();
|
|
299
317
|
this.pastedBangOffsets.clear();
|
|
300
318
|
this.bracketedPasteActive = false;
|
|
@@ -322,16 +340,30 @@ export class ClioEditor extends Editor {
|
|
|
322
340
|
);
|
|
323
341
|
if (openedPaste) this.bracketedPasteActive = true;
|
|
324
342
|
if (closedPaste) this.bracketedPasteActive = false;
|
|
325
|
-
if (
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
343
|
+
if (pasteMutation && textAfterInput !== this.getExpandedText()) {
|
|
344
|
+
// A large paste is represented by an opaque visible token. Remember the
|
|
345
|
+
// inserted token through edits and undo, without depending on its format.
|
|
346
|
+
let start = 0;
|
|
347
|
+
while (
|
|
348
|
+
start < textBeforeInput.length &&
|
|
349
|
+
start < textAfterInput.length &&
|
|
350
|
+
textBeforeInput[start] === textAfterInput[start]
|
|
351
|
+
)
|
|
352
|
+
start++;
|
|
353
|
+
let oldEnd = textBeforeInput.length,
|
|
354
|
+
end = textAfterInput.length;
|
|
355
|
+
while (oldEnd > start && end > start && textBeforeInput[oldEnd - 1] === textAfterInput[end - 1]) {
|
|
356
|
+
oldEnd--;
|
|
357
|
+
end--;
|
|
358
|
+
}
|
|
359
|
+
const token = textAfterInput.slice(start, end).trimStart();
|
|
360
|
+
if (token && !token.startsWith("!")) this.pastedOperatorTokens.add(token);
|
|
361
|
+
}
|
|
332
362
|
}
|
|
333
363
|
|
|
334
364
|
override setText(text: string): void {
|
|
365
|
+
this.revision += 1;
|
|
366
|
+
this.pastedOperatorTokens.clear();
|
|
335
367
|
this.pastedBangOffsets.clear();
|
|
336
368
|
this.bracketedPasteActive = false;
|
|
337
369
|
super.setText(text);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { wrapTextWithAnsi } from "../engine/tui.js";
|
|
2
|
-
import
|
|
2
|
+
import { renderReferenceCard } from "./renderers/reference-card.js";
|
|
3
|
+
import type { PromptReferenceCard, RunIo } from "./slash-commands.js";
|
|
3
4
|
import { type ClioToken, clioTheme, GLYPH } from "./theme/index.js";
|
|
4
5
|
|
|
5
6
|
export type NoticeLevel = "info" | "success" | "warn" | "error";
|
|
@@ -54,6 +55,60 @@ export function appendOperatorCommand(text: string, sink: CommandOutputSink): vo
|
|
|
54
55
|
sink.requestRender();
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Render a display-only prompt template for the operator. A replay block like
|
|
60
|
+
* the command echo above: it is never persisted as a session entry and never
|
|
61
|
+
* reaches the model, which is what "display only" promises the author.
|
|
62
|
+
*/
|
|
63
|
+
export function appendReferenceCard(card: PromptReferenceCard, sink: CommandOutputSink): void {
|
|
64
|
+
sink.appendReplayBlock((width) => renderReferenceCard(card, width));
|
|
65
|
+
sink.requestRender();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A dim line under an operator turn, in the prose gutter, saying something
|
|
70
|
+
* about the turn that the operator did not type: which template expanded, how
|
|
71
|
+
* long it was. Transcript-only, like the echo above.
|
|
72
|
+
*/
|
|
73
|
+
export function appendOperatorAside(text: string, sink: CommandOutputSink): void {
|
|
74
|
+
const normalized = text.replace(/\r/g, "").replace(/\n+/gu, " ").trim();
|
|
75
|
+
if (normalized.length === 0) return;
|
|
76
|
+
sink.appendReplayBlock((width) => {
|
|
77
|
+
const theme = clioTheme();
|
|
78
|
+
return wrapTextWithAnsi(theme.fg("dim", normalized), Math.max(1, width - 2)).map((line) => ` ${line}`);
|
|
79
|
+
});
|
|
80
|
+
sink.requestRender();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface InterviewRecordEntry {
|
|
84
|
+
/** The question's header, or its first line when it has none. */
|
|
85
|
+
label: string;
|
|
86
|
+
answer: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* What a round of an interview asked and what the operator answered, kept in
|
|
91
|
+
* the transcript once the overlay has moved on. Without it the round left
|
|
92
|
+
* only a tool row reading `▸ tool action {"action":"ask",…`, and the answers
|
|
93
|
+
* lived on `/decisions` alone.
|
|
94
|
+
*/
|
|
95
|
+
export function appendInterviewRecord(entries: ReadonlyArray<InterviewRecordEntry>, sink: CommandOutputSink): void {
|
|
96
|
+
const kept = entries.filter((entry) => entry.answer.trim().length > 0);
|
|
97
|
+
if (kept.length === 0) return;
|
|
98
|
+
sink.appendReplayBlock((width) => {
|
|
99
|
+
const theme = clioTheme();
|
|
100
|
+
const lines: string[] = [];
|
|
101
|
+
const inner = Math.max(1, width - 2);
|
|
102
|
+
for (const entry of kept) {
|
|
103
|
+
const label = entry.label.replace(/\s+/gu, " ").trim();
|
|
104
|
+
lines.push(...wrapTextWithAnsi(`${theme.fg("accent", GLYPH.cursor)} ${theme.fg("dim", label)}`, width));
|
|
105
|
+
lines.push(...wrapTextWithAnsi(theme.fg("muted", entry.answer.trim()), inner).map((line) => ` ${line}`));
|
|
106
|
+
}
|
|
107
|
+
return lines;
|
|
108
|
+
});
|
|
109
|
+
sink.requestRender();
|
|
110
|
+
}
|
|
111
|
+
|
|
57
112
|
export type CommandOutputReplayBlock = (width: number) => string[];
|
|
58
113
|
|
|
59
114
|
export interface CommandOutputSink {
|
|
@@ -246,9 +246,7 @@ export interface DispatchOriginPresentation {
|
|
|
246
246
|
* surface; a board row sits under the fleet summary, which already owns the
|
|
247
247
|
* quadrant's single orange, so here the filled glyph carries origin by shape.
|
|
248
248
|
*/
|
|
249
|
-
|
|
250
|
-
row: Pick<DispatchBoardRow, "requestOrigin">,
|
|
251
|
-
): DispatchOriginPresentation | null {
|
|
249
|
+
function dispatchOriginPresentation(row: Pick<DispatchBoardRow, "requestOrigin">): DispatchOriginPresentation | null {
|
|
252
250
|
if (row.requestOrigin === "user") return { glyph: GLYPH.workerHuman, token: "accent" };
|
|
253
251
|
if (row.requestOrigin === "agent") return { glyph: GLYPH.workerAgent, token: "muted" };
|
|
254
252
|
if (row.requestOrigin === "internal") return { glyph: GLYPH.workerInternal, token: "dim" };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { combineBashOutput, runBashCommand } from "../core/bash-exec.js";
|
|
2
|
+
import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "../core/external-editor.js";
|
|
2
3
|
import type { PendingSkillRequest } from "../core/skill-activation.js";
|
|
3
|
-
import { ToolNames } from "../core/tool-names.js";
|
|
4
4
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
5
5
|
import type { SessionContract, SessionEntry } from "../domains/session/index.js";
|
|
6
|
-
import { toolPresentationPolicy } from "../tools/presentation.js";
|
|
7
6
|
import type { ChatLoop } from "./chat-loop.js";
|
|
8
7
|
import type { ChatPanel } from "./chat-panel.js";
|
|
9
8
|
import { bashExecutionEntryInput, parseEditorBashCommand, unguardPastedEditorOperator } from "./editor-bash.js";
|
|
@@ -13,16 +12,8 @@ import {
|
|
|
13
12
|
type RunningDispatchRef,
|
|
14
13
|
resolveSteerTarget,
|
|
15
14
|
} from "./editor-steer.js";
|
|
16
|
-
import { type ExternalEditResult, editTextExternally, resolveExternalEditor } from "./external-editor.js";
|
|
17
15
|
import { type BashTranscriptExecution, renderBashTranscriptExecution } from "./renderers/tool-execution.js";
|
|
18
16
|
import { parseSlashCommand, type RunIo, type SlashCommand, type SlashCommandDispatchResult } from "./slash-commands.js";
|
|
19
|
-
import {
|
|
20
|
-
type FoldOverride,
|
|
21
|
-
policyRunningToolFold,
|
|
22
|
-
policyToolFold,
|
|
23
|
-
resolveFold,
|
|
24
|
-
type TranscriptDetailPolicy,
|
|
25
|
-
} from "./transcript-detail.js";
|
|
26
17
|
|
|
27
18
|
const EDITOR_BASH_TIMEOUT_MS = 300_000;
|
|
28
19
|
/** Existing bash TERM-to-KILL grace (5s), plus settlement and session append. */
|
|
@@ -61,6 +52,9 @@ export interface EditorSubmitEditor {
|
|
|
61
52
|
getText(): string;
|
|
62
53
|
/** Draft spelling for an immediate send, including any editor provenance envelope. */
|
|
63
54
|
getTextForSubmit(): string;
|
|
55
|
+
getExpandedText?(): string;
|
|
56
|
+
readonly draftRevision?: number;
|
|
57
|
+
setLiteralText?(text: string): void;
|
|
64
58
|
setText(text: string): void;
|
|
65
59
|
addToHistory(text: string): void;
|
|
66
60
|
}
|
|
@@ -86,6 +80,7 @@ export interface EditorSubmitSessionTranscript {
|
|
|
86
80
|
}
|
|
87
81
|
|
|
88
82
|
export interface EditorSubmitDeps {
|
|
83
|
+
onLocalBashRunning?: (running: boolean) => void;
|
|
89
84
|
editor: EditorSubmitEditor;
|
|
90
85
|
ui: EditorSubmitUi;
|
|
91
86
|
io: RunIo;
|
|
@@ -111,7 +106,7 @@ export interface EditorSubmitDeps {
|
|
|
111
106
|
|
|
112
107
|
export interface EditorSubmitController {
|
|
113
108
|
runEditorBash(text: string): boolean;
|
|
114
|
-
openExternalEditorForInput():
|
|
109
|
+
openExternalEditorForInput(text?: string): boolean;
|
|
115
110
|
handleEditorSteerMention(mention: { target: string; text: string }): boolean;
|
|
116
111
|
submitEditorText(text: string): void;
|
|
117
112
|
/** Admit an immutable boot record without reading or mutating the live draft. */
|
|
@@ -123,7 +118,7 @@ export interface EditorSubmitController {
|
|
|
123
118
|
* refusals (attached dispatch, parked permission ask), which degrade the
|
|
124
119
|
* message to next-slot delivery with a notice.
|
|
125
120
|
*/
|
|
126
|
-
interruptFromEditor(): void;
|
|
121
|
+
interruptFromEditor(text?: string): void;
|
|
127
122
|
restoreQueuedFollowUpsToEditor(): void;
|
|
128
123
|
hasActiveEditorBash(): boolean;
|
|
129
124
|
cancelActiveEditorBash(): boolean;
|
|
@@ -171,35 +166,19 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
171
166
|
totalBytes: 0,
|
|
172
167
|
excludeFromContext: parsed.excludeFromContext,
|
|
173
168
|
};
|
|
174
|
-
// The operator's bash row follows the same rule as a model bash call: the
|
|
175
|
-
// transcript detail policy (through bash's presentation once settled)
|
|
176
|
-
// unless the operator overrode this one block with the expand key.
|
|
177
|
-
let fold: FoldOverride;
|
|
178
|
-
const bashPresentation = toolPresentationPolicy(ToolNames.Bash, undefined);
|
|
179
|
-
const policyFold = (detail: TranscriptDetailPolicy) =>
|
|
180
|
-
execution.running ? policyRunningToolFold(detail) : policyToolFold(detail, bashPresentation);
|
|
181
169
|
deps.chatPanel.appendReplayBlock(
|
|
182
|
-
(width, detail) =>
|
|
170
|
+
(width, detail, unbounded) =>
|
|
183
171
|
renderBashTranscriptExecution(
|
|
184
|
-
{
|
|
185
|
-
...execution,
|
|
186
|
-
folded: resolveFold(fold, policyFold(detail)) === "folded",
|
|
187
|
-
...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}),
|
|
188
|
-
},
|
|
172
|
+
{ ...execution, ...(execution.running ? { elapsedMs: Math.max(0, performance.now() - startedAt) } : {}) },
|
|
189
173
|
width,
|
|
174
|
+
undefined,
|
|
175
|
+
{ detail, ...(unbounded ? { unbounded } : {}) },
|
|
190
176
|
),
|
|
191
177
|
() => execution.running,
|
|
192
|
-
{
|
|
193
|
-
policyFold,
|
|
194
|
-
fold: () => fold,
|
|
195
|
-
setFold: (next: FoldOverride) => {
|
|
196
|
-
fold = next;
|
|
197
|
-
deps.ui.requestRender();
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
178
|
);
|
|
201
179
|
deps.ui.requestRender();
|
|
202
180
|
|
|
181
|
+
deps.onLocalBashRunning?.(true);
|
|
203
182
|
let settlement!: Promise<void>;
|
|
204
183
|
settlement = (async () => {
|
|
205
184
|
try {
|
|
@@ -249,6 +228,7 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
249
228
|
execution.error = msg;
|
|
250
229
|
deps.io.stderr(`[bash] ${msg}\n`);
|
|
251
230
|
} finally {
|
|
231
|
+
deps.onLocalBashRunning?.(false);
|
|
252
232
|
if (activeEditorBash === abort) activeEditorBash = null;
|
|
253
233
|
if (activeEditorBashSettlement === settlement) activeEditorBashSettlement = null;
|
|
254
234
|
deps.ui.requestRender();
|
|
@@ -259,27 +239,45 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
259
239
|
return true;
|
|
260
240
|
};
|
|
261
241
|
|
|
262
|
-
const
|
|
242
|
+
const setLiteralText = (text: string): void => {
|
|
243
|
+
if (deps.editor.setLiteralText) deps.editor.setLiteralText(text);
|
|
244
|
+
else deps.editor.setText(text);
|
|
245
|
+
};
|
|
246
|
+
const openExternalEditorForInput = (explicitText?: string): boolean => {
|
|
263
247
|
const command = (deps.resolveEditor ?? resolveExternalEditor)();
|
|
264
248
|
if (!command) {
|
|
265
249
|
deps.io.stderr("[editor] no external editor configured; set VISUAL or EDITOR\n");
|
|
266
|
-
return;
|
|
250
|
+
return false;
|
|
267
251
|
}
|
|
268
|
-
const currentText =
|
|
252
|
+
const currentText =
|
|
253
|
+
explicitText ?? deps.editor.getExpandedText?.() ?? unguardPastedEditorOperator(deps.editor.getTextForSubmit());
|
|
269
254
|
let result: ExternalEditResult;
|
|
270
255
|
try {
|
|
271
256
|
deps.ui.stop();
|
|
272
257
|
result = (deps.editExternally ?? editTextExternally)(currentText, command);
|
|
258
|
+
} catch (error) {
|
|
259
|
+
result = { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
273
260
|
} finally {
|
|
274
261
|
deps.ui.start();
|
|
275
262
|
deps.ui.requestRender(true);
|
|
276
263
|
}
|
|
277
|
-
if (result.ok)
|
|
278
|
-
|
|
279
|
-
} else if (result.error) {
|
|
280
|
-
deps.io.stderr(`[editor] ${result.error}\n`);
|
|
281
|
-
}
|
|
264
|
+
if (result.ok) setLiteralText(result.text ?? "");
|
|
265
|
+
else if (result.error) deps.io.stderr(`[editor] ${result.error}\n`);
|
|
282
266
|
deps.ui.requestRender(true);
|
|
267
|
+
return result.ok;
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// A snapshot remains owned until expansion and admission finish. A second
|
|
271
|
+
// press on that same snapshot is inert; a newer draft has its own identity.
|
|
272
|
+
const pendingDrafts = new Set<string>();
|
|
273
|
+
const captureDraft = () => {
|
|
274
|
+
const text = deps.editor.getText();
|
|
275
|
+
const revision = deps.editor.draftRevision;
|
|
276
|
+
const key = JSON.stringify([revision, text]);
|
|
277
|
+
return {
|
|
278
|
+
key,
|
|
279
|
+
owns: () => deps.editor.getText() === text && deps.editor.draftRevision === revision,
|
|
280
|
+
};
|
|
283
281
|
};
|
|
284
282
|
|
|
285
283
|
const submitEditorSteerMention = (mention: { target: string; text: string }): EditorSteerSubmission => {
|
|
@@ -360,7 +358,12 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
360
358
|
}
|
|
361
359
|
}
|
|
362
360
|
const command = parseSlashCommand(trimmed);
|
|
363
|
-
if (
|
|
361
|
+
if (command.kind === "editor" || command.kind === "interrupt") {
|
|
362
|
+
// Keep the correctable command until its owner accepts the snapshot.
|
|
363
|
+
deps.editor.setText(literalText);
|
|
364
|
+
const result = deps.dispatchCommand(trimmed);
|
|
365
|
+
if (result === "accepted") deps.editor.addToHistory(literalText);
|
|
366
|
+
} else if (isRejectedCommand(command)) {
|
|
364
367
|
deps.editor.setText(literalText);
|
|
365
368
|
deps.dispatchCommand(trimmed);
|
|
366
369
|
} else if (command.kind === "unknown-command") {
|
|
@@ -442,7 +445,8 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
442
445
|
|
|
443
446
|
const queueFollowUpFromEditor = (): void => {
|
|
444
447
|
const streaming = deps.chat.isStreaming();
|
|
445
|
-
const
|
|
448
|
+
const snapshot = captureDraft();
|
|
449
|
+
const text = deps.editor.getTextForSubmit().trim();
|
|
446
450
|
if (text.length === 0) return;
|
|
447
451
|
if (!streaming) {
|
|
448
452
|
deps.editor.setText("");
|
|
@@ -450,8 +454,10 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
450
454
|
deps.ui.requestRender();
|
|
451
455
|
return;
|
|
452
456
|
}
|
|
457
|
+
if (pendingDrafts.has(snapshot.key)) return;
|
|
458
|
+
pendingDrafts.add(snapshot.key);
|
|
453
459
|
void (async () => {
|
|
454
|
-
const submitted = await deps.expandSubmit(text);
|
|
460
|
+
const submitted = await deps.expandSubmit(unguardPastedEditorOperator(text));
|
|
455
461
|
if (submitted.images.length > 0) {
|
|
456
462
|
deps.io.stderr("[follow-up] image references cannot be queued while a response is streaming\n");
|
|
457
463
|
return;
|
|
@@ -462,17 +468,20 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
462
468
|
return;
|
|
463
469
|
}
|
|
464
470
|
deps.editor.addToHistory(text);
|
|
465
|
-
deps.editor.setText("");
|
|
471
|
+
if (snapshot.owns()) deps.editor.setText("");
|
|
466
472
|
deps.ui.requestRender();
|
|
467
|
-
})()
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
473
|
+
})()
|
|
474
|
+
.catch((err) => {
|
|
475
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
476
|
+
deps.io.stderr(`[follow-up] ${msg}\n`);
|
|
477
|
+
})
|
|
478
|
+
.finally(() => pendingDrafts.delete(snapshot.key));
|
|
471
479
|
};
|
|
472
480
|
|
|
473
|
-
const interruptFromEditor = (): void => {
|
|
481
|
+
const interruptFromEditor = (explicitText?: string): void => {
|
|
474
482
|
const streaming = deps.chat.isStreaming();
|
|
475
|
-
const
|
|
483
|
+
const snapshot = captureDraft();
|
|
484
|
+
const text = (explicitText ?? deps.editor.getTextForSubmit()).trim();
|
|
476
485
|
if (text.length === 0) return;
|
|
477
486
|
if (!streaming) {
|
|
478
487
|
deps.editor.setText("");
|
|
@@ -480,8 +489,10 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
480
489
|
deps.ui.requestRender();
|
|
481
490
|
return;
|
|
482
491
|
}
|
|
492
|
+
if (pendingDrafts.has(snapshot.key)) return;
|
|
493
|
+
pendingDrafts.add(snapshot.key);
|
|
483
494
|
void (async () => {
|
|
484
|
-
const submitted = await deps.expandSubmit(text);
|
|
495
|
+
const submitted = await deps.expandSubmit(unguardPastedEditorOperator(text));
|
|
485
496
|
if (submitted.images.length > 0) {
|
|
486
497
|
deps.io.stderr("[interrupt] image references cannot be sent while a response is streaming\n");
|
|
487
498
|
return;
|
|
@@ -492,7 +503,8 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
492
503
|
// than vanishing with the cancelled run. A refused interrupt cancels
|
|
493
504
|
// nothing, so the queue stays put.
|
|
494
505
|
const restored = deps.chat.interruptRefusal() === null ? deps.chat.clearQueuedFollowUps() : [];
|
|
495
|
-
deps.editor.
|
|
506
|
+
const newerDraft = snapshot.owns() ? "" : (deps.editor.getExpandedText?.() ?? deps.editor.getText());
|
|
507
|
+
setLiteralText([...restored, newerDraft].filter((part) => part.length > 0).join("\n\n"));
|
|
496
508
|
deps.ui.requestRender();
|
|
497
509
|
// An interrupt is a fresh prompt, so it carries what the idle path
|
|
498
510
|
// carries: the launchpad collapse, the submitted-turn count, and the
|
|
@@ -509,10 +521,12 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
509
521
|
...(skillRequests.length > 0 ? { pendingSkillRequests: skillRequests } : {}),
|
|
510
522
|
});
|
|
511
523
|
await deps.settleVisibleFrame?.("interrupt-submit-return");
|
|
512
|
-
})()
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
524
|
+
})()
|
|
525
|
+
.catch((err) => {
|
|
526
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
527
|
+
deps.io.stderr(`[interrupt] ${msg}\n`);
|
|
528
|
+
})
|
|
529
|
+
.finally(() => pendingDrafts.delete(snapshot.key));
|
|
516
530
|
};
|
|
517
531
|
|
|
518
532
|
const restoreQueuedFollowUpsToEditor = (): void => {
|
|
@@ -521,9 +535,9 @@ export function createEditorSubmitController(deps: EditorSubmitDeps): EditorSubm
|
|
|
521
535
|
deps.io.stderr("[follow-up] no queued messages to restore\n");
|
|
522
536
|
return;
|
|
523
537
|
}
|
|
524
|
-
const currentText = deps.editor.getText();
|
|
538
|
+
const currentText = deps.editor.getExpandedText?.() ?? deps.editor.getText();
|
|
525
539
|
const queuedText = restored.join("\n\n");
|
|
526
|
-
|
|
540
|
+
setLiteralText([queuedText, currentText].filter((part) => part.trim().length > 0).join("\n\n"));
|
|
527
541
|
deps.ui.requestRender();
|
|
528
542
|
};
|
|
529
543
|
|
|
@@ -11,8 +11,8 @@ export interface FollowUpQueuePanelOptions {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Keybindings are stored lowercase (`alt+
|
|
15
|
-
* modifiers and keys in title case (`[Alt+
|
|
14
|
+
* Keybindings are stored lowercase (`alt+q`), but the hint vocabulary spells
|
|
15
|
+
* modifiers and keys in title case (`[Alt+Q]`). Format the bound key for
|
|
16
16
|
* display so the panel reads the same whether or not the binding is customized.
|
|
17
17
|
*/
|
|
18
18
|
function displayKey(key: string): string {
|
|
@@ -52,7 +52,7 @@ export function createFollowUpQueuePanel(options: FollowUpQueuePanelOptions = {}
|
|
|
52
52
|
message.kind === "steer" ? theme.fg("action", `${GLYPH.user} steer`) : theme.fg("muted", `${GLYPH.queued} queued`);
|
|
53
53
|
lines.push(`${marker} ${theme.fg("muted", preview)}`);
|
|
54
54
|
}
|
|
55
|
-
const restoreKey = key && key.length > 0 ? displayKey(key) : "
|
|
55
|
+
const restoreKey = key && key.length > 0 ? displayKey(key) : "see /help";
|
|
56
56
|
lines.push(theme.fg("dim", `[${restoreKey}] restore to editor`));
|
|
57
57
|
|
|
58
58
|
cachedLines = frame(theme, "Steering Queue", lines, bodyWidth + 4);
|