ltcai 6.7.0 → 7.0.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 (41) hide show
  1. package/README.md +29 -31
  2. package/docs/CHANGELOG.md +25 -0
  3. package/frontend/src/api/client.ts +5 -0
  4. package/frontend/src/features/brain/BrainConversation.tsx +163 -1
  5. package/frontend/src/features/brain/BrainHome.tsx +108 -1
  6. package/frontend/src/features/brain/types.ts +13 -0
  7. package/frontend/src/i18n.ts +70 -0
  8. package/frontend/src/styles.css +212 -0
  9. package/lattice_brain/__init__.py +1 -1
  10. package/lattice_brain/runtime/multi_agent.py +1 -1
  11. package/latticeai/__init__.py +1 -1
  12. package/latticeai/core/marketplace.py +1 -1
  13. package/latticeai/core/workspace_os.py +1 -1
  14. package/package.json +1 -1
  15. package/scripts/brain_quality_eval.py +118 -0
  16. package/src-tauri/Cargo.lock +1 -1
  17. package/src-tauri/Cargo.toml +1 -1
  18. package/src-tauri/tauri.conf.json +1 -1
  19. package/static/app/asset-manifest.json +28 -28
  20. package/static/app/assets/{Act-DGN37eR4.js → Act-DhLaHnrT.js} +2 -2
  21. package/static/app/assets/{Act-DGN37eR4.js.map → Act-DhLaHnrT.js.map} +1 -1
  22. package/static/app/assets/{Brain-HDcIwPHW.js → Brain-DS7NULyY.js} +3 -3
  23. package/static/app/assets/{Brain-HDcIwPHW.js.map → Brain-DS7NULyY.js.map} +1 -1
  24. package/static/app/assets/Capture-CAKouj52.js +2 -0
  25. package/static/app/assets/Capture-CAKouj52.js.map +1 -0
  26. package/static/app/assets/{Library-BbagRFyd.js → Library-B_hW4AwR.js} +2 -2
  27. package/static/app/assets/{Library-BbagRFyd.js.map → Library-B_hW4AwR.js.map} +1 -1
  28. package/static/app/assets/{System-C6pd3Mp_.js → System-9OAoXWPz.js} +2 -2
  29. package/static/app/assets/{System-C6pd3Mp_.js.map → System-9OAoXWPz.js.map} +1 -1
  30. package/static/app/assets/index-C-7aHabu.js +17 -0
  31. package/static/app/assets/index-C-7aHabu.js.map +1 -0
  32. package/static/app/assets/{index-ztppMg0c.css → index-DKFpn5Kn.css} +1 -1
  33. package/static/app/assets/{primitives-Bcm5lZRu.js → primitives-DcO2H3yh.js} +2 -2
  34. package/static/app/assets/{primitives-Bcm5lZRu.js.map → primitives-DcO2H3yh.js.map} +1 -1
  35. package/static/app/assets/{textarea-C2PLu6_O.js → textarea-DR2Tyy_6.js} +2 -2
  36. package/static/app/assets/{textarea-C2PLu6_O.js.map → textarea-DR2Tyy_6.js.map} +1 -1
  37. package/static/app/index.html +2 -2
  38. package/static/app/assets/Capture--eZfb_Ex.js +0 -2
  39. package/static/app/assets/Capture--eZfb_Ex.js.map +0 -1
  40. package/static/app/assets/index-C950aES_.js +0 -17
  41. package/static/app/assets/index-C950aES_.js.map +0 -1
@@ -1413,6 +1413,99 @@ body {
1413
1413
  mask-image: linear-gradient(transparent, black 6%, black 92%, transparent);
1414
1414
  }
1415
1415
 
