ltcai 7.4.0 → 7.6.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 (52) hide show
  1. package/README.md +50 -41
  2. package/docs/CHANGELOG.md +52 -0
  3. package/docs/ROADMAP_RECOMMENDATIONS.md +15 -1
  4. package/frontend/src/components/ProductFlow.tsx +36 -1
  5. package/frontend/src/components/onboarding/recommendationModel.ts +1 -1
  6. package/frontend/src/features/brain/BrainHome.tsx +29 -0
  7. package/frontend/src/i18n.ts +31 -1
  8. package/frontend/src/styles.css +156 -0
  9. package/lattice_brain/__init__.py +1 -1
  10. package/lattice_brain/retrieval_benchmark_fixtures.py +48 -12
  11. package/lattice_brain/runtime/agent_runtime.py +20 -4
  12. package/lattice_brain/runtime/contracts.py +55 -1
  13. package/lattice_brain/runtime/multi_agent.py +1 -1
  14. package/latticeai/__init__.py +1 -1
  15. package/latticeai/api/agents.py +3 -3
  16. package/latticeai/api/realtime.py +3 -1
  17. package/latticeai/core/local_embeddings.py +4 -3
  18. package/latticeai/core/marketplace.py +1 -1
  19. package/latticeai/core/sessions.py +8 -2
  20. package/latticeai/core/workspace_os.py +1 -1
  21. package/latticeai/models/router.py +19 -0
  22. package/latticeai/services/architecture_readiness.py +101 -0
  23. package/latticeai/services/model_runtime.py +8 -3
  24. package/package.json +6 -3
  25. package/scripts/brain_quality_eval.py +11 -8
  26. package/scripts/pts-claudecode-discord-bridge.mjs +20 -3
  27. package/src-tauri/Cargo.lock +626 -1089
  28. package/src-tauri/Cargo.toml +3 -6
  29. package/src-tauri/src/main.rs +1 -1
  30. package/src-tauri/tauri.conf.json +1 -1
  31. package/static/app/asset-manifest.json +28 -28
  32. package/static/app/assets/{Act-Di4tRFWY.js → Act-CSeeIWB4.js} +2 -2
  33. package/static/app/assets/{Act-Di4tRFWY.js.map → Act-CSeeIWB4.js.map} +1 -1
  34. package/static/app/assets/{Brain-BZB3Gy9w.js → Brain-D_Ne4YoR.js} +2 -2
  35. package/static/app/assets/{Brain-BZB3Gy9w.js.map → Brain-D_Ne4YoR.js.map} +1 -1
  36. package/static/app/assets/{Capture-tNyYWxnh.js → Capture-YFRAO4bJ.js} +2 -2
  37. package/static/app/assets/{Capture-tNyYWxnh.js.map → Capture-YFRAO4bJ.js.map} +1 -1
  38. package/static/app/assets/{Library-DAtDDLdg.js → Library-C4zmA8O2.js} +2 -2
  39. package/static/app/assets/{Library-DAtDDLdg.js.map → Library-C4zmA8O2.js.map} +1 -1
  40. package/static/app/assets/{System-DEu0xNUc.js → System-Da-Kxwiz.js} +2 -2
  41. package/static/app/assets/{System-DEu0xNUc.js.map → System-Da-Kxwiz.js.map} +1 -1
  42. package/static/app/assets/core-CwxXejkd.js.map +1 -1
  43. package/static/app/assets/{index-Bi_bpigM.css → index-BwmCpRoW.css} +1 -1
  44. package/static/app/assets/index-D1hsexMt.js +17 -0
  45. package/static/app/assets/index-D1hsexMt.js.map +1 -0
  46. package/static/app/assets/{primitives-CdwcE--L.js → primitives-CSsF_Ymb.js} +2 -2
  47. package/static/app/assets/{primitives-CdwcE--L.js.map → primitives-CSsF_Ymb.js.map} +1 -1
  48. package/static/app/assets/{textarea-CqOdBPL1.js → textarea-CJMFSyfQ.js} +2 -2
  49. package/static/app/assets/{textarea-CqOdBPL1.js.map → textarea-CJMFSyfQ.js.map} +1 -1
  50. package/static/app/index.html +2 -2
  51. package/static/app/assets/index-COuGp7_5.js +0 -17
  52. package/static/app/assets/index-COuGp7_5.js.map +0 -1
package/README.md CHANGED
@@ -54,57 +54,63 @@ You need Lattice AI when:
54
54
 
55
55
  ## One-Minute Flow
56
56
 
57
- 1. Launch the app.
57
+ 1. Launch the app and wake the Brain.
58
58
  2. Create or open a local profile.
59
59
  3. Let Lattice explain what this computer can run.
