@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
|
@@ -3,42 +3,22 @@ import path from "node:path";
|
|
|
3
3
|
import { warnLegacyNaming } from "../../../core/naming-compat.js";
|
|
4
4
|
import { resolvePackageRoot } from "../../../core/package-root.js";
|
|
5
5
|
import { clioConfigDir } from "../../../core/xdg.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
installSkillFromSource,
|
|
10
|
-
isSkillName,
|
|
11
|
-
parseSkillSourceSpec,
|
|
12
|
-
type SkillInstallShaping,
|
|
13
|
-
} from "./install.js";
|
|
6
|
+
import { pluginResourcePath, readPluginManifest } from "../../plugins/index.js";
|
|
7
|
+
import { discoverLibrary, installLibraryPlan, planLibraryInstall, resolveLibraryPackage } from "../library.js";
|
|
8
|
+
import type { InstallSkillInput, InstallSkillResult, SkillInstallShaping } from "./install.js";
|
|
14
9
|
import { loadSkills, type Skill } from "./loader.js";
|
|
15
10
|
|
|
16
11
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* else a repo-level skills/ folder in the working tree, else the skills/
|
|
21
|
-
* catalog the installed clio-coder package carries. Metadata is read from
|
|
22
|
-
* the packages themselves via the normal skill loader.
|
|
23
|
-
* 2. A JSON index file: CLIO_CODER_SKILL_MARKETPLACE_INDEX, else
|
|
24
|
-
* <config>/skill-marketplace.json, else the skill-marketplace.json the
|
|
25
|
-
* package carries. Entries point at installable sources.
|
|
26
|
-
*
|
|
27
|
-
* The package fallbacks are what make a fresh npm install a marketplace at
|
|
28
|
-
* all: before them, an operator outside this repository with no env var set
|
|
29
|
-
* had no catalog and no index, so every bare-name install and every
|
|
30
|
-
* `/skill <name>` for a catalog skill failed. The package catalog is a
|
|
31
|
-
* marketplace source only, never a discovery root; catalog skills stay
|
|
32
|
-
* uninstalled until the operator asks, and install copies them out of the
|
|
33
|
-
* package into a Clio root without touching the network.
|
|
34
|
-
*
|
|
35
|
-
* There is no synthetic or hardcoded marketplace data; an empty result means
|
|
36
|
-
* no marketplace is configured.
|
|
12
|
+
* Skill-facing adapter for the canonical library, plus explicit authoring probes
|
|
13
|
+
* of unmanaged source trees. Runtime offers and activation use the library;
|
|
14
|
+
* only an explicit catalogDir/indexPath request invokes a raw source audit.
|
|
37
15
|
*/
|
|
38
16
|
|
|
39
17
|
export type MarketplaceSkillOrigin = "catalog" | "index";
|
|
40
|
-
|
|
41
|
-
|
|
18
|
+
|
|
19
|
+
import type { LibraryEntryKind, LibraryRequirementRef } from "../library-types.js";
|
|
20
|
+
|
|
21
|
+
export type { LibraryEntryKind, LibraryRequirementRef } from "../library-types.js";
|
|
42
22
|
|
|
43
23
|
/**
|
|
44
24
|
* The diagnostic that means "nothing is wrong, nothing is configured". Callers
|
|
@@ -48,10 +28,10 @@ export type LibraryRequirementRef = `${LibraryEntryKind}:${string}`;
|
|
|
48
28
|
export const MARKETPLACE_UNCONFIGURED = "no local skill marketplace catalog or index configured";
|
|
49
29
|
|
|
50
30
|
export interface MarketplaceSkill {
|
|
51
|
-
kind: LibraryEntryKind
|
|
31
|
+
kind: Exclude<LibraryEntryKind, "plugin">;
|
|
52
32
|
name: string;
|
|
53
33
|
description: string;
|
|
54
|
-
/** Local path or URL accepted by `clio-coder
|
|
34
|
+
/** Local path or URL accepted by `clio-coder library install`. */
|
|
55
35
|
sourceUrl: string;
|
|
56
36
|
version?: string;
|
|
57
37
|
audit?: "pass" | "warn" | "fail" | "unknown";
|
|
@@ -96,7 +76,7 @@ export interface DiscoverMarketplaceOptions {
|
|
|
96
76
|
*/
|
|
97
77
|
function packageCatalogDir(): string | null {
|
|
98
78
|
try {
|
|
99
|
-
return path.join(resolvePackageRoot(), "skills");
|
|
79
|
+
return path.join(resolvePackageRoot(), "library", "skills");
|
|
100
80
|
} catch {
|
|
101
81
|
return null;
|
|
102
82
|
}
|
|
@@ -104,7 +84,7 @@ function packageCatalogDir(): string | null {
|
|
|
104
84
|
|
|
105
85
|
function packageIndexPath(): string | null {
|
|
106
86
|
try {
|
|
107
|
-
return path.join(resolvePackageRoot(), "skills", "skill-marketplace.json");
|
|
87
|
+
return path.join(resolvePackageRoot(), "library", "skills", "skill-marketplace.json");
|
|
108
88
|
} catch {
|
|
109
89
|
return null;
|
|
110
90
|
}
|
|
@@ -250,6 +230,8 @@ function resolveCatalogDir(options: DiscoverMarketplaceOptions): string | null {
|
|
|
250
230
|
if (options.catalogDir) return path.resolve(options.catalogDir);
|
|
251
231
|
const fromEnv = process.env.CLIO_CODER_SKILL_CATALOG_DIR;
|
|
252
232
|
if (fromEnv && fromEnv.trim().length > 0) return path.resolve(fromEnv.trim());
|
|
233
|
+
const repoLibraryCatalog = path.join(options.cwd ?? process.cwd(), "library", "skills");
|
|
234
|
+
if (looksLikeSkillCatalog(repoLibraryCatalog)) return repoLibraryCatalog;
|
|
253
235
|
const repoCatalog = path.join(options.cwd ?? process.cwd(), "skills");
|
|
254
236
|
if (looksLikeSkillCatalog(repoCatalog)) return repoCatalog;
|
|
255
237
|
// The package's own catalog: rows resolve to local files, so a bare-name
|
|
@@ -297,6 +279,15 @@ function catalogSkills(dir: string, diagnostics: string[]): MarketplaceSkill[] {
|
|
|
297
279
|
}
|
|
298
280
|
|
|
299
281
|
export function discoverMarketplaceSkills(options: DiscoverMarketplaceOptions = {}): MarketplaceDiscoveryResult {
|
|
282
|
+
// Automatic promotion and /skill consume the same pinned library as the CLI.
|
|
283
|
+
// Explicit source probes below support authoring audits of unmanaged skill trees.
|
|
284
|
+
if (options.indexPath === undefined && options.catalogDir === undefined) {
|
|
285
|
+
const library = discoverLibrary(options.cwd ? { cwd: options.cwd } : {});
|
|
286
|
+
const skills: MarketplaceSkill[] = library.entries
|
|
287
|
+
.filter((entry) => entry.kind === "skill" && entry.origin !== "installed")
|
|
288
|
+
.map((entry) => ({ ...entry, kind: "skill", origin: entry.origin === "index" ? "index" : "catalog" }));
|
|
289
|
+
return { status: skills.length ? "installable" : "unavailable", skills, diagnostics: library.diagnostics };
|
|
290
|
+
}
|
|
300
291
|
const diagnostics: string[] = [];
|
|
301
292
|
const skills: MarketplaceSkill[] = [];
|
|
302
293
|
const seen = new Set<string>();
|
|
@@ -367,31 +358,31 @@ export function resolveMarketplaceShaping(options: DiscoverMarketplaceOptions =
|
|
|
367
358
|
};
|
|
368
359
|
}
|
|
369
360
|
|
|
370
|
-
/**
|
|
371
|
-
* The single install entry point for every frontend (headless CLI, TUI
|
|
372
|
-
* pending-skill prompt, skills hub). Source resolution, in precedence order:
|
|
373
|
-
*
|
|
374
|
-
* 1. A GitHub URL installs directly.
|
|
375
|
-
* 2. An existing local path installs directly; paths always beat same-named
|
|
376
|
-
* marketplace entries.
|
|
377
|
-
* 3. A bare skill name resolves through the local marketplace.
|
|
378
|
-
*
|
|
379
|
-
* Anything else is an error naming both failed interpretations. Overwriting
|
|
380
|
-
* an existing install always requires an explicit `force: true`.
|
|
381
|
-
*/
|
|
361
|
+
/** Skill-offer adapter: resolve a package and commit through the shared library engine. */
|
|
382
362
|
export function installSkill(input: InstallSkillInput): InstallSkillResult {
|
|
383
363
|
const requested = input.source.trim();
|
|
384
364
|
const source = requested === "clio-dev" ? "clio-coder-dev" : requested === "clio-test" ? "clio-coder-test" : requested;
|
|
385
365
|
if (source !== requested) warnLegacyNaming(requested, source);
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
|
|
366
|
+
if (input.overlay || input.exclude?.length || input.configDir)
|
|
367
|
+
throw new Error("package installs use the prepared manifest tree and the active Clio profile");
|
|
368
|
+
const entry = resolveLibraryPackage(source, input.cwd ? { cwd: input.cwd } : {});
|
|
369
|
+
if (entry.kind !== "skill") throw new Error(`expected a skill package, found ${entry.kind}:${entry.name}`);
|
|
370
|
+
if (input.name && input.name !== entry.name) throw new Error("package identities cannot be renamed at install");
|
|
371
|
+
const plan = planLibraryInstall(entry, {
|
|
372
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
373
|
+
scope: input.scope ?? "user",
|
|
374
|
+
force: input.force ?? false,
|
|
375
|
+
});
|
|
376
|
+
installLibraryPlan(plan);
|
|
377
|
+
const candidate = readPluginManifest(plan.path);
|
|
378
|
+
const component = candidate.manifest?.clio.components.find((item) => item.kind === "skill");
|
|
379
|
+
if (!component) throw new Error("installed skill package has no skill component");
|
|
380
|
+
return {
|
|
381
|
+
name: entry.name,
|
|
382
|
+
scope: input.scope ?? "user",
|
|
383
|
+
path: pluginResourcePath(plan.path, component.path),
|
|
384
|
+
sourceUrl: entry.sourceUrl,
|
|
385
|
+
installedHash: plan.sha256,
|
|
386
|
+
warnings: [],
|
|
387
|
+
};
|
|
397
388
|
}
|
|
@@ -143,7 +143,7 @@ export function matchMarketplaceSkills(
|
|
|
143
143
|
* is not the enforcement mechanism.
|
|
144
144
|
*
|
|
145
145
|
* This gates the promotion flow only. Operator-driven installs through
|
|
146
|
-
* `clio-coder
|
|
146
|
+
* `clio-coder library install <url>` keep their existing behavior.
|
|
147
147
|
*/
|
|
148
148
|
export const OWN_MARKETPLACE_URL_PREFIX = "https://github.com/iowarp/clio-coder/";
|
|
149
149
|
|
|
@@ -160,7 +160,7 @@ export function assertPromotionInstallSource(entry: MarketplaceSkill): void {
|
|
|
160
160
|
throw new Error(
|
|
161
161
|
`skill promotion: refusing to install "${entry.name}" from ${entry.sourceUrl}; ` +
|
|
162
162
|
"promotion installs only from Clio's own marketplace (local catalog or " +
|
|
163
|
-
`${OWN_MARKETPLACE_URL_PREFIX}). Install manually with clio-coder
|
|
163
|
+
`${OWN_MARKETPLACE_URL_PREFIX}). Install manually with clio-coder library install if intended.`,
|
|
164
164
|
);
|
|
165
165
|
}
|
|
166
166
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Local-first skill provenance pinning.
|
|
3
3
|
*
|
|
4
|
-
* `skills/registry.yaml` (regenerated with `
|
|
4
|
+
* `library/skills/registry.yaml` (regenerated with `pnpm run skills:pin`) pins the
|
|
5
5
|
* provenance-stripped sha256 of every marketplace skill's SKILL.md. At
|
|
6
6
|
* activation time, a skill carrying marketplace provenance (`registry-id`
|
|
7
7
|
* frontmatter) is compared against the pinned entry on the same normalized
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import { existsSync, readFileSync } from "node:fs";
|
|
17
17
|
import path from "node:path";
|
|
18
18
|
import yaml from "yaml";
|
|
19
|
+
import { resolvePackageRoot } from "../../../core/package-root.js";
|
|
19
20
|
|
|
20
21
|
export const SKILL_PIN_MANIFEST_FILENAME = "registry.yaml";
|
|
21
22
|
|
|
@@ -34,9 +35,21 @@ function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
|
34
35
|
/** Resolve the manifest path using the same catalog resolution as the marketplace. */
|
|
35
36
|
function resolveSkillPinManifestPath(cwd: string): string | null {
|
|
36
37
|
const fromEnv = process.env.CLIO_CODER_SKILL_CATALOG_DIR;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
if (fromEnv && fromEnv.trim().length > 0) {
|
|
39
|
+
const manifestPath = path.join(path.resolve(fromEnv.trim()), SKILL_PIN_MANIFEST_FILENAME);
|
|
40
|
+
return existsSync(manifestPath) ? manifestPath : null;
|
|
41
|
+
}
|
|
42
|
+
const repoLibraryManifest = path.join(cwd, "library", "skills", SKILL_PIN_MANIFEST_FILENAME);
|
|
43
|
+
if (existsSync(repoLibraryManifest)) return repoLibraryManifest;
|
|
44
|
+
const repoManifest = path.join(cwd, "skills", SKILL_PIN_MANIFEST_FILENAME);
|
|
45
|
+
if (existsSync(repoManifest)) return repoManifest;
|
|
46
|
+
try {
|
|
47
|
+
const bundledManifest = path.join(resolvePackageRoot(), "library", "skills", SKILL_PIN_MANIFEST_FILENAME);
|
|
48
|
+
if (existsSync(bundledManifest)) return bundledManifest;
|
|
49
|
+
} catch {
|
|
50
|
+
// Package root may be unavailable in isolated harnesses.
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
40
53
|
}
|
|
41
54
|
|
|
42
55
|
function loadSkillPinManifest(manifestPath: string): Map<string, SkillPinEntry> | null {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { artifactDefaultPath } from "../../core/artifact-paths.js";
|
|
3
3
|
import { canonicalizeExistingPath } from "../../core/path-canonical.js";
|
|
4
|
-
import { ToolNames } from "../../core/tool-names.js";
|
|
4
|
+
import { isHarnessExtensionToolName, ToolNames } from "../../core/tool-names.js";
|
|
5
5
|
import { extractCommandCdTargets, extractCommandWriteTargets } from "./protected-artifacts.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -129,7 +129,7 @@ function baseClassify(tool: string): ActionClass | null {
|
|
|
129
129
|
case ToolNames.Steer:
|
|
130
130
|
return "dispatch";
|
|
131
131
|
default:
|
|
132
|
-
return null;
|
|
132
|
+
return isHarnessExtensionToolName(tool) ? "execute" : null;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
@@ -67,10 +67,12 @@ export const DEFAULT_DAMAGE_CONTROL_PATH_POLICY: PathPolicyInput = {
|
|
|
67
67
|
// widen its own permissions in two tool calls. Both are authored by the
|
|
68
68
|
// operator through the CLI (`clio-coder verifiers author` lands nothing
|
|
69
69
|
// before `--yes`), so model-side writes and deletes are refused.
|
|
70
|
-
// Skills also refuse model-side writes and deletes; installs go through `clio-coder
|
|
70
|
+
// Skills also refuse model-side writes and deletes; installs go through `clio-coder library install`.
|
|
71
71
|
".clio-coder/safety.yaml",
|
|
72
72
|
".clio-coder/verifiers.yaml",
|
|
73
73
|
".clio-coder/skills/",
|
|
74
|
+
".clio-coder/plugins/",
|
|
75
|
+
".clio-coder/extensions/",
|
|
74
76
|
"/etc/",
|
|
75
77
|
"/usr/",
|
|
76
78
|
"/bin/",
|
|
@@ -354,7 +354,7 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
|
|
|
354
354
|
}
|
|
355
355
|
const skillReason =
|
|
356
356
|
mutationCommand !== null && invokesClioSkillMutation(mutationCommand)
|
|
357
|
-
? "
|
|
357
|
+
? "resource installation and lifecycle changes require the operator CLI or an explicit operator install choice; draft outside installed resource roots"
|
|
358
358
|
: skillMutationReason(
|
|
359
359
|
skillRoots,
|
|
360
360
|
pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
|
|
@@ -416,7 +416,14 @@ export function invokesClioSkillMutation(command: string): boolean {
|
|
|
416
416
|
args = args.slice(flag === "--skill" || flag === "--api-key" ? 2 : 1);
|
|
417
417
|
}
|
|
418
418
|
if (rootHelp) continue;
|
|
419
|
-
if (
|
|
419
|
+
if (
|
|
420
|
+
args[0] !== "skills" &&
|
|
421
|
+
args[0] !== "library" &&
|
|
422
|
+
args[0] !== "plugins" &&
|
|
423
|
+
args[0] !== "extensions" &&
|
|
424
|
+
args[0] !== "interop"
|
|
425
|
+
)
|
|
426
|
+
continue;
|
|
420
427
|
if (resourceCliMutatesSkills(args[0], args.slice(1))) return true;
|
|
421
428
|
}
|
|
422
429
|
return false;
|
|
@@ -440,7 +447,10 @@ function shellCommandArguments(segment: ReadonlyArray<ShellToken>): string[] {
|
|
|
440
447
|
return args.map((token) => token.value);
|
|
441
448
|
}
|
|
442
449
|
|
|
443
|
-
function resourceCliMutatesSkills(
|
|
450
|
+
function resourceCliMutatesSkills(
|
|
451
|
+
resource: "skills" | "library" | "plugins" | "extensions" | "interop",
|
|
452
|
+
args: ReadonlyArray<string>,
|
|
453
|
+
): boolean {
|
|
444
454
|
// Both resource parsers accept flags before the verb. Consume their value
|
|
445
455
|
// options so a catalog path called --yes or --help is not treated as a flag.
|
|
446
456
|
const valueOptions =
|
|
@@ -449,6 +459,7 @@ function resourceCliMutatesSkills(resource: "skills" | "library", args: Readonly
|
|
|
449
459
|
: ["--kind", "--from"];
|
|
450
460
|
let verb: string | undefined;
|
|
451
461
|
let confirmed = false;
|
|
462
|
+
let dryRun = false;
|
|
452
463
|
for (let index = 0; index < args.length; index += 1) {
|
|
453
464
|
const arg = args[index];
|
|
454
465
|
if (arg === undefined) continue;
|
|
@@ -458,12 +469,17 @@ function resourceCliMutatesSkills(resource: "skills" | "library", args: Readonly
|
|
|
458
469
|
}
|
|
459
470
|
if (arg === "--help" || arg === "-h") return false;
|
|
460
471
|
if (arg === "--yes") confirmed = true;
|
|
472
|
+
if (arg === "--dry-run") dryRun = true;
|
|
461
473
|
if (!arg.startsWith("-")) verb ??= arg;
|
|
462
474
|
}
|
|
463
475
|
if (resource === "skills") return verb === "install" || verb === "update" || verb === "sync";
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
return verb === "
|
|
476
|
+
if (resource === "plugins" || resource === "extensions")
|
|
477
|
+
return ["install", "update", "remove", "enable", "disable", "pin"].includes(verb ?? "");
|
|
478
|
+
if (resource === "interop") return verb === "adopt" && confirmed && !dryRun;
|
|
479
|
+
// A package of any kind may carry skills or require a skill dependency.
|
|
480
|
+
// Only install/update implement a dry-run; other mutations cannot spend it.
|
|
481
|
+
if ((verb === "install" || verb === "update") && dryRun) return false;
|
|
482
|
+
return ["install", "update", "remove", "enable", "disable", "pin", "register", "sync"].includes(verb ?? "");
|
|
467
483
|
}
|
|
468
484
|
|
|
469
485
|
const STANDARD_DEV_TARGETS = new Set(["/dev/null", "/dev/stdout", "/dev/stderr", "/dev/tty", "/dev/zero"]);
|
|
@@ -10,7 +10,10 @@ import { extractCommandCdTargets } from "./protected-artifacts.js";
|
|
|
10
10
|
* may install or replace a symlink after the session starts. Reads stay allowed.
|
|
11
11
|
*/
|
|
12
12
|
export function activeClioSkillRoots(cwd: string): string[] {
|
|
13
|
-
return [
|
|
13
|
+
return ["skills", "plugins", "extensions"].flatMap((kind) => [
|
|
14
|
+
path.join(cwd, ".clio-coder", kind),
|
|
15
|
+
path.join(clioConfigDir(), kind),
|
|
16
|
+
]);
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
export function skillMutationReason(
|
|
@@ -40,7 +43,7 @@ export function skillMutationReason(
|
|
|
40
43
|
isSameOrDescendant(candidate, boundary) ||
|
|
41
44
|
(target.operation === "delete" && isSameOrDescendant(boundary, candidate))
|
|
42
45
|
) {
|
|
43
|
-
return `active
|
|
46
|
+
return `active resource tree ${root} is operator-owned; draft changes outside installed resource roots and use the operator install or update interface`;
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
}
|
|
@@ -644,7 +644,7 @@ function withStagedExtensionPackage<T>(
|
|
|
644
644
|
input: { id: string; files: ReadonlyArray<{ relativePath: string; buffer: Buffer }> },
|
|
645
645
|
fn: (root: string) => T,
|
|
646
646
|
): T {
|
|
647
|
-
const stagingParent = mkdtempSync(path.join(tmpdir(), "clio-share-extension-"));
|
|
647
|
+
const stagingParent = mkdtempSync(path.join(tmpdir(), "clio-coder-share-extension-"));
|
|
648
648
|
const root = path.join(stagingParent, input.id);
|
|
649
649
|
try {
|
|
650
650
|
mkdirSync(root, { recursive: true });
|
|
@@ -385,6 +385,46 @@ function stripThinkingFromContext(context: Context): Context {
|
|
|
385
385
|
};
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
+
/**
|
|
389
|
+
* Pi 0.85 drops assistant turns with neither text nor tools, even when it has
|
|
390
|
+
* serialized their raw reasoning field. Give only an interrupted, same-model
|
|
391
|
+
* raw-reasoning turn a request-local notice so a continuation retains its work.
|
|
392
|
+
* Never turn private reasoning into answer text or modify the saved transcript.
|
|
393
|
+
* Opaque signatures and cross-model conversion remain the provider's concern.
|
|
394
|
+
*/
|
|
395
|
+
function preserveInterruptedReasoning(
|
|
396
|
+
context: Context,
|
|
397
|
+
model: Model<"openai-completions">,
|
|
398
|
+
resolved: ResolvedModelRuntimeCapabilities,
|
|
399
|
+
): Context {
|
|
400
|
+
if (!resolved.thinking.thinkingActive || model.compat?.requiresThinkingAsText) return context;
|
|
401
|
+
return {
|
|
402
|
+
...context,
|
|
403
|
+
messages: context.messages.map((message) => {
|
|
404
|
+
if (
|
|
405
|
+
message.role !== "assistant" ||
|
|
406
|
+
message.stopReason !== "length" ||
|
|
407
|
+
message.provider !== model.provider ||
|
|
408
|
+
message.api !== model.api ||
|
|
409
|
+
message.model !== model.id ||
|
|
410
|
+
message.content.length === 0 ||
|
|
411
|
+
!message.content.every(
|
|
412
|
+
(block) =>
|
|
413
|
+
block.type === "thinking" &&
|
|
414
|
+
!block.redacted &&
|
|
415
|
+
block.thinking.trim().length > 0 &&
|
|
416
|
+
["reasoning", "reasoning_content", "reasoning_text"].includes(block.thinkingSignature ?? ""),
|
|
417
|
+
)
|
|
418
|
+
)
|
|
419
|
+
return message;
|
|
420
|
+
return {
|
|
421
|
+
...message,
|
|
422
|
+
content: [...message.content, { type: "text" as const, text: "Response interrupted before its answer." }],
|
|
423
|
+
};
|
|
424
|
+
}),
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
|
|
388
428
|
function withStrippedPartial<TEvent extends AssistantMessageEvent>(event: TEvent): TEvent {
|
|
389
429
|
if (!("partial" in event)) return event;
|
|
390
430
|
return { ...event, partial: stripThinkingFromMessage(event.partial as AssistantMessage) };
|
|
@@ -1041,7 +1081,12 @@ export const openAICompletionsApiProvider: EngineApiProvider<"openai-completions
|
|
|
1041
1081
|
...(options?.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
|
|
1042
1082
|
...(options?.signal !== undefined ? { signal: options.signal } : {}),
|
|
1043
1083
|
},
|
|
1044
|
-
(requestModel) =>
|
|
1084
|
+
(requestModel) =>
|
|
1085
|
+
piOpenAICompletions.stream(
|
|
1086
|
+
requestModel,
|
|
1087
|
+
preserveInterruptedReasoning(effectiveContext, requestModel, resolved),
|
|
1088
|
+
capturedOptions,
|
|
1089
|
+
),
|
|
1045
1090
|
),
|
|
1046
1091
|
),
|
|
1047
1092
|
),
|
|
@@ -1078,7 +1123,12 @@ export const openAICompletionsApiProvider: EngineApiProvider<"openai-completions
|
|
|
1078
1123
|
...(options?.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
|
|
1079
1124
|
...(options?.signal !== undefined ? { signal: options.signal } : {}),
|
|
1080
1125
|
},
|
|
1081
|
-
(requestModel) =>
|
|
1126
|
+
(requestModel) =>
|
|
1127
|
+
piOpenAICompletions.streamSimple(
|
|
1128
|
+
requestModel,
|
|
1129
|
+
preserveInterruptedReasoning(effectiveContext, requestModel, resolved),
|
|
1130
|
+
capturedOptions,
|
|
1131
|
+
),
|
|
1082
1132
|
),
|
|
1083
1133
|
),
|
|
1084
1134
|
),
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Mario Zechner
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/src/engine/tui.ts
CHANGED
|
@@ -80,11 +80,13 @@ export {
|
|
|
80
80
|
getKeybindings,
|
|
81
81
|
Input,
|
|
82
82
|
isKeyRelease,
|
|
83
|
+
isKeyRepeat,
|
|
83
84
|
KeybindingsManager,
|
|
84
85
|
Markdown,
|
|
85
86
|
Marked,
|
|
86
87
|
matchesKey,
|
|
87
88
|
ProcessTerminal,
|
|
89
|
+
parseKey,
|
|
88
90
|
ScrollView,
|
|
89
91
|
setKeybindings,
|
|
90
92
|
stripTerminalSequences,
|
|
@@ -97,6 +99,7 @@ export {
|
|
|
97
99
|
visibleWidth,
|
|
98
100
|
wrapTextWithAnsi,
|
|
99
101
|
} from "@earendil-works/pi-tui";
|
|
102
|
+
export { decodePrintableKey } from "@earendil-works/pi-tui/dist/keys.js";
|
|
100
103
|
export {
|
|
101
104
|
InstrumentedTuiAltScreen,
|
|
102
105
|
InstrumentedTuiMainScreen,
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import type { WorkerContextSeed } from "../domains/context/worker/contract.js";
|
|
2
|
+
import { createWorkerContextGuard, WorkerContextExhaustedError } from "../domains/context/worker/pressure.js";
|
|
3
|
+
import { createWorkerObservationStore } from "../domains/context/worker/recall.js";
|
|
4
|
+
import { seededWorkerMessages } from "../worker/context-seed.js";
|
|
5
|
+
import { engineStreamSimple } from "./api-registry.js";
|
|
6
|
+
import { estimateInputTokensFromContext, resolveReservedOutputTokens } from "./apis/output-budget.js";
|
|
1
7
|
/**
|
|
2
8
|
* Worker-subprocess engine boundary.
|
|
3
9
|
*
|
|
@@ -10,7 +16,6 @@
|
|
|
10
16
|
*/
|
|
11
17
|
|
|
12
18
|
import path from "node:path";
|
|
13
|
-
import { validateSettingsFile } from "../core/config.js";
|
|
14
19
|
import {
|
|
15
20
|
configureGuardrails,
|
|
16
21
|
guardrailValuesFromSettings,
|
|
@@ -18,6 +23,7 @@ import {
|
|
|
18
23
|
isWorkerToolCallCapSynthesisReason,
|
|
19
24
|
} from "../core/guardrails.js";
|
|
20
25
|
import { runtimeSpeaksResponseSchemaDialect } from "../core/response-schema.js";
|
|
26
|
+
import { readLayeredSettings } from "../core/settings-layers.js";
|
|
21
27
|
import { agentSkillToolPolicy } from "../core/skill-activation.js";
|
|
22
28
|
import { type ToolName, ToolNames } from "../core/tool-names.js";
|
|
23
29
|
import {
|
|
@@ -89,6 +95,7 @@ import { createWorkerSafety, createWorkerToolRegistry } from "./worker-tools.js"
|
|
|
89
95
|
export interface WorkerRunInput {
|
|
90
96
|
sessionId?: string;
|
|
91
97
|
systemPrompt: string;
|
|
98
|
+
contextSeed?: WorkerContextSeed;
|
|
92
99
|
dynamicPromptMessages?: ReadonlyArray<WorkerPromptMessage>;
|
|
93
100
|
agentId: string;
|
|
94
101
|
task: string;
|
|
@@ -360,6 +367,8 @@ function resolveWorkerRuntimeBudget(input: Pick<WorkerRunInput, "budget">): Work
|
|
|
360
367
|
*/
|
|
361
368
|
export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): WorkerRunHandle {
|
|
362
369
|
assertResponseSchemaRuntime(input);
|
|
370
|
+
if (input.contextSeed && input.runtime.kind !== "http")
|
|
371
|
+
throw new Error("worker context: history seeds require a native Pi runtime");
|
|
363
372
|
// The wire carries the contract as data; the one strict parser owns its
|
|
364
373
|
// shape. The worker subprocess may not import it (it stays slim), so the
|
|
365
374
|
// check lands here, before any model call. The wire parser, not the recipe
|
|
@@ -382,11 +391,11 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
382
391
|
// so it must register them here before any agent.prompt() touches a local
|
|
383
392
|
// runtime (lmstudio, ollama-native).
|
|
384
393
|
registerClioApiProviders();
|
|
385
|
-
// The worker is a fresh process
|
|
386
|
-
//
|
|
387
|
-
//
|
|
388
|
-
//
|
|
389
|
-
const workerSettings =
|
|
394
|
+
// The worker is a fresh process. Resolve its workspace's trusted settings
|
|
395
|
+
// layers so project output limits and guardrails survive dispatch. Keep the
|
|
396
|
+
// best-effort read: the parent already surfaced settings diagnostics, and
|
|
397
|
+
// untrusted or changed project settings must still fall back to lower layers.
|
|
398
|
+
const workerSettings = readLayeredSettings(input.cwd ?? process.cwd()).settings;
|
|
390
399
|
setGlobalDefaultMaxOutputTokens(workerSettings.chat.maxOutputTokens);
|
|
391
400
|
// Same mirroring for guardrail policy: the fresh process needs its settings
|
|
392
401
|
// projection installed before any registry or tool construction reads it.
|
|
@@ -484,6 +493,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
484
493
|
}
|
|
485
494
|
: {}),
|
|
486
495
|
});
|
|
496
|
+
const observations = createWorkerObservationStore();
|
|
487
497
|
const registry = createWorkerToolRegistry(
|
|
488
498
|
input.middlewareSnapshot,
|
|
489
499
|
safety,
|
|
@@ -512,6 +522,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
512
522
|
input.autonomy,
|
|
513
523
|
(effects) => middlewareToolChoice.apply(effects),
|
|
514
524
|
input.agentLedger,
|
|
525
|
+
observations.recall,
|
|
515
526
|
);
|
|
516
527
|
const contractCwd = input.cwd ?? process.cwd();
|
|
517
528
|
let resultContractRepairsQueued = 0;
|
|
@@ -621,13 +632,46 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
621
632
|
input.runtimeResolution?.effectiveThinkingLevel ?? input.thinkingLevel,
|
|
622
633
|
);
|
|
623
634
|
|
|
635
|
+
const inheritedMessages = seededWorkerMessages(input.contextSeed);
|
|
636
|
+
const inheritedCount = inheritedMessages.length;
|
|
637
|
+
const contextGuard = createWorkerContextGuard(observations.archive);
|
|
624
638
|
const options: EngineAgentOptions = {
|
|
639
|
+
streamFn: (currentModel, currentContext, streamOptions) => {
|
|
640
|
+
const window = input.runtimeResolution?.capabilities.contextWindow ?? currentModel.contextWindow;
|
|
641
|
+
let messages: AgentMessage[];
|
|
642
|
+
try {
|
|
643
|
+
messages = contextGuard({
|
|
644
|
+
messages: currentContext.messages,
|
|
645
|
+
systemPrompt: currentContext.systemPrompt ?? "",
|
|
646
|
+
tools: currentContext.tools ?? [],
|
|
647
|
+
contextWindow: window,
|
|
648
|
+
threshold: workerSettings.context.compaction.threshold,
|
|
649
|
+
autoEvict: workerSettings.context.compaction.auto && workerSettings.context.workingSet.enabled,
|
|
650
|
+
outputReserve: resolveReservedOutputTokens(currentModel.maxTokens, {
|
|
651
|
+
api: currentModel.api,
|
|
652
|
+
contextWindow: window,
|
|
653
|
+
inputTokens: estimateInputTokensFromContext(currentContext),
|
|
654
|
+
}),
|
|
655
|
+
});
|
|
656
|
+
} catch (error) {
|
|
657
|
+
if (error instanceof WorkerContextExhaustedError) {
|
|
658
|
+
workerBoundFailure = error.message;
|
|
659
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_context_exhausted" } });
|
|
660
|
+
}
|
|
661
|
+
throw error;
|
|
662
|
+
}
|
|
663
|
+
return engineStreamSimple(
|
|
664
|
+
currentModel,
|
|
665
|
+
{ ...currentContext, messages: messages as typeof currentContext.messages },
|
|
666
|
+
streamOptions,
|
|
667
|
+
);
|
|
668
|
+
},
|
|
625
669
|
initialState: {
|
|
626
670
|
systemPrompt: input.systemPrompt,
|
|
627
671
|
model,
|
|
628
672
|
thinkingLevel: effectiveThinkingLevel,
|
|
629
673
|
tools,
|
|
630
|
-
messages:
|
|
674
|
+
messages: inheritedMessages,
|
|
631
675
|
},
|
|
632
676
|
onPayload: async (payload, currentModel) => {
|
|
633
677
|
const middlewareChoice = middlewareToolChoice.current();
|
|
@@ -1003,12 +1047,12 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
1003
1047
|
await agent.waitForIdle();
|
|
1004
1048
|
unsubscribe();
|
|
1005
1049
|
if (workerBoundFailure !== null) {
|
|
1006
|
-
return { messages: agent.state.messages, exitCode: 1 };
|
|
1050
|
+
return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
|
|
1007
1051
|
}
|
|
1008
1052
|
if (permissionFailure) {
|
|
1009
|
-
return { messages: agent.state.messages, exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
|
|
1053
|
+
return { messages: agent.state.messages.slice(inheritedCount), exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
|
|
1010
1054
|
}
|
|
1011
|
-
const messages = agent.state.messages;
|
|
1055
|
+
const messages = agent.state.messages.slice(inheritedCount);
|
|
1012
1056
|
const errorMessage = getTerminalAgentError(messages);
|
|
1013
1057
|
if (errorMessage !== null) {
|
|
1014
1058
|
if (errorMessage.length > 0) {
|
|
@@ -1020,15 +1064,15 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
1020
1064
|
} catch (err) {
|
|
1021
1065
|
unsubscribe();
|
|
1022
1066
|
if (workerBoundFailure !== null) {
|
|
1023
|
-
return { messages: agent.state.messages, exitCode: 1 };
|
|
1067
|
+
return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
|
|
1024
1068
|
}
|
|
1025
1069
|
if (permissionFailure) {
|
|
1026
|
-
return { messages: agent.state.messages, exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
|
|
1070
|
+
return { messages: agent.state.messages.slice(inheritedCount), exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
|
|
1027
1071
|
}
|
|
1028
1072
|
const msg = err instanceof Error ? err.message : String(err);
|
|
1029
|
-
emit({ type: "agent_end", messages: agent.state.messages });
|
|
1073
|
+
emit({ type: "agent_end", messages: agent.state.messages.slice(inheritedCount) });
|
|
1030
1074
|
process.stderr.write(`[worker] agent error: ${msg}\n`);
|
|
1031
|
-
return { messages: agent.state.messages, exitCode: 1 };
|
|
1075
|
+
return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
|
|
1032
1076
|
} finally {
|
|
1033
1077
|
clearActiveEscalation();
|
|
1034
1078
|
unsubscribePermission();
|