@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,6 @@
|
|
|
1
|
+
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
2
|
+
import { transcriptDetail } from "../transcript-detail.js";
|
|
3
|
+
import { previewBudget, previewRows } from "./preview.js";
|
|
1
4
|
/**
|
|
2
5
|
* Structured renderer for tool-execution chat segments (Slice A of the
|
|
3
6
|
* pi-coding-agent parity work). pi-coding-agent renders every tool call as
|
|
@@ -48,10 +51,7 @@ const ARG_PREVIEW_LIMIT = 60;
|
|
|
48
51
|
const WEB_FETCH_ARG_PREVIEW_LIMIT = 140;
|
|
49
52
|
const FULL_RESULT_PREVIEW_LIMIT = 60_000;
|
|
50
53
|
const FULL_RESULT_ROW_LIMIT = 120;
|
|
51
|
-
const STREAMING_RESULT_ROW_LIMIT = 20;
|
|
52
54
|
const ARGS_BODY_LINE_LIMIT = 24;
|
|
53
|
-
/** Rows of mutation diff a folded edit/write row keeps visible before it defers to the body. */
|
|
54
|
-
const FOLDED_DIFF_ROW_LIMIT = 24;
|
|
55
55
|
const STATUS_OK_GLYPH = GLYPH.ok;
|
|
56
56
|
const STATUS_ERROR_GLYPH = GLYPH.error;
|
|
57
57
|
|
|
@@ -111,6 +111,8 @@ export interface ToolBodyRenderOptions {
|
|
|
111
111
|
unbounded?: boolean;
|
|
112
112
|
/** Live rows color mutation diffs; replay and export deliberately use plain text. */
|
|
113
113
|
diffStyle?: "color" | "plain";
|
|
114
|
+
detail?: TranscriptDetailPolicy;
|
|
115
|
+
terminalRows?: number;
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
/** Row cap for a tool body: unbounded lifts both the row and char limits. */
|
|
@@ -1110,30 +1112,6 @@ function renderResultBlock(
|
|
|
1110
1112
|
return renderOutputRows(resultText(unwrapped, resultCharLimit(opts)), width, isError, resultRowLimit(opts));
|
|
1111
1113
|
}
|
|
1112
1114
|
|
|
1113
|
-
/**
|
|
1114
|
-
* Header-only render for a tool call that has not yet finished. Used by the
|
|
1115
|
-
* live chat panel from streamed argument formation through execution. The
|
|
1116
|
-
* lifecycle tail distinguishes a forming call, a ready call, and a running
|
|
1117
|
-
* call without inventing execution time before Pi starts the tool.
|
|
1118
|
-
*/
|
|
1119
|
-
export function renderToolCallHeader(call: ToolExecutionStart, width: number): string[] {
|
|
1120
|
-
return wrap(
|
|
1121
|
-
headerLine(call.toolName, call.args, call.phase ?? "running", {
|
|
1122
|
-
elapsedMs: call.elapsedMs,
|
|
1123
|
-
}),
|
|
1124
|
-
width,
|
|
1125
|
-
);
|
|
1126
|
-
}
|
|
1127
|
-
|
|
1128
|
-
/** Running-only footer used when an operator pauses live output; execution continues. */
|
|
1129
|
-
export function renderToolRunningStatus(call: ToolExecutionStart, width: number): string[] {
|
|
1130
|
-
const elapsed = optionalCompactMs(call.elapsedMs);
|
|
1131
|
-
return [
|
|
1132
|
-
...renderToolCallHeader(call, width),
|
|
1133
|
-
...indentAndWrap(dim(elapsed ? `live output paused · ${elapsed}` : "live output paused"), width, false),
|
|
1134
|
-
];
|
|
1135
|
-
}
|
|
1136
|
-
|
|
1137
1115
|
function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): HeaderStatus {
|
|
1138
1116
|
// Discriminate on `result` rather than `isError`: only `ToolExecutionFinished`
|
|
1139
1117
|
// carries a `result` field, so a `ToolExecutionStart` with a stray
|
|
@@ -1143,59 +1121,8 @@ function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): Header
|
|
|
1143
1121
|
return call.isError ? "error" : "ok";
|
|
1144
1122
|
}
|
|
1145
1123
|
|
|
1146
|
-
/**
|
|
1147
|
-
|
|
1148
|
-
* ▸ <body><status>
|
|
1149
|
-
* `status` is "" for in-flight, " ✓" green for success, " ✗" red for error.
|
|
1150
|
-
* Output is width-wrapped via wrapTextWithAnsi.
|
|
1151
|
-
*
|
|
1152
|
-
* When `expandKey` is supplied AND the call has finished, a dim ` (<key>)`
|
|
1153
|
-
* discoverability hint rides at the very end of the atomic status tail so users
|
|
1154
|
-
* see how to expand the collapsed block. Composing the full line (facts, status
|
|
1155
|
-
* glyph, duration, offload, and hint) before wrapping keeps the status glyph
|
|
1156
|
-
* and duration together on one row. The hint is suppressed for in-flight calls
|
|
1157
|
-
* (still running, no useful body to expand yet) and when `expandKey` is
|
|
1158
|
-
* empty/undefined (no key bound, hint would be misleading). The renderer never
|
|
1159
|
-
* imports the keybindings manager directly; the caller resolves the key string
|
|
1160
|
-
* and passes it in to keep this module pure.
|
|
1161
|
-
*/
|
|
1162
|
-
export interface ToolSublineRenderOptions {
|
|
1163
|
-
/** Live rows color the folded mutation diff; replay and export request plain rows. */
|
|
1164
|
-
diffStyle?: "color" | "plain";
|
|
1165
|
-
/**
|
|
1166
|
-
* Whether the folded row carries the extras its tool's presentation asks
|
|
1167
|
-
* for (today the bounded mutation diff). The bare subline level drops them;
|
|
1168
|
-
* the failure excerpt is not one of them and always rides the row.
|
|
1169
|
-
*/
|
|
1170
|
-
foldedExtras?: "per-tool" | "none";
|
|
1171
|
-
}
|
|
1172
|
-
|
|
1173
|
-
/**
|
|
1174
|
-
* The bounded diff a folded mutation row keeps under itself, when the tool's
|
|
1175
|
-
* presentation asks for one and the result carries one. A folded `edit` that
|
|
1176
|
-
* hid its change told the operator nothing they could act on.
|
|
1177
|
-
*/
|
|
1178
|
-
function foldedDiffRows(finished: ToolExecutionFinished, width: number, opts: ToolSublineRenderOptions): string[] {
|
|
1179
|
-
if (opts.foldedExtras === "none") return [];
|
|
1180
|
-
if (finished.isError || isNonExecutedOutcome(finished.outcome)) return [];
|
|
1181
|
-
const presentation =
|
|
1182
|
-
toolResultPresentationPolicy(finished.result) ?? toolPresentationPolicy(finished.toolName, finished.args);
|
|
1183
|
-
if (!presentation.showDiffWhenFolded) return [];
|
|
1184
|
-
const diff = resultDiff(finished.result);
|
|
1185
|
-
if (diff === null) return [];
|
|
1186
|
-
return truncateRowsMiddle(
|
|
1187
|
-
renderMutationDiffBlock(diff, width, opts.diffStyle !== "plain"),
|
|
1188
|
-
FOLDED_DIFF_ROW_LIMIT,
|
|
1189
|
-
false,
|
|
1190
|
-
);
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
export function renderToolSubline(
|
|
1194
|
-
call: ToolExecutionStart | ToolExecutionFinished,
|
|
1195
|
-
width: number,
|
|
1196
|
-
expandKey?: string,
|
|
1197
|
-
opts: ToolSublineRenderOptions = {},
|
|
1198
|
-
): string[] {
|
|
1124
|
+
/** Stable action identity, outcome, and captured-result metadata. */
|
|
1125
|
+
export function renderToolSubline(call: ToolExecutionStart | ToolExecutionFinished, width: number): string[] {
|
|
1199
1126
|
const status = sublineStatus(call);
|
|
1200
1127
|
const meta: StatusMeta =
|
|
1201
1128
|
"result" in call
|
|
@@ -1208,11 +1135,7 @@ export function renderToolSubline(
|
|
|
1208
1135
|
: { elapsedMs: call.elapsedMs };
|
|
1209
1136
|
const parts = sublineParts(call, status, meta);
|
|
1210
1137
|
const excerpt = "result" in call ? failureExcerpt(call, width) : "";
|
|
1211
|
-
|
|
1212
|
-
const tail = showHint ? `${parts.tail}${dim(` (${expandKey})`)}` : parts.tail;
|
|
1213
|
-
const lines = wrapSublineWithTail(`${parts.lead}${excerpt}`, tail, width);
|
|
1214
|
-
if ("result" in call) lines.push(...foldedDiffRows(call, width, opts));
|
|
1215
|
-
return lines;
|
|
1138
|
+
return wrapSublineWithTail(`${parts.lead}${excerpt}`, parts.tail, width);
|
|
1216
1139
|
}
|
|
1217
1140
|
|
|
1218
1141
|
/**
|
|
@@ -1300,6 +1223,7 @@ export function renderToolResultOnly(
|
|
|
1300
1223
|
width: number,
|
|
1301
1224
|
opts: ToolBodyRenderOptions = {},
|
|
1302
1225
|
): string[] {
|
|
1226
|
+
if (!opts.unbounded && opts.detail) return renderToolPreview(finished, width, opts.detail, opts);
|
|
1303
1227
|
const status: HeaderStatus = finished.isError ? "error" : "ok";
|
|
1304
1228
|
const statusMeta: StatusMeta = {
|
|
1305
1229
|
durationMs: finished.durationMs,
|
|
@@ -1315,50 +1239,6 @@ export function renderToolResultOnly(
|
|
|
1315
1239
|
return out;
|
|
1316
1240
|
}
|
|
1317
1241
|
|
|
1318
|
-
/**
|
|
1319
|
-
* Streaming render for an in-flight tool call whose expanded block should
|
|
1320
|
-
* surface the latest partial output. Used by the chat panel between
|
|
1321
|
-
* `tool_execution_start` and `tool_execution_end` when the user has expanded
|
|
1322
|
-
* the tool segment. The header carries the running lifecycle tail, secondary
|
|
1323
|
-
* arguments remain visible, and the latest cumulative Pi result renders under
|
|
1324
|
-
* a labeled live-output rail capped at the streaming row limit. An empty result renders
|
|
1325
|
-
* `(no output yet)` so the user can distinguish a slow start from a stalled
|
|
1326
|
-
* call.
|
|
1327
|
-
*/
|
|
1328
|
-
export function renderToolStreamingExecution(
|
|
1329
|
-
call: ToolExecutionStart,
|
|
1330
|
-
width: number,
|
|
1331
|
-
partialResult: unknown,
|
|
1332
|
-
): string[] {
|
|
1333
|
-
const out: string[] = [];
|
|
1334
|
-
out.push(...renderToolCallHeader({ ...call, phase: "running" }, width));
|
|
1335
|
-
out.push(...renderArgsBody(call.toolName, call.args, width, false));
|
|
1336
|
-
const partial: ToolExecutionFinished = {
|
|
1337
|
-
toolCallId: call.toolCallId,
|
|
1338
|
-
toolName: call.toolName,
|
|
1339
|
-
args: call.args,
|
|
1340
|
-
result: partialResult,
|
|
1341
|
-
isError: false,
|
|
1342
|
-
};
|
|
1343
|
-
out.push(...renderOutputMeta(partial, width, false, "live output"));
|
|
1344
|
-
const partialOutput = unwrapResultEnvelope(partialResult);
|
|
1345
|
-
if (isEmptyResult(partialOutput)) {
|
|
1346
|
-
out.push(...indentAndWrap(dim("(no output yet)"), width, false));
|
|
1347
|
-
} else {
|
|
1348
|
-
if (call.toolName === "bash") {
|
|
1349
|
-
const bashArgs = asBashArgs(redactToolArgs(call.args));
|
|
1350
|
-
if (bashArgs !== null) {
|
|
1351
|
-
const commandLine = `${cyanBold("$")} ${highlightBashCommand(stripShellWrapperForDisplay(bashArgs.command))}`;
|
|
1352
|
-
out.push(...indentAndWrap(commandLine, width, false));
|
|
1353
|
-
}
|
|
1354
|
-
}
|
|
1355
|
-
out.push(
|
|
1356
|
-
...renderOutputRows(resultText(partialOutput, FULL_RESULT_PREVIEW_LIMIT), width, false, STREAMING_RESULT_ROW_LIMIT),
|
|
1357
|
-
);
|
|
1358
|
-
}
|
|
1359
|
-
return out;
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
1242
|
/** Display-only lifecycle for operator-issued `!` and `!!` bash commands. */
|
|
1363
1243
|
export interface BashTranscriptExecution {
|
|
1364
1244
|
command: string;
|
|
@@ -1372,13 +1252,6 @@ export interface BashTranscriptExecution {
|
|
|
1372
1252
|
fullOutputPath?: string | undefined;
|
|
1373
1253
|
excludeFromContext?: boolean | undefined;
|
|
1374
1254
|
error?: string | undefined;
|
|
1375
|
-
/**
|
|
1376
|
-
* Whether the block draws its one-line row instead of the full body. The
|
|
1377
|
-
* caller resolves this from the transcript detail policy and the operator's
|
|
1378
|
-
* override, the same way the panel resolves a model bash call. Omitted means
|
|
1379
|
-
* folded.
|
|
1380
|
-
*/
|
|
1381
|
-
folded?: boolean | undefined;
|
|
1382
1255
|
}
|
|
1383
1256
|
|
|
1384
1257
|
/**
|
|
@@ -1389,7 +1262,7 @@ export interface BashTranscriptExecution {
|
|
|
1389
1262
|
export function renderBashTranscriptExecution(
|
|
1390
1263
|
execution: BashTranscriptExecution,
|
|
1391
1264
|
width: number,
|
|
1392
|
-
|
|
1265
|
+
_expandKey?: string,
|
|
1393
1266
|
bodyOptions: ToolBodyRenderOptions = {},
|
|
1394
1267
|
): string[] {
|
|
1395
1268
|
const shownBytes = Buffer.byteLength(execution.output, "utf8");
|
|
@@ -1409,30 +1282,12 @@ export function renderBashTranscriptExecution(
|
|
|
1409
1282
|
content: [{ type: "text", text: execution.output }],
|
|
1410
1283
|
details,
|
|
1411
1284
|
};
|
|
1412
|
-
const folded = execution.folded !== false;
|
|
1413
1285
|
if (execution.running) {
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
{
|
|
1417
|
-
toolCallId: "local-bash",
|
|
1418
|
-
toolName: "bash",
|
|
1419
|
-
args,
|
|
1420
|
-
elapsedMs: execution.elapsedMs,
|
|
1421
|
-
phase: "running",
|
|
1422
|
-
},
|
|
1423
|
-
width,
|
|
1424
|
-
);
|
|
1425
|
-
}
|
|
1426
|
-
return renderToolStreamingExecution(
|
|
1427
|
-
{
|
|
1428
|
-
toolCallId: "local-bash",
|
|
1429
|
-
toolName: "bash",
|
|
1430
|
-
args,
|
|
1431
|
-
elapsedMs: execution.elapsedMs,
|
|
1432
|
-
phase: "running",
|
|
1433
|
-
},
|
|
1286
|
+
return renderToolPreview(
|
|
1287
|
+
{ toolCallId: "local-bash", toolName: "bash", args, phase: "running", elapsedMs: execution.elapsedMs },
|
|
1434
1288
|
width,
|
|
1435
|
-
|
|
1289
|
+
bodyOptions.detail ?? transcriptDetail(),
|
|
1290
|
+
{ ...bodyOptions, operator: true, partialResult: result },
|
|
1436
1291
|
);
|
|
1437
1292
|
}
|
|
1438
1293
|
const message = execution.error?.trim();
|
|
@@ -1454,5 +1309,57 @@ export function renderBashTranscriptExecution(
|
|
|
1454
1309
|
...(execution.fullOutputPath !== undefined ? { offloadPath: execution.fullOutputPath } : {}),
|
|
1455
1310
|
},
|
|
1456
1311
|
};
|
|
1457
|
-
return
|
|
1312
|
+
return bodyOptions.unbounded
|
|
1313
|
+
? renderToolExecution(finished, width, bodyOptions)
|
|
1314
|
+
: renderToolPreview(finished, width, bodyOptions.detail ?? transcriptDetail(), { ...bodyOptions, operator: true });
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
/** One action identity plus a bounded result; arguments and full output belong in /view. */
|
|
1318
|
+
export function renderToolPreview(
|
|
1319
|
+
call: ToolExecutionStart | ToolExecutionFinished,
|
|
1320
|
+
width: number,
|
|
1321
|
+
detail: TranscriptDetailPolicy,
|
|
1322
|
+
options: ToolBodyRenderOptions & { terminalRows?: number; partialResult?: unknown; operator?: boolean } = {},
|
|
1323
|
+
): string[] {
|
|
1324
|
+
const finished = "result" in call ? call : undefined;
|
|
1325
|
+
const failure = finished?.isError === true || finished?.outcome !== undefined;
|
|
1326
|
+
const limit = previewBudget(
|
|
1327
|
+
failure
|
|
1328
|
+
? detail.errorRows
|
|
1329
|
+
: options.operator
|
|
1330
|
+
? detail.operatorBashRows
|
|
1331
|
+
: call.toolName === "bash"
|
|
1332
|
+
? detail.bashRows
|
|
1333
|
+
: detail.resultRows,
|
|
1334
|
+
options.terminalRows,
|
|
1335
|
+
);
|
|
1336
|
+
const rows = renderToolSubline(call, width);
|
|
1337
|
+
const result = finished?.result ?? options.partialResult;
|
|
1338
|
+
const diff = finished && !failure ? resultDiff(result) : null;
|
|
1339
|
+
if (diff !== null && detail.diffRows > 0) {
|
|
1340
|
+
rows.push(
|
|
1341
|
+
...previewRows(
|
|
1342
|
+
renderMutationDiffBlock(redactSecretString(diff), width, options.diffStyle !== "plain"),
|
|
1343
|
+
previewBudget(detail.diffRows, options.terminalRows),
|
|
1344
|
+
width,
|
|
1345
|
+
),
|
|
1346
|
+
);
|
|
1347
|
+
} else if (limit > 0 && result !== undefined) {
|
|
1348
|
+
const text = resultText(unwrapResultEnvelope(result), Number.POSITIVE_INFINITY);
|
|
1349
|
+
const body = indentAndWrap(redactSecretString(text), width, failure);
|
|
1350
|
+
rows.push(...previewRows(body, limit, width, call.toolName === "bash" || !finished));
|
|
1351
|
+
}
|
|
1352
|
+
return rows;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/** Only ordinary successful observations can lose their individual metadata rows. */
|
|
1356
|
+
export function canGroupObservation(call: ToolExecutionFinished): boolean {
|
|
1357
|
+
return (
|
|
1358
|
+
["read", "grep", "find", "ls"].includes(call.toolName) &&
|
|
1359
|
+
!call.isError &&
|
|
1360
|
+
!call.outcome &&
|
|
1361
|
+
!call.evictedReason &&
|
|
1362
|
+
!isTruncatedResult(call) &&
|
|
1363
|
+
offloadPathOf(call) === null
|
|
1364
|
+
);
|
|
1458
1365
|
}
|
|
@@ -1,27 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* a delegated ACP peer differ only in what the header can name about their
|
|
7
|
-
* route, so the body, the tool line, and the receipt footer are identical and
|
|
8
|
-
* an operator learns one grammar. The origin glyph is the only thing that says
|
|
9
|
-
* who asked, which is the same rule the board and the footer chip follow.
|
|
10
|
-
*
|
|
11
|
-
* ◇ coder · node-a/example-coder-model · run 2mkas6s
|
|
12
|
-
* │ Hello! I'm the coder worker.
|
|
13
|
-
* │ ⚙ read · artifact
|
|
14
|
-
* └ ✓ execution ok · 4.8k tok · 9.6s · contract pass
|
|
15
|
-
* │ quality: grounded
|
|
16
|
-
*
|
|
17
|
-
* Folded (the default for a run the model asked for) keeps identity and
|
|
18
|
-
* execution on a tool-style subline, followed by the settled quality fact:
|
|
19
|
-
*
|
|
20
|
-
* ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ execution ok · 41s (Ctrl+O)
|
|
21
|
-
* │ quality: validation failed
|
|
22
|
-
*
|
|
23
|
-
* Pure: no I/O, no module-level mutable state beyond the shared theme handle.
|
|
24
|
-
*/
|
|
1
|
+
import { redactSecretString } from "../../domains/safety/redaction.js";
|
|
2
|
+
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
3
|
+
import { transcriptDetail } from "../transcript-detail.js";
|
|
4
|
+
import { previewBudget, previewRows } from "./preview.js";
|
|
5
|
+
/** Bounded worker summaries share the main transcript's output style. */
|
|
25
6
|
|
|
26
7
|
import { parseJsonObjectPayload } from "../../core/json-payload.js";
|
|
27
8
|
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
@@ -48,10 +29,8 @@ const SEPARATOR = " · ";
|
|
|
48
29
|
const BODY_LINE_LIMIT = 80;
|
|
49
30
|
|
|
50
31
|
export interface WorkerEntryRenderOptions {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/** Key hint appended to a folded header, e.g. "Ctrl+O". Omitted when unknown. */
|
|
54
|
-
expandKey?: string | undefined;
|
|
32
|
+
detail?: TranscriptDetailPolicy;
|
|
33
|
+
terminalRows?: number;
|
|
55
34
|
/** Render the full body without the line cap; `/export` sets this. */
|
|
56
35
|
unbounded?: boolean;
|
|
57
36
|
}
|
|
@@ -96,6 +75,26 @@ function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
|
|
|
96
75
|
return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
|
|
97
76
|
}
|
|
98
77
|
|
|
78
|
+
/**
|
|
79
|
+
* A settled worker whose answer is a question for the operator.
|
|
80
|
+
*
|
|
81
|
+
* Materio and WTF-P workers return `needs_input: checkpoint:decision` (or
|
|
82
|
+
* `task_blocked`, or a `## CHECKPOINT REACHED` heading) followed by the
|
|
83
|
+
* questions the orchestrator has to relay. That is a prose convention, not a
|
|
84
|
+
* receipt field, so the transcript reads the first line of the answer.
|
|
85
|
+
*/
|
|
86
|
+
const CHECKPOINT_PREFIX = /^\s*(?:needs_input\b|task_blocked\b|##\s*CHECKPOINT REACHED\b|##\s*BLOCKED\b)/iu;
|
|
87
|
+
/** Rows a checkpoint's body keeps on the folded row: the questions are the point of the entry. */
|
|
88
|
+
const CHECKPOINT_PREVIEW_ROWS = 16;
|
|
89
|
+
|
|
90
|
+
export function workerNeedsInput(entry: Pick<WorkerEntryState, "text" | "receipt">): boolean {
|
|
91
|
+
return entry.receipt !== undefined && entry.receipt.stillRunning !== true && CHECKPOINT_PREFIX.test(entry.text);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function needsInputUnit(): string {
|
|
95
|
+
return theme.fg("warning", `${GLYPH.phaseBlocked} needs input`);
|
|
96
|
+
}
|
|
97
|
+
|
|
99
98
|
/** A block with no settled receipt yet: a spinner-free, honest "running". */
|
|
100
99
|
function pendingUnit(entry: WorkerEntryState): string {
|
|
101
100
|
return theme.fg(
|
|
@@ -121,6 +120,7 @@ function isPending(entry: WorkerEntryState): boolean {
|
|
|
121
120
|
*/
|
|
122
121
|
function footerUnits(entry: WorkerEntryState, receipt: WorkerReceiptSummary): string[] {
|
|
123
122
|
const units = [outcomeUnit(receipt, true)];
|
|
123
|
+
if (workerNeedsInput(entry)) units.push(needsInputUnit());
|
|
124
124
|
if (receipt.exitCode !== undefined && receipt.exitCode !== 0) {
|
|
125
125
|
units.push(theme.fg("error", `exit=${receipt.exitCode}`));
|
|
126
126
|
}
|
|
@@ -392,15 +392,18 @@ function footerLine(entry: WorkerEntryState, width: number): string {
|
|
|
392
392
|
* renders only when the caller resolved a key binding for it, so a rebound or
|
|
393
393
|
* unbound key never advertises a wrong chord.
|
|
394
394
|
*/
|
|
395
|
-
function
|
|
395
|
+
function actionLine(entry: WorkerEntryState, width: number): string {
|
|
396
396
|
const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
|
|
397
397
|
const status =
|
|
398
|
-
isPending(entry) || entry.receipt === undefined
|
|
398
|
+
isPending(entry) || entry.receipt === undefined
|
|
399
|
+
? pendingUnit(entry)
|
|
400
|
+
: workerNeedsInput(entry)
|
|
401
|
+
? needsInputUnit()
|
|
402
|
+
: outcomeUnit(entry.receipt, false);
|
|
399
403
|
const elapsed =
|
|
400
404
|
entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
|
|
405
|
+
const full = ` ${status}${elapsed}`;
|
|
406
|
+
let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}`;
|
|
404
407
|
// Reserve one identity cell. The optional hint yields before execution
|
|
405
408
|
// status when the suffix alone would exhaust the header's width.
|
|
406
409
|
if (visibleWidth(tail) >= width) tail = ` ${status}`;
|
|
@@ -421,15 +424,60 @@ export function renderWorkerEntryLines(
|
|
|
421
424
|
"muted",
|
|
422
425
|
safeWidth,
|
|
423
426
|
);
|
|
424
|
-
|
|
425
|
-
|
|
427
|
+
const detail = options.detail ?? transcriptDetail();
|
|
428
|
+
if (options.unbounded) {
|
|
429
|
+
const tools = toolLine(entry, safeWidth);
|
|
430
|
+
return [
|
|
431
|
+
headerLine(entry, safeWidth),
|
|
432
|
+
...bodyLines(entry, safeWidth, true),
|
|
433
|
+
...attemptLines(entry, safeWidth),
|
|
434
|
+
...(tools ? [tools] : []),
|
|
435
|
+
...failureLines(entry, safeWidth),
|
|
436
|
+
footerLine(entry, safeWidth),
|
|
437
|
+
...quality,
|
|
438
|
+
].map(redactSecretString);
|
|
439
|
+
}
|
|
440
|
+
const budget = (limit: number) => previewBudget(limit, options.terminalRows);
|
|
441
|
+
// A checkpoint's body is the question the operator answers next, so it keeps
|
|
442
|
+
// its rows whatever the transcript preset hides of an ordinary answer, and
|
|
443
|
+
// it renders in the warning token rather than as folded prose.
|
|
444
|
+
const needsInput = workerNeedsInput(entry);
|
|
445
|
+
const summaryRows = needsInput ? CHECKPOINT_PREVIEW_ROWS : budget(detail.workerRows);
|
|
446
|
+
const summary = bodySourceLines(entry).flatMap((line) =>
|
|
447
|
+
railLines(redactSecretString(line), needsInput ? "warning" : "muted", safeWidth),
|
|
448
|
+
);
|
|
449
|
+
const actions = entry.progress
|
|
450
|
+
? [...entry.progress.recentActions]
|
|
451
|
+
.reverse()
|
|
452
|
+
.concat(entry.progress.currentAction ? [entry.progress.currentAction] : [])
|
|
453
|
+
: [];
|
|
454
|
+
const trail = actions.flatMap((action) =>
|
|
455
|
+
railLines(
|
|
456
|
+
`${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
|
|
457
|
+
"muted",
|
|
458
|
+
safeWidth,
|
|
459
|
+
),
|
|
460
|
+
);
|
|
461
|
+
const tools = detail.workerActivity && trail.length === 0 ? toolLine(entry, safeWidth) : null;
|
|
462
|
+
const failure = previewRows(failureLines(entry, safeWidth), budget(detail.errorRows), safeWidth);
|
|
463
|
+
const presented = presentedContractAnswer(entry)?.footer;
|
|
426
464
|
return [
|
|
427
|
-
|
|
428
|
-
...
|
|
429
|
-
...attemptLines(entry, safeWidth),
|
|
430
|
-
...(tools
|
|
431
|
-
...
|
|
432
|
-
|
|
465
|
+
actionLine(entry, safeWidth),
|
|
466
|
+
...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
|
|
467
|
+
...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
|
|
468
|
+
...(tools ? [tools] : []),
|
|
469
|
+
...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
|
|
470
|
+
...failure,
|
|
471
|
+
...(presented ? railLines(presented, "muted", safeWidth) : []),
|
|
472
|
+
...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
|
|
473
|
+
...(entry.receipt?.receiptUnavailable ? railLines("receipt unavailable", "warning", safeWidth) : []),
|
|
474
|
+
...(entry.droppedLines
|
|
475
|
+
? railLines(
|
|
476
|
+
`… ${entry.droppedLines} earlier lines unavailable here · /view dispatch:${entry.runId}`,
|
|
477
|
+
"muted",
|
|
478
|
+
safeWidth,
|
|
479
|
+
)
|
|
480
|
+
: []),
|
|
433
481
|
...quality,
|
|
434
|
-
];
|
|
482
|
+
].map(redactSecretString);
|
|
435
483
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ExtensionCommandRow, resolveExtensionCommands } from "../domains/extensions/operator-commands.js";
|
|
1
2
|
import {
|
|
2
3
|
type AutocompleteItem,
|
|
3
4
|
type AutocompleteProvider,
|
|
@@ -66,9 +67,29 @@ export interface SlashCompletionItem extends AutocompleteItem {
|
|
|
66
67
|
cursorOffset?: number;
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
/** The slice of a loaded prompt template that the composer needs to offer it as a slash command. */
|
|
71
|
+
export interface PromptCommandTemplate {
|
|
72
|
+
name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
argumentHint?: string;
|
|
75
|
+
unavailable?: string;
|
|
76
|
+
/** Rendered for the operator on submit; the model never sees it. */
|
|
77
|
+
displayOnly?: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The marker a display-only template carries in the menu, beside its description. */
|
|
81
|
+
export const REFERENCE_TEMPLATE_MARKER = "reference";
|
|
82
|
+
|
|
69
83
|
export interface SlashAutocompleteOptions {
|
|
84
|
+
extensionCommands?: () => ReadonlyArray<ExtensionCommandRow>;
|
|
70
85
|
basePath?: string;
|
|
71
86
|
fdPath?: string | null;
|
|
87
|
+
/**
|
|
88
|
+
* Live view of the prompt templates discovered for the current workspace
|
|
89
|
+
* (user, project, and installed plugin roots). Read on every completion so a
|
|
90
|
+
* plugin reload or install shows up without rebuilding the provider.
|
|
91
|
+
*/
|
|
92
|
+
promptTemplates?: () => ReadonlyArray<PromptCommandTemplate>;
|
|
72
93
|
/** Read-only runtime values for the named grammar slots. */
|
|
73
94
|
completionSources?: CompletionSources;
|
|
74
95
|
/** Replace the default workspace-aware `@` source without adding a second composer provider. */
|
|
@@ -128,7 +149,6 @@ export const COMPLETION_SLOT_MANIFEST: Readonly<Record<string, CompletionSlotNam
|
|
|
128
149
|
"panes/show:pos:run-or-agent": "pane-runs-agents",
|
|
129
150
|
"panes/open:pos:preset-or-argv": "pane-presets",
|
|
130
151
|
"panes/close:pos:target": "pane-targets",
|
|
131
|
-
"resources/library:pos:kind": "library-tabs",
|
|
132
152
|
"model:pos:pattern": "models",
|
|
133
153
|
"thinking:pos:level": "thinking-levels",
|
|
134
154
|
"settings:pos:area": "settings-areas",
|
|
@@ -154,12 +174,7 @@ function completionGrammar(command: string, args: CommandArgsSpec): CommandArgsS
|
|
|
154
174
|
? {
|
|
155
175
|
positionals: spec.positionals.map((pos) => {
|
|
156
176
|
const completionSlot = COMPLETION_SLOT_MANIFEST[`${path}:pos:${pos.name}`];
|
|
157
|
-
const values =
|
|
158
|
-
command === "output" && pos.name === "verbosity"
|
|
159
|
-
? (["minimal", "default", "verbose"] as const)
|
|
160
|
-
: command === "settings" && pos.name === "area"
|
|
161
|
-
? SETTINGS_AREA_IDS
|
|
162
|
-
: undefined;
|
|
177
|
+
const values = command === "settings" && pos.name === "area" ? SETTINGS_AREA_IDS : undefined;
|
|
163
178
|
return { ...pos, ...(completionSlot ? { completionSlot } : {}), ...(values ? { values } : {}) };
|
|
164
179
|
}),
|
|
165
180
|
}
|
|
@@ -296,6 +311,7 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
|
|
|
296
311
|
private readonly files: CombinedAutocompleteProvider;
|
|
297
312
|
private readonly fileReferences: FileReferenceCompletionSource;
|
|
298
313
|
private readonly sourceBySlot: Record<CompletionSlotName, CompletionSource>;
|
|
314
|
+
private readonly promptTemplates: () => ReadonlyArray<PromptCommandTemplate>;
|
|
299
315
|
private generation = 0;
|
|
300
316
|
|
|
301
317
|
constructor(
|
|
@@ -303,10 +319,60 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
|
|
|
303
319
|
fdPath: string | null,
|
|
304
320
|
sources: CompletionSources,
|
|
305
321
|
fileReferenceSource?: FileReferenceCompletionSource,
|
|
322
|
+
promptTemplates?: () => ReadonlyArray<PromptCommandTemplate>,
|
|
323
|
+
private extensionCommands: () => ReadonlyArray<ExtensionCommandRow> = () => [],
|
|
306
324
|
) {
|
|
307
325
|
this.files = new CombinedAutocompleteProvider([], basePath, fdPath);
|
|
308
326
|
this.fileReferences = fileReferenceSource ?? createFileReferenceCompletionSource({ basePath });
|
|
309
327
|
this.sourceBySlot = { ...emptyCompletionSources(), ...sources };
|
|
328
|
+
this.promptTemplates = promptTemplates ?? (() => []);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Prompt templates as slash commands, after the built-in reference so a
|
|
333
|
+
* template can never shadow a built-in spelling in the menu. Namespaced
|
|
334
|
+
* plugin prompts (`wtfp:help`, `materio:status`) sort with their package.
|
|
335
|
+
*/
|
|
336
|
+
private promptCommandItems(
|
|
337
|
+
prefix: string,
|
|
338
|
+
builtinNames: ReadonlySet<string>,
|
|
339
|
+
range: { start: number; end: number },
|
|
340
|
+
): SlashCompletionItem[] {
|
|
341
|
+
const lowered = prefix.toLowerCase();
|
|
342
|
+
const seen = new Set<string>();
|
|
343
|
+
const items: SlashCompletionItem[] = [];
|
|
344
|
+
const templates = [...this.promptTemplates()].sort((a, b) => a.name.localeCompare(b.name));
|
|
345
|
+
for (const template of templates) {
|
|
346
|
+
const name = template.name;
|
|
347
|
+
if (!name || builtinNames.has(name.toLowerCase()) || seen.has(name)) continue;
|
|
348
|
+
if (!name.toLowerCase().startsWith(lowered) || name === prefix) continue;
|
|
349
|
+
seen.add(name);
|
|
350
|
+
const hint = template.argumentHint?.trim();
|
|
351
|
+
const summary = template.unavailable
|
|
352
|
+
? `unavailable: ${template.unavailable}`
|
|
353
|
+
: template.displayOnly
|
|
354
|
+
? `${REFERENCE_TEMPLATE_MARKER} · ${template.description}`
|
|
355
|
+
: template.description;
|
|
356
|
+
const description = compactDescription(`${hint ? `${hint} — ` : ""}${summary}`);
|
|
357
|
+
const item: SlashCompletionItem = {
|
|
358
|
+
id: `prompt:${name}`,
|
|
359
|
+
kind: "command",
|
|
360
|
+
value: name,
|
|
361
|
+
label: name,
|
|
362
|
+
effectDescription: template.unavailable
|
|
363
|
+
? `Prompt template unavailable: ${template.unavailable}`
|
|
364
|
+
: template.displayOnly
|
|
365
|
+
? `Reference card shown to you; nothing is sent to the model: ${template.description}`
|
|
366
|
+
: `Prompt template: ${summary}`,
|
|
367
|
+
replacement: range,
|
|
368
|
+
appendSpace: Boolean(hint),
|
|
369
|
+
};
|
|
370
|
+
if (description) item.description = description;
|
|
371
|
+
if (hint) item.remainingGrammar = truncateToWidth(hint, ARGUMENT_HINT_BUDGET);
|
|
372
|
+
if (template.unavailable) item.disabledReason = template.unavailable;
|
|
373
|
+
items.push(item);
|
|
374
|
+
}
|
|
375
|
+
return items;
|
|
310
376
|
}
|
|
311
377
|
|
|
312
378
|
async getSuggestions(
|
|
@@ -406,6 +472,31 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
|
|
|
406
472
|
if (remainingGrammar) item.remainingGrammar = remainingGrammar;
|
|
407
473
|
return item;
|
|
408
474
|
});
|
|
475
|
+
items.push(
|
|
476
|
+
...this.promptCommandItems(prefix, new Set(refs.map((ref) => ref.name.toLowerCase())), {
|
|
477
|
+
start: context.commandStart,
|
|
478
|
+
end: context.commandEnd,
|
|
479
|
+
}),
|
|
480
|
+
);
|
|
481
|
+
const promptNames = this.promptTemplates().map((prompt) => prompt.name);
|
|
482
|
+
for (const row of resolveExtensionCommands(this.extensionCommands(), promptNames)) {
|
|
483
|
+
if (
|
|
484
|
+
!row.invocation.toLowerCase().startsWith(prefix.toLowerCase()) ||
|
|
485
|
+
promptNames.some((name) => name.toLowerCase() === row.invocation.toLowerCase())
|
|
486
|
+
)
|
|
487
|
+
continue;
|
|
488
|
+
items.push({
|
|
489
|
+
id: `extension:${row.invocation}`,
|
|
490
|
+
kind: "command",
|
|
491
|
+
value: row.invocation,
|
|
492
|
+
label: row.invocation,
|
|
493
|
+
description: `extension (${row.scope}): ${row.description}`,
|
|
494
|
+
effectDescription: "Runs installed operator extension code; output is local to you",
|
|
495
|
+
replacement: { start: context.commandStart, end: context.commandEnd },
|
|
496
|
+
appendSpace: true,
|
|
497
|
+
...(!row.available ? { disabledReason: row.reason ?? "runtime unavailable" } : {}),
|
|
498
|
+
});
|
|
499
|
+
}
|
|
409
500
|
return items.length ? { items, prefix } : null;
|
|
410
501
|
}
|
|
411
502
|
|
|
@@ -539,5 +630,7 @@ export function createSlashCommandAutocompleteProvider(options: SlashAutocomplet
|
|
|
539
630
|
options.fdPath === undefined ? resolveFdBinary() : options.fdPath,
|
|
540
631
|
options.completionSources ?? {},
|
|
541
632
|
options.fileReferenceSource,
|
|
633
|
+
options.promptTemplates,
|
|
634
|
+
options.extensionCommands,
|
|
542
635
|
);
|
|
543
636
|
}
|