loki-mode 11.2.1 → 11.3.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 (73) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/lib/skill-link-heal.sh +78 -1
  4. package/autonomy/loki +96 -1195
  5. package/autonomy/provider-offer.sh +4 -4
  6. package/bin/loki +14 -0
  7. package/dashboard/__init__.py +1 -1
  8. package/docs/CLI-REFERENCE.md +1 -1
  9. package/docs/INSTALLATION.md +1 -1
  10. package/docs/KNOWN-ISSUES.md +0 -1
  11. package/docs/v10/ADOPTION-PLAN.md +2 -2
  12. package/docs/v10/FAILURE-CLASSES.md +21 -0
  13. package/loki-ts/dist/loki.js +724 -702
  14. package/mcp/__init__.py +1 -1
  15. package/package.json +1 -1
  16. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  17. package/web-app/dist/assets/{AdminPage-BZ1QNSju.js → AdminPage-D_e45uTw.js} +1 -1
  18. package/web-app/dist/assets/{Avatar-Dnzzsk2U.js → Avatar-T3nIpoaf.js} +1 -1
  19. package/web-app/dist/assets/{Badge-DWtsAw6M.js → Badge-BKqb59pP.js} +1 -1
  20. package/web-app/dist/assets/{Button-zEMFjJEr.js → Button-DjVlkh8_.js} +1 -1
  21. package/web-app/dist/assets/{CockpitPage-Ddo5Zhnz.js → CockpitPage-DXJgLGmh.js} +1 -1
  22. package/web-app/dist/assets/{ComparePage-kCkyRrrz.js → ComparePage-BRP_eVc_.js} +1 -1
  23. package/web-app/dist/assets/{ErrorBoundary-BZrVi8Ui.js → ErrorBoundary-CLjpGLjC.js} +1 -1
  24. package/web-app/dist/assets/{EvidenceReceiptPanel-B9eDIWUr.js → EvidenceReceiptPanel-DX-vb4Xy.js} +1 -1
  25. package/web-app/dist/assets/{GitHubIssuesPanel-DX5A2UkV.js → GitHubIssuesPanel-214HVHtX.js} +1 -1
  26. package/web-app/dist/assets/{GitHubPRsPanel-DKKxBe6-.js → GitHubPRsPanel-BEiZKc4t.js} +1 -1
  27. package/web-app/dist/assets/{HomePage-BSn_-fHq.js → HomePage-VvMHS5ga.js} +2 -2
  28. package/web-app/dist/assets/{LoginPage-C1BGwj0s.js → LoginPage-5WD-v7n3.js} +1 -1
  29. package/web-app/dist/assets/{MagicPage-B9JJw_BQ.js → MagicPage-DUQT_Jye.js} +1 -1
  30. package/web-app/dist/assets/{MetricsPage-B-lNQr8Q.js → MetricsPage-lga-z79v.js} +1 -1
  31. package/web-app/dist/assets/{NotFoundPage-DkktBNvI.js → NotFoundPage-CGhBX3G1.js} +1 -1
  32. package/web-app/dist/assets/{ProjectPage-DUAraQw9.js → ProjectPage-CdzF2GzZ.js} +3 -3
  33. package/web-app/dist/assets/{ProjectsPage-DgMo4QHm.js → ProjectsPage-DRG64N8s.js} +1 -1
  34. package/web-app/dist/assets/{SettingsPage-fnL3nqGC.js → SettingsPage-5fzW9Frb.js} +1 -1
  35. package/web-app/dist/assets/{ShowcasePage-Bn7rWTXn.js → ShowcasePage-DrTdxO4y.js} +1 -1
  36. package/web-app/dist/assets/{SystemSettingsPage-DxrytIXT.js → SystemSettingsPage-C9Mqs6Rd.js} +1 -1
  37. package/web-app/dist/assets/{TeamsPage-BQDC12Mn.js → TeamsPage-CUGPdSWo.js} +1 -1
  38. package/web-app/dist/assets/{TemplatesPage-C_JEygcZ.js → TemplatesPage-CNraDY0F.js} +1 -1
  39. package/web-app/dist/assets/{TerminalOutput-H0584wn0.js → TerminalOutput-BIu_6Pea.js} +1 -1
  40. package/web-app/dist/assets/{activity-Bse7FP2H.js → activity-Bk-kgqaf.js} +1 -1
  41. package/web-app/dist/assets/{bell-BMtgCGSW.js → bell-BXmUdmo8.js} +1 -1
  42. package/web-app/dist/assets/{bot-6SW_XTZN.js → bot-CiuzXxUR.js} +1 -1
  43. package/web-app/dist/assets/{check-C3f9aTHx.js → check-BEzjXppd.js} +1 -1
  44. package/web-app/dist/assets/{chevron-left-Bi60XjBc.js → chevron-left-AYWCXHf8.js} +1 -1
  45. package/web-app/dist/assets/{circle-alert-Bepfb6dn.js → circle-alert-BNg2uSRq.js} +1 -1
  46. package/web-app/dist/assets/{clock-jQIU5AuJ.js → clock-DTj0kkGT.js} +1 -1
  47. package/web-app/dist/assets/{cloud-BLZn6J9A.js → cloud-x4nTDBLT.js} +1 -1
  48. package/web-app/dist/assets/{code-xml-CRgKi92z.js → code-xml-BVh_MLrk.js} +1 -1
  49. package/web-app/dist/assets/{database-DWg9XT6Y.js → database-DdfBaowG.js} +1 -1
  50. package/web-app/dist/assets/{dollar-sign-Cfif5nlf.js → dollar-sign-XuYFmAOY.js} +1 -1
  51. package/web-app/dist/assets/{file-code-corner-DSiLXED8.js → file-code-corner-D4cRnmeL.js} +1 -1
  52. package/web-app/dist/assets/{file-plus-8lIzYfAS.js → file-plus-CyoVlHc_.js} +1 -1
  53. package/web-app/dist/assets/{globe-DZkvR077.js → globe-Y6IK2RPW.js} +1 -1
  54. package/web-app/dist/assets/{hammer-BtQyfpf_.js → hammer-BKzr9VZI.js} +1 -1
  55. package/web-app/dist/assets/{index-B-uQiPRR.js → index-B20cSx5G.js} +3 -3
  56. package/web-app/dist/assets/{layers-Dlfo3jwV.js → layers-DebNOhGS.js} +1 -1
  57. package/web-app/dist/assets/{loader-circle-BQ2hL7m5.js → loader-circle-DyGbrEgd.js} +1 -1
  58. package/web-app/dist/assets/{lock-LzpJKEAP.js → lock-BKPpyt20.js} +1 -1
  59. package/web-app/dist/assets/{package-zp-qZxpp.js → package-egF5Wi4y.js} +1 -1
  60. package/web-app/dist/assets/{plus-CuiDkGsm.js → plus-OiEgKIc-.js} +1 -1
  61. package/web-app/dist/assets/{refresh-cw-Dx57uk3-.js → refresh-cw-CzKvrONq.js} +1 -1
  62. package/web-app/dist/assets/{rotate-ccw-Bp1YOkM6.js → rotate-ccw-Bu2mII0p.js} +1 -1
  63. package/web-app/dist/assets/{scroll-text-Dc8LjRT5.js → scroll-text-CSkiyax8.js} +1 -1
  64. package/web-app/dist/assets/{server-CE0Mzyfz.js → server-DlPthJFw.js} +1 -1
  65. package/web-app/dist/assets/{shield-alert-DBj71EDP.js → shield-alert-CbpHWQQX.js} +1 -1
  66. package/web-app/dist/assets/{thumbs-up-C0q9J-0y.js → thumbs-up-DgGpZe-Q.js} +1 -1
  67. package/web-app/dist/assets/{trash-2-YNPSnz_h.js → trash-2-BV3GlCB-.js} +1 -1
  68. package/web-app/dist/assets/{trending-down-BlyQB_Gh.js → trending-down-Y4TJtXhD.js} +1 -1
  69. package/web-app/dist/assets/{trending-up-CStScgAm.js → trending-up-DsDNoHZY.js} +1 -1
  70. package/web-app/dist/assets/{upload-CLs-rKu9.js → upload-gkThrc_I.js} +1 -1
  71. package/web-app/dist/assets/{usePolling-BmFkptqQ.js → usePolling-jpNSeNAe.js} +1 -1
  72. package/web-app/dist/assets/{user-CV0TBz6A.js → user-3Zez1WOK.js} +1 -1
  73. 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.2.1
