ltcai 3.5.0 → 4.0.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 +73 -35
- package/docs/CARRYOVER_AUDIT_v3.6.0.md +61 -0
- package/docs/CHANGELOG.md +32 -0
- package/docs/HANDOVER_v3.6.0.md +46 -0
- package/docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md +49 -0
- package/docs/V4_BRAIN_ARCHITECTURE.md +322 -0
- package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +509 -0
- package/docs/V4_IMPLEMENTATION_PLAN.md +470 -0
- package/docs/architecture.md +13 -12
- package/docs/kg-schema.md +102 -53
- package/docs/privacy.md +18 -2
- package/docs/security-model.md +17 -0
- package/kg_schema.py +139 -10
- package/knowledge_graph.py +874 -26
- package/knowledge_graph_api.py +11 -127
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/admin.py +1 -1
- package/latticeai/api/agents.py +7 -1
- package/latticeai/api/auth.py +27 -4
- package/latticeai/api/browser.py +217 -0
- package/latticeai/api/chat.py +112 -76
- package/latticeai/api/health.py +1 -1
- package/latticeai/api/hooks.py +1 -1
- package/latticeai/api/knowledge_graph.py +146 -0
- package/latticeai/api/local_files.py +1 -1
- package/latticeai/api/mcp.py +23 -11
- package/latticeai/api/memory.py +1 -1
- package/latticeai/api/models.py +1 -1
- package/latticeai/api/network.py +81 -0
- package/latticeai/api/portability.py +93 -0
- package/latticeai/api/realtime.py +1 -1
- package/latticeai/api/search.py +26 -2
- package/latticeai/api/security_dashboard.py +2 -3
- package/latticeai/api/setup.py +2 -2
- package/latticeai/api/static_routes.py +2 -4
- package/latticeai/api/tools.py +3 -0
- package/latticeai/api/workflow_designer.py +46 -0
- package/latticeai/api/workspace.py +71 -49
- package/latticeai/app_factory.py +1710 -0
- package/latticeai/brain/__init__.py +18 -0
- package/latticeai/brain/context.py +213 -0
- package/latticeai/brain/conversations.py +236 -0
- package/latticeai/brain/identity.py +175 -0
- package/latticeai/brain/memory.py +102 -0
- package/latticeai/brain/network.py +205 -0
- package/latticeai/core/agent.py +31 -7
- package/latticeai/core/audit.py +0 -7
- package/latticeai/core/config.py +1 -1
- package/latticeai/core/context_builder.py +1 -2
- package/latticeai/core/enterprise.py +1 -1
- package/latticeai/core/graph_curator.py +2 -2
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/mcp_registry.py +791 -0
- package/latticeai/core/model_compat.py +1 -1
- package/latticeai/core/model_resolution.py +0 -1
- package/latticeai/core/multi_agent.py +238 -4
- package/latticeai/core/security.py +1 -1
- package/latticeai/core/sessions.py +37 -7
- package/latticeai/core/workflow_engine.py +114 -2
- package/latticeai/core/workspace_os.py +58 -10
- package/latticeai/models/__init__.py +7 -0
- package/latticeai/models/router.py +779 -0
- package/latticeai/server_app.py +29 -1504
- package/latticeai/services/agent_runtime.py +1 -0
- package/latticeai/services/app_context.py +75 -14
- package/latticeai/services/ingestion.py +318 -0
- package/latticeai/services/kg_portability.py +207 -0
- package/latticeai/services/memory_service.py +39 -11
- package/latticeai/services/model_runtime.py +2 -5
- package/latticeai/services/platform_runtime.py +100 -23
- package/latticeai/services/search_service.py +17 -8
- package/latticeai/services/tool_dispatch.py +12 -2
- package/latticeai/services/triggers.py +241 -0
- package/latticeai/services/upload_service.py +37 -12
- package/latticeai/services/workspace_service.py +31 -0
- package/llm_router.py +29 -772
- package/ltcai_cli.py +1 -2
- package/mcp_registry.py +25 -788
- package/p_reinforce.py +124 -14
- package/package.json +11 -8
- package/scripts/build_vsix.mjs +72 -0
- package/scripts/bump_version.py +99 -0
- package/scripts/generate_diagrams.py +0 -1
- package/scripts/lint_v3.mjs +82 -18
- package/scripts/validate_release_artifacts.py +0 -1
- package/scripts/wheel_smoke.py +142 -0
- package/server.py +11 -7
- package/setup_wizard.py +1142 -0
- package/static/account.html +2 -4
- package/static/admin.html +3 -5
- package/static/chat.html +3 -6
- package/static/graph.html +2 -4
- package/static/sw.js +81 -52
- package/static/v3/asset-manifest.json +20 -19
- package/static/v3/css/{lattice.base.e4cdd05d.css → lattice.base.49deefb5.css} +1 -1
- package/static/v3/css/lattice.base.css +1 -1
- package/static/v3/css/{lattice.components.9b49d614.css → lattice.components.cde18231.css} +1 -1
- package/static/v3/css/lattice.components.css +1 -1
- package/static/v3/css/{lattice.shell.8fcc9d33.css → lattice.shell.29d36d85.css} +1 -1
- package/static/v3/css/lattice.shell.css +1 -1
- package/static/v3/css/{lattice.tokens.e7018963.css → lattice.tokens.304cbc40.css} +3 -0
- package/static/v3/css/lattice.tokens.css +3 -0
- package/static/v3/css/{lattice.views.22f69117.css → lattice.views.0a18b6c5.css} +2 -2
- package/static/v3/css/lattice.views.css +2 -2
- package/static/v3/index.html +3 -4
- package/static/v3/js/{app.d086489d.js → app.356e6452.js} +1 -1
- package/static/v3/js/core/{api.12b568ad.js → api.7a308b89.js} +39 -1
- package/static/v3/js/core/api.js +38 -0
- package/static/v3/js/core/{routes.d214b399.js → routes.7222343d.js} +22 -22
- package/static/v3/js/core/routes.js +22 -22
- package/static/v3/js/core/{shell.d05266f5.js → shell.a1657f20.js} +4 -4
- package/static/v3/js/core/shell.js +1 -1
- package/static/v3/js/core/{store.34ebd5e6.js → store.204a08b2.js} +1 -1
- package/static/v3/js/core/store.js +1 -1
- package/static/v3/js/views/graph-canvas.17c15d65.js +509 -0
- package/static/v3/js/views/graph-canvas.js +509 -0
- package/static/v3/js/views/{hybrid-search.b22b97e0.js → hybrid-search.2fb63ed9.js} +1 -2
- package/static/v3/js/views/hybrid-search.js +1 -2
- package/static/v3/js/views/knowledge-graph.5e40cbeb.js +509 -0
- package/static/v3/js/views/knowledge-graph.js +326 -54
- package/static/vendor/chart.umd.min.js +20 -0
- package/static/vendor/fonts/inter-latin-300-normal.woff2 +0 -0
- package/static/vendor/fonts/inter-latin-400-normal.woff2 +0 -0
- package/static/vendor/fonts/inter-latin-500-normal.woff2 +0 -0
- package/static/vendor/fonts/inter-latin-600-normal.woff2 +0 -0
- package/static/vendor/fonts/inter-latin-700-normal.woff2 +0 -0
- package/static/vendor/fonts/inter-latin-800-normal.woff2 +0 -0
- package/static/vendor/fonts/inter.css +44 -0
- package/static/vendor/icons/tabler-icons.min.css +4 -0
- package/static/vendor/icons/tabler-icons.woff2 +0 -0
- package/static/vendor/marked.min.js +69 -0
- package/static/workspace.html +2 -2
- package/telegram_bot.py +1 -2
- package/tools/commands.py +4 -2
- package/tools/computer.py +1 -1
- package/tools/documents.py +1 -3
- package/tools/filesystem.py +0 -4
- package/tools/knowledge.py +1 -3
- package/tools/network.py +1 -3
- package/codex_telegram_bot.py +0 -195
- package/docs/assets/v3.4.0/agent-run.png +0 -0
- package/docs/assets/v3.4.0/agents.png +0 -0
- package/docs/assets/v3.4.0/before/chat-before.png +0 -0
- package/docs/assets/v3.4.0/before/files-before.png +0 -0
- package/docs/assets/v3.4.0/chat.png +0 -0
- package/docs/assets/v3.4.0/connect-folder.png +0 -0
- package/docs/assets/v3.4.0/files.png +0 -0
- package/docs/assets/v3.4.0/home.png +0 -0
- package/docs/assets/v3.4.0/hooks-dispatch.png +0 -0
- package/docs/assets/v3.4.0/knowledge-graph.png +0 -0
- package/docs/assets/v3.4.0/local-agent.png +0 -0
- package/docs/assets/v3.4.0/memory.png +0 -0
- package/docs/assets/v3.4.0/settings.png +0 -0
- package/docs/assets/v3.4.0/vision-input.png +0 -0
- package/docs/assets/v3.4.0/workflows.png +0 -0
- package/docs/assets/v3.4.1/e2e_runtime_log.txt +0 -42
- package/docs/assets/v3.4.1/hooks-dispatch.png +0 -0
- package/docs/assets/v3.4.1/local-agent.png +0 -0
- package/docs/images/admin-dashboard.png +0 -0
- package/docs/images/architecture.png +0 -0
- package/docs/images/enterprise.png +0 -0
- package/docs/images/graph.png +0 -0
- package/docs/images/hero.gif +0 -0
- package/docs/images/knowledge-graph.png +0 -0
- package/docs/images/lattice-ai-demo.gif +0 -0
- package/docs/images/lattice-ai-hero.png +0 -0
- package/docs/images/logo.svg +0 -33
- package/docs/images/mobile-responsive.png +0 -0
- package/docs/images/model-recommendation.png +0 -0
- package/docs/images/onboarding.png +0 -0
- package/docs/images/organization.png +0 -0
- package/docs/images/pipeline.png +0 -0
- package/docs/images/screenshot-admin.png +0 -0
- package/docs/images/screenshot-chat.png +0 -0
- package/docs/images/screenshot-graph.png +0 -0
- package/docs/images/skills.png +0 -0
- package/docs/images/workspace-dark.png +0 -0
- package/docs/images/workspace-light.png +0 -0
- package/docs/images/workspace.png +0 -0
- package/requirements.txt +0 -16
- package/static/v3/js/views/knowledge-graph.a14ea7e7.js +0 -237
package/README.md
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
# Lattice AI
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**A local-first Digital Brain Platform. Your Knowledge Graph is the durable asset; models just read it.**
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
Every source — files, folders, web pages, browser tabs — converges into one
|
|
9
|
+
Knowledge Graph on your own machine. Connect models, agents, and search to that
|
|
10
|
+
graph instead of placing your work inside any single model.
|
|
10
11
|
</div>
|
|
11
12
|
|
|
12
13
|
<div align="center">
|
|
@@ -24,10 +25,21 @@
|
|
|
24
25
|
|
|
25
26
|

