ltcai 10.4.0 → 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +46 -36
  2. package/docs/CHANGELOG.md +67 -0
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/ONBOARDING.md +1 -1
  6. package/docs/OPERATIONS.md +1 -1
  7. package/docs/PERMISSION_MODE.md +15 -4
  8. package/docs/TRUST_MODEL.md +1 -1
  9. package/docs/WHY_LATTICE.md +1 -1
  10. package/docs/kg-schema.md +1 -1
  11. package/lattice_brain/__init__.py +1 -1
  12. package/lattice_brain/runtime/multi_agent.py +1 -1
  13. package/latticeai/__init__.py +1 -1
  14. package/latticeai/core/legacy_compatibility.py +1 -1
  15. package/latticeai/core/marketplace.py +1 -1
  16. package/latticeai/core/workspace_os_constants.py +1 -1
  17. package/latticeai/services/architecture_readiness.py +1 -1
  18. package/latticeai/services/product_readiness.py +1 -1
  19. package/package.json +1 -1
  20. package/scripts/capture_release_evidence.mjs +32 -8
  21. package/scripts/check_current_release_docs.mjs +1 -1
  22. package/src-tauri/Cargo.lock +1 -1
  23. package/src-tauri/Cargo.toml +1 -1
  24. package/src-tauri/tauri.conf.json +1 -1
  25. package/static/app/asset-manifest.json +38 -38
  26. package/static/app/assets/{Act-BK__Y5VE.js → Act-CLsUUE4V.js} +1 -1
  27. package/static/app/assets/{AdminConsole-ZrTyN8_F.js → AdminConsole-D1PBR5Mk.js} +1 -1
  28. package/static/app/assets/{Brain-CYHDXpPB.js → Brain-Cnb_YCYH.js} +2 -2
  29. package/static/app/assets/BrainHome-DMMhKb8j.js +2 -0
  30. package/static/app/assets/{BrainSignals-CesSPtUP.js → BrainSignals-CcvYpBGn.js} +1 -1
  31. package/static/app/assets/Capture-DU1HZWqB.js +1 -0
  32. package/static/app/assets/{CommandPalette-0zkyC0RY.js → CommandPalette-tU229JbI.js} +1 -1
  33. package/static/app/assets/Library-BeutJd8j.js +1 -0
  34. package/static/app/assets/{LivingBrain-Bz-h6LBH.js → LivingBrain-BVFU-llN.js} +1 -1
  35. package/static/app/assets/{ProductFlow-DAZ7DJCE.js → ProductFlow-CZp8oHh_.js} +1 -1
  36. package/static/app/assets/{ReviewCard-Bv0WGbY6.js → ReviewCard-DODh3z_D.js} +1 -1
  37. package/static/app/assets/System-CTYfZXfv.js +1 -0
  38. package/static/app/assets/{activity-AolpZJCH.js → activity-DYlZpTrt.js} +1 -1
  39. package/static/app/assets/{bot-CsVsT2nd.js → bot-BBmfPYKv.js} +1 -1
  40. package/static/app/assets/brain-RRpEg40e.js +1 -0
  41. package/static/app/assets/{button-1BP1PJZ3.js → button-DXSLgXUl.js} +1 -1
  42. package/static/app/assets/{circle-pause-5paeCOtq.js → circle-pause-B8TPRvnt.js} +1 -1
  43. package/static/app/assets/{circle-play-By8mFYRV.js → circle-play-C5aQnYUv.js} +1 -1
  44. package/static/app/assets/{cpu-DvUQxdKe.js → cpu-BvOUS0hg.js} +1 -1
  45. package/static/app/assets/{download-CFqYG90a.js → download-BM2Y4baa.js} +1 -1
  46. package/static/app/assets/{folder-open-CVSnp-Dp.js → folder-open-DATq5giq.js} +1 -1
  47. package/static/app/assets/{hard-drive-Ckr4Vd6-.js → hard-drive-D2iumtyP.js} +1 -1
  48. package/static/app/assets/{index-CEkL4_M-.css → index-B1n87vO-.css} +1 -1
  49. package/static/app/assets/{index--0zKF5Ow.js → index-D10Yd0gh.js} +3 -3
  50. package/static/app/assets/{input-D-JKquXU.js → input-Ptpha52f.js} +1 -1
  51. package/static/app/assets/permissionCopy-DLSOKW1h.js +1 -0
  52. package/static/app/assets/{primitives-D8U9OaIo.js → primitives-BvxTiz4R.js} +1 -1
  53. package/static/app/assets/search-DtMikKf0.js +1 -0
  54. package/static/app/assets/{shield-alert-DnsvO79P.js → shield-alert-B6RHxSXi.js} +1 -1
  55. package/static/app/assets/{textarea-4RchwbTa.js → textarea-CCZqVitr.js} +1 -1
  56. package/static/app/assets/{useFocusTrap-CFJjy7cS.js → useFocusTrap-QR9BiUDX.js} +1 -1
  57. package/static/app/assets/{useQuery-3Reu-A4a.js → useQuery-B42HOaUm.js} +1 -1
  58. package/static/app/assets/{users-BTxYksxa.js → users-D9PLGmAE.js} +1 -1
  59. package/static/app/assets/{utils-D02Vf-fw.js → utils-CAuwfT8i.js} +1 -1
  60. package/static/app/assets/workspace-DT2v1d3T.js +1 -0
  61. package/static/app/index.html +4 -4
  62. package/static/sw.js +1 -1
  63. package/static/app/assets/BrainHome-bbJulb5g.js +0 -2
  64. package/static/app/assets/Capture-p5upXmz2.js +0 -1
  65. package/static/app/assets/Library-Dt-vABI2.js +0 -1
  66. package/static/app/assets/System-BhrJQSD_.js +0 -1
  67. package/static/app/assets/brain-vuppco5y.js +0 -1
  68. package/static/app/assets/network-DB88FZ2T.js +0 -1
  69. package/static/app/assets/search-B8jsVTw_.js +0 -1
  70. package/static/app/assets/workspace-CSJNgX-C.js +0 -1
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![CI Status](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
12
12
  [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
13
13
 
14
- ![v10.4.0 Living Brain walkthrough](output/release/v10.4.0/gifs/v10.4.0-living-brain-walkthrough.gif)
14
+ ![v10.5.0 Living Brain walkthrough](output/release/v10.5.0/gifs/v10.5.0-living-brain-walkthrough.gif)
15
15
 
16
16
  Chat, files, folders, notes, and web pages all flow into one durable knowledge
17
17
  graph on your computer. Any model — local MLX or cloud — can speak with that
@@ -24,9 +24,10 @@ memory. Nothing leaves your machine without explicit consent.
24
24
 
25
25
  | | |
26
26
  | --- | --- |
27
- | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v10.4.0/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v10.4.0/screenshots/05-memory-graph.png) |
28
- | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v10.4.0/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v10.4.0/screenshots/12-review-center.png) |
29
- | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v10.4.0/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v10.4.0/screenshots/10-admin-console.png) |
27
+ | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v10.5.0/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v10.5.0/screenshots/05-memory-graph.png) |
28
+ | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v10.5.0/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v10.5.0/screenshots/12-review-center.png) |
29
+ | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v10.5.0/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v10.5.0/screenshots/10-admin-console.png) |
30
+ | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v10.5.0/screenshots/11-knowledge-journey.png) | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way ![Settings](output/release/v10.5.0/screenshots/08-system.png) |
30
31
 
