ltcai 11.9.0 → 12.1.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 +74 -59
- package/docs/CHANGELOG.md +115 -0
- package/docs/CI_AND_RELEASE_GATES.md +13 -7
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +267 -119
- package/docs/ENTERPRISE.md +1 -1
- package/docs/MULTI_AGENT_RUNTIME.md +4 -4
- package/docs/ONBOARDING.md +13 -3
- package/docs/OPERATIONS.md +13 -4
- package/docs/REALTIME_COLLABORATION.md +1 -1
- package/docs/ROADMAP.md +113 -0
- package/docs/TRUST_MODEL.md +16 -2
- package/docs/WHY_LATTICE.md +8 -2
- package/docs/WORKFLOW_DESIGNER.md +2 -2
- package/docs/kg-schema.md +51 -5
- package/docs/mcp-tools.md +17 -0
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/_kg_common/extraction.py +459 -105
- package/lattice_brain/graph/_kg_common/normalize.py +305 -0
- package/lattice_brain/graph/_kg_common/patterns.py +275 -0
- package/lattice_brain/graph/_kg_common/relations.py +12 -3
- package/lattice_brain/graph/_kg_common/sections.py +107 -0
- package/lattice_brain/graph/_kg_constants.py +7 -0
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/agent_worker_seam.py +32 -0
- package/latticeai/api/worker_compute.py +78 -3
- package/latticeai/core/embedding_providers/__init__.py +16 -0
- package/latticeai/core/embedding_providers/autodetect.py +302 -0
- package/latticeai/core/embedding_providers/base.py +25 -0
- package/latticeai/core/embedding_providers/profiles.py +44 -0
- package/latticeai/core/embedding_providers/text.py +74 -8
- package/latticeai/core/vector_index/__init__.py +61 -0
- package/latticeai/core/vector_index/hnsw.py +383 -0
- package/latticeai/core/vector_index/sidecar.py +329 -0
- package/latticeai/models/router/generation.py +101 -22
- package/latticeai/models/router/loading.py +109 -4
- package/latticeai/runtime/brain_runtime.py +43 -9
- package/latticeai/runtime/build_phases/worker_profile.py +13 -4
- package/latticeai/services/architecture_readiness.py +2 -2
- package/latticeai/services/product_readiness.py +10 -5
- package/latticeai/services/search_service.py +7 -0
- package/latticeai/tools/__init__.py +6 -1
- package/latticeai/tools/documents.py +12 -0
- package/latticeai/tools/markup.py +152 -0
- package/package.json +2 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/compose_openapi.py +2 -0
- package/scripts/openapi_route_families.json +7 -3
- package/scripts/publish_release.mjs +157 -0
- package/scripts/release_screen_claims.json +23 -0
- package/src-tauri/Cargo.lock +44 -10
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +47 -41
- package/static/app/assets/Act-DCRUH46a.js +2 -0
- package/static/app/assets/AdminConsole-BFBj6OvN.js +1 -0
- package/static/app/assets/Brain-BXcoxIvb.js +2 -0
- package/static/app/assets/BrainHome-IhcEPC3v.js +2 -0
- package/static/app/assets/BrainSignals-DrfYSNjR.js +1 -0
- package/static/app/assets/Capture-BsO_OAeh.js +1 -0
- package/static/app/assets/Chronicle-BUj_UH3D.js +1 -0
- package/static/app/assets/CommandPalette-B4SWOaR-.js +1 -0
- package/static/app/assets/DigitalBrainExplorer-S1GSsyIT.js +321 -0
- package/static/app/assets/Library-CKUR2eVb.js +1 -0
- package/static/app/assets/LivingBrain--2UoV3Ki.js +1 -0
- package/static/app/assets/ProductFlow-D7rB6Xsu.js +1 -0
- package/static/app/assets/QueryClientProvider-B3OjqSyJ.js +1 -0
- package/static/app/assets/ReviewCard-UzQZ1ULT.js +3 -0
- package/static/app/assets/RunsListPanel-CDGFQYMo.js +1 -0
- package/static/app/assets/System-0OSxZrTp.js +1 -0
- package/static/app/assets/WorkflowGraph-BIcWZTUQ.js +1 -0
- package/static/app/assets/WorkflowsPanel-BeT5fmbk.js +2 -0
- package/static/app/assets/actHelpers-DhutJObL.js +1 -0
- package/static/app/assets/arrow-left-BwJfcH8J.js +1 -0
- package/static/app/assets/{bot-Bc3Q27YR.js → bot-D8tZzKMD.js} +1 -1
- package/static/app/assets/brain-DP2JPXSV.js +1 -0
- package/static/app/assets/button-Tzf5D7L1.js +1 -0
- package/static/app/assets/circle-check-D68nHcgS.js +1 -0
- package/static/app/assets/{circle-pause-BGMiV8UU.js → circle-pause-Druue_tZ.js} +1 -1
- package/static/app/assets/{circle-play-DoanLHnd.js → circle-play-BAht4SSW.js} +1 -1
- package/static/app/assets/{cpu-DwzNf82m.js → cpu-BPbmZRPp.js} +1 -1
- package/static/app/assets/{download-Ddw49yCV.js → download-BmxPZEwU.js} +1 -1
- package/static/app/assets/{folder-open-Brd6Kvto.js → folder-open-DokOmFQJ.js} +1 -1
- package/static/app/assets/{hard-drive-Bu-DTJdB.js → hard-drive-Cw6aEA2h.js} +1 -1
- package/static/app/assets/{index-CGdg_aq9.css → index-CB93CZWW.css} +1 -1
- package/static/app/assets/index-DhszK7A3.js +13 -0
- package/static/app/assets/input-BCdHoZXA.js +1 -0
- package/static/app/assets/jsx-runtime-bzQ4Vb5N.js +1 -0
- package/static/app/assets/{link-2-DZ4OA5tJ.js → link-2-CCModn4z.js} +1 -1
- package/static/app/assets/{permissionCopy-D9TR0F8b.js → permissionCopy-BSp1jYG7.js} +1 -1
- package/static/app/assets/primitives-D01WcJn7.js +1 -0
- package/static/app/assets/search-C_zAGfvO.js +1 -0
- package/static/app/assets/{share-2-BC5FirFv.js → share-2-DMMkM8Iu.js} +1 -1
- package/static/app/assets/{shield-alert-DUbR2W2s.js → shield-alert--mrCWQko.js} +1 -1
- package/static/app/assets/sourceMeta-nvd3Cdz3.js +1 -0
- package/static/app/assets/textarea-DfayhQiX.js +1 -0
- package/static/app/assets/useFocusTrap-C5NsTvsI.js +1 -0
- package/static/app/assets/useMutation-D7IMQTeI.js +1 -0
- package/static/app/assets/workspace-C7xidB7c.js +1 -0
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/static/app/assets/Act-B4WT81kh.js +0 -1
- package/static/app/assets/AdminConsole--Wf71m-o.js +0 -1
- package/static/app/assets/Brain-CtYaa26c.js +0 -321
- package/static/app/assets/BrainHome-Be2VPJEc.js +0 -2
- package/static/app/assets/BrainSignals-C0__xgpG.js +0 -1
- package/static/app/assets/Capture-DdNi5Peb.js +0 -1
- package/static/app/assets/Chronicle-B3hNveeI.js +0 -1
- package/static/app/assets/CommandPalette-CIsnSsFL.js +0 -1
- package/static/app/assets/Library-Bl5XClFV.js +0 -1
- package/static/app/assets/LivingBrain-DjkTB_gh.js +0 -1
- package/static/app/assets/ProductFlow-DCUNRNHs.js +0 -1
- package/static/app/assets/ReviewCard-CD3yWvUB.js +0 -3
- package/static/app/assets/System-BJ6jQ_SL.js +0 -1
- package/static/app/assets/arrow-left-6_28Z0qH.js +0 -1
- package/static/app/assets/brain-B9BDrMTe.js +0 -1
- package/static/app/assets/button-D6JcpYcf.js +0 -1
- package/static/app/assets/circle-check-BFu9lD-3.js +0 -1
- package/static/app/assets/index-CWKRRsLW.js +0 -10
- package/static/app/assets/input-CEqsxtil.js +0 -1
- package/static/app/assets/primitives-DORg7Z_7.js +0 -1
- package/static/app/assets/search-0NQ21wXe.js +0 -1
- package/static/app/assets/textarea-jtQcRSXo.js +0 -1
- package/static/app/assets/useFocusTrap-HRemcWId.js +0 -1
- package/static/app/assets/useMutation-DqlFE-Bw.js +0 -1
- package/static/app/assets/useQuery-BizqBNGw.js +0 -1
- package/static/app/assets/utils-WgW4V69R.js +0 -4
- package/static/app/assets/workspace-DSek3jCY.js +0 -1
package/README.md
CHANGED
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
10
10
|
[](https://open-vsx.org/extension/parktaesoo/ltcai)
|
|
11
11
|
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
|
|
12
|
+
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/publish.yml)
|
|
12
13
|
[](LICENSE)
|
|
13
14
|
|
|
14
|
-

