loki-mode 11.17.1 → 11.17.6

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 (109) hide show
  1. package/SKILL.md +3 -3
  2. package/VERSION +1 -1
  3. package/autonomy/grill.sh +24 -2
  4. package/autonomy/hooks/precompact-flush.sh +51 -0
  5. package/autonomy/hooks/validate-bash.sh +895 -5
  6. package/autonomy/lib/chat.sh +8 -3
  7. package/autonomy/lib/claude-flags.sh +143 -6
  8. package/autonomy/lib/claude_permissions.py +24 -4
  9. package/autonomy/lib/decision_record.py +92 -3
  10. package/autonomy/lib/efficiency_cost.py +102 -0
  11. package/autonomy/lib/modernize/py_capture.py +62 -3
  12. package/autonomy/lib/prd-enrich.sh +28 -2
  13. package/autonomy/lib/voter-agents.sh +61 -6
  14. package/autonomy/lib/wiki-generator.py +58 -10
  15. package/autonomy/lib/wiki_llm.py +41 -2
  16. package/autonomy/loki +391 -28
  17. package/autonomy/quickstart.sh +1 -1
  18. package/autonomy/run.sh +201 -10
  19. package/autonomy/trigger-server.py +70 -2
  20. package/completions/_loki +3 -0
  21. package/completions/loki.bash +2 -1
  22. package/dashboard/__init__.py +1 -1
  23. package/dashboard/audit.py +204 -17
  24. package/docs/CLI-REFERENCE.md +4 -1
  25. package/docs/EVALUATING.md +2 -2
  26. package/docs/INSTALLATION.md +1 -1
  27. package/docs/environment-variables.md +1 -0
  28. package/docs/trackers.md +6 -0
  29. package/docs/v10/BOARD.md +7 -4
  30. package/docs/v10/CLI-MODERN.md +8 -5
  31. package/docs/v10/DECISIONS.md +31 -1
  32. package/docs/v10/ENGINE.md +1 -0
  33. package/docs/v10/FAILURE-CLASSES.md +60 -1
  34. package/docs/v10/FOUNDER-QUEUE.md +1 -0
  35. package/docs/v10/GUIDE-MODERNIZE.md +9 -4
  36. package/docs/v10/PLAN-V12.md +896 -0
  37. package/docs/v10/PROGRESS.md +10 -0
  38. package/docs/v11/COST-HALF.md +3 -1
  39. package/docs/visual-evidence.md +2 -0
  40. package/loki-ts/dist/loki.js +1104 -1057
  41. package/mcp/__init__.py +1 -1
  42. package/memory/retrieval.py +15 -3
  43. package/memory/schemas.py +43 -1
  44. package/memory/storage.py +11 -0
  45. package/package.json +2 -2
  46. package/packages/control-plane/dist/server.js +989 -693
  47. package/packages/control-plane/src/server/legacy/routes-control.ts +5 -1
  48. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  49. package/providers/claude.sh +1 -0
  50. package/providers/loader.sh +26 -0
  51. package/providers/model_routes.sh +31 -0
  52. package/src/policies/claude_permissions.js +20 -2
  53. package/web-app/dist/assets/{AdminPage-OVzN6eLm.js → AdminPage-CCedYmn3.js} +1 -1
  54. package/web-app/dist/assets/{Avatar-hCCrxrCZ.js → Avatar-DMrDsuGe.js} +1 -1
  55. package/web-app/dist/assets/{Badge-CDcpkhbJ.js → Badge-K4Ui2tJz.js} +1 -1
  56. package/web-app/dist/assets/{Button-8mwWlhEu.js → Button-Bhjts5QZ.js} +1 -1
  57. package/web-app/dist/assets/{CockpitPage-D8cf3u22.js → CockpitPage-Be7sEVqh.js} +1 -1
  58. package/web-app/dist/assets/{ComparePage-CIgkbDRY.js → ComparePage-D4ty3jiF.js} +1 -1
  59. package/web-app/dist/assets/{ErrorBoundary-99kJH9g2.js → ErrorBoundary-Cmt2x_mL.js} +1 -1
  60. package/web-app/dist/assets/{EvidenceReceiptPanel-C9fj32eS.js → EvidenceReceiptPanel-D2IXLnp9.js} +1 -1
  61. package/web-app/dist/assets/{GitHubIssuesPanel-De43YQ_C.js → GitHubIssuesPanel-CyXitr6h.js} +1 -1
  62. package/web-app/dist/assets/{GitHubPRsPanel-7g7ZTnkx.js → GitHubPRsPanel-RRM3H-xd.js} +1 -1
  63. package/web-app/dist/assets/{HomePage-CcNA24ny.js → HomePage-CMtrrgfs.js} +2 -2
  64. package/web-app/dist/assets/{LoginPage-BYjlb-IK.js → LoginPage-BrzNhnMJ.js} +1 -1
  65. package/web-app/dist/assets/{MagicPage-C0Dwt9Na.js → MagicPage-D7VynOKM.js} +1 -1
  66. package/web-app/dist/assets/{MetricsPage-jDGmdcgg.js → MetricsPage-DJ-gDbfP.js} +1 -1
  67. package/web-app/dist/assets/{NotFoundPage-C_ZO8tLE.js → NotFoundPage-BJh0XVTj.js} +1 -1
  68. package/web-app/dist/assets/{ProjectPage-B5wnurfQ.js → ProjectPage-CAodVUpE.js} +3 -3
  69. package/web-app/dist/assets/{ProjectsPage--EyKt5-D.js → ProjectsPage-m3siS0Rf.js} +1 -1
  70. package/web-app/dist/assets/{SettingsPage-cB0lnfti.js → SettingsPage-CFGgjOvy.js} +1 -1
  71. package/web-app/dist/assets/{ShowcasePage-Dl16FDkK.js → ShowcasePage-Dd9tpSKJ.js} +1 -1
  72. package/web-app/dist/assets/{SystemSettingsPage-BmAXd4V2.js → SystemSettingsPage-DXd0PtTI.js} +1 -1
  73. package/web-app/dist/assets/{TeamsPage-BFkWVOZe.js → TeamsPage-C5KaLIGW.js} +1 -1
  74. package/web-app/dist/assets/{TemplatesPage-Bf2kmEUM.js → TemplatesPage-CDbzE0ZZ.js} +1 -1
  75. package/web-app/dist/assets/{TerminalOutput-BItv9Wa6.js → TerminalOutput-CKG79r_-.js} +1 -1
  76. package/web-app/dist/assets/{activity-Df2Awg6I.js → activity-BaQQRhDp.js} +1 -1
  77. package/web-app/dist/assets/{bell-D-1ztTsJ.js → bell-OeFqvU4e.js} +1 -1
  78. package/web-app/dist/assets/{bot-A4qgZsKi.js → bot-CSxaA0KU.js} +1 -1
  79. package/web-app/dist/assets/{check-BPfFpF0c.js → check-DJml2Xdn.js} +1 -1
  80. package/web-app/dist/assets/{chevron-left-CfSJvmDi.js → chevron-left-DGnt-DtK.js} +1 -1
  81. package/web-app/dist/assets/{circle-alert-wx2d1dzb.js → circle-alert-BV5rVL7K.js} +1 -1
  82. package/web-app/dist/assets/{clock-pQMai6l-.js → clock-CZ7SvULz.js} +1 -1
  83. package/web-app/dist/assets/{cloud-DWL470r6.js → cloud-lkIzrZps.js} +1 -1
  84. package/web-app/dist/assets/{code-xml-BaEQpQLZ.js → code-xml-DzA2wL8F.js} +1 -1
  85. package/web-app/dist/assets/{database-h-N7WkQN.js → database-CLFG5upC.js} +1 -1
  86. package/web-app/dist/assets/{dollar-sign-B5oYiD27.js → dollar-sign-DgWePGsv.js} +1 -1
  87. package/web-app/dist/assets/{file-code-corner-fbTtTy0o.js → file-code-corner-DGQX2bmv.js} +1 -1
  88. package/web-app/dist/assets/{file-plus-PaF6HMo8.js → file-plus-LkaXeYd6.js} +1 -1
  89. package/web-app/dist/assets/{globe-Ct-GlWID.js → globe-rSsEzPYv.js} +1 -1
  90. package/web-app/dist/assets/{hammer-C1oZFX51.js → hammer-CPogONt9.js} +1 -1
  91. package/web-app/dist/assets/{index-C2egrRhz.js → index-DpBLuMuz.js} +3 -3
  92. package/web-app/dist/assets/{layers-Dt5ZK4v2.js → layers-CwFaqidn.js} +1 -1
  93. package/web-app/dist/assets/{loader-circle-DrpMziic.js → loader-circle-C43izEm5.js} +1 -1
  94. package/web-app/dist/assets/{lock-DOez8MmK.js → lock-Bc_Uqxpp.js} +1 -1
  95. package/web-app/dist/assets/{package-ClGIkerr.js → package-BM25lcR-.js} +1 -1
  96. package/web-app/dist/assets/{plus-C004i9ua.js → plus-D0xoiY6N.js} +1 -1
  97. package/web-app/dist/assets/{refresh-cw-Ddfk-7Sy.js → refresh-cw-COI1R5Oo.js} +1 -1
  98. package/web-app/dist/assets/{rotate-ccw-Bu1KgDjS.js → rotate-ccw-BoNZx4xe.js} +1 -1
  99. package/web-app/dist/assets/{scroll-text-3q1lW5pm.js → scroll-text-Cakp8XHd.js} +1 -1
  100. package/web-app/dist/assets/{server-pd6x4HW1.js → server-CjfIlPmE.js} +1 -1
  101. package/web-app/dist/assets/{shield-alert-B9jGJepT.js → shield-alert-BilhziJF.js} +1 -1
  102. package/web-app/dist/assets/{thumbs-up-Cdcc9nQf.js → thumbs-up-CglMrtrt.js} +1 -1
  103. package/web-app/dist/assets/{trash-2-foSojXHK.js → trash-2-B6zVvnoG.js} +1 -1
  104. package/web-app/dist/assets/{trending-down-CTTiqlJ1.js → trending-down-BVhwD9bt.js} +1 -1
  105. package/web-app/dist/assets/{trending-up-B_MgmRAx.js → trending-up-CVJ1ox6c.js} +1 -1
  106. package/web-app/dist/assets/{upload-g6BfALzG.js → upload-DmuR09WL.js} +1 -1
  107. package/web-app/dist/assets/{usePolling-DrHwvzuh.js → usePolling-BTALfO91.js} +1 -1
  108. package/web-app/dist/assets/{user-COp75m7l.js → user-CRdHMZNH.js} +1 -1
  109. 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.17.1
