loki-mode 10.7.1 → 10.9.1

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 (185) hide show
  1. package/README.md +2 -2
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/loki +20 -32
  5. package/autonomy/run.sh +9 -5
  6. package/autonomy/tui.sh +5 -1
  7. package/dashboard/__init__.py +1 -1
  8. package/dashboard/api_phases.py +1 -1
  9. package/dashboard/api_start.py +0 -1
  10. package/dashboard/server.py +28 -146
  11. package/docs/COCKPIT-SPEC.md +3 -1
  12. package/docs/DASHBOARD-9.12-EVIDENCE.md +1 -1
  13. package/docs/DASHBOARD-ARCHITECTURE.md +13 -11
  14. package/docs/DASHBOARD_V2_CHECKLIST.md +2 -0
  15. package/docs/INSTALLATION.md +12 -11
  16. package/docs/MERGE-DEDUP-MAP.md +1 -1
  17. package/docs/MERGE-ROUTE-MAP.md +1 -1
  18. package/docs/MERGE3-PLAN.md +2 -2
  19. package/docs/R3-COST-OBSERVABILITY-DESIGN.md +2 -2
  20. package/docs/R4-TRUST-TRAJECTORY-DESIGN.md +1 -1
  21. package/docs/R5-AUTO-WIKI-DESIGN.md +1 -1
  22. package/docs/R6-ROLLBACK-CHECKPOINT-PLAN.md +1 -1
  23. package/docs/RARV-C-100X-PLAN.md +3 -3
  24. package/docs/SONNET5-DEFAULT-PLAN.md +2 -2
  25. package/docs/SYNERGY-TASKS.md +1 -1
  26. package/docs/TOOL-INTEGRATION.md +1 -1
  27. package/docs/TOP-100-BACKLOG.md +1 -1
  28. package/docs/alternative-installations.md +1 -1
  29. package/docs/architecture/ADR-001-runtime-migration.md +1 -1
  30. package/docs/architecture/DASHBOARD_V2_ARCHITECTURE.md +2 -0
  31. package/docs/audit-logging.md +2 -0
  32. package/docs/authentication.md +2 -0
  33. package/docs/authorization.md +2 -0
  34. package/docs/certification/02-enterprise-features/lab.md +2 -0
  35. package/docs/certification/02-enterprise-features/lesson.md +2 -0
  36. package/docs/certification/04-production-deployment/lab.md +2 -0
  37. package/docs/certification/04-production-deployment/lesson.md +2 -0
  38. package/docs/control-plane-migration.md +97 -0
  39. package/docs/dashboard-guide.md +6 -7
  40. package/docs/dev/release-checklist.md +9 -11
  41. package/docs/enterprise/integration-cookbook.md +2 -0
  42. package/docs/enterprise/migration.md +1 -1
  43. package/docs/enterprise/performance.md +3 -1
  44. package/docs/enterprise/sdk-guide.md +2 -0
  45. package/docs/enterprise/security.md +2 -0
  46. package/docs/plans/FORGE-AUTONOMOUS-QUEUE.md +2 -2
  47. package/docs/research-2026-07/OBSERVABILITY-TOOL-SPEC.md +1 -1
  48. package/docs/retrospectives/v7.5.15-honesty-audit.md +2 -2
  49. package/docs/test-scenarios/enterprise-scenarios.md +2 -2
  50. package/docs/v10/ARCHITECT-CUTS.md +9 -9
  51. package/docs/v10/BACKLOG.md +7 -7
  52. package/docs/v10/BOARD.md +25 -25
  53. package/docs/v10/CONTROL-PLANE.md +4 -4
  54. package/docs/v10/CP-ENTERPRISE-UI.md +270 -9
  55. package/docs/v10/D51-PHASE-B.md +1 -1
  56. package/docs/v10/DECISIONS.md +3 -3
  57. package/docs/v10/DEPS.md +10 -10
  58. package/docs/v10/FAILURE-CLASSES.md +66 -1
  59. package/docs/v10/LEGACY-REMOVAL.md +2 -2
  60. package/docs/v10/METRICS.md +6 -0
  61. package/docs/v10/SWARM.md +2 -2
  62. package/loki-ts/data/model-pricing.json +6 -6
  63. package/loki-ts/dist/cockpit.js +11 -11
  64. package/loki-ts/dist/loki.js +819 -809
  65. package/loki-ts/package.json +1 -1
  66. package/magic/core/design_tokens.py +1 -2
  67. package/magic/core/generator.py +2 -2
  68. package/magic/tokens/README.md +1 -3
  69. package/mcp/__init__.py +1 -1
  70. package/package.json +3 -8
  71. package/packages/control-plane/dist/server.js +17954 -5696
  72. package/packages/control-plane/drizzle/0004_cpe03_local_repos_actions.sql +17 -0
  73. package/packages/control-plane/drizzle/meta/0004_snapshot.json +542 -0
  74. package/packages/control-plane/drizzle/meta/_journal.json +9 -2
  75. package/packages/control-plane/package.json +4 -1
  76. package/packages/control-plane/src/db/schema.ts +19 -0
  77. package/packages/control-plane/src/server/app.ts +11 -22
  78. package/packages/control-plane/src/server/audit.ts +15 -0
  79. package/packages/control-plane/src/server/auth.ts +7 -1
  80. package/packages/control-plane/src/server/legacy/routes-audit.ts +50 -0
  81. package/packages/control-plane/src/server/legacy/routes-control.ts +26 -0
  82. package/packages/control-plane/src/server/legacy/routes-memory.ts +30 -0
  83. package/packages/control-plane/src/server/legacy/routes-metrics.ts +18 -0
  84. package/packages/control-plane/src/server/legacy/routes.ts +237 -0
  85. package/packages/control-plane/src/server/legacy/shim.ts +201 -0
  86. package/packages/control-plane/src/server/repos.ts +27 -0
  87. package/packages/control-plane/src/server/routes/artifacts.ts +104 -0
  88. package/packages/control-plane/src/server/routes/audit.ts +17 -0
  89. package/packages/control-plane/src/server/routes/checkpoints.ts +171 -0
  90. package/packages/control-plane/src/server/routes/config.ts +319 -0
  91. package/packages/control-plane/src/server/routes/control.ts +75 -0
  92. package/packages/control-plane/src/server/routes/cost.ts +70 -0
  93. package/packages/control-plane/src/server/routes/cost_ledger.ts +210 -0
  94. package/packages/control-plane/src/server/routes/fleet.ts +101 -0
  95. package/packages/control-plane/src/server/routes/index.ts +71 -0
  96. package/packages/control-plane/src/server/routes/integrations.ts +123 -0
  97. package/packages/control-plane/src/server/routes/memory.ts +219 -0
  98. package/packages/control-plane/src/server/routes/merge_risk.ts +209 -0
  99. package/packages/control-plane/src/server/routes/metrics.ts +93 -0
  100. package/packages/control-plane/src/server/routes/notify.ts +48 -0
  101. package/packages/control-plane/src/server/routes/providers.ts +111 -0
  102. package/packages/control-plane/src/server/routes/session_control.ts +155 -0
  103. package/packages/control-plane/src/server/routes/start.ts +39 -0
  104. package/packages/control-plane/src/server/routes/stats.ts +76 -0
  105. package/packages/control-plane/src/server/routes/stream.ts +85 -0
  106. package/packages/control-plane/src/server/routes/verify.ts +66 -0
  107. package/packages/control-plane/src/server/spawn.ts +79 -0
  108. package/packages/control-plane/src/shipper/discover.ts +19 -1
  109. package/packages/control-plane/ui/dist/assets/index-BQbFv65M.css +1 -0
  110. package/packages/control-plane/ui/dist/assets/index-Dbhu244h.js +155 -0
  111. package/packages/control-plane/ui/dist/index.html +2 -2
  112. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  113. package/references/magic-modules-patterns.md +2 -2
  114. package/skills/factory-operations.md +3 -3
  115. package/skills/magic-modules.md +1 -1
  116. package/skills/release-cadence.md +1 -1
  117. package/tools/audit-docs.py +1 -1
  118. package/tools/index-codebase.py +1 -1
  119. package/web-app/dist/assets/{AdminPage-BJSU5hY1.js → AdminPage-DqMnfZrH.js} +1 -1
  120. package/web-app/dist/assets/{Avatar-CSOSpw9c.js → Avatar-BEof29du.js} +1 -1
  121. package/web-app/dist/assets/{Badge-COr7vj0D.js → Badge-WD53OL5m.js} +1 -1
  122. package/web-app/dist/assets/{Button-DGoWFERp.js → Button-Rzk5flhU.js} +1 -1
  123. package/web-app/dist/assets/{CockpitPage-CBpWkNXY.js → CockpitPage-Bqz3PCMh.js} +1 -1
  124. package/web-app/dist/assets/{ComparePage-BwT8vqrL.js → ComparePage-Byo2NzAZ.js} +1 -1
  125. package/web-app/dist/assets/{ErrorBoundary-D7SicDDA.js → ErrorBoundary-BuE0kH3W.js} +1 -1
  126. package/web-app/dist/assets/{EvidenceReceiptPanel-bx-5liG2.js → EvidenceReceiptPanel-CKFHOPBx.js} +1 -1
  127. package/web-app/dist/assets/{GitHubIssuesPanel-BAeeWLqY.js → GitHubIssuesPanel-Df_kTMqI.js} +1 -1
  128. package/web-app/dist/assets/{GitHubPRsPanel-CssD8lGI.js → GitHubPRsPanel-CouvcKrZ.js} +1 -1
  129. package/web-app/dist/assets/{HomePage-SL5PT3m5.js → HomePage-dEpLzj0x.js} +2 -2
  130. package/web-app/dist/assets/{LoginPage-C8hFOZOM.js → LoginPage-6DVjUND5.js} +1 -1
  131. package/web-app/dist/assets/{MagicPage-xHbHkrPf.js → MagicPage-BDQ9MOfY.js} +1 -1
  132. package/web-app/dist/assets/{MetricsPage-B_2CKFcC.js → MetricsPage-CXiJ04G_.js} +1 -1
  133. package/web-app/dist/assets/{NotFoundPage-CXwXMq35.js → NotFoundPage-BaXhZvyj.js} +1 -1
  134. package/web-app/dist/assets/{ProjectPage-AaisMQI-.js → ProjectPage-BzE4V7Ti.js} +3 -3
  135. package/web-app/dist/assets/{ProjectsPage-Cej5ResX.js → ProjectsPage-ipf6TLMX.js} +1 -1
  136. package/web-app/dist/assets/{SettingsPage-DKv4mn9H.js → SettingsPage-BDxkUKN6.js} +1 -1
  137. package/web-app/dist/assets/{ShowcasePage-Dkiyzne4.js → ShowcasePage-YQXD72SM.js} +1 -1
  138. package/web-app/dist/assets/{SystemSettingsPage-DaBLQ5dU.js → SystemSettingsPage-Dou7zHS0.js} +1 -1
  139. package/web-app/dist/assets/{TeamsPage-B2yUr31k.js → TeamsPage-CQarfcYr.js} +1 -1
  140. package/web-app/dist/assets/{TemplatesPage-CfYiANhU.js → TemplatesPage-CPi1R8Xj.js} +1 -1
  141. package/web-app/dist/assets/{TerminalOutput-CMXoexLM.js → TerminalOutput-WiGhWdYD.js} +1 -1
  142. package/web-app/dist/assets/{activity-B0dzoZtY.js → activity-DOa7ejQA.js} +1 -1
  143. package/web-app/dist/assets/{bell-DFOTaSoo.js → bell-CX-VAlYN.js} +1 -1
  144. package/web-app/dist/assets/{bot-Dz-WSQyP.js → bot-EDXaZmHc.js} +1 -1
  145. package/web-app/dist/assets/{check-L1QIRueJ.js → check-CnBdKk3L.js} +1 -1
  146. package/web-app/dist/assets/{chevron-left-1TrnIEZS.js → chevron-left-BJ_ydRQW.js} +1 -1
  147. package/web-app/dist/assets/{circle-alert-8Bf6xEDx.js → circle-alert-tz8ufhc_.js} +1 -1
  148. package/web-app/dist/assets/{clock-DB8NE6P5.js → clock-DFBZPSsH.js} +1 -1
  149. package/web-app/dist/assets/{cloud-DUSL3wZS.js → cloud-uy3p_5Q7.js} +1 -1
  150. package/web-app/dist/assets/{code-xml-DbjryWNl.js → code-xml-3CbYD9YL.js} +1 -1
  151. package/web-app/dist/assets/{database-DrezrMSs.js → database-YiNBXc9c.js} +1 -1
  152. package/web-app/dist/assets/{dollar-sign-CGbaLMzR.js → dollar-sign-D0wBa4Cv.js} +1 -1
  153. package/web-app/dist/assets/{file-code-corner-Dfypa-r4.js → file-code-corner-DDdZVZ5v.js} +1 -1
  154. package/web-app/dist/assets/{file-plus-CzV5L2Gd.js → file-plus-D09LTBqt.js} +1 -1
  155. package/web-app/dist/assets/{globe-BoYjTwPQ.js → globe-BirTPwff.js} +1 -1
  156. package/web-app/dist/assets/{hammer-WO-HuiyJ.js → hammer-DaE5qgnd.js} +1 -1
  157. package/web-app/dist/assets/{index-CjIOUjnd.js → index-D8t7KnQf.js} +3 -3
  158. package/web-app/dist/assets/{layers-Bn6jtKNk.js → layers-DVVrckRY.js} +1 -1
  159. package/web-app/dist/assets/{loader-circle-gERWRnmW.js → loader-circle-2-nMGmcb.js} +1 -1
  160. package/web-app/dist/assets/{lock-BIiMLJq8.js → lock-D0Xj43pC.js} +1 -1
  161. package/web-app/dist/assets/{package-dLvDSVys.js → package-BB7S3egm.js} +1 -1
  162. package/web-app/dist/assets/{plus-BHM3ZLhZ.js → plus-BLhoMrn3.js} +1 -1
  163. package/web-app/dist/assets/{refresh-cw-BAp_alv6.js → refresh-cw-DMc2uPLw.js} +1 -1
  164. package/web-app/dist/assets/{rotate-ccw-CBhwq_MG.js → rotate-ccw-DM3IP9x7.js} +1 -1
  165. package/web-app/dist/assets/{scroll-text-DoS-6dfU.js → scroll-text-lH2uW7rB.js} +1 -1
  166. package/web-app/dist/assets/{server-5JgdDWQO.js → server-BkerZcdR.js} +1 -1
  167. package/web-app/dist/assets/{shield-alert-DjmlLT34.js → shield-alert-B8ohcUfu.js} +1 -1
  168. package/web-app/dist/assets/{thumbs-up-BtiEXl3p.js → thumbs-up-CTIxLzPD.js} +1 -1
  169. package/web-app/dist/assets/{trash-2-ClsWU_Vg.js → trash-2-C3zIpsH5.js} +1 -1
  170. package/web-app/dist/assets/{trending-down-DPS4M7_X.js → trending-down-BTT7wV4Y.js} +1 -1
  171. package/web-app/dist/assets/{trending-up-D6OJ38-V.js → trending-up-BzHdCDvF.js} +1 -1
  172. package/web-app/dist/assets/{upload-DOCzLUpF.js → upload-HxR34-A8.js} +1 -1
  173. package/web-app/dist/assets/{usePolling-CljQTWj_.js → usePolling-DDj6Fupy.js} +1 -1
  174. package/web-app/dist/assets/{user-C0G82Weu.js → user-qH5y9yNy.js} +1 -1
  175. package/web-app/dist/index.html +1 -1
  176. package/dashboard/static/assets/mermaid.min.js +0 -2030
  177. package/dashboard/static/cost.html +0 -344
  178. package/dashboard/static/favicon.svg +0 -5
  179. package/dashboard/static/index.html +0 -15577
  180. package/dashboard/static/proofs.html +0 -194
  181. package/dashboard/static/start.html +0 -131
  182. package/dashboard/static/trust.html +0 -325
  183. package/packages/control-plane/src/server/actions.ts +0 -60
  184. package/packages/control-plane/ui/dist/assets/index-DHDI_dHM.css +0 -1
  185. package/packages/control-plane/ui/dist/assets/index-DaQr0MPS.js +0 -129
