ltcai 4.0.1 → 4.2.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 +33 -24
- package/desktop/electron/main.cjs +44 -0
- package/docs/CHANGELOG.md +84 -0
- package/docs/V4_1_FRONTEND_ARCHITECTURE_REVIEW.md +65 -0
- package/docs/V4_1_FRONTEND_MIGRATION_REPORT.md +70 -0
- package/docs/V4_1_VALIDATION_REPORT.md +47 -0
- package/docs/V4_2_BRAIN_CORE_ARCHITECTURE.md +97 -0
- package/docs/V4_2_STORAGE_MIGRATION_REPORT.md +91 -0
- package/docs/V4_2_VALIDATION_REPORT.md +89 -0
- package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +31 -26
- package/frontend/index.html +24 -0
- package/frontend/openapi.json +14436 -0
- package/frontend/src/App.tsx +184 -0
- package/frontend/src/api/client.ts +320 -0
- package/frontend/src/api/openapi.ts +16921 -0
- package/frontend/src/components/primitives.tsx +204 -0
- package/frontend/src/components/ui/badge.tsx +27 -0
- package/frontend/src/components/ui/button.tsx +37 -0
- package/frontend/src/components/ui/card.tsx +22 -0
- package/frontend/src/components/ui/input.tsx +16 -0
- package/frontend/src/components/ui/textarea.tsx +16 -0
- package/frontend/src/lib/utils.ts +33 -0
- package/frontend/src/main.tsx +23 -0
- package/frontend/src/pages/Act.tsx +245 -0
- package/frontend/src/pages/Ask.tsx +200 -0
- package/frontend/src/pages/Brain.tsx +267 -0
- package/frontend/src/pages/Capture.tsx +158 -0
- package/frontend/src/pages/Library.tsx +187 -0
- package/frontend/src/pages/System.tsx +378 -0
- package/frontend/src/routes.ts +85 -0
- package/frontend/src/store/appStore.ts +54 -0
- package/frontend/src/styles.css +107 -0
- package/kg_schema.py +1 -1
- package/knowledge_graph.py +4 -4
- package/lattice_brain/__init__.py +70 -0
- package/lattice_brain/_kg_common.py +1 -0
- package/lattice_brain/archive.py +133 -0
- package/lattice_brain/context.py +3 -0
- package/lattice_brain/conversations.py +3 -0
- package/lattice_brain/core.py +82 -0
- package/lattice_brain/discovery.py +1 -0
- package/lattice_brain/documents.py +1 -0
- package/lattice_brain/embeddings.py +82 -0
- package/lattice_brain/identity.py +13 -0
- package/lattice_brain/ingest.py +1 -0
- package/lattice_brain/memory.py +3 -0
- package/lattice_brain/network.py +1 -0
- package/lattice_brain/projection.py +1 -0
- package/lattice_brain/provenance.py +1 -0
- package/lattice_brain/retrieval.py +1 -0
- package/lattice_brain/schema.py +1 -0
- package/lattice_brain/storage/__init__.py +22 -0
- package/lattice_brain/storage/base.py +72 -0
- package/lattice_brain/storage/docker.py +105 -0
- package/lattice_brain/storage/factory.py +31 -0
- package/lattice_brain/storage/migration.py +190 -0
- package/lattice_brain/storage/postgres.py +123 -0
- package/lattice_brain/storage/sqlite.py +128 -0
- package/lattice_brain/store.py +3 -0
- package/lattice_brain/write_master.py +1 -0
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/portability.py +69 -0
- package/latticeai/api/setup.py +5 -4
- package/latticeai/api/static_routes.py +4 -4
- package/latticeai/app_factory.py +17 -10
- package/latticeai/brain/__init__.py +6 -6
- package/latticeai/brain/_kg_common.py +1 -1
- package/latticeai/brain/network.py +1 -1
- package/latticeai/brain/retrieval.py +15 -0
- package/latticeai/brain/store.py +22 -6
- package/latticeai/core/config.py +8 -0
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/multi_agent.py +1 -1
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/services/kg_portability.py +82 -1
- package/package.json +55 -15
- package/scripts/build_frontend_assets.mjs +38 -0
- package/scripts/bump_version.py +4 -1
- package/scripts/export_openapi.py +31 -0
- package/scripts/lint_frontend.mjs +91 -0
- package/scripts/migrate_brain_storage.py +53 -0
- package/scripts/run_python.mjs +47 -0
- package/scripts/wheel_smoke.py +3 -0
- package/src-tauri/Cargo.lock +4833 -0
- package/src-tauri/Cargo.toml +19 -0
- package/src-tauri/build.rs +3 -0
- package/src-tauri/capabilities/default.json +7 -0
- package/src-tauri/src/main.rs +78 -0
- package/src-tauri/tauri.conf.json +39 -0
- package/static/app/asset-manifest.json +32 -0
- package/static/app/assets/core-CwxXejkd.js +2 -0
- package/static/app/assets/core-CwxXejkd.js.map +1 -0
- package/static/app/assets/index-CDjiH_se.css +2 -0
- package/static/app/assets/index-C_HAkbAg.js +333 -0
- package/static/app/assets/index-C_HAkbAg.js.map +1 -0
- package/static/app/index.html +25 -0
- package/static/manifest.json +2 -2
- package/static/sw.js +4 -4
- package/scripts/build_v3_assets.mjs +0 -170
- package/scripts/lint_v3.mjs +0 -120
- package/static/v3/asset-manifest.json +0 -63
- package/static/v3/css/lattice.base.49deefb5.css +0 -128
- package/static/v3/css/lattice.base.css +0 -128
- package/static/v3/css/lattice.components.cde18231.css +0 -472
- package/static/v3/css/lattice.components.css +0 -472
- package/static/v3/css/lattice.shell.29d36d85.css +0 -452
- package/static/v3/css/lattice.shell.css +0 -452
- package/static/v3/css/lattice.tokens.304cbc40.css +0 -135
- package/static/v3/css/lattice.tokens.css +0 -135
- package/static/v3/css/lattice.views.0a18b6c5.css +0 -360
- package/static/v3/css/lattice.views.css +0 -360
- package/static/v3/index.html +0 -68
- package/static/v3/js/app.c5c80c46.js +0 -26
- package/static/v3/js/app.js +0 -26
- package/static/v3/js/core/api.ba0fbf14.js +0 -625
- package/static/v3/js/core/api.js +0 -625
- package/static/v3/js/core/components.f25b3b93.js +0 -230
- package/static/v3/js/core/components.js +0 -230
- package/static/v3/js/core/dom.a2773eb0.js +0 -148
- package/static/v3/js/core/dom.js +0 -148
- package/static/v3/js/core/i18n.880e1fec.js +0 -575
- package/static/v3/js/core/i18n.js +0 -575
- package/static/v3/js/core/router.584570f2.js +0 -37
- package/static/v3/js/core/router.js +0 -37
- package/static/v3/js/core/routes.37522821.js +0 -101
- package/static/v3/js/core/routes.js +0 -101
- package/static/v3/js/core/shell.e3f6bbfa.js +0 -420
- package/static/v3/js/core/shell.js +0 -420
- package/static/v3/js/core/store.7b2aa044.js +0 -123
- package/static/v3/js/core/store.js +0 -123
- package/static/v3/js/views/account.eff40715.js +0 -143
- package/static/v3/js/views/account.js +0 -143
- package/static/v3/js/views/activity.0d271ef9.js +0 -67
- package/static/v3/js/views/activity.js +0 -67
- package/static/v3/js/views/admin-audit.660a1fb1.js +0 -185
- package/static/v3/js/views/admin-audit.js +0 -185
- package/static/v3/js/views/admin-permissions.a7ae5f09.js +0 -177
- package/static/v3/js/views/admin-permissions.js +0 -177
- package/static/v3/js/views/admin-policies.3658fd86.js +0 -102
- package/static/v3/js/views/admin-policies.js +0 -102
- package/static/v3/js/views/admin-private-vpc.7d342d36.js +0 -135
- package/static/v3/js/views/admin-private-vpc.js +0 -135
- package/static/v3/js/views/admin-security.07c66b72.js +0 -180
- package/static/v3/js/views/admin-security.js +0 -180
- package/static/v3/js/views/admin-users.f7ac7b43.js +0 -166
- package/static/v3/js/views/admin-users.js +0 -166
- package/static/v3/js/views/agents.17c5288d.js +0 -564
- package/static/v3/js/views/agents.js +0 -564
- package/static/v3/js/views/chat.e250e2cc.js +0 -624
- package/static/v3/js/views/chat.js +0 -624
- package/static/v3/js/views/files.adad14c1.js +0 -365
- package/static/v3/js/views/files.js +0 -365
- package/static/v3/js/views/graph-canvas.17c15d65.js +0 -509
- package/static/v3/js/views/graph-canvas.js +0 -509
- package/static/v3/js/views/home.24f8b8ae.js +0 -200
- package/static/v3/js/views/home.js +0 -200
- package/static/v3/js/views/hooks.37895880.js +0 -220
- package/static/v3/js/views/hooks.js +0 -220
- package/static/v3/js/views/hybrid-search.2fb63ed9.js +0 -194
- package/static/v3/js/views/hybrid-search.js +0 -194
- package/static/v3/js/views/knowledge-graph.4d09c537.js +0 -529
- package/static/v3/js/views/knowledge-graph.js +0 -529
- package/static/v3/js/views/marketplace.ab0583d4.js +0 -141
- package/static/v3/js/views/marketplace.js +0 -141
- package/static/v3/js/views/mcp.99b5c6a7.js +0 -114
- package/static/v3/js/views/mcp.js +0 -114
- package/static/v3/js/views/memory.4ebdf474.js +0 -147
- package/static/v3/js/views/memory.js +0 -147
- package/static/v3/js/views/models.a1ffa147.js +0 -256
- package/static/v3/js/views/models.js +0 -256
- package/static/v3/js/views/my-computer.d9d9ae1c.js +0 -463
- package/static/v3/js/views/my-computer.js +0 -463
- package/static/v3/js/views/network.52a4f181.js +0 -97
- package/static/v3/js/views/network.js +0 -97
- package/static/v3/js/views/pipeline.c522f1ce.js +0 -157
- package/static/v3/js/views/pipeline.js +0 -157
- package/static/v3/js/views/planning.4876fd77.js +0 -174
- package/static/v3/js/views/planning.js +0 -174
- package/static/v3/js/views/runs.b63b2afa.js +0 -144
- package/static/v3/js/views/runs.js +0 -144
- package/static/v3/js/views/settings.b7140634.js +0 -317
- package/static/v3/js/views/settings.js +0 -317
- package/static/v3/js/views/skills.c6c2f965.js +0 -109
- package/static/v3/js/views/skills.js +0 -109
- package/static/v3/js/views/snapshots.6f5db095.js +0 -135
- package/static/v3/js/views/snapshots.js +0 -135
- package/static/v3/js/views/tools.e4f11276.js +0 -108
- package/static/v3/js/views/tools.js +0 -108
- package/static/v3/js/views/workflows.7752225a.js +0 -213
- package/static/v3/js/views/workflows.js +0 -213
- package/static/v3/js/views/workspace-admin.c466029b.js +0 -156
- package/static/v3/js/views/workspace-admin.js +0 -156
package/static/v3/js/core/dom.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/* ============================================================================
|
|
2
|
-
* Lattice AI v3 — DOM helpers
|
|
3
|
-
* A tiny, dependency-free hyperscript. Builds real DOM nodes (no innerHTML for
|
|
4
|
-
* dynamic content → no injection surface). Ergonomic enough to author views.
|
|
5
|
-
* ========================================================================== */
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* h("div.card#id", { props }, ...children)
|
|
9
|
-
* - tag selector supports .class (many) and #id
|
|
10
|
-
* - props: class | className, id, on:{event:fn}, dataset:{k:v},
|
|
11
|
-
* style:{k:v} or string, html (trusted innerHTML), attrs (any other)
|
|
12
|
-
* - children: Node | string | number | falsy (skipped) | array (flattened)
|
|
13
|
-
*/
|
|
14
|
-
export function h(selector, props, ...children) {
|
|
15
|
-
const { tag, id, classes } = parseSelector(selector);
|
|
16
|
-
const el = document.createElement(tag);
|
|
17
|
-
if (id) el.id = id;
|
|
18
|
-
if (classes.length) el.classList.add(...classes);
|
|
19
|
-
|
|
20
|
-
if (props && (props.nodeType || typeof props === "string" || Array.isArray(props))) {
|
|
21
|
-
children.unshift(props);
|
|
22
|
-
props = null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (props) {
|
|
26
|
-
for (const [key, val] of Object.entries(props)) {
|
|
27
|
-
if (val == null || val === false) continue;
|
|
28
|
-
if (key === "class" || key === "className") {
|
|
29
|
-
for (const c of String(val).split(/\s+/).filter(Boolean)) el.classList.add(c);
|
|
30
|
-
} else if (key === "on" && typeof val === "object") {
|
|
31
|
-
for (const [ev, fn] of Object.entries(val)) el.addEventListener(ev, fn);
|
|
32
|
-
} else if (key === "dataset" && typeof val === "object") {
|
|
33
|
-
for (const [k, v] of Object.entries(val)) { if (v != null) el.dataset[k] = v; }
|
|
34
|
-
} else if (key === "style" && typeof val === "object") {
|
|
35
|
-
for (const [k, v] of Object.entries(val)) el.style.setProperty(k, v);
|
|
36
|
-
} else if (key === "style") {
|
|
37
|
-
el.setAttribute("style", val);
|
|
38
|
-
} else if (key === "html") {
|
|
39
|
-
el.innerHTML = val;
|
|
40
|
-
} else if (key === "ref" && typeof val === "function") {
|
|
41
|
-
val(el);
|
|
42
|
-
} else if (key in el && key !== "list" && typeof val !== "object") {
|
|
43
|
-
try { el[key] = val; } catch { el.setAttribute(key, val); }
|
|
44
|
-
} else {
|
|
45
|
-
el.setAttribute(key, val === true ? "" : val);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
appendChildren(el, children);
|
|
51
|
-
return el;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function parseSelector(sel) {
|
|
55
|
-
if (typeof sel !== "string") return { tag: "div", id: "", classes: [] };
|
|
56
|
-
const idMatch = sel.match(/#([\w-]+)/);
|
|
57
|
-
const id = idMatch ? idMatch[1] : "";
|
|
58
|
-
const classes = (sel.match(/\.([\w-]+)/g) || []).map((c) => c.slice(1));
|
|
59
|
-
const tag = (sel.match(/^([\w-]+)/) || [, "div"])[1];
|
|
60
|
-
return { tag, id, classes };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function appendChildren(el, children) {
|
|
64
|
-
for (const child of children.flat(Infinity)) {
|
|
65
|
-
if (child == null || child === false || child === true) continue;
|
|
66
|
-
el.append(child.nodeType ? child : document.createTextNode(String(child)));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** Fragment of many children. */
|
|
71
|
-
export function frag(...children) {
|
|
72
|
-
const f = document.createDocumentFragment();
|
|
73
|
-
appendChildren(f, children);
|
|
74
|
-
return f;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** Replace the contents of a node. */
|
|
78
|
-
export function render(host, ...children) {
|
|
79
|
-
host.replaceChildren();
|
|
80
|
-
appendChildren(host, children);
|
|
81
|
-
return host;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function clear(host) { host.replaceChildren(); return host; }
|
|
85
|
-
|
|
86
|
-
export function escapeHtml(s) {
|
|
87
|
-
return String(s == null ? "" : s).replace(/[&<>"']/g, (c) =>
|
|
88
|
-
({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export const $ = (sel, root = document) => root.querySelector(sel);
|
|
92
|
-
export const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel));
|
|
93
|
-
|
|
94
|
-
/** Tabler icon element: icon("home") → <i class="ti ti-home"> */
|
|
95
|
-
export function icon(name, extra = "") {
|
|
96
|
-
const i = document.createElement("i");
|
|
97
|
-
i.className = `ti ti-${name}${extra ? " " + extra : ""}`;
|
|
98
|
-
i.setAttribute("aria-hidden", "true");
|
|
99
|
-
i.setAttribute("data-fallback", iconFallback(name));
|
|
100
|
-
return i;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function iconFallback(name) {
|
|
104
|
-
const map = {
|
|
105
|
-
home: "H", search: "?", menu: "=", x: "x", refresh: "R",
|
|
106
|
-
"arrow-up": "^", "arrow-up-right": ">", "arrows-join": "H",
|
|
107
|
-
"chart-dots-3": "G", "grid-dots": "V", message: "C", "message-2": "C",
|
|
108
|
-
"message-plus": "+", "message-off": "C", user: "U", users: "U",
|
|
109
|
-
settings: "S", files: "F", cpu: "M", "cpu-off": "M", "player-play": ">",
|
|
110
|
-
"player-stop": "s", "layout-sidebar": "<", "layout-sidebar-right": ">",
|
|
111
|
-
"external-link": "o", trash: "x", sparkles: "*", "alert-triangle": "!",
|
|
112
|
-
"alert-circle": "!", "info-circle": "i", "circle-check": "v",
|
|
113
|
-
"circle-filled": "*", "stack-2": "S", "ruler-2": "R", binary: "B",
|
|
114
|
-
category: "T", abc: "K", "search-off": "?"
|
|
115
|
-
};
|
|
116
|
-
if (map[name]) return map[name];
|
|
117
|
-
return String(name || "?").split("-").map((part) => part[0] || "").join("").slice(0, 2).toUpperCase() || "?";
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/** Compact relative-time formatter. */
|
|
121
|
-
export function timeAgo(value) {
|
|
122
|
-
if (!value) return "";
|
|
123
|
-
const then = new Date(value).getTime();
|
|
124
|
-
if (Number.isNaN(then)) return String(value);
|
|
125
|
-
const diff = Math.max(0, Date.now() - then);
|
|
126
|
-
const mins = Math.floor(diff / 60000);
|
|
127
|
-
if (mins < 1) return "just now";
|
|
128
|
-
if (mins < 60) return `${mins}m ago`;
|
|
129
|
-
const hrs = Math.floor(mins / 60);
|
|
130
|
-
if (hrs < 24) return `${hrs}h ago`;
|
|
131
|
-
const days = Math.floor(hrs / 24);
|
|
132
|
-
if (days < 30) return `${days}d ago`;
|
|
133
|
-
return new Date(then).toLocaleDateString();
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/** Format a number with thousands separators / compact suffix. */
|
|
137
|
-
export function fmtNum(n) {
|
|
138
|
-
if (n == null || Number.isNaN(Number(n))) return "—";
|
|
139
|
-
const v = Number(n);
|
|
140
|
-
if (Math.abs(v) >= 1_000_000) return (v / 1_000_000).toFixed(1).replace(/\.0$/, "") + "M";
|
|
141
|
-
if (Math.abs(v) >= 1_000) return (v / 1_000).toFixed(1).replace(/\.0$/, "") + "k";
|
|
142
|
-
return v.toLocaleString();
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export function debounce(fn, ms = 220) {
|
|
146
|
-
let t;
|
|
147
|
-
return (...args) => { clearTimeout(t); t = setTimeout(() => fn(...args), ms); };
|
|
148
|
-
}
|