ltcai 8.1.0 → 8.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 (123) hide show
  1. package/README.md +29 -48
  2. package/docs/CHANGELOG.md +70 -874
  3. package/docs/COMMUNITY_AND_PLUGINS.md +43 -0
  4. package/docs/DEVELOPMENT.md +26 -3
  5. package/docs/LEGACY_COMPATIBILITY.md +23 -1
  6. package/docs/ONBOARDING.md +38 -0
  7. package/docs/TRUST_MODEL.md +26 -26
  8. package/docs/WHY_LATTICE.md +29 -25
  9. package/docs/kg-schema.md +7 -5
  10. package/lattice_brain/__init__.py +1 -1
  11. package/lattice_brain/graph/ingest.py +40 -8
  12. package/lattice_brain/graph/schema.py +6 -0
  13. package/lattice_brain/runtime/agent_runtime.py +22 -37
  14. package/lattice_brain/runtime/multi_agent.py +1 -1
  15. package/lattice_brain/workflow.py +26 -1
  16. package/latticeai/__init__.py +1 -1
  17. package/latticeai/api/computer_use.py +2 -0
  18. package/latticeai/api/knowledge_graph.py +33 -0
  19. package/latticeai/api/local_files.py +2 -0
  20. package/latticeai/api/memory.py +13 -0
  21. package/latticeai/api/tools.py +1 -0
  22. package/latticeai/api/workflow_designer.py +5 -4
  23. package/latticeai/app_factory.py +30 -28
  24. package/latticeai/brain/__init__.py +1 -1
  25. package/latticeai/core/config.py +10 -0
  26. package/latticeai/core/legacy_compatibility.py +174 -0
  27. package/latticeai/core/marketplace.py +1 -1
  28. package/latticeai/core/tool_registry.py +10 -0
  29. package/latticeai/core/workspace_graph_trace.py +132 -0
  30. package/latticeai/core/workspace_memory.py +75 -0
  31. package/latticeai/core/workspace_os.py +135 -1283
  32. package/latticeai/core/workspace_os_utils.py +132 -0
  33. package/latticeai/core/workspace_permissions.py +99 -0
  34. package/latticeai/core/workspace_plugins.py +97 -0
  35. package/latticeai/core/workspace_runs.py +612 -0
  36. package/latticeai/core/workspace_skills.py +114 -0
  37. package/latticeai/core/workspace_snapshots.py +195 -0
  38. package/latticeai/core/workspace_timeline.py +107 -0
  39. package/latticeai/runtime/audit_runtime.py +64 -0
  40. package/latticeai/runtime/config_runtime.py +4 -0
  41. package/latticeai/runtime/sso_runtime.py +52 -0
  42. package/latticeai/services/architecture_readiness.py +37 -3
  43. package/latticeai/services/memory_service.py +215 -7
  44. package/latticeai/services/model_capability_registry.py +68 -0
  45. package/latticeai/services/model_engines.py +594 -0
  46. package/latticeai/services/model_loading.py +482 -0
  47. package/latticeai/services/model_recommendation.py +5 -0
  48. package/latticeai/services/model_runtime.py +131 -875
  49. package/latticeai/services/product_readiness.py +41 -18
  50. package/llm_router.py +7 -28
  51. package/mcp_registry.py +7 -24
  52. package/package.json +1 -1
  53. package/scripts/pts-claudecode-discord-bridge.mjs +2 -1
  54. package/src-tauri/Cargo.lock +1 -1
  55. package/src-tauri/Cargo.toml +1 -1
  56. package/src-tauri/tauri.conf.json +1 -1
  57. package/static/app/asset-manifest.json +11 -11
  58. package/static/app/assets/{Act-BOO66G-c.js → Act-D5mo4tE4.js} +1 -1
  59. package/static/app/assets/{Brain-C6lEYiD7.js → Brain-BVWyQw8A.js} +1 -1
  60. package/static/app/assets/{Capture-TATXBRDw.js → Capture-C1R6GT0t.js} +1 -1
  61. package/static/app/assets/{Library-DK4FIp8a.js → Library-C2wIxpTs.js} +1 -1
  62. package/static/app/assets/{System-Bgs6Ql7x.js → System-DE5GRyQR.js} +1 -1
  63. package/static/app/assets/index-CoiuIFFP.js +16 -0
  64. package/static/app/assets/index-ty1iGgZu.css +2 -0
  65. package/static/app/assets/{primitives-B70WOra0.js → primitives-BdsUNXa6.js} +1 -1
  66. package/static/app/assets/{textarea-Czrd9gwM.js → textarea-e7qaj6Hm.js} +1 -1
  67. package/static/app/index.html +2 -2
  68. package/static/sw.js +1 -1
  69. package/tools/__init__.py +2 -1
  70. package/tools/computer.py +21 -0
  71. package/docs/CARRYOVER_AUDIT_v3.6.0.md +0 -61
  72. package/docs/HANDOVER_v3.6.0.md +0 -46
  73. package/docs/RUNTIME_HOOK_COVERAGE_v3.5.0.md +0 -56
  74. package/docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md +0 -49
  75. package/docs/V2_ARCHITECTURE.md +0 -561
  76. package/docs/V3_2_AUDIT.md +0 -82
  77. package/docs/V3_BACKEND_ARCHITECTURE.md +0 -138
  78. package/docs/V3_FRONTEND.md +0 -146
  79. package/docs/V4_1_FRONTEND_ARCHITECTURE_REVIEW.md +0 -65
  80. package/docs/V4_1_FRONTEND_MIGRATION_REPORT.md +0 -70
  81. package/docs/V4_1_VALIDATION_REPORT.md +0 -47
  82. package/docs/V4_2_BRAIN_CORE_ARCHITECTURE.md +0 -97
  83. package/docs/V4_2_STORAGE_MIGRATION_REPORT.md +0 -91
  84. package/docs/V4_2_VALIDATION_REPORT.md +0 -89
  85. package/docs/V4_3_2_DEADCODE_AUDIT_REPORT.md +0 -174
  86. package/docs/V4_3_2_DOCUMENTATION_CLEANUP_REPORT.md +0 -81
  87. package/docs/V4_3_2_GITHUB_VERCEL_CHECK_REPORT.md +0 -75
  88. package/docs/V4_3_2_GRAPH_UX_REPORT.md +0 -48
  89. package/docs/V4_3_2_INDEPENDENT_AUDIT_PACKAGE.md +0 -209
  90. package/docs/V4_3_2_PRODUCT_POLISH_REPORT.md +0 -57
  91. package/docs/V4_3_2_SELF_AUDIT_REPORT.md +0 -63
  92. package/docs/V4_3_2_VALIDATION_REPORT.md +0 -97
  93. package/docs/V4_3_3_VALIDATION_REPORT.md +0 -46
  94. package/docs/V4_3_PORTABILITY_ARCHITECTURE.md +0 -69
  95. package/docs/V4_3_PRIVACY_AUDIT.md +0 -60
  96. package/docs/V4_3_PRODUCT_HARDENING_REPORT.md +0 -53
  97. package/docs/V4_3_VALIDATION_REPORT.md +0 -58
  98. package/docs/V4_4_0_EXTRACTION_REPORT.md +0 -239
  99. package/docs/V4_5_0_GEMMA_RUNTIME_COMPATIBILITY_REPORT.md +0 -49
  100. package/docs/V4_5_0_GRAPH_UX_REPORT.md +0 -34
  101. package/docs/V4_5_0_MODEL_RUNTIME_UX_REPORT.md +0 -40
  102. package/docs/V4_5_0_ONBOARDING_REPORT.md +0 -31
  103. package/docs/V4_5_0_PRODUCT_EXPERIENCE_RECOVERY_REPORT.md +0 -49
  104. package/docs/V4_5_0_VALIDATION_REPORT.md +0 -60
  105. package/docs/V4_5_1_GRAPH_EXPERIENCE_REPORT.md +0 -33
  106. package/docs/V4_5_1_MODEL_EXPERIENCE_REPORT.md +0 -37
  107. package/docs/V4_5_1_NAVIGATION_REPORT.md +0 -37
  108. package/docs/V4_5_1_ONBOARDING_REPORT.md +0 -29
  109. package/docs/V4_5_1_PRODUCT_REIMAGINING_REPORT.md +0 -61
  110. package/docs/V4_5_1_RC_ARTIFACTS.md +0 -44
  111. package/docs/V4_5_1_UX_REPORT.md +0 -45
  112. package/docs/V4_5_1_VALIDATION_REPORT.md +0 -55
  113. package/docs/V4_5_1_VISUAL_DESIGN_REPORT.md +0 -30
  114. package/docs/V4_6_0_LIVING_BRAIN_EXPERIENCE_REPORT.md +0 -72
  115. package/docs/V4_6_1_RELEASE_REFRESH_REPORT.md +0 -42
  116. package/docs/V4_7_0_ADMIN_SEPARATION_REPORT.md +0 -42
  117. package/docs/V4_7_1_ADMIN_OPERATIONS_REPORT.md +0 -49
  118. package/docs/V4_7_2_INTUITIVE_BRAIN_UX_REPORT.md +0 -62
  119. package/docs/V4_BRAIN_ARCHITECTURE.md +0 -322
  120. package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +0 -555
  121. package/docs/V4_IMPLEMENTATION_PLAN.md +0 -470
  122. package/static/app/assets/index-Bvv79nre.js +0 -16
  123. package/static/app/assets/index-Dslqglia.css +0 -2
