ltcai 7.7.0 → 7.9.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 (61) hide show
  1. package/README.md +38 -26
  2. package/docs/CHANGELOG.md +37 -0
  3. package/docs/DEVELOPMENT.md +1 -2
  4. package/docs/MULTI_AGENT_RUNTIME.md +6 -5
  5. package/docs/V2_ARCHITECTURE.md +3 -2
  6. package/frontend/src/App.tsx +3 -1
  7. package/frontend/src/components/ProductFlow.tsx +19 -23
  8. package/frontend/src/components/onboarding/RecommendationScreen.tsx +11 -12
  9. package/frontend/src/features/brain/BrainConversation.tsx +107 -108
  10. package/frontend/src/features/brain/BrainHome.tsx +32 -33
  11. package/frontend/src/i18n.ts +53 -19
  12. package/frontend/src/pages/Ask.tsx +11 -2
  13. package/frontend/src/pages/Brain.tsx +12 -2
  14. package/frontend/src/styles.css +390 -65
  15. package/lattice_brain/__init__.py +1 -1
  16. package/lattice_brain/runtime/__init__.py +8 -2
  17. package/lattice_brain/runtime/agent_runtime.py +17 -1
  18. package/lattice_brain/runtime/contracts.py +64 -1
  19. package/lattice_brain/runtime/multi_agent.py +1 -1
  20. package/latticeai/__init__.py +1 -1
  21. package/latticeai/core/agent.py +39 -12
  22. package/latticeai/core/marketplace.py +1 -1
  23. package/latticeai/core/workspace_os.py +1 -1
  24. package/latticeai/services/architecture_readiness.py +1 -1
  25. package/latticeai/services/product_readiness.py +22 -15
  26. package/latticeai/services/tool_dispatch.py +15 -3
  27. package/package.json +1 -1
  28. package/scripts/product_readiness.py +1 -1
  29. package/src-tauri/Cargo.lock +1 -1
  30. package/src-tauri/Cargo.toml +1 -1
  31. package/src-tauri/tauri.conf.json +1 -1
  32. package/static/app/asset-manifest.json +28 -28
  33. package/static/app/assets/Act-DOvf59ru.js +2 -0
  34. package/static/app/assets/{Act-CX5hL0Z3.js.map → Act-DOvf59ru.js.map} +1 -1
  35. package/static/app/assets/Brain-C7_0mEiI.js +322 -0
  36. package/static/app/assets/Brain-C7_0mEiI.js.map +1 -0
  37. package/static/app/assets/Capture-B9Tlhzqr.js +2 -0
  38. package/static/app/assets/{Capture-CdFSrZnA.js.map → Capture-B9Tlhzqr.js.map} +1 -1
  39. package/static/app/assets/{Library-CZFVGSmG.js → Library-BJPEEm5O.js} +2 -2
  40. package/static/app/assets/{Library-CZFVGSmG.js.map → Library-BJPEEm5O.js.map} +1 -1
  41. package/static/app/assets/System-D6t9jo9V.js +2 -0
  42. package/static/app/assets/{System-CMoOoUrZ.js.map → System-D6t9jo9V.js.map} +1 -1
  43. package/static/app/assets/index-C7g26IF6.css +2 -0
  44. package/static/app/assets/index-DbcEYJQ2.js +17 -0
  45. package/static/app/assets/{index-B4_drWel.js.map → index-DbcEYJQ2.js.map} +1 -1
  46. package/static/app/assets/primitives-CD38lt4n.js +2 -0
  47. package/static/app/assets/{primitives-CFhU5Rka.js.map → primitives-CD38lt4n.js.map} +1 -1
  48. package/static/app/assets/textarea-BZk6ybp5.js +2 -0
  49. package/static/app/assets/{textarea-uBpGDOJM.js.map → textarea-BZk6ybp5.js.map} +1 -1
  50. package/static/app/index.html +2 -2
  51. package/frontend/src/components/BrainConversation.tsx +0 -533
  52. package/frontend/src/components/FirstRunGuide.tsx +0 -99
  53. package/static/app/assets/Act-CX5hL0Z3.js +0 -2
  54. package/static/app/assets/Brain-m19en5wz.js +0 -322
  55. package/static/app/assets/Brain-m19en5wz.js.map +0 -1
  56. package/static/app/assets/Capture-CdFSrZnA.js +0 -2
  57. package/static/app/assets/System-CMoOoUrZ.js +0 -2
  58. package/static/app/assets/index-B4_drWel.js +0 -17
  59. package/static/app/assets/index-DjpDeE0c.css +0 -2
  60. package/static/app/assets/primitives-CFhU5Rka.js +0 -2
  61. package/static/app/assets/textarea-uBpGDOJM.js +0 -2
