@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,3 +1,4 @@
|
|
|
1
|
+
import type { WorkerRecall } from "../domains/context/worker/recall.js";
|
|
1
2
|
/**
|
|
2
3
|
* Worker-subprocess tool construction.
|
|
3
4
|
*
|
|
@@ -29,6 +30,7 @@ import {
|
|
|
29
30
|
import { CONFIRMED_SCOPE, isSubset, READONLY_SCOPE, WORKSPACE_SCOPE } from "../domains/safety/scope.js";
|
|
30
31
|
import { effectiveToolNames } from "../tools/agent-tools.js";
|
|
31
32
|
import { assertRegisteredBuiltinTools, registerCoreTools } from "../tools/core-bootstrap.js";
|
|
33
|
+
import { registerHarnessExtensionTools } from "../tools/harness-extensions.js";
|
|
32
34
|
import type { ToolProfileName } from "../tools/profiles.js";
|
|
33
35
|
import { createRegistry, type RegistryDeps, type ToolRegistry } from "../tools/registry.js";
|
|
34
36
|
import { type AgentLedgerPort, toolSignatureOf } from "../worker/protocol.js";
|
|
@@ -139,6 +141,7 @@ export function createWorkerToolRegistry(
|
|
|
139
141
|
autonomy?: AutonomyLevel,
|
|
140
142
|
onMiddlewareEffects?: RegistryDeps["onMiddlewareEffects"],
|
|
141
143
|
agentLedger?: AgentLedgerPort,
|
|
144
|
+
workerRecall?: WorkerRecall,
|
|
142
145
|
): ToolRegistry {
|
|
143
146
|
// A worker always gets a middleware contract, even without a snapshot from
|
|
144
147
|
// the orchestrator, because the loop guard rides on it as a before_tool
|
|
@@ -163,6 +166,7 @@ export function createWorkerToolRegistry(
|
|
|
163
166
|
// is what keeps that true now that the session registry omits the tool.
|
|
164
167
|
const registration = registerCoreTools(registry, {
|
|
165
168
|
includeLedgerTools: true,
|
|
169
|
+
...(workerRecall ? { workerRecall } : {}),
|
|
166
170
|
...(agentLedger ? { agentLedger } : {}),
|
|
167
171
|
// A worker cannot install a skill or reach the operator who could, so
|
|
168
172
|
// its skill listing carries installed (or bound) skills only; the
|
|
@@ -177,6 +181,7 @@ export function createWorkerToolRegistry(
|
|
|
177
181
|
}),
|
|
178
182
|
});
|
|
179
183
|
assertRegisteredBuiltinTools(registry, registration, false);
|
|
184
|
+
registerHarnessExtensionTools(registry);
|
|
180
185
|
return registry;
|
|
181
186
|
}
|
|
182
187
|
|
|
@@ -108,6 +108,7 @@ import type { BackgroundMemoryUsageSink } from "../domains/observability/backgro
|
|
|
108
108
|
import { recordFailedCompactionCalls } from "../domains/observability/compaction-usage.js";
|
|
109
109
|
import type { ObservabilityContract } from "../domains/observability/index.js";
|
|
110
110
|
import { ObservabilityDomainModule } from "../domains/observability/index.js";
|
|
111
|
+
import { PluginsDomainModule } from "../domains/plugins/index.js";
|
|
111
112
|
import type { PromptsContract } from "../domains/prompts/contract.js";
|
|
112
113
|
import { createPromptsDomainModule } from "../domains/prompts/index.js";
|
|
113
114
|
import type { ProvidersContract, TargetDescriptor, ThinkingLevel } from "../domains/providers/index.js";
|
|
@@ -199,6 +200,7 @@ import type { BootOptions } from "./boot-options.js";
|
|
|
199
200
|
import { readCompactionSystemPrompt } from "./compaction-prompt.js";
|
|
200
201
|
import { createExtensionReloadCoordinator } from "./extension-reload.js";
|
|
201
202
|
import { resolvePanesEnablement } from "./panes-activation.js";
|
|
203
|
+
import { reloadPluginResourcesAndNotify } from "./plugin-reload.js";
|
|
202
204
|
import { bindTaskMemoryLifecycle, captureTaskMemoryUsage } from "./task-memory-lifecycle.js";
|
|
203
205
|
|
|
204
206
|
export type { BootOptions, HeadlessSamplingOverrides } from "./boot-options.js";
|
|
@@ -1005,7 +1007,7 @@ function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, res
|
|
|
1005
1007
|
}
|
|
1006
1008
|
|
|
1007
1009
|
/**
|
|
1008
|
-
*
|
|
1010
|
+
* Scoped model cycle actions step the orchestrator through the `scope` list of target
|
|
1009
1011
|
* ids or target/model refs. Absent scope is a no-op so unconfigured users
|
|
1010
1012
|
* feel nothing.
|
|
1011
1013
|
*/
|
|
@@ -1140,6 +1142,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1140
1142
|
[
|
|
1141
1143
|
options.startupSettings ? createConfigDomainModule(options.startupSettings) : ConfigDomainModule,
|
|
1142
1144
|
ExtensionsDomainModule,
|
|
1145
|
+
PluginsDomainModule,
|
|
1143
1146
|
InteropDomainModule,
|
|
1144
1147
|
createResourcesDomainModule({
|
|
1145
1148
|
reservedPromptNames: new Set(BUILTIN_SLASH_COMMANDS.map((entry) => entry.name)),
|
|
@@ -1535,6 +1538,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1535
1538
|
// keep evaluating after the guards and before the assessors below.
|
|
1536
1539
|
const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
|
|
1537
1540
|
let bootHookNotices = true;
|
|
1541
|
+
const reloadPlugins = () =>
|
|
1542
|
+
reloadPluginResourcesAndNotify(process.cwd(), (event) => bus.emit(BusChannels.PluginsReloaded, event));
|
|
1538
1543
|
const extensionReload = createExtensionReloadCoordinator({
|
|
1539
1544
|
extensions,
|
|
1540
1545
|
middleware,
|
|
@@ -1545,7 +1550,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1545
1550
|
else if (bootHookNotices) initialNotices.push(line);
|
|
1546
1551
|
else bus.emit(BusChannels.ExtensionsLoadIssue, { message: line });
|
|
1547
1552
|
},
|
|
1548
|
-
onCommitted: (event) =>
|
|
1553
|
+
onCommitted: (event) => {
|
|
1554
|
+
reloadPlugins();
|
|
1555
|
+
bus.emit(BusChannels.ExtensionsReloaded, event);
|
|
1556
|
+
},
|
|
1549
1557
|
});
|
|
1550
1558
|
extensionReload.applyBoot();
|
|
1551
1559
|
bootHookNotices = false;
|
|
@@ -1593,7 +1601,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1593
1601
|
listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
|
|
1594
1602
|
listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
|
|
1595
1603
|
installEntry: (entry, scope) => {
|
|
1596
|
-
const installed = installSkill({ source: entry.
|
|
1604
|
+
const installed = installSkill({ source: `skill:${entry.name}`, scope, name: entry.name, cwd: process.cwd() });
|
|
1597
1605
|
return { path: installed.path, sourceUrl: installed.sourceUrl, installedHash: installed.installedHash };
|
|
1598
1606
|
},
|
|
1599
1607
|
}),
|
|
@@ -1718,6 +1726,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1718
1726
|
})
|
|
1719
1727
|
: null;
|
|
1720
1728
|
registerAllTools(toolRegistry, {
|
|
1729
|
+
captureWorkerContext: () => chat.captureWorkerContext?.() ?? null,
|
|
1721
1730
|
...(session
|
|
1722
1731
|
? {
|
|
1723
1732
|
session,
|
|
@@ -1803,7 +1812,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1803
1812
|
const getCurrentSettings = (): ClioSettings => {
|
|
1804
1813
|
// Recents live in the data dir (core/recent-models.ts), never in
|
|
1805
1814
|
// settings.yaml; consumers that need them call listRecentModels
|
|
1806
|
-
// directly, so an Alt+
|
|
1815
|
+
// directly, so an Alt+M pick in another session does not churn the
|
|
1807
1816
|
// config watcher here.
|
|
1808
1817
|
const base = config?.get();
|
|
1809
1818
|
// No config domain (unit tests, degraded boot): readSettings() returns a
|
|
@@ -2000,7 +2009,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2000
2009
|
bumpSessionState();
|
|
2001
2010
|
persistSavedMutation((saved) => setAtPath(saved, id, value));
|
|
2002
2011
|
};
|
|
2003
|
-
/**
|
|
2012
|
+
/** Scoped model cycle actions: step this session's orchestrator through the scope list. */
|
|
2004
2013
|
const cycleScopedSession = (direction: "forward" | "backward"): boolean => {
|
|
2005
2014
|
const next = advanceScopedTarget(getCurrentSettings(), direction);
|
|
2006
2015
|
if (!next) return false;
|
|
@@ -2323,6 +2332,14 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2323
2332
|
await termination.shutdown(1);
|
|
2324
2333
|
return { exitCode: 1, bootTimeMs: timer.snapshot().totalMs };
|
|
2325
2334
|
}
|
|
2335
|
+
// A display-only template that reached boot (the CLI preflight answers
|
|
2336
|
+
// most of them earlier) is printed for the operator and the run ends;
|
|
2337
|
+
// its body was never model text.
|
|
2338
|
+
if (promptExpansion?.expanded === false && promptExpansion.display) {
|
|
2339
|
+
process.stdout.write(`${promptExpansion.display.text}\n`);
|
|
2340
|
+
await termination.shutdown(0);
|
|
2341
|
+
return { exitCode: 0, bootTimeMs: timer.snapshot().totalMs };
|
|
2342
|
+
}
|
|
2326
2343
|
const fileExpansion = await expandInlineFileReferencesAsync(
|
|
2327
2344
|
promptExpansion?.expanded ? promptExpansion.text : parsedSkillRequest.text,
|
|
2328
2345
|
{
|
|
@@ -2382,6 +2399,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2382
2399
|
...(resources ? { resources } : {}),
|
|
2383
2400
|
...(extensions ? { extensions } : {}),
|
|
2384
2401
|
reloadExtensions: () => extensionReload.reload(),
|
|
2402
|
+
reloadPlugins,
|
|
2385
2403
|
...(interop ? { interop } : {}),
|
|
2386
2404
|
...(share ? { share } : {}),
|
|
2387
2405
|
...(mux ? { mux } : {}),
|
|
@@ -2435,6 +2453,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2435
2453
|
getSettings: getCurrentSettings,
|
|
2436
2454
|
getFleetNodes: () => result.getContract<SchedulingContract>("scheduling")?.fleet?.list() ?? [],
|
|
2437
2455
|
onBackgroundDispatch: () => dispatchBackground.backgroundNewest(),
|
|
2456
|
+
// A boot-time resume opens onto an existing conversation, so the welcome
|
|
2457
|
+
// header starts collapsed rather than offering fresh-start onboarding.
|
|
2458
|
+
...(resumedSessionAtBoot ? { startsResumed: true } : {}),
|
|
2438
2459
|
...(session ? { getSessionId: () => session.current()?.id ?? null } : {}),
|
|
2439
2460
|
...(contextDomain
|
|
2440
2461
|
? {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PluginsReloadedPayload } from "../core/bus-events.js";
|
|
2
|
+
import { type PluginSnapshot, pluginSnapshotFor, reloadPluginResources } from "../domains/plugins/index.js";
|
|
3
|
+
|
|
4
|
+
/** Publish data-only plugin resources before asking session caches to refresh. */
|
|
5
|
+
export function reloadPluginResourcesAndNotify(
|
|
6
|
+
cwd: string,
|
|
7
|
+
notify: (event: PluginsReloadedPayload) => void,
|
|
8
|
+
): PluginSnapshot {
|
|
9
|
+
const previous = pluginSnapshotFor(cwd);
|
|
10
|
+
const next = reloadPluginResources(cwd);
|
|
11
|
+
notify({
|
|
12
|
+
generation: next.generation,
|
|
13
|
+
previousGeneration: previous.generation,
|
|
14
|
+
changed: previous.generation === 0 || previous.digest !== next.digest,
|
|
15
|
+
digest: next.digest,
|
|
16
|
+
});
|
|
17
|
+
return next;
|
|
18
|
+
}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import type { ClioKeybinding } from "../domains/config/keybindings.js";
|
|
2
|
-
import { isKeyRelease, matchesKey } from "../engine/tui.js";
|
|
2
|
+
import { isKeyRelease, isKeyRepeat, matchesKey } from "../engine/tui.js";
|
|
3
3
|
import type { LeaderKeyController } from "./leader-key.js";
|
|
4
4
|
import { isEscapeKey, type OverlayState, overlayOwnsInput } from "./overlay-lifecycle.js";
|
|
5
5
|
|
|
6
6
|
export const APPLICATION_DOUBLE_TAP_MS = 500;
|
|
7
7
|
|
|
8
|
-
const CLOSED_ACTION_ORDER = [
|
|
8
|
+
export const CLOSED_ACTION_ORDER = [
|
|
9
|
+
"clio-coder.output.cycle",
|
|
9
10
|
"clio-coder.notifications.dismiss",
|
|
10
|
-
"clio-coder.tool.expand",
|
|
11
|
-
"clio-coder.tool.expandAll",
|
|
12
|
-
"clio-coder.tool.liveOutput",
|
|
13
11
|
"clio-coder.editor.external",
|
|
14
12
|
"clio-coder.message.followUp",
|
|
15
13
|
"clio-coder.message.interrupt",
|
|
16
14
|
"clio-coder.message.dequeue",
|
|
17
|
-
"clio-coder.thinking.expand",
|
|
18
|
-
"clio-coder.thinking.expandAll",
|
|
19
15
|
] as const satisfies ReadonlyArray<ClioKeybinding>;
|
|
20
16
|
|
|
21
17
|
export const GLOBAL_ACTION_ORDER = [
|
|
@@ -28,6 +24,7 @@ export const GLOBAL_ACTION_ORDER = [
|
|
|
28
24
|
"clio-coder.decisions.open",
|
|
29
25
|
"clio-coder.dispatch.background",
|
|
30
26
|
"clio-coder.model.select",
|
|
27
|
+
"clio-coder.library.toggle",
|
|
31
28
|
// Backward stays ahead of forward so prefix-overlapping user bindings keep
|
|
32
29
|
// the same more-specific-first behavior as the original input listener.
|
|
33
30
|
"clio-coder.model.cycleBackward",
|
|
@@ -35,7 +32,13 @@ export const GLOBAL_ACTION_ORDER = [
|
|
|
35
32
|
"clio-coder.exit",
|
|
36
33
|
] as const satisfies ReadonlyArray<ClioKeybinding>;
|
|
37
34
|
|
|
38
|
-
export type CtrlCAction =
|
|
35
|
+
export type CtrlCAction =
|
|
36
|
+
| "cancel-stream"
|
|
37
|
+
| "close-overlay"
|
|
38
|
+
| "clear-editor"
|
|
39
|
+
| "arm-shutdown"
|
|
40
|
+
| "shutdown"
|
|
41
|
+
| "protect-queue";
|
|
39
42
|
|
|
40
43
|
export interface CtrlCActionState {
|
|
41
44
|
overlayState: OverlayState;
|
|
@@ -43,13 +46,15 @@ export interface CtrlCActionState {
|
|
|
43
46
|
editorText: string;
|
|
44
47
|
lastCtrlCAt: number;
|
|
45
48
|
now: number;
|
|
49
|
+
hasQueuedMessages?: boolean;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
function resolveApplicationCtrlCAction(state: CtrlCActionState): CtrlCAction {
|
|
49
53
|
if (state.overlayState !== "closed") return "close-overlay";
|
|
50
|
-
if (state.lastCtrlCAt > 0 && state.now - state.lastCtrlCAt <= APPLICATION_DOUBLE_TAP_MS) return "shutdown";
|
|
51
54
|
if (state.streaming) return "cancel-stream";
|
|
52
55
|
if (state.editorText.length > 0) return "clear-editor";
|
|
56
|
+
if (state.hasQueuedMessages) return "protect-queue";
|
|
57
|
+
if (state.lastCtrlCAt > 0 && state.now - state.lastCtrlCAt <= APPLICATION_DOUBLE_TAP_MS) return "shutdown";
|
|
53
58
|
return "arm-shutdown";
|
|
54
59
|
}
|
|
55
60
|
|
|
@@ -82,6 +87,15 @@ export interface ApplicationControllerDeps {
|
|
|
82
87
|
intervals: ApplicationIntervalCoordinator;
|
|
83
88
|
intervalsToClear: ReadonlyArray<ApplicationIntervalHandle>;
|
|
84
89
|
leaderKeys: LeaderKeyController;
|
|
90
|
+
isSearchFocused?: () => boolean;
|
|
91
|
+
closeSearch?: () => void;
|
|
92
|
+
forwardFocusedInput?: (data: string) => void;
|
|
93
|
+
cancelFocusedOwner?: () => void;
|
|
94
|
+
isAutocompleteVisible?: () => boolean;
|
|
95
|
+
matchesRepeatableInput?: (data: string) => boolean;
|
|
96
|
+
routeComposerKey?: (data: string) => boolean;
|
|
97
|
+
hasQueuedMessages?: () => boolean;
|
|
98
|
+
explainProtectedExit?: () => void;
|
|
85
99
|
getOverlayState: () => OverlayState;
|
|
86
100
|
routeOverlayKey: (data: string) => boolean;
|
|
87
101
|
/** Let pi-tui's focused Editor own dedicated prompt-history actions before app bindings. */
|
|
@@ -108,10 +122,6 @@ export interface ApplicationControllerDeps {
|
|
|
108
122
|
listNotifications: () => ReadonlyArray<{ id: string }>;
|
|
109
123
|
dismissNotification: (id: string) => void;
|
|
110
124
|
dismissAllNotifications: () => void;
|
|
111
|
-
toggleLastToolExpanded: () => boolean;
|
|
112
|
-
toggleAllToolsExpanded: () => boolean;
|
|
113
|
-
toggleLastThinking: () => boolean;
|
|
114
|
-
toggleAllThinking: () => boolean;
|
|
115
125
|
shutdownDisposers: ReadonlyArray<() => void>;
|
|
116
126
|
/** Settle the last presentation mutation into an accepted/drained frame. */
|
|
117
127
|
beforeStopUi?: () => Promise<void>;
|
|
@@ -144,9 +154,7 @@ export interface ApplicationController {
|
|
|
144
154
|
run: Promise<number>;
|
|
145
155
|
handleInput(data: string): ApplicationInputResult;
|
|
146
156
|
handleCtrlC(): void;
|
|
147
|
-
dismissNotifications(): void;
|
|
148
|
-
toggleToolExpansion(): void;
|
|
149
|
-
toggleThinkingExpansion(): void;
|
|
157
|
+
dismissNotifications(all?: boolean): void;
|
|
150
158
|
shutdown(): Promise<void>;
|
|
151
159
|
}
|
|
152
160
|
|
|
@@ -162,11 +170,6 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
162
170
|
const keepAlive = deps.intervals.setInterval(() => {}, 1 << 30);
|
|
163
171
|
let shuttingDown = false;
|
|
164
172
|
let lastCtrlCAt = 0;
|
|
165
|
-
let lastNotificationDismissAt = 0;
|
|
166
|
-
let lastToolExpandAt = 0;
|
|
167
|
-
let lastThinkingExpandAt = 0;
|
|
168
|
-
|
|
169
|
-
const isDoubleTap = (lastAt: number, now: number): boolean => lastAt > 0 && now - lastAt <= APPLICATION_DOUBLE_TAP_MS;
|
|
170
173
|
|
|
171
174
|
let shutdownArmed = false;
|
|
172
175
|
let armedIndicator: ApplicationIntervalHandle | null = null;
|
|
@@ -285,12 +288,31 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
285
288
|
};
|
|
286
289
|
|
|
287
290
|
const handleCtrlC = (): void => {
|
|
291
|
+
deps.leaderKeys.reset();
|
|
292
|
+
if (deps.isSearchFocused?.()) {
|
|
293
|
+
deps.closeSearch?.();
|
|
294
|
+
lastCtrlCAt = 0;
|
|
295
|
+
setShutdownArmed(false);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (deps.getOverlayState() !== "closed" && deps.cancelFocusedOwner) {
|
|
299
|
+
deps.cancelFocusedOwner();
|
|
300
|
+
lastCtrlCAt = 0;
|
|
301
|
+
setShutdownArmed(false);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (deps.getOverlayState() === "closed" && deps.cancelActiveEditorBash()) {
|
|
305
|
+
lastCtrlCAt = 0;
|
|
306
|
+
setShutdownArmed(false);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
288
309
|
const action = resolveApplicationCtrlCAction({
|
|
289
310
|
overlayState: deps.getOverlayState(),
|
|
290
311
|
streaming: deps.isStreaming(),
|
|
291
312
|
editorText: deps.getEditorText(),
|
|
292
313
|
lastCtrlCAt,
|
|
293
314
|
now: deps.clock.now(),
|
|
315
|
+
hasQueuedMessages: deps.hasQueuedMessages?.() ?? false,
|
|
294
316
|
});
|
|
295
317
|
if (action === "shutdown") {
|
|
296
318
|
lastCtrlCAt = 0;
|
|
@@ -329,16 +351,19 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
329
351
|
deps.requestRender();
|
|
330
352
|
return;
|
|
331
353
|
}
|
|
354
|
+
if (action === "protect-queue") {
|
|
355
|
+
lastCtrlCAt = 0;
|
|
356
|
+
setShutdownArmed(false);
|
|
357
|
+
deps.explainProtectedExit?.();
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
332
360
|
// arm-shutdown. The one branch that used to fall off the end of this
|
|
333
361
|
// function with nothing to show for the press.
|
|
334
362
|
setShutdownArmed(true);
|
|
335
363
|
};
|
|
336
364
|
|
|
337
|
-
const dismissNotifications = (): void => {
|
|
338
|
-
|
|
339
|
-
const doubleTap = isDoubleTap(lastNotificationDismissAt, now);
|
|
340
|
-
lastNotificationDismissAt = now;
|
|
341
|
-
if (doubleTap) {
|
|
365
|
+
const dismissNotifications = (all = false): void => {
|
|
366
|
+
if (all) {
|
|
342
367
|
deps.dismissAllNotifications();
|
|
343
368
|
return;
|
|
344
369
|
}
|
|
@@ -346,36 +371,28 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
346
371
|
if (first) deps.dismissNotification(first.id);
|
|
347
372
|
};
|
|
348
373
|
|
|
349
|
-
const toggleToolExpansion = (): void => {
|
|
350
|
-
const now = deps.clock.now();
|
|
351
|
-
const doubleTap = isDoubleTap(lastToolExpandAt, now);
|
|
352
|
-
lastToolExpandAt = now;
|
|
353
|
-
const changed = doubleTap ? deps.toggleAllToolsExpanded() : deps.toggleLastToolExpanded();
|
|
354
|
-
if (changed) deps.requestRender();
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
const toggleThinkingExpansion = (): void => {
|
|
358
|
-
const now = deps.clock.now();
|
|
359
|
-
const doubleTap = isDoubleTap(lastThinkingExpandAt, now);
|
|
360
|
-
lastThinkingExpandAt = now;
|
|
361
|
-
const changed = doubleTap ? deps.toggleAllThinking() : deps.toggleLastThinking();
|
|
362
|
-
if (changed) deps.requestRender();
|
|
363
|
-
};
|
|
364
|
-
|
|
365
374
|
const handleInput = (data: string): ApplicationInputResult => {
|
|
366
|
-
|
|
367
|
-
if (
|
|
368
|
-
if (
|
|
375
|
+
if (isKeyRelease(data)) return { consume: true };
|
|
376
|
+
if (isKeyRepeat(data) && !(deps.matchesRepeatableInput?.(data) ?? false)) return { consume: true };
|
|
377
|
+
if (matchesKey(data, "ctrl+c")) {
|
|
378
|
+
handleCtrlC();
|
|
369
379
|
return { consume: true };
|
|
370
380
|
}
|
|
371
|
-
|
|
372
|
-
if (
|
|
373
|
-
|
|
381
|
+
if (deps.leaderKeys.isPending() && deps.leaderKeys.route(data)) return { consume: true };
|
|
382
|
+
if (deps.leaderKeys.route(data)) return { consume: true };
|
|
383
|
+
if (deps.isSearchFocused?.()) {
|
|
384
|
+
deps.forwardFocusedInput?.(data);
|
|
374
385
|
return { consume: true };
|
|
375
386
|
}
|
|
376
387
|
if (deps.routeOverlayKey(data)) return { consume: true };
|
|
377
|
-
if (overlayOwnsInput(deps.getOverlayState()))
|
|
378
|
-
|
|
388
|
+
if (overlayOwnsInput(deps.getOverlayState())) {
|
|
389
|
+
if (deps.forwardFocusedInput) {
|
|
390
|
+
deps.forwardFocusedInput(data);
|
|
391
|
+
return { consume: true };
|
|
392
|
+
}
|
|
393
|
+
return undefined;
|
|
394
|
+
}
|
|
395
|
+
if (isEscapeKey(data) && deps.isAutocompleteVisible?.()) return undefined;
|
|
379
396
|
if (isEscapeKey(data) && deps.cancelActiveEditorBash()) return { consume: true };
|
|
380
397
|
if (isEscapeKey(data) && deps.isStreaming()) {
|
|
381
398
|
deps.cancelActiveRun();
|
|
@@ -397,6 +414,7 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
397
414
|
if (!deps.matchesAction(data, id)) continue;
|
|
398
415
|
return deps.dispatchAction(id) ? { consume: true } : undefined;
|
|
399
416
|
}
|
|
417
|
+
if (deps.routeComposerKey?.(data)) return { consume: true };
|
|
400
418
|
return undefined;
|
|
401
419
|
};
|
|
402
420
|
|
|
@@ -427,8 +445,6 @@ export function createApplicationController(deps: ApplicationControllerDeps): Ap
|
|
|
427
445
|
handleInput,
|
|
428
446
|
handleCtrlC,
|
|
429
447
|
dismissNotifications,
|
|
430
|
-
toggleToolExpansion,
|
|
431
|
-
toggleThinkingExpansion,
|
|
432
448
|
shutdown,
|
|
433
449
|
};
|
|
434
450
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { WorkerContextSnapshot } from "../domains/context/worker/contract.js";
|
|
2
|
+
import { captureWorkerContext } from "../domains/context/worker/snapshot.js";
|
|
1
3
|
/**
|
|
2
4
|
* The chat loop: one turn's state machine.
|
|
3
5
|
*
|
|
@@ -129,6 +131,7 @@ export interface QueueUpdateEvent {
|
|
|
129
131
|
* same beat. Enqueue time shows the text only in the steering-queue panel.
|
|
130
132
|
*/
|
|
131
133
|
export interface QueuedUserTurnEvent {
|
|
134
|
+
display?: { text: string; note: string };
|
|
132
135
|
type: "queued_user_turn";
|
|
133
136
|
text: string;
|
|
134
137
|
/** `interrupt` marks a message that cancelled the run and was submitted as a fresh prompt. */
|
|
@@ -198,6 +201,8 @@ export type ChatLoopEvent =
|
|
|
198
201
|
| ToolApprovalStateEvent;
|
|
199
202
|
|
|
200
203
|
export interface ChatSubmitOptions {
|
|
204
|
+
/** Presentation only; never part of the model message or persisted text. */
|
|
205
|
+
display?: { text: string; note: string };
|
|
201
206
|
/** Host-owned run identity, scoped to this submit and its internal continuations. */
|
|
202
207
|
hostRun?: ToolInvokeOptions["hostRun"];
|
|
203
208
|
images?: ReadonlyArray<ImageContent>;
|
|
@@ -315,6 +320,7 @@ export interface ChatLoop {
|
|
|
315
320
|
cancel(options?: ChatCancelOptions): void;
|
|
316
321
|
onEvent(handler: (event: ChatLoopEvent) => void): () => void;
|
|
317
322
|
getSessionId(): string | null;
|
|
323
|
+
captureWorkerContext?(): WorkerContextSnapshot | null;
|
|
318
324
|
lastRunSnapshot?(): ChatLoopRunSnapshot | null;
|
|
319
325
|
isStreaming(): boolean;
|
|
320
326
|
/**
|
|
@@ -751,7 +757,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
751
757
|
const queues = createTurnQueues({
|
|
752
758
|
state,
|
|
753
759
|
emitQueueUpdateEvent: (messages) => emit({ type: "queue_update", messages }),
|
|
754
|
-
emitQueuedUserTurn: (entry) => emit({ type: "queued_user_turn",
|
|
760
|
+
emitQueuedUserTurn: (entry) => emit({ type: "queued_user_turn", ...entry }),
|
|
755
761
|
emitNotice,
|
|
756
762
|
// The loop's own resubmits (stranded steers, continuation requests) run
|
|
757
763
|
// from submit's finally and bypass the admission gate: an interrupt that
|
|
@@ -863,6 +869,11 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
863
869
|
if (payload.changed) context.invalidateSessionPromptCache();
|
|
864
870
|
}) ?? null;
|
|
865
871
|
|
|
872
|
+
const unsubscribePluginsReload =
|
|
873
|
+
deps.bus?.on(BusChannels.PluginsReloaded, () => {
|
|
874
|
+
context.invalidateSessionPromptCache();
|
|
875
|
+
}) ?? null;
|
|
876
|
+
|
|
866
877
|
const unsubscribeSynthesisLock =
|
|
867
878
|
deps.bus?.on(BusChannels.LoopBlocked, (payload) => {
|
|
868
879
|
const disposition = (payload as { disposition?: unknown } | null)?.disposition;
|
|
@@ -1097,13 +1108,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1097
1108
|
// Enter while streaming means "correct it now": the engine
|
|
1098
1109
|
// steering queue drains after every tool batch, so the text
|
|
1099
1110
|
// lands as a user message before the next model turn.
|
|
1100
|
-
//
|
|
1111
|
+
// Ctrl+Q (queueFollowUp) keeps the after-this-run intent.
|
|
1101
1112
|
if (isWorkerShareNote(trimmed)) state.turnSharedWorkerNote = true;
|
|
1102
1113
|
// The queue carries the submitted bytes, not the trimmed copy the
|
|
1103
1114
|
// guard above reads: a steer is a model-facing turn and the
|
|
1104
1115
|
// payload contract applies to it too (issue #244).
|
|
1105
|
-
if (mode === "end-of-turn") queues.queueFollowUp(text);
|
|
1106
|
-
else queues.steer(text);
|
|
1116
|
+
if (mode === "end-of-turn") queues.queueFollowUp(text, options.display);
|
|
1117
|
+
else queues.steer(text, options.display);
|
|
1107
1118
|
return;
|
|
1108
1119
|
}
|
|
1109
1120
|
emitNotice("[Clio Coder] response already in progress. Press Esc to cancel the active run.");
|
|
@@ -1287,7 +1298,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1287
1298
|
// An interrupt was submitted while a run was active, so no caller drew
|
|
1288
1299
|
// it in the transcript; render it here, after the cancel notice and the
|
|
1289
1300
|
// cancelled run's leftovers, which is the order the ledger has.
|
|
1290
|
-
if (interrupted)
|
|
1301
|
+
if (interrupted)
|
|
1302
|
+
emit({
|
|
1303
|
+
type: "queued_user_turn",
|
|
1304
|
+
text,
|
|
1305
|
+
kind: "interrupt",
|
|
1306
|
+
...(options.display ? { display: options.display } : {}),
|
|
1307
|
+
});
|
|
1291
1308
|
context.logPromptCompileIfPending();
|
|
1292
1309
|
const previousThinkingLevel = previousRunSnapshot?.runtimeResolution?.effectiveThinkingLevel;
|
|
1293
1310
|
if (
|
|
@@ -1484,6 +1501,15 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1484
1501
|
};
|
|
1485
1502
|
},
|
|
1486
1503
|
|
|
1504
|
+
captureWorkerContext(): WorkerContextSnapshot | null {
|
|
1505
|
+
const meta = deps.session?.current();
|
|
1506
|
+
if (!meta) return null;
|
|
1507
|
+
return captureWorkerContext(
|
|
1508
|
+
{ sessionId: meta.id, leafTurnId: state.lastTurnId, cwd: meta.cwd },
|
|
1509
|
+
state.runtime?.agent.state.messages ?? state.replayedContextMessages,
|
|
1510
|
+
);
|
|
1511
|
+
},
|
|
1512
|
+
|
|
1487
1513
|
getSessionId(): string | null {
|
|
1488
1514
|
return deps.session?.current()?.id ?? null;
|
|
1489
1515
|
},
|
|
@@ -1547,6 +1573,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1547
1573
|
dispose(): void {
|
|
1548
1574
|
unsubscribeConfigReload?.();
|
|
1549
1575
|
unsubscribeExtensionsReload?.();
|
|
1576
|
+
unsubscribePluginsReload?.();
|
|
1550
1577
|
unsubscribeSynthesisLock?.();
|
|
1551
1578
|
unsubscribePrewarmCompaction();
|
|
1552
1579
|
prewarm.dispose();
|