31
32
  ## Why Lattice AI
32
33
 
@@ -57,47 +58,55 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
57
58
 
58
59
  | | | |
59
60
  | --- | --- | --- |
60
- | ![Login](output/release/v10.4.0/screenshots/01-login.png) | ![Model install](output/release/v10.4.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v10.4.0/screenshots/07-model-library.png) |
61
+ | ![Login](output/release/v10.5.0/screenshots/01-login.png) | ![Model install](output/release/v10.5.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v10.5.0/screenshots/07-model-library.png) |
61
62
 
62
63
  Screenshot index and capture notes:
63
- [output/release/v10.4.0/SCREENSHOT_INDEX.md](output/release/v10.4.0/SCREENSHOT_INDEX.md)
64
+ [output/release/v10.5.0/SCREENSHOT_INDEX.md](output/release/v10.5.0/SCREENSHOT_INDEX.md)
64
65
 
65
66
  ## Current Release
66
67
 
67
- The current release is **10.4.0 — Named Ground**:
68
-
69
- 10.3.0 wrote down what was not measured. 10.4.0 emptied that list — and the
70
- things that made the list long turned out not to be typing problems.
71
-
72
- - **The type backlog went from 1,407 errors across 77 modules to zero across
73
- 274.** Two root causes accounted for 954 of them, and both were readability
74
- problems: a computed `__all__` that made every star-imported name invisible
75
- to a checker, and an eleven-mixin contract that existed but was written down
76
- nowhere. Both are now explicit, and both are guarded by tests.
77
- - **The composition root is no longer one function.** `app_factory._build` went
78
- from 1,318 lines to 26, split into ten ordered phases sharing a typed
79
- `RuntimeContext`. The phase order is a contract with a test, not a comment —
80
- and reading a value before its phase has run fails by name.
81
- - **Four real defects surfaced on the way**, including one that meant
82
- `python -m latticeai.server_app` had never worked: `main` was a local inside
83
- the old closure and was never on the export list.
84
- - **The surface-parity matrix has no ◐ left.** VS Code gained folder capture,
85
- artifact cards with their repair/validation flags, and a hardware-derived
86
- model recommendation; Telegram gained the same artifact card. All four were
87
- rendering gaps — the sidecar was already reporting the data.
88
- - **Coverage moved honestly, not to target.** Frontend 28.5% → 32.3% (208 → 337
89
- tests), Python 71.6% → 71.8% (1,896 → 1,956). Frontend 70% is still roughly
90
- 2,200 statements away, and this release does not claim otherwise.
68
+ The current release is **10.5.0 — Everyday Words**:
69
+
70
+ 10.4.0 named the ground the code stands on. 10.5.0 renames the ground the
71
+ *reader* stands on: every screen a first-time user lands on now says what
72
+ Lattice is doing in the words that user would use. No feature was removed —
73
+ the engine's own vocabulary moved behind the advanced mode switch, where it
74
+ belongs to the people who asked for it.
75
+
76
+ - **The autonomy dial is a sentence, not a mode name.** 엄격 / 신뢰 / 바이패스
77
+ became 먼저 물어보기 / 웬만하면 알아서 / 거의 다 알아서, each with one line
78
+ about what it will and will not do on its own. The home dial and Settings
79
+ now draw that copy from one module, so the same setting is never named two
80
+ ways — and a mode the server adds later still renders, from the server's own
81
+ label.
82
+ - **The path from a file to a memory is three named steps.** 진행 상황 was
83
+ hidden from plain mode and held two raw API payloads. It now shows
84
+ 내용 읽기 → 뜻 파악하기 → 기억에 연결하기 as a labelled ordered list, with
85
+ each step saying what it does to your file. 파싱 · 임베딩 · 인덱싱 are gone
86
+ from that screen.
87
+ - **Automations are named the way you named them.** A run shows its workflow's
88
+ name rather than a database id, and its state is spoken — `awaiting_approval`
89
+ reads as "내 승인 기다리는 중". Unknown states say so instead of printing the
90
+ token. Advanced mode still shows the id.
91
+ - **A model your machine cannot run says so in one sentence** instead of a
92
+ registry line half-translated word by word.
93
+ - **The published screenshots were wrong before this release.** Capture ran in
94
+ `advanced`, so every README frame showed payload panels, storage engines and
95
+ hook logs that no first-run user is ever shown. Captures now run in the app's
96
+ real default, `basic` — this page's images are what you will actually see.
97
+ - **Guarded, not asserted.** A visual sweep walks ten plain-mode routes and
98
+ fails if any of them renders empty or puts engine vocabulary in front of a
99
+ reader who never asked for it.
91
100
 