@@ -1,138 +0,0 @@
1
- # Lattice AI v3 Backend Architecture
2
-
3
- Lattice AI v3 keeps the product local-first and knowledge-centric by combining
4
- three retrieval layers inside the backend:
5
-
6
- ```text
7
- User Data
8
- -> Chunking
9
- -> Local Embeddings
10
- -> SQLite Vector Index
11
-
12
- User Data
13
- -> Entity Extraction
14
- -> Relationship Extraction
15
- -> SQLite Knowledge Graph
16
-
17
- Search
18
- -> Hybrid Retrieval
19
- -> Keyword
20
- -> Vector
21
- -> Graph
22
- -> Unified Results
23
- ```
24
-
25
- ## Storage Model
26
-
27
- The authoritative knowledge store remains `knowledge_graph.py` on SQLite.
28
- Existing legacy graph rows are preserved, with the normalized v2 projection kept
29
- as a derived read surface.
30
-
31
- - `nodes`: entities, documents, folders, conversations, tasks, decisions, and
32
- chunk nodes.
33
- - `edges`: directed relationships with type, weight, metadata, and timestamps.
34
- - `chunks`: extracted text chunks linked back to the source node.
35
- - `knowledge_sources` and `local_file_index`: approved local folder indexing
36
- state, source metadata, and incremental scan bookkeeping.
37
- - `vector_embeddings`: derived local vector index rows for non-chunk nodes and
38
- full chunk text.
39
- - `vector_index_operations`: rebuild/incremental indexing history and status.
40
-
41
- Vector rows are derived data. A full rebuild may delete and recreate vector
42
- rows, but it does not mutate source documents, nodes, relationships, chunks, or
43
- local file records.
44
-
45
- ## Embeddings
46
-
47
- The default embedding model is `lattice-local-hash-v1`, a deterministic local
48
- feature-hashing embedder in `latticeai/core/local_embeddings.py`.
49
-
50
- It provides:
51
-
52
- - no cloud dependency,
53
- - no model download requirement,
54
- - deterministic output for tests and migrations,
55
- - normalized vectors for cosine similarity by dot product,
56
- - a stable interface for replacing the implementation with a local model
57
- runtime later.
58
-
59
- It is a fallback vector signal, not a production semantic embedding model.
60
- Future provider support may include Ollama, MLX, OpenAI-compatible providers,
61
- and other local embedding providers behind the same vector-index interface.
62
-
63
- ## Search Model
64
-
65
- `latticeai/services/search_service.py` composes the retrieval layers.
66
-
67
- - Keyword search uses the existing graph text search over title, summary, and
68
- metadata.
69
- - Vector search embeds the query locally and ranks SQLite vector rows by
70
- similarity.
71
- - Graph search performs direct graph matching, relationship search, and bounded
72
- neighbor expansion.
73
- - Hybrid search fuses the three result streams with configurable weights and
74
- returns one UI-ready result shape with per-source scores.
75
-
76
- Default hybrid weights:
77
-
78
- ```json
79
- {
80
- "keyword": 0.35,
81
- "vector": 0.40,
82
- "graph": 0.25
83
- }
84
- ```
85
-
86
- ## API Contracts
87
-
88
- The v3 backend exposes frontend-ready routes under `/api` while preserving all
89
- existing `/knowledge-graph/...` compatibility routes.
90
-
91
- ```text
92
- POST /api/search/hybrid
93
- GET /api/search/hybrid?q=...
94
- POST /api/search/keyword
95
- GET /api/search/keyword?q=...
96
- POST /api/search/vector
97
- GET /api/search/vector?q=...
98
- GET /api/graph
99
- GET /api/graph/node?node_id=...
100
- POST /api/graph/node
101
- GET /api/graph/relationship
102
- POST /api/graph/relationship
103
- GET /api/index/status
104
- POST /api/index/rebuild
105
- ```
106
-
107
- Results include stable fields for UI consumption:
108
-
109
- - `id`
110
- - `node_id`
111
- - `item_type`
112
- - `type`
113
- - `title`
114
- - `summary`
115
- - `score`
116
- - `rank`
117
- - `sources`
118
- - `source_scores`
119
- - `metadata`
120
- - `updated_at`
121
- - optional `graph_context`
122
-
123
- ## Migration Impact
124
-
125
- The migration is additive and non-destructive:
126
-
127
- - new SQLite tables are created with `CREATE TABLE IF NOT EXISTS`,
128
- - existing graph and local file data is preserved,
129
- - normalized v2 graph projection remains a derived compatibility layer,
130
- - vector rows can be rebuilt from existing graph/chunk rows,
131
- - `GET /api/index/status` reports missing or stale vector items,
132
- - `POST /api/index/rebuild` repairs the derived index.
133
-
134
- ## Backend Ownership
135
-
136
- This architecture deliberately avoids frontend shell redesign. The backend owns
137
- storage, indexing, retrieval, ranking, and API contracts; the UI can consume the
138
- new `/api` routes without requiring visual system changes.
@@ -1,146 +0,0 @@
1
- # Lattice AI v3 — Frontend Product Shell
2
-
3
- > Historical v3 shell notes. The current product shell is the React/Vite app
4
- > built from `frontend/` into `static/app/` with `npm run build:assets`; current
5
- > linting uses `scripts/lint_frontend.mjs`.
6
-
7
- > A token-native single-page workspace shell for Lattice AI v3. It ships as the
8
- > primary product experience and calls the real v3 retrieval/chat APIs while
9
- > rendering clear unavailable states for local services that are not running.
10
-
11
- Entry point: **`/app`** (served by `latticeai/api/static_routes.py` →
12
- the current `static/app/index.html` bundle; the historical v3 shell used
13
- `static/v3/index.html`). Login, auto-login after registration, SSO callback, and
14
- the PWA manifest land on `/app`. Legacy multi-page static screens have been
15
- deleted; compatibility routes (`/workspace`, `/chat`, `/graph`, `/admin`, …)
16
- redirect into their `/app#/...` views.
17
-
18
- ---
19
-
20
- ## Product model
21
-
22
- | Concept | Surface |
23
- | --- | --- |
24
- | **Personal / Organization workspace** | Scope switcher in the rail (`X-Workspace-Id` header is sent on every adapter call). |
25
- | **Basic / Advanced / Admin mode** | Mode switcher in the topbar. Mode gates which rail items appear and how dense each view is. |
26
- | **Retrieval lattice** | The signature identity: **Knowledge Graph + Vector Index + Hybrid Search**, surfaced on Home and as a live 3-dot index chip in the topbar. |
27
-
28
- Mode gating (`MODE_RANK` in `core/routes.js`): Basic ⊂ Advanced ⊂ Admin.
29
- Deep-linking into an `admin/*` route auto-promotes the shell to Admin mode.
30
-
31
- ---
32
-
33
- ## Information architecture
34
-
35
- One declarative table (historically `static/v3/js/core/routes.js`, now
36
- represented by the React routes under `frontend/src/`) drives the nav rail, the
37
- command palette, the router, breadcrumbs, and lazy view loading.
38
-
39
- ```
40
- Brain Knowledge Graph · Hybrid Search · Memory
41
- Ask Chat
42
- Capture Files · Pipeline*
43
- Act Agents* · Runs* · Workflows* · Planning* · Hooks*
44
- Library Models · Skills* · MCP* · Marketplace*
45
- System Overview · Account · Workspaces · Snapshots · Activity · Network* · Settings · My Computer*
46
- Administration Users · Permissions · Audit Logs · Security · Policies · Private VPC (admin mode)
47
- ```
48
-
49
- `*` = revealed in Advanced mode and above. Routes are hash-based
50
- (`#/knowledge-graph`, `#/admin/users`) so the SPA needs no server rewrites.
51
-
52
- ---
53
-
54
- ## Design system
55
-
56
- Token-native, layered on the existing **single color source**
57
- (`static/css/tokens.css`, `data-lt-theme` light/dark). No legacy override layers
58
- (`responsive.css` / `workspace.css` / `platform.css`) are loaded by v3.
59
- Runtime assets are loaded through `static/app/asset-manifest.json`; the build
60
- step writes hashed CSS/JS assets and `/app` reads the manifest instead of
61
- using manual `?v=` query strings.
62
-
63
- | File | Responsibility |
64
- | --- | --- |
65
- | `css/lattice.tokens.css` | Structural tokens — type scale, spacing (4pt), radii, elevation, motion, z-index, layout rails, pillar accents, lattice mesh. |
66
- | `css/lattice.base.css` | Reset, element defaults, the signature lattice backdrop, a11y utilities. |
67
- | `css/lattice.components.css` | Primitive vocabulary — cards, panels, buttons, inputs, pills, stats, tables, tabs, switches, meters, empty/loading/error states, toasts. |
68
- | `css/lattice.shell.css` | App chrome — rail, topbar, command palette, mobile drawer, retrieval pillars. |
69
- | `css/lattice.views.css` | Bespoke view layouts — hero, graph canvas, search results, chat, files, pipeline, admin. |
70
-
71
- **Rule:** component CSS uses only `var(--token)`; no per-component hardcoded
72
- themed colors and no `!important`. Both themes flow from the token values.
73
-
74
- **Identity:** a crystalline *lattice* mark, a faint node-and-edge mesh backdrop,
75
- and a three-pillar retrieval motif (graph = blue, vector = teal, hybrid =
76
- magenta). Deliberately **not** a clone of ChatGPT / Claude / Cursor / VS Code /
77
- Notion / Obsidian.
78
-
79
- ---
80
-
81
- ## Shell + view contract
82
-
83
- `core/shell.js` builds the chrome and renders views. Each view is a lazy ES
84
- module under `js/views/` exporting:
85
-
86
- ```js
87
- export async function render(ctx) { /* … */ return singleDomNode; }
88
- // optional: export const layout = "flush"; // full-bleed (chat)
89
- ```
90
-
91
- `ctx = { h, icon, api, store, c, route, params, navigate, toast }`
92
-
93
- - `h()` — dependency-free hyperscript (`core/dom.js`); child strings are
94
- auto-escaped (no injection surface).
95
- - `c` — component factories (`core/components.js`).
96
- - `store` — observable app state (theme / mode / workspace), persisted to
97
- `localStorage` (`core/store.js`).
98
-
99
- ---
100
-
101
- ## Integration contract
102
-
103
- `core/api.js` is the only transport layer. Every call hits the **real** endpoint
104
- first and returns `{ ok, status, data, source }` where `source` is `"live"` or
105
- `"unavailable"`. Unavailable responses carry empty data so primary surfaces do
106
- not invent counters, sample graphs, fake health, or fake run history.
107
-
108
- Core live surfaces established before v3.2.0:
109
-
110
- | Adapter | Endpoint | Unavailable state |
111
- | --- | --- | --- |
112
- | `api.indexStatus()` | `GET /api/index/status` | empty retrieval status |
113
- | `api.graph(params)` | `GET /api/graph` → `GET /knowledge-graph/graph` | empty graph |
114
- | `api.hybridSearch(q, opts)` | `POST /api/search/hybrid` | empty results |
115
- | `api.streamChat(body)` | `POST /chat` SSE | unavailable chat message |
116
-
117
- No backend retrieval logic is implemented in the frontend — only transport,
118
- normalization, clear provenance badges, and graceful fallback. When the live
119
- chat backend reports `no_model_loaded`, v3 Chat shows a setup message instead of
120
- falling back to generated text.
121
-
122
- Embedding disclosure: production profiles are exposed for local/Ollama/MLX and
123
- OpenAI-compatible providers. `lattice-local-hash-v1` remains a deterministic
124
- fallback and is not presented as a production semantic embedding model.
125
-
126
- ---
127
-
128
- ## Responsive strategy
129
-
130
- - **Desktop (≥1101px):** full 268px rail + content.
131
- - **Tablet (761–1100px):** rail collapses to a 76px icon rail.
132
- - **Mobile (≤760px):** rail becomes an off-canvas drawer (hamburger in the
133
- topbar); grids collapse to single column; the chat context rail hides.
134
-
135
- Plus: `prefers-color-scheme` following, `prefers-reduced-motion` honored, visible
136
- focus rings, skip link, keyboard command palette (⌘K / Ctrl-K).
137
-
138
- ---
139
-
140
- ## Validation
141
-
142
- - `npm run lint` (covers the current frontend through `scripts/lint_frontend.mjs`).
143
- - `npm run build:assets` (writes hashed `static/app` assets and `asset-manifest.json`).
144
- - `npm run test:visual` (`tests/visual/v3.spec.js` against the mock server, which
145
- serves `/app` and mocks the future API surfaces).
146
- - Browser-rendered smoke checks of every route in light and dark themes.
@@ -1,65 +0,0 @@
1
- # v4.1.0 Frontend Architecture Review
2
-
3
- ## Scope
4
-
5
- This review covers the v4.1.0 replacement of the `/app` frontend and desktop
6
- shell. It does not redesign Brain Core, storage, backend API contracts, or the
7
- agent/workflow runtime.
8
-
9
- ## Baseline
10
-
11
- v4.0.1 served a static frontend assembled under `static/v3` with bespoke build
12
- and lint scripts. Capability parity existed, but the implementation duplicated
13
- view systems, carried legacy static route assumptions, and could not cleanly
14
- share typed API contracts with the FastAPI backend.
15
-
16
- ## Target Architecture
17
-
18
- - Desktop shell: Tauri 2.0 primary, Electron fallback only.
19
- - Frontend: React, TypeScript, Vite, TanStack Query, Zustand, React Flow,
20
- Cytoscape.js, Tailwind CSS, local shadcn-style primitives.
21
- - API: generated OpenAPI TypeScript client from the existing FastAPI app.
22
- - Runtime: single client-side SPA, no SSR, no CDN.
23
- - Backend: existing FastAPI app remains the source of truth.
24
-
25
- ## Implemented Architecture
26
-
27
- - `frontend/` owns the React/Vite source.
28
- - `frontend/src/api/openapi.ts` is generated from `frontend/openapi.json`.
29
- - `frontend/src/api/client.ts` wraps generated-client JSON calls and keeps
30
- streaming chat plus multipart upload as explicit fetch special cases.
31
- - `frontend/src/routes.ts` defines Brain, Ask, Capture, Act, Library, System and
32
- maps legacy hash routes into those groups.
33
- - `static/app` is the shipped build output and is served by `/app`.
34
- - `src-tauri/` contains the Tauri 2.0 shell and backend-origin bridge.
35
- - `desktop/electron/` contains the fallback shell.
36
- - `static/sw.js` precaches the React app manifest/assets for offline-capable
37
- local startup.
38
-
39
- ## Boundary Decisions
40
-
41
- - The backend contract was preserved; only the frontend consumer changed.
42
- - Brain Core and storage modules were not modified for UI convenience.
43
- - No CDN fallback was introduced; all visual/runtime dependencies are bundled.
44
- - No demo-only controls were added. Unavailable capabilities render explicit
45
- unavailable/error states based on API responses.
46
- - npm runtime installs are kept lean: React/Vite/Tauri/Electron toolchains are
47
- development dependencies because the distributable app ships built assets.
48
-
49
- ## Capability Mapping
50
-
51
- | v4.0.1 capability | v4.1.0 surface |
52
- | --- | --- |
53
- | Knowledge Graph, hybrid search, memory, provenance, portability | Brain |
54
- | Chat, conversations, context trace, attachments | Ask |
55
- | Uploads, connected folders, local runtime, URL capture, index pipeline | Capture |
56
- | Agents, runs, approvals, workflows, triggers, hooks, tools | Act |
57
- | Models, embeddings, skills, MCP, templates/plugins | Library |
58
- | Account, auth, workspaces, snapshots, activity, network, settings, admin/security | System |
59
-
60
- ## Residual Risk
61
-
62
- - The first Vite bundle is larger than 500 kB after minification because graph,
63
- workflow, and app shell libraries are included in the initial desktop SPA
64
- bundle. This is a performance optimization target, not a capability blocker,
65
- and the build remains fully local/offline.
@@ -1,70 +0,0 @@
1
- # v4.1.0 Frontend Migration Report
2
-
3
- ## Objective
4
-
5
- Replace the v4.0.1 static frontend implementation with the Digital Brain
6
- desktop architecture while preserving capabilities, user data, backend API
7
- contracts, and local-first/offline operation.
8
-
9
- ## Migration Summary
10
-
11
- - Added React + TypeScript + Vite source under `frontend/`.
12
- - Added generated OpenAPI schema/client files under `frontend/openapi.json` and
13
- `frontend/src/api/openapi.ts`.
14
- - Added React capability pages for Brain, Ask, Capture, Act, Library, System.
15
- - Added Tauri 2.0 desktop shell under `src-tauri/`.
16
- - Added Electron fallback shell under `desktop/electron/`.
17
- - Replaced `/app` static serving with `static/app/index.html`.
18
- - Replaced v3 asset build/lint scripts with Vite build and frontend lint guards.
19
- - Removed `static/v3` and retired `scripts/build_v3_assets.mjs` /
20
- `scripts/lint_v3.mjs`.
21
- - Updated package metadata so Python wheel/sdist, npm tgz, and VSIX builds ship
22
- the new `static/app` assets.
23
-
24
- ## Compatibility
25
-
26
- - Existing FastAPI routes are preserved.
27
- - The generated OpenAPI client is produced from the live app schema.
28
- - Legacy app hash routes are mapped into the new primary navigation groups.
29
- - Service worker caching now targets the Vite app manifest instead of v3 assets.
30
- - User data formats, Brain database files, Workspace OS state, snapshots,
31
- conversations, memories, and graph data are not migrated or destructively
32
- changed by the frontend rebuild.
33
-
34
- ## Capability Parity
35
-
36
- | Capability | Migration result |
37
- | --- | --- |
38
- | Brain graph exploration | Cytoscape.js graph view in Brain |
39
- | Hybrid search | Brain search tab backed by `/api/search/hybrid` |
40
- | Memory recall | Brain memory tab backed by memory APIs |
41
- | Provenance and portability | Brain provenance/portability actions |
42
- | Chat and context trace | Ask surface with streaming chat and context panel |
43
- | Conversation management | Ask history backed by conversation APIs |
44
- | Document upload | Capture upload using multipart backend endpoint |
45
- | Connected folders/local runtime | Capture desktop/local runtime APIs |
46
- | Index pipeline and URL capture | Capture pipeline/browser ingestion APIs |
47
- | Agents and run records | Act agents/runs/approvals backed by runtime APIs |
48
- | Workflow graph | Act React Flow visualization and workflow APIs |
49
- | Triggers, hooks, tools | Act surfaces backed by trigger/hook/tool APIs |
50
- | Models and embeddings | Library model/embedding APIs |
51
- | Skills, MCP, templates/plugins | Library registry APIs |
52
- | Account/auth/profile/password | System account APIs |
53
- | Workspaces/invitations | System workspace APIs |
54
- | Snapshots/time-machine | System snapshot APIs |
55
- | Activity/presence/network | System activity and network APIs |
56
- | Admin/security/settings | System admin and settings APIs |
57
-
58
- ## Removed Frontend Debt
59
-
60
- - Duplicate static v3 view modules.
61
- - Legacy frontend build pipeline.
62
- - Legacy v3 frontend lint script.
63
- - Static v3 asset tree in release packages.
64
- - Direct then-current release references to v4.0.1 in then-latest docs.
65
-
66
- ## Data Preservation
67
-
68
- No user data migration is required for v4.1.0. All persisted state remains owned
69
- by the existing backend stores. The frontend rebuild only changes the client and
70
- desktop shell used to access those stores.
@@ -1,47 +0,0 @@
1
- # v4.1.0 Validation Report
2
-
3
- ## Summary
4
-
5
- v4.1.0 RC validation passed for the React/Vite frontend, Tauri desktop shell,
6
- FastAPI backend compatibility, release artifacts, and installed-wheel smoke.
7
-
8
- ## Commands Run
9
-
10
- | Area | Command | Result |
11
- | --- | --- | --- |
12
- | OpenAPI generation | `npm run frontend:openapi` | Pass; generated 308 paths |
13
- | Static app build | `npm run build:assets` | Pass; wrote `static/app/asset-manifest.json` |
14
- | Frontend lint / no CDN / API compatibility | `npm run lint` | Pass; scanned 28 frontend/static files; OpenAPI exposes 308 paths |
15
- | TypeScript build | `npm run typecheck` | Pass; frontend TS + VS Code extension build |
16
- | Python compile | `npm run check:python` | Pass; compiled 206 modules |
17
- | Ruff | `node scripts/run_python.mjs -m ruff check .` | Pass |
18
- | Unit tests | `npm run test:unit -- --tb=short` | Pass; 585 passed, 2 warnings |
19
- | Live integration tests | `LTCAI_TEST_BASE_URL=http://127.0.0.1:8899 npm run test:integration -- --tb=short` | Pass; 9 passed |
20
- | Playwright visual/offline tests | `npx playwright test tests/visual/v3.spec.js` | Pass; 12 passed |
21
- | Tauri cargo check | `npm run desktop:tauri:check` | Pass |
22
- | Tauri desktop build | `LATTICEAI_DESKTOP_NO_BACKEND=1 npm run desktop:tauri:build` | Pass; built `.app` and DMG |
23
- | Electron fallback syntax/version | `node --check desktop/electron/main.cjs && npx electron --version` | Pass; Electron v42.4.0 |
24
- | Release artifacts | `npm run release:artifacts` plus resumed `npm pack && npm run package:vsix` | Pass |
25
- | Artifact validation | `npm run release:validate` | Pass; exact v4.1.0 wheel/sdist/VSIX/tgz found |
26
- | Wheel smoke | `node scripts/run_python.mjs scripts/wheel_smoke.py --wheel dist/ltcai-4.1.0-py3-none-any.whl` | Pass; imports 19 modules and `/health` reports 4.1.0 |
27
- | npm pack dry-run | `npm pack --dry-run` | Pass; `ltcai-4.1.0.tgz`, 259 files, 2.9 MB |
28
-
29
- ## Generated Artifacts
30
-
31
- - `dist/ltcai-4.1.0-py3-none-any.whl`
32
- - `dist/ltcai-4.1.0.tar.gz`
33
- - `dist/ltcai-4.1.0.vsix`
34
- - `ltcai-4.1.0.tgz`
35
- - `src-tauri/target/release/bundle/macos/Lattice AI.app`
36
- - `src-tauri/target/release/bundle/dmg/Lattice AI_4.1.0_aarch64.dmg`
37
-
38
- ## Notes
39
-
40
- - Vite reports one large initial bundle warning after minification. The app
41
- remains fully local/offline and passes visual/offline startup validation.
42
- - `cargo check` reports a future-incompatibility warning in transitive
43
- `block v0.1.6`; the current Tauri 2.0 build passes on Rust 1.96.
44
- - Release artifact validation warns that historical artifacts remain in
45
- `dist/`; this is expected and reinforces the rule to upload only exact
46
- v4.1.0 filenames, never a wildcard from the `dist` directory.
47
- - No external registry publish was performed.
@@ -1,97 +0,0 @@
1
- # Lattice AI v4.2.0 — Brain Core Architecture
2
-
3
- Status: released validation complete
4
-
5
- v4.2.0 extracts the Digital Brain backend boundary into the importable
6
- `lattice_brain` package while preserving the existing FastAPI contracts and the
7
- v4.1.0 user data layout. FastAPI, CLI, tests, and future tools can now import
8
- Brain Core directly instead of reaching through root compatibility modules.
9
-
10
- ## Package Boundary
11
-
12
- - `lattice_brain` is the independent Brain Core package namespace.
13
- - `latticeai.brain` remains as a compatibility namespace for existing callers.
14
- - Root modules such as `knowledge_graph.py` and `kg_schema.py` remain
15
- compatibility shims.
16
- - FastAPI now constructs the graph and durable conversation store through
17
- `lattice_brain.BrainCore`.
18
-
19
- ## Brain Core Surfaces
20
-
21
- The package exposes the implemented v4 brain modules:
22
-
23
- - Knowledge system: `KnowledgeGraphStore`
24
- - Memory system: `BrainMemory`
25
- - Context assembler: `ContextAssembler`
26
- - Durable conversations: `ConversationStore`
27
- - Device identity and signed exchange helpers
28
- - Brain Network compatibility exports
29
- - Encrypted `.latticebrain` archives
30
- - Storage abstraction and migration tools
31
-
32
- The frontend still talks only to FastAPI localhost APIs. No frontend code calls
33
- Python directly.
34
-
35
- ## Storage Layer
36
-
37
- `lattice_brain.storage` introduces:
38
-
39
- - `StorageEngine` ABC
40
- - `SQLiteEngine` default engine
41
- - `PostgresEngine` opt-in engine with pgvector extension setup
42
- - `DockerPostgresWizard` explicit-consent local Docker setup
43
- - `SQLiteToPostgresMigrator` idempotent migration planner/runner, including
44
- rowid-less FTS5 shadow table support through declared primary keys
45
-
46
- SQLite remains the default. Postgres is never required. If
47
- `LATTICEAI_STORAGE_ENGINE=postgres` is selected without a DSN or optional
48
- dependency support, startup fails honestly instead of silently falling back to
49
- SQLite.
50
-
51
- ## Vector Search
52
-
53
- SQLite vector search remains real and local:
54
-
55
- - Existing vector rows stay in `vector_embeddings`.
56
- - The active fallback is deterministic local hash embeddings with brute-force
57
- cosine scoring.
58
- - `sqlite-vec` is detected and loaded when available.
59
- - Capability reports distinguish `sqlite-vec` from `bruteforce-cosine`; the
60
- fallback is reported honestly and is still a real search path.
61
-
62
- Postgres scale mode initializes a pgvector-backed `brain_vectors` table when
63
- the `vector` extension is available.
64
-
65
- ## Archive Model
66
-
67
- v4.2.0 adds encrypted `.latticebrain` archives:
68
-
69
- - AES-256-GCM payload encryption
70
- - PBKDF2-HMAC-SHA256 key derivation
71
- - Encrypted SQLite database and blob payload
72
- - Restore replaces the target DB/WAL/SHM safely and restores blobs
73
- - Wrong passphrase or tampered data fails closed
74
-
75
- The existing JSON export/import and ZIP backup/restore paths remain compatible.
76
-
77
- ## FastAPI APIs
78
-
79
- New localhost APIs:
80
-
81
- - `GET /api/brain/storage`
82
- - `POST /api/brain/storage/postgres/docker`
83
- - `POST /api/brain/storage/migrate-postgres`
84
- - `POST /api/knowledge-graph/archive`
85
- - `POST /api/knowledge-graph/archive/restore`
86
-
87
- All mutating operations require admin authorization. Docker starts only when the
88
- request explicitly carries consent.
89
-
90
- ## Compatibility
91
-
92
- - Existing v4.1.0 SQLite data remains in `knowledge_graph.sqlite`.
93
- - Existing `knowledge_graph.py`, `kg_schema.py`, and `latticeai.brain.*`
94
- imports continue to work.
95
- - Existing FastAPI routes remain available.
96
- - Existing release artifacts still build.
97
- - No data-loss migration is performed automatically.
@@ -1,91 +0,0 @@
1
- # Lattice AI v4.2.0 — Storage Migration Report
2
-
3
- Status: released validation complete
4
-
5
- v4.2.0 adds a pluggable storage layer without changing the default local-first
6
- runtime. Existing users continue on SQLite. Postgres is an explicit opt-in
7
- scale target, not a required dependency and not an automatic fallback.
8
-
9
- ## Existing Data
10
-
11
- - Existing v4.1.0 data remains in `~/.ltcai/knowledge_graph.sqlite`.
12
- - Blob payloads remain in `~/.ltcai/knowledge_graph_blobs/`.
13
- - Durable conversations continue to share the same SQLite DB family.
14
- - No startup migration rewrites user data for v4.2.0.
15
-
16
- ## SQLite Engine
17
-
18
- `SQLiteEngine` owns SQLite connection setup:
19
-
20
- - WAL mode
21
- - foreign keys enabled
22
- - local path creation
23
- - backup and restore helpers
24
- - sqlite-vec loading attempt when installed
25
- - honest capability report when sqlite-vec is unavailable
26
-
27
- The current graph store continues to use SQLite-specific SQL and is therefore
28
- wired only to `SQLiteEngine` for the active FastAPI runtime.
29
-
30
- ## Postgres Engine
31
-
32
- `PostgresEngine` is opt-in and fail-closed:
33
-
34
- - Requires `LATTICEAI_POSTGRES_DSN` when explicitly selected.
35
- - Requires optional `psycopg` support.
36
- - Creates `lattice_brain` schema by default.
37
- - Runs `CREATE EXTENSION IF NOT EXISTS vector`.
38
- - Creates a pgvector-backed `brain_vectors` table.
39
-
40
- If Postgres is selected but unavailable, Lattice AI reports the error. It does
41
- not hide the failure by falling back to SQLite.
42
-
43
- ## Docker Setup
44
-
45
- `DockerPostgresWizard` writes a local Docker Compose file for
46
- `pgvector/pgvector:pg16`. It never runs Docker unless the caller explicitly
47
- passes consent.
48
-
49
- API behavior:
50
-
51
- - `consent=false`: writes the compose file and returns `consent_required`.
52
- - `dry_run=true`: returns the exact Docker command without starting anything.
53
- - `consent=true` and `dry_run=false`: runs `docker compose up -d postgres`.
54
-
55
- ## SQLite to Postgres Migration
56
-
57
- `SQLiteToPostgresMigrator` plans and copies all user tables from a SQLite brain
58
- database into Postgres:
59
-
60
- - Introspects non-internal SQLite tables.
61
- - Preserves every row.
62
- - Uses table `id` as the idempotence key when present.
63
- - Uses declared primary keys, including composite keys on rowid-less FTS5 shadow
64
- tables.
65
- - Uses preserved `__source_rowid` when no declared key exists and SQLite rowid
66
- is available.
67
- - Upserts rows on repeated runs.
68
- - Leaves the source SQLite database untouched.
69
-
70
- The API defaults to dry-run migration planning. Actual copy requires an
71
- explicit DSN and `dry_run=false`.
72
-
73
- Live v4.2.0 validation used explicit Docker consent to start
74
- `pgvector/pgvector:pg16`, copy a seeded v4 SQLite brain database into
75
- Postgres, verify source and destination row counts, rerun the migration
76
- idempotently, query pgvector distance ordering, and tear down the test Compose
77
- stack with volumes.
78
-
79
- ## Encrypted Archives
80
-
81
- `.latticebrain` archive support was added for local encrypted backup/restore:
82
-
83
- - Database and blobs are zipped locally.
84
- - Payload is encrypted with AES-256-GCM.
85
- - Keys derive from the user passphrase via PBKDF2-HMAC-SHA256.
86
- - Restore rejects bad passphrases or tampered payloads.
87
-
88
- ## Compatibility Result
89
-
90
- No v4.1.0 capability is removed. SQLite remains the default and does not depend
91
- on Docker, Postgres, pgvector, or network access.