|
|
26
27
|
|
|
27
|
-
> **Lattice AI is a
|
|
28
|
+
> **Lattice AI is not a model-personalization system. It is a Digital Brain Platform.**
|
|
29
|
+
> The Knowledge Graph is your durable asset. **Models are replaceable. Knowledge is durable.**
|
|
28
30
|
|
|
29
|
-
It isn't another chat window
|
|
30
|
-
|
|
31
|
+
It isn't another chat window, and it isn't a way to "fine-tune a model on you." The
|
|
32
|
+
purpose of Lattice AI is to **connect models to your Knowledge Graph** — your digital
|
|
33
|
+
brain — not to place you inside a model. AI reads your knowledge; you own it.
|
|
34
|
+
|
|
35
|
+
- **Models are replaceable.** Swap MLX, Ollama, LM Studio, or a cloud LLM at will.
|
|
36
|
+
- **Agents, RAG, and the UI are replaceable.** They are implementations, not the asset.
|
|
37
|
+
- **Your Knowledge Graph is durable.** It outlives every model and is yours to export,
|
|
38
|
+
import, and back up locally — no cloud required.
|
|
39
|
+
|
|
40
|
+
Local-first by default; cloud only when you choose. (The Vercel site is a
|
|
41
|
+
landing/download/demo surface only — never the runtime. Lattice AI runs on your
|
|
42
|
+
machine over local SQLite.)
|
|
31
43
|
|
|
32
44
|
## Why install Lattice AI?
|
|
33
45
|
|
|
@@ -44,8 +56,10 @@ workspace around the work itself:
|
|
|
44
56
|
LM Studio; nothing leaves your machine unless you opt in.
|
|
45
57
|
- **Use cloud models only when you choose** — bring an API key for cloud LLMs
|
|
46
58
|
when you want them, not by default.
|
|
47
|
-
- **
|
|
48
|
-
|
|
59
|
+
- **Inspect every agent run** — the built-in runner persists plans, reviews,
|
|
60
|
+
retries, and results as replayable run records. Today that runner is
|
|
61
|
+
deterministic and does not call a model; LLM-driven execution is the v4
|
|
62
|
+
runtime, in progress.
|
|
49
63
|
|
|
50
64
|
Lattice AI is not a clone of ChatGPT, Claude, Cursor, Obsidian, or Notion. It
|
|
51
65
|
sits in a different place: a **workspace** that ties local/self-hosted AI, your
|
|
@@ -61,8 +75,8 @@ and workflows together — and runs on your own hardware.
|
|
|
61
75
|
Knowledge Graph.
|
|
62
76
|
- Run local models through MLX, Ollama, or LM Studio, and use cloud LLMs only when
|
|
63
77
|
you want to.
|
|
64
|
-
-
|
|
65
|
-
|
|
78
|
+
- Define agent workflows and replay their run records step by step (execution
|
|
79
|
+
is deterministic scaffolding today — it does not yet call a model).
|
|
66
80
|
- Separate personal work from organization work.
|
|
67
81
|
- Switch between Basic, Advanced, and Admin modes depending on your role.
|
|
68
82
|
|
|
@@ -96,12 +110,14 @@ chat and hybrid search.
|
|
|
96
110
|
The Knowledge Graph shows how files, decisions, conversations, and entities
|
|
97
111
|
connect — context that stays useful even when you switch models.
|
|
98
112
|
|
|
99
|
-
###
|
|
113
|
+
### Inspect agent run records
|
|
100
114
|
|
|
101
115
|

