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.
Files changed (69) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/context-tracker.py +37 -9
  4. package/dashboard/__init__.py +1 -1
  5. package/docs/CLI-REFERENCE.md +1 -1
  6. package/docs/INSTALLATION.md +1 -1
  7. package/loki-ts/dist/loki.js +1073 -1072
  8. package/mcp/__init__.py +1 -1
  9. package/package.json +2 -2
  10. package/packages/control-plane/dist/server.js +7 -6
  11. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  12. package/providers/model_catalog.json +5 -5
  13. package/web-app/dist/assets/{AdminPage-CAh5fHFO.js → AdminPage-p_FOSChj.js} +1 -1
  14. package/web-app/dist/assets/{Avatar-Dc_mQNpZ.js → Avatar-kPbnVSnp.js} +1 -1
  15. package/web-app/dist/assets/{Badge-Bly9TTg8.js → Badge-7HOAlSmD.js} +1 -1
  16. package/web-app/dist/assets/{Button-CwAQAcLq.js → Button-nEzfOd6t.js} +1 -1
  17. package/web-app/dist/assets/{CockpitPage-3G5XECyY.js → CockpitPage-CLGpDqzU.js} +1 -1
  18. package/web-app/dist/assets/{ComparePage-BjMtSrdQ.js → ComparePage-VSc8jdPZ.js} +1 -1
  19. package/web-app/dist/assets/{ErrorBoundary-CWkADySv.js → ErrorBoundary-8V3xFR2w.js} +1 -1
  20. package/web-app/dist/assets/{EvidenceReceiptPanel-ByrHjsK7.js → EvidenceReceiptPanel-DLsB5yeP.js} +1 -1
  21. package/web-app/dist/assets/{GitHubIssuesPanel-CTcBfYPp.js → GitHubIssuesPanel-DoHVuVGQ.js} +1 -1
  22. package/web-app/dist/assets/{GitHubPRsPanel-D_9KrRBw.js → GitHubPRsPanel-Dro5U2e0.js} +1 -1
  23. package/web-app/dist/assets/{HomePage-D6NlpSFt.js → HomePage-DtQDYN79.js} +2 -2
  24. package/web-app/dist/assets/{LoginPage-Dy1qKpcb.js → LoginPage-Djj8-v0e.js} +1 -1
  25. package/web-app/dist/assets/{MagicPage-Cf6ZzRVM.js → MagicPage-z-2e0Bq0.js} +1 -1
  26. package/web-app/dist/assets/{MetricsPage-BPnvrUhl.js → MetricsPage-zzq1gPiQ.js} +1 -1
  27. package/web-app/dist/assets/{NotFoundPage-DvQB2Qnb.js → NotFoundPage-BBvHqqIK.js} +1 -1
  28. package/web-app/dist/assets/{ProjectPage-dK1lJtEj.js → ProjectPage-Ba9RoN5L.js} +3 -3
  29. package/web-app/dist/assets/{ProjectsPage-DVtLanvZ.js → ProjectsPage-DtGSLSXP.js} +1 -1
  30. package/web-app/dist/assets/{SettingsPage-CNOajzOU.js → SettingsPage-C7XFiz3W.js} +1 -1
  31. package/web-app/dist/assets/{ShowcasePage-DpGSxMaI.js → ShowcasePage-B0KMTAOH.js} +1 -1
  32. package/web-app/dist/assets/{SystemSettingsPage-J3_BBmeH.js → SystemSettingsPage-fQtr58PY.js} +1 -1
  33. package/web-app/dist/assets/{TeamsPage-B3uTVXBb.js → TeamsPage-BmXmccj8.js} +1 -1
  34. package/web-app/dist/assets/{TemplatesPage-BWUB05lM.js → TemplatesPage-CxFXcDZ8.js} +1 -1
  35. package/web-app/dist/assets/{TerminalOutput-D8Mg_PB8.js → TerminalOutput-363AdYGr.js} +1 -1
  36. package/web-app/dist/assets/{activity-GQ9YyCtp.js → activity-BbZPtMKl.js} +1 -1
  37. package/web-app/dist/assets/{bell-0-h9hciX.js → bell-jmyGaHmO.js} +1 -1
  38. package/web-app/dist/assets/{bot-CW4x9zj5.js → bot-bmi00zF9.js} +1 -1
  39. package/web-app/dist/assets/{check--oWDRPee.js → check-F6TGhF0l.js} +1 -1
  40. package/web-app/dist/assets/{chevron-left-JuF4MFFh.js → chevron-left-DC7nj1gA.js} +1 -1
  41. package/web-app/dist/assets/{circle-alert-B3vP7QU7.js → circle-alert-DZdGE7RI.js} +1 -1
  42. package/web-app/dist/assets/{clock-CdAiQx7X.js → clock-BiLV-iIz.js} +1 -1
  43. package/web-app/dist/assets/{cloud-K-kIL9lJ.js → cloud-i4GHwMKq.js} +1 -1
  44. package/web-app/dist/assets/{code-xml-CGG3v9sv.js → code-xml-DGjDltcy.js} +1 -1
  45. package/web-app/dist/assets/{database-C7-WC8Z6.js → database-C1oPBQbC.js} +1 -1
  46. package/web-app/dist/assets/{dollar-sign-C_7v9rHy.js → dollar-sign-Bo6ogEg0.js} +1 -1
  47. package/web-app/dist/assets/{file-code-corner-DzQ6GYcR.js → file-code-corner-BXWvy1PL.js} +1 -1
  48. package/web-app/dist/assets/{file-plus-CYOE1fX5.js → file-plus-BPZjvwuX.js} +1 -1
  49. package/web-app/dist/assets/{globe-3tc6opUd.js → globe-CE7HSioU.js} +1 -1
  50. package/web-app/dist/assets/{hammer-CU7L4RPg.js → hammer-BSQDbiRc.js} +1 -1
  51. package/web-app/dist/assets/{index-CXecZPUy.js → index-B27CfIIa.js} +3 -3
  52. package/web-app/dist/assets/{layers-DxNRuEd5.js → layers-DXJ5Vjyi.js} +1 -1
  53. package/web-app/dist/assets/{loader-circle-RUR9jI2z.js → loader-circle-DTSNnWLq.js} +1 -1
  54. package/web-app/dist/assets/{lock-CJFGZzzX.js → lock-C7lLcZ6j.js} +1 -1
  55. package/web-app/dist/assets/{package-OJGbocBC.js → package-DpFcoupo.js} +1 -1
  56. package/web-app/dist/assets/{plus-C6w2v-iR.js → plus-BJT4qY9K.js} +1 -1
  57. package/web-app/dist/assets/{refresh-cw-Bu3q3oee.js → refresh-cw-PjsWKUvQ.js} +1 -1
  58. package/web-app/dist/assets/{rotate-ccw-6HRg5u_M.js → rotate-ccw-G-ua6Bov.js} +1 -1
  59. package/web-app/dist/assets/{scroll-text-BKYfjuaL.js → scroll-text-DvL1Q5tm.js} +1 -1
  60. package/web-app/dist/assets/{server-Ck9eV1WU.js → server-DwI_aWBl.js} +1 -1
  61. package/web-app/dist/assets/{shield-alert-BJTD17Fy.js → shield-alert-C4mHcU2s.js} +1 -1
  62. package/web-app/dist/assets/{thumbs-up-D9A1vbWY.js → thumbs-up-D69RdLvh.js} +1 -1
  63. package/web-app/dist/assets/{trash-2-DMAuNNMV.js → trash-2-uhvcTP-h.js} +1 -1
  64. package/web-app/dist/assets/{trending-down-XpV6Yoqk.js → trending-down-UbfJmB_J.js} +1 -1
  65. package/web-app/dist/assets/{trending-up-GCQA5tp5.js → trending-up-CMpSCveh.js} +1 -1
  66. package/web-app/dist/assets/{upload-Cjd2Hrc2.js → upload-C9F7HMWm.js} +1 -1
  67. package/web-app/dist/assets/{usePolling-W7IEZrk4.js → usePolling-CPFCUNTE.js} +1 -1
  68. package/web-app/dist/assets/{user-S-8hFl_h.js → user-iQBrHMXw.js} +1 -1
  69. 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.26.0
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.26.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
499
+ **v11.28.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 11.26.0
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 200000]
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
- # Default context window sizes per provider
61
- WINDOW_SIZES = {
62
- "claude": 200000,
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
- # Auto-detect window size from provider if not specified
391
- window_size = args.window_size if args.window_size > 0 else WINDOW_SIZES.get(args.provider, 200000)
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
 
@@ -7,6 +7,6 @@ Modules:
7
7
  control: Session control helpers (status, atomic writes, origin check)
8
8
  """
9
9
 
10
- __version__ = "11.26.0"
10
+ __version__ = "11.28.0"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -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.26.0. Do not edit by hand.
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 |
@@ -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.26.0
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