60
- 4. Start with the recommended model, or skip and choose later.
60
+ 4. Start with the recommended model as the Brain's voice, or skip and choose later.
61
61
  5. Talk to your Brain.
62
- 6. Watch memories, topics, relationships, and graph structure emerge from real use.
62
+ 6. Use the memory rings to move from current context to the full knowledge graph.
63
63
  7. Back up, inspect, export, or restore the Brain when you need ownership actions.
64
64
 
65
65
  ## Living Brain Flow
66
66
 
67
- ### 1. Login
67
+ ### 1. Wake Brain
68
+
69
+ The first screen makes the Brain the product. It explains the three-step path:
70
+ confirm owner, check the computer, choose the Brain voice.
71
+
72
+ ### 2. Login
68
73
 
69
74
  Choose the owner of the Brain. The profile is not a SaaS account by default; it
70
75
  is the local identity for the knowledge you keep.
71
76
 
72
- ![Login](output/release/v7.0.0/screenshots/01-login.png)
77
+ ![Login](output/release/v7.6.0/screenshots/01-login.png)
73
78
 
74
- ### 2. Environment Analysis
79
+ ### 3. Environment Analysis
75
80
 
76
81
  See what kind of local AI experience this computer can support before choosing a
77
82
  model.
78
83
 
79
- ![Environment Analysis](output/release/v7.0.0/screenshots/02-environment-analysis.png)
84
+ ![Environment Analysis](output/release/v7.6.0/screenshots/02-environment-analysis.png)
80
85
 
81
- ### 3. Recommended Models
86
+ ### 4. Recommended Models
82
87
 
83
88
  Start with a short list: safest recommendation, faster model, stronger model.
84
89
  Advanced details stay available without overwhelming first-time users.
85
90
 
86
- ![Recommended Models](output/release/v7.0.0/screenshots/03-recommended-models.png)
91
+ ![Recommended Models](output/release/v7.6.0/screenshots/03-recommended-models.png)
87
92
 
88
- ### 4. Install And Load
93
+ ### 5. Install And Load
89
94
 
90
95
  Download and load only after consent. Lattice explains model size, local
91
96
  execution, and network use before work starts.
92
97
 
93
- ![Install and Load](output/release/v7.0.0/screenshots/04-install-load-progress.png)
98
+ ![Install and Load](output/release/v7.6.0/screenshots/04-install-load-progress.png)
94
99
 
95
- ### 5. Brain Chat
100
+ ### 6. Brain Chat
96
101
 
97
102
  Talk normally. Useful decisions and context become memory, then appear later as
98
- topics, relationships, and graph structure.
103
+ topics, relationships, graph structure, and the concentric memory rings around
104
+ the Brain.
99
105
 
100
- ![Brain Chat Home](output/release/v7.0.0/screenshots/05-brain-chat-home.png)
106
+ ![Brain Chat Home](output/release/v7.6.0/screenshots/05-brain-chat-home.png)
101
107
 
102
- ### 6. Review Center
108
+ ### 7. Review Center
103
109
 
104
110
  Automation results are staged for review before they become durable decisions.
105
111
  Snooze, unsnooze, run now, approve, and dismiss actions stay explicit.
106
112
 
107
- ![Review Center](output/release/v7.0.0/screenshots/13-review-center.png)
113
+ ![Review Center](output/release/v7.6.0/screenshots/13-review-center.png)
108
114
 
109
115
  ## Brain Depths
110
116
 
@@ -120,10 +126,10 @@ The user travels inward from everyday memory to deeper structure:
120
126
 
121
127
  Walkthrough:
122
128
 
123
- ![v7.0.0 Living Brain walkthrough](output/release/v7.0.0/gifs/v7.0.0-living-brain-walkthrough.gif)
129
+ ![v7.6.0 Living Brain walkthrough](output/release/v7.6.0/gifs/v7.6.0-living-brain-walkthrough.gif)
124
130
 
125
131
  Screenshot index and capture notes:
126
- [output/release/v7.0.0/SCREENSHOT_INDEX.md](output/release/v7.0.0/SCREENSHOT_INDEX.md)
132
+ [output/release/v7.6.0/SCREENSHOT_INDEX.md](output/release/v7.6.0/SCREENSHOT_INDEX.md)
127
133
 
128
134
  ## Install
129
135
 
@@ -200,33 +206,34 @@ See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for developer workflow details.
200
206
 
201
207
  ## Current Release
202
208
 
