@nxuss/lemma 1.32.0 → 1.34.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 (183) hide show
  1. package/README.md +16 -2
  2. package/dashboard/README.md +28 -332
  3. package/dashboard/dist/assets/{index-Dh-whqJ7.js → index-euG1IvQ7.js} +82 -82
  4. package/dashboard/dist/index.html +1 -1
  5. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  6. package/dist/cjs/cli/lemma-proxy.js +20 -1
  7. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  8. package/dist/cjs/language-core/contracts/CapabilityMatrix.d.ts +10 -0
  9. package/dist/cjs/language-core/contracts/CapabilityMatrix.d.ts.map +1 -0
  10. package/dist/cjs/language-core/contracts/CapabilityMatrix.js +70 -0
  11. package/dist/cjs/language-core/contracts/CapabilityMatrix.js.map +1 -0
  12. package/dist/cjs/language-core/detection/detectProjectType.d.ts +17 -0
  13. package/dist/cjs/language-core/detection/detectProjectType.d.ts.map +1 -0
  14. package/dist/cjs/language-core/detection/detectProjectType.js +186 -0
  15. package/dist/cjs/language-core/detection/detectProjectType.js.map +1 -0
  16. package/dist/cjs/language-core/registry/adapterRegistry.d.ts +11 -0
  17. package/dist/cjs/language-core/registry/adapterRegistry.d.ts.map +1 -0
  18. package/dist/cjs/language-core/registry/adapterRegistry.js +45 -0
  19. package/dist/cjs/language-core/registry/adapterRegistry.js.map +1 -0
  20. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.d.ts +24 -0
  21. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.d.ts.map +1 -0
  22. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.js +199 -0
  23. package/dist/cjs/languages/adapters/dotnet/DotNetDependencyGraph.js.map +1 -0
  24. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts +37 -0
  25. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts.map +1 -0
  26. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.js +51 -0
  27. package/dist/cjs/languages/adapters/dotnet/DotNetLanguageAdapter.js.map +1 -0
  28. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.d.ts +25 -0
  29. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.d.ts.map +1 -0
  30. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.js +241 -0
  31. package/dist/cjs/languages/adapters/dotnet/DotNetPatchValidator.js.map +1 -0
  32. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.d.ts +18 -0
  33. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.d.ts.map +1 -0
  34. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.js +214 -0
  35. package/dist/cjs/languages/adapters/dotnet/DotNetSymbolGraph.js.map +1 -0
  36. package/dist/cjs/languages/csharp/csharpSymbols.d.ts +33 -0
  37. package/dist/cjs/languages/csharp/csharpSymbols.d.ts.map +1 -0
  38. package/dist/cjs/languages/csharp/csharpSymbols.js +274 -0
  39. package/dist/cjs/languages/csharp/csharpSymbols.js.map +1 -0
  40. package/dist/cjs/mcp/cognitiveMap.d.ts +39 -10
  41. package/dist/cjs/mcp/cognitiveMap.d.ts.map +1 -1
  42. package/dist/cjs/mcp/cognitiveMap.js +488 -31
  43. package/dist/cjs/mcp/cognitiveMap.js.map +1 -1
  44. package/dist/cjs/mcp/index.js +6 -0
  45. package/dist/cjs/mcp/index.js.map +1 -1
  46. package/dist/cjs/mcp/tools/analysis.d.ts.map +1 -1
  47. package/dist/cjs/mcp/tools/analysis.js +9 -0
  48. package/dist/cjs/mcp/tools/analysis.js.map +1 -1
  49. package/dist/cjs/mcp/tools/codenav.d.ts.map +1 -1
  50. package/dist/cjs/mcp/tools/codenav.js +45 -76
  51. package/dist/cjs/mcp/tools/codenav.js.map +1 -1
  52. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  53. package/dist/cjs/mcp/tools/context-tools.js +28 -0
  54. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  55. package/dist/cjs/mcp/tools/depgraph.d.ts.map +1 -1
  56. package/dist/cjs/mcp/tools/depgraph.js +15 -0
  57. package/dist/cjs/mcp/tools/depgraph.js.map +1 -1
  58. package/dist/cjs/mcp/tools/dev-utils.d.ts.map +1 -1
  59. package/dist/cjs/mcp/tools/dev-utils.js +6 -0
  60. package/dist/cjs/mcp/tools/dev-utils.js.map +1 -1
  61. package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -1
  62. package/dist/cjs/mcp/tools/devtools.js +51 -39
  63. package/dist/cjs/mcp/tools/devtools.js.map +1 -1
  64. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  65. package/dist/cjs/mcp/tools/memory.js +10 -0
  66. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  67. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  68. package/dist/cjs/mcp/tools/misc.js +11 -0
  69. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  70. package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -1
  71. package/dist/cjs/mcp/tools/refactor.js +9 -0
  72. package/dist/cjs/mcp/tools/refactor.js.map +1 -1
  73. package/dist/cjs/mcp/tools.d.ts +1 -0
  74. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  75. package/dist/cjs/mcp/tools.js +44 -7
  76. package/dist/cjs/mcp/tools.js.map +1 -1
  77. package/dist/cjs/proxy/DebuggerState.d.ts +3 -0
  78. package/dist/cjs/proxy/DebuggerState.d.ts.map +1 -0
  79. package/dist/cjs/proxy/DebuggerState.js +18 -0
  80. package/dist/cjs/proxy/DebuggerState.js.map +1 -0
  81. package/dist/cjs/subconscious/TheBrainV2.d.ts +11 -0
  82. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  83. package/dist/cjs/subconscious/TheBrainV2.js +8 -0
  84. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  85. package/dist/cjs/utils/SearchCache.d.ts +2 -2
  86. package/dist/cjs/utils/SearchCache.d.ts.map +1 -1
  87. package/dist/cjs/utils/SearchCache.js +6 -6
  88. package/dist/cjs/utils/SearchCache.js.map +1 -1
  89. package/dist/cjs/utils/WorkspaceSearch.d.ts +3 -1
  90. package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
  91. package/dist/cjs/utils/WorkspaceSearch.js +5 -2
  92. package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
  93. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  94. package/dist/esm/cli/lemma-proxy.js +20 -1
  95. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  96. package/dist/esm/language-core/contracts/CapabilityMatrix.d.ts +10 -0
  97. package/dist/esm/language-core/contracts/CapabilityMatrix.d.ts.map +1 -0
  98. package/dist/esm/language-core/contracts/CapabilityMatrix.js +66 -0
  99. package/dist/esm/language-core/contracts/CapabilityMatrix.js.map +1 -0
  100. package/dist/esm/language-core/detection/detectProjectType.d.ts +17 -0
  101. package/dist/esm/language-core/detection/detectProjectType.d.ts.map +1 -0
  102. package/dist/esm/language-core/detection/detectProjectType.js +150 -0
  103. package/dist/esm/language-core/detection/detectProjectType.js.map +1 -0
  104. package/dist/esm/language-core/registry/adapterRegistry.d.ts +11 -0
  105. package/dist/esm/language-core/registry/adapterRegistry.d.ts.map +1 -0
  106. package/dist/esm/language-core/registry/adapterRegistry.js +41 -0
  107. package/dist/esm/language-core/registry/adapterRegistry.js.map +1 -0
  108. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.d.ts +24 -0
  109. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.d.ts.map +1 -0
  110. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.js +162 -0
  111. package/dist/esm/languages/adapters/dotnet/DotNetDependencyGraph.js.map +1 -0
  112. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts +37 -0
  113. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.d.ts.map +1 -0
  114. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.js +44 -0
  115. package/dist/esm/languages/adapters/dotnet/DotNetLanguageAdapter.js.map +1 -0
  116. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.d.ts +25 -0
  117. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.d.ts.map +1 -0
  118. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.js +201 -0
  119. package/dist/esm/languages/adapters/dotnet/DotNetPatchValidator.js.map +1 -0
  120. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.d.ts +18 -0
  121. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.d.ts.map +1 -0
  122. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.js +175 -0
  123. package/dist/esm/languages/adapters/dotnet/DotNetSymbolGraph.js.map +1 -0
  124. package/dist/esm/languages/csharp/csharpSymbols.d.ts +33 -0
  125. package/dist/esm/languages/csharp/csharpSymbols.d.ts.map +1 -0
  126. package/dist/esm/languages/csharp/csharpSymbols.js +268 -0
  127. package/dist/esm/languages/csharp/csharpSymbols.js.map +1 -0
  128. package/dist/esm/mcp/cognitiveMap.d.ts +39 -10
  129. package/dist/esm/mcp/cognitiveMap.d.ts.map +1 -1
  130. package/dist/esm/mcp/cognitiveMap.js +442 -25
  131. package/dist/esm/mcp/cognitiveMap.js.map +1 -1
  132. package/dist/esm/mcp/index.js +6 -0
  133. package/dist/esm/mcp/index.js.map +1 -1
  134. package/dist/esm/mcp/tools/analysis.d.ts.map +1 -1
  135. package/dist/esm/mcp/tools/analysis.js +9 -0
  136. package/dist/esm/mcp/tools/analysis.js.map +1 -1
  137. package/dist/esm/mcp/tools/codenav.d.ts.map +1 -1
  138. package/dist/esm/mcp/tools/codenav.js +46 -77
  139. package/dist/esm/mcp/tools/codenav.js.map +1 -1
  140. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  141. package/dist/esm/mcp/tools/context-tools.js +28 -0
  142. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  143. package/dist/esm/mcp/tools/depgraph.d.ts.map +1 -1
  144. package/dist/esm/mcp/tools/depgraph.js +15 -0
  145. package/dist/esm/mcp/tools/depgraph.js.map +1 -1
  146. package/dist/esm/mcp/tools/dev-utils.d.ts.map +1 -1
  147. package/dist/esm/mcp/tools/dev-utils.js +6 -0
  148. package/dist/esm/mcp/tools/dev-utils.js.map +1 -1
  149. package/dist/esm/mcp/tools/devtools.d.ts.map +1 -1
  150. package/dist/esm/mcp/tools/devtools.js +51 -39
  151. package/dist/esm/mcp/tools/devtools.js.map +1 -1
  152. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  153. package/dist/esm/mcp/tools/memory.js +10 -0
  154. package/dist/esm/mcp/tools/memory.js.map +1 -1
  155. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  156. package/dist/esm/mcp/tools/misc.js +11 -0
  157. package/dist/esm/mcp/tools/misc.js.map +1 -1
  158. package/dist/esm/mcp/tools/refactor.d.ts.map +1 -1
  159. package/dist/esm/mcp/tools/refactor.js +9 -0
  160. package/dist/esm/mcp/tools/refactor.js.map +1 -1
  161. package/dist/esm/mcp/tools.d.ts +1 -0
  162. package/dist/esm/mcp/tools.d.ts.map +1 -1
  163. package/dist/esm/mcp/tools.js +45 -9
  164. package/dist/esm/mcp/tools.js.map +1 -1
  165. package/dist/esm/proxy/DebuggerState.d.ts +3 -0
  166. package/dist/esm/proxy/DebuggerState.d.ts.map +1 -0
  167. package/dist/esm/proxy/DebuggerState.js +14 -0
  168. package/dist/esm/proxy/DebuggerState.js.map +1 -0
  169. package/dist/esm/subconscious/TheBrainV2.d.ts +11 -0
  170. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  171. package/dist/esm/subconscious/TheBrainV2.js +8 -0
  172. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  173. package/dist/esm/utils/SearchCache.d.ts +2 -2
  174. package/dist/esm/utils/SearchCache.d.ts.map +1 -1
  175. package/dist/esm/utils/SearchCache.js +6 -6
  176. package/dist/esm/utils/SearchCache.js.map +1 -1
  177. package/dist/esm/utils/WorkspaceSearch.d.ts +3 -1
  178. package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
  179. package/dist/esm/utils/WorkspaceSearch.js +5 -2
  180. package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
  181. package/mcp-server.js +1 -1
  182. package/package.json +4 -2
  183. package/dashboard/dist/assets/index-Dh-whqJ7.js.map +0 -1
