loki-mode 7.31.0 → 7.32.0
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/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/loki +367 -48
- package/autonomy/mcp-launch.sh +27 -16
- package/autonomy/run.sh +20 -3
- package/bin/loki +52 -0
- package/dashboard/__init__.py +1 -1
- package/dashboard/server.py +128 -28
- package/docs/INSTALLATION.md +1 -1
- package/loki-ts/dist/loki.js +248 -247
- package/mcp/__init__.py +1 -1
- package/mcp/server.py +21 -0
- package/package.json +1 -1
- package/skills/model-selection.md +7 -3
package/mcp/__init__.py
CHANGED
package/mcp/server.py
CHANGED
|
@@ -537,6 +537,27 @@ def _build_fastmcp():
|
|
|
537
537
|
|
|
538
538
|
mcp = _build_fastmcp()
|
|
539
539
|
|
|
540
|
+
# Propagate the loki-mode VERSION into serverInfo.version.
|
|
541
|
+
#
|
|
542
|
+
# FastMCP 1.x exposes no `version=` kwarg (see _build_fastmcp above), so the
|
|
543
|
+
# kwarg branch there never fires on the installed SDK. FastMCP DOES forward to
|
|
544
|
+
# an underlying lowlevel `Server` (mcp._mcp_server), whose `version` attribute
|
|
545
|
+
# is what `create_initialization_options()` reads into serverInfo at the
|
|
546
|
+
# initialize handshake -- falling back to importlib.metadata.version("mcp")
|
|
547
|
+
# (the SDK's OWN pip version, e.g. 1.27.x) when it is None. That fallback is
|
|
548
|
+
# why the listing surfaced the SDK version instead of ours. Setting this
|
|
549
|
+
# attribute is the only mechanism the installed SDK exposes to override
|
|
550
|
+
# serverInfo.version; `version=` is a documented public parameter on the
|
|
551
|
+
# lowlevel Server.__init__, so this is the supported field, not an internal
|
|
552
|
+
# hack. Guarded so a future SDK that already set a version (e.g. via the
|
|
553
|
+
# _build_fastmcp kwarg branch) is left untouched.
|
|
554
|
+
try:
|
|
555
|
+
_inner = getattr(mcp, "_mcp_server", None)
|
|
556
|
+
if _inner is not None and getattr(_inner, "version", None) in (None, ""):
|
|
557
|
+
_inner.version = _version
|
|
558
|
+
except Exception: # pragma: no cover - defensive: never block server startup
|
|
559
|
+
pass
|
|
560
|
+
|
|
540
561
|
# ============================================================
|
|
541
562
|
# TOOLS - Functions Claude can call
|
|
542
563
|
# ============================================================
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loki-mode",
|
|
3
3
|
"mcpName": "io.github.asklokesh/loki-mode",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.32.0",
|
|
5
5
|
"description": "Loki Mode by Autonomi. Autonomous spec-to-product system: takes a PRD, GitHub issue, OpenAPI/JSON/YAML, or one-line brief to a deployed app via the RARV-C closure loop with 11 quality gates. Provider-agnostic (Claude Code, OpenAI Codex, Cline, Aider).",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agent",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Since v6.81.0, the main RARV loop uses **one pinned model per session** instead of rotating models per RARV phase. This eliminates per-iteration tier churn and keeps the main loop behavior predictable.
|
|
6
6
|
|
|
7
7
|
- Controlled by `LOKI_SESSION_MODEL` (default: `sonnet`).
|
|
8
|
-
- Accepted values: `opus`, `sonnet`, `haiku`, or a raw tier name (`planning`, `development`, `fast`).
|
|
8
|
+
- Accepted values: `opus`, `sonnet`, `haiku`, or a raw tier name (`planning`, `development`, `fast`). The value names a **tier**, not a fixed model: it is mapped to an abstract tier (opus -> planning, sonnet -> development, haiku -> fast) which is then resolved to a concrete model through the provider config (`PROVIDER_MODEL_PLANNING/DEVELOPMENT/FAST`). On stock config the default `sonnet` pin = the **development** tier = `PROVIDER_MODEL_DEVELOPMENT` = **opus** (the model the runner actually dispatches). Under `LOKI_ALLOW_HAIKU=true` the development tier lowers to sonnet (and fast to haiku). This tier-to-model resolution is why `loki plan` quotes Opus on the stock default path: the quote names the dispatched model, not the pin alias. A mid-flight `.loki/state/model-override` is different: that alias is fed straight to `--model` (a `sonnet` override dispatches sonnet, no tier route).
|
|
9
9
|
- `get_rarv_tier()` is retained and still used for subagent Task-tool dispatches (planning vs implementation vs fast work), not for the main loop.
|
|
10
10
|
|
|
11
11
|
**Rollback (legacy RARV tier rotation in the main loop):**
|
|
@@ -32,7 +32,7 @@ Claude Fable 5 (alias `fable`, full id `claude-fable-5`) is Anthropic's most cap
|
|
|
32
32
|
|
|
33
33
|
### Mid-flight model switching
|
|
34
34
|
|
|
35
|
-
You can change the model a **live run** uses, from the dashboard or by writing a state file. The switch applies at the **next iteration boundary** (each iteration spawns a fresh `claude -p`, which fixes the model per invocation, so it never changes mid-invocation). The override applies to the **current run only**: the runner clears a leftover override at the start of a fresh run, so a switch never silently carries into future runs. The override is also clamped by `LOKI_MAX_TIER`: if the operator set a cost ceiling, an override above it
|
|
35
|
+
You can change the model a **live run** uses, from the dashboard or by writing a state file. The switch applies at the **next iteration boundary** (each iteration spawns a fresh `claude -p`, which fixes the model per invocation, so it never changes mid-invocation). The override applies to the **current run only**: the runner clears a leftover override at the start of a fresh run, so a switch never silently carries into future runs. The override is also clamped by `LOKI_MAX_TIER`: if the operator set a cost ceiling, an override above it is clamped down with one honest log line, and the dashboard reports the clamped effective model. The clamp is scoped, not blanket: on the override path a `sonnet` ceiling downgrades only `fable` (to `PROVIDER_MODEL_DEVELOPMENT`, opus by default), while a plain `opus` override stays opus; a `haiku` ceiling pins to `PROVIDER_MODEL_FAST`; an `opus` ceiling caps only `fable` back to opus. (The clamp is enforced on the bash runner, which is the live `start` route; the experimental Bun runner does not yet port it.)
|
|
36
36
|
|
|
37
37
|
- Dashboard: the Model selector in the session-control panel. The Fable option shows its 2x-Opus cost; an inline notice discloses the iteration-boundary timing. It calls `POST /api/session/model`.
|
|
38
38
|
- File / CLI: write an allowlisted alias (`haiku`, `sonnet`, `opus`, `fable`) to `.loki/state/model-override`. Empty or absent file reverts to the tier mapping. Invalid content is ignored (the runtime warns once). The value is allowlist-validated because it is fed straight into `claude --model`.
|
|
@@ -58,7 +58,11 @@ For diffs that move money or mutate infrastructure (payments, billing, spend aut
|
|
|
58
58
|
|
|
59
59
|
### Cost estimate honesty
|
|
60
60
|
|
|
61
|
-
`loki plan` quotes
|
|
61
|
+
`loki plan` quotes the model the runner actually dispatches, on **every** path, for the levers the runner honors. This includes the stock no-lever default: the `sonnet` session pin resolves through the development tier to opus, so the quote names Opus (not Sonnet) on the default path. Set `LOKI_SESSION_MODEL=fable`, or have a pending `.loki/state/model-override` of `fable`, and the estimate uses Fable's $10/$50 pricing with a 2x-Opus note. The quote, the dashboard `effective` model, and the actual `claude --model` argument always agree on both routes: the session-pin tier route (no override) and the override-path clamp (override present) are each mirrored exactly in the estimator and the dashboard, so the same lever that changes the quote changes the run. `LOKI_MAX_TIER` is applied to the quote too, so the estimate never quotes a model above the operator's cost ceiling. (`LOKI_MODEL` is not a session lever and does not affect the run; use `LOKI_SESSION_MODEL`.)
|
|
62
|
+
|
|
63
|
+
**Where the dispatched model is disclosed (precisely):**
|
|
64
|
+
- Override path (a `.loki/state/model-override` alias): the runner logs the override and the clamp line (`model override: <model>`, plus the one honest clamp-down log line when `LOKI_MAX_TIER` reduces it); the dashboard `GET /api/session/model` `effective` field reports the clamped model.
|
|
65
|
+
- Session pin / architect path (no override, the default): the runner logs the RARV effective-model line each iteration (`RARV Phase: <phase> -> Tier: <tier> (<model>)`), and `loki plan` discloses the provenance (`pinned via LOKI_SESSION_MODEL=<pin> -> <tier> tier -> <model>`) so the quoted model is legible against the pin alias. The `LOKI_FABLE_ARCHITECT=1` first-iteration Fable opt-in is disclosed as an extra architecture iteration in the quote.
|
|
62
66
|
|
|
63
67
|
---
|
|
64
68
|
|