loki-mode 11.3.0 → 11.3.2
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/README.md +68 -650
- package/SKILL.md +5 -5
- package/VERSION +1 -1
- package/autonomy/completion-council.sh +2 -2
- package/autonomy/context-tracker.py +4 -4
- package/autonomy/council-v2.sh +1 -1
- package/autonomy/grill.sh +1 -1
- package/autonomy/lib/done-recognition.sh +1 -1
- package/autonomy/lib/efficiency_cost.py +8 -0
- package/autonomy/lib/engine10-push.sh +22 -8
- package/autonomy/lib/prd-enrich.sh +1 -1
- package/autonomy/lib/voter-agents.sh +1 -1
- package/autonomy/loki +161 -105
- package/autonomy/run.sh +30 -18
- package/autonomy/sandbox.sh +1 -1
- package/autonomy/tui.sh +6 -5
- package/autonomy/verify.sh +1 -1
- package/bin/loki +195 -59
- package/completions/_loki +8 -0
- package/completions/loki.bash +3 -3
- package/dashboard/__init__.py +1 -1
- package/dashboard/server.py +47 -45
- package/docs/AGENT-CHANGE-RECEIPT.md +2 -2
- package/docs/ARCHITECTURE.md +337 -0
- package/docs/BRANDING.md +124 -0
- package/docs/CLI-REFERENCE.md +11 -1
- package/docs/COMPONENTS.md +447 -0
- package/docs/DEPLOYMENT.md +9 -9
- package/docs/DOCKER.md +469 -0
- package/docs/INSTALLATION.md +67 -1045
- package/docs/KNOWN-ISSUES.md +11 -35
- package/docs/OTEL-COLLECTOR.md +24 -0
- package/docs/ROUTING-EVIDENCE.md +32 -0
- package/docs/TESTING.md +161 -0
- package/docs/air-gapped.md +1 -2
- package/docs/alternative-installations.md +14 -24
- package/docs/architecture/DECISIONS.md +333 -0
- package/docs/audit-logging.md +7 -7
- package/docs/authentication.md +3 -3
- package/docs/authorization.md +1 -1
- package/docs/certification/04-production-deployment/lab.md +6 -6
- package/docs/certification/04-production-deployment/lesson.md +4 -4
- package/docs/certification/README.md +1 -1
- package/docs/control-plane-container.md +2 -2
- package/docs/dev/real-run.md +34 -0
- package/docs/dev/release-checklist.md +2 -2
- package/docs/environment-variables.md +1 -0
- package/docs/exit-codes.md +3 -3
- package/docs/git-workflow.md +3 -3
- package/docs/metrics.md +37 -55
- package/docs/network-security.md +1 -1
- package/docs/siem-integration.md +5 -5
- package/docs/spec-first-intent.md +28 -0
- package/docs/v10/CLI-MODERN.md +7 -3
- package/docs/v10/DECISIONS.md +59 -0
- package/docs/v10/DEPS.md +22 -22
- package/docs/v10/ENGINE.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +212 -1
- package/docs/v10/FOUNDER-QUEUE.md +1 -0
- package/docs/v10/GUARDS.md +31 -0
- package/docs/v10/GUIDE.md +7 -5
- package/docs/v10/LEGACY-REMOVAL.md +4 -6
- package/docs/v10/METRICS.md +14 -2
- package/docs/v10/MODERNIZE.md +1 -1
- package/docs/v10/OPERATING-MODEL.md +4 -3
- package/docs/v10/PROGRESS.md +35 -0
- package/docs/v11/COST-HALF.md +352 -0
- package/docs/v11/INTOTO-AGENT-CHANGE-PREDICATE.md +77 -0
- package/docs/v11/MARKET-SLICES.md +315 -0
- package/docs/v11/MCP-2026-07-28.md +55 -0
- package/docs/v11/REGISTRIES.md +730 -0
- package/docs/v11/VERIFY-PR-SANDBOX.md +41 -0
- package/loki-ts/data/model-pricing.json +52 -24
- package/loki-ts/dist/loki.js +1185 -945
- package/mcp/__init__.py +1 -1
- package/mcp/v10_tools.py +29 -0
- package/package.json +9 -11
- package/packages/control-plane/dist/ask-tools-server.js +8 -2
- package/packages/control-plane/dist/server.js +15832 -12361
- package/packages/control-plane/drizzle/0006_token_sessions.sql +1 -0
- package/packages/control-plane/drizzle/meta/0006_snapshot.json +807 -0
- package/packages/control-plane/drizzle/meta/_journal.json +7 -0
- package/packages/control-plane/src/db/schema.ts +1 -0
- package/packages/control-plane/src/server/routes/cost.ts +4 -3
- package/packages/control-plane/src/server/runs.ts +3 -3
- package/packages/control-plane/ui/dist/assets/index-DbLzr87u.js +190 -0
- package/packages/control-plane/ui/dist/index.html +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/providers/opencode.sh +2 -3
- package/src/observability/genai-spans.js +104 -0
- package/src/observability/otel-bridge.js +49 -1
- package/src/observability/otel.js +2 -2
- package/src/protocols/mcp-client.js +6 -2
- package/src/protocols/mcp-server.js +191 -6
- package/src/protocols/transport/sse.js +23 -2
- package/tools/audit-docs.py +1 -1
- package/web-app/dist/assets/{AdminPage-D_e45uTw.js → AdminPage-DuRQZsF9.js} +1 -1
- package/web-app/dist/assets/{Avatar-T3nIpoaf.js → Avatar-7GtOQvsO.js} +1 -1
- package/web-app/dist/assets/{Badge-BKqb59pP.js → Badge-CYgTnIxj.js} +1 -1
- package/web-app/dist/assets/{Button-DjVlkh8_.js → Button-rYSyIu7X.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-DXJgLGmh.js → CockpitPage-9adANY4o.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BRP_eVc_.js → ComparePage-DEG2oA-R.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-CLjpGLjC.js → ErrorBoundary-CwtvY4xs.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DX-vb4Xy.js → EvidenceReceiptPanel-DTT73pPB.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-214HVHtX.js → GitHubIssuesPanel-CpWZLz2x.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-BEiZKc4t.js → GitHubPRsPanel-H293R7E2.js} +1 -1
- package/web-app/dist/assets/{HomePage-VvMHS5ga.js → HomePage-B11Imp9k.js} +2 -2
- package/web-app/dist/assets/{LoginPage-5WD-v7n3.js → LoginPage-BZBgx5Jr.js} +1 -1
- package/web-app/dist/assets/{MagicPage-DUQT_Jye.js → MagicPage-B27S4_X8.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-lga-z79v.js → MetricsPage-CfbJWNDG.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-CGhBX3G1.js → NotFoundPage-Tp_4zMSm.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-CdzF2GzZ.js → ProjectPage-CM4fgMsV.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DRG64N8s.js → ProjectsPage-DP2Fvsrd.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-5fzW9Frb.js → SettingsPage-C4G9-EAy.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DrTdxO4y.js → ShowcasePage-Dj-n4dwu.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-C9Mqs6Rd.js → SystemSettingsPage-BqMLpuGt.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-CUGPdSWo.js → TeamsPage-mIH8H96m.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-CNraDY0F.js → TemplatesPage-BagW-v4n.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BIu_6Pea.js → TerminalOutput-CTQRHhnK.js} +1 -1
- package/web-app/dist/assets/{activity-Bk-kgqaf.js → activity-DNQiBDDL.js} +1 -1
- package/web-app/dist/assets/{bell-BXmUdmo8.js → bell-Coiwdad1.js} +1 -1
- package/web-app/dist/assets/{bot-CiuzXxUR.js → bot-Cou-rTgR.js} +1 -1
- package/web-app/dist/assets/{check-BEzjXppd.js → check-CsF-XtQp.js} +1 -1
- package/web-app/dist/assets/{chevron-left-AYWCXHf8.js → chevron-left-BJiy55Ht.js} +1 -1
- package/web-app/dist/assets/{circle-alert-BNg2uSRq.js → circle-alert-D6-pQQWq.js} +1 -1
- package/web-app/dist/assets/{clock-DTj0kkGT.js → clock-BOGqwgt9.js} +1 -1
- package/web-app/dist/assets/{cloud-x4nTDBLT.js → cloud-DsxhTtf5.js} +1 -1
- package/web-app/dist/assets/{code-xml-BVh_MLrk.js → code-xml-CxJDHUlE.js} +1 -1
- package/web-app/dist/assets/{database-DdfBaowG.js → database-BJePscl_.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-XuYFmAOY.js → dollar-sign-6qWGAkZo.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-D4cRnmeL.js → file-code-corner-DcOtYeDb.js} +1 -1
- package/web-app/dist/assets/{file-plus-CyoVlHc_.js → file-plus-WuRyLFo0.js} +1 -1
- package/web-app/dist/assets/{globe-Y6IK2RPW.js → globe-r-xCP4DE.js} +1 -1
- package/web-app/dist/assets/{hammer-BKzr9VZI.js → hammer-DTt0SsCB.js} +1 -1
- package/web-app/dist/assets/{index-B20cSx5G.js → index-BkbXyH8y.js} +3 -3
- package/web-app/dist/assets/{layers-DebNOhGS.js → layers-BvZhvSMY.js} +1 -1
- package/web-app/dist/assets/{loader-circle-DyGbrEgd.js → loader-circle-3gosTei9.js} +1 -1
- package/web-app/dist/assets/{lock-BKPpyt20.js → lock-CZZMxP0U.js} +1 -1
- package/web-app/dist/assets/{package-egF5Wi4y.js → package-C5A8CkJr.js} +1 -1
- package/web-app/dist/assets/{plus-OiEgKIc-.js → plus-Btv7tTIF.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-CzKvrONq.js → refresh-cw-DsWLXgs_.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Bu2mII0p.js → rotate-ccw-DOVDjway.js} +1 -1
- package/web-app/dist/assets/{scroll-text-CSkiyax8.js → scroll-text-smySzlrX.js} +1 -1
- package/web-app/dist/assets/{server-DlPthJFw.js → server-b5PHsqAU.js} +1 -1
- package/web-app/dist/assets/{shield-alert-CbpHWQQX.js → shield-alert-BD7FDlh-.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-DgGpZe-Q.js → thumbs-up-CAsFzbyE.js} +1 -1
- package/web-app/dist/assets/{trash-2-BV3GlCB-.js → trash-2-BJ35qHgl.js} +1 -1
- package/web-app/dist/assets/{trending-down-Y4TJtXhD.js → trending-down-Ozrd26cZ.js} +1 -1
- package/web-app/dist/assets/{trending-up-DsDNoHZY.js → trending-up-BhnMcM32.js} +1 -1
- package/web-app/dist/assets/{upload-gkThrc_I.js → upload-JVHfdwoA.js} +1 -1
- package/web-app/dist/assets/{usePolling-jpNSeNAe.js → usePolling-CTzbDV-e.js} +1 -1
- package/web-app/dist/assets/{user-3Zez1WOK.js → user-Bks3-GYv.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/docs/ARCHITECTURE-OVERVIEW.md +0 -209
- package/docs/AUTONOMI-ECOSYSTEM.md +0 -107
- package/docs/COCKPIT-SPEC.md +0 -72
- package/docs/COCKPIT-UX-MANDATE.md +0 -53
- package/docs/COMPETITIVE-ANALYSIS.md +0 -303
- package/docs/COMPETITIVE-NEXT-10.md +0 -316
- package/docs/COMPETITIVE-RALPH-ZEROSHOT-2026-07-08.md +0 -81
- package/docs/DASHBOARD-9.12-EVIDENCE.md +0 -97
- package/docs/DASHBOARD-ARCHITECTURE.md +0 -425
- package/docs/DASHBOARD_V2_CHECKLIST.md +0 -243
- package/docs/DEMOS.md +0 -63
- package/docs/ENTERPRISE-IDENTITY-ROADMAP.md +0 -206
- package/docs/EVIDENCE-RECEIPT-BUILD-APPLICABILITY.md +0 -79
- package/docs/FEAT-PRDREUSE-DOCKER-PLAN.md +0 -144
- package/docs/GATE-FAILURE-TRIAGE.md +0 -254
- package/docs/HANDOFF-2026-08-03.md +0 -439
- package/docs/LOOP-CANDIDATE-PROPOSAL-v1.md +0 -167
- package/docs/LOOP-HARNESS-AUDIT.md +0 -684
- package/docs/MERGE-DEDUP-MAP.md +0 -420
- package/docs/MERGE-ROUTE-MAP.md +0 -139
- package/docs/MODEL-REGISTRY-PLAN.md +0 -155
- package/docs/OUTCOME-FRONTIER.md +0 -536
- package/docs/P2-SPEC-ROBUSTNESS-PLAN.md +0 -192
- package/docs/PLANS-INDEX.md +0 -32
- package/docs/PRD-REUSE-DONE-RECOGNITION-PLAN.md +0 -536
- package/docs/PROMPT-ABLATION-RESULT.md +0 -97
- package/docs/R4-TRUST-TRAJECTORY-DESIGN.md +0 -127
- package/docs/R5-AUTO-WIKI-DESIGN.md +0 -137
- package/docs/R6-ROLLBACK-CHECKPOINT-PLAN.md +0 -107
- package/docs/R7-ZERO-CONFIG-FIRST-RUN-PLAN.md +0 -137
- package/docs/R8-SHAREABLE-TEAM-ASSETS-PLAN.md +0 -129
- package/docs/R9-OPEN-CORE-HOOKS-PLAN.md +0 -113
- package/docs/RARV-C-100X-PLAN.md +0 -286
- package/docs/RARV-C-LOOP-EFFICIENCY-PLAN.md +0 -470
- package/docs/SHAREABLE-PROOF-PLAN.md +0 -194
- package/docs/SONNET5-DEFAULT-PLAN.md +0 -157
- package/docs/SPEED-AND-FIRST-PASS-PLAN.md +0 -281
- package/docs/STALE-STATE-AUDIT.md +0 -174
- package/docs/SYNERGY-TASKS.md +0 -143
- package/docs/TASKLIST-ACCURACY-PLAN.md +0 -355
- package/docs/TOP-100-BACKLOG.md +0 -159
- package/docs/V8-ACCEPTANCE-TRIAGE-2026-07-24.md +0 -114
- package/docs/V8-COMPLEXITY-AUDIT-2026-07-24.md +0 -45
- package/docs/V8-MAJOR-RELEASE-PLAN.md +0 -137
- package/docs/V8-OVERNIGHT-PLAN-2026-07-25.md +0 -82
- package/docs/V8-SDK-RESEARCH-RAW.md +0 -129
- package/docs/WELCOME-OPENER-PLAN.md +0 -106
- package/docs/adoption-baseline-2026-07-31.md +0 -84
- package/docs/architecture/bmad-integration-epic.md +0 -271
- package/docs/architecture/bmad-integration-review.md +0 -86
- package/docs/architecture/bmad-integration-validation.md +0 -249
- package/docs/architecture/bmad-loki-voice-agent-council-analysis.md +0 -61
- package/docs/auto-claude-comparison.md +0 -250
- package/docs/bug-fixes/agent-01-cli-fixes.md +0 -101
- package/docs/bug-fixes/agent-02-purplelab-fixes.md +0 -88
- package/docs/bug-fixes/agent-03-dashboard-fixes.md +0 -119
- package/docs/bug-fixes/agent-04-memory-fixes.md +0 -105
- package/docs/bug-fixes/agent-05-provider-fixes.md +0 -86
- package/docs/bug-fixes/agent-06-integration-fixes.md +0 -101
- package/docs/bug-fixes/agent-07-dash-run-fixes.md +0 -101
- package/docs/bug-fixes/agent-08-docker-fixes.md +0 -164
- package/docs/bug-fixes/agent-09-e2e-build-fixes.md +0 -69
- package/docs/bug-fixes/agent-10-e2e-fullstack-fixes.md +0 -102
- package/docs/bug-fixes/agent-11-e2e-session-fixes.md +0 -70
- package/docs/bug-fixes/agent-12-scenario-fixes.md +0 -120
- package/docs/bug-fixes/agent-13-enterprise-fixes.md +0 -143
- package/docs/bug-fixes/agent-14-uat-newuser-fixes.md +0 -88
- package/docs/bug-fixes/agent-15-uat-poweruser-fixes.md +0 -132
- package/docs/bug-fixes/agent-19-code-review.md +0 -316
- package/docs/bug-fixes/agent-20-architecture-review.md +0 -331
- package/docs/competitive/bolt-new-analysis.md +0 -579
- package/docs/competitive/emergence-others-analysis.md +0 -605
- package/docs/competitive/replit-lovable-analysis.md +0 -622
- package/docs/dashboard-guide.md +0 -487
- package/docs/enterprise/migration.md +0 -265
- package/docs/history/one-run-audit.md +0 -304
- package/docs/plans/FORGE-AUTONOMOUS-QUEUE.md +0 -312
- package/docs/plans/ULTRAPLAN-FORGE-BAAS.md +0 -612
- package/docs/plans/UT2-6-LSP-DIAGNOSTIC-BROADCAST.md +0 -394
- package/docs/prd-purple-lab-ide.md +0 -152
- package/docs/prd-purple-lab-platform-v2.md +0 -223
- package/docs/prd-purple-lab-platform.md +0 -319
- package/docs/retrospectives/v7.5.15-fleet-postmortem.md +0 -325
- package/docs/retrospectives/v7.5.15-honesty-audit.md +0 -136
- package/docs/retrospectives/v7.5.15-llm-failure-modes.md +0 -49
- package/docs/show-hn-post.md +0 -46
- package/docs/test-scenarios/enterprise-scenarios.md +0 -732
- package/docs/thick2thin.md +0 -173
- package/packages/control-plane/ui/dist/assets/index-DcBJXjCJ.js +0 -190
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# One JSON file to update when a provider ships a model
|
|
2
|
-
|
|
3
|
-
Founder ask (2026-08-01): a simple JSON we define at packaging time, so
|
|
4
|
-
updating for new model releases is easy.
|
|
5
|
-
|
|
6
|
-
## The shape
|
|
7
|
-
|
|
8
|
-
`providers/model_registry.json` -- ONE file, flat, no cross-references. To adopt
|
|
9
|
-
a new model you edit one line.
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{
|
|
13
|
-
"registry_version": "2026-08-01.1",
|
|
14
|
-
"_howto": "Edit a value below and ship. Nothing else needs to change.",
|
|
15
|
-
|
|
16
|
-
"tiers": {
|
|
17
|
-
"frontier": {
|
|
18
|
-
"anthropic": "opus",
|
|
19
|
-
"openai": "gpt-5.6",
|
|
20
|
-
"google": "gemini-3.1-pro-preview"
|
|
21
|
-
},
|
|
22
|
-
"balanced": {
|
|
23
|
-
"anthropic": "sonnet",
|
|
24
|
-
"openai": "gpt-5.6-terra",
|
|
25
|
-
"google": "gemini-3.6-flash"
|
|
26
|
-
},
|
|
27
|
-
"fast": {
|
|
28
|
-
"anthropic": "haiku",
|
|
29
|
-
"openai": "gpt-5.6-luna",
|
|
30
|
-
"google": "gemini-flash-latest"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
"pinned": {
|
|
35
|
-
"_comment": "Optional. Set to override an alias with an exact snapshot.",
|
|
36
|
-
"anthropic": {},
|
|
37
|
-
"openai": {},
|
|
38
|
-
"google": {}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
That is the whole contract. Three tiers x three providers.
|
|
44
|
-
|
|
45
|
-
## The one design decision that matters: ALIAS, not snapshot
|
|
46
|
-
|
|
47
|
-
The `anthropic` column holds `opus` / `sonnet` / `haiku`, not
|
|
48
|
-
`claude-opus-5` / `claude-sonnet-5` / `claude-haiku-4-5`.
|
|
49
|
-
|
|
50
|
-
**Verified against the live CLI on 2026-08-01:**
|
|
51
|
-
|
|
52
|
-
| passed | resolves to | note |
|
|
53
|
-
|---|---|---|
|
|
54
|
-
| `opus` | `claude-opus-5` | tracks latest automatically |
|
|
55
|
-
| `best` | `claude-fable-5` | Anthropic's most capable GA model |
|
|
56
|
-
| `haiku` | `claude-haiku-4-5-20251001` | |
|
|
57
|
-
| `claude-haiku-4-6` | **REJECTED** | "may not exist or you may not have access" |
|
|
58
|
-
|
|
59
|
-
Two facts fall out of that table, and both argue for aliases:
|
|
60
|
-
|
|
61
|
-
1. **Aliases self-update.** When Anthropic ships Opus 6, `opus` follows it with
|
|
62
|
-
zero edits to this file. A snapshot id would need a release to track it --
|
|
63
|
-
which is exactly how our catalog ended up pinned to `claude-opus-4-8` while
|
|
64
|
-
Opus 5 shipped (fixed in v8.31.0).
|
|
65
|
-
2. **Snapshot ids are account-scoped.** `claude-haiku-4-6` may exist on the API
|
|
66
|
-
and still be unreachable on a given account/CLI. Hardcoding it ships a
|
|
67
|
-
broken default to whoever lacks access.
|
|
68
|
-
|
|
69
|
-
That second point is not theoretical. We already have a scar:
|
|
70
|
-
`tests/test-codex-model-trusted.sh` records that pinning `gpt-5.3-codex` broke
|
|
71
|
-
**every ChatGPT-account user**, because codex-cli rejects it on that tier -- and
|
|
72
|
-
Codex ships free with every ChatGPT plan. The safe landing spot was "send no
|
|
73
|
-
model and let the provider choose."
|
|
74
|
-
|
|
75
|
-
**Rule: prefer a provider alias. Use an exact id only in `pinned`, only
|
|
76
|
-
deliberately.**
|
|
77
|
-
|
|
78
|
-
## Why `pinned` exists
|
|
79
|
-
|
|
80
|
-
Anthropic's docs are explicit that Claude 4.6-generation dateless identifiers
|
|
81
|
-
are still **pinned snapshots, not evergreen pointers**. And Claude Code's
|
|
82
|
-
`best` / `opus` / `sonnet` are *Claude Code routing aliases* -- not a portable
|
|
83
|
-
contract in the raw Messages API.
|
|
84
|
-
|
|
85
|
-
So: aliases are right for the CLI providers we drive, and `pinned` is the escape
|
|
86
|
-
hatch for anyone who needs reproducibility or is calling an API directly.
|
|
87
|
-
Empty by default.
|
|
88
|
-
|
|
89
|
-
## What "frontier" maps to for Anthropic
|
|
90
|
-
|
|
91
|
-
`best` resolves to `claude-fable-5` today, and Anthropic positions Fable as most
|
|
92
|
-
capable generally, with `claude-opus-5` aimed specifically at complex agentic
|
|
93
|
-
coding and enterprise work.
|
|
94
|
-
|
|
95
|
-
**We map `frontier` -> `opus`, not `best`.** Our workload IS agentic coding, and
|
|
96
|
-
`fable` is advisory-only in this codebase: the runner collapses it to opus, so
|
|
97
|
-
offering it as an execution model would be a cost surprise. That reasoning
|
|
98
|
-
predates this file and is unchanged.
|
|
99
|
-
|
|
100
|
-
## What this replaces, and what it does not
|
|
101
|
-
|
|
102
|
-
`providers/model_catalog.json` stays. It carries per-provider metadata this file
|
|
103
|
-
deliberately does not (validation prefixes, tier fallbacks, aider's litellm
|
|
104
|
-
strings, the `models[]` ordering that the resolver depends on).
|
|
105
|
-
|
|
106
|
-
`model_registry.json` is the **editable surface**: the file a human opens when a
|
|
107
|
-
provider ships something. The catalog becomes derived where they overlap, and
|
|
108
|
-
`tests/test-model-catalog-single-source.sh` already fails when derived mirrors
|
|
109
|
-
disagree with their source -- that mechanism extends to cover this.
|
|
110
|
-
|
|
111
|
-
## Rollout, matching the lifecycle in the founder's note
|
|
112
|
-
|
|
113
|
-
The note's recommended lifecycle is right, and one step already exists here:
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
provider release detected <- tools/probe-model-catalog.py (exists, reads live docs)
|
|
117
|
-
v
|
|
118
|
-
add as frontier candidate <- edit model_registry.json
|
|
119
|
-
v
|
|
120
|
-
run coding-agent eval suite <- benchmarks/ (exists)
|
|
121
|
-
v
|
|
122
|
-
canary <- NOT built; needs traffic splitting we do not have
|
|
123
|
-
v
|
|
124
|
-
promote alias <- edit one line
|
|
125
|
-
v
|
|
126
|
-
keep previous as fallback <- pinned{} holds the old id
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**Honest gap:** we have no traffic-splitting layer, so 5% canary is not
|
|
130
|
-
implementable today. Do not put it in a release note as though it were.
|
|
131
|
-
Aliases blunt the need -- the provider is the one rolling the model forward,
|
|
132
|
-
and our eval suite plus the previous id in `pinned` is the realistic control.
|
|
133
|
-
|
|
134
|
-
## Resolution order (must stay identical on both routes)
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
LOKI_<PROVIDER>_MODEL (trusted verbatim -- fine-tunes, org models)
|
|
138
|
-
-> pinned[provider][tier] (deliberate snapshot)
|
|
139
|
-
-> tiers[tier][provider] (the alias -- the normal path)
|
|
140
|
-
-> provider default (may legitimately be EMPTY: see codex/ChatGPT)
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
The last line is load-bearing. Empty means "send no `--model` and let the
|
|
144
|
-
provider pick," which is correct whenever we cannot know an id is valid for that
|
|
145
|
-
account. Never replace it with a guess.
|
|
146
|
-
|
|
147
|
-
## Acceptance
|
|
148
|
-
|
|
149
|
-
- Adding a model is a one-line edit to `model_registry.json`.
|
|
150
|
-
- `tests/test-model-catalog-current-flagship.sh` (v8.31.0) already fails when a
|
|
151
|
-
tier points at a superseded same-family model; extend it to this file.
|
|
152
|
-
- A mutation flipping any alias back to a hardcoded snapshot must turn a test
|
|
153
|
-
red.
|
|
154
|
-
- No test may assert an exact snapshot id that this account cannot dispatch --
|
|
155
|
-
the `claude-haiku-4-6` result above is the reason.
|