package/README.md CHANGED
@@ -35,6 +35,17 @@ lemma start # gateway + dashboard on http://localhost:8081
35
35
  >
36
36
  > **🆕 v1.22.0 — Lemma auto-activates in every LLM client.** `npm i -g @nxuss/lemma` registers the skill in your **user** catalog (auto-loads in every `muse` session, any project) and `lemma init` wires each project for Muse, Claude Code, Cursor, Codex, Windsurf, Kiro and OpenCode. Health check: `lemma doctor`.
37
37
  >
38
+ > **🆕 v1.34.0 — Dashboard fixes.** The header shows the real running version (from `/health`), the debugger's pause/resume now works against the proxy, the Vite dev proxy points at the right port, and `npm run build` rebuilds the dashboard so the published UI is never stale.
39
+ >
40
+ > **🆕 v1.33.0 — C# (.NET) support, honestly labeled.** New per-project language detection
41
+ > (`.csproj/.sln`, target frameworks, mixed repos) and a read-only `capability_matrix` tool so clients
42
+ > stop guessing what works outside TypeScript. `get_ast_hologram` and `get_symbol_surgical_context` now
43
+ > serve C# (zero-dependency parser), `depgraph` gives using-based graphs with explicit `unresolved`
44
+ > externals, and `validate_patch_sandbox` runs `dotnet build` on a temp project copy — or says `NOT a
45
+ > build` when there's no SDK. `refactor`, `surgical_ast_insert`, `type_coverage_report`, `entropy_score`
46
+ > and `affected_tests` return `support level: fallback` on C# targets instead of faking it: nothing is
47
+ > modified. No new runtime dependencies. See the [changelog](CHANGELOG.md).
48
+ >
38
49
  > **🆕 v1.32.0 — what a command can see and reach.** `run_workspace_command` no longer hands the
