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.
- package/README.md +46 -36
- package/docs/CHANGELOG.md +67 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +1 -1
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +1 -1
- package/docs/PERMISSION_MODE.md +15 -4
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/core/legacy_compatibility.py +1 -1
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/workspace_os_constants.py +1 -1
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/product_readiness.py +1 -1
- package/package.json +1 -1
- package/scripts/capture_release_evidence.mjs +32 -8
- package/scripts/check_current_release_docs.mjs +1 -1
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +38 -38
- package/static/app/assets/{Act-BK__Y5VE.js → Act-CLsUUE4V.js} +1 -1
- package/static/app/assets/{AdminConsole-ZrTyN8_F.js → AdminConsole-D1PBR5Mk.js} +1 -1
- package/static/app/assets/{Brain-CYHDXpPB.js → Brain-Cnb_YCYH.js} +2 -2
- package/static/app/assets/BrainHome-DMMhKb8j.js +2 -0
- package/static/app/assets/{BrainSignals-CesSPtUP.js → BrainSignals-CcvYpBGn.js} +1 -1
- package/static/app/assets/Capture-DU1HZWqB.js +1 -0
- package/static/app/assets/{CommandPalette-0zkyC0RY.js → CommandPalette-tU229JbI.js} +1 -1
- package/static/app/assets/Library-BeutJd8j.js +1 -0
- package/static/app/assets/{LivingBrain-Bz-h6LBH.js → LivingBrain-BVFU-llN.js} +1 -1
- package/static/app/assets/{ProductFlow-DAZ7DJCE.js → ProductFlow-CZp8oHh_.js} +1 -1
- package/static/app/assets/{ReviewCard-Bv0WGbY6.js → ReviewCard-DODh3z_D.js} +1 -1
- package/static/app/assets/System-CTYfZXfv.js +1 -0
- package/static/app/assets/{activity-AolpZJCH.js → activity-DYlZpTrt.js} +1 -1
- package/static/app/assets/{bot-CsVsT2nd.js → bot-BBmfPYKv.js} +1 -1
- package/static/app/assets/brain-RRpEg40e.js +1 -0
- package/static/app/assets/{button-1BP1PJZ3.js → button-DXSLgXUl.js} +1 -1
- package/static/app/assets/{circle-pause-5paeCOtq.js → circle-pause-B8TPRvnt.js} +1 -1
- package/static/app/assets/{circle-play-By8mFYRV.js → circle-play-C5aQnYUv.js} +1 -1
- package/static/app/assets/{cpu-DvUQxdKe.js → cpu-BvOUS0hg.js} +1 -1
- package/static/app/assets/{download-CFqYG90a.js → download-BM2Y4baa.js} +1 -1
- package/static/app/assets/{folder-open-CVSnp-Dp.js → folder-open-DATq5giq.js} +1 -1
- package/static/app/assets/{hard-drive-Ckr4Vd6-.js → hard-drive-D2iumtyP.js} +1 -1
- package/static/app/assets/{index-CEkL4_M-.css → index-B1n87vO-.css} +1 -1
- package/static/app/assets/{index--0zKF5Ow.js → index-D10Yd0gh.js} +3 -3
- package/static/app/assets/{input-D-JKquXU.js → input-Ptpha52f.js} +1 -1
- package/static/app/assets/permissionCopy-DLSOKW1h.js +1 -0
- package/static/app/assets/{primitives-D8U9OaIo.js → primitives-BvxTiz4R.js} +1 -1
- package/static/app/assets/search-DtMikKf0.js +1 -0
- package/static/app/assets/{shield-alert-DnsvO79P.js → shield-alert-B6RHxSXi.js} +1 -1
- package/static/app/assets/{textarea-4RchwbTa.js → textarea-CCZqVitr.js} +1 -1
- package/static/app/assets/{useFocusTrap-CFJjy7cS.js → useFocusTrap-QR9BiUDX.js} +1 -1
- package/static/app/assets/{useQuery-3Reu-A4a.js → useQuery-B42HOaUm.js} +1 -1
- package/static/app/assets/{users-BTxYksxa.js → users-D9PLGmAE.js} +1 -1
- package/static/app/assets/{utils-D02Vf-fw.js → utils-CAuwfT8i.js} +1 -1
- package/static/app/assets/workspace-DT2v1d3T.js +1 -0
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/static/app/assets/BrainHome-bbJulb5g.js +0 -2
- package/static/app/assets/Capture-p5upXmz2.js +0 -1
- package/static/app/assets/Library-Dt-vABI2.js +0 -1
- package/static/app/assets/System-BhrJQSD_.js +0 -1
- package/static/app/assets/brain-vuppco5y.js +0 -1
- package/static/app/assets/network-DB88FZ2T.js +0 -1
- package/static/app/assets/search-B8jsVTw_.js +0 -1
- package/static/app/assets/workspace-CSJNgX-C.js +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
|
|
14
|
-

