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.
Files changed (97) hide show
  1. package/README.md +2 -2
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/lib/backlog.py +18 -3
  5. package/autonomy/lib/chat.sh +6 -0
  6. package/autonomy/lib/engine10-push.sh +26 -2
  7. package/autonomy/lib/proof-generator.py +16 -0
  8. package/autonomy/lib/trust_trajectory.py +130 -0
  9. package/autonomy/lib/workspace.py +2 -3
  10. package/autonomy/loki +262 -58
  11. package/autonomy/run.sh +39 -15
  12. package/autonomy/trigger-server.py +452 -29
  13. package/bin/loki +4 -1
  14. package/completions/_loki +1 -1
  15. package/completions/loki.bash +8 -0
  16. package/dashboard/__init__.py +1 -1
  17. package/docs/CLI-REFERENCE.md +5 -4
  18. package/docs/DEPLOYMENT.md +12 -5
  19. package/docs/EVALUATING.md +13 -0
  20. package/docs/INSTALLATION.md +2 -2
  21. package/docs/SIGNED-RECEIPTS.md +7 -0
  22. package/docs/WORKSPACES.md +2 -2
  23. package/docs/cost-controls.md +26 -0
  24. package/docs/merge-queue.md +19 -0
  25. package/docs/sentry-intake.md +4 -0
  26. package/docs/slack.md +2 -1
  27. package/docs/trackers.md +12 -1
  28. package/docs/v10/BOARD.md +123 -123
  29. package/docs/v10/CLI-MODERN.md +2 -2
  30. package/docs/v10/DECISIONS.md +1 -0
  31. package/docs/v10/ENGINE.md +2 -0
  32. package/docs/v10/MODERNIZE.md +32 -1
  33. package/docs/v10/PROGRESS.md +3 -0
  34. package/loki-ts/dist/loki.js +1221 -1148
  35. package/mcp/__init__.py +1 -1
  36. package/package.json +2 -2
  37. package/packages/control-plane/dist/server.js +2486 -2190
  38. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  39. package/schemas/loki-yaml.schema.json +5 -0
  40. package/web-app/dist/assets/{AdminPage-DuT74pf5.js → AdminPage-bZlvH4TL.js} +1 -1
  41. package/web-app/dist/assets/{Avatar-BtgidR5a.js → Avatar-BZrBstQe.js} +1 -1
  42. package/web-app/dist/assets/{Badge-D2nt8G_I.js → Badge-Q8l8r4Vq.js} +1 -1
  43. package/web-app/dist/assets/{Button-BKl2jOyb.js → Button-B8Bt0A3S.js} +1 -1
  44. package/web-app/dist/assets/{CockpitPage-DaWr0EUX.js → CockpitPage-CIYExrXa.js} +1 -1
  45. package/web-app/dist/assets/{ComparePage-aIiNhxLr.js → ComparePage-CBOmHdam.js} +1 -1
  46. package/web-app/dist/assets/{ErrorBoundary-C1Q7rV23.js → ErrorBoundary-BKwDPSnK.js} +1 -1
  47. package/web-app/dist/assets/{EvidenceReceiptPanel-C-C0-tOx.js → EvidenceReceiptPanel-KqzjphWl.js} +1 -1
  48. package/web-app/dist/assets/{GitHubIssuesPanel-l3IaXDag.js → GitHubIssuesPanel-lF3GkHRv.js} +1 -1
  49. package/web-app/dist/assets/{GitHubPRsPanel-DweLBgr5.js → GitHubPRsPanel-BCzipPWD.js} +1 -1
  50. package/web-app/dist/assets/{HomePage-B_KK7AvY.js → HomePage-CIdnkzaN.js} +2 -2
  51. package/web-app/dist/assets/{LoginPage-CKS-KLdH.js → LoginPage-D-178nTT.js} +1 -1
  52. package/web-app/dist/assets/{MagicPage-Cl6CEp8J.js → MagicPage-BmHuzMT8.js} +1 -1
  53. package/web-app/dist/assets/{MetricsPage-n9CPUaX0.js → MetricsPage-CPCiyDFn.js} +1 -1
  54. package/web-app/dist/assets/{NotFoundPage-D85eWn70.js → NotFoundPage-B2T6n1gx.js} +1 -1
  55. package/web-app/dist/assets/{ProjectPage-CDN7LpSo.js → ProjectPage-DQmpFhb0.js} +3 -3
  56. package/web-app/dist/assets/{ProjectsPage-D4SDmU4-.js → ProjectsPage-BmugzFEd.js} +1 -1
  57. package/web-app/dist/assets/{SettingsPage-Dby6GnKm.js → SettingsPage-ZB-RrmgM.js} +1 -1
  58. package/web-app/dist/assets/{ShowcasePage-CgHxeqoU.js → ShowcasePage-BAhwHt4_.js} +1 -1
  59. package/web-app/dist/assets/{SystemSettingsPage-BaewGHlc.js → SystemSettingsPage-Bt7sf2Vu.js} +1 -1
  60. package/web-app/dist/assets/{TeamsPage-905MJyke.js → TeamsPage-B-v5j_8q.js} +1 -1
  61. package/web-app/dist/assets/{TemplatesPage-DMrUHcvF.js → TemplatesPage-bdqUL-LG.js} +1 -1
  62. package/web-app/dist/assets/{TerminalOutput-BsbEbBYX.js → TerminalOutput-CRHEXBwS.js} +1 -1
  63. package/web-app/dist/assets/{activity-BuaXhBsC.js → activity-C-ROkmXt.js} +1 -1
  64. package/web-app/dist/assets/{bell-BfEQ71OG.js → bell-DbiCBxQA.js} +1 -1
  65. package/web-app/dist/assets/{bot-DOGeYewg.js → bot-DsIgE_qr.js} +1 -1
  66. package/web-app/dist/assets/{check-zbjPpb3E.js → check-CkAdmHWP.js} +1 -1
  67. package/web-app/dist/assets/{chevron-left-DWTOgfFt.js → chevron-left-CYTLivAo.js} +1 -1
  68. package/web-app/dist/assets/{circle-alert-BEPKfRzR.js → circle-alert-BVIcAsFJ.js} +1 -1
  69. package/web-app/dist/assets/{clock-C_fX3OHo.js → clock-Dg3Rq0go.js} +1 -1
  70. package/web-app/dist/assets/{cloud-DUXHygXQ.js → cloud-CenrqHFl.js} +1 -1
  71. package/web-app/dist/assets/{code-xml-BEVl_9Hw.js → code-xml-C2mvfoug.js} +1 -1
  72. package/web-app/dist/assets/{database-_a22uh7l.js → database-BKa0_eCb.js} +1 -1
  73. package/web-app/dist/assets/{dollar-sign-l2en7xfg.js → dollar-sign-DfelUK1S.js} +1 -1
  74. package/web-app/dist/assets/{file-code-corner-DItKl6H4.js → file-code-corner-CZKWoHVg.js} +1 -1
  75. package/web-app/dist/assets/{file-plus-BSk7qFMA.js → file-plus-CZ-m1zMX.js} +1 -1
  76. package/web-app/dist/assets/{globe-2TveFE5l.js → globe-S0kv_GwC.js} +1 -1
  77. package/web-app/dist/assets/{hammer-BU6OJlQj.js → hammer-BW1MDdu1.js} +1 -1
  78. package/web-app/dist/assets/{index-DGnZXUYk.js → index-ACEYsTc2.js} +3 -3
  79. package/web-app/dist/assets/{layers-DKw7MNuq.js → layers-BrXHYZ-L.js} +1 -1
  80. package/web-app/dist/assets/{loader-circle-CoYfykzD.js → loader-circle-DOdhKFx0.js} +1 -1
  81. package/web-app/dist/assets/{lock-D9JzrXDL.js → lock-BcFTyg8J.js} +1 -1
  82. package/web-app/dist/assets/{package-BZtqTIqH.js → package-D34cMVQG.js} +1 -1
  83. package/web-app/dist/assets/{plus-BGJfo8bV.js → plus-CEaMeBxL.js} +1 -1
  84. package/web-app/dist/assets/{refresh-cw-F6lowBgR.js → refresh-cw-D2Rzxr5U.js} +1 -1
  85. package/web-app/dist/assets/{rotate-ccw-DHOK8dM4.js → rotate-ccw-C_-EjRLh.js} +1 -1
  86. package/web-app/dist/assets/{scroll-text-CKcROoMV.js → scroll-text-BSSCMI_c.js} +1 -1
  87. package/web-app/dist/assets/{server-DbG8MDv6.js → server-BKvLonWt.js} +1 -1
  88. package/web-app/dist/assets/{shield-alert-RNKNXdJT.js → shield-alert-DbbQbPdW.js} +1 -1
  89. package/web-app/dist/assets/{thumbs-up-Yxp-UBxS.js → thumbs-up-NoBD1fUR.js} +1 -1
  90. package/web-app/dist/assets/{trash-2-DY-eba1n.js → trash-2-BXz8rAyd.js} +1 -1
  91. package/web-app/dist/assets/{trending-down-CARiDB3t.js → trending-down-D8u535Re.js} +1 -1
  92. package/web-app/dist/assets/{trending-up-brQqWbA3.js → trending-up-q8k3kgiy.js} +1 -1
  93. package/web-app/dist/assets/{upload-D6wRjKhz.js → upload-Cp7_zeBI.js} +1 -1
  94. package/web-app/dist/assets/{usePolling-BMrqNbAI.js → usePolling-CTHVdcuX.js} +1 -1
  95. package/web-app/dist/assets/{user-CK5-EXIj.js → user-DF7bfSf_.js} +1 -1
  96. package/web-app/dist/index.html +1 -1
  97. 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
- if [ -n "${loki_dir}" ]; then
28316
- mkdir -p "$loki_dir/state" 2>/dev/null || true
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