39
50
  > child the host's whole environment (tokens, API keys, the license key): it gets a short allowlist,
40
51
  > extendable via `mcp.commandEnv.allow`. `cat`, `ls`, `grep`, `find`, `sed`… must keep their paths
@@ -209,6 +220,9 @@ lemma start # gateway + dashboard on http://localhost:8081
209
220
  read and workspace search, before anything leaves your machine.
210
221
  - **Zero-token static intelligence** — dependency graphs, entropy/coupling/risk scores, and an AST
211
222
  symbol index, computed locally with the TypeScript Compiler API. No LLM calls, no tokens.
223
+ C# projects get the same treatment where it's real: symbol holograms and surgical context via a
224
+ zero-dependency parser, using-based dependency graphs, and `dotnet build` patch validation —
225
+ everything else reports `fallback` instead of pretending (see `capability_matrix`).
212
226
  - **Command output distillation** — a failing `npm test`/`tsc` run is parsed by deterministic
213
227
  per-format rules (jest, tsc, eslint) down to the failures that matter; the full output is never
214
228
  lost, just stored and retrievable on demand.
@@ -216,7 +230,7 @@ lemma start # gateway + dashboard on http://localhost:8081
216
230
  compiler-verified AST location instead of asking the model to output a full-file rewrite.
