loki-mode 9.71.0 → 9.73.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/completion-council.sh +20 -3
- package/autonomy/run.sh +5 -2
- package/dashboard/__init__.py +1 -1
- package/dashboard/server.py +4 -0
- package/dashboard/static/cost.html +6 -1
- package/dashboard/static/index.html +113 -101
- package/dashboard/static/proofs.html +6 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/ARCHITECT-CUTS.md +245 -0
- package/docs/v10/BOARD.md +45 -25
- package/docs/v10/TODO.md +3 -1
- package/loki-ts/dist/loki.js +2 -2
- package/mcp/__init__.py +1 -1
- package/package.json +1 -1
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-5-i7dYRv.js → AdminPage-B11jqriL.js} +1 -1
- package/web-app/dist/assets/{Avatar-DOgXkiA5.js → Avatar-vmIEiL2U.js} +1 -1
- package/web-app/dist/assets/{Badge-BBCAEx-v.js → Badge-DxtrDGcl.js} +1 -1
- package/web-app/dist/assets/{Button-mrjJiIzX.js → Button-BiPlRkkg.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-DO1BqQtR.js → CockpitPage-DXKAc0jc.js} +1 -1
- package/web-app/dist/assets/{ComparePage-CttX-p4A.js → ComparePage-B4ddvt9J.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-DrXZPl7W.js → ErrorBoundary-BIJy59N_.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DsHfSljL.js → EvidenceReceiptPanel-C4-Phh1f.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-DXDCz06W.js → GitHubIssuesPanel-CVIG0uwi.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-3qECbDiA.js → GitHubPRsPanel-B_VHTB-t.js} +1 -1
- package/web-app/dist/assets/{HomePage-vb55Jnnw.js → HomePage-cxONjTSm.js} +2 -2
- package/web-app/dist/assets/{LoginPage-C1wouCAg.js → LoginPage-D49p6aVy.js} +1 -1
- package/web-app/dist/assets/{MagicPage-Ccf2TzsX.js → MagicPage-C5GUEIuM.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-DxpjKBlD.js → MetricsPage-I-OXi9kG.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-BjesliCI.js → NotFoundPage-Do19cbOP.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-OLJv91Fm.js → ProjectPage-TRyzTIFH.js} +69 -69
- package/web-app/dist/assets/ProjectsPage-BLSDhtVb.js +6 -0
- package/web-app/dist/assets/{SettingsPage-B92ofTn5.js → SettingsPage-BvixtAw7.js} +1 -1
- package/web-app/dist/assets/ShowcasePage-By96BMJz.js +1 -0
- package/web-app/dist/assets/{SystemSettingsPage-DQ7y1jJw.js → SystemSettingsPage-AvVujpIo.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-DvI2Ysar.js → TeamsPage-BiT3N4px.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-qkFTI361.js → TemplatesPage-Y_m-dzfd.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-Bbi5Qsu1.js → TerminalOutput-oPTCcEGy.js} +1 -1
- package/web-app/dist/assets/{activity-B6_UNFP3.js → activity-DCa9Pi7k.js} +1 -1
- package/web-app/dist/assets/{bell-D9bRY83l.js → bell-Br7Xsjam.js} +1 -1
- package/web-app/dist/assets/{bot-B9XE8rVE.js → bot-BsQKlSP5.js} +1 -1
- package/web-app/dist/assets/{check-CIlNFVu7.js → check-Cb49hCzQ.js} +1 -1
- package/web-app/dist/assets/{chevron-left-sqTwkCti.js → chevron-left-Cs63FOmY.js} +1 -1
- package/web-app/dist/assets/{circle-alert-ClR-8eiz.js → circle-alert-C8A636Wl.js} +1 -1
- package/web-app/dist/assets/{clock-DhrLudbQ.js → clock-DhlnHjQI.js} +1 -1
- package/web-app/dist/assets/{cloud-CbY5ijES.js → cloud-uOYQxGRY.js} +1 -1
- package/web-app/dist/assets/{code-xml-DGN0zQOT.js → code-xml-9O9XlVo9.js} +1 -1
- package/web-app/dist/assets/{database-CFkV71Ae.js → database-D9Oek2JS.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-t0__nc7_.js → dollar-sign-CHetUBPR.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-V4yaRoxs.js → file-code-corner-oTJV_ce4.js} +1 -1
- package/web-app/dist/assets/{file-plus-BTdcA9zR.js → file-plus-vuloOqQB.js} +1 -1
- package/web-app/dist/assets/{globe-DJ8UlFt2.js → globe-DMVdf8bk.js} +1 -1
- package/web-app/dist/assets/{hammer-DSpaXtqP.js → hammer-15WRQJ1o.js} +1 -1
- package/web-app/dist/assets/index-Cx7e1d6w.css +1 -0
- package/web-app/dist/assets/{index-aYgURGFC.js → index-SRKz3Imw.js} +2 -2
- package/web-app/dist/assets/{layers-cbPS7UG9.js → layers-C-QQQP9K.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CciQSsBx.js → loader-circle-DqoJevCK.js} +1 -1
- package/web-app/dist/assets/{lock-JtWoEayV.js → lock-B68yfqau.js} +1 -1
- package/web-app/dist/assets/{package-Dcv0g9iv.js → package-DAxTtm-S.js} +1 -1
- package/web-app/dist/assets/{plus-R_7Xr4PC.js → plus-BSbdI5QI.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-6MdZdvHz.js → refresh-cw-DlvFuI3J.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Dcteu0jr.js → rotate-ccw-BF03pKE0.js} +1 -1
- package/web-app/dist/assets/{scroll-text-Xcw2I15b.js → scroll-text-QFZ1JdTD.js} +1 -1
- package/web-app/dist/assets/{server-BhMeLqV8.js → server-tyIvmSke.js} +1 -1
- package/web-app/dist/assets/{shield-alert-Y7birYk_.js → shield-alert-DHeqbtBK.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-B9I1RzAj.js → thumbs-up-CRag1Tn5.js} +1 -1
- package/web-app/dist/assets/{trash-2-FrJ_zeQ_.js → trash-2-B0n4x-Ds.js} +1 -1
- package/web-app/dist/assets/{trending-down-DA-YY1yX.js → trending-down-DC4Aqzso.js} +1 -1
- package/web-app/dist/assets/{trending-up-CC7ghXOa.js → trending-up-DFG157ke.js} +1 -1
- package/web-app/dist/assets/{upload-Btyqt4Cn.js → upload-BdWQ4cWx.js} +1 -1
- package/web-app/dist/assets/{usePolling-CTqGbMeS.js → usePolling-DMgD-dJ5.js} +1 -1
- package/web-app/dist/assets/{user-AWsEaMJm.js → user-DXaZeAe4.js} +1 -1
- package/web-app/dist/index.html +2 -2
- package/web-app/dist/assets/ProjectsPage-Bd0VWUNT.js +0 -6
- package/web-app/dist/assets/ShowcasePage-Ben4Ud4y.js +0 -1
- package/web-app/dist/assets/index-BfQ0f3-S.css +0 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: Autonomous spec-driven build system with a built-in trust layer. It does not call work done until it is verified (RARV-C closure loop, 8 quality gates, completion council, verified-completion evidence gate). Triggers on "Loki Mode". Takes a spec (PRD, GitHub issue, OpenAPI doc, etc.) to deployed product with minimal human intervention. Provider-agnostic. Requires --dangerously-skip-permissions flag.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v9.
|
|
6
|
+
# Loki Mode v9.73.0
|
|
7
7
|
|
|
8
8
|
**You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
|
|
9
9
|
|
|
@@ -470,4 +470,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
470
470
|
|
|
471
471
|
---
|
|
472
472
|
|
|
473
|
-
**v9.
|
|
473
|
+
**v9.73.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
9.
|
|
1
|
+
9.73.0
|
|
@@ -3742,11 +3742,19 @@ except (json.JSONDecodeError, IOError, KeyError, ValueError):
|
|
|
3742
3742
|
runner = d.get('runner', 'none')
|
|
3743
3743
|
passed = d.get('pass')
|
|
3744
3744
|
status = d.get('status', '')
|
|
3745
|
+
# S-157 (BACKLOG 89): same failed-count rule as council_evidence_gate. A
|
|
3746
|
+
# numeric failed_count above zero is a failure whatever pass says; legacy
|
|
3747
|
+
# numeric failed is the fallback; null, missing or a bool is unmeasured.
|
|
3748
|
+
def _count(v):
|
|
3749
|
+
return v if isinstance(v, (int, float)) and not isinstance(v, bool) else None
|
|
3750
|
+
failed_n = _count(d.get('failed_count'))
|
|
3751
|
+
if failed_n is None:
|
|
3752
|
+
failed_n = _count(d.get('failed'))
|
|
3745
3753
|
if status == 'no_tests_run':
|
|
3746
3754
|
print('inconclusive:%s' % runner)
|
|
3747
3755
|
elif runner == 'none':
|
|
3748
3756
|
print('pass:none')
|
|
3749
|
-
elif passed is False:
|
|
3757
|
+
elif passed is False or (failed_n or 0) > 0:
|
|
3750
3758
|
print('fail:%s' % runner)
|
|
3751
3759
|
elif passed is not True:
|
|
3752
3760
|
print('inconclusive:%s' % runner)
|
|
@@ -4602,9 +4610,18 @@ runner = d.get('runner', 'none')
|
|
|
4602
4610
|
passed = d.get('pass')
|
|
4603
4611
|
# Affirmative green requires a REAL suite (runner != none) that recorded a
|
|
4604
4612
|
# boolean True pass. A missing/null/non-boolean pass key or a zero-test run
|
|
4605
|
-
# (status no_tests_run) is inconclusive, which is not green.
|
|
4613
|
+
# (status no_tests_run) is inconclusive, which is not green. S-157 (BACKLOG
|
|
4614
|
+
# 98): a recorded failure count above zero is never green, by the same rule
|
|
4615
|
+
# as council_evidence_gate (numeric failed_count wins, legacy numeric failed
|
|
4616
|
+
# is the fallback, null/missing/bool is unmeasured).
|
|
4617
|
+
def _count(v):
|
|
4618
|
+
return v if isinstance(v, (int, float)) and not isinstance(v, bool) else None
|
|
4619
|
+
failed_n = _count(d.get('failed_count'))
|
|
4620
|
+
if failed_n is None:
|
|
4621
|
+
failed_n = _count(d.get('failed'))
|
|
4606
4622
|
print('yes' if (runner != 'none' and passed is True
|
|
4607
|
-
and d.get('status') != 'no_tests_run'
|
|
4623
|
+
and d.get('status') != 'no_tests_run'
|
|
4624
|
+
and (failed_n or 0) <= 0) else 'no')
|
|
4608
4625
|
" 2>/dev/null || echo "no")
|
|
4609
4626
|
[ "$tr_state" = "yes" ] || return 1
|
|
4610
4627
|
|
package/autonomy/run.sh
CHANGED
|
@@ -21378,14 +21378,17 @@ PYEOF
|
|
|
21378
21378
|
# v6.83.0 Phase 1: RARV-C REFLECT/VERIFY shadow-write. Only when both
|
|
21379
21379
|
# managed flags are on AND the episode meets the consolidation importance
|
|
21380
21380
|
# threshold (>= 0.6). Fully non-blocking (backgrounded subprocess).
|
|
21381
|
-
|
|
21381
|
+
# S-156: skip when PROJECT_DIR is empty (bash 3.2 `cd ""` succeeds and
|
|
21382
|
+
# would run a memory package from the cwd), and pass importance via argv.
|
|
21383
|
+
if [ -n "${PROJECT_DIR:-}" ] \
|
|
21384
|
+
&& [ "$LOKI_MANAGED_AGENTS" = "true" ] && [ "$LOKI_MANAGED_MEMORY" = "true" ] \
|
|
21382
21385
|
&& [ -s "$episode_path_file" ]; then
|
|
21383
21386
|
local _ep_path _ep_imp
|
|
21384
21387
|
_ep_path=$(python3 -c "import json,sys; d=json.load(open(sys.argv[1])); print(d.get('path',''))" "$episode_path_file" 2>/dev/null || echo "")
|
|
21385
21388
|
_ep_imp=$(python3 -c "import json,sys; d=json.load(open(sys.argv[1])); print(d.get('importance',0.0))" "$episode_path_file" 2>/dev/null || echo "0")
|
|
21386
21389
|
if [ -n "$_ep_path" ] && [ -f "$_ep_path" ]; then
|
|
21387
21390
|
local _above_threshold
|
|
21388
|
-
_above_threshold=$(python3 -c
|
|
21391
|
+
_above_threshold=$(python3 -c 'import sys; print("yes" if float(sys.argv[1]) >= 0.6 else "no")' "$_ep_imp" 2>/dev/null || echo "no")
|
|
21389
21392
|
if [ "$_above_threshold" = "yes" ]; then
|
|
21390
21393
|
(
|
|
21391
21394
|
cd "$PROJECT_DIR" 2>/dev/null && \
|
package/dashboard/__init__.py
CHANGED
package/dashboard/server.py
CHANGED
|
@@ -8352,6 +8352,8 @@ def _compute_cost_timeline() -> dict:
|
|
|
8352
8352
|
"generated_at": data.get("generated_at"),
|
|
8353
8353
|
"model": (data.get("provider") or {}).get("model"),
|
|
8354
8354
|
"cost_usd": round(run_cost_num, 6) if run_cost_num is not None else None,
|
|
8355
|
+
# A partly priced run's cost is a lower bound (efficiency_cost.py).
|
|
8356
|
+
"cost_partial": (data.get("cost") or {}).get("cost_partial") is True,
|
|
8355
8357
|
"files_changed": (data.get("files_changed") or {}).get("count"),
|
|
8356
8358
|
"final_verdict": (data.get("council") or {}).get("final_verdict"),
|
|
8357
8359
|
})
|
|
@@ -12536,6 +12538,8 @@ async def list_proofs():
|
|
|
12536
12538
|
"generated_at": data.get("generated_at"),
|
|
12537
12539
|
"loki_version": data.get("loki_version"),
|
|
12538
12540
|
"cost_usd": (data.get("cost") or {}).get("usd"),
|
|
12541
|
+
# A partly priced run's cost is a lower bound (efficiency_cost.py).
|
|
12542
|
+
"cost_partial": (data.get("cost") or {}).get("cost_partial") is True,
|
|
12539
12543
|
"files_changed": (data.get("files_changed") or {}).get("count"),
|
|
12540
12544
|
"final_verdict": (data.get("council") or {}).get("final_verdict"),
|
|
12541
12545
|
"headline": headline,
|
|
@@ -147,6 +147,11 @@
|
|
|
147
147
|
function orNotRecorded(v) {
|
|
148
148
|
return (v === null || v === undefined) ? "not recorded" : esc(v);
|
|
149
149
|
}
|
|
150
|
+
// A partly priced run's cost is a lower bound; say so only when a number prints.
|
|
151
|
+
function atLeastUsd(n, partial) {
|
|
152
|
+
var s = fmtUsd(n);
|
|
153
|
+
return (partial === true && s.charAt(0) === "$") ? "at least " + s : s;
|
|
154
|
+
}
|
|
150
155
|
function badgeClass(v) {
|
|
151
156
|
v = String(v || "").toUpperCase();
|
|
152
157
|
if (v.indexOf("APPROVE") === 0 || v === "PASS" || v === "PASSED") return "b-approve";
|
|
@@ -296,7 +301,7 @@
|
|
|
296
301
|
'<td class="mono">' + esc(p.model || "") + '</td>' +
|
|
297
302
|
'<td class="num">' + (p.files_changed === null || p.files_changed === undefined ? "" : esc(p.files_changed)) + '</td>' +
|
|
298
303
|
'<td>' + verdict + '</td>' +
|
|
299
|
-
'<td class="num mono">' +
|
|
304
|
+
'<td class="num mono">' + atLeastUsd(p.cost_usd, p.cost_partial) + '</td></tr>';
|
|
300
305
|
}
|
|
301
306
|
html += '<table><thead><tr>' +
|
|
302
307
|
'<th>Run</th><th>When</th><th>Model</th><th class="num">Files</th>' +
|