92
101
  Release notes: [RELEASE.md](RELEASE.md) · Full history: [docs/CHANGELOG.md](docs/CHANGELOG.md)
93
102
 
94
- Expected artifacts for 10.4.0 release must use exact filenames:
103
+ Expected artifacts for 10.5.0 release must use exact filenames:
95
104
 
96
- - `dist/ltcai-10.4.0-py3-none-any.whl`
97
- - `dist/ltcai-10.4.0.tar.gz`
98
- - `ltcai-10.4.0.tgz`
99
- - `dist/ltcai-10.4.0.vsix`
100
- - `src-tauri/target/release/bundle/dmg/Lattice AI_10.4.0_aarch64.dmg`
105
+ - `dist/ltcai-10.5.0-py3-none-any.whl`
106
+ - `dist/ltcai-10.5.0.tar.gz`
107
+ - `ltcai-10.5.0.tgz`
108
+ - `dist/ltcai-10.5.0.vsix`
109
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_10.5.0_aarch64.dmg`
101
110
 
102
111
  Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
103
112
 
@@ -132,6 +141,7 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
132
141
 
133
142
  | Version | Theme |
134
143
  | --- | --- |
144
+ | 10.5.0 | Everyday Words |
135
145
  | 10.4.0 | Named Ground |
136
146
  | 10.3.0 | Measured Ground |
137
147
  | 10.2.0 | Load-Bearing Fixes |
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,73 @@ 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
+ ## [10.5.0] - 2026-08-03
8
+
9
+ A UI/UX pass for the person who did not build this. No feature was removed;
10
+ vocabulary, ordering, and the default mode a first-run user lands in changed.
11
+ Backend behaviour is unchanged — `frontend/openapi.json` differs from 10.4.0
12
+ only in `info.version`.
13
+
14
+ ### Changed
15
+ - **Permission modes are named by what they do to you, not by their enum.**
16
+ 엄격 / 신뢰 / 바이패스 → 먼저 물어보기 / 웬만하면 알아서 / 거의 다 알아서
17
+ (`Strict` / `Trusted` / `Bypass` → `Ask me first` / `Mostly on its own` /
18
+ `Almost everything on its own`), each with a one-line summary of what it does
19
+ without asking. The bypass warning now says which kind of action stays
20
+ blocked rather than naming the mode.
21
+ - **`#/pipeline` is reachable in basic mode and named 진행 상황.** Its two raw
22
+ API payload panels are replaced (in basic mode) by an `aria-label`ed ordered
23
+ list of three steps — 내용 읽기 / 뜻 파악하기 / 기억에 연결하기 — with a
24
+ per-step waiting/working/done state. Advanced mode keeps both payload panels.
25
+ - **Ingestion stage names describe the reader's file, not the machine's job**:
26
+ 준비 → 파일 여는 중, 파싱 → 내용 읽는 중, 임베딩 → 뜻 파악하는 중, 인덱싱 →
27
+ 기억에 연결하는 중, 메모리화 완료 → 기억 완료. The stale-embedding prompt
28
+ became "찾는 방식이 바뀌었어요 / 기억 다시 정리하기".
29
+ - **Run rows are titled by workflow name** (then goal, then title/query, then
30
+ "n번째 작업" in basic mode) instead of a database id; the id moves to a
31
+ secondary line in advanced mode only.
32
+ - **Run and trigger states are translated per token.**
33
+ `act.runStatus.<token>` covers ok/succeeded/completed/retried_ok/
34
+ awaiting_approval/waiting_approval/running/queued/pending/failed/error/
35
+ cancelled/stopped/interrupted/rejected/partial; an unmapped token renders
36
+ "알 수 없음" rather than itself.
37
+ - **Brain stats answer a person's question** — 저장 위치 / 내 컴퓨터 and
38
+ 가져가기 / 언제든 내보낼 수 있어요 in place of `schema_version` and the
39
+ storage engine name (both still shown in advanced).
40
+ - **`scripts/capture_release_evidence.mjs` captures in `basic`**, the app's real
41
+ default, instead of `advanced`. Every README screenshot before this release
42
+ showed panels a first-run user never sees. `09-model-setup-status.png` (a
43
+ duplicate of the Brain home once captured in basic) is replaced by
44
+ `09-automation-runs.png`, and `11-knowledge-journey.png` is added.
45
+ - **The walkthrough GIF is encoded against a palette generated from the clip**
46
+ (`palettegen=stats_mode=diff` + `paletteuse=dither=sierra2_4a`) instead of
47
+ ffmpeg's default 256-colour cube, which had been rendering the ivory
48
+ background as dithered yellow and the greens as olive. 1.5 MB → 2.8 MB.
49
+
50
+ ### Added
51
+ - `frontend/src/lib/permissionCopy.ts` — one source for permission-mode copy,
52
+ shared by `BrainQuickControls` (home dial) and `PermissionModePanel`
53
+ (Settings), which had each been translating the server catalog separately.
54
+ Lookup is by mode id, falling back to the server's own localized label, so a
55
+ mode added server-side still renders; `PermissionModePanel.test.tsx` asserts
56
+ that fallback so the table cannot become an accidental allowlist.
57
+ - A basic-mode "자동으로 실행되는 작업" summary on the workflows surface:
58
+ workflow name plus 새 자료가 들어오면 / 정해진 시간에 / 내가 눌렀을 때만 /
59
+ 조건이 맞으면, and 켜져 있어요 / 지금은 멈춰 있어요. The node canvas and the
60
+ paste-JSON box are author tools and stay in advanced mode.
61
+ - `tests/visual/v3.spec.js`: a sweep over ten plain-mode routes asserting each
62
+ renders, shows no service-unavailable banner, and contains none of a list of
63
+ engine terms; plus a test that the three journey steps render under their
64
+ accessible name. `#/runs` failed the vocabulary assertion before this pass.
65
+ - `Library.test.tsx` covers registry prose that is English-only: a sentence with
66
+ no Hangul and six or more words is now replaced by a written Korean
67
+ explanation instead of being substituted term by term into word salad.
68
+
69
+ ### Known gaps
70
+ - The approval card under 작업 → 실행 still labels raw payload fields `Action`,
71
+ `Action Label`, `User Email`. It is visible in `09-automation-runs.png` and is
72
+ published rather than cropped.
73
+
7
74
  ## [10.4.0] - 2026-08-02