217
231
  - **Infrastructure Command Center** — 22 free tools for Jenkins, OKD/OpenShift, and Terraform:
218
232
  discover, connect, deploy, diagnose, and detect drift, all via MCP.
219
- - **Scoped tool surface** — of the 110 registered tools, only the ones your project shows evidence
233
+ - **Scoped tool surface** — of the 111 registered tools, only the ones your project shows evidence
220
234
  of needing are advertised to the model each turn; the rest stay one `lemma_toolbox` call away.
221
235
 
222
236
  See [`CHANGELOG.md`](CHANGELOG.md) for the full, per-version history.
@@ -225,7 +239,7 @@ See [`CHANGELOG.md`](CHANGELOG.md) for the full, per-version history.
225
239
 
226
240
  ## 💎 Free vs Pro
227
241
 
228
- 60 of the 110 registered tools work with no license; 50 require Pro. Enforced by one allowlist in
242
+ 61 of the 111 registered tools work with no license; 50 require Pro. Enforced by one allowlist in
229
243
  code (`FREE_TOOLS` in `src/mcp/tools.ts`, including all 22 infrastructure tools), not by narrative.
230
244
  A session without a license doesn't even advertise the Pro tools — they stay registered and
231
245
  discoverable via `lemma_toolbox`.
@@ -1,351 +1,47 @@
1
1
  # Lemma Dashboard