6
+ # Loki Mode v11.3.0
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 legacy engine, which still ships and is being removed (`loki start owner/repo#N` still routes to it; prefer `loki owner/repo#N`).
9
9
 
@@ -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.2.1 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
486
+ **v11.3.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 11.2.1
1
+ 11.3.0
@@ -13,6 +13,9 @@
13
13
  # - its target is missing, or resolves to a different install than the running one
14
14
  # - the running root is itself an install path with a SKILL.md, so a dev checkout
15
15
  # or worktree never hijacks the user's global link
16
+ # - the running install is durable (npm global root, bun global dir, Homebrew
17
+ # prefix); an npx cache, temp dir or arbitrary prefix is refused with one
18
+ # stderr line and the link is left untouched
16
19
 
17
20
  _loki_skill_is_install_path() {
18
21
  case "${1%/}" in
@@ -21,9 +24,75 @@ _loki_skill_is_install_path() {
21
24
  return 1
22
25
  }
23
26
 
27
+ # Durable-install rule (FC-30 amendment). A repoint writes a user-owned path, so
28
+ # the running install must outlive this process: a one-off `npx loki-mode` run or
29
+ # a scratch prefix would turn the link into a new dangling link. Durable means
30
+ # the running root sits under the npm global root (`npm root -g`), the bun global
31
+ # dir, or a Homebrew prefix. Prints a reason and returns 1 when it is not.
32
+ _loki_skill_dir_p() { (cd "$1" 2>/dev/null && pwd -P); }
33
+
34
+ # `npm root -g` bounded to 3s so a hung npm can never hang bin/loki. Output goes
35
+ # to a file (not a pipe) so an orphaned grandchild cannot hold the caller open.
36
+ # Returns 124 on timeout (callers fail closed), otherwise npm's own status.
37
+ _loki_skill_npm_root() {
38
+ local out pid i=0 rc
39
+ out="$(mktemp "${TMPDIR:-/tmp}/loki-npmroot.XXXXXX")" || return 1
40
+ npm root -g >"$out" 2>/dev/null </dev/null &
41
+ pid=$!
42
+ while kill -0 "$pid" 2>/dev/null; do
43
+ if [ "$i" -ge 30 ]; then
44
+ kill "$pid" 2>/dev/null
45
+ rm -f "$out"
46
+ return 124
47
+ fi
48
+ sleep 0.1
49
+ i=$((i + 1))
50
+ done
51
+ wait "$pid"; rc=$?
52
+ [ "$rc" -eq 0 ] && head -n 1 "$out"
53
+ rm -f "$out"
54
+ return "$rc"
55
+ }
56
+
57
+ _loki_skill_root_durable() {
58
+ local root_p="$1" cand cands="" npmroot prefix rc
59
+ case "$root_p" in
60
+ */_npx/*) printf 'running from an npx cache (%s)' "$root_p"; return 1 ;;
61
+ esac
62
+ npmroot="$(_loki_skill_npm_root)"; rc=$?
63
+ if [ "$rc" -eq 124 ]; then
64
+ printf 'npm root -g timed out (running install %s not verified durable)' "$root_p"
65
+ return 1
66
+ fi
67
+ [ "$rc" -eq 0 ] || npmroot=""
68
+ [ -n "$npmroot" ] && cands="$cands
69
+ $npmroot"
70
+ [ -n "${NPM_CONFIG_PREFIX:-}" ] && cands="$cands
71
+ ${NPM_CONFIG_PREFIX}/lib/node_modules"
72
+ cands="$cands
73
+ ${BUN_INSTALL:-${HOME:-}/.bun}/install/global/node_modules"
74
+ for prefix in "${HOMEBREW_PREFIX:-}" /opt/homebrew /usr/local /home/linuxbrew/.linuxbrew; do
75
+ [ -n "$prefix" ] || continue
76
+ cands="$cands
77
+ $prefix/Cellar/loki-mode
78
+ $prefix/opt/loki-mode
79
+ $prefix/lib/node_modules"
80
+ done
81
+ while IFS= read -r cand; do
82
+ [ -n "$cand" ] || continue
83
+ cand="$(_loki_skill_dir_p "$cand")" || continue
84
+ [ "$root_p" = "$cand" ] && return 0
85
+ case "$root_p" in "$cand"/*) return 0 ;; esac
86
+ done <<EOT
87
+ $cands
88
+ EOT
89
+ printf 'running install %s is not a durable global install (npm global, bun global or Homebrew)' "$root_p"
90
+ return 1
91
+ }
92
+
24
93
  loki_skill_link_heal() {
25
94
  [ "${LOKI_NO_SKILL_LINK_HEAL:-}" = "1" ] && return 0
26
- local root="${1:-}" home="${HOME:-}" root_p rel link tgt live_p tmp
95
+ local root="${1:-}" home="${HOME:-}" root_p rel link tgt live_p tmp durable="" why
27
96
  [ -n "$root" ] && [ -n "$home" ] || return 0
28
97
  [ -f "$root/SKILL.md" ] || return 0
29
98
  root_p="$(cd "$root" 2>/dev/null && pwd -P)" || return 0
@@ -39,6 +108,14 @@ loki_skill_link_heal() {
39
108
  live_p="$(cd "$link" 2>/dev/null && pwd -P)" || live_p=""
40
109
  [ "$live_p" = "$root_p" ] && continue
41
110
  fi
111
+ if [ -z "$durable" ]; then
112
+ if why="$(_loki_skill_root_durable "$root_p")"; then
113
+ durable=yes
114
+ else
115
+ printf 'loki: not repointing skill links: %s\n' "$why" >&2
116
+ return 0
117
+ fi
118
+ fi
42
119
  tmp="${link}.heal.$$"
43
120
  rm -f "$tmp" 2>/dev/null
44
121
  ln -s "$root_p" "$tmp" 2>/dev/null || continue