8
75
 
9
76
  ### Changed
@@ -1,6 +1,6 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **10.4.0 — Named Ground**.
3
+ Current release: **10.5.0 — Everyday Words**.
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
@@ -3,7 +3,7 @@
3
3
  > **Status: canonical** — current contributor guidance, kept in sync with the
4
4
  > current release.
5
5
 
6
- Current release: **10.4.0 — Named Ground**.
6
+ Current release: **10.5.0 — Everyday Words**.
7
7
 
8
8
  This document is for contributors working on the local-first Digital Brain
9
9
  codebase. Product positioning and quick start stay in `README.md`; release
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Onboarding
2
2
 
3
- Current release: **10.4.0 — Named Ground**.
3
+ Current release: **10.5.0 — Everyday Words**.
4
4
 
5
5
  The first-run goal is a five-minute path from "I opened the app" to "my Brain
6
6
  has a source, a question, and proof." This page is the product contract behind
@@ -1,4 +1,4 @@
1
- # Lattice AI — Operations Guide (v10.4.0)
1
+ # Lattice AI — Operations Guide (v10.5.0)
2
2
 
3
3
  > **Status: canonical** — kept in sync with the current release. Storage layout
4
4
  > below reflects the SQLite live Brain store and workspace scoping, not the
@@ -36,10 +36,21 @@ Env default: `LATTICEAI_PERMISSION_MODE=strict|trusted|bypass`.
36
36
 
37
37
  ## UI
38
38
 