1416
+ .brain-ingestion-panel {
1417
+ margin: 0 0 0.85rem;
1418
+ border: 1px solid hsl(var(--memory) / 0.34);
1419
+ border-radius: 8px;
1420
+ background: hsl(var(--memory) / 0.06);
1421
+ padding: 0.78rem;
1422
+ }
1423
+
1424
+ .brain-ingestion-head {
1425
+ display: flex;
1426
+ align-items: baseline;
1427
+ justify-content: space-between;
1428
+ gap: 0.75rem;
1429
+ margin-bottom: 0.62rem;
1430
+ }
1431
+
1432
+ .brain-ingestion-head span {
1433
+ color: hsl(var(--fg-muted));
1434
+ font-size: 0.64rem;
1435
+ font-weight: 840;
1436
+ text-transform: uppercase;
1437
+ }
1438
+
1439
+ .brain-ingestion-head strong {
1440
+ color: hsl(var(--fg));
1441
+ font-size: 0.9rem;
1442
+ }
1443
+
1444
+ .brain-ingestion-grid {
1445
+ display: grid;
1446
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1447
+ gap: 0.55rem;
1448
+ }
1449
+
1450
+ .brain-ingest-tile {
1451
+ display: grid;
1452
+ min-height: 5.8rem;
1453
+ cursor: pointer;
1454
+ align-content: start;
1455
+ gap: 0.28rem;
1456
+ border: 1px solid hsl(var(--border) / 0.55);
1457
+ border-radius: 8px;
1458
+ background: hsl(var(--surface) / 0.58);
1459
+ color: hsl(var(--fg));
1460
+ padding: 0.62rem;
1461
+ text-align: left;
1462
+ transition: border-color 150ms ease, background 150ms ease, transform 150ms ease;
1463
+ }
1464
+
1465
+ .brain-ingest-tile:hover,
1466
+ .brain-ingest-tile:focus-within {
1467
+ border-color: hsl(var(--memory) / 0.72);
1468
+ background: hsl(var(--memory) / 0.1);
1469
+ outline: none;
1470
+ transform: translateY(-1px);
1471
+ }
1472
+
1473
+ .brain-ingest-tile.is-primary {
1474
+ border-color: hsl(var(--memory) / 0.5);
1475
+ }
1476
+
1477
+ .brain-ingest-tile.is-disabled {
1478
+ cursor: wait;
1479
+ opacity: 0.68;
1480
+ }
1481
+
1482
+ .brain-ingest-tile svg {
1483
+ color: hsl(var(--memory));
1484
+ }
1485
+
1486
+ .brain-ingest-tile span {
1487
+ font-size: 0.78rem;
1488
+ font-weight: 820;
1489
+ line-height: 1.15;
1490
+ }
1491
+
1492
+ .brain-ingest-tile small {
1493
+ color: hsl(var(--fg-muted));
1494
+ font-size: 0.68rem;
1495
+ line-height: 1.2;
1496
+ }
1497
+
1498
+ .brain-ingest-tile input {
1499
+ width: 100%;
1500
+ min-width: 0;
1501
+ border: 1px solid hsl(var(--border) / 0.55);
1502
+ border-radius: 6px;
1503
+ background: hsl(var(--bg) / 0.45);
1504
+ color: hsl(var(--fg));
1505
+ padding: 0.38rem 0.44rem;
1506
+ font-size: 0.72rem;
1507
+ }
1508
+
1416
1509
  .brain-overview-panel {
1417
1510
  margin: 0 0 1rem;
1418
1511
  border: 1px solid hsl(var(--border) / 0.58);
@@ -1643,6 +1736,59 @@ body {
1643
1736
  font-size: 0.76rem;
1644
1737
  }
1645
1738
 
1739
+ .brain-model-demo {
1740
+ display: grid;
1741
+ grid-template-columns: minmax(0, 1fr) auto auto;
1742
+ align-items: center;
1743
+ gap: 0.58rem;
1744
+ margin: 0 0 1rem;
1745
+ border: 1px solid hsl(var(--knowledge) / 0.3);
1746
+ border-radius: 8px;
1747
+ background: hsl(var(--knowledge) / 0.06);
1748
+ padding: 0.66rem;
1749
+ }
1750
+
1751
+ .brain-model-demo span {
1752
+ display: block;
1753
+ color: hsl(var(--fg-muted));
1754
+ font-size: 0.62rem;
1755
+ font-weight: 840;
1756
+ text-transform: uppercase;
1757
+ }
1758
+
1759
+ .brain-model-demo strong,
1760
+ .brain-model-demo small {
1761
+ display: block;
1762
+ overflow: hidden;
1763
+ text-overflow: ellipsis;
1764
+ white-space: nowrap;
1765
+ }
1766
+
1767
+ .brain-model-demo strong {
1768
+ font-size: 0.82rem;
1769
+ line-height: 1.2;
1770
+ }
1771
+
1772
+ .brain-model-demo small {
1773
+ color: hsl(var(--fg-muted));
1774
+ font-size: 0.72rem;
1775
+ }
1776
+
1777
+ .brain-model-demo button {
1778
+ display: inline-flex;
1779
+ min-height: 2rem;
1780
+ align-items: center;
1781
+ gap: 0.35rem;
1782
+ border: 1px solid hsl(var(--knowledge) / 0.38);
1783
+ border-radius: 999px;
1784
+ background: hsl(var(--surface) / 0.72);
1785
+ color: hsl(var(--fg));
1786
+ padding: 0 0.64rem;
1787
+ font-size: 0.72rem;
1788
+ font-weight: 780;
1789
+ white-space: nowrap;
1790
+ }
1791
+
1646
1792
  .brain-save-feedback {
1647
1793
  display: grid;
1648
1794
  grid-template-columns: auto minmax(0, 1fr);
@@ -1694,6 +1840,72 @@ body {
1694
1840
  border-bottom-left-radius: 6px;
1695
1841
  }
1696
1842
 
1843
+ .brain-answer-proof {
1844
+ display: grid;
1845
+ gap: 0.45rem;
1846
+ margin-top: 0.45rem;
1847
+ border: 1px solid hsl(var(--memory) / 0.34);
1848
+ border-radius: 8px;
1849
+ background: hsl(var(--memory) / 0.06);
1850
+ padding: 0.58rem;
1851
+ }
1852
+
1853
+ .brain-answer-proof-head {
1854
+ display: flex;
1855
+ justify-content: space-between;
1856
+ gap: 0.6rem;
1857
+ }
1858
+
1859
+ .brain-answer-proof-head span,
1860
+ .brain-answer-proof li span {
1861
+ color: hsl(var(--fg-muted));
1862
+ font-size: 0.62rem;
1863
+ font-weight: 840;
1864
+ text-transform: uppercase;
1865
+ }
1866
+
1867
+ .brain-answer-proof-head strong {
1868
+ overflow: hidden;
1869
+ color: hsl(var(--fg));
1870
+ font-size: 0.68rem;
1871
+ text-overflow: ellipsis;
1872
+ white-space: nowrap;
1873
+ }
1874
+
1875
+ .brain-answer-proof ol {
1876
+ display: grid;
1877
+ gap: 0.35rem;
1878
+ margin: 0;
1879
+ padding: 0;
1880
+ list-style: none;
1881
+ }
1882
+
1883
+ .brain-answer-proof li {
1884
+ display: grid;
1885
+ gap: 0.1rem;
1886
+ border: 1px solid hsl(var(--border) / 0.45);
1887
+ border-radius: 6px;
1888
+ background: hsl(var(--surface) / 0.48);
1889
+ padding: 0.44rem;
1890
+ }
1891
+
1892
+ .brain-answer-proof li strong,
1893
+ .brain-answer-proof li small {
1894
+ overflow: hidden;
1895
+ text-overflow: ellipsis;
1896
+ white-space: nowrap;
1897
+ }
1898
+
1899
+ .brain-answer-proof li strong {
1900
+ font-size: 0.76rem;
1901
+ }
1902
+
1903
+ .brain-answer-proof li small,
1904
+ .brain-answer-proof > small {
1905
+ color: hsl(var(--fg-muted));
1906
+ font-size: 0.7rem;
1907
+ }
1908
+
1697
1909
  @keyframes message-enter {
1698
1910
  from { opacity: 0; transform: translateY(6px); }
1699
1911
  to { opacity: 1; transform: none; }
@@ -26,7 +26,7 @@ from .storage import (
26
26
  storage_from_env,
27
27
  )
28
28
 
29
- __version__ = "6.7.0"
29
+ __version__ = "7.0.0"
30
30
 
31
31
  __all__ = [
32
32
  "AgentRuntime",
@@ -19,7 +19,7 @@ from datetime import datetime
19
19
  from typing import Any, Callable, Dict, List, Optional
20
20
 
21
21
 
22
- MULTI_AGENT_VERSION = "6.7.0"
22
+ MULTI_AGENT_VERSION = "7.0.0"
23
23
 
24
24
  AGENT_ROLES = ("researcher", "planner", "executor", "reviewer", "release")
25
25
  CORE_PIPELINE = ("planner", "executor", "reviewer")
@@ -1,3 +1,3 @@
1
1
  """Lattice AI - modular server package."""
2
2
 
3
- __version__ = "6.7.0"
3
+ __version__ = "7.0.0"
@@ -11,7 +11,7 @@ from copy import deepcopy
11
11
  from typing import Any, Dict, List, Optional
12
12
 
13
13
 
14
- MARKETPLACE_VERSION = "6.7.0"
14
+ MARKETPLACE_VERSION = "7.0.0"
15
15
  TEMPLATE_KINDS = ("plugin", "workflow", "agent")
16
16
 
17
17
 
@@ -19,7 +19,7 @@ from pathlib import Path
19
19
  from typing import Any, Callable, Dict, Iterable, List, Optional
20
20
 
21
21
 
22
- WORKSPACE_OS_VERSION = "6.7.0"
22
+ WORKSPACE_OS_VERSION = "7.0.0"
23
23
 
24
24
  # Workspace types separate single-user Personal workspaces from shared
25
25
  # Organization workspaces. Both keep the same local-first JSON store; the type
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "6.7.0",
3
+ "version": "7.0.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": {
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env python3
2
+ """Deterministic Brain recall/KG quality gate for CI.
3
+
4
+ This is intentionally small and fixture-driven. It guards the product promise
5
+ that the first Brain loop can save context, recall it with source evidence, and
6
+ show model-independent proof without relying on a live model.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import sys
12
+ import tempfile
13
+ from pathlib import Path
14
+
15
+ from latticeai.services.memory_service import MemoryService
16
+
17
+
18
+ class _EvalStore:
19
+ def __init__(self) -> None:
20
+ self.rows = [
21
+ {
22
+ "id": "decision:pricing",
23
+ "kind": "decision",
24
+ "content": "Use local-first memory as the product wedge for early access customers.",
25
+ "workspace_id": "personal",
26
+ "tags": ["strategy"],
27
+ },
28
+ {
29
+ "id": "note:first-loop",
30
+ "kind": "note",
31
+ "content": "The first five minute loop is add source, ask question, see Brain proof.",
32
+ "workspace_id": "personal",
33
+ "tags": ["onboarding"],
34
+ },
35
+ ]
36
+
37
+ def list_memories(self, user_email=None, kind=None, workspace_id=None):
38
+ rows = [row for row in self.rows if kind is None or row["kind"] == kind]
39
+ if workspace_id is not None:
40
+ rows = [row for row in rows if (row.get("workspace_id") or "personal") == workspace_id]
41
+ return {"memories": rows}
42
+
43
+ def list_memory_snapshots(self, workspace_id=None, limit=50):
44
+ return {"snapshots": [{"snapshot_id": "eval-snapshot"}]}
45
+
46
+ def search_memories(self, q, user_email=None, limit=20, workspace_id=None):
47
+ terms = {term for term in (q or "").lower().split() if len(term) > 2}
48
+ rows = [
49
+ row for row in self.rows
50
+ if (workspace_id is None or (row.get("workspace_id") or "personal") == workspace_id)
51
+ and terms.intersection(row["content"].lower().split())
52
+ ]
53
+ return {"memories": rows[:limit]}
54
+
55
+
56
+ class _EvalGraph:
57
+ def stats(self):
58
+ return {"nodes": {"Document": 1, "Decision": 1, "Topic": 1}, "edges": {"mentions": 2}}
59
+
60
+ def index_status(self):
61
+ return {"vector_counts": {"node": 3, "chunk": 2}}
62
+
63
+ def search(self, q, limit=20):
64
+ return {
65
+ "matches": [
66
+ {
67
+ "id": "doc:first-loop",
68
+ "type": "Document",
69
+ "title": "First Brain Loop",
70
+ "summary": "Users add a source, ask a question, and see proof with citations.",
71
+ "score": 0.94,
72
+ "metadata": {"source": "eval:first-loop.md", "workspace_id": "personal"},
73
+ }
74
+ ][:limit]
75
+ }
76
+
77
+
78
+ def _fail(message: str) -> int:
79
+ print(f"brain-quality-eval: FAIL: {message}", file=sys.stderr)
80
+ return 1
81
+
82
+
83
+ def main() -> int:
84
+ with tempfile.TemporaryDirectory() as tmp:
85
+ service = MemoryService(
86
+ store=_EvalStore(),
87
+ data_dir=Path(tmp),
88
+ knowledge_graph=_EvalGraph(),
89
+ enable_graph=True,
90
+ )
91
+ proof = service.brain_proof(
92
+ recall_query="first five minute Brain proof",
93
+ user_email="eval@example.com",
94
+ workspace_id="personal",
95
+ active_model="eval-model-a",
96
+ limit=4,
97
+ )
98
+
99
+ recall_items = proof.get("recall", {}).get("items", [])
100
+ if proof.get("model_continuity", {}).get("proven") is not True:
101
+ return _fail("model continuity proof must be true when durable evidence exists")
102
+ if proof.get("claims", {}).get("keeps_context_across_models") is not True:
103
+ return _fail("model-independent context claim must be backed by durable evidence")
104
+ if not recall_items:
105
+ return _fail("recall must return at least one memory or KG item")
106
+ if not any(str(item.get("source") or "").lower() in {"workspace", "graph"} for item in recall_items):
107
+ return _fail("recall items must expose a source for citation UI")
108
+ if proof.get("proofs", {}).get("graph_concepts", 0) < 1:
109
+ return _fail("KG concepts must be counted in Brain proof")
110
+ if proof.get("proofs", {}).get("vector_items", 0) < 1:
111
+ return _fail("vector items must be counted in Brain proof")
112
+
113
+ print("brain-quality-eval: OK")
114
+ return 0
115
+
116
+
117
+ if __name__ == "__main__":
118
+ raise SystemExit(main())
@@ -1654,7 +1654,7 @@ dependencies = [
1654
1654
 
1655
1655
  [[package]]
1656
1656
  name = "lattice-ai-desktop"
1657
- version = "6.7.0"
1657
+ version = "7.0.0"
1658
1658
  dependencies = [
1659
1659
  "plist",
1660
1660
  "serde",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "lattice-ai-desktop"
3
- version = "6.7.0"
3
+ version = "7.0.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": "6.7.0",
4
+ "version": "7.0.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": "6.7.0",
2
+ "version": "7.0.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-Bcm5lZRu.js": "/static/app/assets/primitives-Bcm5lZRu.js",
10
- "_textarea-C2PLu6_O.js": "/static/app/assets/textarea-C2PLu6_O.js",
11
- "index.html": "/static/app/assets/index-C950aES_.js",
12
- "assets/index-ztppMg0c.css": "/static/app/assets/index-ztppMg0c.css",
13
- "src/pages/Act.tsx": "/static/app/assets/Act-DGN37eR4.js",
14
- "src/pages/Brain.tsx": "/static/app/assets/Brain-HDcIwPHW.js",
15
- "src/pages/Capture.tsx": "/static/app/assets/Capture--eZfb_Ex.js",
16
- "src/pages/Library.tsx": "/static/app/assets/Library-BbagRFyd.js",
17
- "src/pages/System.tsx": "/static/app/assets/System-C6pd3Mp_.js"
9
+ "_primitives-DcO2H3yh.js": "/static/app/assets/primitives-DcO2H3yh.js",
10
+ "_textarea-DR2Tyy_6.js": "/static/app/assets/textarea-DR2Tyy_6.js",
11
+ "index.html": "/static/app/assets/index-C-7aHabu.js",
12
+ "assets/index-DKFpn5Kn.css": "/static/app/assets/index-DKFpn5Kn.css",
13
+ "src/pages/Act.tsx": "/static/app/assets/Act-DhLaHnrT.js",
14
+ "src/pages/Brain.tsx": "/static/app/assets/Brain-DS7NULyY.js",
15
+ "src/pages/Capture.tsx": "/static/app/assets/Capture-CAKouj52.js",
16
+ "src/pages/Library.tsx": "/static/app/assets/Library-B_hW4AwR.js",
17
+ "src/pages/System.tsx": "/static/app/assets/System-9OAoXWPz.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-Bcm5lZRu.js": {
27
- "file": "assets/primitives-Bcm5lZRu.js",
26
+ "_primitives-DcO2H3yh.js": {
27
+ "file": "assets/primitives-DcO2H3yh.js",
28
28
  "name": "primitives",
29
29
  "imports": [
30
30
  "index.html"
31
31
  ]
32
32
  },
33
- "_textarea-C2PLu6_O.js": {
34
- "file": "assets/textarea-C2PLu6_O.js",
33
+ "_textarea-DR2Tyy_6.js": {
34
+ "file": "assets/textarea-DR2Tyy_6.js",
35
35
  "name": "textarea",
36
36
  "imports": [
37
37
  "index.html"
38
38
  ]
39
39
  },
40
40
  "index.html": {
41
- "file": "assets/index-C950aES_.js",
41
+ "file": "assets/index-C-7aHabu.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-ztppMg0c.css"
54
+ "assets/index-DKFpn5Kn.css"
55
55
  ]
56
56
  },
57
57
  "src/pages/Act.tsx": {
58
- "file": "assets/Act-DGN37eR4.js",
58
+ "file": "assets/Act-DhLaHnrT.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-Bcm5lZRu.js",
65
- "_textarea-C2PLu6_O.js"
64
+ "_primitives-DcO2H3yh.js",
65
+ "_textarea-DR2Tyy_6.js"
66
66
  ]
67
67
  },
68
68
  "src/pages/Brain.tsx": {
69
- "file": "assets/Brain-HDcIwPHW.js",
69
+ "file": "assets/Brain-DS7NULyY.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-Bcm5lZRu.js",
76
- "_textarea-C2PLu6_O.js"
75
+ "_primitives-DcO2H3yh.js",
76
+ "_textarea-DR2Tyy_6.js"
77
77
  ]
78
78
  },
79
79
  "src/pages/Capture.tsx": {
80
- "file": "assets/Capture--eZfb_Ex.js",
80
+ "file": "assets/Capture-CAKouj52.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-Bcm5lZRu.js"
86
+ "_primitives-DcO2H3yh.js"
87
87
  ]
88
88
  },
89
89
  "src/pages/Library.tsx": {
90
- "file": "assets/Library-BbagRFyd.js",
90
+ "file": "assets/Library-B_hW4AwR.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-Bcm5lZRu.js"
96
+ "_primitives-DcO2H3yh.js"
97
97
  ]
98
98
  },
99
99
  "src/pages/System.tsx": {
100
- "file": "assets/System-C6pd3Mp_.js",
100
+ "file": "assets/System-9OAoXWPz.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-Bcm5lZRu.js"
106
+ "_primitives-DcO2H3yh.js"
107
107
  ]
108
108
  }
109
109
  }