6
+ # Loki Mode v11.17.6
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
 
@@ -200,7 +200,7 @@ This protocol governs **skill module** loading -- task-scoped instruction files
200
200
  <!-- generated:commands -->
201
201
  Commands (generated from `loki-ts/src/cli/registry.ts`; full reference in `docs/CLI-REFERENCE.md`):
202
202
 
203
- `version`, `status`, `doctor`, `provider`, `memory`, `rollback`, `proof`, `wiki`, `control`, `intent`, `kpis`, `report`, `trust`, `crash`, `contract`, `start`, `slack`, `queue`, `issues`, `undo`, `verify-pr`, `answer`, `engine10`, `help`, `chat`, `edit`, `diff`, `models`, `setup`, `quick`, `quickstart`, `init`, `template`, `verify`, `keys`, `review`, `dashboard`, `config`, `mcp`, `acp`, `stop`, `pause`, `resume`, `why`, `next`, `logs`, `ship`, `deploy`, `import`, `github`, `issue`, `ci`, `modernize`, `share`, `assets`, `export`, `notify`, `tour`, `welcome`, `onboard`, `setup-skill`, `self-update`, `remote`, `cockpit`, `code`, `context`, `secrets`, `api`, `sandbox`, `docker`, `web`, `preview`, `telemetry`, `syslog`, `explain`, `docs`, `test`, `bench`, `voice`, `own`, `secure`, `compliance`, `enterprise`, `projects`, `audit`, `cost`, `metrics`, `sentrux`, `magic`, `steer`
203
+ `version`, `status`, `doctor`, `provider`, `memory`, `rollback`, `backup`, `restore`, `proof`, `wiki`, `control`, `intent`, `kpis`, `report`, `trust`, `crash`, `contract`, `start`, `slack`, `queue`, `issues`, `undo`, `verify-pr`, `answer`, `engine10`, `help`, `chat`, `edit`, `diff`, `models`, `setup`, `quick`, `quickstart`, `init`, `template`, `verify`, `keys`, `review`, `dashboard`, `config`, `mcp`, `acp`, `stop`, `pause`, `resume`, `cancel`, `why`, `next`, `logs`, `ship`, `deploy`, `import`, `github`, `issue`, `ci`, `modernize`, `share`, `assets`, `export`, `notify`, `tour`, `welcome`, `onboard`, `setup-skill`, `self-update`, `remote`, `cockpit`, `code`, `context`, `secrets`, `api`, `sandbox`, `docker`, `web`, `preview`, `telemetry`, `syslog`, `explain`, `docs`, `test`, `bench`, `voice`, `own`, `secure`, `compliance`, `enterprise`, `projects`, `audit`, `cost`, `metrics`, `sentrux`, `magic`, `steer`
204
204
  <!-- /generated -->