|
|
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  | **See how knowledge connects** — a real relationship graph, not a file list  |
|
|
28
|
+
| **Capture anything** — files, whole folders, notes, screenshots, web pages  | **Automate with review** — agent changes become proposals you approve first  |
|
|
29
|
+
| **Pick a model in one click** — recommended local models for your hardware  | **Stay in control** — audit, roles, retention in a separate admin surface  |
|
|
30
|
+
| **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  |
|
|
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
|
-
|  |  |  |
|
|
61
62
|
|
|
62
63
|
Screenshot index and capture notes:
|
|
63
|
-
[output/release/v10.
|
|
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.
|
|
68
|
-
|
|
69
|
-
10.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- **
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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.
|
|
103
|
+
Expected artifacts for 10.5.0 release must use exact filenames:
|
|
95
104
|
|
|
96
|
-
- `dist/ltcai-10.
|
|
97
|
-
- `dist/ltcai-10.
|
|
98
|
-
- `ltcai-10.
|
|
99
|
-
- `dist/ltcai-10.
|
|
100
|
-
- `src-tauri/target/release/bundle/dmg/Lattice AI_10.
|
|
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.
|
|
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
|
package/docs/DEVELOPMENT.md
CHANGED
|
@@ -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.
|
|
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
|
package/docs/ONBOARDING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lattice AI Onboarding
|
|
2
2
|
|
|
3
|
-
Current release: **10.
|
|
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
|
package/docs/OPERATIONS.md
CHANGED
package/docs/PERMISSION_MODE.md
CHANGED
|
@@ -36,10 +36,21 @@ Env default: `LATTICEAI_PERMISSION_MODE=strict|trusted|bypass`.
|
|
|
36
36
|
|
|
37
37
|
## UI
|
|
38
38
|
|
|
39
|
-
`PermissionModePanel` renders in
|
|
40
|
-
settings tab
|
|
41
|
-
|
|
42
|
-
|
|
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
|
package/docs/TRUST_MODEL.md
CHANGED
package/docs/WHY_LATTICE.md
CHANGED
package/docs/kg-schema.md
CHANGED
|
@@ -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.
|
|
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")
|
package/latticeai/__init__.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
package/package.json
CHANGED
|
@@ -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", "
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
await
|
|
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
|
-
"-
|
|
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-
|
|
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 = "
|
|
9
|
+
const releaseTheme = "Everyday Words";
|
|
10
10
|
const title = `${version} — ${releaseTheme}`;
|
|
11
11
|
const escapedVersion = version.replaceAll(".", "\\.");
|
|
12
12
|
|
package/src-tauri/Cargo.lock
CHANGED
package/src-tauri/Cargo.toml
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "10.
|
|
2
|
+
"version": "10.5.0",
|
|
3
3
|
"generated_at": "vite",
|
|
4
4
|
"entrypoints": {
|
|
5
|
-
"app": "/static/app/assets/index
|
|
5
|
+
"app": "/static/app/assets/index-D10Yd0gh.js"
|
|
6
6
|
},
|
|
7
7
|
"assets": {
|
|
8
|
-
"
|
|
9
|
-
"_BrainSignals-
|
|
10
|
-
"_LivingBrain-
|
|
11
|
-
"_ReviewCard-
|
|
12
|
-
"_activity-
|
|
13
|
-
"_bot-
|
|
14
|
-
"_brain-
|
|
15
|
-
"_button-
|
|
16
|
-
"_circle-pause-
|
|
17
|
-
"_circle-play-
|
|
18
|
-
"_cpu-
|
|
19
|
-
"_download-
|
|
20
|
-
"_folder-open-
|
|
21
|
-
"_hard-drive-
|
|
22
|
-
"_input-
|
|
23
|
-
"
|
|
24
|
-
"_primitives-
|
|
25
|
-
"_search-
|
|
26
|
-
"_shield-alert-
|
|
27
|
-
"_textarea-
|
|
28
|
-
"_useFocusTrap-
|
|
29
|
-
"_useQuery-
|
|
30
|
-
"_users-
|
|
31
|
-
"_utils-
|
|
32
|
-
"_workspace-
|
|
33
|
-
"index.html": "/static/app/assets/index
|
|
34
|
-
"assets/index-
|
|
35
|
-
"src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-
|
|
36
|
-
"src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-
|
|
37
|
-
"src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-
|
|
38
|
-
"src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-
|
|
39
|
-
"src/pages/Act.tsx": "/static/app/assets/Act-
|
|
40
|
-
"src/pages/Brain.tsx": "/static/app/assets/Brain-
|
|
41
|
-
"src/pages/Capture.tsx": "/static/app/assets/Capture-
|
|
42
|
-
"src/pages/Library.tsx": "/static/app/assets/Library-
|
|
43
|
-
"src/pages/System.tsx": "/static/app/assets/System-
|
|
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
|
}
|