@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
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* it once answered, and leaves one row on the rail saying what was chosen, so
|
|
13
13
|
* the screen is the answers so far plus the question at hand. Escape moves the
|
|
14
14
|
* cursor back one step and rewinds the rail to that step's row, which is what
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* keeps target edits in a draft until Save. Browser sign-in stores credentials
|
|
16
|
+
* when it succeeds; optional peer review has its own save after target setup.
|
|
17
17
|
*
|
|
18
18
|
* Steps that do not apply are stepped over in whichever direction the cursor is
|
|
19
19
|
* moving, so a runtime with no URL and no credential is three questions and a
|
|
@@ -27,10 +27,13 @@ import {
|
|
|
27
27
|
bindAgentProfileInSettings,
|
|
28
28
|
type ClioSettings,
|
|
29
29
|
readSettings,
|
|
30
|
+
SettingsValidationError,
|
|
30
31
|
settingsPath,
|
|
31
32
|
updateSettings,
|
|
33
|
+
validateSettings,
|
|
32
34
|
} from "../core/config.js";
|
|
33
35
|
import { THINKING_LEVELS, type ThinkingLevel } from "../core/defaults.js";
|
|
36
|
+
import { initializeClioHome } from "../core/init.js";
|
|
34
37
|
import { resolveOnPath } from "../domains/interop/detect.js";
|
|
35
38
|
import { authStoragePath, openAuthStorage, targetRequiresAuth } from "../domains/providers/auth/index.js";
|
|
36
39
|
import {
|
|
@@ -69,6 +72,7 @@ import {
|
|
|
69
72
|
setOrchestratorPointer,
|
|
70
73
|
setWorkerDefaultPointer,
|
|
71
74
|
setWorkerProfilePointer,
|
|
75
|
+
targetApiKeyRef,
|
|
72
76
|
type WireModelInventory,
|
|
73
77
|
} from "./configure-target.js";
|
|
74
78
|
import { createLifecyclePresenter, type LifecyclePresenter, shortenPath } from "./lifecycle-presenter.js";
|
|
@@ -99,6 +103,10 @@ type CredentialSource = "env" | "stored" | "keep" | "skip" | "oauth-connect" | "
|
|
|
99
103
|
// with exactOptionalPropertyTypes, and going back a step clears the answers
|
|
100
104
|
// that depended on the one being changed by assigning undefined to them.
|
|
101
105
|
interface Answers {
|
|
106
|
+
mode: "first" | "add" | "edit";
|
|
107
|
+
fixedRuntime?: boolean;
|
|
108
|
+
existing?: TargetDescriptor | undefined;
|
|
109
|
+
contextWindow?: number | undefined;
|
|
102
110
|
category?: ConfigureCategory | undefined;
|
|
103
111
|
runtime?: RuntimeDescriptor | undefined;
|
|
104
112
|
targetId?: string | undefined;
|
|
@@ -115,10 +123,9 @@ interface Answers {
|
|
|
115
123
|
thinking?: ThinkingLevel | undefined;
|
|
116
124
|
probe?: ProbeResult | null | undefined;
|
|
117
125
|
antigravity?: { targetId: string; model: string } | undefined;
|
|
118
|
-
wiredPeers?: string[] | undefined;
|
|
119
126
|
}
|
|
120
127
|
|
|
121
|
-
type StepOutcome = "next" | "back" | "quit";
|
|
128
|
+
type StepOutcome = "next" | "back" | "quit" | "cancel";
|
|
122
129
|
|
|
123
130
|
interface Wizard {
|
|
124
131
|
streams: OnboardingStreams;
|
|
@@ -181,19 +188,37 @@ function allEntries(): ProviderSupportEntry[] {
|
|
|
181
188
|
|
|
182
189
|
/** The descriptor as it stands mid-wizard, for a probe or a model read. */
|
|
183
190
|
function draftDescriptor(answers: Answers, runtime: RuntimeDescriptor, withModel: boolean): TargetDescriptor {
|
|
184
|
-
const apiKeyRef =
|
|
185
|
-
|
|
191
|
+
const apiKeyRef =
|
|
192
|
+
answers.credential === "stored"
|
|
193
|
+
? targetApiKeyRef(answers.targetId ?? runtime.id, readSettings().targets)
|
|
194
|
+
: answers.credential === "keep"
|
|
195
|
+
? (answers.existing?.auth?.apiKeyRef ?? runtime.id)
|
|
196
|
+
: undefined;
|
|
197
|
+
const configured = buildDescriptor(runtime, answers.targetId ?? runtime.id, {
|
|
186
198
|
...(answers.url !== undefined ? { url: answers.url } : {}),
|
|
187
199
|
...(withModel && answers.model !== undefined ? { model: answers.model } : {}),
|
|
188
200
|
...(answers.apiKeyEnv !== undefined ? { apiKeyEnv: answers.apiKeyEnv } : {}),
|
|
189
201
|
...(apiKeyRef !== undefined ? { apiKeyRef } : {}),
|
|
190
|
-
...(runtime.auth === "oauth"
|
|
202
|
+
...(runtime.auth === "oauth"
|
|
203
|
+
? { oauthProfile: answers.existing?.auth?.oauthProfile ?? runtime.oauthProviderId ?? runtime.id }
|
|
204
|
+
: {}),
|
|
191
205
|
});
|
|
206
|
+
const descriptor = { ...answers.existing, ...configured };
|
|
207
|
+
if (!withModel) delete descriptor.defaultModel;
|
|
208
|
+
if (answers.existing?.auth || configured.auth) {
|
|
209
|
+
descriptor.auth = { ...answers.existing?.auth, ...configured.auth };
|
|
210
|
+
if (runtime.auth === "api-key") {
|
|
211
|
+
if (answers.credential !== "env") delete descriptor.auth.apiKeyEnvVar;
|
|
212
|
+
if (answers.credential !== "stored" && answers.credential !== "keep") delete descriptor.auth.apiKeyRef;
|
|
213
|
+
}
|
|
214
|
+
if (Object.keys(descriptor.auth).length === 0) delete descriptor.auth;
|
|
215
|
+
}
|
|
216
|
+
return descriptor;
|
|
192
217
|
}
|
|
193
218
|
|
|
194
219
|
const CATEGORY_STEP: Step = {
|
|
195
220
|
id: "category",
|
|
196
|
-
applies: () =>
|
|
221
|
+
applies: (answers) => answers.mode !== "edit" && !answers.fixedRuntime,
|
|
197
222
|
run: async (wizard, answers) => {
|
|
198
223
|
const current = CONFIGURE_CATEGORY_CHOICES.findIndex((choice) => choice.category === answers.category);
|
|
199
224
|
const result = await promptSelect<ConfigureCategory>({
|
|
@@ -225,12 +250,12 @@ const CATEGORY_STEP: Step = {
|
|
|
225
250
|
|
|
226
251
|
const RUNTIME_STEP: Step = {
|
|
227
252
|
id: "runtime",
|
|
228
|
-
applies: () =>
|
|
253
|
+
applies: (answers) => answers.mode !== "edit" && !answers.fixedRuntime,
|
|
229
254
|
run: async (wizard, answers) => {
|
|
230
255
|
const registry = getRuntimeRegistry();
|
|
231
256
|
const chatEntries = allEntries().filter((entry) => {
|
|
232
257
|
const runtime = registry.get(entry.runtimeId);
|
|
233
|
-
return runtime !== null && isOrchestratorEligibleRuntime(runtime);
|
|
258
|
+
return runtime !== null && (answers.mode !== "first" || isOrchestratorEligibleRuntime(runtime));
|
|
234
259
|
});
|
|
235
260
|
const entries = answers.category ? runtimesForCategory(chatEntries, answers.category) : chatEntries;
|
|
236
261
|
const usable = entries.length > 0 ? entries : chatEntries;
|
|
@@ -258,6 +283,9 @@ const RUNTIME_STEP: Step = {
|
|
|
258
283
|
answers.apiKeyEnv = undefined;
|
|
259
284
|
answers.apiKeyLiteral = undefined;
|
|
260
285
|
answers.model = undefined;
|
|
286
|
+
answers.thinking = undefined;
|
|
287
|
+
answers.contextWindow = undefined;
|
|
288
|
+
answers.probe = undefined;
|
|
261
289
|
answers.inventory = undefined;
|
|
262
290
|
answers.inventoryKey = undefined;
|
|
263
291
|
}
|
|
@@ -269,7 +297,7 @@ const RUNTIME_STEP: Step = {
|
|
|
269
297
|
|
|
270
298
|
const TARGET_ID_STEP: Step = {
|
|
271
299
|
id: "target-id",
|
|
272
|
-
applies: () =>
|
|
300
|
+
applies: (answers) => answers.mode !== "edit",
|
|
273
301
|
run: async (wizard, answers) => {
|
|
274
302
|
const runtime = answers.runtime;
|
|
275
303
|
if (!runtime) return "back";
|
|
@@ -283,6 +311,8 @@ const TARGET_ID_STEP: Step = {
|
|
|
283
311
|
validate: (value) => {
|
|
284
312
|
if (value.length === 0) return "a target id is required";
|
|
285
313
|
if (/\s/u.test(value)) return "a target id cannot contain spaces";
|
|
314
|
+
if (readSettings().targets.some((target) => target.id === value))
|
|
315
|
+
return "that target id already exists; choose another or use Edit a target";
|
|
286
316
|
return null;
|
|
287
317
|
},
|
|
288
318
|
input: wizard.input,
|
|
@@ -373,7 +403,7 @@ async function reportReachability(
|
|
|
373
403
|
|
|
374
404
|
const DETECTED_RUNTIME_STEP: Step = {
|
|
375
405
|
id: "detected-runtime",
|
|
376
|
-
applies: (answers) => answers.detected !== undefined && answers.runtime !== undefined,
|
|
406
|
+
applies: (answers) => answers.mode !== "edit" && answers.detected !== undefined && answers.runtime !== undefined,
|
|
377
407
|
run: async (wizard, answers) => {
|
|
378
408
|
const detected = answers.detected;
|
|
379
409
|
const runtime = answers.runtime;
|
|
@@ -443,10 +473,15 @@ const CREDENTIAL_STEP: Step = {
|
|
|
443
473
|
run: async (wizard, answers) => {
|
|
444
474
|
const runtime = answers.runtime;
|
|
445
475
|
if (!runtime) return "back";
|
|
446
|
-
const stored = describeAuthStatus(runtime);
|
|
476
|
+
const stored = describeAuthStatus(runtime, answers.existing);
|
|
447
477
|
if (runtime.auth === "oauth") {
|
|
448
478
|
const result = await promptSelect<CredentialSource>({
|
|
449
|
-
heading: [
|
|
479
|
+
heading: [
|
|
480
|
+
"",
|
|
481
|
+
chalk.bold(`Sign in to ${runtime.displayName}`),
|
|
482
|
+
chalk.dim(`credential: ${stored}`),
|
|
483
|
+
"Sign-in stores credentials immediately; target settings wait for Save.",
|
|
484
|
+
],
|
|
450
485
|
choices: [
|
|
451
486
|
{ value: "oauth-connect", label: "Connect now", hint: "opens your browser and waits for the callback" },
|
|
452
487
|
{
|
|
@@ -479,7 +514,7 @@ const CREDENTIAL_STEP: Step = {
|
|
|
479
514
|
return "next";
|
|
480
515
|
}
|
|
481
516
|
|
|
482
|
-
const hasStored = stored !== "none stored";
|
|
517
|
+
const hasStored = answers.existing?.auth?.apiKeyRef !== undefined || stored !== "none stored";
|
|
483
518
|
const choices = [
|
|
484
519
|
{
|
|
485
520
|
value: "env" as CredentialSource,
|
|
@@ -513,6 +548,7 @@ const CREDENTIAL_STEP: Step = {
|
|
|
513
548
|
if (result.kind === "back") return "back";
|
|
514
549
|
answers.credential = result.value;
|
|
515
550
|
if (result.value !== "env") answers.apiKeyEnv = undefined;
|
|
551
|
+
answers.inventoryKey = undefined;
|
|
516
552
|
if (result.value !== "stored") answers.apiKeyLiteral = undefined;
|
|
517
553
|
if (result.value === "keep") wizard.answer("Credential", stored);
|
|
518
554
|
if (result.value === "skip") wizard.answer("Credential", "none");
|
|
@@ -534,6 +570,10 @@ const CREDENTIAL_VALUE_STEP: Step = {
|
|
|
534
570
|
? "Clio reads it every time it calls the provider, so the key never lands on disk"
|
|
535
571
|
: `stored at ${shortenPath(authStoragePath())}`,
|
|
536
572
|
...(wantsEnv ? {} : { mask: true }),
|
|
573
|
+
validate: (value) =>
|
|
574
|
+
value.length > 0
|
|
575
|
+
? null
|
|
576
|
+
: `Enter ${wantsEnv ? "an environment variable" : "a key"}, or press Escape to choose No key.`,
|
|
537
577
|
railPrefix: wizard.rail,
|
|
538
578
|
backLabel: "back",
|
|
539
579
|
clearOnExit: true,
|
|
@@ -670,7 +710,7 @@ const MODEL_STEP: Step = {
|
|
|
670
710
|
*/
|
|
671
711
|
async function readModelCapabilities(answers: Answers, runtime: RuntimeDescriptor): Promise<void> {
|
|
672
712
|
const descriptor = draftDescriptor(answers, runtime, true);
|
|
673
|
-
const probe = await runtimeProbe(runtime, descriptor);
|
|
713
|
+
const probe = await runtimeProbe(runtime, descriptor, answers.apiKeyLiteral);
|
|
674
714
|
answers.probe = probe;
|
|
675
715
|
if (probe?.ok && probe.models) {
|
|
676
716
|
recordTargetModelSnapshot(descriptor, probe.models, probe.modelLabels ? { modelLabels: probe.modelLabels } : {});
|
|
@@ -690,6 +730,7 @@ const THINKING_HINTS: Readonly<Record<ThinkingLevel, string>> = {
|
|
|
690
730
|
const THINKING_STEP: Step = {
|
|
691
731
|
id: "thinking",
|
|
692
732
|
applies: (answers) => {
|
|
733
|
+
if (answers.mode !== "first" && !PROTOCOL_COMPAT_RUNTIME_IDS.has(answers.runtime?.id ?? "")) return false;
|
|
693
734
|
const runtime = answers.runtime;
|
|
694
735
|
if (!runtime || answers.model === undefined) return false;
|
|
695
736
|
// A generic OpenAI/Anthropic-compatible endpoint reports nothing about
|
|
@@ -701,7 +742,15 @@ const THINKING_STEP: Step = {
|
|
|
701
742
|
run: async (wizard, answers) => {
|
|
702
743
|
const current = THINKING_LEVELS.indexOf(answers.thinking ?? "low");
|
|
703
744
|
const result = await promptSelect<ThinkingLevel>({
|
|
704
|
-
heading: [
|
|
745
|
+
heading: [
|
|
746
|
+
"",
|
|
747
|
+
chalk.bold("How hard should it think?"),
|
|
748
|
+
chalk.dim(
|
|
749
|
+
answers.mode === "first"
|
|
750
|
+
? "changeable any time in `clio-coder configure`"
|
|
751
|
+
: "off disables reasoning for this target; chat and fleet thinking defaults stay unchanged",
|
|
752
|
+
),
|
|
753
|
+
],
|
|
705
754
|
choices: THINKING_LEVELS.map((level) => ({ value: level, label: level, hint: THINKING_HINTS[level] })),
|
|
706
755
|
initialIndex: current >= 0 ? current : 0,
|
|
707
756
|
railPrefix: wizard.rail,
|
|
@@ -721,6 +770,7 @@ const THINKING_STEP: Step = {
|
|
|
721
770
|
const ANTIGRAVITY_COLLEAGUE_STEP: Step = {
|
|
722
771
|
id: "antigravity-colleague",
|
|
723
772
|
applies: (answers) =>
|
|
773
|
+
answers.mode === "first" &&
|
|
724
774
|
answers.runtime !== undefined &&
|
|
725
775
|
isOrchestratorEligibleRuntime(answers.runtime) &&
|
|
726
776
|
resolveOnPath(["agy"]).presence === "present" &&
|
|
@@ -785,25 +835,61 @@ const ANTIGRAVITY_COLLEAGUE_STEP: Step = {
|
|
|
785
835
|
},
|
|
786
836
|
};
|
|
787
837
|
|
|
788
|
-
const
|
|
789
|
-
id: "
|
|
790
|
-
applies: () =>
|
|
838
|
+
const CONTEXT_STEP: Step = {
|
|
839
|
+
id: "context-window",
|
|
840
|
+
applies: (answers) => PROTOCOL_COMPAT_RUNTIME_IDS.has(answers.runtime?.id ?? "") || answers.mode === "edit",
|
|
791
841
|
run: async (wizard, answers) => {
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
842
|
+
const result = await promptText({
|
|
843
|
+
heading: ["", chalk.bold("Context window in tokens")],
|
|
844
|
+
initial: answers.contextWindow === undefined ? "" : String(answers.contextWindow),
|
|
845
|
+
hint: "optional override; blank uses detected capabilities or the runtime default",
|
|
846
|
+
validate: (value) =>
|
|
847
|
+
value === "" || (Number.isSafeInteger(Number(value)) && Number(value) > 0)
|
|
848
|
+
? null
|
|
849
|
+
: "enter a positive whole number, or leave blank",
|
|
850
|
+
railPrefix: wizard.rail,
|
|
851
|
+
backLabel: "back",
|
|
852
|
+
clearOnExit: true,
|
|
853
|
+
input: wizard.input,
|
|
854
|
+
output: wizard.output,
|
|
800
855
|
});
|
|
801
|
-
if (
|
|
802
|
-
answers.
|
|
856
|
+
if (result.kind !== "value") return result.kind;
|
|
857
|
+
answers.contextWindow = result.value ? Number(result.value) : undefined;
|
|
858
|
+
wizard.answer("Context", result.value || "detected / runtime default");
|
|
803
859
|
return "next";
|
|
804
860
|
},
|
|
805
861
|
};
|
|
806
862
|
|
|
863
|
+
const REVIEW_STEP: Step = {
|
|
864
|
+
id: "review",
|
|
865
|
+
applies: () => true,
|
|
866
|
+
run: async (wizard, answers) => {
|
|
867
|
+
const result = await promptSelect({
|
|
868
|
+
heading: [
|
|
869
|
+
"",
|
|
870
|
+
chalk.bold("Review target"),
|
|
871
|
+
`${answers.targetId} · ${answers.runtime?.id} · ${answers.model}`,
|
|
872
|
+
answers.mode === "first"
|
|
873
|
+
? "Use for chat and fleet."
|
|
874
|
+
: "Existing chat, fleet, memory, and profile defaults stay in place.",
|
|
875
|
+
"Escape returns to the previous step; settings are saved only when you choose Save.",
|
|
876
|
+
],
|
|
877
|
+
choices: [
|
|
878
|
+
{ value: "save", label: "Save target" },
|
|
879
|
+
{ value: "back", label: "Back" },
|
|
880
|
+
{ value: "cancel", label: "Cancel setup" },
|
|
881
|
+
],
|
|
882
|
+
railPrefix: wizard.rail,
|
|
883
|
+
backLabel: "back",
|
|
884
|
+
clearOnExit: true,
|
|
885
|
+
input: wizard.input,
|
|
886
|
+
output: wizard.output,
|
|
887
|
+
});
|
|
888
|
+
if (result.kind !== "selected") return result.kind;
|
|
889
|
+
return result.value === "save" ? "next" : result.value === "back" ? "back" : "cancel";
|
|
890
|
+
},
|
|
891
|
+
};
|
|
892
|
+
|
|
807
893
|
// Credential steps come before the URL step: a runtime that needs or may need a
|
|
808
894
|
// key (litellm, every cloud runtime, keyed openai-compat) has to have one in
|
|
809
895
|
// hand before the URL step probes reachability, or the probe reads as
|
|
@@ -820,37 +906,51 @@ const STEPS: ReadonlyArray<Step> = [
|
|
|
820
906
|
DETECTED_RUNTIME_STEP,
|
|
821
907
|
MODEL_STEP,
|
|
822
908
|
THINKING_STEP,
|
|
909
|
+
CONTEXT_STEP,
|
|
823
910
|
ANTIGRAVITY_COLLEAGUE_STEP,
|
|
824
|
-
|
|
911
|
+
REVIEW_STEP,
|
|
825
912
|
];
|
|
826
913
|
|
|
827
914
|
/** Write everything the wizard collected, in one settings update. */
|
|
828
|
-
function
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
if (
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
915
|
+
function applyAnswers(
|
|
916
|
+
settings: ClioSettings,
|
|
917
|
+
answers: Answers,
|
|
918
|
+
descriptor: TargetDescriptor,
|
|
919
|
+
chatEligible: boolean,
|
|
920
|
+
): void {
|
|
921
|
+
const current = settings.targets.find((target) => target.id === descriptor.id);
|
|
922
|
+
if (answers.mode === "edit") {
|
|
923
|
+
if (JSON.stringify(current) !== JSON.stringify(answers.existing))
|
|
924
|
+
throw new Error("This target changed during setup; reopen Edit to keep those changes.");
|
|
925
|
+
} else if (current) throw new Error(`Target '${descriptor.id}' already exists; use Edit a target.`);
|
|
926
|
+
applyTarget(settings, descriptor);
|
|
927
|
+
// The first target is the one everything points at. A second target is a
|
|
928
|
+
// choice, and that is what the settings menu is for; asking a new user
|
|
929
|
+
// which of their one target should answer chat is not a question.
|
|
930
|
+
if (answers.mode === "first" && chatEligible) setOrchestratorPointer(settings, descriptor, answers.model ?? null);
|
|
931
|
+
if (answers.mode === "first") setWorkerDefaultPointer(settings, descriptor, answers.model ?? null);
|
|
932
|
+
if (answers.mode === "first" && answers.thinking !== undefined) {
|
|
933
|
+
settings.chat.thinkingLevel = answers.thinking;
|
|
934
|
+
settings.fleet.default.thinkingLevel = answers.thinking;
|
|
935
|
+
}
|
|
936
|
+
if (answers.antigravity !== undefined) {
|
|
937
|
+
const antigravityRuntime = getRuntimeRegistry().get("antigravity-code");
|
|
938
|
+
if (!antigravityRuntime) throw new Error("Antigravity runtime disappeared before settings were written");
|
|
939
|
+
const external = buildDescriptor(antigravityRuntime, answers.antigravity.targetId, {
|
|
940
|
+
model: answers.antigravity.model,
|
|
941
|
+
});
|
|
942
|
+
applyTarget(settings, external);
|
|
943
|
+
setWorkerProfilePointer(settings, "world-knowledge-external", external, answers.antigravity.model);
|
|
944
|
+
bindAgentProfileInSettings(settings, "world-knowledge", "world-knowledge-external");
|
|
945
|
+
}
|
|
851
946
|
}
|
|
852
947
|
|
|
853
|
-
export async function runOnboardingWizard(
|
|
948
|
+
export async function runOnboardingWizard(
|
|
949
|
+
streams: OnboardingStreams,
|
|
950
|
+
options: { mode: "first" | "add"; runtime?: RuntimeDescriptor } | { mode: "edit"; target: TargetDescriptor } = {
|
|
951
|
+
mode: "first",
|
|
952
|
+
},
|
|
953
|
+
): Promise<number> {
|
|
854
954
|
const writer = railWriter(streams.out);
|
|
855
955
|
const presenter = createLifecyclePresenter({ stream: writer.stream });
|
|
856
956
|
const rail = railPrefix(presenter.isPlain());
|
|
@@ -866,11 +966,39 @@ export async function runOnboardingWizard(streams: OnboardingStreams): Promise<n
|
|
|
866
966
|
},
|
|
867
967
|
};
|
|
868
968
|
|
|
869
|
-
presenter.header(
|
|
870
|
-
|
|
969
|
+
presenter.header(
|
|
970
|
+
options.mode === "edit"
|
|
971
|
+
? `Edit target: ${options.target.id}`
|
|
972
|
+
: options.mode === "first"
|
|
973
|
+
? "Welcome to Clio Coder"
|
|
974
|
+
: "Add a target",
|
|
975
|
+
"configure",
|
|
976
|
+
);
|
|
977
|
+
presenter.note("Pick a model; escape goes back. Review and save when ready.");
|
|
871
978
|
presenter.note(`Result: ${shortenPath(settingsPath())}`);
|
|
872
979
|
|
|
873
|
-
const
|
|
980
|
+
const existing = options.mode === "edit" ? options.target : undefined;
|
|
981
|
+
const answers: Answers = {
|
|
982
|
+
mode: options.mode,
|
|
983
|
+
existing,
|
|
984
|
+
runtime: existing
|
|
985
|
+
? (getRuntimeRegistry().get(existing.runtime) ?? undefined)
|
|
986
|
+
: options.mode !== "edit"
|
|
987
|
+
? options.runtime
|
|
988
|
+
: undefined,
|
|
989
|
+
fixedRuntime: options.mode !== "edit" && options.runtime !== undefined,
|
|
990
|
+
targetId: existing?.id,
|
|
991
|
+
url: existing?.url,
|
|
992
|
+
model: existing?.defaultModel,
|
|
993
|
+
credential: existing?.auth?.apiKeyEnvVar ? "env" : existing?.auth?.apiKeyRef ? "keep" : undefined,
|
|
994
|
+
apiKeyEnv: existing?.auth?.apiKeyEnvVar,
|
|
995
|
+
contextWindow: existing?.capabilities?.contextWindow,
|
|
996
|
+
thinking: existing?.capabilities?.reasoning === false ? "off" : undefined,
|
|
997
|
+
};
|
|
998
|
+
if (existing && !answers.runtime) {
|
|
999
|
+
presenter.fail(`Unknown runtime: ${existing.runtime}`);
|
|
1000
|
+
return 2;
|
|
1001
|
+
}
|
|
874
1002
|
const marks = new Array<number>(STEPS.length).fill(writer.mark());
|
|
875
1003
|
let cursor = 0;
|
|
876
1004
|
let direction = 1;
|
|
@@ -880,19 +1008,19 @@ export async function runOnboardingWizard(streams: OnboardingStreams): Promise<n
|
|
|
880
1008
|
if (step === undefined) break;
|
|
881
1009
|
if (!step.applies(answers)) {
|
|
882
1010
|
cursor += direction;
|
|
883
|
-
if (cursor < 0) return cancel(presenter);
|
|
1011
|
+
if (cursor < 0) return cancel(presenter, answers);
|
|
884
1012
|
continue;
|
|
885
1013
|
}
|
|
886
1014
|
marks[cursor] = writer.mark();
|
|
887
1015
|
const outcome = await step.run(wizard, answers);
|
|
888
|
-
if (outcome === "quit") return cancel(presenter);
|
|
1016
|
+
if (outcome === "quit" || outcome === "cancel") return cancel(presenter, answers, outcome === "quit");
|
|
889
1017
|
if (outcome === "back") {
|
|
890
1018
|
direction = -1;
|
|
891
1019
|
cursor -= 1;
|
|
892
1020
|
// Rewind past the row the step we are returning to left behind, so it
|
|
893
1021
|
// can ask again in the same place rather than under its own answer.
|
|
894
1022
|
while (cursor >= 0 && !(STEPS[cursor]?.applies(answers) ?? false)) cursor -= 1;
|
|
895
|
-
if (cursor < 0) return cancel(presenter);
|
|
1023
|
+
if (cursor < 0) return cancel(presenter, answers);
|
|
896
1024
|
writer.rewindTo(marks[cursor] ?? writer.mark());
|
|
897
1025
|
continue;
|
|
898
1026
|
}
|
|
@@ -900,66 +1028,74 @@ export async function runOnboardingWizard(streams: OnboardingStreams): Promise<n
|
|
|
900
1028
|
cursor += 1;
|
|
901
1029
|
}
|
|
902
1030
|
|
|
903
|
-
|
|
1031
|
+
const code = finish(wizard, answers);
|
|
1032
|
+
if (code === 0 && answers.mode === "first") {
|
|
1033
|
+
await reviewInteropAgents({ rl: null, streams, presenter, rail, quiet: true });
|
|
1034
|
+
}
|
|
1035
|
+
return code;
|
|
904
1036
|
}
|
|
905
1037
|
|
|
906
|
-
function cancel(presenter: LifecyclePresenter): number {
|
|
1038
|
+
function cancel(presenter: LifecyclePresenter, answers: Answers, quit = false): number {
|
|
907
1039
|
// A first-run cancel really does leave Clio unconfigured, which is why this
|
|
908
1040
|
// exits 130 where leaving the settings menu exits 0.
|
|
909
|
-
presenter.done("Cancelled
|
|
910
|
-
printError("configuration cancelled");
|
|
911
|
-
return 130;
|
|
1041
|
+
presenter.done("Cancelled; target settings not saved");
|
|
1042
|
+
if (answers.mode === "first") printError("configuration cancelled");
|
|
1043
|
+
return answers.mode === "first" || quit ? 130 : 0;
|
|
912
1044
|
}
|
|
913
1045
|
|
|
914
1046
|
function finish(wizard: Wizard, answers: Answers): number {
|
|
915
1047
|
const runtime = answers.runtime;
|
|
916
1048
|
const targetId = answers.targetId;
|
|
917
|
-
if (!runtime || targetId === undefined) return cancel(wizard.presenter);
|
|
1049
|
+
if (!runtime || targetId === undefined) return cancel(wizard.presenter, answers);
|
|
918
1050
|
const presenter = wizard.presenter;
|
|
919
1051
|
|
|
920
|
-
if (answers.apiKeyLiteral !== undefined) {
|
|
921
|
-
const auth = openAuthStorage();
|
|
922
|
-
auth.setApiKey(runtime.id, answers.apiKeyLiteral);
|
|
923
|
-
// The settings write is still ahead of us, so refusing here leaves the
|
|
924
|
-
// whole run without an effect rather than half of one.
|
|
925
|
-
if (credentialWriteFailed(auth, `credential for ${runtime.id} was not stored; target '${targetId}' not saved`)) {
|
|
926
|
-
presenter.done("Nothing written");
|
|
927
|
-
return 1;
|
|
928
|
-
}
|
|
929
|
-
printPlaintextCredentialWarning();
|
|
930
|
-
}
|
|
931
|
-
|
|
932
1052
|
const reasoning =
|
|
933
1053
|
PROTOCOL_COMPAT_RUNTIME_IDS.has(runtime.id) && answers.thinking !== undefined
|
|
934
1054
|
? answers.thinking !== "off"
|
|
935
1055
|
: undefined;
|
|
936
|
-
const descriptor =
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
...(reasoning === undefined ? {} : { reasoning }),
|
|
943
|
-
});
|
|
1056
|
+
const descriptor = draftDescriptor(answers, runtime, true);
|
|
1057
|
+
descriptor.capabilities = { ...descriptor.capabilities };
|
|
1058
|
+
if (reasoning !== undefined) descriptor.capabilities.reasoning = reasoning;
|
|
1059
|
+
// Clearing the field removes only that capability override.
|
|
1060
|
+
if (answers.contextWindow === undefined) delete descriptor.capabilities.contextWindow;
|
|
1061
|
+
else descriptor.capabilities.contextWindow = answers.contextWindow;
|
|
944
1062
|
const chatEligible = isOrchestratorEligibleRuntime(runtime);
|
|
945
1063
|
|
|
946
1064
|
try {
|
|
947
|
-
|
|
1065
|
+
const preview = readSettings();
|
|
1066
|
+
applyAnswers(preview, answers, descriptor, chatEligible);
|
|
1067
|
+
const validated = validateSettings(preview);
|
|
1068
|
+
if (validated.issues.length) throw new SettingsValidationError(validated.issues);
|
|
1069
|
+
initializeClioHome();
|
|
1070
|
+
|
|
1071
|
+
if (answers.apiKeyLiteral !== undefined && descriptor.auth?.apiKeyRef) {
|
|
1072
|
+
const auth = openAuthStorage();
|
|
1073
|
+
auth.setApiKey(descriptor.auth.apiKeyRef, answers.apiKeyLiteral);
|
|
1074
|
+
// The settings write is still ahead of us, so refusing here leaves the
|
|
1075
|
+
// whole run without an effect rather than half of one.
|
|
1076
|
+
if (credentialWriteFailed(auth, `credential for ${runtime.id} was not stored; target '${targetId}' not saved`)) {
|
|
1077
|
+
presenter.done("Nothing written");
|
|
1078
|
+
return 1;
|
|
1079
|
+
}
|
|
1080
|
+
printPlaintextCredentialWarning();
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
updateSettings((settings) => applyAnswers(settings, answers, descriptor, chatEligible));
|
|
948
1084
|
} catch (error) {
|
|
949
1085
|
presenter.fail("settings were not written", error instanceof Error ? error.message : String(error));
|
|
950
|
-
presenter.done("
|
|
1086
|
+
presenter.done("Target settings not saved");
|
|
951
1087
|
return 1;
|
|
952
1088
|
}
|
|
953
1089
|
|
|
954
1090
|
presenter.completedStep(`target ${targetId} saved, runtime ${runtime.id}`);
|
|
955
|
-
if (chatEligible)
|
|
1091
|
+
if (answers.mode === "first" && chatEligible)
|
|
956
1092
|
presenter.completedStep(`chat runs on ${targetId}${answers.model ? `, model ${answers.model}` : ""}`);
|
|
957
|
-
else
|
|
958
|
-
|
|
959
|
-
if (answers.
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
1093
|
+
else if (!chatEligible)
|
|
1094
|
+
presenter.completedStep(`${runtime.id} cannot answer chat; ${targetId} is registered for dispatch only`);
|
|
1095
|
+
if (answers.mode === "first") presenter.completedStep(`fleet default is ${targetId}`);
|
|
1096
|
+
else presenter.note("Use Targets & Auth to change chat, fleet, or background defaults.");
|
|
1097
|
+
if (answers.mode === "first" && answers.thinking !== undefined)
|
|
1098
|
+
presenter.completedStep(`thinking level ${answers.thinking}`);
|
|
963
1099
|
if (answers.antigravity !== undefined) {
|
|
964
1100
|
presenter.completedStep(
|
|
965
1101
|
`world-knowledge bound read-only to ${answers.antigravity.targetId}/${answers.antigravity.model}`,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createInterface, type Interface } from "node:readline/promises";
|
|
2
|
+
import { railPrefix } from "./configure-target.js";
|
|
3
|
+
import { createLifecyclePresenter } from "./lifecycle-presenter.js";
|
|
4
|
+
import { canSelect, promptSelect, promptText } from "./select.js";
|
|
5
|
+
|
|
6
|
+
export class ConfigureNavigation extends Error {
|
|
7
|
+
constructor(readonly kind: "back" | "quit") {
|
|
8
|
+
super(kind);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Own stdin only while a question is active. Menus and editors own it otherwise. */
|
|
13
|
+
export class ConfigurePrompts {
|
|
14
|
+
constructor(
|
|
15
|
+
readonly input: NodeJS.ReadableStream,
|
|
16
|
+
readonly output: NodeJS.WritableStream,
|
|
17
|
+
) {}
|
|
18
|
+
|
|
19
|
+
get interactive(): boolean {
|
|
20
|
+
return canSelect(this.input as NodeJS.ReadStream, this.output as NodeJS.WriteStream);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
clearScreen(): void {
|
|
24
|
+
if (this.interactive) this.output.write("\x1b[H\x1b[2J");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async question(query: string, options?: Parameters<Interface["question"]>[1]): Promise<string> {
|
|
28
|
+
const rl = createInterface({ input: this.input, output: this.output });
|
|
29
|
+
try {
|
|
30
|
+
return await new Promise<string>((resolve, reject) => {
|
|
31
|
+
rl.once("close", () => reject(new ConfigureNavigation("quit")));
|
|
32
|
+
rl.once("SIGINT", () => reject(new ConfigureNavigation("quit")));
|
|
33
|
+
rl.question(query, options ?? {}).then(resolve, reject);
|
|
34
|
+
});
|
|
35
|
+
} finally {
|
|
36
|
+
rl.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async text(label: string, initial = "", mask = false): Promise<string> {
|
|
41
|
+
if (!this.interactive) {
|
|
42
|
+
const value = (await this.question(`${label}${initial ? ` [${initial}]` : ""}: `)).trim();
|
|
43
|
+
if (/^(q|quit)$/iu.test(value)) throw new ConfigureNavigation("quit");
|
|
44
|
+
return value || initial;
|
|
45
|
+
}
|
|
46
|
+
const result = await promptText({
|
|
47
|
+
heading: ["", label],
|
|
48
|
+
railPrefix: railPrefix(createLifecyclePresenter({ stream: this.output }).isPlain()),
|
|
49
|
+
initial,
|
|
50
|
+
mask,
|
|
51
|
+
backLabel: "back",
|
|
52
|
+
clearOnExit: true,
|
|
53
|
+
input: this.input as NodeJS.ReadStream,
|
|
54
|
+
output: this.output as NodeJS.WriteStream,
|
|
55
|
+
});
|
|
56
|
+
if (result.kind !== "value") throw new ConfigureNavigation(result.kind);
|
|
57
|
+
return result.value;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async choose(label: string, choices: ReadonlyArray<string>, current: string, searchable = false): Promise<string> {
|
|
61
|
+
if (!this.interactive) return this.text(`${label} [${choices.join("|")}]`, current);
|
|
62
|
+
const result = await promptSelect({
|
|
63
|
+
heading: ["", label],
|
|
64
|
+
railPrefix: railPrefix(createLifecyclePresenter({ stream: this.output }).isPlain()),
|
|
65
|
+
choices: choices.map((value) => ({ value, label: value })),
|
|
66
|
+
initialIndex: Math.max(0, choices.indexOf(current)),
|
|
67
|
+
...(searchable ? { searchable: true, maxVisible: 8 } : {}),
|
|
68
|
+
backLabel: "back",
|
|
69
|
+
clearOnExit: true,
|
|
70
|
+
input: this.input as NodeJS.ReadStream,
|
|
71
|
+
output: this.output as NodeJS.WriteStream,
|
|
72
|
+
});
|
|
73
|
+
if (result.kind !== "selected") throw new ConfigureNavigation(result.kind);
|
|
74
|
+
return result.value;
|
|
75
|
+
}
|
|
76
|
+
}
|