205
205
 
206
206
  ---
@@ -483,4 +483,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
483
483
 
484
484
  ---
485
485
 
486
- **v11.17.1 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
486
+ **v11.17.6 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 11.17.1
1
+ 11.17.6
package/autonomy/grill.sh CHANGED
@@ -248,8 +248,17 @@ grill_invoke_provider() {
248
248
  _LOKI_PERM_ARGV=(--dangerously-skip-permissions)
249
249
  ! type _loki_claude_permission_argv >/dev/null 2>&1 || _loki_claude_permission_argv
250
250
  local _gr_argv=("${_LOKI_PERM_ARGV[@]}" "--model" "${LOKI_GRILL_MODEL:-sonnet}")
251
- if type loki_subcall_bare_enabled >/dev/null 2>&1 && loki_subcall_bare_enabled; then
252
- _gr_argv+=("--bare")
251
+ # S8: lean child flags (text-only role, no tools/MCP/slash commands) and
252
+ # a ledger line per call via --output-format json (unwrapped below).
253
+ local _gr_lf _gr_ledger=false
254
+ if type loki_lean_child_flags >/dev/null 2>&1; then
255
+ while IFS= read -r _gr_lf; do
256
+ [ -n "$_gr_lf" ] && _gr_argv+=("$_gr_lf")
257
+ done < <(loki_lean_child_flags grill 2>/dev/null)
258
+ fi
259
+ if type loki_child_ledger_append >/dev/null 2>&1; then
260
+ _gr_ledger=true
261
+ _gr_argv+=("--output-format" "json")
253
262
  fi
254
263
  if type loki_review_guard_enabled >/dev/null 2>&1 && loki_review_guard_enabled; then
255
264
  _gr_argv+=("--disallowedTools" "$(loki_review_guard_denylist)")
@@ -264,6 +273,19 @@ grill_invoke_provider() {
264
273
  # _grill_with_timeout, where the first token is exec'd as the command.
265
274
  out="$(printf '%s' "$prompt" \
266
275
  | _grill_with_timeout "${LOKI_GRILL_TIMEOUT:-180}" env CAVEMAN_DEFAULT_MODE=off claude "${_gr_argv[@]}" -p - 2>/dev/null)"
276
+ if [ "$_gr_ledger" = true ] && [ -n "$out" ]; then
277
+ loki_child_ledger_append grill "$out" >/dev/null 2>&1 || true
278
+ out="$(printf '%s' "$out" | python3 -I -c 'import json,sys
279
+ raw = sys.stdin.read()
280
+ try:
281
+ d = json.loads(raw)
282
+ except Exception:
283
+ d = None
284
+ if isinstance(d, list):
285
+ d = next((x for x in reversed(d) if isinstance(x, dict) and x.get("type") == "result"), {})
286
+ # A CLI or stub that ignores --output-format json returns plain text: keep it.
287
+ sys.stdout.write(str(d.get("result", "")) if isinstance(d, dict) else raw)' 2>/dev/null)"
288
+ fi
267
289
  if [ -z "$out" ]; then
268
290
  _grill_err "provider returned no output (timeout or invocation error)"
269
291
  return $GRILL_EXIT_ERROR
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+ # Loki Mode PreCompact Hook - milestone flush
3
+ # Writes a state snapshot to .loki/state/precompact-snapshot.json before the
4
+ # context is compacted. Atomic (tmp + rename). Never fails the session: any
5
+ # error prints a stderr note and exits 0.
6
+
7
+ INPUT=$(cat 2>/dev/null || true)
8
+
9
+ LOKI_HOOK_INPUT="$INPUT" LOKI_HOOK_PWD="$PWD" python3 - <<'PY' || echo "precompact-flush: snapshot failed (ignored)" >&2
10
+ import json, os, sys, tempfile
11
+ from datetime import datetime, timezone
12
+
13
+ try:
14
+ data = json.loads(os.environ.get("LOKI_HOOK_INPUT") or "{}")
15
+ if not isinstance(data, dict):
16
+ data = {}
17
+ except Exception:
18
+ data = {}
19
+
20
+ cwd = data.get("cwd") or os.environ.get("CLAUDE_PROJECT_DIR") or os.environ["LOKI_HOOK_PWD"]
21
+ state_dir = os.path.join(cwd, ".loki", "state")
22
+
23
+
24
+ def load(name):
25
+ try:
26
+ with open(os.path.join(state_dir, name)) as f:
27
+ return json.load(f)
28
+ except Exception:
29
+ return None
30
+
31
+
32
+ snap = {
33
+ "flushed_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
34
+ "event": "PreCompact",
35
+ "session_id": data.get("session_id", ""),
36
+ "trigger": data.get("trigger", ""),
37
+ "orchestrator": load("orchestrator.json"),
38
+ "completion": load("completion.json"),
39
+ }
40
+
41
+ try:
42
+ os.makedirs(state_dir, exist_ok=True)
43
+ fd, tmp = tempfile.mkstemp(prefix=".precompact-snapshot.", dir=state_dir)
44
+ with os.fdopen(fd, "w") as f:
45
+ json.dump(snap, f, indent=2)
46
+ f.write("\n")
47
+ os.replace(tmp, os.path.join(state_dir, "precompact-snapshot.json"))
48
+ except Exception as e:
49
+ print("precompact-flush: write failed: %s (ignored)" % e, file=sys.stderr)
50
+ PY
51
+ exit 0