@iowarp/clio-coder 0.4.6 → 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 +50 -0
- package/CONTRIBUTING.md +102 -29
- package/NOTICE +8 -0
- package/README.md +37 -5
- package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
- package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
- 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-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
- package/dist/{builtins-PD652MTK.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-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
- package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
- package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
- package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
- package/dist/chunk-4UHVS5T7.js +207 -0
- package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
- package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
- package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
- package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
- package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
- package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
- package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
- package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
- package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
- package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
- package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
- package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
- package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
- package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
- package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
- package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
- package/dist/chunk-CP3HIR5H.js +2119 -0
- package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
- package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
- package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
- package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
- package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
- package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
- package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
- package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
- package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
- package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
- package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
- package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
- package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
- package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
- package/dist/{chunk-ACCKVSHU.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-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
- package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
- package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
- package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
- package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
- package/dist/chunk-KKEYGFX4.js +915 -0
- package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
- package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
- package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
- package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
- package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
- package/dist/chunk-MNQN3X6Y.js +595 -0
- package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
- package/dist/chunk-MZNWZUJM.js +1801 -0
- package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
- package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
- package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
- package/dist/chunk-OH3YYA3B.js +15 -0
- package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
- package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
- package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
- package/dist/chunk-RFCKPS2V.js +26 -0
- package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
- package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
- package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
- package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
- package/dist/{chunk-3WBALRQH.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-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
- package/dist/chunk-TZ6UVP2H.js +637 -0
- package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
- package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
- package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
- package/dist/{chunk-3O2ZAUGQ.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-4DU2TVI4.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-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
- package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
- package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
- package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
- package/dist/{chunk-XWMSPJYN.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-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
- package/dist/chunk-Y3JU5RPK.js +8 -0
- package/dist/chunk-YKRJTYNP.js +1143 -0
- package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
- package/dist/cli/index.js +34 -36
- package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
- package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
- package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
- package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
- package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
- package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
- package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
- package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
- package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
- 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-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
- package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
- package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
- package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
- package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
- package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
- package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
- package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
- package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
- package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
- package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
- package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
- package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
- package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
- package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
- package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
- package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
- package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
- package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
- package/dist/interop-FVECHFKG.js +246 -0
- package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
- 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-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
- package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
- package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
- package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
- 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-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
- package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
- package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
- package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
- package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
- package/dist/skills-BTVVNYVM.js +100 -0
- package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
- package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
- package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
- package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
- package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
- package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
- package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
- package/dist/{terminal-lease-LZCG2KN3.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-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
- package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
- package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
- package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
- package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
- package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
- package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
- package/dist/worker/entry.js +283 -76
- 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 +35 -1
- 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 +108 -9
- 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 +161 -56
- package/docs/guide/configuration-and-targets.md +1 -1
- package/docs/guide/configuration-reference.md +27 -34
- 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 +31 -4
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/harness-extensions.md +291 -0
- package/docs/guide/installation-and-lifecycle.md +9 -9
- 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 +14 -14
- package/docs/process/documentation-coverage.md +28 -1
- 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 +4 -0
- 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/config-inspect.ts +1 -1
- package/src/cli/configure.ts +2 -2
- 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/run.ts +26 -9
- 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/core/bus-events.ts +5 -0
- package/src/core/defaults.ts +1 -1
- 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/keybindings.ts +155 -95
- 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/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 +67 -21
- package/src/interactive/chat-loop.ts +32 -5
- package/src/interactive/chat-panel.ts +5 -1
- package/src/interactive/clio-editor.ts +53 -21
- package/src/interactive/command-output.ts +56 -1
- package/src/interactive/editor-submit.ts +65 -28
- 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 +4 -1
- package/src/interactive/footer/notifications.ts +2 -2
- package/src/interactive/footer/widgets.ts +2 -2
- package/src/interactive/interactive-application.ts +209 -21
- package/src/interactive/interactive-input-runtime.ts +254 -7
- package/src/interactive/interactive-presentation.ts +41 -12
- package/src/interactive/interactive-slash-runtime.ts +37 -8
- package/src/interactive/keybinding-manager.ts +156 -79
- package/src/interactive/keyboard-owner.ts +37 -0
- 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-key-routing.ts +46 -47
- package/src/interactive/overlay-lifecycle.ts +30 -15
- package/src/interactive/overlay-resource-openers.ts +56 -46
- 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 +25 -18
- 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/reference-card.ts +35 -0
- package/src/interactive/renderers/worker-entry.ts +35 -3
- package/src/interactive/slash-autocomplete.ts +99 -1
- package/src/interactive/slash-commands.ts +390 -67
- package/src/interactive/slash-spec.ts +0 -1
- package/src/interactive/terminal-lease.ts +44 -12
- package/src/interactive/turn-queues.ts +8 -7
- package/src/interactive/turn-runtime.ts +1 -1
- package/src/interactive/view/view-overlay.ts +19 -14
- 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/registry.ts +19 -1
- 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-536HXRFE.js +0 -1257
- package/dist/chunk-B3MOMLJ4.js +0 -433
- package/dist/chunk-CXQ37WJH.js +0 -45
- package/dist/chunk-KTFSFCVN.js +0 -46
- package/dist/chunk-QCOV5DFY.js +0 -911
- package/dist/chunk-QRFXEO6Y.js +0 -17
- package/dist/chunk-VAHLPXPY.js +0 -399
- package/dist/interop-RVCAYECG.js +0 -115
- package/dist/library-CTKZA7K3.js +0 -226
- package/dist/skills-OXFEAWMT.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
|
@@ -6,23 +6,37 @@ import type { ToolSurface } from "../lazy-tool.js";
|
|
|
6
6
|
export const contextToolSurface = {
|
|
7
7
|
name: ToolNames.Context,
|
|
8
8
|
description:
|
|
9
|
-
"Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name, scope=recall returns an exact persisted evicted or summarized tool result by ref; omit ref to discover historical results by query with bounded limit/offset pages. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
|
|
9
|
+
"Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name, scope=library reads the recipe catalog (installed skills/agents/prompts/fleets with their owner and invocation, plus installable packages) without activating or installing anything, scope=recall returns an exact persisted evicted or summarized tool result by ref; omit ref to discover historical results by query with bounded limit/offset pages. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
|
|
10
10
|
parameters: Type.Object({
|
|
11
|
-
scope: StringEnum(["workspace", "docs", "skills", "recall"], { description: "Context source." }),
|
|
11
|
+
scope: StringEnum(["workspace", "docs", "skills", "library", "recall"], { description: "Context source." }),
|
|
12
12
|
query: Type.Optional(
|
|
13
13
|
Type.String({
|
|
14
|
-
description:
|
|
14
|
+
description:
|
|
15
|
+
"scope=docs: question or terms. scope=library: name, owner, or description terms. scope=recall without ref: path, tool, or ref terms; omit to list.",
|
|
15
16
|
}),
|
|
16
17
|
),
|
|
17
18
|
name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
|
|
19
|
+
kind: Type.Optional(
|
|
20
|
+
StringEnum(["skill", "agent", "prompt", "fleet", "plugin"], {
|
|
21
|
+
description: "scope=library: one recipe kind, or plugin for installable package rows.",
|
|
22
|
+
}),
|
|
23
|
+
),
|
|
18
24
|
limit: Type.Optional(
|
|
19
25
|
Type.Number({
|
|
20
|
-
description:
|
|
26
|
+
description:
|
|
27
|
+
"scope=docs: max sections (default 5, max 12). scope=library: max rows (default 20, max 50). scope=recall: max refs (default 8, max 12).",
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
30
|
+
ref: Type.Optional(
|
|
31
|
+
Type.String({
|
|
32
|
+
description:
|
|
33
|
+
"scope=library: exact kind:name or resource key for one record. scope=recall: exact persisted result ref; omit for discovery.",
|
|
21
34
|
}),
|
|
22
35
|
),
|
|
23
|
-
ref: Type.Optional(Type.String({ description: "scope=recall: exact persisted result ref; omit for discovery." })),
|
|
24
36
|
offset: Type.Optional(
|
|
25
|
-
Type.Number({
|
|
37
|
+
Type.Number({
|
|
38
|
+
description: "scope=library and scope=recall discovery: zero-based offset; follow nextOffset (default 0).",
|
|
39
|
+
}),
|
|
26
40
|
),
|
|
27
41
|
include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
|
|
28
42
|
}),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ContextRecalledPayload } from "../core/bus-events.js";
|
|
2
|
+
import type { WorkerRecall } from "../domains/context/worker/recall.js";
|
|
2
3
|
import type { LoadSkillsInput } from "../domains/resources/index.js";
|
|
3
4
|
import type { SessionContract } from "../domains/session/contract.js";
|
|
4
5
|
import type { DecisionBoardStore } from "../domains/session/decision-board.js";
|
|
@@ -33,6 +34,7 @@ import { webFetchToolSurface } from "./web-fetch-surface.js";
|
|
|
33
34
|
import { writeTool } from "./write.js";
|
|
34
35
|
|
|
35
36
|
export interface CoreToolBootstrapDeps {
|
|
37
|
+
workerRecall?: WorkerRecall;
|
|
36
38
|
session?: SessionContract;
|
|
37
39
|
/** Full ledger of the current session; context(scope=recall) folds it. Absent in worker registries. */
|
|
38
40
|
readSessionEntries?: () => ReadonlyArray<SessionEntry>;
|
|
@@ -117,6 +119,7 @@ export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstra
|
|
|
117
119
|
),
|
|
118
120
|
});
|
|
119
121
|
const skillToolDeps = {
|
|
122
|
+
...(deps.workerRecall ? { workerRecall: deps.workerRecall } : {}),
|
|
120
123
|
getCwd: () => deps.session?.current()?.cwd ?? process.cwd(),
|
|
121
124
|
...(deps.getSkillLoaderOptions ? { getSkillLoaderOptions: deps.getSkillLoaderOptions } : {}),
|
|
122
125
|
...(deps.skillMarketplace !== undefined ? { skillMarketplace: deps.skillMarketplace } : {}),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isAbsolute, relative, resolve } from "node:path";
|
|
2
|
+
import { selectWorkerContext } from "../domains/context/worker/select.js";
|
|
2
3
|
import type { DispatchPlanTaskResolution, DispatchRequest } from "../domains/dispatch/contract.js";
|
|
3
4
|
import type { ExecutionPlan } from "../domains/dispatch/execution-plan.js";
|
|
4
5
|
import { gateDeciderAgentId } from "../domains/dispatch/execution-role.js";
|
|
@@ -344,6 +345,8 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
344
345
|
agent: resolution.agentId,
|
|
345
346
|
task: request.task,
|
|
346
347
|
...(request.briefing !== undefined ? { briefing: request.briefing } : {}),
|
|
348
|
+
...(request.context ? { context: structuredClone(request.context) } : {}),
|
|
349
|
+
...(request.contextSeed ? { workerContext: structuredClone(request.contextSeed.provenance) } : {}),
|
|
347
350
|
...(request.worktree === true
|
|
348
351
|
? {
|
|
349
352
|
worktree: true as const,
|
|
@@ -510,6 +513,26 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
510
513
|
}
|
|
511
514
|
const parsed = parseRequests(args);
|
|
512
515
|
if (!parsed.ok) return shapeRejection(args, parsed.message);
|
|
516
|
+
try {
|
|
517
|
+
const inheriting = parsed.requests.filter((request) => request.context && request.context.mode !== "isolated");
|
|
518
|
+
if (inheriting.length > 0) {
|
|
519
|
+
const source = deps.captureWorkerContext?.();
|
|
520
|
+
if (!source) throw new Error("worker context: no active parent conversation is available");
|
|
521
|
+
for (const request of inheriting) {
|
|
522
|
+
const policy = request.context;
|
|
523
|
+
if (!policy || policy.mode === "isolated") continue;
|
|
524
|
+
request.contextSeed = selectWorkerContext(
|
|
525
|
+
source,
|
|
526
|
+
policy,
|
|
527
|
+
request.intent
|
|
528
|
+
? [...request.intent.readRoots, ...request.intent.relevantPaths, ...request.intent.writeRoots]
|
|
529
|
+
: [],
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
} catch (error) {
|
|
534
|
+
return preparationFailure(args, error);
|
|
535
|
+
}
|
|
513
536
|
if (
|
|
514
537
|
args.mode !== undefined &&
|
|
515
538
|
!["parallel", "sequential", "pipeline", "compete", "council"].includes(String(args.mode))
|
|
@@ -755,7 +778,7 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
755
778
|
topology === "compete" ||
|
|
756
779
|
tasks.some((task) => task.node !== "local" || task.failover === "approved");
|
|
757
780
|
if (!planScale) {
|
|
758
|
-
const marked = parsed.requests.some((request) => request.intent !== undefined)
|
|
781
|
+
const marked = parsed.requests.some((request) => request.intent !== undefined || request.contextSeed !== undefined)
|
|
759
782
|
? markPrepared(
|
|
760
783
|
withResolvedDispatchPlan(args, {
|
|
761
784
|
version: 3,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseWorkerContextPolicy } from "../domains/context/worker/contract.js";
|
|
1
2
|
/** Pure model-argument parsing; every returned DispatchRequest has a concrete agent id. */
|
|
2
3
|
|
|
3
4
|
import { parseResultSummaryMaxBytes } from "../domains/agents/result-contract.js";
|
|
@@ -168,6 +169,13 @@ function dispatchRequestFromArgs(
|
|
|
168
169
|
}
|
|
169
170
|
: {}),
|
|
170
171
|
};
|
|
172
|
+
if (args.context !== undefined) {
|
|
173
|
+
try {
|
|
174
|
+
request.context = parseWorkerContextPolicy(args.context);
|
|
175
|
+
} catch (error) {
|
|
176
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
171
179
|
if ("briefing" in args && args.briefing !== undefined) {
|
|
172
180
|
if (typeof args.briefing !== "string") return { ok: false, message: "briefing must be a string" };
|
|
173
181
|
const briefing = args.briefing.trim();
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseWorkerContextPolicy,
|
|
3
|
+
type WorkerContextPolicy,
|
|
4
|
+
type WorkerContextProvenance,
|
|
5
|
+
} from "../domains/context/worker/contract.js";
|
|
6
|
+
import { parseWorkerContextProvenance } from "../worker/context-seed.js";
|
|
1
7
|
/**
|
|
2
8
|
* Plan-scale dispatch detection and the operator-facing plan artifact.
|
|
3
9
|
*
|
|
@@ -61,6 +67,8 @@ export interface DispatchPlanTaskView {
|
|
|
61
67
|
task: string;
|
|
62
68
|
/** Exact canonical bounded briefing approved for this task. */
|
|
63
69
|
briefing?: string;
|
|
70
|
+
context?: WorkerContextPolicy;
|
|
71
|
+
workerContext?: WorkerContextProvenance;
|
|
64
72
|
worktree?: true;
|
|
65
73
|
apply?: "merge" | "preserve";
|
|
66
74
|
worktreeDestination?: string;
|
|
@@ -138,6 +146,8 @@ export interface ResolvedDispatchPlanArtifact {
|
|
|
138
146
|
Pick<
|
|
139
147
|
DispatchPlanTaskView,
|
|
140
148
|
| "briefing"
|
|
149
|
+
| "context"
|
|
150
|
+
| "workerContext"
|
|
141
151
|
| "worktree"
|
|
142
152
|
| "apply"
|
|
143
153
|
| "worktreeDestination"
|
|
@@ -175,8 +185,12 @@ export function withResolvedPlanTaskPin(
|
|
|
175
185
|
options: { pinTask?: boolean; pinBriefing?: boolean } = {},
|
|
176
186
|
): DispatchRequest {
|
|
177
187
|
if (task === undefined) return request;
|
|
188
|
+
if (task.workerContext !== undefined && request.contextSeed?.provenance.contentHash !== task.workerContext.contentHash)
|
|
189
|
+
throw new Error("worker context: admitted seed no longer matches the plan");
|
|
178
190
|
const {
|
|
179
191
|
briefing: _briefing,
|
|
192
|
+
context: _context,
|
|
193
|
+
contextSeed: _contextSeed,
|
|
180
194
|
failover: _failover,
|
|
181
195
|
allowedCandidates: _candidates,
|
|
182
196
|
agentSelection: _agentSelection,
|
|
@@ -188,6 +202,8 @@ export function withResolvedPlanTaskPin(
|
|
|
188
202
|
return {
|
|
189
203
|
...base,
|
|
190
204
|
agentId: task.agent,
|
|
205
|
+
...(task.context ? { context: structuredClone(task.context) } : {}),
|
|
206
|
+
...(task.workerContext && request.contextSeed ? { contextSeed: structuredClone(request.contextSeed) } : {}),
|
|
191
207
|
executionRole: task.executionRole,
|
|
192
208
|
...(request.reservation !== undefined &&
|
|
193
209
|
(task.stepId !== null || (task.role !== undefined && task.position !== undefined))
|
|
@@ -476,6 +492,10 @@ function renderPlanText(
|
|
|
476
492
|
if (agentReasons !== undefined && agentReasons.length > 0)
|
|
477
493
|
lines.push(` agent-exclusions=${agentReasons.join(";")}`);
|
|
478
494
|
}
|
|
495
|
+
if (task.context !== undefined)
|
|
496
|
+
lines.push(
|
|
497
|
+
` context=${task.context.mode}${task.workerContext ? ` tokens=${task.workerContext.estimatedTokens} omitted=${task.workerContext.omittedMessages} sha256=${task.workerContext.contentHash}` : ""}`,
|
|
498
|
+
);
|
|
479
499
|
if (task.briefing !== undefined) {
|
|
480
500
|
lines.push(
|
|
481
501
|
` briefing_bytes=${Buffer.byteLength(task.briefing, "utf8")} briefing_sha256=${createHash("sha256").update(task.briefing, "utf8").digest("hex")} briefing_preview=${JSON.stringify(safeField(task.briefing, false))}`,
|
|
@@ -497,10 +517,20 @@ function renderPlanText(
|
|
|
497
517
|
|
|
498
518
|
function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["tasks"][number] {
|
|
499
519
|
if (!isRecord(value)) return false;
|
|
520
|
+
try {
|
|
521
|
+
const context = value.context === undefined ? undefined : parseWorkerContextPolicy(value.context);
|
|
522
|
+
const provenance = value.workerContext === undefined ? undefined : parseWorkerContextProvenance(value.workerContext);
|
|
523
|
+
if (provenance && provenance.mode !== context?.mode) return false;
|
|
524
|
+
if (context && context.mode !== "isolated" && !provenance) return false;
|
|
525
|
+
} catch {
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
500
528
|
const allowedKeys = new Set([
|
|
501
529
|
"agent",
|
|
502
530
|
"task",
|
|
503
531
|
"briefing",
|
|
532
|
+
"context",
|
|
533
|
+
"workerContext",
|
|
504
534
|
"worktree",
|
|
505
535
|
"apply",
|
|
506
536
|
"worktreeDestination",
|
|
@@ -821,6 +851,8 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
|
|
|
821
851
|
agent: task.agent.trim(),
|
|
822
852
|
task: task.task.trim(),
|
|
823
853
|
...(task.briefing !== undefined ? { briefing: task.briefing.trim() } : {}),
|
|
854
|
+
...(task.context !== undefined ? { context: parseWorkerContextPolicy(task.context) } : {}),
|
|
855
|
+
...(task.workerContext !== undefined ? { workerContext: structuredClone(task.workerContext) } : {}),
|
|
824
856
|
...(task.worktree === true
|
|
825
857
|
? {
|
|
826
858
|
worktree: true as const,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Static, Type } from "typebox";
|
|
2
2
|
import type { FleetSettings } from "../core/defaults.js";
|
|
3
3
|
import { RESULT_SUMMARY_MAX_BYTES_CEILING } from "../domains/agents/result-contract.js";
|
|
4
|
+
import { WORKER_CONTEXT_SPLICE_TOKENS } from "../domains/context/worker/contract.js";
|
|
4
5
|
import { DISPATCH_BRIEFING_MAX_BYTES } from "../domains/dispatch/validation.js";
|
|
5
6
|
import { StringEnum } from "../engine/ai.js";
|
|
6
7
|
import { TOOL_PROFILE_NAMES } from "./profiles.js";
|
|
@@ -116,7 +117,6 @@ const DispatchIntentSchema = Type.Object(
|
|
|
116
117
|
},
|
|
117
118
|
);
|
|
118
119
|
|
|
119
|
-
const DISPATCH_DEFS = { intent: DispatchIntentSchema, budget: DispatchBudgetSchema };
|
|
120
120
|
const IntentRef = Type.Unsafe<Static<typeof DispatchIntentSchema>>({ $ref: "#/$defs/intent" });
|
|
121
121
|
const BudgetRef = Type.Unsafe<Static<typeof DispatchBudgetSchema>>({ $ref: "#/$defs/budget" });
|
|
122
122
|
|
|
@@ -136,6 +136,34 @@ const MODE_DESCRIPTION: Record<"full" | "noCouncil" | "noCompete" | "neither", s
|
|
|
136
136
|
* Optional blocks come and go with `composition`, and the `mode` enum only
|
|
137
137
|
* names the modes whose fields are advertised.
|
|
138
138
|
*/
|
|
139
|
+
const WorkerContextSchema = Type.Union(
|
|
140
|
+
[
|
|
141
|
+
Type.Object({ mode: Type.Literal("isolated") }, { additionalProperties: false }),
|
|
142
|
+
Type.Object(
|
|
143
|
+
{ mode: Type.Literal("fork"), max_tokens: Type.Optional(Type.Integer({ minimum: 256, maximum: 262144 })) },
|
|
144
|
+
{ additionalProperties: false },
|
|
145
|
+
),
|
|
146
|
+
Type.Object(
|
|
147
|
+
{
|
|
148
|
+
mode: Type.Literal("splice"),
|
|
149
|
+
max_tokens: Type.Optional(Type.Integer({ minimum: 256, maximum: 262144 })),
|
|
150
|
+
paths: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 4096 }), { minItems: 1, maxItems: 64 })),
|
|
151
|
+
refs: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 4096 }), { minItems: 1, maxItems: 64 })),
|
|
152
|
+
},
|
|
153
|
+
{ additionalProperties: false },
|
|
154
|
+
),
|
|
155
|
+
],
|
|
156
|
+
{
|
|
157
|
+
description: `Parent conversation: isolated (default), fork (native history; never silently truncated), or splice (selected text evidence, default ${WORKER_CONTEXT_SPLICE_TOKENS} tokens). refs: tool:<call-id> or message:<index> in the current snapshot. Batch defaults may be overridden per task.`,
|
|
158
|
+
},
|
|
159
|
+
);
|
|
160
|
+
const ContextRef = Type.Unsafe<Static<typeof WorkerContextSchema>>({ $ref: "#/$defs/workerContext" });
|
|
161
|
+
const DISPATCH_DEFS = {
|
|
162
|
+
intent: DispatchIntentSchema,
|
|
163
|
+
budget: DispatchBudgetSchema,
|
|
164
|
+
workerContext: WorkerContextSchema,
|
|
165
|
+
};
|
|
166
|
+
|
|
139
167
|
export function buildDispatchParameters(composition: DispatchSchemaComposition = FULL_DISPATCH_SCHEMA_COMPOSITION) {
|
|
140
168
|
const modes = [
|
|
141
169
|
"parallel",
|
|
@@ -178,6 +206,7 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
178
206
|
// tokens advertising them twice).
|
|
179
207
|
Type.Object({
|
|
180
208
|
task: Type.String({ description: "The assignment, with expected output and constraints." }),
|
|
209
|
+
context: Type.Optional(ContextRef),
|
|
181
210
|
briefing: Type.Optional(
|
|
182
211
|
Type.String({ description: `Per-task parent context, max ${DISPATCH_BRIEFING_MAX_BYTES} UTF-8 bytes.` }),
|
|
183
212
|
),
|
|
@@ -288,6 +317,7 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
|
|
|
288
317
|
: "Default recipe id for tasks without their own agent, or auto (default coder).",
|
|
289
318
|
}),
|
|
290
319
|
),
|
|
320
|
+
context: Type.Optional(ContextRef),
|
|
291
321
|
briefing: Type.Optional(
|
|
292
322
|
Type.String({
|
|
293
323
|
description: `Parent context for task, or the shared default for tasks; never instructions. Max ${DISPATCH_BRIEFING_MAX_BYTES} UTF-8 bytes.`,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
2
2
|
import type { AgentSpec } from "../domains/agents/spec.js";
|
|
3
|
+
import type { WorkerContextSnapshot } from "../domains/context/worker/contract.js";
|
|
3
4
|
import type { DispatchContract, DispatchRequest } from "../domains/dispatch/contract.js";
|
|
4
5
|
import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
|
|
5
6
|
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
@@ -83,6 +84,8 @@ export type DispatchExecutionSnapshot =
|
|
|
83
84
|
| DispatchListExecutionSnapshot;
|
|
84
85
|
|
|
85
86
|
export interface DispatchToolDeps {
|
|
87
|
+
/** Synchronous read of the active model-visible history, before admission can park. */
|
|
88
|
+
captureWorkerContext?: () => WorkerContextSnapshot | null;
|
|
86
89
|
dispatch: DispatchContract;
|
|
87
90
|
bus?: SafeEventBus;
|
|
88
91
|
/** Instance-scoped owner for ordinary tool-owned run streams and monitor tails. */
|
package/src/tools/dispatch.ts
CHANGED
|
@@ -61,7 +61,7 @@ export function createDispatchTool(
|
|
|
61
61
|
// Delegation prompt sections. This description says only what the call
|
|
62
62
|
// shape is; every field below carries one discriminating sentence.
|
|
63
63
|
description:
|
|
64
|
-
"Delegate to a fleet worker: task dispatches one assignment, tasks dispatches a batch, never both.
|
|
64
|
+
"Delegate to a fleet worker: task dispatches one assignment, tasks dispatches a batch, never both. context selects isolated (default), fork (native only), or splice inheritance. briefing adds bounded parent evidence. A call auto-waits for the sealed receipt; detach:true returns run ids to monitor and collect later. Declare intent on every dispatch. list:true shows the roster.",
|
|
65
65
|
// Composed once per session: council, compete, and adaptive-routing fields
|
|
66
66
|
// are advertised only when the fleet can exercise them (see dispatch-schema.ts).
|
|
67
67
|
parameters: buildDispatchParameters(deps.getSchemaComposition?.() ?? FULL_DISPATCH_SCHEMA_COMPOSITION),
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import type { TSchema } from "typebox";
|
|
3
|
+
import { Value } from "typebox/value";
|
|
4
|
+
import { parse as parseYaml } from "yaml";
|
|
5
|
+
import { runCommandVector } from "../core/safe-exec.js";
|
|
6
|
+
import type { DynamicToolName } from "../core/tool-names.js";
|
|
7
|
+
import { extensionToolName, resolveExtensionEntrypoint } from "../domains/extensions/command-schema.js";
|
|
8
|
+
import { parseExtensionManifest } from "../domains/extensions/discovery.js";
|
|
9
|
+
import { extensionContentDigestWithCapture } from "../domains/extensions/integrity.js";
|
|
10
|
+
import { listInstalledExtensions } from "../domains/extensions/state.js";
|
|
11
|
+
import {
|
|
12
|
+
type ExtensionCommandTool,
|
|
13
|
+
type ExtensionDiagnostic,
|
|
14
|
+
isLoadableExtension,
|
|
15
|
+
type LoadableExtension,
|
|
16
|
+
} from "../domains/extensions/types.js";
|
|
17
|
+
import type { ToolRegistry, ToolSpec } from "./registry.js";
|
|
18
|
+
|
|
19
|
+
const MAX_INPUT_BYTES = 64 * 1024;
|
|
20
|
+
|
|
21
|
+
/** Serialize a fixed argv vector only for the existing shell safety classifier. No shell executes this text. */
|
|
22
|
+
function quoted(value: string): string {
|
|
23
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function jsonInput(args: Record<string, unknown>): string {
|
|
27
|
+
const input = JSON.stringify(args);
|
|
28
|
+
if (Buffer.byteLength(input) > MAX_INPUT_BYTES) throw new Error(`command tool input exceeds ${MAX_INPUT_BYTES} bytes`);
|
|
29
|
+
return input;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function commandVector(extension: LoadableExtension, tool: ExtensionCommandTool): { file: string; args: string[] } {
|
|
33
|
+
const entrypoint = resolveExtensionEntrypoint(extension.rootPath, tool.entrypoint);
|
|
34
|
+
return tool.runtime === "node"
|
|
35
|
+
? { file: process.execPath, args: ["--", entrypoint] }
|
|
36
|
+
: { file: "python3", args: ["-I", entrypoint] };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Parse declarations from the exact manifest bytes included in the verified tree. */
|
|
40
|
+
function verifiedCommands(extension: LoadableExtension): ExtensionCommandTool[] {
|
|
41
|
+
const manifestName = path.basename(extension.manifestPath);
|
|
42
|
+
const verified = extensionContentDigestWithCapture(extension.rootPath, { capture: [manifestName] });
|
|
43
|
+
if (verified.digest !== extension.provenance.contentDigest)
|
|
44
|
+
throw new Error("installed extension changed while loading tools");
|
|
45
|
+
const bytes = verified.captured.get(manifestName);
|
|
46
|
+
if (!bytes) throw new Error("verified extension manifest bytes are absent");
|
|
47
|
+
const parsed = parseExtensionManifest(
|
|
48
|
+
manifestName.endsWith(".json") ? JSON.parse(bytes.toString("utf8")) : parseYaml(bytes.toString("utf8")),
|
|
49
|
+
extension.manifestPath,
|
|
50
|
+
);
|
|
51
|
+
if (!parsed.manifest || parsed.diagnostics.some((entry) => entry.type === "error"))
|
|
52
|
+
throw new Error("verified extension manifest is invalid");
|
|
53
|
+
if (parsed.manifest.id !== extension.id || parsed.manifest.version !== extension.version)
|
|
54
|
+
throw new Error("verified extension identity changed while loading tools");
|
|
55
|
+
return parsed.manifest.capabilities?.tools ?? [];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function createCommandTool(extension: LoadableExtension, tool: ExtensionCommandTool, cwd: string): ToolSpec {
|
|
59
|
+
const name = extensionToolName(extension.id, tool.name) as DynamicToolName;
|
|
60
|
+
const vector = commandVector(extension, tool);
|
|
61
|
+
return {
|
|
62
|
+
name,
|
|
63
|
+
description: `${tool.description}\nHarness extension ${extension.id}@${extension.version}; runs an installed command with JSON input and output.`,
|
|
64
|
+
parameters: tool.inputSchema as TSchema,
|
|
65
|
+
baseActionClass: "execute",
|
|
66
|
+
executionMode: "sequential",
|
|
67
|
+
sourceInfo: { path: extension.manifestPath, scope: "domain", extension: extension.provenance },
|
|
68
|
+
metadata: {
|
|
69
|
+
objective: tool.description,
|
|
70
|
+
uiLabel: `${extension.id}/${tool.name}`,
|
|
71
|
+
retrySafety: "not_retry_safe",
|
|
72
|
+
resultSizePolicy: { kind: "bounded", maxBytes: tool.maxOutputBytes ?? 600000 },
|
|
73
|
+
costLatency: "local_slow",
|
|
74
|
+
},
|
|
75
|
+
safetyCall(args) {
|
|
76
|
+
// The vector stays execution-class even for inputs such as {op:"read"}.
|
|
77
|
+
let input = "[invalid JSON input]";
|
|
78
|
+
try {
|
|
79
|
+
input = jsonInput(args);
|
|
80
|
+
} catch {
|
|
81
|
+
/* The body reports bounded input validation. */
|
|
82
|
+
}
|
|
83
|
+
return { tool: "bash", args: { command: [vector.file, ...vector.args, input].map(quoted).join(" "), cwd } };
|
|
84
|
+
},
|
|
85
|
+
async run(args, options) {
|
|
86
|
+
try {
|
|
87
|
+
const input = jsonInput(args);
|
|
88
|
+
if (!Value.Check(tool.inputSchema as TSchema, args))
|
|
89
|
+
return { kind: "error", message: `${name}: input does not match its declared JSON schema` };
|
|
90
|
+
if (options?.signal?.aborted) return { kind: "error", message: `${name}: aborted before execution` };
|
|
91
|
+
const current = listInstalledExtensions(cwd).find(
|
|
92
|
+
(entry) => entry.id === extension.id && isLoadableExtension(entry),
|
|
93
|
+
);
|
|
94
|
+
if (
|
|
95
|
+
!current ||
|
|
96
|
+
!isLoadableExtension(current) ||
|
|
97
|
+
current.scope !== extension.scope ||
|
|
98
|
+
current.provenance.canonicalRoot !== extension.provenance.canonicalRoot ||
|
|
99
|
+
current.provenance.contentDigest !== extension.provenance.contentDigest
|
|
100
|
+
) {
|
|
101
|
+
return {
|
|
102
|
+
kind: "error",
|
|
103
|
+
message: `${name}: extension disabled, removed, replaced, or changed; restart after reviewing its installation`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const activeVector = commandVector(current, tool);
|
|
107
|
+
const result = await runCommandVector(activeVector.file, [...activeVector.args, input], {
|
|
108
|
+
cwd,
|
|
109
|
+
workspaceRoot: cwd,
|
|
110
|
+
timeoutMs: tool.timeoutMs ?? 120000,
|
|
111
|
+
maxOutputBytes: tool.maxOutputBytes ?? 600000,
|
|
112
|
+
...(options?.signal ? { signal: options.signal } : {}),
|
|
113
|
+
});
|
|
114
|
+
const details = {
|
|
115
|
+
extension: extension.provenance,
|
|
116
|
+
argv: [result.file, ...result.args],
|
|
117
|
+
cwd: result.cwd,
|
|
118
|
+
exitCode: result.exitCode,
|
|
119
|
+
durationMs: result.durationMs,
|
|
120
|
+
aborted: result.aborted,
|
|
121
|
+
timedOut: result.timedOut,
|
|
122
|
+
outputCapped: result.outputCapped,
|
|
123
|
+
stderr: result.stderr,
|
|
124
|
+
};
|
|
125
|
+
if (result.aborted || result.timedOut || result.outputCapped || result.exitCode !== 0) {
|
|
126
|
+
const reason = result.aborted
|
|
127
|
+
? "aborted"
|
|
128
|
+
: result.timedOut
|
|
129
|
+
? "timed out"
|
|
130
|
+
: result.outputCapped
|
|
131
|
+
? "output limit exceeded"
|
|
132
|
+
: `exited with code ${result.exitCode}`;
|
|
133
|
+
return { kind: "error", message: `${name}: ${reason}`, details };
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
return { kind: "ok", output: JSON.stringify(JSON.parse(result.stdout)), details };
|
|
137
|
+
} catch {
|
|
138
|
+
return { kind: "error", message: `${name}: command stdout must contain one JSON value`, details };
|
|
139
|
+
}
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return { kind: "error", message: `${name}: ${error instanceof Error ? error.message : String(error)}` };
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Freeze installed harness tool schemas at registry construction, in sessions and native workers.
|
|
149
|
+
* Registration never imports or executes package code. Lifecycle mutations revoke calls immediately;
|
|
150
|
+
* new or updated schemas enter the next session/worker, keeping approved worker surfaces stable.
|
|
151
|
+
*/
|
|
152
|
+
export function registerHarnessExtensionTools(registry: ToolRegistry, cwd = process.cwd()): ExtensionDiagnostic[] {
|
|
153
|
+
const diagnostics: ExtensionDiagnostic[] = [];
|
|
154
|
+
for (const extension of listInstalledExtensions(cwd)) {
|
|
155
|
+
if (!isLoadableExtension(extension) || !extension.capabilities) continue;
|
|
156
|
+
try {
|
|
157
|
+
const tools = verifiedCommands(extension).map((tool) => createCommandTool(extension, tool, path.resolve(cwd)));
|
|
158
|
+
for (const tool of tools) if (registry.get(tool.name)) throw new Error(`tool collision: ${tool.name}`);
|
|
159
|
+
for (const tool of tools) registry.register(tool);
|
|
160
|
+
} catch (error) {
|
|
161
|
+
diagnostics.push({
|
|
162
|
+
type: "error",
|
|
163
|
+
path: extension.rootPath,
|
|
164
|
+
message: `extension ${extension.id}: ${error instanceof Error ? error.message : String(error)}`,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return diagnostics;
|
|
169
|
+
}
|
package/src/tools/observation.ts
CHANGED
|
@@ -62,6 +62,10 @@ export const OBSERVE_SELF_CAPS = {
|
|
|
62
62
|
contextDocs: 16 * 1024,
|
|
63
63
|
contextSkills: 50 * 1024,
|
|
64
64
|
contextWorkspace: 50 * 1024,
|
|
65
|
+
// Library rows are metadata: name, owner, origin, availability, invocation.
|
|
66
|
+
// A full page of 50 stays well inside this, and a smaller cap than the
|
|
67
|
+
// skills catalog is what keeps a catalog read from crowding out the turn.
|
|
68
|
+
contextLibrary: 16 * 1024,
|
|
65
69
|
} as const;
|
|
66
70
|
|
|
67
71
|
// Per-turn observation budget pool. One pool per sessionId:turnId shared by
|
package/src/tools/policy.ts
CHANGED
|
@@ -81,7 +81,13 @@ const OBSERVE_ENVELOPE_SELF_CAPS: ReadonlyArray<[BuiltinToolName, () => number]>
|
|
|
81
81
|
[ToolNames.CodeNav, () => OBSERVE_SELF_CAPS.codeNav],
|
|
82
82
|
[
|
|
83
83
|
ToolNames.Context,
|
|
84
|
-
() =>
|
|
84
|
+
() =>
|
|
85
|
+
Math.max(
|
|
86
|
+
OBSERVE_SELF_CAPS.contextDocs,
|
|
87
|
+
OBSERVE_SELF_CAPS.contextSkills,
|
|
88
|
+
OBSERVE_SELF_CAPS.contextWorkspace,
|
|
89
|
+
OBSERVE_SELF_CAPS.contextLibrary,
|
|
90
|
+
),
|
|
85
91
|
],
|
|
86
92
|
];
|
|
87
93
|
|
package/src/tools/registry.ts
CHANGED
|
@@ -77,6 +77,8 @@ export function resolveToolPromptHint(
|
|
|
77
77
|
export interface ToolSourceInfo {
|
|
78
78
|
path: string;
|
|
79
79
|
scope: ToolSourceScope;
|
|
80
|
+
/** Verified installed capability identity, when this is a harness extension tool. */
|
|
81
|
+
extension?: import("../domains/extensions/types.js").ExtensionProvenance;
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
export interface ToolResultSizePolicy {
|
|
@@ -127,6 +129,8 @@ export interface ToolSpec {
|
|
|
127
129
|
parameters: TSchema;
|
|
128
130
|
/** Base action class for this tool when arguments are trivial. */
|
|
129
131
|
baseActionClass: ActionClass;
|
|
132
|
+
/** Harness-owned projection of executable effects for the safety engine. Never package-supplied code. */
|
|
133
|
+
safetyCall?(args: Record<string, unknown>): ClassifierCall;
|
|
130
134
|
/**
|
|
131
135
|
* Per-tool execution mode. Read-only tools set `"parallel"` so the model
|
|
132
136
|
* can batch scans; mutating or filesystem-racing tools set `"sequential"`
|
|
@@ -532,7 +536,21 @@ export function createRegistry(deps: RegistryDeps): ToolRegistry {
|
|
|
532
536
|
return { kind: "terminal", verdict: { kind: "not_visible", reason: `tool not registered: ${call.tool}` } };
|
|
533
537
|
}
|
|
534
538
|
const level = deps.autonomy?.() ?? DEFAULT_AUTONOMY_LEVEL;
|
|
535
|
-
const
|
|
539
|
+
const directDecision = applyRegisteredToolClassification(
|
|
540
|
+
deps.safety.evaluate(call, grant ? "confirmed" : undefined),
|
|
541
|
+
spec,
|
|
542
|
+
);
|
|
543
|
+
const projectedCall = spec.safetyCall?.(call.args ?? {});
|
|
544
|
+
const projectedDecision =
|
|
545
|
+
projectedCall && directDecision.kind !== "block"
|
|
546
|
+
? applyRegisteredToolClassification(deps.safety.evaluate(projectedCall, grant ? "confirmed" : undefined), spec)
|
|
547
|
+
: undefined;
|
|
548
|
+
// Both the public capability and its underlying effects must pass. A trusted
|
|
549
|
+
// projection cannot bypass a rule targeting the capability's own name.
|
|
550
|
+
const decision =
|
|
551
|
+
directDecision.kind === "block" || (directDecision.kind === "ask" && projectedDecision?.kind !== "block")
|
|
552
|
+
? directDecision
|
|
553
|
+
: (projectedDecision ?? directDecision);
|
|
536
554
|
// Stage 1, the safety net (level-independent): engine blocks are final;
|
|
537
555
|
// engine asks are confirm rails that park at every level. read-only is
|
|
538
556
|
// the exception by definition: approvals are never invoked there, so a
|
|
@@ -168,6 +168,11 @@ export function receiptEvidenceLabels(
|
|
|
168
168
|
...receiptAdmissionLabels(receipt),
|
|
169
169
|
...receiptActivityLabels(receipt, status),
|
|
170
170
|
briefing,
|
|
171
|
+
...(receipt.workerContext
|
|
172
|
+
? [
|
|
173
|
+
`context=${receipt.workerContext.mode} tokens:${receipt.workerContext.estimatedTokens} omitted:${receipt.workerContext.omittedMessages} sha256:${receipt.workerContext.contentHash}`,
|
|
174
|
+
]
|
|
175
|
+
: []),
|
|
171
176
|
projectContext,
|
|
172
177
|
];
|
|
173
178
|
}
|