@iowarp/clio-coder 0.3.4 → 0.3.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/CHANGELOG.md +65 -2
- package/CONTRIBUTING.md +6 -6
- package/README.md +16 -5
- package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
- package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
- package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
- package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
- package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
- package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
- package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
- package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
- package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
- package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
- package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
- package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
- package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
- package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
- package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
- package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
- package/dist/chunk-DJNLUABN.js +843 -0
- package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
- package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
- package/dist/chunk-DQA7QLMD.js +123 -0
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
- package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
- package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
- package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
- package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
- package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
- package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
- package/dist/chunk-HWUFFB6L.js +83 -0
- package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
- package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
- package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
- package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
- package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
- package/dist/chunk-KZ2H5X4G.js +1026 -0
- package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
- package/dist/chunk-LCGCVYZ4.js +57 -0
- package/dist/chunk-M4AKACEO.js +382 -0
- package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
- package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
- package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
- package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
- package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
- package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
- package/dist/chunk-PD3MESLB.js +242 -0
- package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
- package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
- package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
- package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
- package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
- package/dist/chunk-UND3GU2L.js +103 -0
- package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
- package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
- package/dist/chunk-UVDSQ6LW.js +472 -0
- package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
- package/dist/chunk-VREKEFLL.js +37 -0
- package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
- package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
- package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
- package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
- package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
- package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
- package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
- package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
- package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
- package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
- package/dist/cli/index.js +34 -32
- package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
- package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
- package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
- package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
- package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
- package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
- package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
- package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
- package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
- package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
- package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
- package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
- package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
- package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
- package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
- package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
- package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
- package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
- package/dist/fleet-commands-ZFIWZSB3.js +70 -0
- package/dist/fleet-graph-Y6HPXIVF.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
- package/dist/fleet-validate-BIYREGIK.js +79 -0
- package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
- package/dist/library-NJAHIGG4.js +217 -0
- package/dist/memory-OG6HOYKM.js +472 -0
- package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
- package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
- package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
- package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
- package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
- package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
- package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
- package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
- package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
- package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
- package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
- package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
- package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
- package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
- package/dist/verifiers-RLAHT27O.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
- package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
- package/dist/worker/entry.js +98 -84
- package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
- package/docs/README.md +4 -3
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-placement.md +1 -2
- package/docs/artifact-versions.md +10 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +90 -8
- package/docs/configuration-and-targets.md +90 -2
- package/docs/context-engine.md +4 -2
- package/docs/context-working-set.md +4 -4
- package/docs/development-pipeline.md +1 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +4 -4
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +4 -45
- package/docs/evidence-and-memory.md +70 -10
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +4 -1
- package/docs/extensions-and-sharing.md +6 -2
- package/docs/fleet-demo-runbook.md +2 -2
- package/docs/fleet-dispatch.md +224 -11
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +20 -2
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +55 -8
- package/docs/proactive-memory.md +26 -16
- package/docs/prompt-envelope-and-tools.md +4 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +83 -65
- package/docs/resource-library.md +59 -0
- package/docs/safety-model.md +29 -7
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +37 -1
- package/docs/skills-marketplace.md +16 -3
- package/docs/tool-usage.md +14 -7
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +38 -4
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +7 -4
- package/src/cli/agents.ts +2 -3
- package/src/cli/argv.ts +14 -1
- package/src/cli/fleet-commands.ts +37 -0
- package/src/cli/fleet-graph.ts +102 -0
- package/src/cli/fleet-new.ts +36 -0
- package/src/cli/fleet-preflight.ts +121 -0
- package/src/cli/fleet-validate.ts +30 -0
- package/src/cli/fleet.ts +188 -335
- package/src/cli/index.ts +4 -2
- package/src/cli/library.ts +190 -0
- package/src/cli/memory.ts +272 -10
- package/src/cli/modes/json-stream.ts +2 -2
- package/src/cli/modes/print.ts +12 -1
- package/src/cli/run.ts +22 -2
- package/src/cli/share.ts +13 -1
- package/src/cli/targets.ts +12 -3
- package/src/cli/usage.ts +160 -20
- package/src/core/bus-events.ts +7 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +130 -0
- package/src/core/defaults.ts +81 -0
- package/src/core/response-model-id.ts +134 -0
- package/src/core/toml.ts +62 -0
- package/src/core/workspace-files.ts +0 -1
- package/src/domains/agents/builtins/architect.md +2 -1
- package/src/domains/agents/builtins/oracle.md +33 -0
- package/src/domains/agents/catalog.ts +18 -5
- package/src/domains/agents/fleet-contract.ts +278 -16
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/recipe.ts +54 -14
- package/src/domains/agents/result-contract.ts +242 -5
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/context/bootstrap.ts +36 -27
- package/src/domains/context/project-metadata.ts +19 -63
- package/src/domains/context/prompt-context.ts +8 -0
- package/src/domains/context/working-set/policies/index.ts +3 -4
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- package/src/domains/dispatch/backoff.ts +2 -1
- package/src/domains/dispatch/budget-envelope.ts +396 -0
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
- package/src/domains/dispatch/contract.ts +36 -0
- package/src/domains/dispatch/delegation-plan.ts +167 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +3 -1
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +339 -36
- package/src/domains/dispatch/fleet-gate.ts +14 -0
- package/src/domains/dispatch/fleet-plan.ts +63 -3
- package/src/domains/dispatch/fleet-run.ts +737 -0
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +38 -0
- package/src/domains/dispatch/intent.ts +159 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +12 -4
- package/src/domains/dispatch/state.ts +37 -3
- package/src/domains/dispatch/types.ts +61 -9
- package/src/domains/dispatch/validation.ts +80 -6
- package/src/domains/dispatch/worker-spawn.ts +14 -3
- package/src/domains/eval/metrics/evidence.ts +0 -116
- package/src/domains/eval/metrics/invariants.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +1 -10
- package/src/domains/eval/runners/external-command.ts +2 -29
- package/src/domains/eval/schema/suite.ts +0 -7
- package/src/domains/eval/suites/run.ts +1 -7
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/memory/index.ts +22 -0
- package/src/domains/memory/operations.ts +58 -1
- package/src/domains/memory/promotion.ts +281 -0
- package/src/domains/memory/prompt-section.ts +25 -5
- package/src/domains/memory/proposal.ts +51 -7
- package/src/domains/memory/task-bank.ts +3 -2
- package/src/domains/memory/task-memory-handoff.ts +181 -24
- package/src/domains/memory/task-memory-policy.ts +3 -1
- package/src/domains/memory/types.ts +37 -0
- package/src/domains/memory/validate.ts +178 -0
- package/src/domains/middleware/index.ts +15 -0
- package/src/domains/middleware/memory-intervention.ts +35 -25
- package/src/domains/middleware/runtime.ts +6 -0
- package/src/domains/middleware/skills-reminder.ts +19 -4
- package/src/domains/middleware/stalled-turn.ts +43 -1
- package/src/domains/middleware/types.ts +10 -0
- package/src/domains/middleware/watchdog.ts +281 -0
- package/src/domains/observability/contract.ts +9 -2
- package/src/domains/observability/cost.ts +31 -4
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/observability/index.ts +10 -0
- package/src/domains/observability/out-of-turn-usage.ts +223 -0
- package/src/domains/providers/index.ts +3 -0
- package/src/domains/providers/model-discovery.ts +9 -0
- package/src/domains/providers/runtime-resolution.ts +38 -1
- package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
- package/src/domains/providers/types/context-window-slots.ts +18 -0
- package/src/domains/providers/types/runtime-descriptor.ts +3 -1
- package/src/domains/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/safety/call-target.ts +211 -14
- package/src/domains/safety/decision-presentation.ts +268 -0
- package/src/domains/safety/redaction.ts +73 -0
- package/src/domains/session/context-ledger.ts +10 -1
- package/src/domains/session/decision-board.ts +4 -0
- package/src/domains/session/entries.ts +3 -0
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/session/history.ts +68 -19
- package/src/domains/session/usage.ts +24 -7
- package/src/domains/share/archive.ts +67 -2
- package/src/engine/acp/event-mapper.ts +7 -0
- package/src/engine/acp/server.ts +29 -2
- package/src/engine/apis/lmstudio.ts +25 -4
- package/src/engine/apis/openai-completions.ts +147 -22
- package/src/engine/claude/sdk-runtime.ts +8 -2
- package/src/engine/claude/tool-safety.ts +13 -0
- package/src/engine/loop-guard.ts +27 -3
- package/src/engine/worker-events.ts +4 -3
- package/src/engine/worker-runtime.ts +59 -54
- package/src/entry/orchestrator.ts +55 -1
- package/src/interactive/bus-notices.ts +26 -0
- package/src/interactive/chat-loop-messages.ts +22 -0
- package/src/interactive/chat-loop.ts +248 -1
- package/src/interactive/chat-renderer.ts +41 -3
- package/src/interactive/clio-editor.ts +44 -7
- package/src/interactive/context-overlay.ts +43 -5
- package/src/interactive/cost-overlay.ts +70 -11
- package/src/interactive/council-dispatch.ts +30 -0
- package/src/interactive/council-grid.ts +213 -0
- package/src/interactive/council.ts +99 -0
- package/src/interactive/dispatch-board.ts +471 -50
- package/src/interactive/fleet-run-preview.ts +307 -0
- package/src/interactive/footer/notifications.ts +219 -0
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/handoff-round.ts +56 -0
- package/src/interactive/interactive-application.ts +49 -2
- package/src/interactive/interactive-event-projection.ts +9 -1
- package/src/interactive/interactive-input-runtime.ts +11 -1
- package/src/interactive/interactive-presentation.ts +11 -1
- package/src/interactive/interactive-slash-runtime.ts +52 -2
- package/src/interactive/interactive-subscriptions.ts +14 -2
- package/src/interactive/memory-overlay.ts +89 -4
- package/src/interactive/oracle.ts +179 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
- package/src/interactive/overlay-frame.ts +5 -2
- package/src/interactive/overlay-general-openers.ts +230 -2
- package/src/interactive/overlay-key-routing.ts +58 -2
- package/src/interactive/overlay-lifecycle.ts +52 -5
- package/src/interactive/overlay-permission-lifecycle.ts +33 -8
- package/src/interactive/overlay-resource-openers.ts +11 -3
- package/src/interactive/overlay-session-lifecycle.ts +234 -2
- package/src/interactive/overlay-transitions.ts +11 -0
- package/src/interactive/overlays/ask-user.ts +74 -30
- package/src/interactive/overlays/decisions.ts +3 -1
- package/src/interactive/overlays/fleet-run-approval.ts +208 -0
- package/src/interactive/overlays/handoff-review.ts +185 -0
- package/src/interactive/overlays/library-install-confirm.ts +151 -0
- package/src/interactive/overlays/list-overlay.ts +168 -2
- package/src/interactive/overlays/settings.ts +101 -4
- package/src/interactive/overlays/side-question.ts +139 -0
- package/src/interactive/overlays/skills-hub.ts +401 -15
- package/src/interactive/permission-hint.ts +35 -0
- package/src/interactive/permission-overlay.ts +95 -45
- package/src/interactive/renderers/tool-execution.ts +19 -49
- package/src/interactive/session-last-turn.ts +8 -1
- package/src/interactive/session-usage-reseed.ts +36 -10
- package/src/interactive/side-question.ts +171 -0
- package/src/interactive/slash-commands.ts +434 -7
- package/src/interactive/slash-spec.ts +19 -6
- package/src/interactive/status/summary.ts +5 -0
- package/src/interactive/status/types.ts +5 -0
- package/src/interactive/terminal-lease.ts +1 -0
- package/src/interactive/theme/tokens.ts +30 -0
- package/src/interactive/turn-context.ts +96 -23
- package/src/interactive/turn-middleware.ts +16 -1
- package/src/interactive/turn-runtime.ts +37 -8
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/watchdog-run.ts +75 -0
- package/src/interactive/worker-progress.ts +440 -0
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +58 -110
- package/src/tools/agent-tools.ts +28 -3
- package/src/tools/ask-user.ts +21 -1
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/context/index.ts +2 -2
- package/src/tools/dispatch-admission.ts +242 -8
- package/src/tools/dispatch-arguments.ts +65 -1
- package/src/tools/dispatch-event-text.ts +19 -0
- package/src/tools/dispatch-plan.ts +136 -6
- package/src/tools/dispatch-runner.ts +319 -13
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +96 -3
- package/src/tools/monitor.ts +31 -0
- package/src/tools/profiles.ts +18 -4
- package/src/tools/registry.ts +15 -5
- package/src/tools/result-disposition.ts +156 -0
- package/src/tools/result-shaping.ts +59 -1
- package/src/tools/task-worktree.ts +238 -0
- package/src/tools/verify/authoring.ts +116 -55
- package/src/tools/verify/scripts.ts +62 -0
- package/src/tools/worker-evidence.ts +21 -1
- package/src/worker/spec-contract.ts +44 -3
- package/dist/chunk-EFADSJET.js +0 -18
- package/dist/chunk-HC4CLZ2Y.js +0 -68
- package/dist/memory-4ALKDJ4Q.js +0 -246
- package/src/domains/eval/metrics/chaos-stream.ts +0 -93
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TargetStatus } from "./contract.js";
|
|
2
2
|
import { listKnownModelsForRuntime } from "./support.js";
|
|
3
|
+
import type { ContextWindowSlots } from "./types/context-window-slots.js";
|
|
3
4
|
|
|
4
5
|
export type ProviderModelSource = "configured" | "live" | "catalog" | "default";
|
|
5
6
|
|
|
@@ -45,6 +46,14 @@ export function loadedContextWindowForModel(
|
|
|
45
46
|
return typeof reported === "number" && Number.isFinite(reported) && reported > 0 ? reported : null;
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
/** How the server splits its KV budget for this model, when the probe saw it split. */
|
|
50
|
+
export function contextSlotsForModel(
|
|
51
|
+
status: DiscoveryStatus | null | undefined,
|
|
52
|
+
modelId: string,
|
|
53
|
+
): ContextWindowSlots | null {
|
|
54
|
+
return status?.discoveredModelStates?.[modelId]?.contextSlots ?? null;
|
|
55
|
+
}
|
|
56
|
+
|
|
48
57
|
/**
|
|
49
58
|
* Residency as one view, so the planner and the "not resident" notice cannot
|
|
50
59
|
* disagree about the same model. A reported loaded window settles it whatever
|
|
@@ -5,7 +5,7 @@ import { getCatalogModelForRuntime, resolveCostProvenance } from "./catalog.js";
|
|
|
5
5
|
import type { ProvidersContract, TargetStatus } from "./contract.js";
|
|
6
6
|
import { isDispatchEligibleRuntime, isOrchestratorEligibleRuntime, isTargetEligibleRuntime } from "./eligibility.js";
|
|
7
7
|
import { probeCapabilitiesForModel, resolveModelCapabilities } from "./model-capabilities.js";
|
|
8
|
-
import { hasLiveModelCatalog, loadedContextWindowForModel } from "./model-discovery.js";
|
|
8
|
+
import { contextSlotsForModel, hasLiveModelCatalog, loadedContextWindowForModel } from "./model-discovery.js";
|
|
9
9
|
import {
|
|
10
10
|
type ReasoningClass,
|
|
11
11
|
type ResolvedModelRuntimeCapabilities,
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
resolveTargetRuntimeCapabilities,
|
|
15
15
|
} from "./model-runtime-capabilities.js";
|
|
16
16
|
import type { CapabilityFlags, ThinkingLevel } from "./types/capability-flags.js";
|
|
17
|
+
import type { ContextWindowSlots } from "./types/context-window-slots.js";
|
|
17
18
|
import type { CostProvenance } from "./types/cost-provenance.js";
|
|
18
19
|
import type { KnowledgeBase } from "./types/knowledge-base.js";
|
|
19
20
|
import type {
|
|
@@ -52,6 +53,12 @@ export interface ContextWindowDetails {
|
|
|
52
53
|
effectiveContextWindow: number;
|
|
53
54
|
/** Where `effectiveContextWindow` came from. */
|
|
54
55
|
contextWindowSource: ContextWindowSource;
|
|
56
|
+
/**
|
|
57
|
+
* Present when the probed window is a per-request share of the server's
|
|
58
|
+
* KV budget (llama.cpp `--ctx-size` over `--parallel` slots), so the
|
|
59
|
+
* operator surfaces can render `196,608 (786,432 / 4 slots)`.
|
|
60
|
+
*/
|
|
61
|
+
contextWindowSlots: ContextWindowSlots | null;
|
|
55
62
|
/** The window is below what this kind of work wants. An actionable degradation. */
|
|
56
63
|
warning: string | null;
|
|
57
64
|
/** The window is a placeholder rather than something the target reported. */
|
|
@@ -406,6 +413,8 @@ export function resolveRuntimeTarget(
|
|
|
406
413
|
providers.knowledgeBase,
|
|
407
414
|
probedContextWindow,
|
|
408
415
|
loadedContextWindow,
|
|
416
|
+
undefined,
|
|
417
|
+
contextSlotsForModel(status, wireModelId),
|
|
409
418
|
);
|
|
410
419
|
capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
|
|
411
420
|
if (contextWindowDetails.warning) {
|
|
@@ -513,6 +522,7 @@ export function refineRuntimeTargetWithModelHints(
|
|
|
513
522
|
// hand the planner the declared window back on the first refinement.
|
|
514
523
|
target.contextWindowDetails.loadedContextWindow,
|
|
515
524
|
modelHintContextWindow,
|
|
525
|
+
target.contextWindowDetails.contextWindowSlots,
|
|
516
526
|
);
|
|
517
527
|
capabilities.contextWindow = contextWindowDetails.effectiveContextWindow;
|
|
518
528
|
|
|
@@ -582,6 +592,21 @@ export function runtimeResolutionWarnings(diagnostics: ReadonlyArray<RuntimeReso
|
|
|
582
592
|
return diagnostics.filter((entry) => entry.severity === "warning").map((entry) => entry.message);
|
|
583
593
|
}
|
|
584
594
|
|
|
595
|
+
/**
|
|
596
|
+
* The warnings a surface that prints its own thinking-clamp line should
|
|
597
|
+
* announce. `thinking-coerced` and `thinking-<kind>` are the two halves of
|
|
598
|
+
* that one line, so when the resolved thinking carries a notice they are
|
|
599
|
+
* dropped here: an always-on model printed three lines saying one thing
|
|
600
|
+
* (issue #191). With no notice, a bare coercion is still worth a line.
|
|
601
|
+
*/
|
|
602
|
+
export function runtimeResolutionWarningsBesideThinkingNotice(
|
|
603
|
+
diagnostics: ReadonlyArray<RuntimeResolutionDiagnostic>,
|
|
604
|
+
thinkingNotice: string,
|
|
605
|
+
): string[] {
|
|
606
|
+
if (thinkingNotice.trim().length === 0) return runtimeResolutionWarnings(diagnostics);
|
|
607
|
+
return runtimeResolutionWarnings(diagnostics.filter((entry) => !entry.code.startsWith("thinking-")));
|
|
608
|
+
}
|
|
609
|
+
|
|
585
610
|
/**
|
|
586
611
|
* Minimum context Clio is built for, applied to every tier rather than only to
|
|
587
612
|
* local-native. A hosted target that reports less than this is as unable to
|
|
@@ -623,6 +648,7 @@ export function resolveContextWindowDetails(
|
|
|
623
648
|
probedContextWindow: number | null,
|
|
624
649
|
loadedContextWindow: number | null = null,
|
|
625
650
|
modelHintContextWindow?: number,
|
|
651
|
+
probedContextSlots: ContextWindowSlots | null = null,
|
|
626
652
|
): ContextWindowDetails {
|
|
627
653
|
const catalogModel = getCatalogModelForRuntime(runtime.id, wireModelId);
|
|
628
654
|
const kbHit = knowledgeBase?.lookup(wireModelId) ?? null;
|
|
@@ -707,6 +733,16 @@ export function resolveContextWindowDetails(
|
|
|
707
733
|
`Run 'clio-coder targets --probe' to read the real one.`;
|
|
708
734
|
}
|
|
709
735
|
|
|
736
|
+
// The split explains the probed number and nothing else: once an override
|
|
737
|
+
// or a loaded window decides the figure, `786,432 / 4 slots` no longer
|
|
738
|
+
// describes it.
|
|
739
|
+
const contextWindowSlots =
|
|
740
|
+
source === "probe" &&
|
|
741
|
+
probedContextSlots !== null &&
|
|
742
|
+
Math.floor(probedContextSlots.totalContextSize / probedContextSlots.slots) === effective
|
|
743
|
+
? probedContextSlots
|
|
744
|
+
: null;
|
|
745
|
+
|
|
710
746
|
return {
|
|
711
747
|
declaredContextWindow,
|
|
712
748
|
probedContextWindow,
|
|
@@ -714,6 +750,7 @@ export function resolveContextWindowDetails(
|
|
|
714
750
|
desiredContextWindow: desired,
|
|
715
751
|
effectiveContextWindow: effective,
|
|
716
752
|
contextWindowSource: source,
|
|
753
|
+
contextWindowSlots,
|
|
717
754
|
warning,
|
|
718
755
|
provenanceNotice,
|
|
719
756
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { probeHttp, probeJson } from "../../probe/http.js";
|
|
2
2
|
import type { CapabilityFlags } from "../../types/capability-flags.js";
|
|
3
|
+
import { type ContextWindowSlots, formatContextWindowSlots } from "../../types/context-window-slots.js";
|
|
3
4
|
import type { ProbeContext, ProbeModelStatus, ProbeResult } from "../../types/runtime-descriptor.js";
|
|
4
5
|
import type { TargetDescriptor } from "../../types/target-descriptor.js";
|
|
5
6
|
|
|
@@ -88,7 +89,15 @@ export async function probeOpenAIModelCatalog(
|
|
|
88
89
|
// A reported loaded context is itself the residency answer: nothing
|
|
89
90
|
// serves a window for a model it has not loaded.
|
|
90
91
|
(loadedContext !== undefined ? { state: "loaded" as const } : undefined);
|
|
91
|
-
|
|
92
|
+
// The slot split rides on the load-state record because it is the same
|
|
93
|
+
// kind of fact: how this server is serving this model. A row with no
|
|
94
|
+
// recognized state still gets one, as `unknown`, so the split is kept
|
|
95
|
+
// without claiming residency the server did not report.
|
|
96
|
+
const contextSlots = contextSlotsFromEntry(row) ?? (detailRow ? contextSlotsFromEntry(detailRow) : undefined);
|
|
97
|
+
const withSlots = contextSlots ? { ...(state ?? { state: "unknown" as const }), contextSlots } : state;
|
|
98
|
+
if (withSlots) {
|
|
99
|
+
modelStates[row.id] = loadedContext === undefined ? withSlots : { ...withSlots, contextLength: loadedContext };
|
|
100
|
+
}
|
|
92
101
|
}
|
|
93
102
|
return { models, modelCapabilities, modelStates };
|
|
94
103
|
}
|
|
@@ -159,7 +168,15 @@ function normalizeModelState(raw: string | undefined): ProbeModelStatus["state"]
|
|
|
159
168
|
if (!value) return undefined;
|
|
160
169
|
if (value === "loaded" || value === "ready" || value === "running" || value === "active") return "loaded";
|
|
161
170
|
if (value === "loading" || value === "pending" || value === "queued" || value === "starting") return "loading";
|
|
162
|
-
if (
|
|
171
|
+
if (
|
|
172
|
+
value === "unloaded" ||
|
|
173
|
+
value === "not-loaded" ||
|
|
174
|
+
value === "idle" ||
|
|
175
|
+
value === "sleeping" ||
|
|
176
|
+
value === "stopped"
|
|
177
|
+
) {
|
|
178
|
+
return "unloaded";
|
|
179
|
+
}
|
|
163
180
|
if (value === "failed" || value === "error" || value === "errored") return "failed";
|
|
164
181
|
if (value === "unknown") return "unknown";
|
|
165
182
|
return undefined;
|
|
@@ -203,12 +220,16 @@ function statusArgsFromEntry(row: Record<string, unknown>): string[] {
|
|
|
203
220
|
return argsFromStatus(status);
|
|
204
221
|
}
|
|
205
222
|
|
|
223
|
+
function contextSlotsFromEntry(row: Record<string, unknown>): ContextWindowSlots | undefined {
|
|
224
|
+
return llamaCppRequestContextWindow(parseLlamaCppServerFlags(statusArgsFromEntry(row)))?.slots;
|
|
225
|
+
}
|
|
226
|
+
|
|
206
227
|
function capabilitiesFromOpenAIModelEntry(row: Record<string, unknown>): Partial<CapabilityFlags> {
|
|
207
228
|
const caps: Partial<CapabilityFlags> = {};
|
|
208
229
|
const meta = nestedRecord(row, "meta");
|
|
209
230
|
const flags = parseLlamaCppServerFlags(statusArgsFromEntry(row));
|
|
210
231
|
const contextWindow =
|
|
211
|
-
|
|
232
|
+
llamaCppRequestContextWindow(flags)?.contextWindow ??
|
|
212
233
|
firstPositiveNumber(row, [
|
|
213
234
|
// What is actually loaded outranks what the model could support: a
|
|
214
235
|
// model served at 8k out of a possible 262k has an 8k window today,
|
|
@@ -310,10 +331,43 @@ export interface LlamaCppServerFlags {
|
|
|
310
331
|
topK?: number;
|
|
311
332
|
nGpuLayers?: number;
|
|
312
333
|
parallel?: number;
|
|
334
|
+
/** `--kv-unified` / `-kvu` true, `--no-kv-unified` false, absent when neither was given. */
|
|
335
|
+
kvUnified?: boolean;
|
|
313
336
|
mmproj?: string;
|
|
314
337
|
chatTemplateKwargs?: string;
|
|
315
338
|
}
|
|
316
339
|
|
|
340
|
+
export interface LlamaCppRequestContextWindow {
|
|
341
|
+
/** What one request can use. */
|
|
342
|
+
contextWindow: number;
|
|
343
|
+
/** Present when `contextWindow` is a quotient of the server's total. */
|
|
344
|
+
slots?: ContextWindowSlots;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* The window one request actually gets from a llama.cpp server.
|
|
349
|
+
*
|
|
350
|
+
* `--ctx-size` is the total KV budget of the process. Without `--kv-unified`
|
|
351
|
+
* the server splits it evenly across `--parallel` slots, so a router started
|
|
352
|
+
* with `--ctx-size 786432 --parallel 4 --no-kv-unified` admits 196,608 tokens
|
|
353
|
+
* per request while reporting 786,432 as its context size. Reading the total
|
|
354
|
+
* as the window armed autocompact at a number the server would never admit
|
|
355
|
+
* and walked a long session into a hard context failure with the meter at
|
|
356
|
+
* 25% (issue #187). With `--kv-unified` every slot shares one sequence and
|
|
357
|
+
* the total is the window.
|
|
358
|
+
*/
|
|
359
|
+
export function llamaCppRequestContextWindow(flags: LlamaCppServerFlags): LlamaCppRequestContextWindow | undefined {
|
|
360
|
+
const total = positiveNumber(flags.contextSize);
|
|
361
|
+
if (total === undefined) return undefined;
|
|
362
|
+
const parallel = positiveNumber(flags.parallel);
|
|
363
|
+
if (parallel === undefined || parallel <= 1 || flags.kvUnified === true) return { contextWindow: Math.floor(total) };
|
|
364
|
+
const slots = Math.floor(parallel);
|
|
365
|
+
return {
|
|
366
|
+
contextWindow: Math.floor(total / slots),
|
|
367
|
+
slots: { totalContextSize: Math.floor(total), slots },
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
|
|
317
371
|
export interface LlamaCppStatusEnrichment {
|
|
318
372
|
discoveredCapabilities?: Partial<CapabilityFlags>;
|
|
319
373
|
modelId?: string;
|
|
@@ -329,22 +383,37 @@ function argsFromStatus(status: unknown): string[] {
|
|
|
329
383
|
return [];
|
|
330
384
|
}
|
|
331
385
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
const value = args[index + 1];
|
|
336
|
-
return value && !value.startsWith("--") ? value : undefined;
|
|
386
|
+
/** `-1` is a value (`--reasoning-budget -1`); `-np` and `--jinja` are flags. */
|
|
387
|
+
function looksLikeFlag(token: string): boolean {
|
|
388
|
+
return token.startsWith("-") && Number.isNaN(Number(token));
|
|
337
389
|
}
|
|
338
390
|
|
|
339
|
-
|
|
340
|
-
|
|
391
|
+
/**
|
|
392
|
+
* The value after the first of `flags` present, or undefined. A token that
|
|
393
|
+
* reads as the next flag is not a value, which is how boolean flags read as
|
|
394
|
+
* present-without-value. Short spellings (`-c`, `-np`) come after the long
|
|
395
|
+
* one so the long form wins when both are given.
|
|
396
|
+
*/
|
|
397
|
+
function valueAfter(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): string | undefined {
|
|
398
|
+
for (const flag of flags) {
|
|
399
|
+
const index = args.indexOf(flag);
|
|
400
|
+
if (index < 0) continue;
|
|
401
|
+
const value = args[index + 1];
|
|
402
|
+
return value && !looksLikeFlag(value) ? value : undefined;
|
|
403
|
+
}
|
|
404
|
+
return undefined;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
function numberFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): number | undefined {
|
|
408
|
+
const value = valueAfter(args, ...flags);
|
|
341
409
|
if (value === undefined) return undefined;
|
|
342
410
|
const parsed = Number(value);
|
|
343
411
|
return Number.isFinite(parsed) ? parsed : undefined;
|
|
344
412
|
}
|
|
345
413
|
|
|
346
|
-
function booleanFlag(args: ReadonlyArray<string>,
|
|
347
|
-
|
|
414
|
+
function booleanFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string>): boolean | undefined {
|
|
415
|
+
const flag = flags.find((candidate) => args.includes(candidate));
|
|
416
|
+
if (flag === undefined) return undefined;
|
|
348
417
|
const value = valueAfter(args, flag);
|
|
349
418
|
if (value === undefined) return true;
|
|
350
419
|
const normalized = value.toLowerCase();
|
|
@@ -353,9 +422,9 @@ function booleanFlag(args: ReadonlyArray<string>, flag: string): boolean | undef
|
|
|
353
422
|
return undefined;
|
|
354
423
|
}
|
|
355
424
|
|
|
356
|
-
function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
|
|
425
|
+
export function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
|
|
357
426
|
const flags: LlamaCppServerFlags = {};
|
|
358
|
-
const ctxSize = numberFlag(args, "--ctx-size");
|
|
427
|
+
const ctxSize = numberFlag(args, "--ctx-size", "-c");
|
|
359
428
|
if (ctxSize !== undefined) flags.contextSize = ctxSize;
|
|
360
429
|
const maxTokens = numberFlag(args, "--n-predict");
|
|
361
430
|
if (maxTokens !== undefined) flags.maxTokens = maxTokens;
|
|
@@ -375,8 +444,14 @@ function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFl
|
|
|
375
444
|
if (topK !== undefined) flags.topK = topK;
|
|
376
445
|
const nGpuLayers = numberFlag(args, "--n-gpu-layers");
|
|
377
446
|
if (nGpuLayers !== undefined) flags.nGpuLayers = nGpuLayers;
|
|
378
|
-
const parallel = numberFlag(args, "--parallel");
|
|
447
|
+
const parallel = numberFlag(args, "--parallel", "-np");
|
|
379
448
|
if (parallel !== undefined) flags.parallel = parallel;
|
|
449
|
+
// The negative spelling is its own flag, and the last one given wins, which
|
|
450
|
+
// is how llama.cpp itself resolves a repeated boolean option.
|
|
451
|
+
const kvUnifiedAt = Math.max(args.lastIndexOf("--kv-unified"), args.lastIndexOf("-kvu"));
|
|
452
|
+
const noKvUnifiedAt = args.lastIndexOf("--no-kv-unified");
|
|
453
|
+
if (noKvUnifiedAt > kvUnifiedAt) flags.kvUnified = false;
|
|
454
|
+
else if (kvUnifiedAt >= 0) flags.kvUnified = booleanFlag(args, "--kv-unified", "-kvu") ?? true;
|
|
380
455
|
const cacheTypeK = valueAfter(args, "--cache-type-k");
|
|
381
456
|
if (cacheTypeK) flags.cacheTypeK = cacheTypeK;
|
|
382
457
|
const cacheTypeV = valueAfter(args, "--cache-type-v");
|
|
@@ -418,7 +493,8 @@ export async function probeLlamaCppModelStatus(
|
|
|
418
493
|
if (args.length === 0) return { notes: statusNotes(selected.id, selected.status) };
|
|
419
494
|
const flags = parseLlamaCppServerFlags(args);
|
|
420
495
|
const caps: Partial<CapabilityFlags> = {};
|
|
421
|
-
|
|
496
|
+
const window = llamaCppRequestContextWindow(flags);
|
|
497
|
+
if (window !== undefined) caps.contextWindow = window.contextWindow;
|
|
422
498
|
if (flags.maxTokens !== undefined && flags.maxTokens > 0) caps.maxTokens = flags.maxTokens;
|
|
423
499
|
if (flags.reasoning === true || flags.reasoningBudget !== undefined) caps.reasoning = true;
|
|
424
500
|
if (flags.mmproj) caps.vision = true;
|
|
@@ -426,6 +502,11 @@ export async function probeLlamaCppModelStatus(
|
|
|
426
502
|
const enrichment: LlamaCppStatusEnrichment = { modelId: selected.id, serverFlags: flags };
|
|
427
503
|
if (Object.keys(caps).length > 0) enrichment.discoveredCapabilities = caps;
|
|
428
504
|
const notes = statusNotes(selected.id, selected.status);
|
|
505
|
+
if (window?.slots) {
|
|
506
|
+
notes.push(
|
|
507
|
+
`${selected.id} context window ${formatContextWindowSlots(window.contextWindow, window.slots)}: --ctx-size is split across --parallel slots without --kv-unified`,
|
|
508
|
+
);
|
|
509
|
+
}
|
|
429
510
|
if (notes.length > 0) enrichment.notes = notes;
|
|
430
511
|
return enrichment;
|
|
431
512
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A server that shares one KV budget across request slots serves each request
|
|
3
|
+
* a quotient of it. llama.cpp splits `--ctx-size` evenly across `--parallel`
|
|
4
|
+
* slots unless `--kv-unified`, so a router started with `--ctx-size 786432
|
|
5
|
+
* --parallel 4 --no-kv-unified` admits 196,608 tokens per request. The total
|
|
6
|
+
* and the slot count are kept beside the quotient so the operator surfaces can
|
|
7
|
+
* say where the number came from.
|
|
8
|
+
*/
|
|
9
|
+
export interface ContextWindowSlots {
|
|
10
|
+
totalContextSize: number;
|
|
11
|
+
slots: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** `196,608 (786,432 / 4 slots)`: the per-request window with its derivation. */
|
|
15
|
+
export function formatContextWindowSlots(contextWindow: number, slots: ContextWindowSlots): string {
|
|
16
|
+
const format = (n: number): string => Math.round(n).toLocaleString("en-US");
|
|
17
|
+
return `${format(contextWindow)} (${format(slots.totalContextSize)} / ${slots.slots} slots)`;
|
|
18
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Api, Model } from "../../../engine/types.js";
|
|
2
|
-
|
|
3
2
|
import type { CapabilityFlags } from "./capability-flags.js";
|
|
3
|
+
import type { ContextWindowSlots } from "./context-window-slots.js";
|
|
4
4
|
import type { CompleteOptions, CompletionChunk, EmbedResult, InfillOptions, RerankResult } from "./inference.js";
|
|
5
5
|
import type { KnowledgeBaseHit } from "./knowledge-base.js";
|
|
6
6
|
import type { TargetDescriptor } from "./target-descriptor.js";
|
|
@@ -61,6 +61,8 @@ export type ProbeModelLoadState = "loaded" | "loading" | "unloaded" | "failed" |
|
|
|
61
61
|
export interface ProbeModelStatus {
|
|
62
62
|
state: ProbeModelLoadState;
|
|
63
63
|
detail?: string;
|
|
64
|
+
/** The per-request window is `totalContextSize / slots`; absent when the server does not split. */
|
|
65
|
+
contextSlots?: ContextWindowSlots;
|
|
64
66
|
/**
|
|
65
67
|
* Context the runtime has this model loaded at, when it reports one. LM
|
|
66
68
|
* Studio serves a loaded instance at whatever window it was opened with,
|
|
@@ -18,6 +18,24 @@ export function createResourcesDomainModule(options: ResourceLoaderOptions = {})
|
|
|
18
18
|
export type { ResourceDiagnostic, ResourceScope, ResourceSourceInfo } from "./collision.js";
|
|
19
19
|
export { resolveResourceCollisions } from "./collision.js";
|
|
20
20
|
export type { ResourceList, ResourcesContract } from "./contract.js";
|
|
21
|
+
export {
|
|
22
|
+
classifyLibraryRequirements,
|
|
23
|
+
confirmLibraryRemote,
|
|
24
|
+
discoverLibrary,
|
|
25
|
+
installLibraryPlan,
|
|
26
|
+
type LibraryCommandRunner,
|
|
27
|
+
type LibraryDiscoveryResult,
|
|
28
|
+
type LibraryEntry,
|
|
29
|
+
type LibraryInstallPlan,
|
|
30
|
+
type LibraryRequirementStatus,
|
|
31
|
+
libraryEntryInstalled,
|
|
32
|
+
libraryEntryPin,
|
|
33
|
+
libraryEntryRef,
|
|
34
|
+
libraryInstallPath,
|
|
35
|
+
planLibraryInstall,
|
|
36
|
+
resolveLibraryRequirements,
|
|
37
|
+
syncLibrary,
|
|
38
|
+
} from "./library.js";
|
|
21
39
|
export { createResourcesLoader, type ResourceLoaderOptions } from "./loader.js";
|
|
22
40
|
export { ResourcesManifest } from "./manifest.js";
|
|
23
41
|
export {
|
|
@@ -61,6 +79,8 @@ export {
|
|
|
61
79
|
discoverMarketplaceSkills,
|
|
62
80
|
getMarketplaceSkills,
|
|
63
81
|
installSkill,
|
|
82
|
+
type LibraryEntryKind,
|
|
83
|
+
type LibraryRequirementRef,
|
|
64
84
|
MARKETPLACE_UNCONFIGURED,
|
|
65
85
|
type MarketplaceDiscoveryResult,
|
|
66
86
|
type MarketplaceSkill,
|