@@ -2,7 +2,7 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v10.7.1
5
+ **Version:** v10.9.1
6
6
 
7
7
  **Engine note:** `loki "<task>"`, `loki owner/repo#N` and `loki quick` run the Loki 10 engine. `loki start` still routes to the legacy engine, which is being removed (planned work resumes 2026-10-07); prefer `loki owner/repo#N`. See [docs/v10/GUIDE.md](v10/GUIDE.md).
8
8
 
@@ -294,7 +294,7 @@ trade-offs.
294
294
  ## VS Code Extension (Deprecated)
295
295
 
296
296
  > **DEPRECATED as of v7.2.0.** The Loki Mode VS Code extension is no longer
297
- > maintained. Use the dashboard at `loki dashboard start` instead.
297
+ > maintained. Use the Control Plane (`loki dashboard`) instead.
298
298
  >
299
299
  > The marketplace listing remains for users on v7.2.0 and earlier but will
300
300
  > not receive further updates. The `vscode-extension/` source remains in the
@@ -305,8 +305,8 @@ trade-offs.
305
305
  ### Recommended replacement: the dashboard
306
306
 
307
307
  ```bash
308
- loki dashboard start
309
- # Then open http://localhost:57374 in your browser.
308
+ loki dashboard
309
+ # Opens the Control Plane (default http://127.0.0.1:47821).
310
310
  ```
