loki-mode 11.26.0 → 11.28.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/context-tracker.py +37 -9
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/loki-ts/dist/loki.js +1073 -1072
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +7 -6
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/providers/model_catalog.json +5 -5
- package/web-app/dist/assets/{AdminPage-CAh5fHFO.js → AdminPage-p_FOSChj.js} +1 -1
- package/web-app/dist/assets/{Avatar-Dc_mQNpZ.js → Avatar-kPbnVSnp.js} +1 -1
- package/web-app/dist/assets/{Badge-Bly9TTg8.js → Badge-7HOAlSmD.js} +1 -1
- package/web-app/dist/assets/{Button-CwAQAcLq.js → Button-nEzfOd6t.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-3G5XECyY.js → CockpitPage-CLGpDqzU.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BjMtSrdQ.js → ComparePage-VSc8jdPZ.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-CWkADySv.js → ErrorBoundary-8V3xFR2w.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-ByrHjsK7.js → EvidenceReceiptPanel-DLsB5yeP.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-CTcBfYPp.js → GitHubIssuesPanel-DoHVuVGQ.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-D_9KrRBw.js → GitHubPRsPanel-Dro5U2e0.js} +1 -1
- package/web-app/dist/assets/{HomePage-D6NlpSFt.js → HomePage-DtQDYN79.js} +2 -2
- package/web-app/dist/assets/{LoginPage-Dy1qKpcb.js → LoginPage-Djj8-v0e.js} +1 -1
- package/web-app/dist/assets/{MagicPage-Cf6ZzRVM.js → MagicPage-z-2e0Bq0.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-BPnvrUhl.js → MetricsPage-zzq1gPiQ.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-DvQB2Qnb.js → NotFoundPage-BBvHqqIK.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-dK1lJtEj.js → ProjectPage-Ba9RoN5L.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DVtLanvZ.js → ProjectsPage-DtGSLSXP.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-CNOajzOU.js → SettingsPage-C7XFiz3W.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DpGSxMaI.js → ShowcasePage-B0KMTAOH.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-J3_BBmeH.js → SystemSettingsPage-fQtr58PY.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-B3uTVXBb.js → TeamsPage-BmXmccj8.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-BWUB05lM.js → TemplatesPage-CxFXcDZ8.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-D8Mg_PB8.js → TerminalOutput-363AdYGr.js} +1 -1
- package/web-app/dist/assets/{activity-GQ9YyCtp.js → activity-BbZPtMKl.js} +1 -1
- package/web-app/dist/assets/{bell-0-h9hciX.js → bell-jmyGaHmO.js} +1 -1
- package/web-app/dist/assets/{bot-CW4x9zj5.js → bot-bmi00zF9.js} +1 -1
- package/web-app/dist/assets/{check--oWDRPee.js → check-F6TGhF0l.js} +1 -1
- package/web-app/dist/assets/{chevron-left-JuF4MFFh.js → chevron-left-DC7nj1gA.js} +1 -1
- package/web-app/dist/assets/{circle-alert-B3vP7QU7.js → circle-alert-DZdGE7RI.js} +1 -1
- package/web-app/dist/assets/{clock-CdAiQx7X.js → clock-BiLV-iIz.js} +1 -1
- package/web-app/dist/assets/{cloud-K-kIL9lJ.js → cloud-i4GHwMKq.js} +1 -1
- package/web-app/dist/assets/{code-xml-CGG3v9sv.js → code-xml-DGjDltcy.js} +1 -1
- package/web-app/dist/assets/{database-C7-WC8Z6.js → database-C1oPBQbC.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-C_7v9rHy.js → dollar-sign-Bo6ogEg0.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-DzQ6GYcR.js → file-code-corner-BXWvy1PL.js} +1 -1
- package/web-app/dist/assets/{file-plus-CYOE1fX5.js → file-plus-BPZjvwuX.js} +1 -1
- package/web-app/dist/assets/{globe-3tc6opUd.js → globe-CE7HSioU.js} +1 -1
- package/web-app/dist/assets/{hammer-CU7L4RPg.js → hammer-BSQDbiRc.js} +1 -1
- package/web-app/dist/assets/{index-CXecZPUy.js → index-B27CfIIa.js} +3 -3
- package/web-app/dist/assets/{layers-DxNRuEd5.js → layers-DXJ5Vjyi.js} +1 -1
- package/web-app/dist/assets/{loader-circle-RUR9jI2z.js → loader-circle-DTSNnWLq.js} +1 -1
- package/web-app/dist/assets/{lock-CJFGZzzX.js → lock-C7lLcZ6j.js} +1 -1
- package/web-app/dist/assets/{package-OJGbocBC.js → package-DpFcoupo.js} +1 -1
- package/web-app/dist/assets/{plus-C6w2v-iR.js → plus-BJT4qY9K.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-Bu3q3oee.js → refresh-cw-PjsWKUvQ.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-6HRg5u_M.js → rotate-ccw-G-ua6Bov.js} +1 -1
- package/web-app/dist/assets/{scroll-text-BKYfjuaL.js → scroll-text-DvL1Q5tm.js} +1 -1
- package/web-app/dist/assets/{server-Ck9eV1WU.js → server-DwI_aWBl.js} +1 -1
- package/web-app/dist/assets/{shield-alert-BJTD17Fy.js → shield-alert-C4mHcU2s.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-D9A1vbWY.js → thumbs-up-D69RdLvh.js} +1 -1
- package/web-app/dist/assets/{trash-2-DMAuNNMV.js → trash-2-uhvcTP-h.js} +1 -1
- package/web-app/dist/assets/{trending-down-XpV6Yoqk.js → trending-down-UbfJmB_J.js} +1 -1
- package/web-app/dist/assets/{trending-up-GCQA5tp5.js → trending-up-CMpSCveh.js} +1 -1
- package/web-app/dist/assets/{upload-Cjd2Hrc2.js → upload-C9F7HMWm.js} +1 -1
- package/web-app/dist/assets/{usePolling-W7IEZrk4.js → usePolling-CPFCUNTE.js} +1 -1
- package/web-app/dist/assets/{user-S-8hFl_h.js → user-iQBrHMXw.js} +1 -1
- package/web-app/dist/index.html +1 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v11.
|
|
6
|
+
# Loki Mode v11.28.0
|
|
7
7
|
|
|
8
8
|
**Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the previous bash loop. PRD-file starts (`loki start ./prd.md`) and the opencode provider still run on it until FC38-SWEEP ports them; the legacy-engine command and the LOKI_ENGINE switch remain removed. Prefer `loki owner/repo#N` for issues.
|
|
9
9
|
|
|
@@ -496,4 +496,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
496
496
|
|
|
497
497
|
---
|
|
498
498
|
|
|
499
|
-
**v11.
|
|
499
|
+
**v11.28.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.
|
|
1
|
+
11.28.0
|
|
@@ -12,7 +12,7 @@ Provider-agnostic: supports Claude, Codex, and Gemini CLIs.
|
|
|
12
12
|
Called by run.sh after each RARV iteration.
|
|
13
13
|
|
|
14
14
|
Usage:
|
|
15
|
-
python3 context-tracker.py --iteration N --loki-dir .loki [--window-size
|
|
15
|
+
python3 context-tracker.py --iteration N --loki-dir .loki [--window-size N] [--model ID]
|
|
16
16
|
python3 context-tracker.py --iteration N --loki-dir .loki --provider codex \
|
|
17
17
|
--tokens-input 5000 --tokens-output 2000
|
|
18
18
|
python3 context-tracker.py --iteration N --loki-dir .loki --session-file /path/to/session.jsonl
|
|
@@ -57,12 +57,29 @@ PRICING_BY_PROVIDER = {
|
|
|
57
57
|
},
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
# Last-resort window for providers whose models carry no context_window in
|
|
61
|
+
# providers/model_catalog.json (the catalog owns Claude model capacity).
|
|
62
|
+
FALLBACK_WINDOW_SIZES = {
|
|
63
63
|
"codex": 200000,
|
|
64
64
|
"gemini": 1000000,
|
|
65
65
|
}
|
|
66
|
+
DEFAULT_WINDOW_SIZE = 200000
|
|
67
|
+
CATALOG_PATH = Path(__file__).resolve().parent.parent / "providers" / "model_catalog.json"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def resolve_window_size(provider, model=None):
|
|
71
|
+
"""Context window in tokens: catalog by model id, else the provider's
|
|
72
|
+
catalog default model, else FALLBACK_WINDOW_SIZES."""
|
|
73
|
+
try:
|
|
74
|
+
entry = json.loads(CATALOG_PATH.read_text())["providers"].get(provider, {})
|
|
75
|
+
models = {m.get("id"): m for m in entry.get("models", []) if isinstance(m, dict)}
|
|
76
|
+
for mid in (model, entry.get("latest_development")):
|
|
77
|
+
window = models.get(mid, {}).get("context_window")
|
|
78
|
+
if isinstance(window, int) and window > 0:
|
|
79
|
+
return window
|
|
80
|
+
except (OSError, ValueError, KeyError, AttributeError):
|
|
81
|
+
pass
|
|
82
|
+
return FALLBACK_WINDOW_SIZES.get(provider, DEFAULT_WINDOW_SIZE)
|
|
66
83
|
|
|
67
84
|
|
|
68
85
|
def get_pricing(provider):
|
|
@@ -153,6 +170,8 @@ def parse_session(jsonl_path, last_offset, iteration, window_size):
|
|
|
153
170
|
batch_cache_read = 0
|
|
154
171
|
batch_cache_creation = 0
|
|
155
172
|
|
|
173
|
+
latest_model = None
|
|
174
|
+
|
|
156
175
|
# Track latest cumulative usage (last assistant message has running total for that API call)
|
|
157
176
|
latest_input = 0
|
|
158
177
|
latest_output = 0
|
|
@@ -189,6 +208,8 @@ def parse_session(jsonl_path, last_offset, iteration, window_size):
|
|
|
189
208
|
# Extract token usage from assistant messages
|
|
190
209
|
if entry_type == "assistant":
|
|
191
210
|
usage = entry.get("message", {}).get("usage", {})
|
|
211
|
+
if entry.get("message", {}).get("model"):
|
|
212
|
+
latest_model = entry["message"]["model"]
|
|
192
213
|
if usage:
|
|
193
214
|
inp = usage.get("input_tokens", 0)
|
|
194
215
|
out = usage.get("output_tokens", 0)
|
|
@@ -213,19 +234,21 @@ def parse_session(jsonl_path, last_offset, iteration, window_size):
|
|
|
213
234
|
"batch_cache_creation": batch_cache_creation,
|
|
214
235
|
"latest_input": latest_input,
|
|
215
236
|
"latest_cache_read": latest_cache_read,
|
|
237
|
+
"model": latest_model,
|
|
216
238
|
"compactions": compactions,
|
|
217
239
|
"new_offset": current_line,
|
|
218
240
|
}
|
|
219
241
|
|
|
220
242
|
|
|
221
|
-
def update_tracking(loki_dir, iteration, window_size, provider="claude",
|
|
243
|
+
def update_tracking(loki_dir, iteration, window_size, provider="claude", model=None,
|
|
222
244
|
session_file=None, direct_tokens=None):
|
|
223
245
|
"""Main tracking function - parse session and update tracking.json.
|
|
224
246
|
|
|
225
247
|
Args:
|
|
226
248
|
loki_dir: Path to .loki directory
|
|
227
249
|
iteration: Current RARV iteration number
|
|
228
|
-
window_size: Context window size in tokens
|
|
250
|
+
window_size: Context window size in tokens (0 = resolve from the catalog)
|
|
251
|
+
model: Run model id used to look up the window (default: model seen in the session)
|
|
229
252
|
provider: Provider name (claude, codex, gemini)
|
|
230
253
|
session_file: Explicit path to session file (optional)
|
|
231
254
|
direct_tokens: Dict with input/output token counts for non-Claude providers
|
|
@@ -315,6 +338,9 @@ def update_tracking(loki_dir, iteration, window_size, provider="claude",
|
|
|
315
338
|
tracking["updated_at"] = datetime.now(timezone.utc).isoformat()
|
|
316
339
|
offset_file.write_text(str(result["new_offset"]))
|
|
317
340
|
|
|
341
|
+
if window_size <= 0:
|
|
342
|
+
window_size = resolve_window_size(provider, model or result.get("model"))
|
|
343
|
+
|
|
318
344
|
# Calculate iteration cost
|
|
319
345
|
iter_cost = calculate_cost(
|
|
320
346
|
result["batch_input"],
|
|
@@ -379,6 +405,8 @@ def main():
|
|
|
379
405
|
help="Context window size in tokens (0 = auto-detect from provider)")
|
|
380
406
|
parser.add_argument("--provider", default="claude", choices=["claude", "codex", "gemini"],
|
|
381
407
|
help="LLM provider (claude, codex, gemini)")
|
|
408
|
+
parser.add_argument("--model", default=None,
|
|
409
|
+
help="Run model id for the catalog window lookup (default: model seen in the session)")
|
|
382
410
|
parser.add_argument("--session-file", default=None,
|
|
383
411
|
help="Explicit path to session file (overrides auto-detection)")
|
|
384
412
|
parser.add_argument("--tokens-input", type=int, default=0,
|
|
@@ -387,8 +415,8 @@ def main():
|
|
|
387
415
|
help="Direct output token count (for non-Claude providers)")
|
|
388
416
|
args = parser.parse_args()
|
|
389
417
|
|
|
390
|
-
#
|
|
391
|
-
window_size = args.window_size
|
|
418
|
+
# window_size 0 is resolved from the catalog once the run's model is known
|
|
419
|
+
window_size = max(args.window_size, 0)
|
|
392
420
|
|
|
393
421
|
# Build direct tokens dict if provided
|
|
394
422
|
direct_tokens = None
|
|
@@ -396,7 +424,7 @@ def main():
|
|
|
396
424
|
direct_tokens = {"input": args.tokens_input, "output": args.tokens_output}
|
|
397
425
|
|
|
398
426
|
update_tracking(args.loki_dir, args.iteration, window_size,
|
|
399
|
-
provider=args.provider, session_file=args.session_file,
|
|
427
|
+
provider=args.provider, model=args.model, session_file=args.session_file,
|
|
400
428
|
direct_tokens=direct_tokens)
|
|
401
429
|
|
|
402
430
|
|
package/dashboard/__init__.py
CHANGED
package/docs/CLI-REFERENCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI reference
|
|
2
2
|
|
|
3
|
-
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.28.0. Do not edit by hand.
|
|
4
4
|
Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for the full inventory.
|
|
5
5
|
|
|
6
6
|
| Command | Description |
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Loki Mode, by [Autonomi](https://www.autonomi.dev/), turns a spec or an issue into a verified pull request with a receipt you can check. This page covers installing it, a first run, and the options around it.
|
|
4
4
|
|
|
5
|
-
**Version:** v11.
|
|
5
|
+
**Version:** v11.28.0
|
|
6
6
|
|
|
7
7
|
**Engine note:** `loki start` is the primary command. `loki start`, `loki "<task>"`, `loki owner/repo#N` and `loki quick` all run the Loki 10 engine, whatever the flag order or input form (PRD file, issue ref, task or one-word brief). The previous loop runs only on `--engine legacy`, `LOKI_ENGINE=legacy`, or for one call when a flag Loki 10 cannot honor is present. See the [user guide](v10/GUIDE.md) and the [5-minute quickstart](QUICKSTART.md).
|
|
8
8
|
|