ltcai 12.2.0 → 12.2.1
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 +85 -84
- package/docs/CHANGELOG.md +30 -4
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +11 -11
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +1 -1
- package/docs/ROADMAP.md +8 -8
- package/docs/TRUST_MODEL.md +2 -2
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/lattice_brain/__init__.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/core/vector_index/hnsw.py +49 -10
- package/latticeai/core/vector_index/sidecar.py +120 -31
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/product_readiness.py +2 -2
- package/package.json +1 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/release_screen_claims.json +11 -0
- package/src-tauri/Cargo.lock +10 -10
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +44 -44
- package/static/app/assets/{Act-BjGgeuQd.js → Act-DC676bqE.js} +2 -2
- package/static/app/assets/{AdminConsole-C6hcJGMr.js → AdminConsole-aCxQgD2L.js} +1 -1
- package/static/app/assets/{Brain-CNQnIaA8.js → Brain-Dbd0xvsc.js} +2 -2
- package/static/app/assets/{BrainHome-CGJ6O69l.js → BrainHome-N00B-MAJ.js} +1 -1
- package/static/app/assets/{BrainSignals-DONPljxz.js → BrainSignals-CNA0d6xS.js} +1 -1
- package/static/app/assets/{Capture-BMCC5544.js → Capture-BB19fo7P.js} +1 -1
- package/static/app/assets/{Chronicle-DF6sOonx.js → Chronicle-D8p3dqxZ.js} +1 -1
- package/static/app/assets/{CommandPalette-DiWyutdM.js → CommandPalette-uVFYAa-6.js} +1 -1
- package/static/app/assets/{DigitalBrainExplorer-BL3V6Dqz.js → DigitalBrainExplorer-mH6ZSuvK.js} +1 -1
- package/static/app/assets/{Library-B-ue9hXL.js → Library-0q8Sdke7.js} +1 -1
- package/static/app/assets/{LivingBrain-b1RiM5Rh.js → LivingBrain-wess-qJZ.js} +1 -1
- package/static/app/assets/ProductFlow-DeBGF6qz.js +1 -0
- package/static/app/assets/{ReviewCard-D1fGTEn7.js → ReviewCard-DyTrDpy0.js} +1 -1
- package/static/app/assets/{RunsListPanel-DAirtLkS.js → RunsListPanel-CHJv2Qyw.js} +1 -1
- package/static/app/assets/{System-BEI1eoC4.js → System-CyKGHQrW.js} +1 -1
- package/static/app/assets/{WorkflowGraph-qrI6GU4R.js → WorkflowGraph-B5nKCCGa.js} +1 -1
- package/static/app/assets/{WorkflowsPanel-CIMNTw-O.js → WorkflowsPanel-C7RZNRGo.js} +2 -2
- package/static/app/assets/{actHelpers-BMukIRnQ.js → actHelpers-6MYDH2kW.js} +1 -1
- package/static/app/assets/arrow-left-DOnpwsVV.js +1 -0
- package/static/app/assets/{bot-Dkd-DbiP.js → bot-Dm3fmXAE.js} +1 -1
- package/static/app/assets/{brain-BsexlNOA.js → brain-C2XwdQL1.js} +1 -1
- package/static/app/assets/{button-BA0N_zId.js → button-xXPeemQr.js} +1 -1
- package/static/app/assets/circle-check-D44VI2ZE.js +1 -0
- package/static/app/assets/{circle-pause-918Kuvk0.js → circle-pause-B_lmNicW.js} +1 -1
- package/static/app/assets/{circle-play-CS0IbVDV.js → circle-play-DSYCP0RD.js} +1 -1
- package/static/app/assets/{cpu-BpvoWsjk.js → cpu-D7x-dtxi.js} +1 -1
- package/static/app/assets/{download-BvkMLLLN.js → download-BHuJr-5V.js} +1 -1
- package/static/app/assets/{folder-open-YmGugIBf.js → folder-open-BiO31EwS.js} +1 -1
- package/static/app/assets/{hard-drive-BOzmS-cq.js → hard-drive-CFEaZ-wP.js} +1 -1
- package/static/app/assets/{index-CfeqZ9Ri.js → index-DCT79wzR.js} +3 -3
- package/static/app/assets/{input-CFfCfMjO.js → input-D3YrgxvO.js} +1 -1
- package/static/app/assets/{link-2-CcYzeM7M.js → link-2-3O-By3qc.js} +1 -1
- package/static/app/assets/{permissionCopy-B23r24oX.js → permissionCopy-CNK2tfkz.js} +1 -1
- package/static/app/assets/{primitives-BDryQl6H.js → primitives-B6DzQC3H.js} +1 -1
- package/static/app/assets/search-BwMK0hjs.js +1 -0
- package/static/app/assets/{share-2-B-gPv2ec.js → share-2-BljIPAku.js} +1 -1
- package/static/app/assets/{shield-alert-CfyRO1p0.js → shield-alert-WDP2DSTM.js} +1 -1
- package/static/app/assets/{sourceMeta-C4LDEy1S.js → sourceMeta-By2WIjlN.js} +1 -1
- package/static/app/assets/{textarea-BdVMYEb1.js → textarea-5v8vtDlK.js} +1 -1
- package/static/app/assets/{useFocusTrap-CV73DLHn.js → useFocusTrap-ssiDeh6P.js} +1 -1
- package/static/app/assets/{useMutation-B8QKq2NW.js → useMutation-Bi0PXQMC.js} +1 -1
- package/static/app/assets/workspace-BsxrRYQI.js +1 -0
- package/static/app/index.html +1 -1
- package/static/sw.js +1 -1
- package/static/app/assets/ProductFlow-wZIKJW7G.js +0 -1
- package/static/app/assets/arrow-left-iVa1goff.js +0 -1
- package/static/app/assets/circle-check-BxaDWjPR.js +0 -1
- package/static/app/assets/search-DHsPwmPw.js +0 -1
- package/static/app/assets/workspace-BmfVs66W.js +0 -1
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
The live graph is cached per ``(db_path, model_id, dim)``. A missing sidecar
|
|
4
4
|
is ``index: "none"``. When the store has vectors the cache (or a rebuild from
|
|
5
|
-
``vector_embeddings``) can serve, the reply is ``index: "hnsw"``.
|
|
6
|
-
sidecar size vs ``COUNT(*)`` for that identity
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
``vector_embeddings``) can serve, the reply is ``index: "hnsw"``. Freshness is
|
|
6
|
+
sidecar size vs ``COUNT(*)`` for that identity. A warm COUNT match never
|
|
7
|
+
opens embedding blobs. Growth loads **missing ids only** and appends; a
|
|
8
|
+
shrink still rebuilds from the remaining rows.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
@@ -81,6 +81,83 @@ def load_store_items(
|
|
|
81
81
|
return items
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
def load_store_ids(conn: sqlite3.Connection, model_id: str, dim: int) -> List[str]:
|
|
85
|
+
"""Item ids only — the COUNT+delta path must not pull embedding blobs."""
|
|
86
|
+
rows = conn.execute(
|
|
87
|
+
"SELECT item_id FROM vector_embeddings "
|
|
88
|
+
"WHERE embedding_model=? AND embedding_dim=? ORDER BY indexed_at ASC, item_id ASC",
|
|
89
|
+
(model_id, int(dim)),
|
|
90
|
+
)
|
|
91
|
+
return [str(item_id) for (item_id,) in rows]
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def load_store_items_for(
|
|
95
|
+
conn: sqlite3.Connection,
|
|
96
|
+
model_id: str,
|
|
97
|
+
dim: int,
|
|
98
|
+
item_ids: Sequence[str],
|
|
99
|
+
) -> List[Tuple[str, List[float], Dict[str, Any]]]:
|
|
100
|
+
"""Blobs for ``item_ids`` only, preserving the caller's order."""
|
|
101
|
+
if not item_ids:
|
|
102
|
+
return []
|
|
103
|
+
by_id: Dict[str, List[float]] = {}
|
|
104
|
+
wanted = [str(item_id) for item_id in item_ids]
|
|
105
|
+
# SQLite caps bound parameters; 400 leaves room for the identity pair.
|
|
106
|
+
for start in range(0, len(wanted), 400):
|
|
107
|
+
chunk = wanted[start : start + 400]
|
|
108
|
+
qmarks = ",".join("?" * len(chunk))
|
|
109
|
+
query = "SELECT item_id, embedding FROM vector_embeddings WHERE embedding_model=? AND embedding_dim=? AND item_id IN (%s)" % qmarks # noqa: S608
|
|
110
|
+
for item_id, blob in conn.execute(query, (model_id, int(dim), *chunk)):
|
|
111
|
+
vector = decode_f32le(bytes(blob or b""), int(dim))
|
|
112
|
+
if len(vector) != int(dim):
|
|
113
|
+
continue
|
|
114
|
+
by_id[str(item_id)] = vector
|
|
115
|
+
return [
|
|
116
|
+
(item_id, by_id[item_id], {})
|
|
117
|
+
for item_id in wanted
|
|
118
|
+
if item_id in by_id
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _open_and_count(path: Path, model_id: str, dim: int) -> int:
|
|
123
|
+
conn = _open_readonly(path)
|
|
124
|
+
if conn is None:
|
|
125
|
+
return 0
|
|
126
|
+
try:
|
|
127
|
+
return store_vector_count(conn, model_id, dim)
|
|
128
|
+
finally:
|
|
129
|
+
conn.close()
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _load_all_items(
|
|
133
|
+
path: Path, model_id: str, dim: int
|
|
134
|
+
) -> List[Tuple[str, List[float], Dict[str, Any]]]:
|
|
135
|
+
conn = _open_readonly(path)
|
|
136
|
+
if conn is None:
|
|
137
|
+
return []
|
|
138
|
+
try:
|
|
139
|
+
return load_store_items(conn, model_id, dim)
|
|
140
|
+
finally:
|
|
141
|
+
conn.close()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _load_missing_items(
|
|
145
|
+
path: Path,
|
|
146
|
+
model_id: str,
|
|
147
|
+
dim: int,
|
|
148
|
+
have: Sequence[str],
|
|
149
|
+
) -> List[Tuple[str, List[float], Dict[str, Any]]]:
|
|
150
|
+
conn = _open_readonly(path)
|
|
151
|
+
if conn is None:
|
|
152
|
+
return []
|
|
153
|
+
try:
|
|
154
|
+
have_set = set(have)
|
|
155
|
+
missing = [item_id for item_id in load_store_ids(conn, model_id, dim) if item_id not in have_set]
|
|
156
|
+
return load_store_items_for(conn, model_id, dim, missing)
|
|
157
|
+
finally:
|
|
158
|
+
conn.close()
|
|
159
|
+
|
|
160
|
+
|
|
84
161
|
def sidecar_meta_size(db_path: Path) -> Optional[int]:
|
|
85
162
|
"""Label count from the sidecar meta file, or ``None`` when it is absent."""
|
|
86
163
|
_, meta_path = sidecar_paths(db_path)
|
|
@@ -185,17 +262,8 @@ def query_sidecar(
|
|
|
185
262
|
if not model_id:
|
|
186
263
|
return _none_reply(detail="embedding_model is required")
|
|
187
264
|
|
|
188
|
-
|
|
189
|
-
store_size =
|
|
190
|
-
items: List[Tuple[str, List[float], Dict[str, Any]]] = []
|
|
191
|
-
if conn is not None:
|
|
192
|
-
try:
|
|
193
|
-
store_size = store_vector_count(conn, model_id, dim)
|
|
194
|
-
if store_size > 0:
|
|
195
|
-
items = load_store_items(conn, model_id, dim)
|
|
196
|
-
store_size = len(items)
|
|
197
|
-
finally:
|
|
198
|
-
conn.close()
|
|
265
|
+
# COUNT first. Warm queries that already match never open embedding blobs.
|
|
266
|
+
store_size = _open_and_count(path, model_id, dim)
|
|
199
267
|
|
|
200
268
|
key = (str(path), model_id, dim)
|
|
201
269
|
with _LOCK:
|
|
@@ -203,8 +271,20 @@ def query_sidecar(
|
|
|
203
271
|
refreshed: Optional[str] = None
|
|
204
272
|
if index is None:
|
|
205
273
|
index = HnswIndex(dim=dim, model_id=model_id)
|
|
206
|
-
loaded = index.load(
|
|
274
|
+
loaded = index.load(
|
|
275
|
+
path, fingerprint=sidecar_fingerprint(model_id, dim, store_size)
|
|
276
|
+
)
|
|
277
|
+
if not loaded and store_size > 0:
|
|
278
|
+
# Sidecar exists for this identity but the COUNT moved —
|
|
279
|
+
# load the graph and append the missing ids below.
|
|
280
|
+
loaded = index.load(
|
|
281
|
+
path,
|
|
282
|
+
fingerprint=sidecar_fingerprint(model_id, dim, store_size),
|
|
283
|
+
strict=False,
|
|
284
|
+
)
|
|
207
285
|
if not loaded:
|
|
286
|
+
items = _load_all_items(path, model_id, dim)
|
|
287
|
+
store_size = len(items)
|
|
208
288
|
if not items:
|
|
209
289
|
return _none_reply(
|
|
210
290
|
store_size=store_size,
|
|
@@ -216,25 +296,31 @@ def query_sidecar(
|
|
|
216
296
|
|
|
217
297
|
cached_size = int(index.stats().get("size") or 0)
|
|
218
298
|
stale = cached_size != store_size
|
|
219
|
-
if stale:
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
299
|
+
if stale and store_size == 0:
|
|
300
|
+
_CACHE.pop(key, None)
|
|
301
|
+
return _none_reply(
|
|
302
|
+
store_size=0,
|
|
303
|
+
detail="vector store is empty for this embedding identity",
|
|
304
|
+
)
|
|
305
|
+
if stale and store_size > cached_size:
|
|
306
|
+
delta = _load_missing_items(path, model_id, dim, index.labels)
|
|
307
|
+
if delta:
|
|
308
|
+
refreshed = _refresh_index(index, delta, model_id, dim)
|
|
309
|
+
cached_size = int(index.stats().get("size") or 0)
|
|
310
|
+
index.save(
|
|
311
|
+
path, fingerprint=sidecar_fingerprint(model_id, dim, cached_size)
|
|
312
|
+
)
|
|
313
|
+
stale = cached_size != store_size
|
|
314
|
+
elif stale:
|
|
315
|
+
items = _load_all_items(path, model_id, dim)
|
|
316
|
+
store_size = len(items)
|
|
227
317
|
if items:
|
|
228
318
|
refreshed = _refresh_index(index, items, model_id, dim)
|
|
229
|
-
index.save(path, fingerprint=sidecar_fingerprint(model_id, dim, len(items)))
|
|
230
319
|
cached_size = int(index.stats().get("size") or 0)
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
_CACHE.pop(key, None)
|
|
234
|
-
return _none_reply(
|
|
235
|
-
store_size=0,
|
|
236
|
-
detail="vector store is empty for this embedding identity",
|
|
320
|
+
index.save(
|
|
321
|
+
path, fingerprint=sidecar_fingerprint(model_id, dim, cached_size)
|
|
237
322
|
)
|
|
323
|
+
stale = cached_size != store_size
|
|
238
324
|
|
|
239
325
|
if cached_size <= 0:
|
|
240
326
|
return _none_reply(
|
|
@@ -326,4 +412,7 @@ __all__ = [
|
|
|
326
412
|
"sidecar_freshness",
|
|
327
413
|
"sidecar_meta_size",
|
|
328
414
|
"store_vector_count",
|
|
415
|
+
"load_store_ids",
|
|
416
|
+
"load_store_items",
|
|
417
|
+
"load_store_items_for",
|
|
329
418
|
]
|
|
@@ -28,7 +28,7 @@ from typing import Any, Dict, List
|
|
|
28
28
|
|
|
29
29
|
from latticeai.services.architecture_readiness import architecture_readiness
|
|
30
30
|
|
|
31
|
-
PRODUCT_VERSION_TARGET = "12.2.
|
|
31
|
+
PRODUCT_VERSION_TARGET = "12.2.1"
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
@dataclass(frozen=True)
|
|
@@ -123,7 +123,7 @@ PRODUCT_GATES: List[ProductGate] = [
|
|
|
123
123
|
f"vscode-extension/README.md::**{PRODUCT_VERSION_TARGET}",
|
|
124
124
|
f"docs/CHANGELOG.md::## [{PRODUCT_VERSION_TARGET}]",
|
|
125
125
|
"FEATURE_STATUS.md",
|
|
126
|
-
f"RELEASE_NOTES_v{PRODUCT_VERSION_TARGET}.md",
|
|
126
|
+
f"docs/releases/RELEASE_NOTES_v{PRODUCT_VERSION_TARGET}.md",
|
|
127
127
|
"rust/lattice-agent/src/kernel/permission.rs::pub fn block_reason_for_tool",
|
|
128
128
|
"rust/lattice-agent/src/kernel/mod.rs::pub mod agentloop",
|
|
129
129
|
"latticeai/api/agent_worker_seam.py::create_agent_worker_seam_router",
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ const root = process.cwd();
|
|
|
6
6
|
const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
|
|
7
7
|
const version = pkg.version;
|
|
8
8
|
const releaseDir = `output/release/v${version}`;
|
|
9
|
-
const releaseTheme = "
|
|
9
|
+
const releaseTheme = "True Count";
|
|
10
10
|
const title = `${version} — ${releaseTheme}`;
|
|
11
11
|
const escapedVersion = version.replaceAll(".", "\\.");
|
|
12
12
|
|
|
@@ -20,6 +20,17 @@
|
|
|
20
20
|
"whole-image delta: naming where the change is makes the claim more",
|
|
21
21
|
"specific, not less."
|
|
22
22
|
],
|
|
23
|
+
"12.2.1": {
|
|
24
|
+
"_why": [
|
|
25
|
+
"True Count is a backend honesty release: HNSW COUNT+delta, SkipByHash",
|
|
26
|
+
"restamp, watch graph prune, summary salvage, MCP CORE, api_key /models",
|
|
27
|
+
"probe, and hash-search copy. The library embedding panel and first-run",
|
|
28
|
+
"hint changed wording; that is below a redesign floor.",
|
|
29
|
+
"",
|
|
30
|
+
"No screen was redesigned. Empty claim set on purpose. Unclaimed screens",
|
|
31
|
+
"are still measured and printed; they are not gated."
|
|
32
|
+
]
|
|
33
|
+
},
|
|
23
34
|
"12.2.0": {
|
|
24
35
|
"_why": [
|
|
25
36
|
"Small Voice is a 2B tool-calling release with two visible surfaces.",
|
package/src-tauri/Cargo.lock
CHANGED
|
@@ -1863,7 +1863,7 @@ dependencies = [
|
|
|
1863
1863
|
|
|
1864
1864
|
[[package]]
|
|
1865
1865
|
name = "lattice-agent"
|
|
1866
|
-
version = "12.2.
|
|
1866
|
+
version = "12.2.1"
|
|
1867
1867
|
dependencies = [
|
|
1868
1868
|
"axum",
|
|
1869
1869
|
"base64 0.22.1",
|
|
@@ -1880,7 +1880,7 @@ dependencies = [
|
|
|
1880
1880
|
|
|
1881
1881
|
[[package]]
|
|
1882
1882
|
name = "lattice-ai-desktop"
|
|
1883
|
-
version = "12.2.
|
|
1883
|
+
version = "12.2.1"
|
|
1884
1884
|
dependencies = [
|
|
1885
1885
|
"lattice-host",
|
|
1886
1886
|
"lattice-jobs",
|
|
@@ -1895,7 +1895,7 @@ dependencies = [
|
|
|
1895
1895
|
|
|
1896
1896
|
[[package]]
|
|
1897
1897
|
name = "lattice-auth"
|
|
1898
|
-
version = "12.2.
|
|
1898
|
+
version = "12.2.1"
|
|
1899
1899
|
dependencies = [
|
|
1900
1900
|
"axum",
|
|
1901
1901
|
"base64 0.22.1",
|
|
@@ -1912,7 +1912,7 @@ dependencies = [
|
|
|
1912
1912
|
|
|
1913
1913
|
[[package]]
|
|
1914
1914
|
name = "lattice-chat"
|
|
1915
|
-
version = "12.2.
|
|
1915
|
+
version = "12.2.1"
|
|
1916
1916
|
dependencies = [
|
|
1917
1917
|
"axum",
|
|
1918
1918
|
"bytes",
|
|
@@ -1934,7 +1934,7 @@ dependencies = [
|
|
|
1934
1934
|
|
|
1935
1935
|
[[package]]
|
|
1936
1936
|
name = "lattice-core"
|
|
1937
|
-
version = "12.2.
|
|
1937
|
+
version = "12.2.1"
|
|
1938
1938
|
dependencies = [
|
|
1939
1939
|
"blake2",
|
|
1940
1940
|
"bytes",
|
|
@@ -1950,7 +1950,7 @@ dependencies = [
|
|
|
1950
1950
|
|
|
1951
1951
|
[[package]]
|
|
1952
1952
|
name = "lattice-host"
|
|
1953
|
-
version = "12.2.
|
|
1953
|
+
version = "12.2.1"
|
|
1954
1954
|
dependencies = [
|
|
1955
1955
|
"axum",
|
|
1956
1956
|
"lattice-agent",
|
|
@@ -1971,7 +1971,7 @@ dependencies = [
|
|
|
1971
1971
|
|
|
1972
1972
|
[[package]]
|
|
1973
1973
|
name = "lattice-ingest"
|
|
1974
|
-
version = "12.2.
|
|
1974
|
+
version = "12.2.1"
|
|
1975
1975
|
dependencies = [
|
|
1976
1976
|
"axum",
|
|
1977
1977
|
"lattice-auth",
|
|
@@ -1986,7 +1986,7 @@ dependencies = [
|
|
|
1986
1986
|
|
|
1987
1987
|
[[package]]
|
|
1988
1988
|
name = "lattice-jobs"
|
|
1989
|
-
version = "12.2.
|
|
1989
|
+
version = "12.2.1"
|
|
1990
1990
|
dependencies = [
|
|
1991
1991
|
"axum",
|
|
1992
1992
|
"lattice-auth",
|
|
@@ -2001,7 +2001,7 @@ dependencies = [
|
|
|
2001
2001
|
|
|
2002
2002
|
[[package]]
|
|
2003
2003
|
name = "lattice-platform"
|
|
2004
|
-
version = "12.2.
|
|
2004
|
+
version = "12.2.1"
|
|
2005
2005
|
dependencies = [
|
|
2006
2006
|
"axum",
|
|
2007
2007
|
"base64 0.22.1",
|
|
@@ -2024,7 +2024,7 @@ dependencies = [
|
|
|
2024
2024
|
|
|
2025
2025
|
[[package]]
|
|
2026
2026
|
name = "lattice-retrieval"
|
|
2027
|
-
version = "12.2.
|
|
2027
|
+
version = "12.2.1"
|
|
2028
2028
|
dependencies = [
|
|
2029
2029
|
"axum",
|
|
2030
2030
|
"fancy-regex",
|
package/src-tauri/Cargo.toml
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "12.2.
|
|
2
|
+
"version": "12.2.1",
|
|
3
3
|
"generated_at": "vite",
|
|
4
4
|
"entrypoints": {
|
|
5
|
-
"app": "/static/app/assets/index-
|
|
5
|
+
"app": "/static/app/assets/index-DCT79wzR.js"
|
|
6
6
|
},
|
|
7
7
|
"assets": {
|
|
8
8
|
"../node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
|
|
9
|
-
"_BrainSignals-
|
|
10
|
-
"_LivingBrain-
|
|
9
|
+
"_BrainSignals-CNA0d6xS.js": "/static/app/assets/BrainSignals-CNA0d6xS.js",
|
|
10
|
+
"_LivingBrain-wess-qJZ.js": "/static/app/assets/LivingBrain-wess-qJZ.js",
|
|
11
11
|
"_QueryClientProvider-B3OjqSyJ.js": "/static/app/assets/QueryClientProvider-B3OjqSyJ.js",
|
|
12
|
-
"_ReviewCard-
|
|
13
|
-
"_actHelpers-
|
|
14
|
-
"_arrow-left-
|
|
15
|
-
"_bot-
|
|
16
|
-
"_brain-
|
|
17
|
-
"_button-
|
|
18
|
-
"_circle-check-
|
|
19
|
-
"_circle-pause-
|
|
20
|
-
"_circle-play-
|
|
21
|
-
"_cpu-
|
|
22
|
-
"_download-
|
|
23
|
-
"_folder-open-
|
|
24
|
-
"_hard-drive-
|
|
25
|
-
"_input-
|
|
12
|
+
"_ReviewCard-DyTrDpy0.js": "/static/app/assets/ReviewCard-DyTrDpy0.js",
|
|
13
|
+
"_actHelpers-6MYDH2kW.js": "/static/app/assets/actHelpers-6MYDH2kW.js",
|
|
14
|
+
"_arrow-left-DOnpwsVV.js": "/static/app/assets/arrow-left-DOnpwsVV.js",
|
|
15
|
+
"_bot-Dm3fmXAE.js": "/static/app/assets/bot-Dm3fmXAE.js",
|
|
16
|
+
"_brain-C2XwdQL1.js": "/static/app/assets/brain-C2XwdQL1.js",
|
|
17
|
+
"_button-xXPeemQr.js": "/static/app/assets/button-xXPeemQr.js",
|
|
18
|
+
"_circle-check-D44VI2ZE.js": "/static/app/assets/circle-check-D44VI2ZE.js",
|
|
19
|
+
"_circle-pause-B_lmNicW.js": "/static/app/assets/circle-pause-B_lmNicW.js",
|
|
20
|
+
"_circle-play-DSYCP0RD.js": "/static/app/assets/circle-play-DSYCP0RD.js",
|
|
21
|
+
"_cpu-D7x-dtxi.js": "/static/app/assets/cpu-D7x-dtxi.js",
|
|
22
|
+
"_download-BHuJr-5V.js": "/static/app/assets/download-BHuJr-5V.js",
|
|
23
|
+
"_folder-open-BiO31EwS.js": "/static/app/assets/folder-open-BiO31EwS.js",
|
|
24
|
+
"_hard-drive-CFEaZ-wP.js": "/static/app/assets/hard-drive-CFEaZ-wP.js",
|
|
25
|
+
"_input-D3YrgxvO.js": "/static/app/assets/input-D3YrgxvO.js",
|
|
26
26
|
"_jsx-runtime-bzQ4Vb5N.js": "/static/app/assets/jsx-runtime-bzQ4Vb5N.js",
|
|
27
|
-
"_link-2-
|
|
28
|
-
"_permissionCopy-
|
|
29
|
-
"_primitives-
|
|
30
|
-
"_search-
|
|
31
|
-
"_share-2-
|
|
32
|
-
"_shield-alert-
|
|
33
|
-
"_sourceMeta-
|
|
34
|
-
"_textarea-
|
|
35
|
-
"_useFocusTrap-
|
|
36
|
-
"_useMutation-
|
|
37
|
-
"_workspace-
|
|
38
|
-
"index.html": "/static/app/assets/index-
|
|
27
|
+
"_link-2-3O-By3qc.js": "/static/app/assets/link-2-3O-By3qc.js",
|
|
28
|
+
"_permissionCopy-CNK2tfkz.js": "/static/app/assets/permissionCopy-CNK2tfkz.js",
|
|
29
|
+
"_primitives-B6DzQC3H.js": "/static/app/assets/primitives-B6DzQC3H.js",
|
|
30
|
+
"_search-BwMK0hjs.js": "/static/app/assets/search-BwMK0hjs.js",
|
|
31
|
+
"_share-2-BljIPAku.js": "/static/app/assets/share-2-BljIPAku.js",
|
|
32
|
+
"_shield-alert-WDP2DSTM.js": "/static/app/assets/shield-alert-WDP2DSTM.js",
|
|
33
|
+
"_sourceMeta-By2WIjlN.js": "/static/app/assets/sourceMeta-By2WIjlN.js",
|
|
34
|
+
"_textarea-5v8vtDlK.js": "/static/app/assets/textarea-5v8vtDlK.js",
|
|
35
|
+
"_useFocusTrap-ssiDeh6P.js": "/static/app/assets/useFocusTrap-ssiDeh6P.js",
|
|
36
|
+
"_useMutation-Bi0PXQMC.js": "/static/app/assets/useMutation-Bi0PXQMC.js",
|
|
37
|
+
"_workspace-BsxrRYQI.js": "/static/app/assets/workspace-BsxrRYQI.js",
|
|
38
|
+
"index.html": "/static/app/assets/index-DCT79wzR.js",
|
|
39
39
|
"assets/index-C8gwOf0C.css": "/static/app/assets/index-C8gwOf0C.css",
|
|
40
|
-
"src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-
|
|
41
|
-
"src/features/act/RunsListPanel.tsx": "/static/app/assets/RunsListPanel-
|
|
42
|
-
"src/features/act/WorkflowGraph.tsx": "/static/app/assets/WorkflowGraph-
|
|
43
|
-
"src/features/act/WorkflowsPanel.tsx": "/static/app/assets/WorkflowsPanel-
|
|
44
|
-
"src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-
|
|
45
|
-
"src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-
|
|
46
|
-
"src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-
|
|
47
|
-
"src/pages/Act.tsx": "/static/app/assets/Act-
|
|
48
|
-
"src/pages/Brain.tsx": "/static/app/assets/Brain-
|
|
49
|
-
"src/pages/Capture.tsx": "/static/app/assets/Capture-
|
|
50
|
-
"src/pages/Chronicle.tsx": "/static/app/assets/Chronicle-
|
|
51
|
-
"src/pages/Library.tsx": "/static/app/assets/Library-
|
|
52
|
-
"src/pages/System.tsx": "/static/app/assets/System-
|
|
53
|
-
"src/pages/brain/DigitalBrainExplorer.tsx": "/static/app/assets/DigitalBrainExplorer-
|
|
40
|
+
"src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-DeBGF6qz.js",
|
|
41
|
+
"src/features/act/RunsListPanel.tsx": "/static/app/assets/RunsListPanel-CHJv2Qyw.js",
|
|
42
|
+
"src/features/act/WorkflowGraph.tsx": "/static/app/assets/WorkflowGraph-B5nKCCGa.js",
|
|
43
|
+
"src/features/act/WorkflowsPanel.tsx": "/static/app/assets/WorkflowsPanel-C7RZNRGo.js",
|
|
44
|
+
"src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-aCxQgD2L.js",
|
|
45
|
+
"src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-N00B-MAJ.js",
|
|
46
|
+
"src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-uVFYAa-6.js",
|
|
47
|
+
"src/pages/Act.tsx": "/static/app/assets/Act-DC676bqE.js",
|
|
48
|
+
"src/pages/Brain.tsx": "/static/app/assets/Brain-Dbd0xvsc.js",
|
|
49
|
+
"src/pages/Capture.tsx": "/static/app/assets/Capture-BB19fo7P.js",
|
|
50
|
+
"src/pages/Chronicle.tsx": "/static/app/assets/Chronicle-D8p3dqxZ.js",
|
|
51
|
+
"src/pages/Library.tsx": "/static/app/assets/Library-0q8Sdke7.js",
|
|
52
|
+
"src/pages/System.tsx": "/static/app/assets/System-CyKGHQrW.js",
|
|
53
|
+
"src/pages/brain/DigitalBrainExplorer.tsx": "/static/app/assets/DigitalBrainExplorer-mH6ZSuvK.js"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RunsListPanel-
|
|
2
|
-
import{i as e,n as t,t as n}from"./jsx-runtime-bzQ4Vb5N.js";import{n as r}from"./QueryClientProvider-B3OjqSyJ.js";import{t as i}from"./useMutation-B8QKq2NW.js";import{t as a}from"./bot-Dkd-DbiP.js";import{_ as o,c as s,d as c,g as l,h as u,i as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b}from"./primitives-BDryQl6H.js";import{t as x}from"./circle-pause-918Kuvk0.js";import{a as S,i as C,n as w,r as T}from"./ReviewCard-D1fGTEn7.js";import{D as E,H as D,R as O,S as k,b as A,i as j,k as M,o as N,v as P,z as F}from"./index-CfeqZ9Ri.js";import{t as I}from"./button-BA0N_zId.js";import{t as L}from"./input-CFfCfMjO.js";import"./workspace-BmfVs66W.js";import{t as R}from"./textarea-BdVMYEb1.js";var z=O(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),B=e(t()),V=n();function H(){let e=F(e=>e.language),t=r(),[n,i]=B.useState(`pending`),[a,o]=B.useState(`all`),[s,l]=B.useState({}),u=D({queryKey:[`automationReviews`,n,a],queryFn:()=>P.automationReviews({...n===`all`?{}:{status:n},...a===`all`?{}:{source:a}})}),d=u.data?.data.items||[],f=D({queryKey:[`proposalCounts`],queryFn:P.proposalCounts}),p=Number(f.data?.data?.pending||0),h=async(n,r,i=!1,a)=>{let o=await(r===`approve`?()=>P.approveReviewItem(n.id):r===`dismiss`?n.source===`change_proposal`?()=>P.rejectProposal(n.id,a||``):()=>P.dismissReviewItem(n.id):r===`snooze`?()=>P.snoozeReviewItem(n.id,T()):r===`unsnooze`?()=>P.unsnoozeReviewItem(n.id):()=>P.runNowReviewItem(n.id))();if(!o.ok){let t=r===`approve`&&n.source===`change_proposal`&&o.status===409;return l(r=>({...r,[n.id]:t?{tone:`error`,message:k(e,`proposals.conflict.title`),conflict:!0}:{tone:`error`,message:k(e,`review.feedback.error`),...o.error?{detail:o.error}:{}}})),o}if(r===`run_now`){let t=o.data.payload||{},r=o.data.provenance||{},a=String(t.last_run_id||r.run_id||``),s=i?k(e,`review.regenerated`):k(e,`review.executed`);l(e=>({...e,[n.id]:{tone:`success`,message:a?`${s} · ${a}`:s}}))}else l(e=>{let t={...e};return delete t[n.id],t});return await Promise.all([t.invalidateQueries({queryKey:[`automationReviews`]}),t.invalidateQueries({queryKey:[`proposalCounts`]}),t.invalidateQueries({queryKey:[`pendingProposals`]})]),o};return u.isLoading?(0,V.jsx)(m,{title:k(e,`review.inbox.title`)}):(0,V.jsxs)(`div`,{className:`review-inbox`,children:[(0,V.jsxs)(`div`,{className:`review-inbox-head`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{className:`text-xl font-bold`,children:k(e,`review.inbox.title`)}),(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:k(e,`review.inbox.description`)})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[p>0?(0,V.jsx)(b,{variant:`warning`,"data-testid":`proposal-count-badge`,children:k(e,`review.proposal.badge`,{count:p})}):null,u.data?(0,V.jsx)(b,{variant:u.data.ok?`success`:`warning`,children:u.data.ok?k(e,`review.status.connected`):k(e,`review.status.unavailable`)}):null]})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2 py-1`,children:[(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{id:`review-status-filter-label`,className:`text-xs font-semibold tracking-wide text-muted-foreground`,children:k(e,`review.status.title`)}),(0,V.jsx)(c,{tabs:S.map(t=>({id:t.id,label:k(e,t.labelKey)})),value:n,onChange:e=>i(e),ariaLabelledBy:`review-status-filter-label`})]}),(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{id:`review-source-filter-label`,className:`text-xs font-semibold tracking-wide text-muted-foreground`,children:k(e,`review.source.title`)}),(0,V.jsx)(c,{tabs:C.map(t=>({id:t.id,label:k(e,t.labelKey)})),value:a,onChange:e=>o(e),ariaLabelledBy:`review-source-filter-label`})]})]}),(0,V.jsx)(`div`,{className:`pt-2`,children:u.isError||u.data&&!u.data.ok?(0,V.jsx)(g,{title:k(e,`review.inbox.loadError`),detail:(0,V.jsxs)(V.Fragment,{children:[k(e,`review.inbox.unavailable`),u.data?.error?(0,V.jsx)(`span`,{className:`mt-1 block text-xs opacity-75`,children:u.data.error}):null]})}):d.length?(0,V.jsx)(`div`,{className:`flex flex-col gap-3`,children:d.map(e=>(0,V.jsx)(w,{item:e,feedback:s[e.id],onAction:h},e.id))}):(0,V.jsx)(g,{title:k(e,`review.inbox.empty`),detail:n===`snoozed`?k(e,`review.inbox.emptySnoozed`):k(e,`review.inbox.emptyPending`)})})]})}var U=[{id:`review`,labelKey:`act.tab.review`},{id:`runs`,labelKey:`act.tab.runsHistory`}],W={runs:{titleKey:`act.title.runs`,copyKey:`act.copy.runs`},agents:{titleKey:`act.title.goals`,copyKey:`act.copy.goals`},workflows:{titleKey:`act.title.workflows`,copyKey:`act.copy.workflows`},hooks:{titleKey:`act.title.safeguards`,copyKey:`act.copy.safeguards`},tools:{titleKey:`act.title.permissions`,copyKey:`act.copy.permissions`}},G=[{id:`runs`,labelKey:`act.tab.runs`},{id:`agents`,labelKey:`act.tab.goals`},{id:`workflows`,labelKey:`act.tab.recipes`},{id:`hooks`,labelKey:`act.tab.safeguards`,advancedLabelKey:`act.tab.hooks`},{id:`tools`,labelKey:`act.tab.permissions`,advancedLabelKey:`act.tab.tools`}],K=B.lazy(()=>A(()=>import(`./RunsListPanel-DAirtLkS.js`).then(e=>({default:e.RunsListPanel})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]))),q=B.lazy(()=>A(()=>import(`./WorkflowsPanel-CIMNTw-O.js`).then(e=>({default:e.WorkflowsPanel})),__vite__mapDeps([12,1,2,3,4,5,6,7,8,13,14,9,10,11,15])));function J({initialTab:e}){let t=F(e=>e.mode),n=F(e=>e.language),[r,i]=B.useState(()=>e===`agents`||e===`workflows`||e===`hooks`||e===`tools`?e:`runs`),[a,o]=B.useState(e===`runs`?`runs`:`review`);B.useEffect(()=>{if(e===`review`){i(`runs`),o(`review`);return}if(e===`runs`){i(`runs`),o(`runs`);return}G.some(t=>t.id===e)&&i(e)},[e]);let s=e=>{i(e),N(`/`+e)},l=e=>{o(e),N(e===`review`?`/review`:`/runs`)},{titleKey:u,copyKey:d}=W[r];return(0,V.jsxs)(`div`,{className:`product-page act-page space-y-5`,children:[(0,V.jsxs)(`header`,{className:`page-hero`,children:[(0,V.jsxs)(`div`,{className:`page-kicker`,children:[(0,V.jsx)(E,{className:`h-4 w-4`}),` `,k(n,`act.kicker`)]}),(0,V.jsx)(`h1`,{className:`page-title`,children:k(n,u)}),(0,V.jsx)(`p`,{className:`page-copy`,children:k(n,d)})]}),(0,V.jsx)(c,{tabs:(t===`basic`?G.filter(e=>e.id===`runs`||e.id===`agents`||e.id===`workflows`):G).map(e=>({id:e.id,label:k(n,t===`basic`||!e.advancedLabelKey?e.labelKey:e.advancedLabelKey)})),value:r,onChange:e=>s(e)}),r===`runs`?(0,V.jsx)(X,{subTab:a,onSubTabChange:l}):null,r===`agents`?(0,V.jsx)(Y,{}):null,r===`workflows`?(0,V.jsx)(j,{language:n,resetKey:`act-workflows`,children:(0,V.jsx)(q,{})}):null,r===`hooks`?(0,V.jsx)(Z,{}):null,r===`tools`?(0,V.jsx)(Q,{}):null]})}function Y(){let e=r(),t=F(e=>e.mode),n=F(e=>e.language),[c,m]=B.useState(``),g=D({queryKey:[`agentRuntime`],queryFn:P.agentRuntime}),_=D({queryKey:[`agentRegistry`],queryFn:P.agentRegistry,enabled:t!==`basic`}),v=D({queryKey:[`agentCapabilities`],queryFn:P.agentCapabilities,enabled:t!==`basic`}),x=i({mutationFn:()=>P.runAgent(c,[`planner`,`executor`,`reviewer`]),onSuccess:()=>e.invalidateQueries({queryKey:[`agentRuntime`]})}),[S,C]=B.useState(``),w=i({mutationFn:()=>P.registerAgent({name:S,type:`custom`,capabilities:[]}),onSuccess:()=>e.invalidateQueries({queryKey:[`agentRegistry`]})}),T=(g.data?.data||{}).runtime||{},E=!!T.ready,O=t===`basic`?k(n,`act.goal.modelRequired`):String(T.unavailable_reason||k(n,`act.runtime.modelUnavailable`)),A=!!c.trim()&&E&&!x.isPending;return(0,V.jsxs)(`div`,{className:`work-start-flow flex flex-col gap-4`,children:[(0,V.jsxs)(h,{className:`work-goal-card`,children:[(0,V.jsxs)(l,{children:[(0,V.jsxs)(o,{className:`flex items-center gap-2`,children:[(0,V.jsx)(a,{className:`h-4 w-4`}),` `,k(n,`act.goal.title`)]}),(0,V.jsx)(u,{children:k(n,`act.goal.description`)})]}),(0,V.jsxs)(f,{className:`space-y-3`,children:[(0,V.jsx)(R,{value:c,onChange:e=>m(e.target.value),placeholder:k(n,`act.goal.placeholder`)}),E?null:(0,V.jsx)(b,{variant:`warning`,children:O}),(0,V.jsxs)(I,{className:`w-full`,variant:E?`default`:`outline`,disabled:!A,onClick:()=>x.mutate(),children:[(0,V.jsx)(z,{className:`h-4 w-4`}),` `,E?k(n,`act.goal.start`):k(n,`act.goal.needsModel`)]}),x.data?(0,V.jsx)(s,{result:x.data,successLabel:k(n,`act.goal.completed`)}):null,x.data&&x.data?.data?(0,V.jsx)(`div`,{className:`text-xs text-emerald-600`,children:k(n,`act.goal.brainSaved`)}):null]})]}),t===`basic`?(0,V.jsxs)(`div`,{className:`work-safety-note`,children:[(0,V.jsx)(M,{className:`h-4 w-4`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{children:k(n,`act.goal.safety`)})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(p,{title:k(n,`act.panel.readiness`),result:g.data,children:e=>(0,V.jsx)(y,{value:e})}),(0,V.jsx)(p,{title:k(n,`act.panel.agentTeam`),result:_.data,children:e=>(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsx)(d,{items:e.agents,titleKey:`name`,metaKey:`type`,labelPrefix:`act.agentRole`}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(L,{value:S,onChange:e=>C(e.target.value),placeholder:k(n,`act.agent.namePlaceholder`)}),(0,V.jsx)(I,{disabled:!S.trim()||w.isPending,onClick:()=>w.mutate(),children:k(n,`act.agent.register`)})]})]})}),(0,V.jsx)(p,{title:k(n,`act.panel.capabilities`),result:v.data,children:e=>(0,V.jsx)(y,{value:e})})]})]})}function X({subTab:e,onSubTabChange:t}){let n=F(e=>e.language);return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(c,{tabs:U.map(e=>({id:e.id,label:k(n,e.labelKey)})),value:e,onChange:e=>t(e)}),e===`runs`?(0,V.jsx)(j,{language:n,resetKey:`act-runs`,children:(0,V.jsx)(K,{})}):(0,V.jsx)(H,{})]})}function Z(){let e=F(e=>e.mode),t=F(e=>e.language),n=D({queryKey:[`hooks`],queryFn:P.hooks}),r=D({queryKey:[`hookRuns`],queryFn:P.hookRuns});return e===`basic`?(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(p,{title:k(t,`act.panel.safeguards`),result:n.data,children:e=>(0,V.jsx)(d,{items:e.hooks,titleKey:`name`,metaKey:`kind`})}),(0,V.jsx)(_,{title:k(t,`act.hooks.detailed`),detail:k(t,`act.hooks.detailedHint`)})]}):(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(p,{title:k(t,`act.panel.hooks`),result:n.data,children:e=>(0,V.jsx)(d,{items:e.hooks,titleKey:`name`,metaKey:`kind`})}),(0,V.jsx)(p,{title:k(t,`act.panel.hookRuns`),result:r.data,children:e=>(0,V.jsx)(d,{items:e.runs,titleKey:`hook_id`,metaKey:`status`})}),(0,V.jsxs)(h,{children:[(0,V.jsxs)(l,{children:[(0,V.jsxs)(o,{className:`flex items-center gap-2`,children:[(0,V.jsx)(x,{className:`h-4 w-4`}),` `,k(t,`act.hooks.runManual`)]}),(0,V.jsx)(u,{children:k(t,`act.hooks.runManualHint`)})]}),(0,V.jsx)(f,{children:(0,V.jsx)(v,{label:k(t,`act.hooks.runAll`),action:()=>P.hookRun({event:`manual`}),invalidate:[`hookRuns`]})})]})]})}function Q(){let e=F(e=>e.language),t=D({queryKey:[`toolPermissions`],queryFn:P.toolPermissions});return(0,V.jsx)(p,{title:k(e,`act.panel.permissions`),result:t.data,children:e=>(0,V.jsx)(d,{items:e.permissions||e,titleKey:`tool`,metaKey:`risk`})})}export{J as ActPage};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RunsListPanel-CHJv2Qyw.js","assets/jsx-runtime-bzQ4Vb5N.js","assets/index-DCT79wzR.js","assets/QueryClientProvider-B3OjqSyJ.js","assets/index-C8gwOf0C.css","assets/primitives-B6DzQC3H.js","assets/button-xXPeemQr.js","assets/useMutation-Bi0PXQMC.js","assets/circle-check-D44VI2ZE.js","assets/actHelpers-6MYDH2kW.js","assets/circle-play-DSYCP0RD.js","assets/workspace-BsxrRYQI.js","assets/WorkflowsPanel-C7RZNRGo.js","assets/input-D3YrgxvO.js","assets/textarea-5v8vtDlK.js","assets/folder-open-BiO31EwS.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as e,n as t,t as n}from"./jsx-runtime-bzQ4Vb5N.js";import{n as r}from"./QueryClientProvider-B3OjqSyJ.js";import{t as i}from"./useMutation-Bi0PXQMC.js";import{t as a}from"./bot-Dm3fmXAE.js";import{_ as o,c as s,d as c,g as l,h as u,i as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b}from"./primitives-B6DzQC3H.js";import{t as x}from"./circle-pause-B_lmNicW.js";import{a as S,i as C,n as w,r as T}from"./ReviewCard-DyTrDpy0.js";import{D as E,H as D,R as O,S as k,b as A,i as j,k as M,o as N,v as P,z as F}from"./index-DCT79wzR.js";import{t as I}from"./button-xXPeemQr.js";import{t as L}from"./input-D3YrgxvO.js";import"./workspace-BsxrRYQI.js";import{t as R}from"./textarea-5v8vtDlK.js";var z=O(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),B=e(t()),V=n();function H(){let e=F(e=>e.language),t=r(),[n,i]=B.useState(`pending`),[a,o]=B.useState(`all`),[s,l]=B.useState({}),u=D({queryKey:[`automationReviews`,n,a],queryFn:()=>P.automationReviews({...n===`all`?{}:{status:n},...a===`all`?{}:{source:a}})}),d=u.data?.data.items||[],f=D({queryKey:[`proposalCounts`],queryFn:P.proposalCounts}),p=Number(f.data?.data?.pending||0),h=async(n,r,i=!1,a)=>{let o=await(r===`approve`?()=>P.approveReviewItem(n.id):r===`dismiss`?n.source===`change_proposal`?()=>P.rejectProposal(n.id,a||``):()=>P.dismissReviewItem(n.id):r===`snooze`?()=>P.snoozeReviewItem(n.id,T()):r===`unsnooze`?()=>P.unsnoozeReviewItem(n.id):()=>P.runNowReviewItem(n.id))();if(!o.ok){let t=r===`approve`&&n.source===`change_proposal`&&o.status===409;return l(r=>({...r,[n.id]:t?{tone:`error`,message:k(e,`proposals.conflict.title`),conflict:!0}:{tone:`error`,message:k(e,`review.feedback.error`),...o.error?{detail:o.error}:{}}})),o}if(r===`run_now`){let t=o.data.payload||{},r=o.data.provenance||{},a=String(t.last_run_id||r.run_id||``),s=i?k(e,`review.regenerated`):k(e,`review.executed`);l(e=>({...e,[n.id]:{tone:`success`,message:a?`${s} · ${a}`:s}}))}else l(e=>{let t={...e};return delete t[n.id],t});return await Promise.all([t.invalidateQueries({queryKey:[`automationReviews`]}),t.invalidateQueries({queryKey:[`proposalCounts`]}),t.invalidateQueries({queryKey:[`pendingProposals`]})]),o};return u.isLoading?(0,V.jsx)(m,{title:k(e,`review.inbox.title`)}):(0,V.jsxs)(`div`,{className:`review-inbox`,children:[(0,V.jsxs)(`div`,{className:`review-inbox-head`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`h2`,{className:`text-xl font-bold`,children:k(e,`review.inbox.title`)}),(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:k(e,`review.inbox.description`)})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[p>0?(0,V.jsx)(b,{variant:`warning`,"data-testid":`proposal-count-badge`,children:k(e,`review.proposal.badge`,{count:p})}):null,u.data?(0,V.jsx)(b,{variant:u.data.ok?`success`:`warning`,children:u.data.ok?k(e,`review.status.connected`):k(e,`review.status.unavailable`)}):null]})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2 py-1`,children:[(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{id:`review-status-filter-label`,className:`text-xs font-semibold tracking-wide text-muted-foreground`,children:k(e,`review.status.title`)}),(0,V.jsx)(c,{tabs:S.map(t=>({id:t.id,label:k(e,t.labelKey)})),value:n,onChange:e=>i(e),ariaLabelledBy:`review-status-filter-label`})]}),(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,V.jsx)(`span`,{id:`review-source-filter-label`,className:`text-xs font-semibold tracking-wide text-muted-foreground`,children:k(e,`review.source.title`)}),(0,V.jsx)(c,{tabs:C.map(t=>({id:t.id,label:k(e,t.labelKey)})),value:a,onChange:e=>o(e),ariaLabelledBy:`review-source-filter-label`})]})]}),(0,V.jsx)(`div`,{className:`pt-2`,children:u.isError||u.data&&!u.data.ok?(0,V.jsx)(g,{title:k(e,`review.inbox.loadError`),detail:(0,V.jsxs)(V.Fragment,{children:[k(e,`review.inbox.unavailable`),u.data?.error?(0,V.jsx)(`span`,{className:`mt-1 block text-xs opacity-75`,children:u.data.error}):null]})}):d.length?(0,V.jsx)(`div`,{className:`flex flex-col gap-3`,children:d.map(e=>(0,V.jsx)(w,{item:e,feedback:s[e.id],onAction:h},e.id))}):(0,V.jsx)(g,{title:k(e,`review.inbox.empty`),detail:n===`snoozed`?k(e,`review.inbox.emptySnoozed`):k(e,`review.inbox.emptyPending`)})})]})}var U=[{id:`review`,labelKey:`act.tab.review`},{id:`runs`,labelKey:`act.tab.runsHistory`}],W={runs:{titleKey:`act.title.runs`,copyKey:`act.copy.runs`},agents:{titleKey:`act.title.goals`,copyKey:`act.copy.goals`},workflows:{titleKey:`act.title.workflows`,copyKey:`act.copy.workflows`},hooks:{titleKey:`act.title.safeguards`,copyKey:`act.copy.safeguards`},tools:{titleKey:`act.title.permissions`,copyKey:`act.copy.permissions`}},G=[{id:`runs`,labelKey:`act.tab.runs`},{id:`agents`,labelKey:`act.tab.goals`},{id:`workflows`,labelKey:`act.tab.recipes`},{id:`hooks`,labelKey:`act.tab.safeguards`,advancedLabelKey:`act.tab.hooks`},{id:`tools`,labelKey:`act.tab.permissions`,advancedLabelKey:`act.tab.tools`}],K=B.lazy(()=>A(()=>import(`./RunsListPanel-CHJv2Qyw.js`).then(e=>({default:e.RunsListPanel})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]))),q=B.lazy(()=>A(()=>import(`./WorkflowsPanel-C7RZNRGo.js`).then(e=>({default:e.WorkflowsPanel})),__vite__mapDeps([12,1,2,3,4,5,6,7,8,13,14,9,10,11,15])));function J({initialTab:e}){let t=F(e=>e.mode),n=F(e=>e.language),[r,i]=B.useState(()=>e===`agents`||e===`workflows`||e===`hooks`||e===`tools`?e:`runs`),[a,o]=B.useState(e===`runs`?`runs`:`review`);B.useEffect(()=>{if(e===`review`){i(`runs`),o(`review`);return}if(e===`runs`){i(`runs`),o(`runs`);return}G.some(t=>t.id===e)&&i(e)},[e]);let s=e=>{i(e),N(`/`+e)},l=e=>{o(e),N(e===`review`?`/review`:`/runs`)},{titleKey:u,copyKey:d}=W[r];return(0,V.jsxs)(`div`,{className:`product-page act-page space-y-5`,children:[(0,V.jsxs)(`header`,{className:`page-hero`,children:[(0,V.jsxs)(`div`,{className:`page-kicker`,children:[(0,V.jsx)(E,{className:`h-4 w-4`}),` `,k(n,`act.kicker`)]}),(0,V.jsx)(`h1`,{className:`page-title`,children:k(n,u)}),(0,V.jsx)(`p`,{className:`page-copy`,children:k(n,d)})]}),(0,V.jsx)(c,{tabs:(t===`basic`?G.filter(e=>e.id===`runs`||e.id===`agents`||e.id===`workflows`):G).map(e=>({id:e.id,label:k(n,t===`basic`||!e.advancedLabelKey?e.labelKey:e.advancedLabelKey)})),value:r,onChange:e=>s(e)}),r===`runs`?(0,V.jsx)(X,{subTab:a,onSubTabChange:l}):null,r===`agents`?(0,V.jsx)(Y,{}):null,r===`workflows`?(0,V.jsx)(j,{language:n,resetKey:`act-workflows`,children:(0,V.jsx)(q,{})}):null,r===`hooks`?(0,V.jsx)(Z,{}):null,r===`tools`?(0,V.jsx)(Q,{}):null]})}function Y(){let e=r(),t=F(e=>e.mode),n=F(e=>e.language),[c,m]=B.useState(``),g=D({queryKey:[`agentRuntime`],queryFn:P.agentRuntime}),_=D({queryKey:[`agentRegistry`],queryFn:P.agentRegistry,enabled:t!==`basic`}),v=D({queryKey:[`agentCapabilities`],queryFn:P.agentCapabilities,enabled:t!==`basic`}),x=i({mutationFn:()=>P.runAgent(c,[`planner`,`executor`,`reviewer`]),onSuccess:()=>e.invalidateQueries({queryKey:[`agentRuntime`]})}),[S,C]=B.useState(``),w=i({mutationFn:()=>P.registerAgent({name:S,type:`custom`,capabilities:[]}),onSuccess:()=>e.invalidateQueries({queryKey:[`agentRegistry`]})}),T=(g.data?.data||{}).runtime||{},E=!!T.ready,O=t===`basic`?k(n,`act.goal.modelRequired`):String(T.unavailable_reason||k(n,`act.runtime.modelUnavailable`)),A=!!c.trim()&&E&&!x.isPending;return(0,V.jsxs)(`div`,{className:`work-start-flow flex flex-col gap-4`,children:[(0,V.jsxs)(h,{className:`work-goal-card`,children:[(0,V.jsxs)(l,{children:[(0,V.jsxs)(o,{className:`flex items-center gap-2`,children:[(0,V.jsx)(a,{className:`h-4 w-4`}),` `,k(n,`act.goal.title`)]}),(0,V.jsx)(u,{children:k(n,`act.goal.description`)})]}),(0,V.jsxs)(f,{className:`space-y-3`,children:[(0,V.jsx)(R,{value:c,onChange:e=>m(e.target.value),placeholder:k(n,`act.goal.placeholder`)}),E?null:(0,V.jsx)(b,{variant:`warning`,children:O}),(0,V.jsxs)(I,{className:`w-full`,variant:E?`default`:`outline`,disabled:!A,onClick:()=>x.mutate(),children:[(0,V.jsx)(z,{className:`h-4 w-4`}),` `,E?k(n,`act.goal.start`):k(n,`act.goal.needsModel`)]}),x.data?(0,V.jsx)(s,{result:x.data,successLabel:k(n,`act.goal.completed`)}):null,x.data&&x.data?.data?(0,V.jsx)(`div`,{className:`text-xs text-emerald-600`,children:k(n,`act.goal.brainSaved`)}):null]})]}),t===`basic`?(0,V.jsxs)(`div`,{className:`work-safety-note`,children:[(0,V.jsx)(M,{className:`h-4 w-4`,"aria-hidden":`true`}),(0,V.jsx)(`span`,{children:k(n,`act.goal.safety`)})]}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(p,{title:k(n,`act.panel.readiness`),result:g.data,children:e=>(0,V.jsx)(y,{value:e})}),(0,V.jsx)(p,{title:k(n,`act.panel.agentTeam`),result:_.data,children:e=>(0,V.jsxs)(`div`,{className:`space-y-3`,children:[(0,V.jsx)(d,{items:e.agents,titleKey:`name`,metaKey:`type`,labelPrefix:`act.agentRole`}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsx)(L,{value:S,onChange:e=>C(e.target.value),placeholder:k(n,`act.agent.namePlaceholder`)}),(0,V.jsx)(I,{disabled:!S.trim()||w.isPending,onClick:()=>w.mutate(),children:k(n,`act.agent.register`)})]})]})}),(0,V.jsx)(p,{title:k(n,`act.panel.capabilities`),result:v.data,children:e=>(0,V.jsx)(y,{value:e})})]})]})}function X({subTab:e,onSubTabChange:t}){let n=F(e=>e.language);return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(c,{tabs:U.map(e=>({id:e.id,label:k(n,e.labelKey)})),value:e,onChange:e=>t(e)}),e===`runs`?(0,V.jsx)(j,{language:n,resetKey:`act-runs`,children:(0,V.jsx)(K,{})}):(0,V.jsx)(H,{})]})}function Z(){let e=F(e=>e.mode),t=F(e=>e.language),n=D({queryKey:[`hooks`],queryFn:P.hooks}),r=D({queryKey:[`hookRuns`],queryFn:P.hookRuns});return e===`basic`?(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(p,{title:k(t,`act.panel.safeguards`),result:n.data,children:e=>(0,V.jsx)(d,{items:e.hooks,titleKey:`name`,metaKey:`kind`})}),(0,V.jsx)(_,{title:k(t,`act.hooks.detailed`),detail:k(t,`act.hooks.detailedHint`)})]}):(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(p,{title:k(t,`act.panel.hooks`),result:n.data,children:e=>(0,V.jsx)(d,{items:e.hooks,titleKey:`name`,metaKey:`kind`})}),(0,V.jsx)(p,{title:k(t,`act.panel.hookRuns`),result:r.data,children:e=>(0,V.jsx)(d,{items:e.runs,titleKey:`hook_id`,metaKey:`status`})}),(0,V.jsxs)(h,{children:[(0,V.jsxs)(l,{children:[(0,V.jsxs)(o,{className:`flex items-center gap-2`,children:[(0,V.jsx)(x,{className:`h-4 w-4`}),` `,k(t,`act.hooks.runManual`)]}),(0,V.jsx)(u,{children:k(t,`act.hooks.runManualHint`)})]}),(0,V.jsx)(f,{children:(0,V.jsx)(v,{label:k(t,`act.hooks.runAll`),action:()=>P.hookRun({event:`manual`}),invalidate:[`hookRuns`]})})]})]})}function Q(){let e=F(e=>e.language),t=D({queryKey:[`toolPermissions`],queryFn:P.toolPermissions});return(0,V.jsx)(p,{title:k(e,`act.panel.permissions`),result:t.data,children:e=>(0,V.jsx)(d,{items:e.permissions||e,titleKey:`tool`,metaKey:`risk`})})}export{J as ActPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t,t as n}from"./jsx-runtime-bzQ4Vb5N.js";import{n as r}from"./QueryClientProvider-B3OjqSyJ.js";import{t as i}from"./useMutation-B8QKq2NW.js";import{t as a}from"./arrow-left-iVa1goff.js";import{t as o}from"./search-DHsPwmPw.js";import{A as s,H as c,R as l,S as u,c as d,k as f,p,r as m,s as h,v as g,z as _}from"./index-CfeqZ9Ri.js";import{t as v}from"./button-BA0N_zId.js";import"./workspace-BmfVs66W.js";var y=l(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),b=e(t()),x=n();function S({onBack:e}){let t=r(),n=_(e=>e.language),[o,c]=b.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:l,statsQ:p,usersQ:y,auditQ:S,securityQ:N,securityEventsQ:P,policiesQ:F,rolesQ:I,retentionQ:L,indexQ:R,agentRuntimeQ:z,toolRegistryQ:B,healthSummaryQ:V}=C(o),H=i({mutationFn:g.rebuildIndex,onSuccess:()=>void t.invalidateQueries({queryKey:[`indexStatus`]})}),U=d(y.data?.data),W=d(S.data?.data?.recent_events),G=d(P.data?.data?.events),K=d(F.data?.data?.policies),q=d(I.data?.data?.roles),J=L.data?.data||{},Y=V.data?.data||V.data,X=Y?.status===`attention`||typeof Y?.issue_count==`number`&&Y.issue_count>0;return(0,x.jsxs)(`main`,{className:`admin-console`,"aria-label":u(n,`admin.aria.console`),children:[(0,x.jsxs)(`header`,{className:`admin-console-header`,children:[(0,x.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,x.jsx)(a,{className:`h-4 w-4`}),u(n,`admin.back`)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{children:u(n,`admin.kicker`)}),(0,x.jsx)(`h1`,{children:u(n,`admin.title`)}),(0,x.jsx)(`p`,{children:u(n,`admin.body`)})]}),(0,x.jsx)(h,{compact:!0})]}),(0,x.jsxs)(`section`,{className:`admin-metrics-statement`,"aria-label":u(n,`admin.overview`),children:[(0,x.jsxs)(`div`,{className:`admin-metrics-statement-main`,children:[(0,x.jsx)(f,{className:`h-4 w-4 ${X?`is-warn`:`is-ok`}`}),(0,x.jsx)(`span`,{children:X?u(n,`admin.health.attention`,{count:String(Y?.issue_count||1)}):u(n,`admin.health.ok`)})]}),(0,x.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:u(n,`admin.summaryStatement`,{users:U.length,logs:W.length+G.length,security:k(N.data?.data,`status`)||(N.data?.ok?u(n,`admin.status.ready`):u(n,`admin.status.unavailable`)),index:k(R.data?.data,`status`)||(R.data?.ok?u(n,`admin.status.indexed`):u(n,`admin.status.unknown`))})})]}),(0,x.jsxs)(`section`,{className:`admin-accordion-list flex flex-col gap-4 mt-4`,children:[(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,open:!0,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.users`),` · `,u(n,`admin.panel.people`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-users`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.users`),eyebrow:u(n,`admin.panel.people`),children:(0,x.jsx)(D,{items:U.slice(0,8),empty:u(n,`admin.empty.users`),render:e=>{let t=e;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`strong`,{children:M(t.name||t.email||t.id,u(n,`admin.fallback.localUser`))}),(0,x.jsx)(`span`,{children:M(t.role||t.status||t.workspace_id,u(n,`admin.fallback.member`))})]})}})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.roles`),` · `,u(n,`admin.panel.access`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-roles`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.roles`),eyebrow:u(n,`admin.panel.access`),children:(0,x.jsx)(D,{items:q.slice(0,6),empty:u(n,`admin.empty.roles`),render:e=>{let t=e;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`strong`,{children:[M(t.role,u(n,`admin.fallback.role`)),` · `,M(t.members,`0`),` `,u(n,`admin.metric.users`)]}),(0,x.jsx)(`span`,{children:d(t.caps).slice(0,4).map(e=>M(e,``)).filter(Boolean).join(`, `)||u(n,`admin.fallback.noCaps`)})]})}})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.logs`),` · `,u(n,`admin.panel.audit`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-logs`,children:(0,x.jsxs)(E,{title:u(n,`admin.panel.logs`),eyebrow:u(n,`admin.panel.audit`),children:[(0,x.jsx)(T,{language:n,filters:o,onChange:c,matched:S.data?.data?.filters}),(0,x.jsx)(D,{items:W.slice(0,8),empty:u(n,`admin.empty.audit`),render:e=>O(e,n)})]})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.securityEvents`),` · `,u(n,`admin.panel.protection`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-security`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.securityEvents`),eyebrow:u(n,`admin.panel.protection`),children:(0,x.jsx)(D,{items:G.slice(0,8),empty:u(n,`admin.empty.security`),render:e=>O(e,n)})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.brainOps`),` · `,u(n,`admin.panel.maintenance`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-brain-ops`,children:(0,x.jsxs)(E,{title:u(n,`admin.panel.brainOps`),eyebrow:u(n,`admin.panel.maintenance`),children:[(0,x.jsxs)(`div`,{className:`admin-operation`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:A(R.data?.data,n)}),(0,x.jsx)(`span`,{children:j(l.data?.data)||j(p.data?.data)||u(n,`admin.brain.summaryFallback`)})]}),(0,x.jsxs)(v,{variant:`outline`,size:`sm`,disabled:H.isPending,onClick:()=>H.mutate(),children:[(0,x.jsx)(s,{className:`h-3.5 w-3.5`}),H.isPending?u(n,`admin.brain.rebuilding`):u(n,`admin.brain.rebuild`)]})]}),(0,x.jsxs)(`div`,{className:`admin-policy-strip`,children:[K.slice(0,5).map((e,t)=>{let r=e;return(0,x.jsx)(`span`,{children:M(r.label||r.name||r.id,u(n,`admin.policy.fallback`))},`${M(r.id||r.name,`policy`)}-${t}`)}),K.length?null:(0,x.jsx)(`span`,{children:u(n,`admin.policy.quiet`)})]}),(0,x.jsxs)(`div`,{className:`admin-retention`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.retention.days`,{days:M(J.retention_days,`90`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.retention.detail`,{events:M(J.retained_events,`0`),candidates:M(J.prune_candidates,`0`)})})]})]})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.runtimeTrust`),` · `,u(n,`admin.panel.contracts`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-runtime`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.runtimeTrust`),eyebrow:u(n,`admin.panel.contracts`),children:(0,x.jsx)(w,{runtime:z.data?.data,registry:B.data?.data,language:n})})})]})]})]})}function C(e){let t=b.useMemo(()=>({q:e.q||void 0,actor:e.actor||void 0,action:e.action||void 0,severity:e.severity||void 0,limit:e.limit}),[e]);return{summaryQ:c({queryKey:[`adminSummary`],queryFn:g.adminSummary}),statsQ:c({queryKey:[`adminStats`],queryFn:g.adminStats}),usersQ:c({queryKey:[`adminUsers`],queryFn:g.adminUsers}),auditQ:c({queryKey:[`adminAudit`,t],queryFn:()=>g.adminAudit(t)}),securityQ:c({queryKey:[`adminSecurity`],queryFn:g.adminSecurity}),securityEventsQ:c({queryKey:[`adminSecurityEvents`],queryFn:()=>g.adminSecurityEvents(50)}),policiesQ:c({queryKey:[`adminPolicies`],queryFn:g.adminPolicies}),rolesQ:c({queryKey:[`adminRoles`],queryFn:g.adminRoles}),retentionQ:c({queryKey:[`adminLogRetention`],queryFn:g.adminLogRetention}),indexQ:c({queryKey:[`indexStatus`],queryFn:g.indexStatus}),agentRuntimeQ:c({queryKey:[`agentRuntime`],queryFn:g.agentRuntime}),toolRegistryQ:c({queryKey:[`toolRegistryDiagnostics`],queryFn:g.toolRegistryDiagnostics}),healthSummaryQ:c({queryKey:[`adminHealthSummary`],queryFn:g.adminHealthSummary})}}function w({runtime:e,registry:t,language:n}){let r=e?.runtime||{},i=e?.health||{},a=t?.diagnostics||{},o=!!r.ready,s=!!a.ready,c=M(r.unavailable_reason,o?u(n,`admin.runtime.readyDetail`):u(n,`admin.runtime.blockedFallback`));return(0,x.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,x.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.runtime.agent`)}),(0,x.jsx)(`span`,{className:o?`is-ok`:`is-warn`,children:o?u(n,`admin.status.ready`):u(n,`admin.status.unavailable`)}),(0,x.jsx)(`small`,{children:c})]}),(0,x.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.runtime.tools`)}),(0,x.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?u(n,`admin.runtime.aligned`):u(n,`admin.runtime.drift`)}),(0,x.jsx)(`small`,{children:u(n,`admin.runtime.toolCounts`,{registered:M(a.registered_tools,`0`),governed:M(a.governed_tools,`0`),described:M(a.described_tools,`0`)})})]}),(0,x.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,x.jsx)(`span`,{children:u(n,`admin.runtime.mode`,{mode:M(r.mode,`unknown`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.runtime.execution`,{mode:M(r.execution_mode,`unknown`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.runtime.health`,{status:M(i.status,`unknown`)})})]})]})}function T({filters:e,matched:t,onChange:n,language:r}){return(0,x.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":u(r,`admin.filters.label`),children:[(0,x.jsxs)(`label`,{children:[(0,x.jsx)(o,{className:`h-3.5 w-3.5`}),(0,x.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:u(r,`admin.filters.search`),"aria-label":u(r,`admin.filters.searchAria`)})]}),(0,x.jsxs)(`label`,{children:[(0,x.jsx)(y,{className:`h-3.5 w-3.5`}),(0,x.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":u(r,`admin.filters.severityAria`),children:[(0,x.jsx)(`option`,{value:``,children:u(r,`admin.filters.all`)}),(0,x.jsx)(`option`,{value:`informational`,children:u(r,`admin.filters.informational`)}),(0,x.jsx)(`option`,{value:`notice`,children:u(r,`admin.filters.notice`)}),(0,x.jsx)(`option`,{value:`warning`,children:u(r,`admin.filters.warning`)}),(0,x.jsx)(`option`,{value:`high`,children:u(r,`admin.filters.high`)})]})]}),(0,x.jsx)(`span`,{children:u(r,`admin.filters.matched`,{count:M(t?.matched_events,`0`)})})]})}function E({eyebrow:e,title:t,children:n}){return(0,x.jsxs)(`section`,{className:`admin-panel`,children:[(0,x.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,x.jsx)(`span`,{children:e}),(0,x.jsx)(`h2`,{children:t})]}),n]})}function D({items:e,empty:t,render:n}){return e.length?(0,x.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,x.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,x.jsx)(`div`,{className:`admin-empty`,children:t})}function O(e,t){let n=M(e.action||e.event||e.type||e.name,u(t,`admin.log.event`)),r=M(e.actor||e.user||e.user_id||e.workspace_id,u(t,`admin.log.system`)),i=M(e.timestamp||e.time||e.created_at||e.ts,u(t,`admin.log.recently`));return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`strong`,{children:n}),(0,x.jsxs)(`span`,{children:[r,` · `,i]})]})}function k(e,t){return N(p(e)?e:{},[t,`health`,`state`,`overall_status`])}function A(e,t){let n=p(e)?e:{},r=n.documents??n.document_count??n.docs,i=n.chunks??n.chunk_count??n.vectors;return r!==void 0||i!==void 0?`${M(r,`0`)} docs · ${M(i,`0`)} chunks`:N(n,[`message`,`detail`,`status`],u(t,`admin.index.ready`))}function j(e){return N(p(e)?e:{},[`summary`,`message`,`status`,`detail`])}function M(e,t=``){return typeof e==`string`&&e.trim()?e:typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`boolean`?e?`true`:`false`:t}function N(e,t,n=``){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t;if(typeof t==`number`&&Number.isFinite(t))return String(t)}return n}export{S as AdminConsole};
|
|
1
|
+
import{i as e,n as t,t as n}from"./jsx-runtime-bzQ4Vb5N.js";import{n as r}from"./QueryClientProvider-B3OjqSyJ.js";import{t as i}from"./useMutation-Bi0PXQMC.js";import{t as a}from"./arrow-left-DOnpwsVV.js";import{t as o}from"./search-BwMK0hjs.js";import{A as s,H as c,R as l,S as u,c as d,k as f,p,r as m,s as h,v as g,z as _}from"./index-DCT79wzR.js";import{t as v}from"./button-xXPeemQr.js";import"./workspace-BsxrRYQI.js";var y=l(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),b=e(t()),x=n();function S({onBack:e}){let t=r(),n=_(e=>e.language),[o,c]=b.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:l,statsQ:p,usersQ:y,auditQ:S,securityQ:N,securityEventsQ:P,policiesQ:F,rolesQ:I,retentionQ:L,indexQ:R,agentRuntimeQ:z,toolRegistryQ:B,healthSummaryQ:V}=C(o),H=i({mutationFn:g.rebuildIndex,onSuccess:()=>void t.invalidateQueries({queryKey:[`indexStatus`]})}),U=d(y.data?.data),W=d(S.data?.data?.recent_events),G=d(P.data?.data?.events),K=d(F.data?.data?.policies),q=d(I.data?.data?.roles),J=L.data?.data||{},Y=V.data?.data||V.data,X=Y?.status===`attention`||typeof Y?.issue_count==`number`&&Y.issue_count>0;return(0,x.jsxs)(`main`,{className:`admin-console`,"aria-label":u(n,`admin.aria.console`),children:[(0,x.jsxs)(`header`,{className:`admin-console-header`,children:[(0,x.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,x.jsx)(a,{className:`h-4 w-4`}),u(n,`admin.back`)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{children:u(n,`admin.kicker`)}),(0,x.jsx)(`h1`,{children:u(n,`admin.title`)}),(0,x.jsx)(`p`,{children:u(n,`admin.body`)})]}),(0,x.jsx)(h,{compact:!0})]}),(0,x.jsxs)(`section`,{className:`admin-metrics-statement`,"aria-label":u(n,`admin.overview`),children:[(0,x.jsxs)(`div`,{className:`admin-metrics-statement-main`,children:[(0,x.jsx)(f,{className:`h-4 w-4 ${X?`is-warn`:`is-ok`}`}),(0,x.jsx)(`span`,{children:X?u(n,`admin.health.attention`,{count:String(Y?.issue_count||1)}):u(n,`admin.health.ok`)})]}),(0,x.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:u(n,`admin.summaryStatement`,{users:U.length,logs:W.length+G.length,security:k(N.data?.data,`status`)||(N.data?.ok?u(n,`admin.status.ready`):u(n,`admin.status.unavailable`)),index:k(R.data?.data,`status`)||(R.data?.ok?u(n,`admin.status.indexed`):u(n,`admin.status.unknown`))})})]}),(0,x.jsxs)(`section`,{className:`admin-accordion-list flex flex-col gap-4 mt-4`,children:[(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,open:!0,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.users`),` · `,u(n,`admin.panel.people`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-users`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.users`),eyebrow:u(n,`admin.panel.people`),children:(0,x.jsx)(D,{items:U.slice(0,8),empty:u(n,`admin.empty.users`),render:e=>{let t=e;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`strong`,{children:M(t.name||t.email||t.id,u(n,`admin.fallback.localUser`))}),(0,x.jsx)(`span`,{children:M(t.role||t.status||t.workspace_id,u(n,`admin.fallback.member`))})]})}})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.roles`),` · `,u(n,`admin.panel.access`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-roles`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.roles`),eyebrow:u(n,`admin.panel.access`),children:(0,x.jsx)(D,{items:q.slice(0,6),empty:u(n,`admin.empty.roles`),render:e=>{let t=e;return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`strong`,{children:[M(t.role,u(n,`admin.fallback.role`)),` · `,M(t.members,`0`),` `,u(n,`admin.metric.users`)]}),(0,x.jsx)(`span`,{children:d(t.caps).slice(0,4).map(e=>M(e,``)).filter(Boolean).join(`, `)||u(n,`admin.fallback.noCaps`)})]})}})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.logs`),` · `,u(n,`admin.panel.audit`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-logs`,children:(0,x.jsxs)(E,{title:u(n,`admin.panel.logs`),eyebrow:u(n,`admin.panel.audit`),children:[(0,x.jsx)(T,{language:n,filters:o,onChange:c,matched:S.data?.data?.filters}),(0,x.jsx)(D,{items:W.slice(0,8),empty:u(n,`admin.empty.audit`),render:e=>O(e,n)})]})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.securityEvents`),` · `,u(n,`admin.panel.protection`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-security`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.securityEvents`),eyebrow:u(n,`admin.panel.protection`),children:(0,x.jsx)(D,{items:G.slice(0,8),empty:u(n,`admin.empty.security`),render:e=>O(e,n)})})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.brainOps`),` · `,u(n,`admin.panel.maintenance`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-brain-ops`,children:(0,x.jsxs)(E,{title:u(n,`admin.panel.brainOps`),eyebrow:u(n,`admin.panel.maintenance`),children:[(0,x.jsxs)(`div`,{className:`admin-operation`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`strong`,{children:A(R.data?.data,n)}),(0,x.jsx)(`span`,{children:j(l.data?.data)||j(p.data?.data)||u(n,`admin.brain.summaryFallback`)})]}),(0,x.jsxs)(v,{variant:`outline`,size:`sm`,disabled:H.isPending,onClick:()=>H.mutate(),children:[(0,x.jsx)(s,{className:`h-3.5 w-3.5`}),H.isPending?u(n,`admin.brain.rebuilding`):u(n,`admin.brain.rebuild`)]})]}),(0,x.jsxs)(`div`,{className:`admin-policy-strip`,children:[K.slice(0,5).map((e,t)=>{let r=e;return(0,x.jsx)(`span`,{children:M(r.label||r.name||r.id,u(n,`admin.policy.fallback`))},`${M(r.id||r.name,`policy`)}-${t}`)}),K.length?null:(0,x.jsx)(`span`,{children:u(n,`admin.policy.quiet`)})]}),(0,x.jsxs)(`div`,{className:`admin-retention`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.retention.days`,{days:M(J.retention_days,`90`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.retention.detail`,{events:M(J.retained_events,`0`),candidates:M(J.prune_candidates,`0`)})})]})]})})]}),(0,x.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,x.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,x.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[u(n,`admin.panel.runtimeTrust`),` · `,u(n,`admin.panel.contracts`)]})}),(0,x.jsx)(m,{surface:`panel`,resetKey:`admin-runtime`,children:(0,x.jsx)(E,{title:u(n,`admin.panel.runtimeTrust`),eyebrow:u(n,`admin.panel.contracts`),children:(0,x.jsx)(w,{runtime:z.data?.data,registry:B.data?.data,language:n})})})]})]})]})}function C(e){let t=b.useMemo(()=>({q:e.q||void 0,actor:e.actor||void 0,action:e.action||void 0,severity:e.severity||void 0,limit:e.limit}),[e]);return{summaryQ:c({queryKey:[`adminSummary`],queryFn:g.adminSummary}),statsQ:c({queryKey:[`adminStats`],queryFn:g.adminStats}),usersQ:c({queryKey:[`adminUsers`],queryFn:g.adminUsers}),auditQ:c({queryKey:[`adminAudit`,t],queryFn:()=>g.adminAudit(t)}),securityQ:c({queryKey:[`adminSecurity`],queryFn:g.adminSecurity}),securityEventsQ:c({queryKey:[`adminSecurityEvents`],queryFn:()=>g.adminSecurityEvents(50)}),policiesQ:c({queryKey:[`adminPolicies`],queryFn:g.adminPolicies}),rolesQ:c({queryKey:[`adminRoles`],queryFn:g.adminRoles}),retentionQ:c({queryKey:[`adminLogRetention`],queryFn:g.adminLogRetention}),indexQ:c({queryKey:[`indexStatus`],queryFn:g.indexStatus}),agentRuntimeQ:c({queryKey:[`agentRuntime`],queryFn:g.agentRuntime}),toolRegistryQ:c({queryKey:[`toolRegistryDiagnostics`],queryFn:g.toolRegistryDiagnostics}),healthSummaryQ:c({queryKey:[`adminHealthSummary`],queryFn:g.adminHealthSummary})}}function w({runtime:e,registry:t,language:n}){let r=e?.runtime||{},i=e?.health||{},a=t?.diagnostics||{},o=!!r.ready,s=!!a.ready,c=M(r.unavailable_reason,o?u(n,`admin.runtime.readyDetail`):u(n,`admin.runtime.blockedFallback`));return(0,x.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,x.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.runtime.agent`)}),(0,x.jsx)(`span`,{className:o?`is-ok`:`is-warn`,children:o?u(n,`admin.status.ready`):u(n,`admin.status.unavailable`)}),(0,x.jsx)(`small`,{children:c})]}),(0,x.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,x.jsx)(`strong`,{children:u(n,`admin.runtime.tools`)}),(0,x.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?u(n,`admin.runtime.aligned`):u(n,`admin.runtime.drift`)}),(0,x.jsx)(`small`,{children:u(n,`admin.runtime.toolCounts`,{registered:M(a.registered_tools,`0`),governed:M(a.governed_tools,`0`),described:M(a.described_tools,`0`)})})]}),(0,x.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,x.jsx)(`span`,{children:u(n,`admin.runtime.mode`,{mode:M(r.mode,`unknown`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.runtime.execution`,{mode:M(r.execution_mode,`unknown`)})}),(0,x.jsx)(`span`,{children:u(n,`admin.runtime.health`,{status:M(i.status,`unknown`)})})]})]})}function T({filters:e,matched:t,onChange:n,language:r}){return(0,x.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":u(r,`admin.filters.label`),children:[(0,x.jsxs)(`label`,{children:[(0,x.jsx)(o,{className:`h-3.5 w-3.5`}),(0,x.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:u(r,`admin.filters.search`),"aria-label":u(r,`admin.filters.searchAria`)})]}),(0,x.jsxs)(`label`,{children:[(0,x.jsx)(y,{className:`h-3.5 w-3.5`}),(0,x.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":u(r,`admin.filters.severityAria`),children:[(0,x.jsx)(`option`,{value:``,children:u(r,`admin.filters.all`)}),(0,x.jsx)(`option`,{value:`informational`,children:u(r,`admin.filters.informational`)}),(0,x.jsx)(`option`,{value:`notice`,children:u(r,`admin.filters.notice`)}),(0,x.jsx)(`option`,{value:`warning`,children:u(r,`admin.filters.warning`)}),(0,x.jsx)(`option`,{value:`high`,children:u(r,`admin.filters.high`)})]})]}),(0,x.jsx)(`span`,{children:u(r,`admin.filters.matched`,{count:M(t?.matched_events,`0`)})})]})}function E({eyebrow:e,title:t,children:n}){return(0,x.jsxs)(`section`,{className:`admin-panel`,children:[(0,x.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,x.jsx)(`span`,{children:e}),(0,x.jsx)(`h2`,{children:t})]}),n]})}function D({items:e,empty:t,render:n}){return e.length?(0,x.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,x.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,x.jsx)(`div`,{className:`admin-empty`,children:t})}function O(e,t){let n=M(e.action||e.event||e.type||e.name,u(t,`admin.log.event`)),r=M(e.actor||e.user||e.user_id||e.workspace_id,u(t,`admin.log.system`)),i=M(e.timestamp||e.time||e.created_at||e.ts,u(t,`admin.log.recently`));return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`strong`,{children:n}),(0,x.jsxs)(`span`,{children:[r,` · `,i]})]})}function k(e,t){return N(p(e)?e:{},[t,`health`,`state`,`overall_status`])}function A(e,t){let n=p(e)?e:{},r=n.documents??n.document_count??n.docs,i=n.chunks??n.chunk_count??n.vectors;return r!==void 0||i!==void 0?`${M(r,`0`)} docs · ${M(i,`0`)} chunks`:N(n,[`message`,`detail`,`status`],u(t,`admin.index.ready`))}function j(e){return N(p(e)?e:{},[`summary`,`message`,`status`,`detail`])}function M(e,t=``){return typeof e==`string`&&e.trim()?e:typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`boolean`?e?`true`:`false`:t}function N(e,t,n=``){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t;if(typeof t==`number`&&Number.isFinite(t))return String(t)}return n}export{S as AdminConsole};
|