|
|
15
16
|
|
|
16
17
|
Chat, files, folders, notes, and web pages all flow into one durable knowledge
|
|
17
18
|
graph on your computer. The default is local. Cloud is optional — an
|
|
@@ -25,10 +26,10 @@ nothing leaves your machine without explicit consent.
|
|
|
25
26
|
|
|
26
27
|
| | |
|
|
27
28
|
| --- | --- |
|
|
28
|
-
| **See your Brain's story in time** — a growth curve, an activity heatmap, and each day's story, rewindable to any past moment  | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory  |
|
|
30
|
+
| **See how knowledge connects** — a real relationship graph, not a file list  | **Capture anything** — files, whole folders, notes, screenshots, web pages  |
|
|
31
|
+
| **Automate with review** — agent changes become proposals you approve first  | **Pick a model in one click** — recommended local models for your hardware  |
|
|
32
|
+
| **Watch a file become memory** — three named steps, not a pipeline diagram  | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way  |
|
|
32
33
|
|
|
33
34
|
## Why Lattice AI
|
|
34
35
|
|
|
@@ -40,6 +41,10 @@ nothing leaves your machine without explicit consent.
|
|
|
40
41
|
when captured pages extracted poorly, and when the vector index is catching up.
|
|
41
42
|
- **Safe automation** — automations are consent-first drafts; edits to existing
|
|
42
43
|
content always pass through a reviewable proposal with a diff.
|
|
44
|
+
- **Runs on the model your machine can hold** — the loop measures what a model
|
|
45
|
+
can actually produce and adapts: a model too small to emit a tool call is
|
|
46
|
+
walked through numbered choices instead, with the same permission gates,
|
|
47
|
+
snapshots and sanitizers as every other profile.
|
|
43
48
|
|
|
44
49
|
매번 AI에게 프로젝트 맥락을 다시 설명하고 있다면, 지식이 여러 서비스에 흩어져
|
|
45
50
|
있다면, 그 기억을 특정 회사가 아니라 내가 소유하고 싶다면 — Lattice AI가 그
|
|
@@ -59,49 +64,47 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
|
|
|
59
64
|
|
|
60
65
|
| | | |
|
|
61
66
|
| --- | --- | --- |
|
|
62
|
-
|  |  |  |
|
|
63
68
|
|
|
64
69
|
Screenshot index and capture notes:
|
|
65
|
-
[output/release/
|
|
70
|
+
[output/release/v12.1.0/SCREENSHOT_INDEX.md](output/release/v12.1.0/SCREENSHOT_INDEX.md)
|
|
66
71
|
|
|
67
72
|
## Current Release
|
|
68
73
|
|
|
69
|
-
The current release is **
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
`
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- `
|
|
101
|
-
- `dist/ltcai-
|
|
102
|
-
- `
|
|
103
|
-
- `dist/ltcai-11.9.0.vsix`
|
|
104
|
-
- `src-tauri/target/release/bundle/dmg/Lattice AI_11.9.0_aarch64.dmg`
|
|
74
|
+
The current release is **12.1.0 — Fast Path**:
|
|
75
|
+
|
|
76
|
+
12.0.0 opened the house. This release makes remembering the house faster:
|
|
77
|
+
folder ingest and vault-watch overlap parse/extract/embed across files,
|
|
78
|
+
one `/worker/embed` call carries the document plus its chunks, rebuild
|
|
79
|
+
hashes outside the SQLite write lock, and a Brain with 512+ vectors tries
|
|
80
|
+
`hnsw+rescore` when a worker sidecar is bound. The door is still **422
|
|
81
|
+
operations / 41 families** over a **20-route worker**. Cloud is still
|
|
82
|
+
optional and the default is still local.
|
|
83
|
+
|
|
84
|
+
- **Ingest is a pipeline, not a queue of one.** Up to four files parse and
|
|
85
|
+
embed at once. Unchanged files still skip on fingerprint and never
|
|
86
|
+
enter the pool. Writes still go through the single `GraphWriter`.
|
|
87
|
+
- **One embed round-trip per note.** The document vector and every chunk
|
|
88
|
+
share a `texts` body; extract runs beside it, not in front of it; the
|
|
89
|
+
native incremental index files those vectors instead of hashing them
|
|
90
|
+
again.
|
|
91
|
+
- **Search stays exact until it does not need to.** Env default is still
|
|
92
|
+
`brute`. At 512 vectors with a bound sidecar, search asks HNSW first
|
|
93
|
+
and falls back to the exact scan with the original `brute` block if
|
|
94
|
+
the sidecar cannot answer.
|
|
95
|
+
|
|
96
|
+
What this release does not close — small-model *content* quality, the
|
|
97
|
+
mock-only `api_key` path, hash embeddings as the no-download fallback,
|
|
98
|
+
watch never deleting on its own, the ad-hoc-signed dmg — is listed in
|
|
99
|
+
[RELEASE_NOTES_v12.1.0.md](RELEASE_NOTES_v12.1.0.md).
|
|
100
|
+
|
|
101
|
+
Expected artifacts for 12.1.0 release must use exact filenames:
|
|
102
|
+
|
|
103
|
+
- `dist/ltcai-12.1.0-py3-none-any.whl`
|
|
104
|
+
- `dist/ltcai-12.1.0.tar.gz`
|
|
105
|
+
- `ltcai-12.1.0.tgz`
|
|
106
|
+
- `dist/ltcai-12.1.0.vsix`
|
|
107
|
+
- `src-tauri/target/release/bundle/dmg/Lattice AI_12.1.0_aarch64.dmg`
|
|
105
108
|
|
|
106
109
|
Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
|
|
107
110
|
|
|
@@ -120,14 +123,17 @@ and downloads, Brain Network, and update checks are opt-in.
|
|
|
120
123
|
See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
121
124
|
[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for the developer workflow
|
|
122
125
|
(`npm start` / `bin/ltcai.js` is the product; `npm run dev` is the
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
20-route worker). Each of the two largest crates carries its own domain
|
|
127
|
+
map — [rust/lattice-agent/ARCHITECTURE.md](rust/lattice-agent/ARCHITECTURE.md)
|
|
128
|
+
and [rust/lattice-platform/ARCHITECTURE.md](rust/lattice-platform/ARCHITECTURE.md)
|
|
129
|
+
— and open gaps are tracked in [docs/ROADMAP.md](docs/ROADMAP.md).
|
|
130
|
+
Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
|
|
125
131
|
|
|
126
132
|
## Known Limitations
|
|
127
133
|
|
|
128
134
|
- External package registries are owner-published and can lag behind GitHub.
|
|
129
135
|
- SQLite is the live local Brain store. The optional PostgreSQL/pgvector
|
|
130
|
-
migration tooling is not part of the
|
|
136
|
+
migration tooling is not part of the 12.1.0 worker.
|
|
131
137
|
- Docker, model downloads, cloud model calls, Brain Network, and update checks
|
|
132
138
|
require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
|
|
133
139
|
`grok`) was live-checked at zero billing; the `api_key` path is
|
|
@@ -148,21 +154,28 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
|
148
154
|
built. The observation code stays in Brain Core under unit test, and its
|
|
149
155
|
module header says so.
|
|
150
156
|
- The Python coverage gate is a **line floor of 90** since 11.8.0 (the
|
|
151
|
-
100%-lines-and-branches gate was removed).
|
|
152
|
-
|
|
153
|
-
- **
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
100%-lines-and-branches gate was removed). The enforced claim is the
|
|
158
|
+
floor, not whatever a given run measures.
|
|
159
|
+
- **Small-model *content* quality is gated honestly.** With the `guided`
|
|
160
|
+
profile even a 0.5B model writes the requested file and reaches DONE;
|
|
161
|
+
a weak summary still fails the critic and the run ends
|
|
162
|
+
FAILED/NEEDS_REVIEW rather than claiming success.
|
|
163
|
+
- Vector search env still defaults to `brute` — exact and byte-compatible
|
|
164
|
+
on a small Brain. At 512+ vectors with a bound worker sidecar it tries
|
|
165
|
+
`hnsw+rescore` first and falls back to the exact scan if the sidecar
|
|
166
|
+
cannot answer. `LATTICEAI_VECTOR_INDEX=hnsw` is still the explicit
|
|
167
|
+
opt-in.
|
|
168
|
+
- Watch never deletes on its own: a vanished file is reported, and
|
|
169
|
+
cleanup runs only through the confirmed folder-prune flow.
|
|
159
170
|
- The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
|
|
160
171
|
needs the usual Gatekeeper step.
|
|
161
|
-
- Pointer-control tools
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
172
|
+
- Pointer-control tools execute in the worker and are installed with
|
|
173
|
+
`pip install "ltcai[pointer]"`. Remaining honest gaps (`open_keys`
|
|
174
|
+
pending-only, no Self-Model refiner, `delete_node` leaving `PART_OF`,
|
|
175
|
+
review events silent without an owner, KG-api ingest text-only, two
|
|
176
|
+
store cycles per review mutation) are listed with their reasons in
|
|
177
|
+
[RELEASE_NOTES_v12.1.0.md](RELEASE_NOTES_v12.1.0.md) and prioritized in
|
|
178
|
+
[docs/ROADMAP.md](docs/ROADMAP.md).
|
|
166
179
|
|
|
167
180
|
## Release History
|
|
168
181
|
|
|
@@ -173,6 +186,8 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
|
|
|
173
186
|
|
|
174
187
|
| Version | Theme |
|
|
175
188
|
| --- | --- |
|
|
189
|
+
| 12.1.0 | Fast Path |
|
|
190
|
+
| 12.0.0 | Open House |
|
|
176
191
|
| 11.9.0 | Working Order |
|
|
177
192
|
| 11.8.0 | Travel Light |
|
|
178
193
|
| 11.7.0 | Clean Sweep |
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,121 @@ The top entry is either the current unreleased main-branch work or the current
|
|
|
4
4
|
release line. Older entries are historical and may describe behavior as it
|
|
5
5
|
existed at that release.
|
|
6
6
|
|
|
7
|
+
## [12.1.0] - 2026-08-29 — Fast Path
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Folder ingest and vault-watch overlap up to four files (`INGEST_INFLIGHT`).
|
|
11
|
+
Stamp-skip never enters the pool.
|
|
12
|
+
- One `POST /worker/embed` per note: document text then every chunk.
|
|
13
|
+
Extract runs beside embed, not in front of it.
|
|
14
|
+
- Default brute search tries `hnsw+rescore` when the store has 512+ vectors
|
|
15
|
+
and a worker sidecar is bound; failure keeps the original `brute` index
|
|
16
|
+
block.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- `rebuild_vector_index` embeds outside the write transaction.
|
|
20
|
+
- `write_vectors_with` files the ingest-time supplied vectors so the hash
|
|
21
|
+
model does not re-derive them.
|
|
22
|
+
- Empty `ltcai[postgres]` extra alias; the live Postgres writer left in 11.6.0.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Weekly pip-audit failed on a missing markdown report when there were no
|
|
26
|
+
findings.
|
|
27
|
+
- Weekly Postgres integration job failed because
|
|
28
|
+
`tests/integration/test_postgres_migration_live.py` was gone.
|
|
29
|
+
|
|
30
|
+
## [12.0.0] - 2026-08-18 — Open House
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- 크레이트 도메인 구조. `lattice-agent` 43파일이 여섯 그룹으로
|
|
34
|
+
(`kernel` / `parse` / `content` / `tools` / `surface` / `prompts`),
|
|
35
|
+
`lattice-platform` 31개 평면 모듈이 일곱 도메인으로
|
|
36
|
+
(`workspaceos` / `toolsurface` / `governance` / `adminops` /
|
|
37
|
+
`knowledge` / `modelops` / `shell`, 100건 `git mv`). 전부 이동이며
|
|
38
|
+
동작 변화는 0 — 골든과 계약 테스트가 재구조 전후로 같은 답을 낸다.
|
|
39
|
+
- 크레이트 로컬 지도 2종: `rust/lattice-agent/ARCHITECTURE.md`,
|
|
40
|
+
`rust/lattice-platform/ARCHITECTURE.md`. 각 그룹 `mod.rs`가 무엇이
|
|
41
|
+
속하고 무엇이 절대 들어가면 안 되는지와 불변식을 적는다. 각
|
|
42
|
+
`src/lib.rs`는 호환 맵으로 끝나 기존 임포트 경로가 전부 해석된다.
|
|
43
|
+
- `docs/ROADMAP.md` — 우선순위(P1/P2/P3)·난이도·제안 경로가 있는 갭
|
|
44
|
+
로드맵. 이번 릴리스에서 닫힌 항목은 닫힘으로 표시한다.
|
|
45
|
+
- GUIDED 프로파일. 번호 메뉴로 액션을 고르고 인자를 한 개씩 받아
|
|
46
|
+
**하네스가 액션 구조체를 조립**한다 — JSON 요구 자체가 없다. 꼬리는
|
|
47
|
+
모든 모드와 같은 `perform_action`이므로 게이트 체인·루프 가드·쓰기 전
|
|
48
|
+
스냅샷·`sanitize_write_content`가 동일하다. 검증은 닫힌 PASS/FAIL +
|
|
49
|
+
이유 한 줄이며 같은 근거·커버리지 게이트로 심사한다.
|
|
50
|
+
- 측정 기반 프로파일 프로브(`kernel/probe.rs`). 로드 시 고정 질문 두
|
|
51
|
+
개를 루프 자신의 파서로 채점해 standard/compact/guided를 고르고,
|
|
52
|
+
모델 id + 크레이트 버전으로 캐시한다. `LATTICEAI_AGENT_PROFILE`이
|
|
53
|
+
여전히 최우선, `LATTICEAI_AGENT_PROBE=0`으로 끌 수 있다.
|
|
54
|
+
- 미드런 자기강등(`demote_to_guided`) — 측정된 다이얼, 아직 guided가
|
|
55
|
+
아님, 실행 근거 없음의 세 조건에서만, 아래로만.
|
|
56
|
+
- 통합 도구 카탈로그(`tools/catalog.rs`) — native + `mcp.<tool>` +
|
|
57
|
+
`skill.<name>`이 하나의 번호 메뉴. 런이 거버넌스하는 이름은 네이티브
|
|
58
|
+
경로(더 엄격), 아닌 이름은 `POST /mcp`와 같은 거버넌스 검사를 지난다.
|
|
59
|
+
- `POST /worker/vector/query` — HNSW 사이드카 후보 조회. 워커 allowlist
|
|
60
|
+
19 → **20**.
|
|
61
|
+
- `POST /api/ingestion/folder/prune` — 삭제된 파일 정리. `confirm` 없으면
|
|
62
|
+
dry-run, 있으면 `delete_document_tree`(양방향 엣지). SPA에 「삭제된
|
|
63
|
+
파일 정리 (N)」 카드 버튼.
|
|
64
|
+
- 섹션 트리 — `Document ←PART_OF— Section ←PART_OF— Section`,
|
|
65
|
+
`Section —HAS_CHUNK→ Chunk`. 제목이 없는 문서는 섹션을 만들지 않는다.
|
|
66
|
+
- 파일별 ingest 핑거프린트(경로 + 크기 + mtime + 내용 sha256)를
|
|
67
|
+
`ingestion_provenance.metadata_json`에 저장. 두 번째 테이블 없음.
|
|
68
|
+
- 스토어 세대(generation) 에폭 — 복원이 인프로세스로 즉시 반영된다.
|
|
69
|
+
- `ltcai[pointer]` extra — 여섯 pyautogui 포인터 도구의 선언된 설치 경로.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
- `POST /mcp`가 OpenAPI 제품 계약 **안으로** 들어왔다(단일 JSON-RPC 봉투
|
|
73
|
+
오퍼레이션). 네이티브 마운트이므로 워커로 프록시되지 않는다. 문은 네이티브
|
|
74
|
+
**422 오퍼레이션 / 41 패밀리**(11.9.0의 420 + `/mcp` + folder prune).
|
|
75
|
+
- `/setup/install`이 실제로 설치한다 — 요청이 이름을 댄 항목이 **서버가
|
|
76
|
+
도출한** allowlist에 있을 때만. 목록 밖 이름은 거절. 기본은 수동 유지.
|
|
77
|
+
- 한국어 조사 스트리핑 2단계 + 근거 게이트 + 포함관계 중복 제거.
|
|
78
|
+
- 추출이 `PART_OF`/`CONTRADICTS`를 실제로 생산하고, 엣지는 방향과 타입을
|
|
79
|
+
갖고 쓰이며, 근거는 분류되어 저장된다.
|
|
80
|
+
- 임베딩 자동 감지 — 다운로드된 실모델이 있으면 채택, 해시는 폴백으로
|
|
81
|
+
표기. 벡터 정체성은 `(model, dim)`으로 필터.
|
|
82
|
+
- 임베딩이 쓰기 트랜잭션 **앞으로** 이동(드레인 ~66 → ~1,300 items/s),
|
|
83
|
+
드레인 스케줄러 적응형(백로그 991건 40분 → 15.3초).
|
|
84
|
+
- 무변경 재인덱스 33s → **0.26s**(낭비율 1.00 → 0.00), 첫 인덱싱 25.8s
|
|
85
|
+
→ 7.2s. vault-watch가 바뀌지 않은 노트를 스킵.
|
|
86
|
+
- `LATTICEAI_VECTOR_INDEX=hnsw`가 실제 검색 경로 — 사이드카가 `k*8`
|
|
87
|
+
후보(최대 200)를 주고 Rust가 브루트와 같은 코사인으로 정확 재스코어,
|
|
88
|
+
이름은 `hnsw+rescore`. HNSW 사이드카는 증분 append. **기본은 여전히
|
|
89
|
+
`brute`**, 실패는 사유를 실은 폴백.
|
|
90
|
+
- `Completion::prefix`가 완성의 첫 글자를 강제(compact는
|
|
91
|
+
`{"thoughts": "`). 토큰 단위 JSON 문법은 검토 후 채택하지 않음.
|
|
92
|
+
- 프론트: ErrorBoundary가 라우트와 헤비 패널 전면에, Act/Brain 서브라우트
|
|
93
|
+
lazy 분할, 권한 모드 diff 프리뷰와 위험 토글 ack. 번들 104.2 / 150 KiB.
|
|
94
|
+
|
|
95
|
+
### Fixed
|
|
96
|
+
- RAG 인용 지시가 에이전트 프롬프트로 새던 문제 — 도구를 불러야 할 턴에
|
|
97
|
+
모델이 출처 표기를 하고 있었다.
|
|
98
|
+
- 모델 로딩의 이름 로스터 게이트 — Qwen AWQ 빌드가 로드 자체가 불가능
|
|
99
|
+
했다.
|
|
100
|
+
- 베낄 수 있는 워크드 예제 — `write_file` content가 우리 예제 상수와
|
|
101
|
+
글자 그대로 같으면 `COPIED_EXAMPLE`로 기록하고 쓰지 않는다
|
|
102
|
+
(fail-closed). 에코된 지시문 줄은 guided 답변에서 제거.
|
|
103
|
+
- `<|channel>` 한-파이프 제어 프레임이 본문으로 새던 문제.
|
|
104
|
+
- 복원 뒤 오래된 커넥션이 복원 전 바이트를 주던 문제(에폭으로 해소).
|
|
105
|
+
|
|
106
|
+
### Known issues
|
|
107
|
+
- 작은 모델의 *내용 품질*은 여전히 fail-closed 게이트가 잡는다. 기계적
|
|
108
|
+
실행(요청한 파일 쓰기, DONE 도달)은 guided로 안정됐고 0.5B도 3.9초에
|
|
109
|
+
실파일로 완주하지만, 요약의 질은 critic에서 떨어져
|
|
110
|
+
FAILED/NEEDS_REVIEW로 끝날 수 있다. 매트릭스는 18개 중 11개 통과에서
|
|
111
|
+
개선 중이며 최종 수치는 릴리스 시점 `MATRIX_TABLE` 기준.
|
|
112
|
+
- `api_key` 클라우드 경로는 모의 서버만 검증(과금 0 정책). 라이브
|
|
113
|
+
검증은 `cli_oauth`.
|
|
114
|
+
- DMG는 ad-hoc 서명(=미서명).
|
|
115
|
+
- 검색 기본은 brute. `hnsw`는 opt-in.
|
|
116
|
+
- watch는 자동 삭제하지 않는다 — 정리는 명시적 prune으로만.
|
|
117
|
+
- 크레이트 재구조는 이동이지 결합 해소가 아니다. 도메인 선을 넘는 네
|
|
118
|
+
결합은 `lattice-platform`의 해당 `mod.rs`에 이름과 함께 적혀 있다.
|
|
119
|
+
- `GraphWriter::delete_node`는 여전히 `PART_OF`를 남긴다. prune은 그것을
|
|
120
|
+
쓰지 않고 `delete_document_tree`를 쓴다.
|
|
121
|
+
|
|
7
122
|
## [11.9.0] - 2026-08-17 — Working Order
|
|
8
123
|
|
|
9
124
|
### Added
|
|
@@ -120,13 +120,19 @@ uploaded as artifacts. Regenerate locally with `scripts/generate_sbom.py`.
|
|
|
120
120
|
|
|
121
121
|
## Postgres integration gate
|
|
122
122
|
|
|
123
|
-
`postgres-integration.yml` runs the
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
`postgres-integration.yml` still runs weekly + on demand, but the live
|
|
124
|
+
SQLite→Postgres writer it used to drive left in 11.6.0 with the Python
|
|
125
|
+
product write path. The suite file remains so a Monday cron is not a
|
|
126
|
+
missing-file failure; it skip-explains the retirement. SQLite is the live
|
|
127
|
+
Brain store. Restore a native pgvector door before making this job start
|
|
128
|
+
a container again.
|
|
129
|
+
|
|
130
|
+
## Dependency-audit clean run
|
|
131
|
+
|
|
132
|
+
`pip-audit --format markdown --output FILE` writes the file only when it
|
|
133
|
+
has findings. A clean run used to then fail on `cat FILE`. The workflow
|
|
134
|
+
now writes a placeholder report when the file is missing so a clean audit
|
|
135
|
+
is green.
|
|
130
136
|
|
|
131
137
|
## Visual smoke and sidecar E2E
|
|
132
138
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Community And Plugins
|
|
2
2
|
|
|
3
|
-
Current release: **
|
|
3
|
+
Current release: **12.1.0 — Fast Path**.
|
|
4
4
|
|
|
5
5
|
LatticeAI defines the path from a strong local-first framework (8.4.0
|
|
6
6
|
action-aware baseline, 8.5.0 registry+DI hardening, 8.6.0 capture/navigation
|