loki-mode 11.17.1 → 11.17.5
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 +3 -3
- package/VERSION +1 -1
- package/autonomy/grill.sh +24 -2
- package/autonomy/hooks/precompact-flush.sh +51 -0
- package/autonomy/hooks/validate-bash.sh +895 -5
- package/autonomy/lib/chat.sh +8 -3
- package/autonomy/lib/claude-flags.sh +143 -6
- package/autonomy/lib/claude_permissions.py +24 -4
- package/autonomy/lib/decision_record.py +92 -3
- package/autonomy/lib/efficiency_cost.py +102 -0
- package/autonomy/lib/modernize/py_capture.py +62 -3
- package/autonomy/lib/prd-enrich.sh +28 -2
- package/autonomy/lib/voter-agents.sh +61 -6
- package/autonomy/lib/wiki-generator.py +58 -10
- package/autonomy/lib/wiki_llm.py +41 -2
- package/autonomy/loki +391 -28
- package/autonomy/quickstart.sh +1 -1
- package/autonomy/run.sh +201 -10
- package/autonomy/trigger-server.py +70 -2
- package/completions/_loki +3 -0
- package/completions/loki.bash +2 -1
- package/dashboard/__init__.py +1 -1
- package/dashboard/audit.py +204 -17
- package/docs/CLI-REFERENCE.md +4 -1
- package/docs/EVALUATING.md +2 -2
- package/docs/INSTALLATION.md +1 -1
- package/docs/environment-variables.md +1 -0
- package/docs/trackers.md +6 -0
- package/docs/v10/BOARD.md +2 -1
- package/docs/v10/CLI-MODERN.md +8 -5
- package/docs/v10/DECISIONS.md +16 -1
- package/docs/v10/ENGINE.md +1 -0
- package/docs/v10/FAILURE-CLASSES.md +60 -1
- package/docs/v10/FOUNDER-QUEUE.md +1 -0
- package/docs/v10/GUIDE-MODERNIZE.md +9 -4
- package/docs/v10/PLAN-V12.md +896 -0
- package/docs/v10/PROGRESS.md +7 -0
- package/docs/v11/COST-HALF.md +3 -1
- package/docs/visual-evidence.md +2 -0
- package/loki-ts/dist/loki.js +1104 -1057
- package/mcp/__init__.py +1 -1
- package/memory/retrieval.py +15 -3
- package/memory/schemas.py +43 -1
- package/memory/storage.py +11 -0
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +989 -693
- package/packages/control-plane/src/server/legacy/routes-control.ts +5 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/providers/claude.sh +1 -0
- package/providers/loader.sh +26 -0
- package/providers/model_routes.sh +31 -0
- package/src/policies/claude_permissions.js +20 -2
- package/web-app/dist/assets/{AdminPage-OVzN6eLm.js → AdminPage-C0v2p3jN.js} +1 -1
- package/web-app/dist/assets/{Avatar-hCCrxrCZ.js → Avatar-Cgc0QepK.js} +1 -1
- package/web-app/dist/assets/{Badge-CDcpkhbJ.js → Badge-1X4wQ0sU.js} +1 -1
- package/web-app/dist/assets/{Button-8mwWlhEu.js → Button-CG79n6-I.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-D8cf3u22.js → CockpitPage-rSw2BTKk.js} +1 -1
- package/web-app/dist/assets/{ComparePage-CIgkbDRY.js → ComparePage-B9EVp__S.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-99kJH9g2.js → ErrorBoundary-DLQKY8LF.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-C9fj32eS.js → EvidenceReceiptPanel-DE0L1L2Q.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-De43YQ_C.js → GitHubIssuesPanel-DlKtYrtk.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-7g7ZTnkx.js → GitHubPRsPanel-C5c5tY3x.js} +1 -1
- package/web-app/dist/assets/{HomePage-CcNA24ny.js → HomePage-ob1natMp.js} +2 -2
- package/web-app/dist/assets/{LoginPage-BYjlb-IK.js → LoginPage-CCQBgvzB.js} +1 -1
- package/web-app/dist/assets/{MagicPage-C0Dwt9Na.js → MagicPage-CKSuC0Pp.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-jDGmdcgg.js → MetricsPage-nq_ygAuG.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-C_ZO8tLE.js → NotFoundPage-B6gVLTAn.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-B5wnurfQ.js → ProjectPage-pUnvGriO.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage--EyKt5-D.js → ProjectsPage-DMFPGLkE.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-cB0lnfti.js → SettingsPage-DAB_cp87.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-Dl16FDkK.js → ShowcasePage-DTsx_XxI.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-BmAXd4V2.js → SystemSettingsPage-C2UUqWhW.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-BFkWVOZe.js → TeamsPage-C4Sws9U7.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-Bf2kmEUM.js → TemplatesPage-B1-79O4n.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BItv9Wa6.js → TerminalOutput-CDSVt5TB.js} +1 -1
- package/web-app/dist/assets/{activity-Df2Awg6I.js → activity-CBEULbio.js} +1 -1
- package/web-app/dist/assets/{bell-D-1ztTsJ.js → bell-Dp-j77Qo.js} +1 -1
- package/web-app/dist/assets/{bot-A4qgZsKi.js → bot-Dh1FlTEJ.js} +1 -1
- package/web-app/dist/assets/{check-BPfFpF0c.js → check-C_7N7W4q.js} +1 -1
- package/web-app/dist/assets/{chevron-left-CfSJvmDi.js → chevron-left-DtZJiu3T.js} +1 -1
- package/web-app/dist/assets/{circle-alert-wx2d1dzb.js → circle-alert-CJK4sNof.js} +1 -1
- package/web-app/dist/assets/{clock-pQMai6l-.js → clock--0bfAUkP.js} +1 -1
- package/web-app/dist/assets/{cloud-DWL470r6.js → cloud-CRa9nwiN.js} +1 -1
- package/web-app/dist/assets/{code-xml-BaEQpQLZ.js → code-xml-4gRrVGxx.js} +1 -1
- package/web-app/dist/assets/{database-h-N7WkQN.js → database-C-A2USGl.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-B5oYiD27.js → dollar-sign-BshJt4ML.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-fbTtTy0o.js → file-code-corner-Bd--i_IM.js} +1 -1
- package/web-app/dist/assets/{file-plus-PaF6HMo8.js → file-plus-YiNg-aWn.js} +1 -1
- package/web-app/dist/assets/{globe-Ct-GlWID.js → globe-CfyHbAbI.js} +1 -1
- package/web-app/dist/assets/{hammer-C1oZFX51.js → hammer-BlGC-yqz.js} +1 -1
- package/web-app/dist/assets/{index-C2egrRhz.js → index-BlCg8mla.js} +3 -3
- package/web-app/dist/assets/{layers-Dt5ZK4v2.js → layers-DLiA0AcW.js} +1 -1
- package/web-app/dist/assets/{loader-circle-DrpMziic.js → loader-circle-CkOfS_Q6.js} +1 -1
- package/web-app/dist/assets/{lock-DOez8MmK.js → lock-C5vRE8HM.js} +1 -1
- package/web-app/dist/assets/{package-ClGIkerr.js → package-BPzp43h4.js} +1 -1
- package/web-app/dist/assets/{plus-C004i9ua.js → plus-C4x6sD5J.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-Ddfk-7Sy.js → refresh-cw-DZn-gB9J.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Bu1KgDjS.js → rotate-ccw-rH63YhnY.js} +1 -1
- package/web-app/dist/assets/{scroll-text-3q1lW5pm.js → scroll-text-DTvZMQuh.js} +1 -1
- package/web-app/dist/assets/{server-pd6x4HW1.js → server-DmwCdhKT.js} +1 -1
- package/web-app/dist/assets/{shield-alert-B9jGJepT.js → shield-alert-Dn5Rtkhx.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-Cdcc9nQf.js → thumbs-up-D_lHdH-1.js} +1 -1
- package/web-app/dist/assets/{trash-2-foSojXHK.js → trash-2-CVfeP0Fb.js} +1 -1
- package/web-app/dist/assets/{trending-down-CTTiqlJ1.js → trending-down-ouPrjBEm.js} +1 -1
- package/web-app/dist/assets/{trending-up-B_MgmRAx.js → trending-up-7H96_KlR.js} +1 -1
- package/web-app/dist/assets/{upload-g6BfALzG.js → upload-kTTgyfD6.js} +1 -1
- package/web-app/dist/assets/{usePolling-DrHwvzuh.js → usePolling-BFIMPvNM.js} +1 -1
- package/web-app/dist/assets/{user-COp75m7l.js → user-UDo6EQfn.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.17.
|
|
6
|
+
# Loki Mode v11.17.5
|
|
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.
|
|
486
|
+
**v11.17.5 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.17.
|
|
1
|
+
11.17.5
|
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
|
-
|
|
252
|
-
|
|
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
|