2
2
 
3
- Real-time visualization and monitoring dashboard for the Lemma agent orchestration hub.
3
+ Live view of a running Lemma proxy: token savings, cache behaviour, connected agents, MCP
4
+ activity and the Brain's knowledge base.
4
5
 
5
- ## Features
6
+ The proxy serves the production build itself at `http://localhost:8081/dashboard/`
7
+ (`lemma start`). The version shown in the header comes from the proxy's `/health`.
6
8
 
7
- ### 1. Agent Graph
8
- - Live visualization of connected agents
9
- - Node graph showing agent relationships
10
- - Real-time status updates (active, idle, busy)
11
- - Agent capabilities display
12
- - Connection lines to central hub
9
+ ## Panels
13
10
 
14
- ### 2. Token Economics
15
- - Real-time cost savings tracking
16
- - Token usage metrics
17
- - Cache hit rate visualization
18
- - Performance charts:
19
- - Cache performance over time
20
- - Latency trends
21
- - Cumulative cost savings
22
- - ROI calculator with projections
11
+ - **Metrics bar / charts** — requests, hit rate, latency, tokens and cost saved
12
+ (`/api/metrics`, `/api/cache-stats`, `/api/savings-breakdown`).
13
+ - **The Hub** — connected agents (`/api/agents`), charts, savings breakdown, Brain knowledge
14
+ stats (`/api/brain/stats`), cache stats and the event timeline (`/api/events`).
15
+ - **The Tools** — live feed of MCP tool calls; the header badge shows MCP status
16
+ (`/api/mcp-status`) and toggles it (`/api/mcp/toggle`).
17
+ - **The Brain** — semantic search over the cache (`/api/search`).
18
+ - **Debugger** (bottom panel) — pause/resume. While paused the proxy refuses new completions
19
+ with `503` + `Retry-After` (`/api/debugger/pause|resume|state`).
20
+ - **Flush Cache** — `/api/cache/clear`.
23
21
 
24
- ### 3. Time-Travel Debugger
25
- - Event timeline with all agent interactions
26
- - State inspector for any point in time
27
- - Playback controls (pause, step back/forward)
28
- - State editing capabilities
29
- - Event filtering by type
22
+ `TimeTravel.tsx` and the rewind call (`/api/debugger/rewind`) exist in the code but are not
23
+ wired into the proxy: rewind is only implemented by the standalone API server
24
+ (`src/api/dashboardRoutes.ts`).
30
25
 
31
- ## Quick Start
32
-
33
- ### Installation
26
+ ## Develop
34
27
 
35
28
  ```bash
36
- cd dashboard
37
29
  npm install
30
+ npm run dev # Vite on http://localhost:8082/dashboard/
38
31
  ```
39
32
 
40
- ### Development
41
-
42
- ```bash
43
- npm run dev
44
- ```
45
-
46
- Dashboard will be available at `http://localhost:3000`
33
+ The dev server talks to the proxy on `http://localhost:8081` (start it with `lemma start`).
34
+ Override with `VITE_API_URL` / `VITE_WS_URL` in `.env`.
47
35
 
48
- ### Production Build
36
+ ## Build
49
37
 