39
- `PermissionModePanel` renders in **환경설정 → 에이전트 자율성** (`SystemPage`
40
- settings tab). It renders the catalog `/api/permission-mode` returns rather
41
- than a hardcoded mode list, so adding or renaming a mode server-side needs no
42
- frontend change, and it keeps the apply button disabled until
39
+ `PermissionModePanel` renders in **설정 → 혼자 해도 되는 일** (`SystemPage`
40
+ settings tab; the section was called 에이전트 자율성 before 10.5.0). The same
41
+ dial is reachable on the home screen through `BrainQuickControls`.
42
+
43
+ It still renders whatever modes the catalog `/api/permission-mode/catalog`
44
+ returns rather than a hardcoded list, so a mode added server-side appears with
45
+ no frontend change. Since 10.5.0 the *wording* is no longer taken from the
46
+ server for modes the app knows: `frontend/src/lib/permissionCopy.ts` maps mode
47
+ id → plain-language label and summary (`strict` → 먼저 물어보기, `trusted` →
48
+ 웬만하면 알아서, `bypass` → 거의 다 알아서), and both surfaces read that one
49
+ module so the dial cannot be named two ways. The server's own localized label
50
+ is the fallback for an id the map does not know — renaming a mode server-side
51
+ therefore changes the UI only for ids the app has no copy for.
52
+
53
+ The apply button stays disabled until
43
54
 
44
55
  * a *different* mode is selected, and
45
56
  * for a mode whose catalog entry sets `requires_ack`, the risk acknowledgement
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Trust Model
2
2
 
3
- Current release: **10.4.0 — Named Ground**.
3
+ Current release: **10.5.0 — Everyday Words**.
4
4
 
5
5
  Lattice AI is local-first, explicit about external communication, and honest
6
6
  when a capability is unavailable.
@@ -1,6 +1,6 @@
1
1
  # Why Lattice AI Exists
2
2
 
3
- Current release: **10.4.0 — Named Ground**.
3
+ Current release: **10.5.0 — Everyday Words**.
4
4
 
5
5
  **Lattice AI is a local-first Digital Brain that keeps your knowledge durable
6
6
  across any AI model.**
package/docs/kg-schema.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Knowledge Graph Schema
2
2
 