311
311
 
312
312
  The dashboard provides session monitoring, task views, the completion
@@ -450,7 +450,7 @@ behave exactly like the local `loki` CLI. Auth is auto-detected:
450
450
  (Max/Pro subscribers need no API key), else an honest error with guidance. It
451
451
  also forwards `~/.gitconfig` and `~/.config/gh` (read-only) plus
452
452
  `GITHUB_TOKEN`/`GH_TOKEN` if set, so commits and PRs work like local, and
453
- exposes the dashboard on port 57374. Use `--image IMG` to override the image.
453
+ exposes the API on port 57374. Use `--image IMG` to override the image.
454
454
 
455
455
  `loki docker` is a thin host wrapper around the image; it requires loki and
456
456
  Docker installed on the host.
@@ -459,7 +459,7 @@ Multi-repo + unified dashboard: you can run `loki docker start` in several
459
459
  different repos at once, exactly like the host CLI. Each repo gets its own
460
460
  container (deterministic name `loki-<hash-of-path>`) and its own bind-mounted
461
461
  `.loki/` state. Every `loki docker` project registers with the host dashboard,
462
- so running `loki dashboard` on the host shows ALL your projects in one unified
462
+ so running `loki dashboard` on the host (the Control Plane) shows ALL your projects in one unified
463
463
  view, whether they run via local `loki start` or via `loki docker start`. Builds
464
464
  run with the dashboard off by default (so concurrent runs do not collide on port
465
465
  57374); use the host `loki dashboard`, or `loki docker start --api` for a single
@@ -775,11 +775,12 @@ Loki Mode uses two network ports for different services:
775
775
 
776
776
  | Port | Service | Description |
777
777
  |------|---------|-------------|
778
- | **57374** | Dashboard + API (FastAPI) | Unified server serving both the web dashboard UI (real-time monitoring, task board, Completion Council, memory browser, log streaming) and the REST API (used by CLI tools, programmatic access, and the deprecated VS Code extension). Served by `dashboard/server.py`. |
778
+ | **47821** | Control Plane UI + API | The only UI, plus the `/v1/*` API. Started by `loki control serve` or `loki dashboard`. See [control-plane-migration.md](control-plane-migration.md). |
779
+ | **57374** | Legacy API (FastAPI) | The classic dashboard UI is removed in 10.8; this port no longer serves a UI. |
779
780
 
780
781
  ### When to Use Which Port
781
782
 
782
- - **Browser access** (dashboard, monitoring): Use port **57374** -- `http://localhost:57374`
783
+ - **Browser access** (UI, monitoring): Use the Control Plane, port **47821** -- `http://127.0.0.1:47821`
783
784
  - **API calls** (REST, programmatic): Use port **57374** -- `http://localhost:57374`
784
785
  - **VS Code extension** (deprecated as of v7.2.0): Connects to API on port **57374** automatically (configurable via `loki.apiPort` setting). No new releases will be published; see the deprecation notice above.
785
786
  - The server is started automatically when you run `loki start` or `./autonomy/run.sh`. No manual configuration is needed.
@@ -787,8 +788,8 @@ Loki Mode uses two network ports for different services:
787
788
  ### Port Configuration
788
789
 