50
38
  ```bash
51
- npm run build
52
- npm run preview
53
- ```
54
-
55
- ## Configuration
56
-
57
- Create a `.env` file:
58
-
59
- ```env
60
- VITE_ROUTER_URL=ws://localhost:8080
61
- VITE_API_URL=http://localhost:8080
62
- ```
63
-
64
- ## Architecture
65
-
66
- ### Tech Stack
67
-
68
- - **React 18**: UI framework
69
- - **TypeScript**: Type safety
70
- - **Vite**: Build tool and dev server
71
- - **TailwindCSS**: Styling
72
- - **Recharts**: Data visualization
73
- - **Zustand**: State management
74
- - **WebSocket**: Real-time communication
75
-
76
- ### Project Structure
77
-
78
- ```
79
- dashboard/
80
- ├── src/
81
- │ ├── components/
82
- │ │ ├── AgentGraph.tsx # Agent visualization
83
- │ │ ├── MetricsPanel.tsx # Token economics
84
- │ │ ├── TimeTravel.tsx # State debugger
85
- │ │ ├── ConnectionStatus.tsx # WebSocket status
86
- │ │ └── Layout.tsx # App layout
87
- │ ├── hooks/
88
- │ │ └── useWebSocket.ts # WebSocket connection
89
- │ ├── App.tsx # Main app component
90
- │ ├── main.tsx # Entry point
91
- │ └── index.css # Global styles
92
- ├── index.html
93
- ├── package.json
94
- ├── tsconfig.json
95
- ├── vite.config.ts
96
- └── tailwind.config.js
97
- ```
98
-
99
- ## WebSocket Protocol
100
-
101
- The dashboard connects to the Lemma router via WebSocket and exchanges IAP (Inter-Agent Protocol) messages.
102
-
103
- ### Connection
104
-
105
- ```typescript
106
- const ws = new WebSocket('ws://localhost:8080');
107
-
108
- // Send handshake
109
- ws.send(JSON.stringify({
110
- type: 'HANDSHAKE',
111
- messageId: crypto.randomUUID(),
112
- timestamp: Date.now(),
113
- payload: {
114
- agentId: 'dashboard-client',
115
- agentName: 'Dashboard',
116
- version: '1.0.0',
117
- capabilities: [{ name: 'monitoring', version: '1.0.0' }],
118
- },
119
- }));
39
+ npm run build # tsc + vite build -> dist/
120
40
  ```
121
41
 