3
- Current release: **10.4.0 — Named Ground**.
3
+ Current release: **10.5.0 — Everyday Words**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`
@@ -26,7 +26,7 @@ from .storage import (
26
26
  storage_from_env,
27
27
  )
28
28
 
29
- __version__ = "10.4.0"
29
+ __version__ = "10.5.0"
30
30
 
31
31
  __all__ = [
32
32
  "AgentRuntime",
@@ -47,7 +47,7 @@ from typing import Any, Callable, Dict, List, Optional
47
47
  from ..utils import now_iso as _now
48
48
  from .contracts import multi_agent_contract
49
49
 
50
- MULTI_AGENT_VERSION = "10.4.0"
50
+ MULTI_AGENT_VERSION = "10.5.0"
51
51
 
52
52
  AGENT_ROLES = ("researcher", "planner", "executor", "reviewer", "release")
53
53
  CORE_PIPELINE = ("planner", "executor", "reviewer")
@@ -1,3 +1,3 @@
1
1
  """Lattice AI - modular server package."""
2
2
 
3
- __version__ = "10.4.0"
3
+ __version__ = "10.5.0"
@@ -13,7 +13,7 @@ from dataclasses import dataclass
13
13
  from pathlib import Path
14
14
  from typing import Any, Dict, List
15
15
 
16
- LEGACY_COMPATIBILITY_VERSION = "10.4.0"
16
+ LEGACY_COMPATIBILITY_VERSION = "10.5.0"
17
17
 
18
18
 
19
19
  @dataclass(frozen=True)
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
  from copy import deepcopy
11
11
  from typing import Any, Dict, List, Optional
12
12
 
13
- MARKETPLACE_VERSION = "10.4.0"
13
+ MARKETPLACE_VERSION = "10.5.0"
14
14
  TEMPLATE_KINDS = ("plugin", "workflow", "agent", "ingestion_bridge")
15
15
 
16
16
 
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
 
11
11
  from typing import Dict
12
12
 
13
- WORKSPACE_OS_VERSION = "10.4.0"
13
+ WORKSPACE_OS_VERSION = "10.5.0"
14
14
 
15
15
  # Workspace types separate single-user Personal workspaces from shared
16
16
  # Organization workspaces. Both keep the same local-first JSON store; the type
@@ -16,7 +16,7 @@ from typing import Any, Dict, List
16
16
 
17
17
  from latticeai.core.legacy_compatibility import legacy_shim_report
18
18
 
19
- ARCHITECTURE_VERSION_TARGET = "10.4.0"
19
+ ARCHITECTURE_VERSION_TARGET = "10.5.0"
20
20
 
21
21
  PREFERRED_REFACTORING_ORDER = [
22
22
  "agent-runtime",
@@ -18,7 +18,7 @@ from typing import Any, Dict, List
18
18
 
19
19
  from latticeai.services.architecture_readiness import architecture_readiness
20
20
 
21
- PRODUCT_VERSION_TARGET = "10.4.0"
21
+ PRODUCT_VERSION_TARGET = "10.5.0"
22
22
 
23
23
 
24
24
  @dataclass(frozen=True)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "10.4.0",
3
+ "version": "10.5.0",
4
4
  "description": "Lattice AI — local-first Digital Brain that keeps your knowledge durable across any AI model.",
5
5
  "homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
6
6
  "repository": {
@@ -53,12 +53,18 @@ async function main() {
53
53
  const page = await context.newPage();
54
54
  page.setDefaultTimeout(15000);
55
55
 
56
+ // These frames are the ones the README publishes, so they have to show the
57
+ // product a new person actually lands in. The app's own default is `basic`
58
+ // (frontend/src/store/appStore.ts) — capturing in `advanced` meant every
59
+ // published screenshot showed raw payload panels, storage engines and hook
60
+ // logs that no first-run user is ever shown. The admin console is captured
61
+ // by route below and does not depend on this setting.
56
62
  await page.addInitScript(() => {
57
63
  if (!sessionStorage.getItem("lattice.releaseEvidence.cleared")) {
58
64
  localStorage.removeItem("lattice.productFlow.complete");
59
65
  localStorage.removeItem("lattice.productFlow.user");
60
66
  localStorage.setItem("lattice.language", "ko");
61
- localStorage.setItem("lattice.mode", "advanced");
67
+ localStorage.setItem("lattice.mode", "basic");
62
68
  sessionStorage.setItem("lattice.releaseEvidence.cleared", "true");
63
69
  }
64
70
  });
@@ -109,16 +115,26 @@ async function main() {
109
115
  await page.locator("h1.page-title", { hasText: "Lattice를 내 방식에 맞게 설정하세요." }).waitFor();
110
116
  await shot(page, "08-system.png");
111
117
 
112
- await page.goto(`${baseURL}/app#/brain`, { waitUntil: "networkidle" });
113
- await page.locator("main[aria-label='Lattice Brain']").waitFor();
114
- await page.getByTestId("brain-knowledge-flow").waitFor();
115
- await page.waitForTimeout(250);
116
- await shot(page, "09-model-setup-status.png");
118
+ // Captured in `basic`, the Brain page's knowledge-flow strip stays collapsed,
119
+ // so this slot published a second copy of 04. The runs list carries what
120
+ // actually changed instead: runs named the way their author named them, and
121
+ // statuses spoken aloud rather than shown as `awaiting_approval`.
122
+ await page.goto(`${baseURL}/app#/runs`, { waitUntil: "networkidle" });
123
+ await page.locator("h1.page-title").waitFor();
124
+ await page.getByText("내 승인 기다리는 중").first().waitFor();
125
+ await shot(page, "09-automation-runs.png");
117
126
 
118
127
  await page.goto(`${baseURL}/app#/admin/users`, { waitUntil: "networkidle" });
119
128
  await page.waitForTimeout(250);
120
129
  await shot(page, "10-admin-console.png");
121
130
 
131
+ // The three named steps a file walks on its way into memory. This tab was
132
+ // hidden from plain mode and held two raw API payloads before this release,
133
+ // which is why it is worth publishing now.
134
+ await page.goto(`${baseURL}/app#/pipeline`, { waitUntil: "networkidle" });
135
+ await page.getByRole("list", { name: "자료가 기억이 되는 3단계" }).waitFor();
136
+ await shot(page, "11-knowledge-journey.png");
137
+
122
138
  await page.goto(`${baseURL}/app#/review`, { waitUntil: "networkidle" });
123
139
  await page.getByText(/Review Center|리뷰 센터|검토함/).first().waitFor();
124
140
  const rawError = page.getByText(/not valid JSON|Unexpected token/);