789
790
  ```bash
790
- # Dashboard port (default: 57374)
791
- LOKI_DASHBOARD_PORT=57374 loki dashboard start
791
+ # Control Plane port (default: 47821)
792
+ loki control serve --port 47821
792
793
 
793
794
  # API port (default: 57374)
794
795
  loki api start --port 57374 # was: loki serve
@@ -796,7 +797,7 @@ loki api start --port 57374 # was: loki serve
796
797
 
797
798
  ### CORS Configuration
798
799
 
799
- For remote or cross-origin access to the dashboard, configure allowed origins via the `LOKI_DASHBOARD_CORS` environment variable:
800
+ The Control Plane has no CORS setting and requires a loopback Host header unless it is bound to a non-loopback address with `LOKI_CONTROL_TOKEN` set (see [control-plane-migration.md](control-plane-migration.md)). The `LOKI_DASHBOARD_CORS` variable below applies only to the legacy API server:
800
801
 
801
802
  ```bash
802
803
  # Allow specific origins
@@ -362,7 +362,7 @@ class FileEventDebouncer(FileSystemEventHandler):
362
362
  ### What Was NOT Audited (and Why)
363
363
 
364
364
  1. **Frontend code duplication** (TypeScript/React):
365
- - Dashboard UI (`dashboard-ui/src/`) and Lab UI (`web-app/dist/` or source) likely have overlapping components (session cards, status displays, log viewers).
365
+ - Dashboard UI (`legacy-ui/src/`) and Lab UI (`web-app/dist/` or source) likely have overlapping components (session cards, status displays, log viewers).
366
366
  - Scope: This audit covers Python backend only. Frontend audit deferred to UI design review in Merge-3 (Vite rebuild).
367
367
 
368
368
  2. **Database schema migrations and compatibility:**
@@ -30,7 +30,7 @@ This document is the source-of-truth route-collision analysis for the Purple Lab
30
30
  | Method | Path | Dashboard purpose | Purple Lab purpose | Resolution |
31
31
  |---|---|---|---|---|
32
32
  | `GET` | `/health` | Dashboard health check | Purple Lab health check | Single `/health` on Dashboard wins. Lab's becomes `/lab/health`. |
33
- | `GET` | `/{full_path:path}` | Dashboard SPA catch-all (serves `dashboard/static/index.html`) | Purple Lab SPA catch-all (serves `web-app/dist/index.html`) | Dashboard catch-all wins at root. Lab's becomes `/lab/{full_path:path}` -- triggered only inside the mount. |
33
+ | `GET` | `/{full_path:path}` | Dashboard SPA catch-all (serves `legacy-ui-static/index.html`) | Purple Lab SPA catch-all (serves `web-app/dist/index.html`) | Dashboard catch-all wins at root. Lab's becomes `/lab/{full_path:path}` -- triggered only inside the mount. |
34
34
  | `WS` | `/ws` | Dashboard WebSocket bus | Purple Lab WebSocket bus | Dashboard `/ws` wins. Lab's becomes `/lab/ws`. Long term: unify into a single bus (Phase Merge-5). |
35
35
 
36
36
  All three collisions resolve automatically when Lab's FastAPI app is mounted at `/lab` via Starlette `app.mount("/lab", purple_lab_app)`. No code dedup needed in Merge-1 -- the mount provides path isolation.