122
- ### Message Types
123
-
124
- #### Metrics Update
125
- ```json
126
- {
127
- "type": "METRICS_UPDATE",
128
- "payload": {
129
- "totalRequests": 1000,
130
- "cacheHits": 800,
131
- "cacheMisses": 200,
132
- "averageLatency": 45.2,
133
- "tokensSaved": 150000,
134
- "costSaved": 0.3,
135
- "hitRate": "80.0%"
136
- }
137
- }
138
- ```
139
-
140
- #### Agent Connected
141
- ```json
142
- {
143
- "type": "AGENT_CONNECTED",
144
- "payload": {
145
- "id": "agent-123",
146
- "name": "Research Agent",
147
- "capabilities": ["research", "analysis"],
148
- "status": "idle",
149
- "connectedAt": 1234567890
150
- }
151
- }
152
- ```
153
-
154
- #### State Event
155
- ```json
156
- {
157
- "type": "STATE_EVENT",
158
- "payload": {
159
- "id": "event-uuid",
160
- "timestamp": 1234567890,
161
- "type": "TASK_REQUEST",
162
- "agentId": "agent-123",
163
- "data": {},
164
- "snapshot": {}
165
- }
166
- }
167
- ```
168
-
169
- ## Components
170
-
171
- ### AgentGraph
172
-
173
- Visualizes the agent swarm as a node graph.
174
-
175
- **Props:**
176
- - `agents: Agent[]` - Array of connected agents
177
-
178
- **Features:**
179
- - Circular layout around central hub
180
- - Color-coded status indicators
181
- - Capability badges
182
- - Connection lines with animation
183
-
184
- ### MetricsPanel
185
-
186
- Displays token economics and performance metrics.
187
-
188
- **Props:**
189
- - `metrics: Metrics` - Current metrics object
190
-
191
- **Features:**
192
- - 6 key metric cards
193
- - 3 interactive charts
194
- - ROI calculator
195
- - Historical data tracking
196
-
197
- ### TimeTravel
198
-
199
- State debugger with time-travel capabilities.
200
-
201
- **Props:**
202
- - `events: StateEvent[]` - Array of captured events
203
-
204
- **Features:**
205
- - Event timeline
206
- - State inspector
207
- - Playback controls
208
- - State editing
209
-
210
- ### ConnectionStatus
211
-
212
- Shows WebSocket connection status.
213
-
214
- **Props:**
215
- - `isConnected: boolean` - Connection state
216
-
217
- ## Customization
218
-
219
- ### Theme
220
-
221
- Edit `tailwind.config.js` to customize colors:
222
-
223
- ```javascript
224
- theme: {
225
- extend: {
226
- colors: {
227
- primary: { /* your colors */ },
228
- success: { /* your colors */ },
229
- // ...
230
- },
231
- },
232
- }
233
- ```
234
-
235
- ### Metrics
236
-
237
- Add custom metrics in `useWebSocket.ts`:
238
-
239
- ```typescript
240
- export interface Metrics {
241
- // ... existing metrics
242
- customMetric: number;
243
- }
244
- ```
245
-
246
- ### Charts
247
-
248
- Add new charts in `MetricsPanel.tsx` using Recharts:
249
-
250
- ```typescript
251
- <LineChart data={historicalData}>
252
- <Line dataKey="customMetric" stroke="#color" />
253
- </LineChart>
254
- ```
255
-
256
- ## Performance
257
-
258
- ### Optimizations
259
-
260
- - **Lazy Loading**: Components loaded on-demand
261
- - **Memoization**: React.memo for expensive components
262
- - **Virtual Scrolling**: For large event lists
263
- - **Data Limiting**: Keep only recent data points
264
-
265
- ### Metrics
266
-
267
- - **Bundle Size**: ~200KB gzipped
268
- - **Initial Load**: <1s on fast connection
269
- - **Memory Usage**: ~50MB typical
270
- - **CPU Usage**: <5% idle, <15% active
271
-
272
- ## Deployment
273
-
274
- ### Static Hosting
275
-
276
- Build and deploy to any static host:
277
-
278
- ```bash
279
- npm run build
280
- # Upload dist/ folder to:
281
- # - Vercel
282
- # - Netlify
283
- # - AWS S3 + CloudFront
284
- # - GitHub Pages
285
- ```
286
-
287
- ### Docker
288
-
289
- ```dockerfile
290
- FROM node:20-alpine AS builder
291
- WORKDIR /app
292
- COPY package*.json ./
293
- RUN npm ci
294
- COPY . .
295
- RUN npm run build
296
-
297
- FROM nginx:alpine
298
- COPY --from=builder /app/dist /usr/share/nginx/html
299
- EXPOSE 80
300
- CMD ["nginx", "-g", "daemon off;"]
301
- ```
302
-
303
- ### Environment Variables
304
-
305
- Set in deployment platform:
306
-
307
- - `VITE_ROUTER_URL`: WebSocket URL of Lemma router
308
- - `VITE_API_URL`: HTTP API URL (if different)
309
-
310
- ## Troubleshooting
311
-
312
- ### WebSocket Connection Failed
313
-
314
- 1. Check router is running
315
- 2. Verify URL in `.env`
316
- 3. Check CORS settings
317
- 4. Verify firewall rules
318
-
319
- ### Metrics Not Updating
320
-
321
- 1. Check WebSocket connection status
322
- 2. Verify router is broadcasting metrics
323
- 3. Check browser console for errors
324
- 4. Verify message format
325
-
326
- ### Charts Not Rendering
327
-
328
- 1. Check data format matches Recharts requirements
329
- 2. Verify ResponsiveContainer has height
330
- 3. Check for console errors
331
- 4. Verify data is not empty
332
-
333
- ## Development
334
-
335
- ### Adding a New Tab
336
-
337
- 1. Create component in `src/components/`
338
- 2. Add tab button in `App.tsx`
339
- 3. Add route in tab navigation
340
- 4. Update state management
341
-
342
- ### Adding a New Metric
343
-
344
- 1. Update `Metrics` interface in `useWebSocket.ts`
345
- 2. Add metric card in `MetricsPanel.tsx`
346
- 3. Update backend to send metric
347
- 4. Add to historical data tracking
42
+ From the repo root, `npm run build` also builds the dashboard. `dashboard/dist` is
43
+ git-ignored but published to npm, so rebuild before releasing.
348
44
 
349
- ## License
45
+ ## Stack
350
46
 
351
- MIT
47
+ React 18, TypeScript, Vite, Tailwind, Zustand, Recharts, Socket.IO client.