@@ -137,10 +153,17 @@ async function main() {
137
153
  if (fs.existsSync(webmTarget)) fs.unlinkSync(webmTarget);
138
154
  if (fs.existsSync(gifTarget)) fs.unlinkSync(gifTarget);
139
155
  fs.renameSync(recorded, webmTarget);
156
+ // ffmpeg's default GIF palette is a fixed 256-colour cube, which turned the
157
+ // app's ivory background into a dithered yellow and its greens into olive —
158
+ // this GIF is the first thing on the README, so it was publishing a product
159
+ // that does not exist. Generating the palette from the clip itself keeps the
160
+ // real colours.
140
161
  execFileSync("ffmpeg", [
141
162
  "-y",
142
163
  "-i", webmTarget,
143
- "-vf", "fps=8,scale=960:-1:flags=lanczos",
164
+ "-filter_complex",
165
+ "fps=8,scale=960:-1:flags=lanczos,split[s0][s1];" +
166
+ "[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=sierra2_4a",
144
167
  "-loop", "0",
145
168
  gifTarget,
146
169
  ], { stdio: "ignore" });
@@ -161,8 +184,9 @@ Captured from the built React/Vite app served by the release visual API on ${new
161
184
  | [06-capture.png](screenshots/06-capture.png) | Add Sources |
162
185
  | [07-model-library.png](screenshots/07-model-library.png) | Model Library |
163
186
  | [08-system.png](screenshots/08-system.png) | System |
164
- | [09-model-setup-status.png](screenshots/09-model-setup-status.png) | Model setup status |
187
+ | [09-automation-runs.png](screenshots/09-automation-runs.png) | Automation runs, named and status-spoken |
165
188
  | [10-admin-console.png](screenshots/10-admin-console.png) | Separate Admin Console |
189
+ | [11-knowledge-journey.png](screenshots/11-knowledge-journey.png) | Material-to-memory steps |
166
190
  | [12-review-center.png](screenshots/12-review-center.png) | Automation Review Center |
167
191
 
168
192
  ## Motion Evidence
@@ -6,7 +6,7 @@ const root = process.cwd();
6
6
  const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
7
7
  const version = pkg.version;
8
8
  const releaseDir = `output/release/v${version}`;
9
- const releaseTheme = "Named Ground";
9
+ const releaseTheme = "Everyday Words";
10
10
  const title = `${version} — ${releaseTheme}`;
11
11
  const escapedVersion = version.replaceAll(".", "\\.");
12
12
 
@@ -1584,7 +1584,7 @@ dependencies = [
1584
1584
 
1585
1585
  [[package]]
1586
1586
  name = "lattice-ai-desktop"
1587
- version = "10.4.0"
1587
+ version = "10.5.0"
1588
1588
  dependencies = [
1589
1589
  "plist",
1590
1590
  "serde",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "lattice-ai-desktop"
3
- version = "10.4.0"
3
+ version = "10.5.0"
4
4
  description = "Lattice AI Digital Brain desktop shell"
5
5
  authors = ["TaeSoo Park"]
6
6
  edition = "2021"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schema.tauri.app/config/2",
3
3
  "productName": "Lattice AI",
4
- "version": "10.4.0",
4
+ "version": "10.5.0",
5
5
  "identifier": "ai.lattice.desktop",
6
6
  "build": {
7
7
  "beforeDevCommand": "npm run frontend:dev",
@@ -1,45 +1,45 @@
1
1
  {
2
- "version": "10.4.0",
2
+ "version": "10.5.0",
3
3
  "generated_at": "vite",
4
4
  "entrypoints": {
5
- "app": "/static/app/assets/index--0zKF5Ow.js"
5
+ "app": "/static/app/assets/index-D10Yd0gh.js"
6
6
  },
7
7
  "assets": {
8
- "../node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
9
- "_BrainSignals-CesSPtUP.js": "/static/app/assets/BrainSignals-CesSPtUP.js",
10
- "_LivingBrain-Bz-h6LBH.js": "/static/app/assets/LivingBrain-Bz-h6LBH.js",
11
- "_ReviewCard-Bv0WGbY6.js": "/static/app/assets/ReviewCard-Bv0WGbY6.js",
12
- "_activity-AolpZJCH.js": "/static/app/assets/activity-AolpZJCH.js",
13
- "_bot-CsVsT2nd.js": "/static/app/assets/bot-CsVsT2nd.js",
14
- "_brain-vuppco5y.js": "/static/app/assets/brain-vuppco5y.js",
15
- "_button-1BP1PJZ3.js": "/static/app/assets/button-1BP1PJZ3.js",
16
- "_circle-pause-5paeCOtq.js": "/static/app/assets/circle-pause-5paeCOtq.js",
17
- "_circle-play-By8mFYRV.js": "/static/app/assets/circle-play-By8mFYRV.js",
18
- "_cpu-DvUQxdKe.js": "/static/app/assets/cpu-DvUQxdKe.js",
19
- "_download-CFqYG90a.js": "/static/app/assets/download-CFqYG90a.js",
20
- "_folder-open-CVSnp-Dp.js": "/static/app/assets/folder-open-CVSnp-Dp.js",
21
- "_hard-drive-Ckr4Vd6-.js": "/static/app/assets/hard-drive-Ckr4Vd6-.js",
22
- "_input-D-JKquXU.js": "/static/app/assets/input-D-JKquXU.js",
23
- "_network-DB88FZ2T.js": "/static/app/assets/network-DB88FZ2T.js",
24
- "_primitives-D8U9OaIo.js": "/static/app/assets/primitives-D8U9OaIo.js",
25
- "_search-B8jsVTw_.js": "/static/app/assets/search-B8jsVTw_.js",
26
- "_shield-alert-DnsvO79P.js": "/static/app/assets/shield-alert-DnsvO79P.js",
27
- "_textarea-4RchwbTa.js": "/static/app/assets/textarea-4RchwbTa.js",
28
- "_useFocusTrap-CFJjy7cS.js": "/static/app/assets/useFocusTrap-CFJjy7cS.js",
29
- "_useQuery-3Reu-A4a.js": "/static/app/assets/useQuery-3Reu-A4a.js",
30
- "_users-BTxYksxa.js": "/static/app/assets/users-BTxYksxa.js",
31
- "_utils-D02Vf-fw.js": "/static/app/assets/utils-D02Vf-fw.js",
32
- "_workspace-CSJNgX-C.js": "/static/app/assets/workspace-CSJNgX-C.js",
33
- "index.html": "/static/app/assets/index--0zKF5Ow.js",
34
- "assets/index-CEkL4_M-.css": "/static/app/assets/index-CEkL4_M-.css",
35
- "src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-DAZ7DJCE.js",
36
- "src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-ZrTyN8_F.js",
37
- "src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-bbJulb5g.js",
38
- "src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-0zkyC0RY.js",
39
- "src/pages/Act.tsx": "/static/app/assets/Act-BK__Y5VE.js",
40
- "src/pages/Brain.tsx": "/static/app/assets/Brain-CYHDXpPB.js",
41
- "src/pages/Capture.tsx": "/static/app/assets/Capture-p5upXmz2.js",
42
- "src/pages/Library.tsx": "/static/app/assets/Library-Dt-vABI2.js",
43
- "src/pages/System.tsx": "/static/app/assets/System-BhrJQSD_.js"
8
+ "../../../../../Users/parktaesoo/Downloads/Lattice AI/node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
9
+ "_BrainSignals-CcvYpBGn.js": "/static/app/assets/BrainSignals-CcvYpBGn.js",
10
+ "_LivingBrain-BVFU-llN.js": "/static/app/assets/LivingBrain-BVFU-llN.js",
11
+ "_ReviewCard-DODh3z_D.js": "/static/app/assets/ReviewCard-DODh3z_D.js",
12
+ "_activity-DYlZpTrt.js": "/static/app/assets/activity-DYlZpTrt.js",
13
+ "_bot-BBmfPYKv.js": "/static/app/assets/bot-BBmfPYKv.js",
14
+ "_brain-RRpEg40e.js": "/static/app/assets/brain-RRpEg40e.js",
15
+ "_button-DXSLgXUl.js": "/static/app/assets/button-DXSLgXUl.js",
16
+ "_circle-pause-B8TPRvnt.js": "/static/app/assets/circle-pause-B8TPRvnt.js",
17
+ "_circle-play-C5aQnYUv.js": "/static/app/assets/circle-play-C5aQnYUv.js",
18
+ "_cpu-BvOUS0hg.js": "/static/app/assets/cpu-BvOUS0hg.js",
19
+ "_download-BM2Y4baa.js": "/static/app/assets/download-BM2Y4baa.js",
20
+ "_folder-open-DATq5giq.js": "/static/app/assets/folder-open-DATq5giq.js",
21
+ "_hard-drive-D2iumtyP.js": "/static/app/assets/hard-drive-D2iumtyP.js",
22
+ "_input-Ptpha52f.js": "/static/app/assets/input-Ptpha52f.js",
23
+ "_permissionCopy-DLSOKW1h.js": "/static/app/assets/permissionCopy-DLSOKW1h.js",
24
+ "_primitives-BvxTiz4R.js": "/static/app/assets/primitives-BvxTiz4R.js",
25
+ "_search-DtMikKf0.js": "/static/app/assets/search-DtMikKf0.js",
26
+ "_shield-alert-B6RHxSXi.js": "/static/app/assets/shield-alert-B6RHxSXi.js",
27
+ "_textarea-CCZqVitr.js": "/static/app/assets/textarea-CCZqVitr.js",
28
+ "_useFocusTrap-QR9BiUDX.js": "/static/app/assets/useFocusTrap-QR9BiUDX.js",
29
+ "_useQuery-B42HOaUm.js": "/static/app/assets/useQuery-B42HOaUm.js",
30
+ "_users-D9PLGmAE.js": "/static/app/assets/users-D9PLGmAE.js",
31
+ "_utils-CAuwfT8i.js": "/static/app/assets/utils-CAuwfT8i.js",
32
+ "_workspace-DT2v1d3T.js": "/static/app/assets/workspace-DT2v1d3T.js",
33
+ "index.html": "/static/app/assets/index-D10Yd0gh.js",
34
+ "assets/index-B1n87vO-.css": "/static/app/assets/index-B1n87vO-.css",
35
+ "src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-CZp8oHh_.js",
36
+ "src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-D1PBR5Mk.js",
37
+ "src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-DMMhKb8j.js",
38
+ "src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-tU229JbI.js",
39
+ "src/pages/Act.tsx": "/static/app/assets/Act-CLsUUE4V.js",
40
+ "src/pages/Brain.tsx": "/static/app/assets/Brain-Cnb_YCYH.js",
41
+ "src/pages/Capture.tsx": "/static/app/assets/Capture-DU1HZWqB.js",
42
+ "src/pages/Library.tsx": "/static/app/assets/Library-BeutJd8j.js",
43
+ "src/pages/System.tsx": "/static/app/assets/System-CTYfZXfv.js"
44
44
  }
45
45
  }