@@ -68,7 +68,7 @@ Change the `open` URL from `http://127.0.0.1:${PURPLE_LAB_DEFAULT_PORT}/` to `ht
68
68
  ## Release Pipeline Wiring
69
69
 
70
70
  ### 7. Root `package.json` `prepublishOnly` (line ~106)
71
- Append `&& cd ../web-app && npm ci && npm run build && test -f dist/index.html` after the existing dashboard-ui build.
71
+ Append `&& cd ../web-app && npm ci && npm run build && test -f dist/index.html` after the existing legacy-ui build.
72
72
 
73
73
  ### 8. `Dockerfile`
74
74
  Add `COPY` for web-app build artifacts + server files. Mirror the `dashboard/` COPY pattern. (Merge-4 owns the actual import; Merge-3 ensures files are in the image.)
@@ -109,7 +109,7 @@ run_check "web-app build produces /lab/-prefixed assets" \
109
109
  ## NOT Done In This Phase
110
110
 
111
111
  - Auto-spawn web-app subprocess from `loki dashboard` (Merge-4).
112
- - Sidebar entry in `dashboard/static/index.html` (Merge-6).
112
+ - Sidebar entry in `legacy-ui-static/index.html` (Merge-6).
113
113
  - Deep state dedup (Merge-5).
114
114
  - Deprecation of `loki web` (Merge-7).
115
115
  - `vite-plugin-html` dev `/` -> `/lab/` redirect (nice-to-have, not blocking).
@@ -90,7 +90,7 @@ Read-only. Returns two honest series plus a budget block:
90
90
  `/api/cost` and `/api/budget` are left UNCHANGED (existing frontend + tests
91
91
  depend on them). The new endpoint is additive.
92
92
 
93
- ### 2. Dashboard panel: `dashboard/static/cost.html`
93
+ ### 2. Dashboard panel: `legacy-ui-static/cost.html`
94
94
 
95
95
  Self-contained, zero-build, all CSS+JS inlined (mirrors `proofs.html`). Fetches
96
96
  `/api/cost/timeline`. Shows: project total, budget gauge with a colored
@@ -144,7 +144,7 @@ Add a non-pausing warn when crossing 80%, keep the 100% pause:
144
144
  ## Files (for the integrator to cherry-pick)
145
145
 
146
146
  - `dashboard/server.py` (add `/api/cost/timeline`)
147
- - `dashboard/static/cost.html` (new)
147
+ - `legacy-ui-static/cost.html` (new)
148
148
  - `autonomy/loki` (add `cmd_cost` + dispatch + help)
149
149
  - `autonomy/run.sh` (warn-at-80% in `check_budget_limit`)
150
150
  - `loki-ts/src/runner/budget.ts` (warn flag)
@@ -94,7 +94,7 @@ is always recomputable from `.loki/proofs/`. Deleting it loses nothing.
94
94
  `/api/cost/timeline`). Reads `.loki/proofs/*/proof.json`, returns the
95
95
  per-run series + per-axis direction + insufficient flag.
96
96
 
97
- 3. Dashboard panel: standalone `dashboard/static/trust.html` + `/trust` route
97
+ 3. Dashboard panel: standalone `legacy-ui-static/trust.html` + `/trust` route
98
98
  (mirrors `cost.html` + `/cost`), plus a nav entry and SPA section in
99
99
  `build-standalone.js` (mirrors the cost panel wiring exactly).
100
100
 
@@ -21,7 +21,7 @@ the codebase has not changed (reuses the R1 codebase-signature idea).
21
21
  | Org knowledge graph | `memory/knowledge_graph.py` (`OrganizationKnowledgeGraph`) | Token-overlap scoring idea reused (`_tokenize` / `query_patterns`). NOT a codebase index -- it aggregates `.loki/memory/semantic/*.json` patterns across projects, keyed on `~/.loki/knowledge`. See "Honest reuse" below. |
22
22
  | Memory retrieval | `memory/retrieval.py` (`MemoryRetrieval`) | Inspected. It retrieves memory entries (episodic/semantic/procedural), NOT source code. Not a code indexer. Not reused for code retrieval. |
23
23
  | Dashboard read-API + traversal-safety | `dashboard/server.py:7191` (`_safe_proof_run_dir`) | Pattern reused for the wiki section/path param (`_safe_wiki_section`). |
24
- | Dashboard web components | `dashboard-ui/components/*.js` (Web Components) | New `loki-wiki-browser.js` follows the same `LokiElement` convention; registered in `index.js`. |
24
+ | Dashboard web components | `legacy-ui/components/*.js` (Web Components) | New `loki-wiki-browser.js` follows the same `LokiElement` convention; registered in `index.js`. |
25
25
 
26
26
  ### Honest reuse statement
27
27
 
@@ -33,7 +33,7 @@ dashboard `GET /api/checkpoints` normalizes them).
33
33
 
34
34
  ### Dashboard
35
35
  - `GET /api/checkpoints`, `GET /api/checkpoints/{id}`, `POST /api/checkpoints` exist.
36
- - The UI component `dashboard-ui/components/loki-checkpoint-viewer.js` (601 lines) ALREADY
36
+ - The UI component `legacy-ui/components/loki-checkpoint-viewer.js` (601 lines) ALREADY
37
37
  renders list + create + rollback-with-two-step-confirm and POSTs to
38
38
  `POST /api/checkpoints/{id}/rollback` -- but that endpoint **did not exist**. The
39
39
  dashboard rollback button was DEAD.
@@ -211,9 +211,9 @@ Every commit proven on BOTH routes (`bin/loki` + `LOKI_LEGACY_BASH=1 bin/loki`).
211
211
  - **FIX in v8 - release-notes bug** (`release.yml:179/231`): awk expects bracketed `## [VERSION]` but
212
212
  CHANGELOG uses unbracketed `## vVERSION`, so release notes have silently been generic. Fix the awk or
213
213
  the header format (one PR, verify the extracted body is non-empty).
214
- - **Dashboard frontend rebuilt** (`cd dashboard-ui && npm ci && npm run build:all`) - writes both
215
- `dashboard-ui/dist/` and `dashboard/static/`.
216
- - **Pre-publish validation** (CLAUDE.md 3a): `npm pack --dry-run` contains web-app/dist + dashboard/static;
214
+ - **Dashboard frontend rebuilt** (`cd legacy-ui && npm ci && npm run build:all`) - writes both
215
+ `legacy-ui/dist/` and `legacy-ui-static/`.
216
+ - **Pre-publish validation** (CLAUDE.md 3a): `npm pack --dry-run` contains web-app/dist + legacy-ui-static;
217
217
  fresh global install serves web app + API.
218
218
  - **Per-job release verification**: `gh run view <id> --json jobs` per channel (npm/Docker/Homebrew/Release),
219
219
  not just "workflow green".
@@ -100,10 +100,10 @@ opt-in advisor path.
100
100
  with allowlist haiku|sonnet|opus|fable (already does). Add start-time selection: `start_build`
101
101
  (server.py:3234) accepts an optional `model` that writes the override file BEFORE launch (so iteration
102
102
  1 picks it up). Validate against the same allowlist + clamp.
103
- - Frontend (dashboard-ui/src): add an accessible model selector (haiku/sonnet/opus) on the start/new-run
103
+ - Frontend (legacy-ui/src): add an accessible model selector (haiku/sonnet/opus) on the start/new-run
104
104
  surface AND a mid-run switcher that calls POST /api/session/model. Real design-system tokens, keyboard
105
105
  accessible, no AI-aesthetic. Show current effective model + that switch applies at next iteration.
106
- Rebuild dashboard/static per CLAUDE.md release step 2.
106
+ Rebuild legacy-ui-static per CLAUDE.md release step 2.
107
107
 
108
108
  ### Lane E - Catalog IDs, pricing note, parity tests [engineer 5]
109
109
  - model_catalog.json: opus-4-7 -> claude-opus-4-8 (3 occurrences), sonnet-4-6 -> claude-sonnet-5
@@ -60,7 +60,7 @@ This document tracks all implementation tasks to achieve tool synergy and compet
60
60
 
61
61
  | Task ID | Task | Status | Priority | Notes |
62
62
  |---------|------|--------|----------|-------|
63
- | SYN-025 | Extract dashboard as reusable web components | Done | High | dashboard-ui/ - ARIA, keyboard nav, focus mgmt - peer reviewed |
63
+ | SYN-025 | Extract dashboard as reusable web components | Done | High | legacy-ui/ - ARIA, keyboard nav, focus mgmt - peer reviewed |
64
64
  | SYN-026 | Create VS Code webview integration | Pending | High | Embed dashboard in VS Code |
65
65
  | SYN-027 | Unify styling and behavior | Pending | Medium | Consistent UX |
66
66
  | SYN-028 | Add dashboard feature parity check | Pending | Low | Ensure all features available |
@@ -75,7 +75,7 @@ loki memory retrieve "authentication"
75
75
  loki api start --port 57374
76
76
  loki api start
77
77
 
78
- # View dashboard (web UI)
78
+ # View the Control Plane UI
79
79
  loki dashboard open
80
80
  ```
81
81
 
@@ -87,7 +87,7 @@ Generated 2026-07-01 by the top100-backlog-enumeration ultracode workflow (7 age
87
87
  | 65 | medium | M | founder-gated | adoption | MCP registry submission + Glama claim + awesome-list PRs |
88
88
  | 66 | medium | M | autonomous | saas | autonomi-saas UI/UX pass: build-watching pane + finished cues from trust verdict |
89
89
  | 67 | medium | XL | autonomous | dashboard | Server.py route modularization (~10K-line monolith, no domain separation) |
90
- | 68 | medium | L | autonomous | dashboard | Large dashboard-ui components modularization (5 files 1K-1.9K lines) |
90
+ | 68 | medium | L | autonomous | dashboard | Large legacy-ui components modularization (5 files 1K-1.9K lines) |
91
91
  | 69 | medium | L | founder-gated | engine | Wave-13 deferred trust fixes + PRD-reuse spurious-update design fix |
92
92
  | 70 | medium | M | community | dashboard | Dashboard dark-toggle iframe theme not following SPA (harness/product parity) |
93
93
  | 71 | medium | M | community | ci | Sonnet-5 calibration follow-ups: test-verify --hosted + gate missing-tool handling |
@@ -121,7 +121,7 @@ mv loki-mode-8.0.0 ~/.claude/skills/loki-mode
121
121
 
122
122
  > **DEPRECATED as of v7.2.0.** The Loki Mode VS Code extension is no longer
123
123
  > maintained and is no longer published to the VS Code Marketplace. Use the
124
- > dashboard instead (`loki dashboard start`, then open http://localhost:57374).
124
+ > Control Plane instead (`loki dashboard`).
125
125
  > The `vscode-extension/` source remains in the repository for contributors who
126
126
  > want to build it locally. See
127
127
  > [INSTALLATION.md](INSTALLATION.md#vs-code-extension-deprecated) for details.
@@ -168,7 +168,7 @@ Reasons:
168
168
 
169
169
  ### Phase 3: Build/release tooling
170
170
  - Replace npm publish with `bun publish` in CI
171
- - Replace dashboard-ui esbuild with `bun build` (already 4-5x faster)
171
+ - Replace legacy-ui esbuild with `bun build` (already 4-5x faster)
172
172
  - Replace pytest where possible with `bun test` for non-Python tests
173
173
  - Measure: full CI wall time, npm install time
174
174
 
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Dashboard V2 Architecture
2
2
 
3
+ > **Historical:** this describes the classic dashboard, removed in Loki Mode 10.8. The Control Plane is the only UI; see [control-plane-migration.md](../control-plane-migration.md).
4
+
3
5
  **Status:** Design Phase
4
6
  **Version:** 0.1.0 (Draft)
5
7
  **Date:** 2026-02-01
@@ -1,5 +1,7 @@
1
1
  # Audit Logging
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Audit trails for Loki Mode operations.
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Authentication Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Authentication and access control for Loki Mode dashboard and API.
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Authorization Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Role-based access control (RBAC) for Loki Mode (v5.37.0).
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Module 2 Lab: Configure Enterprise Features
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Objective
4
6
 
5
7
  Enable and verify enterprise features: audit logging, OTEL observability, token authentication, and dashboard TLS.
@@ -1,5 +1,7 @@
1
1
  # Module 2: Enterprise Features
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode includes enterprise features for audit logging, observability, authentication, and SIEM integration. These features are controlled via environment variables and can be enabled incrementally.
@@ -1,5 +1,7 @@
1
1
  # Module 4 Lab: Deploy with Docker Compose
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Objective
4
6
 
5
7
  Deploy Loki Mode using Docker Compose, verify the dashboard is accessible, and configure resource limits.
@@ -1,5 +1,7 @@
1
1
  # Module 4: Production Deployment
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode can be deployed using Docker, Docker Compose, or direct installation via npm/Homebrew. This module covers deployment options, security hardening, resource management, and production configuration.
@@ -0,0 +1,97 @@
1
+ # Migrating from the classic dashboard to the Control Plane
2
+
3
+ Loki Mode 10.8 removes the classic dashboard UI (`dashboard-ui/`, `dashboard/static/`, and the UI served on port 57374). The Control Plane (`packages/control-plane`, UI in `packages/control-plane/ui`) is the only UI. Deploy files (Helm, compose, ECS) and the clients (SDKs, VS Code, `run.sh`) already point at it.
4
+
5
+ ## What changed
6
+
7
+ | Before | Now |
8
+ | --- | --- |
9
+ | UI and API on port 57374 (FastAPI, `dashboard/server.py`) | Control Plane on port 47821 by default (`loki control serve`) |
10
+ | `loki dashboard start` serves the classic UI | `loki dashboard`, `loki dashboard start` and `loki dashboard open` open the Control Plane |
11
+ | `dashboard-ui` build (`npm run build:all`) | `cd packages/control-plane && bun run build:all` (UI plus bundled server) |
12
+ | REST under `/api/*` | REST under `/v1/*`, plus `/health` and `/ready` |
13
+ | Token management through the dashboard | One bearer token, `LOKI_CONTROL_TOKEN`, on `/v1/*` |
14
+
15
+ ## Start the Control Plane
16
+
17
+ ```bash
18
+ loki control serve # 127.0.0.1:47821, database ~/.loki/control/control.db
19
+ loki control serve --port 0 # any free port; the printed URL is the real one
20
+ loki control status # reachable? how many runs held?
21
+ loki dashboard # reuse a running Control Plane, or start one, and open it
22
+ ```
23
+
24
+ Notes:
25
+
26
+ - Bun is required (https://bun.sh). Without it `loki dashboard` says so and does not start a server.
27
+ - The default port falls back to any free port when 47821 is taken. An explicit `--port` or `LOKI_CONTROL_PORT` never falls back.
28
+ - While `loki control serve` runs, runs on this machine ship to it automatically through `~/.loki/control/instance.json`. A run never starts the server.
29
+ - Import runs that finished before the server existed: `loki control backfill [DIR]`.
30
+ - Remove runs: `loki control prune --repo OWNER/NAME` or `--before ISO_DATE`, with `--dry-run` to preview.
31
+ - `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` print the URL instead of opening a browser.
32
+ - `LOKI_CONTROL=0` turns the Control Plane off. `LOKI_CONTROL_DEFAULT=0` makes the bare `loki dashboard` skip it.
33
+
34
+ Environment variables:
35
+
36
+ | Variable | Meaning |
37
+ | --- | --- |
38
+ | `LOKI_CONTROL_PORT` | listen port for `loki control serve`, and the port clients assume (default 47821) |
39
+ | `LOKI_CONTROL_URL` | where clients and the shipper send runs (overrides discovery) |
40
+ | `LOKI_CONTROL_DB` | SQLite path (default `~/.loki/control/control.db`) |
41
+ | `LOKI_CONTROL_HOST` | bind address (default 127.0.0.1) |
42
+ | `LOKI_CONTROL_TOKEN` | bearer token for `/v1/*`; required for any non-loopback bind, otherwise the server exits 2 |
43
+ | `LOKI_CONTROL_ALLOW_INSECURE_BIND` | `1` accepts a tokenless non-loopback bind (not recommended) |
44
+ | `LOKI_CONTROL_ANSWER_DIR` | where BLOCKED-run answers are written |
45
+
46
+ With a token set, send `Authorization: Bearer <token>` on every `/v1/*` call. Actions that touch the machine (start, stop, import, delete, config) exist only on a loopback-bound server and need a JSON content type.
47
+
48
+ ## Route mapping
49
+
50
+ Legacy routes come from `dashboard/server.py`. Rows marked "no direct legacy route" are Control Plane routes that did not exist in the classic server.
51
+
52
+ | Legacy | Control Plane |
53
+ | --- | --- |
54
+ | `GET /api/status` | `GET /v1/runs` (list, filters `verdict`, `repo`, `since`, `until`, `group_id`, `limit`, `cursor`), `GET /v1/runs/<source>/<run>` (detail), `GET /v1/stats` |
55
+ | `GET /api/cost` | `GET /v1/stats/cost` |
56
+ | `POST /api/control/start` | `POST /v1/start` (alias `POST /v1/runs`) |
57
+ | `POST /api/control/stop` | `POST /v1/runs/<source>/<run>/stop` |
58
+ | `POST /api/control/resume` | `POST /v1/runs/<source>/<run>/resume` |
59
+ | (none) | `POST /v1/runs/<source>/<run>/retry`, `POST /v1/runs/<source>/<run>/verify`, `POST /v1/runs/<source>/<run>/answer` |
60
+ | log streaming | `GET /v1/runs/<source>/<run>/events`, `GET /v1/runs/<source>/<run>/stream`, `GET /v1/stream`, `GET /v1/runs/<source>/<run>/artifact/<path>` |
61
+ | `GET /api/audit` | `GET /v1/audit` |
62
+ | `GET /api/health` family | `GET /health` (liveness), `GET /ready` (database check) |
63
+ | (no direct legacy route) | `GET /v1/config`, `PUT /v1/config` |
64
+ | (no direct legacy route) | `GET /v1/providers`, `GET /v1/integrations` |
65
+ | (no direct legacy route) | `GET /v1/notifications` |
66
+ | (no direct legacy route) | `GET /v1/merge/queue`, `POST /v1/merge/queue`, `POST /v1/merge/run`, `GET /v1/review/risk` |
67
+ | (no direct legacy route) | `GET /v1/keys` (public key only, loopback only) |
68
+ | (no direct legacy route) | `GET /v1/repos` (names only, loopback only) |
69
+ | (no direct legacy route) | `POST /v1/ingest`, `POST /v1/import`, `DELETE /v1/runs/<source>/<run>` |
70
+
71
+ ## Not yet available in the Control Plane
72
+
73
+ These legacy features have no Control Plane route today:
74
+
75
+ - `POST /api/control/pause`, `/api/control/app-restart` and `/api/control/app-stop`.
76
+ - `GET /api/audit/summary` and `GET /api/audit/verify` (the Control Plane has `GET /v1/audit` only).
77
+ - `GET /api/cost/timeline` and `GET /api/health/processes`.
78
+ - API key creation, rotation and revocation (`/api/keys` POST routes, `loki dashboard token`), RBAC and OIDC login. The Control Plane uses the single `LOKI_CONTROL_TOKEN`.
79
+ - The `/lab/` web app and the memory browser.
80
+ - Classic-server options: `loki dashboard --host`, `--tls-cert`, `--tls-key`, `LOKI_DASHBOARD_CORS`, `LOKI_DASHBOARD_PORT` for the UI.
81
+
82
+ ## Deploy
83
+
84
+ - Container, Helm and ECS overview: [control-plane-container.md](control-plane-container.md).
85
+ - Docker Compose: `deploy/docker-compose/README.md`. The UI is on host port 57374 by default (`LOKI_DASHBOARD_PORT`), mapped to the Control Plane on container port 47821. `LOKI_CONTROL_TOKEN` is required in `.env`; open the UI with `#token=<token>` appended.
86
+ - Helm: `deploy/helm/README.md` (chart at `deploy/helm/autonomi`, Control Plane deployment in `templates/deployment-controlplane.yaml`).
87
+ - ECS: `deploy/ecs/README.md` and `deploy/ecs/control-plane-task.json` (run exactly one task, the database is single-writer).
88
+
89
+ ## Clients
90
+
91
+ SDKs, the VS Code extension and `run.sh` talk to the Control Plane. Set `LOKI_CONTROL_URL` (and `LOKI_CONTROL_TOKEN` when the server has one) to point them at a remote instance.
92
+
93
+ ## Building from source
94
+
95
+ ```bash
96
+ cd packages/control-plane && bun run build:all # UI plus dist/server.js
97
+ ```
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Dashboard v5.40.0
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and its port 57374 are removed in Loki Mode 10.8. The Control Plane (`loki control serve`, default port 47821) is the only UI. See [control-plane-migration.md](control-plane-migration.md) for startup, the `/api/*` to `/v1/*` route mapping and what is not yet available.
4
+
3
5
  A production-ready realtime dashboard for monitoring and managing Loki Mode autonomous operations. Features a dark Vercel/Linear-inspired theme with purple accents, sidebar navigation, and overview cards.
4
6
 
5
7
  ## Overview
@@ -15,16 +17,13 @@ The Loki Mode Dashboard provides a visual interface to:
15
17
  ## Quick Start
16
18
 
17
19
  ```bash
18
- # Start the dashboard (default port: 57374)
19
- loki dashboard start
20
-
21
- # Open in browser
22
- open http://localhost:57374
20
+ # Open the Control Plane (starts `loki control serve` on 127.0.0.1:47821 if none is running)
21
+ loki dashboard
23
22
  ```
24
23
 
25
24
  The dashboard automatically syncs with Loki Mode when it's running, polling `dashboard-state.json` every 2 seconds.
26
25
 
27
- **Ports:** The dashboard and API run on unified port **57374** (FastAPI serves both). See [INSTALLATION.md](INSTALLATION.md#ports) for details.
26
+ **Ports:** the Control Plane serves the UI and `/v1/*` API on port **47821** by default. See [INSTALLATION.md](INSTALLATION.md#ports) for details.
28
27
 
29
28
  **Bound port:** if 57374 is held by something that is not this install's dashboard (another project, an older version, a foreign process), Loki walks to the next free port and never reuses or opens the foreign one. `loki start` and `loki dashboard` open and print the URL of the port actually bound; `loki start` publishes it to `.loki/dashboard/url`. A running dashboard is reused only when its `/health` reports the same version and install path.
30
29
 
@@ -485,4 +484,4 @@ Useful for:
485
484
 
486
485
  ## Control Plane by default
487
486
 
488
- Bare `loki` and `loki dashboard` (also `start` or `open` with no other flags) open the Control Plane. If `~/.loki/control/instance.json` names a live loopback server whose `/health` reports `service=loki-control`, that URL is reused; otherwise `loki control serve` is started detached and its PID is recorded in `~/.loki/control/serve.pid`. With `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` the URL is printed and no browser is opened. Without bun, Loki prints one line naming bun and uses the classic dashboard. Set `LOKI_CONTROL_DEFAULT=0` to always use the classic dashboard. Multi-repo `loki workspace` is on by default; `LOKI_WORKSPACES=0` disables it.
487
+ Bare `loki` and `loki dashboard` (also `start` or `open` with no other flags) open the Control Plane. If `~/.loki/control/instance.json` names a live loopback server whose `/health` reports `service=loki-control`, that URL is reused; otherwise `loki control serve` is started detached and its PID is recorded in `~/.loki/control/serve.pid`. With `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` the URL is printed and no browser is opened. Without bun, Loki prints one line naming bun and does not start a server (the classic dashboard is removed in 10.8). Multi-repo `loki workspace` is on by default; `LOKI_WORKSPACES=0` disables it.
@@ -82,13 +82,13 @@ context (the v9.22.13 bug: its body says "v9.24.0 is the next version on
82
82
  npm") or over-carry on a stale npm read, so auto-detect was removed
83
83
  entirely rather than patched again.
84
84
 
85
- ### 2. Build Dashboard Frontend
85
+ ### 2. Build Web App
86
86
 
87
87
  ```bash
88
- cd dashboard-ui && npm ci && npm run build:all && cd ..
89
- ls -la dashboard/static/index.html # verify >100KB
88
+ cd web-app && npm ci && npm run build && cd ..
89
+ ls -la web-app/dist/index.html
90
90
  ```
91
- `npm publish`'s `prepublishOnly` also triggers this build automatically.
91
+ `npm publish`'s `prepublishOnly` also triggers this build automatically. The legacy dashboard UI was removed; the browser UI is the Control Plane (`packages/control-plane`).
92
92
 
93
93
  ### 3. Run Tests
94
94
 
@@ -97,15 +97,13 @@ bash -n autonomy/run.sh
97
97
  bash -n autonomy/loki
98
98
  python3 -c "import ast, os; [ast.parse(open(f'dashboard/{f}').read()) for f in os.listdir('dashboard') if f.endswith('.py')]"
99
99
  python3 -c "import json; json.load(open('package.json')); print('JSON OK')"
100
- cd dashboard-ui && npx playwright test && cd .. # requires dashboard on 57374
101
100
  ```
102
101
 
103
102
  ### 3a. Pre-Publish Validation (MANDATORY)
104
103
 
105
104
  ```bash
106
- npm pack --dry-run 2>&1 | grep -E "web-app/dist|dashboard/static" || echo "FAIL: expected files missing"
105
+ npm pack --dry-run 2>&1 | grep -E "web-app/dist" || echo "FAIL: expected files missing"
107
106
  git ls-files web-app/dist/index.html | grep -q . || echo "FAIL: web-app/dist/ not tracked"
108
- git ls-files dashboard/static/index.html | grep -q . || echo "FAIL: dashboard/static/ not tracked"
109
107
  npm pack && npm install -g ./loki-mode-*.tgz
110
108
  loki --version
111
109
  loki web --no-open &
@@ -135,7 +133,7 @@ Before pushing the release commit, run `bash scripts/release.sh --check-clean` (
135
133
  ```bash
136
134
  gh run list --limit 1 && gh run watch <run-id>
137
135
  npm view loki-mode version
138
- npm pack loki-mode --dry-run 2>&1 | grep dashboard/static
136
+ npm pack loki-mode --dry-run 2>&1 | grep web-app/dist
139
137
  docker pull asklokesh/loki-mode:X.Y.Z && docker run --rm asklokesh/loki-mode:X.Y.Z loki version
140
138
  brew update && brew info loki-mode
141
139
  gh release view vX.Y.Z
@@ -148,10 +146,10 @@ Operator action: wait for the Release workflow publish to land and for the D49 a
148
146
 
149
147
  ### Distribution Channel Checklist
150
148
 
151
- | Channel | Dashboard API | Dashboard Frontend | Memory System | Skills/References |
149
+ | Channel | Dashboard API | Web App | Memory System | Skills/References |
152
150
  |---------|--------------------------|------------------------------|---------------|-------------------|
153
- | npm | `dashboard/*.py` | `dashboard/static/index.html`| `memory/` | `skills/`, `references/` |
154
- | Docker | `COPY dashboard/` | Built in Dockerfile or committed | `memory/` | `skills/`, `references/` |
151
+ | npm | `dashboard/*.py` | `web-app/dist/index.html` | `memory/` | `skills/`, `references/` |
152
+ | Docker | `COPY dashboard/` | Built in Dockerfile | `memory/` | `skills/`, `references/` |
155
153
  | Homebrew| Full tarball | Full tarball | Full tarball | Full tarball |
156
154
  | VSCode | DEPRECATED v7.2.0 -- no longer published | -- | -- | -- |
157
155
  | Release | Skill-only zip | N/A | N/A | `references/` |
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Integration Cookbook
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Step-by-step guides for connecting Loki Mode to external services. Each integration is opt-in and configured via environment variables.
4
6
 
5
7
  ---
@@ -226,7 +226,7 @@ npm install loki-mode-sdk
226
226
  #### 5. Test Enterprise Features
227
227
 
228
228
  ```bash
229
- # Start dashboard
229
+ # Open the Control Plane (the classic /api/* routes are replaced by /v1/*, see docs/control-plane-migration.md)
230
230
  loki dashboard
231
231
 
232
232
  # Test API
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Enterprise Performance Tuning
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Enterprise features are designed for minimal overhead. When disabled (no env vars set), every enterprise subsystem returns no-op responses with zero I/O. This guide covers tuning for production environments where enterprise features are actively used.
@@ -238,7 +240,7 @@ Rate limits are built into the API layer (10 requests/min on control endpoints,
238
240
 
239
241
  ### Static Asset Caching
240
242
 
241
- The dashboard frontend (`dashboard/static/index.html`) is a single-page application built as an IIFE bundle. Configure your reverse proxy to cache static assets:
243
+ The dashboard frontend (`legacy-ui-static/index.html`) is a single-page application built as an IIFE bundle. Configure your reverse proxy to cache static assets:
242
244
 
243
245
  ```nginx
244
246
  location /static/ {
@@ -1,5 +1,7 @@
1
1
  # Loki Mode SDK Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Official Python and TypeScript SDKs for the Autonomi Control Plane API. Both SDKs have zero external dependencies -- they use only standard library features.
4
6
 
5
7
  ---
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Enterprise Security
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode's security model follows a defense-in-depth approach. All security features are opt-in via environment variables, with sensible defaults that prioritize safety. When enterprise auth is not configured, the system operates in local-only mode with no network exposure.
@@ -43,7 +43,7 @@ Last updated: 2026-05-18
43
43
  - [x] F-2.25 Semantic layer: buckets, functions, gateway routes surfaced
44
44
  - [x] F-2.26 Council review hook (migrate_apply emits review records to .loki/quality/forge-migrations/; council read-side consumes from that path)
45
45
  - [x] F-2.27 Dashboard router /api/forge/* (state, db, storage, functions, gateway)
46
- - [~] F-2.28 Dashboard UI: deferred to dedicated dashboard-ui work (router is in place; UI panes are CSS/TSX work that will land in a separate PR)
46
+ - [~] F-2.28 Dashboard UI: deferred to dedicated legacy-ui work (router is in place; UI panes are CSS/TSX work that will land in a separate PR)
47
47
  - [x] F-2.29 CHANGELOG entry for F-2
48
48
  - [x] F-2.30 Commit + push F-2
49
49
 
@@ -196,7 +196,7 @@ Last updated: 2026-05-18
196
196
  ## Status
197
197
 
198
198
  Phase F-1..F-5 + X-11..X-26 + X-28..X-34 complete on
199
- claude/compare-litellm-loki-Y8Ke1. Remaining: X-27 (dashboard-ui).
199
+ claude/compare-litellm-loki-Y8Ke1. Remaining: X-27 (legacy-ui).
200
200
 
201
201
  ## More tasks discovered (next wave)
202
202
 
@@ -56,7 +56,7 @@ Dockerizable and offline-safe. A daily/refresh fetch keeps the numbers current.
56
56
 
57
57
  ## Design language (Autonomi)
58
58
  Match the shipped Autonomi look. Reference files: `artifacts/whitepaper/Autonomi-Whitepaper.html`
59
- and `dashboard/static/trust.html`. Palette: dark bg (#0F0B1A / #0d1117), Autonomi purple accent
59
+ and `legacy-ui-static/trust.html`. Palette: dark bg (#0F0B1A / #0d1117), Autonomi purple accent
60
60
  (#553DE9 / #7B6BF0), verified teal (#2ED8B6 / #1AAF95), dim ink (#B8B0C8 / #8A857C), warning amber
61
61
  (#C4922E), reject red (#C04848). Semantic status colors: verified=teal, reported/pending=amber,
62
62
  mistake/reverted=red, roadmap=purple. Clean, calm, founder-readable; big numbers, short labels,