203
- The current release is **7.4.0 Runtime Contract Convergence & Corpus Retrieval**:
204
-
205
- - Agent runs, workflow runs, audit events, and realtime events now carry the
206
- `agent-run-contract/v1` family envelope, so replay, admin review, and live
207
- feeds can inspect run identity, runtime, status, timeline, and artifacts
208
- through one contract shape.
209
- - Persisted queued/running/terminal agent and workflow rows refresh their
210
- contract on every state transition, including cancellation and interruption.
211
- - Audit rows keep their existing admin fields while adding redacted contract
212
- metadata; realtime SSE events keep `area`, `event_type`, `workspace_id`, and
213
- `payload` while adding the same contract family.
214
- - Brain quality evaluation now runs a real KnowledgeGraphStore + SearchService
215
- corpus fixture with judged queries, recall, precision, NDCG, and must-include
216
- hit-rate thresholds.
217
-
218
- Expected artifacts for 7.4.0 release must use exact filenames:
219
-
220
- - `dist/ltcai-7.4.0-py3-none-any.whl`
221
- - `dist/ltcai-7.4.0.tar.gz`
222
- - `ltcai-7.4.0.tgz`
223
- - `dist/ltcai-7.4.0.vsix`
224
- - `src-tauri/target/release/bundle/dmg/Lattice AI_7.4.0_aarch64.dmg`
209
+ The current release is **7.6.0 Brain-Centered UX & Architecture Closure**:
210
+
211
+ - First-run onboarding now starts with a dedicated Wake Brain surface before
212
+ owner/profile setup, so the first impression is the local Brain rather than a
213
+ generic account or model wizard.
214
+ - Brain Home now includes concentric memory rings around the Living Brain plus
215
+ direct depth controls, letting users move from Now to Memory, Topics,
216
+ Relationships, and the full graph.
217
+ - Architecture review closure is machine-checkable through the 7.6 readiness
218
+ contract covering AgentRuntime, ToolRegistry, central Config, server
219
+ decomposition, Knowledge Graph hardening, and Brain UX.
220
+ - The two local review files (`review.md` and
221
+ `ux-brain-simplification-review.md`) are incorporated into this release line:
222
+ architecture gaps are covered by explicit boundaries/tests, and UX gaps are
223
+ closed by the Brain-first wake flow plus ring-based progressive disclosure.
224
+
225
+ Expected artifacts for 7.6.0 release must use exact filenames:
226
+
227
+ - `dist/ltcai-7.6.0-py3-none-any.whl`
228
+ - `dist/ltcai-7.6.0.tar.gz`
229
+ - `ltcai-7.6.0.tgz`
230
+ - `dist/ltcai-7.6.0.vsix`
231
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_7.6.0_aarch64.dmg`
225
232
 
226
233
  Do not upload `dist/*`. Package registry publishing remains owner-run.
227
234
 
228
235
  See [docs/ROADMAP_RECOMMENDATIONS.md](docs/ROADMAP_RECOMMENDATIONS.md) for the
229
- strategic roadmap slices applied through 7.4.0 and the follow-up tracks.
236
+ strategic roadmap slices applied through 7.6.0 and the follow-up tracks.
230
237
 
231
238
  ## Known Limitations
232
239
 
@@ -243,6 +250,8 @@ strategic roadmap slices applied through 7.4.0 and the follow-up tracks.
243
250
 
244
251
  | Version | Theme |
245
252
  | --- | --- |
253
+ | 7.6.0 | Brain-Centered UX & Architecture Closure: Wake Brain first-run surface, concentric memory rings with direct depth controls, and machine-checkable closure of the two architecture/UX review files |
254
+ | 7.5.0 | Runtime Debt Burn-down & Release Risk Cleanup: API consumers get normalized contract views, retrieval quality uses a 250+ record corpus fixture, stale artifact risk is removed, npm audit is clean, and Tauri is updated past the old block warning |
246
255
  | 7.4.0 | Runtime Contract Convergence & Corpus Retrieval: agent/workflow/audit/realtime records share the agent-run-contract/v1 family, and retrieval quality gates run against a real corpus-scale fixture |
247
256
  | 7.3.0 | Runtime Contract & Retrieval Quality: shared agent-run contract across runtimes plus deterministic hybrid recall/ranking regression gates |
248
257
  | 7.2.0 | Runtime Trust Baseline: agent run preview/readiness, simulation-mode guardrails, live ToolRegistry manifest/diagnostics, and tests for dispatch/governance/catalog drift |
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,58 @@ 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
+ ## [7.6.0] - 2026-06-22
8
+
9
+ > Brain-Centered UX & Architecture Closure. Incorporates the two local review
10
+ > files into the release line with a Wake Brain first-run surface, memory rings
11
+ > plus direct depth controls, and machine-checkable architecture readiness gates.
12
+
13
+ ### Added
14
+ - Wake Brain first-run entry before owner/profile setup, reducing onboarding to
15
+ the product promise first and the setup mechanics second.
16
+ - Concentric memory rings around Brain Home plus direct controls for Now, Memory,
17
+ Topics, Relationships, and Full Graph navigation.
18
+ - `latticeai.services.architecture_readiness.architecture_readiness()` and
19
+ `tests/unit/test_v76_review_completion.py` to keep AgentRuntime, ToolRegistry,
20
+ Config, server decomposition, KG hardening, and Brain UX review closure under
21
+ test.
22
+
23
+ ### Changed
24
+ - Package/runtime/static metadata is synchronized to 7.6.0; package publish and
25
+ deployment remain owner-run only.
26
+ - README and release docs now describe 7.6.0 as the current release and point to
27
+ refreshed 7.6.0 screenshots, walkthrough GIF, and release evidence index under
28
+ `output/release/v7.6.0/`.
29
+
30
+ ## [7.5.0] - 2026-06-20
31
+
32
+ > Runtime Debt Burn-down & Release Risk Cleanup. Turns the 7.4.0 contract
33
+ > envelope into a consumed API surface, expands retrieval quality to a 250+
34
+ > record local corpus fixture, and removes release/security warnings.
35
+
36
+ ### Added
37
+ - `extract_contract`, `require_contract`, `contract_view`, and `contract_views`
38
+ helpers for consumers that need a surface-agnostic `agent-run-contract/v1`
39
+ projection.
40
+ - AgentRuntime status/list/detail/events and realtime feed responses now expose
41
+ compact `contracts` views alongside legacy payloads.
42
+ - Deterministic 250+ record retrieval benchmark corpus while keeping 12 judged
43
+ queries and real `KnowledgeGraphStore` + `SearchService` execution.
44
+ - Refreshed README release evidence screenshots and walkthrough GIF under
45
+ `output/release/v7.5.0/`.
46
+
47
+ ### Changed
48
+ - Tauri Rust/CLI dependencies are updated within the Tauri 2 line, removing the
49
+ old transitive `block v0.1.6` future-incompatibility warning.
50
+ - npm dependency overrides move `js-yaml` to a non-vulnerable version; `npm
51
+ audit` reports 0 vulnerabilities.
52
+ - CI lint compatibility is restored for the Brain quality gate script.
53
+ - Local MLX model preparation now recognizes valid existing Hugging Face cache
54
+ snapshots, avoiding an unnecessary re-download when the model already exists
55
+ outside Lattice's managed `~/.ltcai/hf-models` directory.
56
+ - Package/runtime/static metadata is synchronized to 7.5.0; package publish and
57
+ deployment remain owner-run only.
58
+
7
59
  ## [7.4.0] - 2026-06-20
8
60
 
9
61
  > Runtime Contract Convergence & Corpus Retrieval. Completes the
@@ -30,6 +30,19 @@ small release-sized work. The operating principle stays unchanged:
30
30
  Knowledge Graph corpus and scores SearchService hybrid retrieval with judged
31
31
  queries, recall, precision, NDCG, and must-include hit-rate thresholds.
32
32
 
33
+ ## 7.5.0 Applied Slice
34
+
35
+ 7.5.0 burns down the remaining 7.4.0 risk instead of deferring it:
36
+
37
+ - Contract consumption: AgentRuntime and realtime feed APIs now emit compact
38
+ `contracts` views so UI, replay, admin, and export consumers can depend on the
39
+ shared family envelope directly.
40
+ - Retrieval scale: the corpus fixture now runs against 250+ local records while
41
+ keeping judged queries, graded relevance, and must-include expectations.
42
+ - Release trust: stale artifact mixing is handled through clean exact-version
43
+ artifact generation, npm audit findings are cleared, and the Tauri 2 stack is
44
+ updated past the old `block v0.1.6` future-incompatibility warning.
45
+
33
46
  ## Near-Term Tracks
34
47
 
35
48
  1. Retrieval quality and scale
@@ -43,7 +56,8 @@ small release-sized work. The operating principle stays unchanged:
43
56
  - Surface conflict resolution for contradictory memories.
44
57
 
45
58
  3. Runtime convergence
46
- - Drive UI run/replay/admin views from the shared contract family.
59
+ - Migrate remaining UI run/replay/admin components to read the API-level
60
+ compact contract views as their primary source.
47
61
  - Keep simulation mode explicit and never record it as product success.
48
62
  - Route tools through explicit registry/governance contracts.
49
63
 
@@ -27,7 +27,7 @@ export function readProductFlowComplete() {
27
27
 
28
28
  export function ProductFlow({ onComplete }: { onComplete: () => void }) {
29
29
  const language = useAppStore((state) => state.language);
30
- const [step, setStep] = React.useState<FlowStep>("login");
30
+ const [step, setStep] = React.useState<FlowStep>("wake");
31
31
  const [analysis, setAnalysis] = React.useState<FlowAnalysis | null>(null);
32
32
  const [analysisError, setAnalysisError] = React.useState<string | null>(null);
33
33
  const [selected, setSelected] = React.useState<RecommendedModel | null>(null);
@@ -68,6 +68,8 @@ export function ProductFlow({ onComplete }: { onComplete: () => void }) {
68
68
  <LivingBrain state={brainStateForStep(step)} intensity={step === "install" ? 0.92 : 0.7} size="large" showLabel={false} />
69
69
  </div>
70
70
 
71
+ {step === "wake" && <WakeBrainScreen onWake={() => setStep("login")} onUseExisting={() => completeFlow(onComplete)} />}
72
+
71
73
  {step === "login" && <LoginScreen onSuccess={() => setStep("analysis")} />}
72
74
 
73
75
  {step === "analysis" && (
@@ -99,12 +101,45 @@ export function ProductFlow({ onComplete }: { onComplete: () => void }) {
99
101
  );
100
102
  }
101
103
 
104
+ function WakeBrainScreen({ onWake, onUseExisting }: { onWake: () => void; onUseExisting: () => void }) {
105
+ const language = useAppStore((state) => state.language);
106
+ return (
107
+ <section className="ritual-wake" aria-label={t(language, "flow.wake.aria")}>
108
+ <div className="ritual-title">{t(language, "flow.wake.title")}</div>
109
+ <div className="ritual-subtitle">{t(language, "flow.wake.body")}</div>
110
+ <div className="ritual-wake-plan" aria-label={t(language, "flow.wake.plan.aria")}>
111
+ <div>
112
+ <span>1</span>
113
+ <strong>{t(language, "flow.wake.step.identity")}</strong>
114
+ </div>
115
+ <div>
116
+ <span>2</span>
117
+ <strong>{t(language, "flow.wake.step.check")}</strong>
118
+ </div>
119
+ <div>
120
+ <span>3</span>
121
+ <strong>{t(language, "flow.wake.step.voice")}</strong>
122
+ </div>
123
+ </div>
124
+ <div className="ritual-button-row">
125
+ <button type="button" className="ritual-full-button" onClick={onWake}>
126
+ {t(language, "flow.wake.primary")}
127
+ </button>
128
+ <button type="button" className="ritual-secondary-button" onClick={onUseExisting}>
129
+ {t(language, "flow.wake.existing")}
130
+ </button>
131
+ </div>
132
+ </section>
133
+ );
134
+ }
135
+
102
136
  function completeFlow(onComplete: () => void) {
103
137
  try { localStorage.setItem(FLOW_COMPLETE_KEY, "true"); } catch {}
104
138
  onComplete();
105
139
  }
106
140
 
107
141
  function brainStateForStep(step: FlowStep): BrainState {
142
+ if (step === "wake") return "idle";
108
143
  if (step === "analysis") return "listening";
109
144
  if (step === "recommend") return "recalling";
110
145
  if (step === "install") return "thinking";
@@ -1,6 +1,6 @@
1
1
  import { asArray } from "@/lib/utils";
2
2
 
3
- export type FlowStep = "login" | "analysis" | "recommend" | "install";
3
+ export type FlowStep = "wake" | "login" | "analysis" | "recommend" | "install";
4
4
  export type ApiData = Record<string, unknown>;
5
5
 
6
6
  export type FlowAnalysis = {
@@ -494,6 +494,8 @@ export function BrainHome({
494
494
  onInteract={deepen}
495
495
  />
496
496
 
497
+ <BrainDepthRings explorationDepth={explorationDepth} onOpenDepth={jumpToDepth} />
498
+
497
499
  <div className="brain-depth-badge" aria-live="polite">
498
500
  <span>{t(language, "brain.level")} {explorationDepth}</span>
499
501
  <strong>{t(language, `brain.depth.${explorationDepth}`)}</strong>
@@ -576,6 +578,33 @@ export function BrainHome({
576
578
  );
577
579
  }
578
580
 
581
+ function BrainDepthRings({
582
+ explorationDepth,
583
+ onOpenDepth,
584
+ }: {
585
+ explorationDepth: BrainDepth;
586
+ onOpenDepth: (depth: BrainDepth) => void;
587
+ }) {
588
+ const language = useAppStore((state) => state.language);
589
+ return (
590
+ <div className="brain-memory-rings" aria-label={t(language, "brain.rings.aria")}>
591
+ {DEPTHS.map((depth, index) => (
592
+ <button
593
+ key={depth.level}
594
+ type="button"
595
+ className={`brain-memory-ring ring-${depth.level} ${depth.level <= explorationDepth ? "is-revealed" : ""}`}
596
+ aria-current={depth.level === explorationDepth ? "step" : undefined}
597
+ onClick={() => onOpenDepth(depth.level)}
598
+ style={{ "--ring-delay": `${index * 70}ms` } as React.CSSProperties}
599
+ >
600
+ <span>{depth.level}</span>
601
+ <strong>{t(language, `brain.rings.${depth.level}`)}</strong>
602
+ </button>
603
+ ))}
604
+ </div>
605
+ );
606
+ }
607
+
579
608
  function toMessageProof(proof: BrainProof, query: string, fallbackModelName: string): MessageProof {
580
609
  return {
581
610
  query,
@@ -32,7 +32,7 @@ export const COPY: Record<Language, TextMap> = {
32
32
  "brain.aria.exploration": "Brain 탐색",
33
33
  "brain.aria.quickViews": "Brain 빠른 보기",
34
34
  "brain.depthRail.aria": "Brain 깊이 진행 상태",
35
- "brain.aria.conversation": "대화",
35
+ "brain.aria.conversation": "Brain과의 대화",
36
36
  "brain.aria.ownership": "Brain 소유 보장",
37
37
  "brain.aria.actions": "Brain 주요 작업",
38
38
  "brain.aria.starterPrompts": "시작 프롬프트",
@@ -232,6 +232,12 @@ export const COPY: Record<Language, TextMap> = {
232
232
  "brain.graph.focus.smooth": "선택한 노드로 부드럽게 포커스 이동하고 이웃을 강조합니다.",
233
233
  "brain.graph.focus.recent": "최근 추가됨",
234
234
  "brain.graph.focus.clear": "포커스 해제",
235
+ "brain.rings.aria": "Brain 기억 깊이 링",
236
+ "brain.rings.1": "지금",
237
+ "brain.rings.2": "기억",
238
+ "brain.rings.3": "주제",
239
+ "brain.rings.4": "관계",
240
+ "brain.rings.5": "그래프",
235
241
  "care.title": "내 Brain 돌보기",
236
242
  "care.subtitle": "내 컴퓨터에 두고, 필요하면 옮길 수 있습니다.",
237
243
  "care.private": "개인 보관",
@@ -463,6 +469,15 @@ export const COPY: Record<Language, TextMap> = {
463
469
  "flow.install.timelineQuick": "잠깐",
464
470
  "flow.install.expectedCompletion": "끝나면 바로 Brain이 열립니다.",
465
471
  "flow.shell": "내 로컬 AI 브레인 만들기",
472
+ "flow.wake.aria": "Brain 깨우기",
473
+ "flow.wake.title": "내 Brain을 깨웁니다.",
474
+ "flow.wake.body": "이 Brain은 이 컴퓨터에 살고, 모델은 목소리처럼 바꿔도 내 기억과 지식 그래프는 계속 남습니다.",
475
+ "flow.wake.plan.aria": "Brain 시작 단계",
476
+ "flow.wake.step.identity": "주인 확인",
477
+ "flow.wake.step.check": "컴퓨터 확인",
478
+ "flow.wake.step.voice": "목소리 선택",
479
+ "flow.wake.primary": "Brain 깨우기",
480
+ "flow.wake.existing": "이미 있는 Brain 열기",
466
481
  "flow.login.title": "내 AI 브레인의 주인을 정합니다.",
467
482
  "flow.login.body": "Lattice AI는 내 지식과 맥락을 이 컴퓨터에 보관하는 로컬 우선 AI 브레인입니다. 모델은 바꿀 수 있고, 외부 전송은 사용자가 선택할 때만 시작됩니다.",
468
483
  "flow.name": "이름",
@@ -790,6 +805,12 @@ export const COPY: Record<Language, TextMap> = {
790
805
  "brain.graph.focus.smooth": "Smoothly focuses the selected node and highlights its neighbors.",
791
806
  "brain.graph.focus.recent": "Recently added",
792
807
  "brain.graph.focus.clear": "Clear focus",
808
+ "brain.rings.aria": "Brain memory depth rings",
809
+ "brain.rings.1": "Now",
810
+ "brain.rings.2": "Memory",
811
+ "brain.rings.3": "Topics",
812
+ "brain.rings.4": "Relations",
813
+ "brain.rings.5": "Graph",
793
814
  "care.title": "Care for my Brain",
794
815
  "care.subtitle": "Own it locally. Keep it portable.",
795
816
  "care.private": "Private",
@@ -1021,6 +1042,15 @@ export const COPY: Record<Language, TextMap> = {
1021
1042
  "flow.install.timelineQuick": "moment",
1022
1043
  "flow.install.expectedCompletion": "When it finishes, your Brain opens right away.",
1023
1044
  "flow.shell": "Create your local AI Brain",
1045
+ "flow.wake.aria": "Wake your Brain",
1046
+ "flow.wake.title": "Wake your Brain.",
1047
+ "flow.wake.body": "This Brain lives on this computer. You can change the model like a voice while your memories and knowledge graph remain yours.",
1048
+ "flow.wake.plan.aria": "Brain start steps",
1049
+ "flow.wake.step.identity": "Confirm owner",
1050
+ "flow.wake.step.check": "Check computer",
1051
+ "flow.wake.step.voice": "Choose voice",
1052
+ "flow.wake.primary": "Wake Brain",
1053
+ "flow.wake.existing": "Open existing Brain",
1024
1054
  "flow.login.title": "Choose the owner of your AI Brain.",
1025
1055
  "flow.login.body": "Lattice AI is a local-first Digital Brain that keeps your knowledge on this computer. Models can change; external transfer starts only when you choose it.",
1026
1056
  "flow.name": "Name",
@@ -1187,6 +1187,16 @@ body {
1187
1187
  50% { transform: scale(1.035); opacity: 0.95; }
1188
1188
  }
1189
1189
 
1190
+ @keyframes ring-breathe {
1191
+ 0%, 100% { transform: translate(-50%, -50%) scale(0.99); }
1192
+ 50% { transform: translate(-50%, -50%) scale(1.012); }
1193
+ }
1194
+
1195
+ @keyframes ring-label-breathe {
1196
+ 0%, 100% { opacity: 0.72; }
1197
+ 50% { opacity: 1; }
1198
+ }
1199
+
1190
1200
  @keyframes brain-living-breathe {
1191
1201
  0%,
1192
1202
  100% {
@@ -2384,6 +2394,90 @@ body {
2384
2394
  line-height: 1.05;
2385
2395
  }
2386
2396
 
2397
+ .brain-memory-rings {
2398
+ position: absolute;
2399
+ inset: 11.5% 13%;
2400
+ z-index: 4;
2401
+ pointer-events: none;
2402
+ }
2403
+
2404
+ .brain-memory-ring {
2405
+ position: absolute;
2406
+ left: 50%;
2407
+ top: 50%;
2408
+ display: flex;
2409
+ align-items: flex-start;
2410
+ justify-content: center;
2411
+ transform: translate(-50%, calc(-50% - var(--ring-radius)));
2412
+ border: 0;
2413
+ background: transparent;
2414
+ color: hsl(var(--fg-muted));
2415
+ padding: 0;
2416
+ pointer-events: none;
2417
+ opacity: 0.72;
2418
+ animation: ring-label-breathe 5.8s ease-in-out infinite;
2419
+ animation-delay: var(--ring-delay, 0ms);
2420
+ }
2421
+
2422
+ .brain-memory-ring::before {
2423
+ content: "";
2424
+ position: absolute;
2425
+ left: 50%;
2426
+ top: 50%;
2427
+ width: var(--ring-size);
2428
+ height: var(--ring-size);
2429
+ transform: translate(-50%, calc(-50% + var(--ring-radius)));
2430
+ border: 1px solid hsl(var(--border) / 0.38);
2431
+ border-radius: 999px;
2432
+ background: radial-gradient(circle, transparent 62%, hsl(var(--brain-core) / 0.045) 63%, transparent 70%);
2433
+ pointer-events: none;
2434
+ }
2435
+
2436
+ .brain-memory-ring.ring-1 { --ring-size: 14.2rem; --ring-radius: 7.1rem; }
2437
+ .brain-memory-ring.ring-2 { --ring-size: 17.9rem; --ring-radius: 8.95rem; }
2438
+ .brain-memory-ring.ring-3 { --ring-size: 21.6rem; --ring-radius: 10.8rem; }
2439
+ .brain-memory-ring.ring-4 { --ring-size: 25.3rem; --ring-radius: 12.65rem; }
2440
+ .brain-memory-ring.ring-5 { --ring-size: 29rem; --ring-radius: 14.5rem; }
2441
+
2442
+ .brain-memory-ring span,
2443
+ .brain-memory-ring strong {
2444
+ border-radius: 999px;
2445
+ background: hsl(var(--surface-glass));
2446
+ box-shadow: 0 8px 24px hsl(200 30% 3% / 0.14);
2447
+ backdrop-filter: blur(16px);
2448
+ }
2449
+
2450
+ .brain-memory-ring span {
2451
+ margin-right: 0.22rem;
2452
+ padding: 0.14rem 0.38rem;
2453
+ color: hsl(var(--brain-core));
2454
+ font-size: 0.58rem;
2455
+ font-weight: 900;
2456
+ }
2457
+
2458
+ .brain-memory-ring strong {
2459
+ max-width: 5.8rem;
2460
+ overflow: hidden;
2461
+ padding: 0.14rem 0.46rem;
2462
+ text-overflow: ellipsis;
2463
+ white-space: nowrap;
2464
+ font-size: 0.66rem;
2465
+ font-weight: 760;
2466
+ }
2467
+
2468
+ .brain-memory-ring:hover,
2469
+ .brain-memory-ring:focus-visible,
2470
+ .brain-memory-ring.is-revealed {
2471
+ border-color: hsl(var(--brain-core) / 0.52);
2472
+ color: hsl(var(--fg));
2473
+ outline: none;
2474
+ opacity: 1;
2475
+ }
2476
+
2477
+ .brain-memory-ring[aria-current="step"] {
2478
+ box-shadow: 0 0 0 1px hsl(var(--brain-core) / 0.32), 0 0 38px hsl(var(--brain-core) / 0.16);
2479
+ }
2480
+
2387
2481
  .brain-depth-actions {
2388
2482
  position: absolute;
2389
2483
  left: 50%;
@@ -3747,6 +3841,18 @@ body {
3747
3841
  .brain-depth-actions button {
3748
3842
  flex: 0 0 auto;
3749
3843
  }
3844
+ .brain-memory-rings {
3845
+ inset: 16% 7%;
3846
+ }
3847
+ .brain-memory-ring.ring-1 { --ring-size: 10rem; --ring-radius: 5rem; }
3848
+ .brain-memory-ring.ring-2 { --ring-size: 12.5rem; --ring-radius: 6.25rem; }
3849
+ .brain-memory-ring.ring-3 { --ring-size: 15.1rem; --ring-radius: 7.55rem; }
3850
+ .brain-memory-ring.ring-4 { --ring-size: 17.7rem; --ring-radius: 8.85rem; }
3851
+ .brain-memory-ring.ring-5 { --ring-size: 20.2rem; --ring-radius: 10.1rem; }
3852
+ .brain-memory-ring strong {
3853
+ max-width: 4.6rem;
3854
+ font-size: 0.58rem;
3855
+ }
3750
3856
  .brain-depth-rail {
3751
3857
  top: 0.35rem;
3752
3858
  width: min(100vw - 1rem, 25rem);
@@ -3841,6 +3947,56 @@ body {
3841
3947
  margin: 0 auto 1.75rem;
3842
3948
  }
3843
3949
 
3950
+ .ritual-wake {
3951
+ display: grid;
3952
+ gap: 1rem;
3953
+ }
3954
+
3955
+ .ritual-wake-plan {
3956
+ display: grid;
3957
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3958
+ gap: 0.65rem;
3959
+ margin: 0 auto;
3960
+ width: min(100%, 640px);
3961
+ }
3962
+
3963
+ .ritual-wake-plan div {
3964
+ border: 1px solid hsl(var(--border) / 0.58);
3965
+ border-radius: 8px;
3966
+ background: hsl(var(--bg) / 0.46);
3967
+ padding: 0.82rem 0.75rem;
3968
+ text-align: left;
3969
+ }
3970
+
3971
+ .ritual-wake-plan span {
3972
+ display: inline-grid;
3973
+ place-items: center;
3974
+ width: 1.55rem;
3975
+ height: 1.55rem;
3976
+ border-radius: 999px;
3977
+ background: hsl(var(--brain-core) / 0.12);
3978
+ color: hsl(var(--brain-core));
3979
+ font-size: 0.72rem;
3980
+ font-weight: 900;
3981
+ }
3982
+
3983
+ .ritual-wake-plan strong {
3984
+ display: block;
3985
+ margin-top: 0.45rem;
3986
+ font-size: 0.92rem;
3987
+ line-height: 1.22;
3988
+ }
3989
+
3990
+ .ritual-secondary-button {
3991
+ min-height: 2.75rem;
3992
+ border: 1px solid hsl(var(--border) / 0.64);
3993
+ border-radius: 8px;
3994
+ background: hsl(var(--surface-glass));
3995
+ color: hsl(var(--fg));
3996
+ padding: 0 1.1rem;
3997
+ font-weight: 760;
3998
+ }
3999
+
3844
4000
  .ritual-title {
3845
4001
  font-size: clamp(1.85rem, 5vw, 2.85rem);
3846
4002
  font-weight: 680;
@@ -26,7 +26,7 @@ from .storage import (
26
26
  storage_from_env,
27
27
  )
28
28
 
29
- __version__ = "7.4.0"
29
+ __version__ = "7.6.0"
30
30
 
31
31
  __all__ = [
32
32
  "AgentRuntime",