ltcai 8.1.0 → 8.2.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.
- package/README.md +20 -41
- package/docs/CHANGELOG.md +38 -874
- package/docs/DEVELOPMENT.md +26 -3
- package/docs/LEGACY_COMPATIBILITY.md +3 -1
- package/docs/TRUST_MODEL.md +26 -26
- package/docs/WHY_LATTICE.md +28 -25
- package/docs/kg-schema.md +6 -4
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/schema.py +6 -0
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/computer_use.py +2 -0
- package/latticeai/api/memory.py +13 -0
- package/latticeai/app_factory.py +30 -28
- package/latticeai/brain/__init__.py +1 -1
- package/latticeai/core/config.py +10 -0
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/tool_registry.py +10 -0
- package/latticeai/core/workspace_graph_trace.py +132 -0
- package/latticeai/core/workspace_memory.py +75 -0
- package/latticeai/core/workspace_os.py +135 -1283
- package/latticeai/core/workspace_os_utils.py +132 -0
- package/latticeai/core/workspace_permissions.py +99 -0
- package/latticeai/core/workspace_plugins.py +97 -0
- package/latticeai/core/workspace_runs.py +612 -0
- package/latticeai/core/workspace_skills.py +114 -0
- package/latticeai/core/workspace_snapshots.py +195 -0
- package/latticeai/core/workspace_timeline.py +107 -0
- package/latticeai/runtime/audit_runtime.py +64 -0
- package/latticeai/runtime/config_runtime.py +4 -0
- package/latticeai/runtime/sso_runtime.py +52 -0
- package/latticeai/services/architecture_readiness.py +3 -3
- package/latticeai/services/memory_service.py +215 -7
- package/latticeai/services/model_capability_registry.py +68 -0
- package/latticeai/services/model_engines.py +603 -0
- package/latticeai/services/model_loading.py +482 -0
- package/latticeai/services/model_recommendation.py +5 -0
- package/latticeai/services/model_runtime.py +141 -866
- package/latticeai/services/product_readiness.py +19 -18
- package/package.json +1 -1
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +11 -11
- package/static/app/assets/{Act-BOO66G-c.js → Act-D9jIknFd.js} +1 -1
- package/static/app/assets/{Brain-C6lEYiD7.js → Brain-CFOtWbPN.js} +1 -1
- package/static/app/assets/{Capture-TATXBRDw.js → Capture-Q4WYzwr5.js} +1 -1
- package/static/app/assets/{Library-DK4FIp8a.js → Library-C5Q2yWee.js} +1 -1
- package/static/app/assets/{System-Bgs6Ql7x.js → System-BLbjdr1_.js} +1 -1
- package/static/app/assets/index-BqammyNu.js +16 -0
- package/static/app/assets/index-ty1iGgZu.css +2 -0
- package/static/app/assets/{primitives-B70WOra0.js → primitives-Br8uSfZ4.js} +1 -1
- package/static/app/assets/{textarea-Czrd9gwM.js → textarea-BnhNs1_X.js} +1 -1
- package/static/app/index.html +2 -2
- package/static/sw.js +1 -1
- package/tools/__init__.py +2 -1
- package/tools/computer.py +21 -0
- package/docs/CARRYOVER_AUDIT_v3.6.0.md +0 -61
- package/docs/HANDOVER_v3.6.0.md +0 -46
- package/docs/RUNTIME_HOOK_COVERAGE_v3.5.0.md +0 -56
- package/docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md +0 -49
- package/docs/V2_ARCHITECTURE.md +0 -561
- package/docs/V3_2_AUDIT.md +0 -82
- package/docs/V3_BACKEND_ARCHITECTURE.md +0 -138
- package/docs/V3_FRONTEND.md +0 -146
- package/docs/V4_1_FRONTEND_ARCHITECTURE_REVIEW.md +0 -65
- package/docs/V4_1_FRONTEND_MIGRATION_REPORT.md +0 -70
- package/docs/V4_1_VALIDATION_REPORT.md +0 -47
- package/docs/V4_2_BRAIN_CORE_ARCHITECTURE.md +0 -97
- package/docs/V4_2_STORAGE_MIGRATION_REPORT.md +0 -91
- package/docs/V4_2_VALIDATION_REPORT.md +0 -89
- package/docs/V4_3_2_DEADCODE_AUDIT_REPORT.md +0 -174
- package/docs/V4_3_2_DOCUMENTATION_CLEANUP_REPORT.md +0 -81
- package/docs/V4_3_2_GITHUB_VERCEL_CHECK_REPORT.md +0 -75
- package/docs/V4_3_2_GRAPH_UX_REPORT.md +0 -48
- package/docs/V4_3_2_INDEPENDENT_AUDIT_PACKAGE.md +0 -209
- package/docs/V4_3_2_PRODUCT_POLISH_REPORT.md +0 -57
- package/docs/V4_3_2_SELF_AUDIT_REPORT.md +0 -63
- package/docs/V4_3_2_VALIDATION_REPORT.md +0 -97
- package/docs/V4_3_3_VALIDATION_REPORT.md +0 -46
- package/docs/V4_3_PORTABILITY_ARCHITECTURE.md +0 -69
- package/docs/V4_3_PRIVACY_AUDIT.md +0 -60
- package/docs/V4_3_PRODUCT_HARDENING_REPORT.md +0 -53
- package/docs/V4_3_VALIDATION_REPORT.md +0 -58
- package/docs/V4_4_0_EXTRACTION_REPORT.md +0 -239
- package/docs/V4_5_0_GEMMA_RUNTIME_COMPATIBILITY_REPORT.md +0 -49
- package/docs/V4_5_0_GRAPH_UX_REPORT.md +0 -34
- package/docs/V4_5_0_MODEL_RUNTIME_UX_REPORT.md +0 -40
- package/docs/V4_5_0_ONBOARDING_REPORT.md +0 -31
- package/docs/V4_5_0_PRODUCT_EXPERIENCE_RECOVERY_REPORT.md +0 -49
- package/docs/V4_5_0_VALIDATION_REPORT.md +0 -60
- package/docs/V4_5_1_GRAPH_EXPERIENCE_REPORT.md +0 -33
- package/docs/V4_5_1_MODEL_EXPERIENCE_REPORT.md +0 -37
- package/docs/V4_5_1_NAVIGATION_REPORT.md +0 -37
- package/docs/V4_5_1_ONBOARDING_REPORT.md +0 -29
- package/docs/V4_5_1_PRODUCT_REIMAGINING_REPORT.md +0 -61
- package/docs/V4_5_1_RC_ARTIFACTS.md +0 -44
- package/docs/V4_5_1_UX_REPORT.md +0 -45
- package/docs/V4_5_1_VALIDATION_REPORT.md +0 -55
- package/docs/V4_5_1_VISUAL_DESIGN_REPORT.md +0 -30
- package/docs/V4_6_0_LIVING_BRAIN_EXPERIENCE_REPORT.md +0 -72
- package/docs/V4_6_1_RELEASE_REFRESH_REPORT.md +0 -42
- package/docs/V4_7_0_ADMIN_SEPARATION_REPORT.md +0 -42
- package/docs/V4_7_1_ADMIN_OPERATIONS_REPORT.md +0 -49
- package/docs/V4_7_2_INTUITIVE_BRAIN_UX_REPORT.md +0 -62
- package/docs/V4_BRAIN_ARCHITECTURE.md +0 -322
- package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +0 -555
- package/docs/V4_IMPLEMENTATION_PLAN.md +0 -470
- package/static/app/assets/index-Bvv79nre.js +0 -16
- 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.
|
package/docs/V3_FRONTEND.md
DELETED
|
@@ -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.
|