|
|
102
116
|
|
|
103
|
-
|
|
104
|
-
you can read back step by step.
|
|
117
|
+
The agent runner turns a goal into an inspectable, replayable run record — roles,
|
|
118
|
+
logs, review, and retry — that you can read back step by step. The runner shown
|
|
119
|
+
here is deterministic and LLM-free; real model-driven execution is the v4
|
|
120
|
+
runtime, currently in progress.
|
|
105
121
|
|
|
106
122
|
### Extend with hooks and the local runtime
|
|
107
123
|
|
|
@@ -187,32 +203,51 @@ npm run dev
|
|
|
187
203
|
|
|
188
204
|
## Latest Release
|
|
189
205
|
|
|
190
|
-
### v3.
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
206
|
+
### v3.6.0 — Knowledge Graph First
|
|
207
|
+
|
|
208
|
+
- **Unified ingestion pipeline** — one entrypoint normalizes every source
|
|
209
|
+
(file, folder, web URL, browser tab, text/markdown/code) into the graph,
|
|
210
|
+
idempotent by content hash and bracketed by the `pre_tool`/`post_tool` hook
|
|
211
|
+
lifecycle.
|
|
212
|
+
- **Formalized entity/relationship model** — first-class `Source`, `Repository`,
|
|
213
|
+
`Meeting`, `Organization`, `Workflow`, `Agent` entities and `indexed_from`,
|
|
214
|
+
`modified_by`, `belongs_to_project`, `part_of`, `discussed_in`, `decided_by`,
|
|
215
|
+
`generated_by`, `used_by_agent` relationships.
|
|
216
|
+
- **Browser & web ingestion** — `POST /api/browser/read-url` and
|
|
217
|
+
`/ingest-current-tab`, plus a local Manifest V3 extension that posts only to
|
|
218
|
+
`127.0.0.1`.
|
|
219
|
+
- **Portability** — local Knowledge Graph export/import (versioned JSON) and
|
|
220
|
+
binary backup/restore (DB + blobs, integrity-checked). No cloud required.
|
|
221
|
+
- **Provenance** — every node records where it came from; a queryable audit trail
|
|
222
|
+
makes the graph explainable.
|
|
223
|
+
- **Knowledge Graph as the primary surface** — the view becomes your digital brain
|
|
224
|
+
with Status, Sources, Capture, and Backup tabs.
|
|
225
|
+
|
|
226
|
+
See [RELEASE_NOTES_v3.6.0.md](RELEASE_NOTES_v3.6.0.md),
|
|
227
|
+
[docs/kg-schema.md](docs/kg-schema.md),
|
|
228
|
+
[docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md](docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md), and
|
|
198
229
|
[FEATURE_STATUS.md](FEATURE_STATUS.md).
|
|
199
230
|
|
|
200
|
-
## How it works
|
|
231
|
+
## How it works — every source converges into the graph
|
|
232
|
+
|
|
233
|
+
As of v3.6.0, all data sources flow through **one unified ingestion pipeline** into
|
|
234
|
+
the Knowledge Graph — no source bypasses it, none becomes an isolated silo:
|
|
201
235
|
|
|
202
236
|
```text
|
|
203
|
-
|
|
204
|
-
->
|
|
205
|
-
->
|
|
206
|
-
->
|
|
207
|
-
->
|
|
208
|
-
-> reusable outputs
|
|
237
|
+
source (file · folder · PDF · web URL · browser tab · text)
|
|
238
|
+
-> extraction -> normalization -> content hash (idempotent)
|
|
239
|
+
-> chunking -> entity detection -> relationship detection -> embedding
|
|
240
|
+
-> Knowledge Graph (Source -[indexed_from]- content -[contains]- chunks)
|
|
241
|
+
-> RAG / agents / memory / hybrid search
|
|
209
242
|
```
|
|
210
243
|
|
|
211
|
-
-
|
|
212
|
-
|
|
213
|
-
-
|
|
214
|
-
|
|
215
|
-
-
|
|
244
|
+
- **Every node is explainable.** Each ingested item carries provenance — where it
|
|
245
|
+
came from, when, how it was processed, whether it was embedded or linked.
|
|
246
|
+
- **The graph is the asset.** Memory, search, and agents are views over it; models
|
|
247
|
+
read it. Swap a model and your knowledge is unchanged.
|
|
248
|
+
- **Portable, no cloud.** Export/import the graph as JSON, or take a full local
|
|
249
|
+
binary backup (DB + blobs) and restore it.
|
|
250
|
+
- **Local-first protects the graph.** It lives in local SQLite on your machine.
|
|
216
251
|
|
|
217
252
|
For the deeper design, see [ARCHITECTURE.md](ARCHITECTURE.md) and
|
|
218
253
|
[docs/architecture.md](docs/architecture.md).
|
|
@@ -247,16 +282,19 @@ For the deeper design, see [ARCHITECTURE.md](ARCHITECTURE.md) and
|
|
|
247
282
|
### Releases
|
|
248
283
|
|
|
249
284
|
- [RELEASE_NOTES.md](RELEASE_NOTES.md) — current release notes
|
|
285
|
+
- [RELEASE_NOTES_v3.6.0.md](RELEASE_NOTES_v3.6.0.md)
|
|
286
|
+
- [RELEASE_NOTES_v3.5.0.md](RELEASE_NOTES_v3.5.0.md)
|
|
250
287
|
- [RELEASE_NOTES_v3.4.1.md](RELEASE_NOTES_v3.4.1.md)
|
|
251
288
|
- [RELEASE_NOTES_v3.4.0.md](RELEASE_NOTES_v3.4.0.md)
|
|
252
|
-
- [RELEASE_NOTES_v3.3.0.md](RELEASE_NOTES_v3.3.0.md)
|
|
253
289
|
- [CHANGELOG.md](CHANGELOG.md) and [docs/CHANGELOG.md](docs/CHANGELOG.md)
|
|
254
290
|
|
|
255
291
|
## Release History
|
|
256
292
|
|
|
257
293
|
| Version | Theme |
|
|
258
294
|
| --- | --- |
|
|
259
|
-
| **3.
|
|
295
|
+
| **3.6.0** | Knowledge Graph First — unified ingestion pipeline, formalized entity/relationship model, browser/web ingestion, local export/import/backup, provenance, KG as the primary surface |
|
|
296
|
+
| 3.5.0 | Foundation stabilization & verification — OIDC verifier, trusted-proxy gating, runtime hook coverage, `tools/` package, reproducible artifacts |
|
|
297
|
+
| 3.4.1 | Runtime completion — full hooks lifecycle, real Local Agent probes, Connect Folder and Folder Watch verified end-to-end |
|
|
260
298
|
| 3.4.0 | Platform completion — hooks execution, uploads in Files, vision image input, agent run trigger, on-device Local Agent / Connect Folder / Folder Watch |
|
|
261
299
|
| 3.3.1 | Visual product rebuild — rebuilt `/app` shell, Basic/Advanced/Admin navigation, refreshed design system |
|
|
262
300
|
| **3.3.0** | Product quality & honesty release — evidence-based feature audit, single-source version truth, working document upload, documented design system |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# v3.5.0 → v3.6.0 Carry-Over Audit
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-06-09
|
|
4
|
+
**Baseline:** v3.5.0 (tag published, GitHub Release live, CI + Visual Smoke green on `main`)
|
|
5
|
+
**Purpose:** Classify every open v3.5.0 carry-over risk as **blocking**, **non-blocking**, or
|
|
6
|
+
**obsolete** before starting v3.6.0 Knowledge Graph First work.
|
|
7
|
+
|
|
8
|
+
## Headline
|
|
9
|
+
|
|
10
|
+
**No carry-over item blocks v3.6.0.** v3.5.0 was a stabilization/verification release that added no
|
|
11
|
+
product surface. Every documented limitation is either an intentional, honestly-labeled scope
|
|
12
|
+
boundary or a closed issue. KG work can start immediately on the existing local SQLite store.
|
|
13
|
+
|
|
14
|
+
## Verified baseline state
|
|
15
|
+
|
|
16
|
+
| Check | Result | Evidence |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `v3.5.0` git tag | exists | `git tag` |
|
|
19
|
+
| GitHub Release `v3.5.0` | published, not draft | `gh release view v3.5.0` |
|
|
20
|
+
| CI on `main` | success | `gh run list --branch main` (run 27155690240) |
|
|
21
|
+
| Visual Smoke on `main` | success | run 27155690270 |
|
|
22
|
+
| VSIX reproducibility fix | merged | commit `78deb95` |
|
|
23
|
+
|
|
24
|
+
## Classified carry-over items
|
|
25
|
+
|
|
26
|
+
### Blocking
|
|
27
|
+
*(none)*
|
|
28
|
+
|
|
29
|
+
### Non-blocking
|
|
30
|
+
|
|
31
|
+
| Item | Why it does not block | Evidence |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| OIDC is RSA-only (RS256/384/512); ES*/HS*/`alg:none` rejected fail-closed | v3.6.0 KG work does not touch the SSO callback. EC support is additive when a provider needs it. | `latticeai/core/oidc.py:36` |
|
|
34
|
+
| Memory/KG maintenance endpoints (`/api/memory/{prune,compact,rebuild,clear}`) sit outside `pre_tool`/`post_tool` | Intentional, documented decision; these ops carry their own audit events. v3.6.0 follows the same convention and adds a coverage row rather than routing maintenance through `dispatch_tool`. | `docs/RUNTIME_HOOK_COVERAGE_v3.5.0.md:47` |
|
|
35
|
+
| Knowledge Graph is config-dependent on `LATTICEAI_ENABLE_GRAPH`, backed by a large `knowledge_graph.py` | This is the surface v3.6.0 builds on. Size/coupling is refactor context, addressed additively (new service modules, not a rewrite). | `FEATURE_STATUS.md:257-263` |
|
|
36
|
+
| Memory project/graph/vector tiers PARTIAL; prune/clear API-only (no UI) | KG-adjacent tiers v3.6.0 completes; honestly labeled, not broken. v3.6.0 adds the ingestion/export/provenance UI. | `FEATURE_STATUS.md:280-286` |
|
|
37
|
+
| Hybrid-search "fusion" explainer renders illustrative bars | Cosmetic placeholder; orthogonal to KG-first ingestion work. | `FEATURE_STATUS.md:249-251` |
|
|
38
|
+
| Chat grounding chips set state but `ChatRequest` drops them | Wiring grounding into generation is a natural KG-first feature; additive, not a blocker. | `FEATURE_STATUS.md:131-138` |
|
|
39
|
+
| CI action versions inconsistent (`ci.yml` `checkout@v4` vs `release.yml` `@v5`) | None are currently deprecated. Aligning is hygiene; addressed opportunistically. | `.github/workflows/ci.yml` |
|
|
40
|
+
| Live MCP tool calls + VLM inference PARTIAL (env/model dependent) | Honestly badged; orthogonal to KG-first work. | `FEATURE_STATUS.md:169-178,392` |
|
|
41
|
+
|
|
42
|
+
### Obsolete
|
|
43
|
+
|
|
44
|
+
| Item | Why it is closed |
|
|
45
|
+
|---|---|
|
|
46
|
+
| "Hooks registered but not executing" (v3.3.0 issue) | v3.4.1 added real runners for all built-ins; v3.5.0 closed the last tool-path bypasses at 100% coverage. |
|
|
47
|
+
| Legacy `/account` `/admin` glassmorphism | Blur removed in v3.5.0 (`account.css:120`, `admin.css:48`). Remaining "not restyled" note is a deliberate scope boundary — these pages are outside the v3 SPA view set. |
|
|
48
|
+
| Vercel deployment returns HTTP 500 | Settled posture: Vercel is **landing/download/demo only, never runtime**. Lattice AI is local-first; the KG runs on local SQLite. Do not present any Vercel URL as a product surface. |
|
|
49
|
+
| CI syntax-gate staleness | Fixed in v3.5.0 by `scripts/check_python.py` (discover-based via `rglob`); new v3.6.0 modules are covered automatically with zero maintenance. |
|
|
50
|
+
|
|
51
|
+
## v3.6.0 posture decisions taken from this audit
|
|
52
|
+
|
|
53
|
+
1. **Build additively on the existing store.** Mirror the proven `tools.py → tools/` decomposition
|
|
54
|
+
pattern: preserve the import surface, add focused modules (`services/ingestion.py`,
|
|
55
|
+
`services/kg_portability.py`, `api/browser.py`, `api/portability.py`) rather than rewriting
|
|
56
|
+
`knowledge_graph.py`.
|
|
57
|
+
2. **Route new ingestion paths through `dispatch_tool`** so `pre_tool`/`post_tool` fire — this is the
|
|
58
|
+
one v3.5.0 gap (no ingest path fired hooks). Maintenance ops stay audit-only by the documented
|
|
59
|
+
convention.
|
|
60
|
+
3. **Keep Vercel landing-only and OIDC RSA-only** — settled, out of v3.6.0 scope.
|
|
61
|
+
4. **Leave legacy `/account` `/admin` pages alone** — out of the local-first KG scope.
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.6.0] - 2026-06-10
|
|
4
|
+
|
|
5
|
+
> Knowledge Graph First. The Knowledge Graph becomes the primary architecture:
|
|
6
|
+
> every data source converges into it through one unified ingestion pipeline, with
|
|
7
|
+
> formalized entities/relationships, browser/web inputs, local portability, and
|
|
8
|
+
> per-node provenance. Lattice AI is a Digital Brain Platform — the graph is the
|
|
9
|
+
> durable asset; models read it and are replaceable.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Unified ingestion pipeline (`latticeai/services/ingestion.py`): one entrypoint
|
|
14
|
+
for files, folders, web URLs, browser tabs, and text — idempotent by content
|
|
15
|
+
hash, bracketed by `pre_tool`/`post_tool`.
|
|
16
|
+
- Knowledge Graph entities `Source`/`Repository`/`Meeting`/`Organization`/
|
|
17
|
+
`Workflow`/`Agent` and relationships `indexed_from`/`modified_by`/
|
|
18
|
+
`belongs_to_project`/`part_of`/`discussed_in`/`decided_by`/`generated_by`/
|
|
19
|
+
`used_by_agent` (additive, lossless `from_legacy`).
|
|
20
|
+
- Browser & web ingestion routes (`/api/browser/read-url`, `/ingest-current-tab`)
|
|
21
|
+
and a Manifest V3 extension scaffold that posts only to `127.0.0.1`.
|
|
22
|
+
- Knowledge Graph export/import (versioned JSON) and binary backup/restore
|
|
23
|
+
(`latticeai/services/kg_portability.py`,
|
|
24
|
+
`/api/knowledge-graph/{export,import,backup,restore,portability,provenance}`).
|
|
25
|
+
- Provenance trail (`ingestion_provenance` table + query API) — every node is
|
|
26
|
+
explainable.
|
|
27
|
+
- Knowledge Graph UI tabs: Status, Sources, Capture, Backup.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- KG ingestion now fires the tool hook lifecycle (closes the v3.5.0 gap);
|
|
32
|
+
coverage documented in `docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md`.
|
|
33
|
+
- README repositioned as a Digital Brain Platform; Vercel remains landing-only.
|
|
34
|
+
|
|
3
35
|
## [3.3.1] - 2026-06-08
|
|
4
36
|
|
|
5
37
|
> v3.3.1 — Visual Product Rebuild. The `/app` frontend keeps the same runtime
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Lattice AI v3.6.0 — Completion Record (Knowledge Graph First)
|
|
2
|
+
|
|
3
|
+
**Status: ✅ RELEASED — 2026-06-10.** All planned scopes implemented, tested,
|
|
4
|
+
committed, pushed, CI green, tagged, and published. No external publish/deploy.
|
|
5
|
+
|
|
6
|
+
- **Tag:** `v3.6.0` → commit `3c85675`
|
|
7
|
+
- **GitHub Release:** https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v3.6.0
|
|
8
|
+
(published, not draft; assets: `ltcai-3.6.0-py3-none-any.whl`,
|
|
9
|
+
`ltcai-3.6.0.tar.gz`, `ltcai-3.6.0.tgz`, `ltcai-3.6.0.vsix`)
|
|
10
|
+
- **CI:** main CI ✓, Visual Smoke ✓, release.yml (tag) ✓
|
|
11
|
+
- **Tests:** unit 455 passing · lint 64/64 · check:python 153 (3.11/3.12/3.14) ·
|
|
12
|
+
release artifacts built + validated
|
|
13
|
+
|
|
14
|
+
## Commits (v3.5.0 → v3.6.0)
|
|
15
|
+
|
|
16
|
+
| Commit | Scope |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `baa2bf6` | chore(audit) — v3.5.0 carry-over (0 blocking) |
|
|
19
|
+
| `5a6a7d4` | feat(kg) — entities/relationships schema |
|
|
20
|
+
| `135e81a` | feat(kg) — unified ingestion pipeline + provenance |
|
|
21
|
+
| `b548885` | feat(browser) — browser/web ingestion + MV3 extension |
|
|
22
|
+
| `39a7a0c` | feat(kg) — export/import/backup/restore |
|
|
23
|
+
| `21cfb97` | fix(runtime) — hook coverage for ingestion paths |
|
|
24
|
+
| `7009e39` | fix(ui) — Knowledge Graph as primary surface |
|
|
25
|
+
| `fa89a84` | docs(philosophy) — Digital Brain Platform rewrite |
|
|
26
|
+
| `aa011a5` | release: v3.6.0 (version bump) |
|
|
27
|
+
| `3c85675` | fix(ci) — 3.11-compatible f-string (PEP 701 quote reuse) |
|
|
28
|
+
|
|
29
|
+
## Carry-over audit result
|
|
30
|
+
|
|
31
|
+
Zero blocking items. Settled postures preserved: Vercel landing-only, OIDC
|
|
32
|
+
RSA-only, legacy `/account` `/admin` out of scope. The one honest v3.5.0 gap (KG
|
|
33
|
+
ingestion not firing tool hooks) is **closed**. Full detail:
|
|
34
|
+
`docs/CARRYOVER_AUDIT_v3.6.0.md`.
|
|
35
|
+
|
|
36
|
+
## Key facts for future work
|
|
37
|
+
|
|
38
|
+
- New seams: `latticeai/services/ingestion.py` (single write-side entrypoint),
|
|
39
|
+
`latticeai/services/kg_portability.py`, `latticeai/api/browser.py`,
|
|
40
|
+
`latticeai/api/portability.py`, provenance in `knowledge_graph.py`.
|
|
41
|
+
- **Gotcha:** PEP 701 f-string quote reuse (`f'{x or ''}'`) compiles on 3.12+ but
|
|
42
|
+
is a SyntaxError on 3.11 — always run `python3.11 scripts/check_python.py`
|
|
43
|
+
before pushing (CI tests on 3.11 + 3.12).
|
|
44
|
+
- Version canonical: `WORKSPACE_OS_VERSION`; mirrors enforced by
|
|
45
|
+
`test_version_consistency.py`.
|
|
46
|
+
- Local tests need `.venv/bin/python` (system `python3` lacks fastapi).
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Runtime Hook Coverage — v3.6.0
|
|
2
|
+
|
|
3
|
+
v3.6.0 makes the Knowledge Graph the primary architecture and adds new
|
|
4
|
+
**ingestion** paths (web URL, browser tab, unified text/file pipeline) plus
|
|
5
|
+
**portability** ops (export/import/backup/restore). This doc extends
|
|
6
|
+
[`RUNTIME_HOOK_COVERAGE_v3.5.0.md`](./RUNTIME_HOOK_COVERAGE_v3.5.0.md) and records
|
|
7
|
+
that the new data-mutating paths run through the unified lifecycle.
|
|
8
|
+
|
|
9
|
+
The single tool path is `dispatch_tool(hooks, name, args, run_fn)` in
|
|
10
|
+
`latticeai/core/hooks.py` (`pre_tool → execute → post_tool`). v3.5.0's one honest
|
|
11
|
+
gap was that **KG ingestion did not fire hooks**. v3.6.0 closes it: every source
|
|
12
|
+
now flows through `IngestionPipeline.ingest` (`latticeai/services/ingestion.py`),
|
|
13
|
+
which wraps the store write in `dispatch_tool(..., source="ingestion")`.
|
|
14
|
+
|
|
15
|
+
**Result.** All v3.5.0 coverage is preserved (no regression), and every new
|
|
16
|
+
v3.6.0 ingestion path is covered. Portability admin/maintenance ops follow the
|
|
17
|
+
v3.5.0 convention for service maintenance (own audit events), documented below.
|
|
18
|
+
|
|
19
|
+
## New v3.6.0 execution paths
|
|
20
|
+
|
|
21
|
+
| Entrypoint | Execution | Lifecycle path | pre fired | post fired | Test |
|
|
22
|
+
|---|---|---|---|---|---|
|
|
23
|
+
| `IngestionPipeline.ingest` (any source) | `ingest_source` / `ingest_document` | `dispatch_tool(name="kg_ingest.<type>", source="ingestion")` | yes (`pre_tool`) | yes (`post_tool`) | `test_ingestion_pipeline` |
|
|
24
|
+
| `POST /api/browser/read-url` | fetch URL → `pipeline.ingest` (web_url) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
|
|
25
|
+
| `POST /api/browser/ingest-current-tab` | sanitize → `pipeline.ingest` (browser_tab) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
|
|
26
|
+
| Local file / upload via pipeline | `ingest_document` | pipeline → `dispatch_tool` | yes | yes | `test_ingestion_pipeline` |
|
|
27
|
+
| Provenance write per ingestion | `record_provenance` | inside the bracketed `dispatch_tool` run_fn | (bracketed) | (bracketed) | `test_ingestion_pipeline` |
|
|
28
|
+
|
|
29
|
+
A blocking `pre_tool` hook makes ingestion return `status="blocked"` (the
|
|
30
|
+
`PermissionError` from `dispatch_tool` is caught and surfaced honestly), exactly
|
|
31
|
+
mirroring how a blocked tool call is handled — verified in
|
|
32
|
+
`test_runtime_coverage_v36` and `test_ingestion_pipeline`.
|
|
33
|
+
|
|
34
|
+
## Intentionally outside the tool lifecycle (documented, not gaps)
|
|
35
|
+
|
|
36
|
+
| Entrypoint | Why not `pre_tool`/`post_tool` |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `POST /api/knowledge-graph/{export,export-file,backup,restore,import}` | Admin **portability/maintenance** operations over the whole machine-global graph, not agent-vocabulary tools. They are admin-gated (`require_admin`) and recorded via the platform audit trail — same convention as the v3.5.0 memory maintenance ops (`prune/compact/rebuild/clear`). Wrapping a whole-store backup in `pre_tool` would misrepresent it as a per-action agent tool. |
|
|
39
|
+
| `read_document` inside upload (`upload_service.py`) | Already inside the `pre_upload`→`post_upload` lifecycle (unchanged from v3.5.0). |
|
|
40
|
+
| `POST /api/memory/{prune,compact,rebuild,clear}` | Unchanged from v3.5.0 — service maintenance with own audit events. |
|
|
41
|
+
| Read-only KG reads (`/knowledge-graph/{stats,graph,search,...}`, `/api/knowledge-graph/portability` status) | Execute no mutation — nothing to gate. |
|
|
42
|
+
|
|
43
|
+
## Summary
|
|
44
|
+
|
|
45
|
+
- v3.5.0 coverage of tool/agent execution paths: **100%, preserved** (no regression).
|
|
46
|
+
- v3.6.0 gap closed: **KG ingestion now fires `pre_tool`/`post_tool`** via the unified pipeline (the one honest carry-over note from v3.5.0).
|
|
47
|
+
- New ingestion paths (unified pipeline, `read-url`, `ingest-current-tab`): **covered**.
|
|
48
|
+
- Portability admin ops: **documented as audit-gated maintenance**, consistent with the v3.5.0 convention — not bypasses.
|
|
49
|
+
- Coverage of discovered mutating ingestion paths: **100%**.
|