loki-mode 11.12.1 → 11.15.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/README.md +2 -2
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/lib/backlog.py +18 -3
- package/autonomy/lib/chat.sh +6 -0
- package/autonomy/lib/engine10-push.sh +26 -2
- package/autonomy/lib/proof-generator.py +16 -0
- package/autonomy/lib/trust_trajectory.py +130 -0
- package/autonomy/lib/workspace.py +2 -3
- package/autonomy/loki +262 -58
- package/autonomy/run.sh +39 -15
- package/autonomy/trigger-server.py +452 -29
- package/bin/loki +4 -1
- package/completions/_loki +1 -1
- package/completions/loki.bash +8 -0
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +5 -4
- package/docs/DEPLOYMENT.md +12 -5
- package/docs/EVALUATING.md +13 -0
- package/docs/INSTALLATION.md +2 -2
- package/docs/SIGNED-RECEIPTS.md +7 -0
- package/docs/WORKSPACES.md +2 -2
- package/docs/cost-controls.md +26 -0
- package/docs/merge-queue.md +19 -0
- package/docs/sentry-intake.md +4 -0
- package/docs/slack.md +2 -1
- package/docs/trackers.md +12 -1
- package/docs/v10/BOARD.md +123 -123
- package/docs/v10/CLI-MODERN.md +2 -2
- package/docs/v10/DECISIONS.md +1 -0
- package/docs/v10/ENGINE.md +2 -0
- package/docs/v10/MODERNIZE.md +32 -1
- package/docs/v10/PROGRESS.md +3 -0
- package/loki-ts/dist/loki.js +1221 -1148
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +2486 -2190
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/schemas/loki-yaml.schema.json +5 -0
- package/web-app/dist/assets/{AdminPage-DuT74pf5.js → AdminPage-bZlvH4TL.js} +1 -1
- package/web-app/dist/assets/{Avatar-BtgidR5a.js → Avatar-BZrBstQe.js} +1 -1
- package/web-app/dist/assets/{Badge-D2nt8G_I.js → Badge-Q8l8r4Vq.js} +1 -1
- package/web-app/dist/assets/{Button-BKl2jOyb.js → Button-B8Bt0A3S.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-DaWr0EUX.js → CockpitPage-CIYExrXa.js} +1 -1
- package/web-app/dist/assets/{ComparePage-aIiNhxLr.js → ComparePage-CBOmHdam.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-C1Q7rV23.js → ErrorBoundary-BKwDPSnK.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-C-C0-tOx.js → EvidenceReceiptPanel-KqzjphWl.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-l3IaXDag.js → GitHubIssuesPanel-lF3GkHRv.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-DweLBgr5.js → GitHubPRsPanel-BCzipPWD.js} +1 -1
- package/web-app/dist/assets/{HomePage-B_KK7AvY.js → HomePage-CIdnkzaN.js} +2 -2
- package/web-app/dist/assets/{LoginPage-CKS-KLdH.js → LoginPage-D-178nTT.js} +1 -1
- package/web-app/dist/assets/{MagicPage-Cl6CEp8J.js → MagicPage-BmHuzMT8.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-n9CPUaX0.js → MetricsPage-CPCiyDFn.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-D85eWn70.js → NotFoundPage-B2T6n1gx.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-CDN7LpSo.js → ProjectPage-DQmpFhb0.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-D4SDmU4-.js → ProjectsPage-BmugzFEd.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-Dby6GnKm.js → SettingsPage-ZB-RrmgM.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-CgHxeqoU.js → ShowcasePage-BAhwHt4_.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-BaewGHlc.js → SystemSettingsPage-Bt7sf2Vu.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-905MJyke.js → TeamsPage-B-v5j_8q.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-DMrUHcvF.js → TemplatesPage-bdqUL-LG.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BsbEbBYX.js → TerminalOutput-CRHEXBwS.js} +1 -1
- package/web-app/dist/assets/{activity-BuaXhBsC.js → activity-C-ROkmXt.js} +1 -1
- package/web-app/dist/assets/{bell-BfEQ71OG.js → bell-DbiCBxQA.js} +1 -1
- package/web-app/dist/assets/{bot-DOGeYewg.js → bot-DsIgE_qr.js} +1 -1
- package/web-app/dist/assets/{check-zbjPpb3E.js → check-CkAdmHWP.js} +1 -1
- package/web-app/dist/assets/{chevron-left-DWTOgfFt.js → chevron-left-CYTLivAo.js} +1 -1
- package/web-app/dist/assets/{circle-alert-BEPKfRzR.js → circle-alert-BVIcAsFJ.js} +1 -1
- package/web-app/dist/assets/{clock-C_fX3OHo.js → clock-Dg3Rq0go.js} +1 -1
- package/web-app/dist/assets/{cloud-DUXHygXQ.js → cloud-CenrqHFl.js} +1 -1
- package/web-app/dist/assets/{code-xml-BEVl_9Hw.js → code-xml-C2mvfoug.js} +1 -1
- package/web-app/dist/assets/{database-_a22uh7l.js → database-BKa0_eCb.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-l2en7xfg.js → dollar-sign-DfelUK1S.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-DItKl6H4.js → file-code-corner-CZKWoHVg.js} +1 -1
- package/web-app/dist/assets/{file-plus-BSk7qFMA.js → file-plus-CZ-m1zMX.js} +1 -1
- package/web-app/dist/assets/{globe-2TveFE5l.js → globe-S0kv_GwC.js} +1 -1
- package/web-app/dist/assets/{hammer-BU6OJlQj.js → hammer-BW1MDdu1.js} +1 -1
- package/web-app/dist/assets/{index-DGnZXUYk.js → index-ACEYsTc2.js} +3 -3
- package/web-app/dist/assets/{layers-DKw7MNuq.js → layers-BrXHYZ-L.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CoYfykzD.js → loader-circle-DOdhKFx0.js} +1 -1
- package/web-app/dist/assets/{lock-D9JzrXDL.js → lock-BcFTyg8J.js} +1 -1
- package/web-app/dist/assets/{package-BZtqTIqH.js → package-D34cMVQG.js} +1 -1
- package/web-app/dist/assets/{plus-BGJfo8bV.js → plus-CEaMeBxL.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-F6lowBgR.js → refresh-cw-D2Rzxr5U.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-DHOK8dM4.js → rotate-ccw-C_-EjRLh.js} +1 -1
- package/web-app/dist/assets/{scroll-text-CKcROoMV.js → scroll-text-BSSCMI_c.js} +1 -1
- package/web-app/dist/assets/{server-DbG8MDv6.js → server-BKvLonWt.js} +1 -1
- package/web-app/dist/assets/{shield-alert-RNKNXdJT.js → shield-alert-DbbQbPdW.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-Yxp-UBxS.js → thumbs-up-NoBD1fUR.js} +1 -1
- package/web-app/dist/assets/{trash-2-DY-eba1n.js → trash-2-BXz8rAyd.js} +1 -1
- package/web-app/dist/assets/{trending-down-CARiDB3t.js → trending-down-D8u535Re.js} +1 -1
- package/web-app/dist/assets/{trending-up-brQqWbA3.js → trending-up-q8k3kgiy.js} +1 -1
- package/web-app/dist/assets/{upload-D6wRjKhz.js → upload-Cp7_zeBI.js} +1 -1
- package/web-app/dist/assets/{usePolling-BMrqNbAI.js → usePolling-CTHVdcuX.js} +1 -1
- package/web-app/dist/assets/{user-CK5-EXIj.js → user-DF7bfSf_.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/autonomy/lib/doctor-fix.py +0 -279
package/autonomy/run.sh
CHANGED
|
@@ -28292,6 +28292,41 @@ check_human_intervention() {
|
|
|
28292
28292
|
}
|
|
28293
28293
|
|
|
28294
28294
|
# Handle pause state - wait for resume
|
|
28295
|
+
# Writes .loki/state/interventions.json. Mirrors loki-ts/src/runner/intervention.ts
|
|
28296
|
+
# (count, basis, by_type enum counts, waited_s). Modes: "count" bumps count and
|
|
28297
|
+
# the by_type bucket inferred from the signal files; "waited <secs>" adds
|
|
28298
|
+
# wall-clock blocked seconds (an upper bound on human attention, not active
|
|
28299
|
+
# minutes). Best-effort: never fails a run.
|
|
28300
|
+
_loki_iv_record() {
|
|
28301
|
+
local loki_dir="$1" mode="$2" secs="${3:-0}" iv_type="authorization"
|
|
28302
|
+
[ -n "$loki_dir" ] || return 0
|
|
28303
|
+
if [ -e "$loki_dir/HUMAN_INPUT.md" ]; then iv_type="input"
|
|
28304
|
+
elif [ -e "$loki_dir/signals/GATE_ESCALATION" ] || [ -e "$loki_dir/signals/COUNCIL_REVIEW_REQUESTED" ]; then iv_type="repair"
|
|
28305
|
+
elif [ -e "$loki_dir/signals/BUDGET_EXCEEDED" ]; then iv_type="steer"
|
|
28306
|
+
fi
|
|
28307
|
+
mkdir -p "$loki_dir/state" 2>/dev/null || true
|
|
28308
|
+
python3 -I -c 'import json,sys
|
|
28309
|
+
p,mode,secs,t=sys.argv[1:5]
|
|
28310
|
+
def n(v):
|
|
28311
|
+
return v if isinstance(v,int) and not isinstance(v,bool) and v>=0 else 0
|
|
28312
|
+
try:
|
|
28313
|
+
d=json.load(open(p))
|
|
28314
|
+
if not isinstance(d,dict): d={}
|
|
28315
|
+
except Exception:
|
|
28316
|
+
d={}
|
|
28317
|
+
if mode=="waited" and not d:
|
|
28318
|
+
sys.exit(0)
|
|
28319
|
+
bt=d.get("by_type") if isinstance(d.get("by_type"),dict) else {}
|
|
28320
|
+
out={k:n(bt.get(k)) for k in ("steer","input","authorization","repair")}
|
|
28321
|
+
if mode=="count":
|
|
28322
|
+
out[t]+=1
|
|
28323
|
+
d["count"]=n(d.get("count"))+1
|
|
28324
|
+
d["basis"]="blocking pauses that waited on a human"
|
|
28325
|
+
d["by_type"]=out
|
|
28326
|
+
d["waited_s"]=n(d.get("waited_s"))+(int(secs) if mode=="waited" else 0)
|
|
28327
|
+
open(p,"w").write(json.dumps(d)+"\n")' "$loki_dir/state/interventions.json" "$mode" "$secs" "$iv_type" 2>/dev/null || true
|
|
28328
|
+
}
|
|
28329
|
+
|
|
28295
28330
|
handle_pause() {
|
|
28296
28331
|
# BUG-ST-007: Guard against concurrent pause handler execution
|
|
28297
28332
|
if [ "${_PAUSE_IN_PROGRESS:-0}" -eq 1 ]; then
|
|
@@ -28312,21 +28347,8 @@ handle_pause() {
|
|
|
28312
28347
|
#
|
|
28313
28348
|
# proof-generator reads this; when the file is absent the receipt renders NO
|
|
28314
28349
|
# interventions row rather than claiming zero. Best-effort: never fail a run.
|
|
28315
|
-
|
|
28316
|
-
|
|
28317
|
-
local _iv_file="$loki_dir/state/interventions.json"
|
|
28318
|
-
local _iv_prev=0
|
|
28319
|
-
if [ -f "$_iv_file" ]; then
|
|
28320
|
-
_iv_prev=$(python3 -c "import json,sys
|
|
28321
|
-
try:
|
|
28322
|
-
v=json.load(open(sys.argv[1])).get('count')
|
|
28323
|
-
print(int(v) if isinstance(v,int) and v>=0 else 0)
|
|
28324
|
-
except Exception:
|
|
28325
|
-
print(0)" "$_iv_file" 2>/dev/null || echo 0)
|
|
28326
|
-
fi
|
|
28327
|
-
printf '{"count":%s,"basis":"blocking pauses that waited on a human"}\n' \
|
|
28328
|
-
"$(( _iv_prev + 1 ))" > "$_iv_file" 2>/dev/null || true
|
|
28329
|
-
fi
|
|
28350
|
+
local _iv_t0=$SECONDS
|
|
28351
|
+
_loki_iv_record "$loki_dir" count
|
|
28330
28352
|
|
|
28331
28353
|
# Save state before pausing so it persists across potential crashes
|
|
28332
28354
|
save_state ${RETRY_COUNT:-0} "paused" 0
|
|
@@ -28426,6 +28448,7 @@ except Exception:
|
|
|
28426
28448
|
# Check for stop signal
|
|
28427
28449
|
if [ -f "$loki_dir/STOP" ]; then
|
|
28428
28450
|
rm -f "$loki_dir/STOP" "$loki_dir/PAUSED.md"
|
|
28451
|
+
_loki_iv_record "$loki_dir" waited "$(( SECONDS - ${_iv_t0:-$SECONDS} ))" 2>/dev/null || true
|
|
28429
28452
|
PAUSED=false
|
|
28430
28453
|
_PAUSE_IN_PROGRESS=0
|
|
28431
28454
|
return 1
|
|
@@ -28471,6 +28494,7 @@ except Exception:
|
|
|
28471
28494
|
done
|
|
28472
28495
|
|
|
28473
28496
|
rm -f "$loki_dir/PAUSED.md"
|
|
28497
|
+
_loki_iv_record "$loki_dir" waited "$(( SECONDS - ${_iv_t0:-$SECONDS} ))" 2>/dev/null || true
|
|
28474
28498
|
log_info "Resuming execution..."
|
|
28475
28499
|
PAUSED=false
|
|
28476
28500
|
_PAUSE_IN_PROGRESS=0
|