@@ -30,7 +30,7 @@ from __future__ import annotations
30
30
 
31
31
  from dataclasses import dataclass, field
32
32
  from datetime import datetime
33
- from typing import Any, Dict, Iterable, List, Optional
33
+ from typing import Any, Dict, Iterable, List, Optional, Protocol, runtime_checkable
34
34
 
35
35
 
36
36
  def runtime_timestamp() -> str:
@@ -69,6 +69,8 @@ CONTRACT_VIEW_KEYS = (
69
69
  "blocking_reasons",
70
70
  )
71
71
 
72
+ RUNTIME_BOUNDARY_SCHEMA = "runtime-boundary/v1"
73
+
72
74
  _SCHEMA_FOR_KIND = {
73
75
  "agent_run": AGENT_RUN_SCHEMA,
74
76
  "workflow_run": WORKFLOW_RUN_SCHEMA,
@@ -223,6 +225,67 @@ def multi_agent_contract(
223
225
  ).as_dict()
224
226
 
225
227
 
228
+ @dataclass(frozen=True)
229
+ class RuntimeBoundaryContract:
230
+ """Machine-readable descriptor for an execution runtime boundary.
231
+
232
+ This is intentionally separate from run records: it lets tests, routers, and
233
+ docs assert which class owns which execution surface without importing the
234
+ wrong runtime by name.
235
+ """
236
+
237
+ name: str
238
+ runtime: str
239
+ entrypoint: str
240
+ surface: str
241
+ owns: str
242
+ compatibility_aliases: List[str] = field(default_factory=list)
243
+
244
+ def as_dict(self) -> Dict[str, Any]:
245
+ return {
246
+ "schema_version": RUNTIME_BOUNDARY_SCHEMA,
247
+ "name": self.name,
248
+ "runtime": self.runtime,
249
+ "entrypoint": self.entrypoint,
250
+ "surface": self.surface,
251
+ "owns": self.owns,
252
+ "compatibility_aliases": list(self.compatibility_aliases),
253
+ }
254
+
255
+
256
+ def runtime_boundary_contract(
257
+ *,
258
+ name: str,
259
+ runtime: str,
260
+ entrypoint: str,
261
+ surface: str,
262
+ owns: str,
263
+ compatibility_aliases: Optional[List[str]] = None,
264
+ ) -> Dict[str, Any]:
265
+ return RuntimeBoundaryContract(
266
+ name=name,
267
+ runtime=runtime,
268
+ entrypoint=entrypoint,
269
+ surface=surface,
270
+ owns=owns,
271
+ compatibility_aliases=list(compatibility_aliases or []),
272
+ ).as_dict()
273
+
274
+
275
+ @runtime_checkable
276
+ class RuntimeBoundaryProtocol(Protocol):
277
+ """Minimal shared surface for runtime boundary discovery.
278
+
279
+ Product ``AgentRuntime`` and core ``SingleAgentRuntime`` intentionally keep
280
+ different execution methods. This protocol only fixes the common inspection
281
+ surface that DI, readiness gates, and tests can depend on safely.
282
+ """
283
+
284
+ def boundary(self) -> Dict[str, Any]: ...
285
+
286
+ def config(self) -> Dict[str, Any]: ...
287
+
288
+
226
289
  def run_record_contract(run: Dict[str, Any], *, runtime: str = "multi_agent") -> Dict[str, Any]:
227
290
  """Build the family contract from a persisted agent run row."""
228
291
  run = dict(run or {})
@@ -21,7 +21,7 @@ from typing import Any, Callable, Dict, List, Optional
21
21
  from .contracts import multi_agent_contract
22
22
 
23
23
 
24
- MULTI_AGENT_VERSION = "7.7.0"
24
+ MULTI_AGENT_VERSION = "7.9.0"
25
25
 
26
26
  AGENT_ROLES = ("researcher", "planner", "executor", "reviewer", "release")
27
27
  CORE_PIPELINE = ("planner", "executor", "reviewer")
@@ -1,3 +1,3 @@
1
1
  """Lattice AI - modular server package."""
2
2
 
3
- __version__ = "7.7.0"
3
+ __version__ = "7.9.0"
@@ -1,7 +1,7 @@
1
- """Agent Runtime — the Discover→Plan→Implement→Verify state machine.
1
+ """Single-agent runtime — the Discover→Plan→Implement→Verify state machine.
2
2
 
3
- This module is the deep one: a small interface (``AgentDeps`` ports +
4
- ``AgentRuntime.run_to_completion``) over the whole multi-role agent loop
3
+ This module is the deep single-agent loop: a small interface (``AgentDeps`` ports +
4
+ ``SingleAgentRuntime.run_to_completion``) over the whole role-phased state machine
5
5
  (planner → executor → critic → rollback → memory). It carries no FastAPI,
6
6
  no globals, and no I/O of its own — every collaborator is injected through
7
7
  ``AgentDeps``.
@@ -23,14 +23,13 @@ from __future__ import annotations
23
23
  import json
24
24
  import logging
25
25
  import re
26
- import subprocess
27
26
  from dataclasses import dataclass
28
27
  from enum import Enum
29
28
  from pathlib import Path
30
29
  from typing import Any, Awaitable, Callable, Dict, FrozenSet, List, Optional
31
30
 
32
31
  from lattice_brain.runtime.hooks import dispatch_tool
33
- from lattice_brain.runtime.contracts import single_agent_contract
32
+ from lattice_brain.runtime.contracts import runtime_boundary_contract, single_agent_contract
34
33
  from tools import ToolError
35
34
 
36
35
 
@@ -92,7 +91,7 @@ def extract_action(raw: str) -> Dict:
92
91
 
93
92
  @dataclass
94
93
  class AgentDeps:
95
- """The ports an :class:`AgentRuntime` needs from the outside world.
94
+ """The ports a :class:`SingleAgentRuntime` needs from the outside world.
96
95
 
97
96
  Everything the state machine touches is here, so the loop can be exercised
98
97
  against fakes. See module docstring for the two-adapter rationale.
@@ -125,6 +124,11 @@ class AgentDeps:
125
124
  memory_updater_prompt: str
126
125
  agent_root: Path
127
126
 
127
+ # ── rollback port (optional) ─────────────────────────────────────
128
+ # Production injects this from the tool dispatch service so this pure
129
+ # state machine does not shell out directly. Tests can pass a recorder.
130
+ rollback_file: Optional[Callable[[str], Dict[str, Any]]] = None
131
+
128
132
  # ── lifecycle hooks port (optional) ──────────────────────────────
129
133
  # When present, every tool execution fires the shared pre_tool/post_tool
130
134
  # lifecycle, so the agent tool path no longer bypasses hooks.
@@ -137,12 +141,30 @@ class AgentDeps:
137
141
  brain_memory: Any = None
138
142
 
139
143
 
140
- class AgentRuntime:
144
+ class SingleAgentRuntime:
141
145
  """Drives the agent state machine over injected :class:`AgentDeps`."""
142
146
 
143
147
  def __init__(self, deps: AgentDeps) -> None:
144
148
  self.deps = deps
145
149
 
150
+ def boundary(self) -> Dict[str, Any]:
151
+ return runtime_boundary_contract(
152
+ name="SingleAgentRuntime",
153
+ runtime="single_agent",
154
+ entrypoint="latticeai.core.agent.SingleAgentRuntime",
155
+ surface="/agent",
156
+ owns="single-agent PLAN / EXECUTE / VERIFY state machine over injected ports",
157
+ compatibility_aliases=["latticeai.core.agent.AgentRuntime"],
158
+ )
159
+
160
+ def config(self) -> Dict[str, Any]:
161
+ return {
162
+ "boundary": self.boundary(),
163
+ "states": [state.value for state in AgentState],
164
+ "terminal_states": sorted(state.value for state in AGENT_TERMINAL_STATES),
165
+ "execution_mode": "injected_ports",
166
+ }
167
+
146
168
  def contract(self, ctx: AgentRunContext, req: Any, *, run_id: Optional[str] = None) -> Dict[str, Any]:
147
169
  """Expose the shared agent-run contract for the single-agent loop."""
148
170
  return single_agent_contract(ctx=ctx, goal=getattr(req, "message", ""), run_id=run_id)
@@ -405,12 +427,11 @@ class AgentRuntime:
405
427
  path = result.get("path") or (step.get("args") or {}).get("path", "")
406
428
  if not path:
407
429
  continue
430
+ if d.rollback_file is None:
431
+ rolled.append({"path": path, "ok": False, "error": "rollback_file port is not configured"})
432
+ continue
408
433
  try:
409
- r = subprocess.run(
410
- ["git", "checkout", "--", path], cwd=str(d.agent_root),
411
- capture_output=True, text=True, timeout=10,
412
- )
413
- rolled.append({"path": path, "ok": r.returncode == 0, "stderr": r.stderr[:200]})
434
+ rolled.append(d.rollback_file(str(path)))
414
435
  except Exception as exc:
415
436
  rolled.append({"path": path, "ok": False, "error": str(exc)})
416
437
 
@@ -491,3 +512,9 @@ class AgentRuntime:
491
512
  ctx.state = AgentState.FAILED
492
513
 
493
514
  ctx.state_history.append(ctx.state.value)
515
+
516
+
517
+ # Backward compatibility: external callers historically imported
518
+ # ``latticeai.core.agent.AgentRuntime`` for the single-agent state machine.
519
+ # The product/runtime facade lives at ``lattice_brain.runtime.agent_runtime``.
520
+ AgentRuntime = SingleAgentRuntime
@@ -11,7 +11,7 @@ from copy import deepcopy
11
11
  from typing import Any, Dict, List, Optional
12
12
 
13
13
 
14
- MARKETPLACE_VERSION = "7.7.0"
14
+ MARKETPLACE_VERSION = "7.9.0"
15
15
  TEMPLATE_KINDS = ("plugin", "workflow", "agent")
16
16
 
17
17
 
@@ -21,7 +21,7 @@ from typing import Any, Callable, Dict, Iterable, List, Optional
21
21
  from lattice_brain.runtime.contracts import realtime_event_contract, run_record_contract, workflow_run_contract
22
22
 
23
23
 
24
- WORKSPACE_OS_VERSION = "7.7.0"
24
+ WORKSPACE_OS_VERSION = "7.9.0"
25
25
 
26
26
  # Workspace types separate single-user Personal workspaces from shared
27
27
  # Organization workspaces. Both keep the same local-first JSON store; the type
@@ -110,7 +110,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
110
110
  runtime_module_count = len(list((root / "latticeai" / "runtime").glob("*.py")))
111
111
  return {
112
112
  "status": "complete" if all(gate.status == "complete" for gate in gates) else "incomplete",
113
- "version_target": "7.7.0",
113
+ "version_target": "7.9.0",
114
114
  "gates": [gate.__dict__ for gate in gates],
115
115
  "metrics": {
116
116
  "api_router_modules": api_router_count,
@@ -1,8 +1,8 @@
1
- """Machine-checkable *product* readiness gates for the 7.7 line.
1
+ """Machine-checkable *product* readiness gates for the 7.9 line.
2
2
 
3
3
  Where ``architecture_readiness`` proves the internal structure is sound, this
4
- module answers the product question the 7.7 release exists to settle: *would
5
- anyone looking at this call it a finished product?* It does so honestly — every
4
+ module answers the product question the 7.9 release exists to settle: *are the
5
+ runtime boundaries still clear and release-ready after hardening?* It does so honestly — every
6
6
  gate is backed by evidence that is probed on disk, so a gate only reports
7
7
  ``complete`` when its evidence actually resolves. The same report can be printed
8
8
  by ``scripts/product_readiness.py`` and re-run after every change, which is the
@@ -17,7 +17,7 @@ from typing import Any, Dict, List
17
17
 
18
18
  from latticeai.services.architecture_readiness import architecture_readiness
19
19
 
20
- PRODUCT_VERSION_TARGET = "7.7.0"
20
+ PRODUCT_VERSION_TARGET = "7.9.0"
21
21
 
22
22
 
23
23
  @dataclass(frozen=True)
@@ -64,10 +64,10 @@ PRODUCT_GATES: List[ProductGate] = [
64
64
  evidence=[
65
65
  "package.json::release:artifacts",
66
66
  "package.json::release:validate",
67
- "README.md::dist/ltcai-7.7.0-py3-none-any.whl",
68
- "README.md::dist/ltcai-7.7.0.tar.gz",
69
- "README.md::dist/ltcai-7.7.0.vsix",
70
- "README.md::ltcai-7.7.0.tgz",
67
+ "README.md::dist/ltcai-7.9.0-py3-none-any.whl",
68
+ "README.md::dist/ltcai-7.9.0.tar.gz",
69
+ "README.md::dist/ltcai-7.9.0.vsix",
70
+ "README.md::ltcai-7.9.0.tgz",
71
71
  "scripts/validate_release_artifacts.py",
72
72
  "scripts/release_smoke.py",
73
73
  "Dockerfile",
@@ -83,12 +83,19 @@ PRODUCT_GATES: List[ProductGate] = [
83
83
  title="Release story is documented and honest",
84
84
  evidence=[
85
85
  "README.md",
86
- "README.md::The current release is **7.7.0",
87
- "SECURITY.md::7.7.x (latest)",
88
- "vscode-extension/README.md::**7.7.0",
89
- "docs/CHANGELOG.md::## [7.7.0]",
86
+ "README.md::The current release is **7.9.0",
87
+ "SECURITY.md::7.9.x (latest)",
88
+ "vscode-extension/README.md::**7.9.0",
89
+ "docs/CHANGELOG.md::## [7.9.0]",
90
90
  "FEATURE_STATUS.md",
91
- "RELEASE_NOTES_v7.7.0.md",
91
+ "RELEASE_NOTES_v7.9.0.md",
92
+ "latticeai/core/agent.py::SingleAgentRuntime",
93
+ "latticeai/core/agent.py::AgentRuntime = SingleAgentRuntime",
94
+ "lattice_brain/runtime/contracts.py::runtime-boundary/v1",
95
+ "lattice_brain/runtime/contracts.py::RuntimeBoundaryProtocol",
96
+ "lattice_brain/runtime/agent_runtime.py::def boundary",
97
+ "latticeai/core/agent.py::def boundary",
98
+ "latticeai/services/tool_dispatch.py::rollback_file",
92
99
  ],
93
100
  ),
94
101
  ProductGate(
@@ -97,8 +104,8 @@ PRODUCT_GATES: List[ProductGate] = [
97
104
  evidence=[
98
105
  "scripts/brain_quality_eval.py",
99
106
  "scripts/product_readiness.py",
100
- "tests/unit/test_v77_product_readiness.py",
101
- "tests/visual/v3.spec.js::제품 상태판",
107
+ "tests/unit/test_v78_product_readiness.py",
108
+ "tests/visual/v3.spec.js::Brain Chat Home",
102
109
  ".github/workflows/ci.yml::scripts/product_readiness.py",
103
110
  ".github/workflows/release.yml::npm run lint",
104
111
  ],
@@ -8,11 +8,12 @@ from __future__ import annotations
8
8
 
9
9
  from dataclasses import dataclass, field
10
10
  from pathlib import Path
11
+ import subprocess
11
12
  from typing import Any, Callable, Dict, Mapping, Optional
12
13
 
13
14
  from fastapi import HTTPException
14
15
 
15
- from latticeai.core.agent import AgentDeps, AgentRuntime
16
+ from latticeai.core.agent import AgentDeps, SingleAgentRuntime
16
17
  from latticeai.core.agent_prompts import (
17
18
  CRITIC_PROMPT,
18
19
  EXECUTOR_PROMPT,
@@ -106,6 +107,16 @@ class ToolDispatchService:
106
107
  detail=f"'{tool_name}' 툴은 관리자 전용입니다.",
107
108
  )
108
109
 
110
+ def rollback_file(self, path: str) -> Dict[str, Any]:
111
+ r = subprocess.run(
112
+ ["git", "checkout", "--", path],
113
+ cwd=str(AGENT_ROOT),
114
+ capture_output=True,
115
+ text=True,
116
+ timeout=10,
117
+ )
118
+ return {"path": path, "ok": r.returncode == 0, "stderr": r.stderr[:200]}
119
+
109
120
 
110
121
  DEFAULT_TOOL_DISPATCH_SERVICE = ToolDispatchService()
111
122
 
@@ -185,7 +196,7 @@ def build_agent_runtime(
185
196
  hooks: Any = None,
186
197
  brain_memory: Any = None,
187
198
  dispatch_service: ToolDispatchService = DEFAULT_TOOL_DISPATCH_SERVICE,
188
- ) -> AgentRuntime:
199
+ ) -> SingleAgentRuntime:
189
200
  ensure_agent_root()
190
201
  deps = AgentDeps(
191
202
  generate_as=model_router.generate_as,
@@ -205,10 +216,11 @@ def build_agent_runtime(
205
216
  critic_prompt=CRITIC_PROMPT,
206
217
  memory_updater_prompt=MEMORY_UPDATER_PROMPT,
207
218
  agent_root=AGENT_ROOT,
219
+ rollback_file=dispatch_service.rollback_file,
208
220
  hooks=hooks,
209
221
  brain_memory=brain_memory,
210
222
  )
211
- return AgentRuntime(deps)
223
+ return SingleAgentRuntime(deps)
212
224
 
213
225
 
214
226
  def tool_response(fn, *args):
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "7.7.0",
3
+ "version": "7.9.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": {
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python3
2
- """Print the 7.7 product-readiness scorecard and fail CI when incomplete.
2
+ """Print the 7.8 product-readiness scorecard and fail CI when incomplete.
3
3
 
4
4
  Run it as often as you like — it re-probes the repo every time, so it is the
5
5
  single objective answer to "is this a finished product yet?". Exit code is 0
@@ -1584,7 +1584,7 @@ dependencies = [
1584
1584
 
1585
1585
  [[package]]
1586
1586
  name = "lattice-ai-desktop"
1587
- version = "7.7.0"
1587
+ version = "7.9.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 = "7.7.0"
3
+ version = "7.9.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": "7.7.0",
4
+ "version": "7.9.0",
5
5
  "identifier": "ai.lattice.desktop",
6
6
  "build": {
7
7
  "beforeDevCommand": "npm run frontend:dev",
@@ -1,20 +1,20 @@
1
1
  {
2
- "version": "7.7.0",
2
+ "version": "7.9.0",
3
3
  "generated_at": "vite",
4
4
  "entrypoints": {
5
5
  "app": "/static/app/index.html"
6
6
  },
7
7
  "assets": {
8
8
  "../node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
9
- "_primitives-CFhU5Rka.js": "/static/app/assets/primitives-CFhU5Rka.js",
10
- "_textarea-uBpGDOJM.js": "/static/app/assets/textarea-uBpGDOJM.js",
11
- "index.html": "/static/app/assets/index-B4_drWel.js",
12
- "assets/index-DjpDeE0c.css": "/static/app/assets/index-DjpDeE0c.css",
13
- "src/pages/Act.tsx": "/static/app/assets/Act-CX5hL0Z3.js",
14
- "src/pages/Brain.tsx": "/static/app/assets/Brain-m19en5wz.js",
15
- "src/pages/Capture.tsx": "/static/app/assets/Capture-CdFSrZnA.js",
16
- "src/pages/Library.tsx": "/static/app/assets/Library-CZFVGSmG.js",
17
- "src/pages/System.tsx": "/static/app/assets/System-CMoOoUrZ.js"
9
+ "_primitives-CD38lt4n.js": "/static/app/assets/primitives-CD38lt4n.js",
10
+ "_textarea-BZk6ybp5.js": "/static/app/assets/textarea-BZk6ybp5.js",
11
+ "index.html": "/static/app/assets/index-DbcEYJQ2.js",
12
+ "assets/index-C7g26IF6.css": "/static/app/assets/index-C7g26IF6.css",
13
+ "src/pages/Act.tsx": "/static/app/assets/Act-DOvf59ru.js",
14
+ "src/pages/Brain.tsx": "/static/app/assets/Brain-C7_0mEiI.js",
15
+ "src/pages/Capture.tsx": "/static/app/assets/Capture-B9Tlhzqr.js",
16
+ "src/pages/Library.tsx": "/static/app/assets/Library-BJPEEm5O.js",
17
+ "src/pages/System.tsx": "/static/app/assets/System-D6t9jo9V.js"
18
18
  },
19
19
  "vite": {
20
20
  "../node_modules/@tauri-apps/api/core.js": {
@@ -23,22 +23,22 @@
23
23
  "src": "../node_modules/@tauri-apps/api/core.js",
24
24
  "isDynamicEntry": true
25
25
  },
26
- "_primitives-CFhU5Rka.js": {
27
- "file": "assets/primitives-CFhU5Rka.js",
26
+ "_primitives-CD38lt4n.js": {
27
+ "file": "assets/primitives-CD38lt4n.js",
28
28
  "name": "primitives",
29
29
  "imports": [
30
30
  "index.html"
31
31
  ]
32
32
  },
33
- "_textarea-uBpGDOJM.js": {
34
- "file": "assets/textarea-uBpGDOJM.js",
33
+ "_textarea-BZk6ybp5.js": {
34
+ "file": "assets/textarea-BZk6ybp5.js",
35
35
  "name": "textarea",
36
36
  "imports": [
37
37
  "index.html"
38
38
  ]
39
39
  },
40
40
  "index.html": {
41
- "file": "assets/index-B4_drWel.js",
41
+ "file": "assets/index-DbcEYJQ2.js",
42
42
  "name": "index",
43
43
  "src": "index.html",
44
44
  "isEntry": true,
@@ -51,59 +51,59 @@
51
51
  "src/pages/System.tsx"
52
52
  ],
53
53
  "css": [
54
- "assets/index-DjpDeE0c.css"
54
+ "assets/index-C7g26IF6.css"
55
55
  ]
56
56
  },
57
57
  "src/pages/Act.tsx": {
58
- "file": "assets/Act-CX5hL0Z3.js",
58
+ "file": "assets/Act-DOvf59ru.js",
59
59
  "name": "Act",
60
60
  "src": "src/pages/Act.tsx",
61
61
  "isDynamicEntry": true,
62
62
  "imports": [
63
63
  "index.html",
64
- "_primitives-CFhU5Rka.js",
65
- "_textarea-uBpGDOJM.js"
64
+ "_primitives-CD38lt4n.js",
65
+ "_textarea-BZk6ybp5.js"
66
66
  ]
67
67
  },
68
68
  "src/pages/Brain.tsx": {
69
- "file": "assets/Brain-m19en5wz.js",
69
+ "file": "assets/Brain-C7_0mEiI.js",
70
70
  "name": "Brain",
71
71
  "src": "src/pages/Brain.tsx",
72
72
  "isDynamicEntry": true,
73
73
  "imports": [
74
74
  "index.html",
75
- "_primitives-CFhU5Rka.js",
76
- "_textarea-uBpGDOJM.js"
75
+ "_primitives-CD38lt4n.js",
76
+ "_textarea-BZk6ybp5.js"
77
77
  ]
78
78
  },
79
79
  "src/pages/Capture.tsx": {
80
- "file": "assets/Capture-CdFSrZnA.js",
80
+ "file": "assets/Capture-B9Tlhzqr.js",
81
81
  "name": "Capture",
82
82
  "src": "src/pages/Capture.tsx",
83
83
  "isDynamicEntry": true,
84
84
  "imports": [
85
85
  "index.html",
86
- "_primitives-CFhU5Rka.js"
86
+ "_primitives-CD38lt4n.js"
87
87
  ]
88
88
  },
89
89
  "src/pages/Library.tsx": {
90
- "file": "assets/Library-CZFVGSmG.js",
90
+ "file": "assets/Library-BJPEEm5O.js",
91
91
  "name": "Library",
92
92
  "src": "src/pages/Library.tsx",
93
93
  "isDynamicEntry": true,
94
94
  "imports": [
95
95
  "index.html",
96
- "_primitives-CFhU5Rka.js"
96
+ "_primitives-CD38lt4n.js"
97
97
  ]
98
98
  },
99
99
  "src/pages/System.tsx": {
100
- "file": "assets/System-CMoOoUrZ.js",
100
+ "file": "assets/System-D6t9jo9V.js",
101
101
  "name": "System",
102
102
  "src": "src/pages/System.tsx",
103
103
  "isDynamicEntry": true,
104
104
  "imports": [
105
105
  "index.html",
106
- "_primitives-CFhU5Rka.js"
106
+ "_primitives-CD38lt4n.js"
107
107
  ]
108
108
  }
109
109
  }