ltcai 7.6.0 → 7.7.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 +31 -34
- package/docs/CHANGELOG.md +19 -0
- package/frontend/src/App.tsx +1 -1
- package/frontend/src/api/client.ts +9 -2
- package/frontend/src/components/LivingBrain.tsx +9 -1
- package/frontend/src/components/ProductFlow.tsx +31 -3
- package/frontend/src/components/onboarding/RecommendationScreen.tsx +36 -28
- package/frontend/src/features/brain/BrainConversation.tsx +123 -2
- package/frontend/src/features/brain/BrainHome.tsx +5 -0
- package/frontend/src/features/review/ReviewInbox.tsx +2 -2
- package/frontend/src/features/review/reviewHelpers.ts +11 -11
- package/frontend/src/i18n.ts +121 -19
- package/frontend/src/pages/Act.tsx +28 -14
- package/frontend/src/routes.ts +6 -6
- package/frontend/src/styles.css +242 -0
- 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/marketplace.py +1 -1
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/services/architecture_readiness.py +25 -7
- package/latticeai/services/product_readiness.py +159 -0
- package/package.json +1 -1
- package/scripts/product_readiness.py +37 -0
- 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 +28 -28
- package/static/app/assets/Act-CX5hL0Z3.js +2 -0
- package/static/app/assets/{Act-CSeeIWB4.js.map → Act-CX5hL0Z3.js.map} +1 -1
- package/static/app/assets/{Brain-D_Ne4YoR.js → Brain-m19en5wz.js} +3 -3
- package/static/app/assets/{Brain-D_Ne4YoR.js.map → Brain-m19en5wz.js.map} +1 -1
- package/static/app/assets/Capture-CdFSrZnA.js +2 -0
- package/static/app/assets/Capture-CdFSrZnA.js.map +1 -0
- package/static/app/assets/Library-CZFVGSmG.js +2 -0
- package/static/app/assets/{Library-C4zmA8O2.js.map → Library-CZFVGSmG.js.map} +1 -1
- package/static/app/assets/System-CMoOoUrZ.js +2 -0
- package/static/app/assets/{System-Da-Kxwiz.js.map → System-CMoOoUrZ.js.map} +1 -1
- package/static/app/assets/index-B4_drWel.js +17 -0
- package/static/app/assets/index-B4_drWel.js.map +1 -0
- package/static/app/assets/index-DjpDeE0c.css +2 -0
- package/static/app/assets/{primitives-CSsF_Ymb.js → primitives-CFhU5Rka.js} +2 -2
- package/static/app/assets/{primitives-CSsF_Ymb.js.map → primitives-CFhU5Rka.js.map} +1 -1
- package/static/app/assets/textarea-uBpGDOJM.js +2 -0
- package/static/app/assets/{textarea-CJMFSyfQ.js.map → textarea-uBpGDOJM.js.map} +1 -1
- package/static/app/index.html +2 -2
- package/static/app/assets/Act-CSeeIWB4.js +0 -2
- package/static/app/assets/Capture-YFRAO4bJ.js +0 -2
- package/static/app/assets/Capture-YFRAO4bJ.js.map +0 -1
- package/static/app/assets/Library-C4zmA8O2.js +0 -2
- package/static/app/assets/System-Da-Kxwiz.js +0 -2
- package/static/app/assets/index-BwmCpRoW.css +0 -2
- package/static/app/assets/index-D1hsexMt.js +0 -17
- package/static/app/assets/index-D1hsexMt.js.map +0 -1
- package/static/app/assets/textarea-CJMFSyfQ.js +0 -2
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"""Machine-checkable architecture readiness gates for release work.
|
|
2
2
|
|
|
3
|
-
The 7.
|
|
4
|
-
claims
|
|
3
|
+
The 7.7 complete-product line preserves the 7.6 closure of the two local review
|
|
4
|
+
notes by keeping their architectural claims in a small contract: AgentRuntime,
|
|
5
|
+
ToolRegistry, central Config,
|
|
5
6
|
decomposed API routers, and Knowledge Graph portability must all be discoverable
|
|
6
7
|
and testable before the release can be called complete.
|
|
7
8
|
"""
|
|
8
9
|
|
|
9
10
|
from __future__ import annotations
|
|
10
11
|
|
|
12
|
+
import importlib
|
|
11
13
|
from dataclasses import dataclass
|
|
12
14
|
from pathlib import Path
|
|
13
15
|
from typing import Any, Dict, List
|
|
@@ -21,6 +23,22 @@ class ArchitectureGate:
|
|
|
21
23
|
evidence: List[str]
|
|
22
24
|
|
|
23
25
|
|
|
26
|
+
def _symbol_exists(dotted: str) -> bool:
|
|
27
|
+
"""Verify a dotted path like 'pkg.mod.Class' actually imports and has the attr.
|
|
28
|
+
Non-symbol evidence (with space/* or docs) treated as non-blocking here.
|
|
29
|
+
"""
|
|
30
|
+
if not dotted or " " in dotted or "*" in dotted or "::" in dotted:
|
|
31
|
+
return True
|
|
32
|
+
try:
|
|
33
|
+
if "." not in dotted:
|
|
34
|
+
return False
|
|
35
|
+
mod_name, name = dotted.rsplit(".", 1)
|
|
36
|
+
mod = importlib.import_module(mod_name)
|
|
37
|
+
return hasattr(mod, name)
|
|
38
|
+
except Exception:
|
|
39
|
+
return False
|
|
40
|
+
|
|
41
|
+
|
|
24
42
|
def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
25
43
|
if root is None:
|
|
26
44
|
root = Path(__file__).resolve().parents[2]
|
|
@@ -29,7 +47,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
|
29
47
|
ArchitectureGate(
|
|
30
48
|
id="agent-runtime",
|
|
31
49
|
title="AgentRuntime boundary",
|
|
32
|
-
status="complete",
|
|
50
|
+
status="complete" if _symbol_exists("lattice_brain.runtime.agent_runtime.AgentRuntime") else "incomplete",
|
|
33
51
|
evidence=[
|
|
34
52
|
"lattice_brain.runtime.agent_runtime.AgentRuntime",
|
|
35
53
|
"latticeai.api.agents.create_agents_router(agent_runtime=...)",
|
|
@@ -39,7 +57,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
|
39
57
|
ArchitectureGate(
|
|
40
58
|
id="tool-registry",
|
|
41
59
|
title="ToolRegistry separation",
|
|
42
|
-
status="complete",
|
|
60
|
+
status="complete" if all(_symbol_exists(s) for s in ["latticeai.core.tool_registry.ToolRegistry", "latticeai.services.tool_dispatch.ToolDispatchService"]) else "incomplete",
|
|
43
61
|
evidence=[
|
|
44
62
|
"latticeai.core.tool_registry.ToolRegistry",
|
|
45
63
|
"latticeai.services.tool_dispatch.ToolDispatchService",
|
|
@@ -49,7 +67,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
|
49
67
|
ArchitectureGate(
|
|
50
68
|
id="config-centralization",
|
|
51
69
|
title="Central app Config",
|
|
52
|
-
status="complete",
|
|
70
|
+
status="complete" if _symbol_exists("latticeai.core.config.Config") else "incomplete",
|
|
53
71
|
evidence=[
|
|
54
72
|
"latticeai.core.config.Config.from_env",
|
|
55
73
|
"latticeai.runtime.config_runtime.ConfigRuntime",
|
|
@@ -69,7 +87,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
|
69
87
|
ArchitectureGate(
|
|
70
88
|
id="kg-hardening",
|
|
71
89
|
title="Knowledge Graph stabilization",
|
|
72
|
-
status="complete",
|
|
90
|
+
status="complete" if _symbol_exists("lattice_brain.graph.store.KnowledgeGraphStore") else "incomplete",
|
|
73
91
|
evidence=[
|
|
74
92
|
"lattice_brain.graph.store.KnowledgeGraphStore",
|
|
75
93
|
"lattice_brain.portability.KGPortabilityService",
|
|
@@ -92,7 +110,7 @@ def architecture_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
|
92
110
|
runtime_module_count = len(list((root / "latticeai" / "runtime").glob("*.py")))
|
|
93
111
|
return {
|
|
94
112
|
"status": "complete" if all(gate.status == "complete" for gate in gates) else "incomplete",
|
|
95
|
-
"version_target": "7.
|
|
113
|
+
"version_target": "7.7.0",
|
|
96
114
|
"gates": [gate.__dict__ for gate in gates],
|
|
97
115
|
"metrics": {
|
|
98
116
|
"api_router_modules": api_router_count,
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""Machine-checkable *product* readiness gates for the 7.7 line.
|
|
2
|
+
|
|
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
|
|
6
|
+
gate is backed by evidence that is probed on disk, so a gate only reports
|
|
7
|
+
``complete`` when its evidence actually resolves. The same report can be printed
|
|
8
|
+
by ``scripts/product_readiness.py`` and re-run after every change, which is the
|
|
9
|
+
point: completeness is something we keep measuring, not a one-time claim.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any, Dict, List
|
|
17
|
+
|
|
18
|
+
from latticeai.services.architecture_readiness import architecture_readiness
|
|
19
|
+
|
|
20
|
+
PRODUCT_VERSION_TARGET = "7.7.0"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class ProductGate:
|
|
25
|
+
id: str
|
|
26
|
+
title: str
|
|
27
|
+
# Evidence is either a repo-relative path that must exist, or
|
|
28
|
+
# "path::needle" meaning the file must exist and contain ``needle``.
|
|
29
|
+
evidence: List[str]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
PRODUCT_GATES: List[ProductGate] = [
|
|
33
|
+
ProductGate(
|
|
34
|
+
id="first-run",
|
|
35
|
+
title="First five minutes lands without a manual",
|
|
36
|
+
evidence=[
|
|
37
|
+
"frontend/src/components/ProductFlow.tsx::WakeBrainScreen",
|
|
38
|
+
"frontend/src/features/brain/BrainConversation.tsx::ProductCommandCenter",
|
|
39
|
+
"frontend/src/features/brain/BrainHome.tsx",
|
|
40
|
+
"auto_setup.py",
|
|
41
|
+
"setup_wizard.py",
|
|
42
|
+
],
|
|
43
|
+
),
|
|
44
|
+
ProductGate(
|
|
45
|
+
id="answer-proof",
|
|
46
|
+
title="Answers carry memory proof and citations",
|
|
47
|
+
evidence=[
|
|
48
|
+
"latticeai/api/memory.py::brain-proof",
|
|
49
|
+
"scripts/brain_quality_eval.py",
|
|
50
|
+
],
|
|
51
|
+
),
|
|
52
|
+
ProductGate(
|
|
53
|
+
id="local-first-trust",
|
|
54
|
+
title="Local-first privacy is stated and bounded",
|
|
55
|
+
evidence=[
|
|
56
|
+
"PRIVACY.md",
|
|
57
|
+
"PUBLIC_MODE.md",
|
|
58
|
+
"SECURITY.md",
|
|
59
|
+
],
|
|
60
|
+
),
|
|
61
|
+
ProductGate(
|
|
62
|
+
id="packaging",
|
|
63
|
+
title="One command produces shippable artifacts",
|
|
64
|
+
evidence=[
|
|
65
|
+
"package.json::release:artifacts",
|
|
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",
|
|
71
|
+
"scripts/validate_release_artifacts.py",
|
|
72
|
+
"scripts/release_smoke.py",
|
|
73
|
+
"Dockerfile",
|
|
74
|
+
],
|
|
75
|
+
),
|
|
76
|
+
ProductGate(
|
|
77
|
+
id="architecture-closed",
|
|
78
|
+
title="Architecture readiness is complete",
|
|
79
|
+
evidence=["latticeai/services/architecture_readiness.py"],
|
|
80
|
+
),
|
|
81
|
+
ProductGate(
|
|
82
|
+
id="trust-docs",
|
|
83
|
+
title="Release story is documented and honest",
|
|
84
|
+
evidence=[
|
|
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]",
|
|
90
|
+
"FEATURE_STATUS.md",
|
|
91
|
+
"RELEASE_NOTES_v7.7.0.md",
|
|
92
|
+
],
|
|
93
|
+
),
|
|
94
|
+
ProductGate(
|
|
95
|
+
id="quality-gates",
|
|
96
|
+
title="Quality is guarded by repeatable gates",
|
|
97
|
+
evidence=[
|
|
98
|
+
"scripts/brain_quality_eval.py",
|
|
99
|
+
"scripts/product_readiness.py",
|
|
100
|
+
"tests/unit/test_v77_product_readiness.py",
|
|
101
|
+
"tests/visual/v3.spec.js::제품 상태판",
|
|
102
|
+
".github/workflows/ci.yml::scripts/product_readiness.py",
|
|
103
|
+
".github/workflows/release.yml::npm run lint",
|
|
104
|
+
],
|
|
105
|
+
),
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _evidence_resolves(root: Path, evidence: str) -> bool:
|
|
110
|
+
if "::" in evidence:
|
|
111
|
+
rel, needle = evidence.split("::", 1)
|
|
112
|
+
target = root / rel
|
|
113
|
+
if not target.is_file():
|
|
114
|
+
return False
|
|
115
|
+
try:
|
|
116
|
+
return needle in target.read_text(encoding="utf-8", errors="ignore")
|
|
117
|
+
except OSError:
|
|
118
|
+
return False
|
|
119
|
+
return (root / evidence).exists()
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def product_readiness(root: Path | None = None) -> Dict[str, Any]:
|
|
123
|
+
if root is None:
|
|
124
|
+
root = Path(__file__).resolve().parents[2]
|
|
125
|
+
|
|
126
|
+
arch = architecture_readiness(root)
|
|
127
|
+
|
|
128
|
+
gate_reports: List[Dict[str, Any]] = []
|
|
129
|
+
for gate in PRODUCT_GATES:
|
|
130
|
+
missing = [e for e in gate.evidence if not _evidence_resolves(root, e)]
|
|
131
|
+
# The architecture gate is satisfied by the composed report, not just
|
|
132
|
+
# the file existing — fold its status in so this score can never claim
|
|
133
|
+
# product completeness while the structure underneath is incomplete.
|
|
134
|
+
if gate.id == "architecture-closed" and arch.get("status") != "complete":
|
|
135
|
+
missing = missing or ["architecture_readiness().status != complete"]
|
|
136
|
+
gate_reports.append(
|
|
137
|
+
{
|
|
138
|
+
"id": gate.id,
|
|
139
|
+
"title": gate.title,
|
|
140
|
+
"status": "complete" if not missing else "incomplete",
|
|
141
|
+
"evidence": gate.evidence,
|
|
142
|
+
"missing": missing,
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
complete = sum(1 for g in gate_reports if g["status"] == "complete")
|
|
147
|
+
total = len(gate_reports)
|
|
148
|
+
return {
|
|
149
|
+
"status": "complete" if complete == total else "incomplete",
|
|
150
|
+
"version_target": PRODUCT_VERSION_TARGET,
|
|
151
|
+
"score": f"{complete}/{total}",
|
|
152
|
+
"gates": gate_reports,
|
|
153
|
+
"architecture": arch["status"],
|
|
154
|
+
"metrics": {
|
|
155
|
+
"product_gates": total,
|
|
156
|
+
"product_gates_complete": complete,
|
|
157
|
+
**arch.get("metrics", {}),
|
|
158
|
+
},
|
|
159
|
+
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Print the 7.7 product-readiness scorecard and fail CI when incomplete.
|
|
3
|
+
|
|
4
|
+
Run it as often as you like — it re-probes the repo every time, so it is the
|
|
5
|
+
single objective answer to "is this a finished product yet?". Exit code is 0
|
|
6
|
+
only when every product gate resolves its evidence on disk.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
15
|
+
if str(REPO_ROOT) not in sys.path:
|
|
16
|
+
sys.path.insert(0, str(REPO_ROOT))
|
|
17
|
+
|
|
18
|
+
from latticeai.services.product_readiness import product_readiness # noqa: E402
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def main() -> int:
|
|
22
|
+
report = product_readiness(REPO_ROOT)
|
|
23
|
+
print(f"Lattice AI product readiness — target {report['version_target']}")
|
|
24
|
+
print(f"Score: {report['score']} (architecture: {report['architecture']})")
|
|
25
|
+
print("-" * 60)
|
|
26
|
+
for gate in report["gates"]:
|
|
27
|
+
mark = "✓" if gate["status"] == "complete" else "✗"
|
|
28
|
+
print(f"{mark} {gate['id']:<22} {gate['title']}")
|
|
29
|
+
for miss in gate["missing"]:
|
|
30
|
+
print(f" missing: {miss}")
|
|
31
|
+
print("-" * 60)
|
|
32
|
+
print(f"STATUS: {report['status'].upper()}")
|
|
33
|
+
return 0 if report["status"] == "complete" else 1
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
raise SystemExit(main())
|
package/src-tauri/Cargo.lock
CHANGED
package/src-tauri/Cargo.toml
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.
|
|
2
|
+
"version": "7.7.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-
|
|
10
|
-
"_textarea-
|
|
11
|
-
"index.html": "/static/app/assets/index-
|
|
12
|
-
"assets/index-
|
|
13
|
-
"src/pages/Act.tsx": "/static/app/assets/Act-
|
|
14
|
-
"src/pages/Brain.tsx": "/static/app/assets/Brain-
|
|
15
|
-
"src/pages/Capture.tsx": "/static/app/assets/Capture-
|
|
16
|
-
"src/pages/Library.tsx": "/static/app/assets/Library-
|
|
17
|
-
"src/pages/System.tsx": "/static/app/assets/System-
|
|
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"
|
|
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-
|
|
27
|
-
"file": "assets/primitives-
|
|
26
|
+
"_primitives-CFhU5Rka.js": {
|
|
27
|
+
"file": "assets/primitives-CFhU5Rka.js",
|
|
28
28
|
"name": "primitives",
|
|
29
29
|
"imports": [
|
|
30
30
|
"index.html"
|
|
31
31
|
]
|
|
32
32
|
},
|
|
33
|
-
"_textarea-
|
|
34
|
-
"file": "assets/textarea-
|
|
33
|
+
"_textarea-uBpGDOJM.js": {
|
|
34
|
+
"file": "assets/textarea-uBpGDOJM.js",
|
|
35
35
|
"name": "textarea",
|
|
36
36
|
"imports": [
|
|
37
37
|
"index.html"
|
|
38
38
|
]
|
|
39
39
|
},
|
|
40
40
|
"index.html": {
|
|
41
|
-
"file": "assets/index-
|
|
41
|
+
"file": "assets/index-B4_drWel.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-
|
|
54
|
+
"assets/index-DjpDeE0c.css"
|
|
55
55
|
]
|
|
56
56
|
},
|
|
57
57
|
"src/pages/Act.tsx": {
|
|
58
|
-
"file": "assets/Act-
|
|
58
|
+
"file": "assets/Act-CX5hL0Z3.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-
|
|
65
|
-
"_textarea-
|
|
64
|
+
"_primitives-CFhU5Rka.js",
|
|
65
|
+
"_textarea-uBpGDOJM.js"
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"src/pages/Brain.tsx": {
|
|
69
|
-
"file": "assets/Brain-
|
|
69
|
+
"file": "assets/Brain-m19en5wz.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-
|
|
76
|
-
"_textarea-
|
|
75
|
+
"_primitives-CFhU5Rka.js",
|
|
76
|
+
"_textarea-uBpGDOJM.js"
|
|
77
77
|
]
|
|
78
78
|
},
|
|
79
79
|
"src/pages/Capture.tsx": {
|
|
80
|
-
"file": "assets/Capture-
|
|
80
|
+
"file": "assets/Capture-CdFSrZnA.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-
|
|
86
|
+
"_primitives-CFhU5Rka.js"
|
|
87
87
|
]
|
|
88
88
|
},
|
|
89
89
|
"src/pages/Library.tsx": {
|
|
90
|
-
"file": "assets/Library-
|
|
90
|
+
"file": "assets/Library-CZFVGSmG.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-
|
|
96
|
+
"_primitives-CFhU5Rka.js"
|
|
97
97
|
]
|
|
98
98
|
},
|
|
99
99
|
"src/pages/System.tsx": {
|
|
100
|
-
"file": "assets/System-
|
|
100
|
+
"file": "assets/System-CMoOoUrZ.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-
|
|
106
|
+
"_primitives-CFhU5Rka.js"
|
|
107
107
|
]
|
|
108
108
|
}
|
|
109
109
|
}
|