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.
Files changed (72) hide show
  1. package/README.md +85 -84
  2. package/docs/CHANGELOG.md +30 -4
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +11 -11
  5. package/docs/ONBOARDING.md +1 -1
  6. package/docs/OPERATIONS.md +1 -1
  7. package/docs/ROADMAP.md +8 -8
  8. package/docs/TRUST_MODEL.md +2 -2
  9. package/docs/WHY_LATTICE.md +1 -1
  10. package/docs/kg-schema.md +1 -1
  11. package/lattice_brain/__init__.py +1 -1
  12. package/latticeai/__init__.py +1 -1
  13. package/latticeai/core/vector_index/hnsw.py +49 -10
  14. package/latticeai/core/vector_index/sidecar.py +120 -31
  15. package/latticeai/services/architecture_readiness.py +1 -1
  16. package/latticeai/services/product_readiness.py +2 -2
  17. package/package.json +1 -1
  18. package/scripts/check_current_release_docs.mjs +1 -1
  19. package/scripts/release_screen_claims.json +11 -0
  20. package/src-tauri/Cargo.lock +10 -10
  21. package/src-tauri/Cargo.toml +1 -1
  22. package/src-tauri/tauri.conf.json +1 -1
  23. package/static/app/asset-manifest.json +44 -44
  24. package/static/app/assets/{Act-BjGgeuQd.js → Act-DC676bqE.js} +2 -2
  25. package/static/app/assets/{AdminConsole-C6hcJGMr.js → AdminConsole-aCxQgD2L.js} +1 -1
  26. package/static/app/assets/{Brain-CNQnIaA8.js → Brain-Dbd0xvsc.js} +2 -2
  27. package/static/app/assets/{BrainHome-CGJ6O69l.js → BrainHome-N00B-MAJ.js} +1 -1
  28. package/static/app/assets/{BrainSignals-DONPljxz.js → BrainSignals-CNA0d6xS.js} +1 -1
  29. package/static/app/assets/{Capture-BMCC5544.js → Capture-BB19fo7P.js} +1 -1
  30. package/static/app/assets/{Chronicle-DF6sOonx.js → Chronicle-D8p3dqxZ.js} +1 -1
  31. package/static/app/assets/{CommandPalette-DiWyutdM.js → CommandPalette-uVFYAa-6.js} +1 -1
  32. package/static/app/assets/{DigitalBrainExplorer-BL3V6Dqz.js → DigitalBrainExplorer-mH6ZSuvK.js} +1 -1
  33. package/static/app/assets/{Library-B-ue9hXL.js → Library-0q8Sdke7.js} +1 -1
  34. package/static/app/assets/{LivingBrain-b1RiM5Rh.js → LivingBrain-wess-qJZ.js} +1 -1
  35. package/static/app/assets/ProductFlow-DeBGF6qz.js +1 -0
  36. package/static/app/assets/{ReviewCard-D1fGTEn7.js → ReviewCard-DyTrDpy0.js} +1 -1
  37. package/static/app/assets/{RunsListPanel-DAirtLkS.js → RunsListPanel-CHJv2Qyw.js} +1 -1
  38. package/static/app/assets/{System-BEI1eoC4.js → System-CyKGHQrW.js} +1 -1
  39. package/static/app/assets/{WorkflowGraph-qrI6GU4R.js → WorkflowGraph-B5nKCCGa.js} +1 -1
  40. package/static/app/assets/{WorkflowsPanel-CIMNTw-O.js → WorkflowsPanel-C7RZNRGo.js} +2 -2
  41. package/static/app/assets/{actHelpers-BMukIRnQ.js → actHelpers-6MYDH2kW.js} +1 -1
  42. package/static/app/assets/arrow-left-DOnpwsVV.js +1 -0
  43. package/static/app/assets/{bot-Dkd-DbiP.js → bot-Dm3fmXAE.js} +1 -1
  44. package/static/app/assets/{brain-BsexlNOA.js → brain-C2XwdQL1.js} +1 -1
  45. package/static/app/assets/{button-BA0N_zId.js → button-xXPeemQr.js} +1 -1
  46. package/static/app/assets/circle-check-D44VI2ZE.js +1 -0
  47. package/static/app/assets/{circle-pause-918Kuvk0.js → circle-pause-B_lmNicW.js} +1 -1
  48. package/static/app/assets/{circle-play-CS0IbVDV.js → circle-play-DSYCP0RD.js} +1 -1
  49. package/static/app/assets/{cpu-BpvoWsjk.js → cpu-D7x-dtxi.js} +1 -1
  50. package/static/app/assets/{download-BvkMLLLN.js → download-BHuJr-5V.js} +1 -1
  51. package/static/app/assets/{folder-open-YmGugIBf.js → folder-open-BiO31EwS.js} +1 -1
  52. package/static/app/assets/{hard-drive-BOzmS-cq.js → hard-drive-CFEaZ-wP.js} +1 -1
  53. package/static/app/assets/{index-CfeqZ9Ri.js → index-DCT79wzR.js} +3 -3
  54. package/static/app/assets/{input-CFfCfMjO.js → input-D3YrgxvO.js} +1 -1
  55. package/static/app/assets/{link-2-CcYzeM7M.js → link-2-3O-By3qc.js} +1 -1
  56. package/static/app/assets/{permissionCopy-B23r24oX.js → permissionCopy-CNK2tfkz.js} +1 -1
  57. package/static/app/assets/{primitives-BDryQl6H.js → primitives-B6DzQC3H.js} +1 -1
  58. package/static/app/assets/search-BwMK0hjs.js +1 -0
  59. package/static/app/assets/{share-2-B-gPv2ec.js → share-2-BljIPAku.js} +1 -1
  60. package/static/app/assets/{shield-alert-CfyRO1p0.js → shield-alert-WDP2DSTM.js} +1 -1
  61. package/static/app/assets/{sourceMeta-C4LDEy1S.js → sourceMeta-By2WIjlN.js} +1 -1
  62. package/static/app/assets/{textarea-BdVMYEb1.js → textarea-5v8vtDlK.js} +1 -1
  63. package/static/app/assets/{useFocusTrap-CV73DLHn.js → useFocusTrap-ssiDeh6P.js} +1 -1
  64. package/static/app/assets/{useMutation-B8QKq2NW.js → useMutation-Bi0PXQMC.js} +1 -1
  65. package/static/app/assets/workspace-BsxrRYQI.js +1 -0
  66. package/static/app/index.html +1 -1
  67. package/static/sw.js +1 -1
  68. package/static/app/assets/ProductFlow-wZIKJW7G.js +0 -1
  69. package/static/app/assets/arrow-left-iVa1goff.js +0 -1
  70. package/static/app/assets/circle-check-BxaDWjPR.js +0 -1
  71. package/static/app/assets/search-DHsPwmPw.js +0 -1
  72. 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"``. Staleness is
6
- sidecar size vs ``COUNT(*)`` for that identity — reported honestly, and
7
- refreshed through :meth:`HnswIndex.add_items` so an ingest append does not
8
- rebuild the whole graph.
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
- conn = _open_readonly(path)
189
- store_size = 0
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(path, fingerprint=sidecar_fingerprint(model_id, dim, store_size))
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
- if not items and store_size > 0:
221
- conn = _open_readonly(path)
222
- if conn is not None:
223
- try:
224
- items = load_store_items(conn, model_id, dim)
225
- finally:
226
- conn.close()
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
- stale = cached_size != len(items)
232
- elif store_size == 0:
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
  ]
@@ -19,7 +19,7 @@ from dataclasses import dataclass
19
19
  from pathlib import Path
20
20
  from typing import Any, Dict, List
21
21
 
22
- ARCHITECTURE_VERSION_TARGET = "12.2.0"
22
+ ARCHITECTURE_VERSION_TARGET = "12.2.1"
23
23
 
24
24
  PREFERRED_REFACTORING_ORDER = [
25
25
  "agent-runtime",
@@ -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.0"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "12.2.0",
3
+ "version": "12.2.1",
4
4
  "description": "Lattice AI — local-first Digital Brain that keeps your knowledge durable across any AI model.",
5
5
  "homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
6
6
  "repository": {
@@ -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 = "Small Voice";
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.",
@@ -1863,7 +1863,7 @@ dependencies = [
1863
1863
 
1864
1864
  [[package]]
1865
1865
  name = "lattice-agent"
1866
- version = "12.2.0"
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.0"
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.0"
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.0"
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.0"
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.0"
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.0"
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.0"
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.0"
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.0"
2027
+ version = "12.2.1"
2028
2028
  dependencies = [
2029
2029
  "axum",
2030
2030
  "fancy-regex",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "lattice-ai-desktop"
3
- version = "12.2.0"
3
+ version = "12.2.1"
4
4
  description = "Lattice AI Digital Brain desktop shell"
5
5
  authors = ["TaeSoo Park"]
6
6
  edition = "2021"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schema.tauri.app/config/2",
3
3
  "productName": "Lattice AI",
4
- "version": "12.2.0",
4
+ "version": "12.2.1",
5
5
  "identifier": "ai.lattice.desktop",
6
6
  "build": {
7
7
  "beforeDevCommand": "npm run frontend:dev",
@@ -1,55 +1,55 @@
1
1
  {
2
- "version": "12.2.0",
2
+ "version": "12.2.1",
3
3
  "generated_at": "vite",
4
4
  "entrypoints": {
5
- "app": "/static/app/assets/index-CfeqZ9Ri.js"
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-DONPljxz.js": "/static/app/assets/BrainSignals-DONPljxz.js",
10
- "_LivingBrain-b1RiM5Rh.js": "/static/app/assets/LivingBrain-b1RiM5Rh.js",
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-D1fGTEn7.js": "/static/app/assets/ReviewCard-D1fGTEn7.js",
13
- "_actHelpers-BMukIRnQ.js": "/static/app/assets/actHelpers-BMukIRnQ.js",
14
- "_arrow-left-iVa1goff.js": "/static/app/assets/arrow-left-iVa1goff.js",
15
- "_bot-Dkd-DbiP.js": "/static/app/assets/bot-Dkd-DbiP.js",
16
- "_brain-BsexlNOA.js": "/static/app/assets/brain-BsexlNOA.js",
17
- "_button-BA0N_zId.js": "/static/app/assets/button-BA0N_zId.js",
18
- "_circle-check-BxaDWjPR.js": "/static/app/assets/circle-check-BxaDWjPR.js",
19
- "_circle-pause-918Kuvk0.js": "/static/app/assets/circle-pause-918Kuvk0.js",
20
- "_circle-play-CS0IbVDV.js": "/static/app/assets/circle-play-CS0IbVDV.js",
21
- "_cpu-BpvoWsjk.js": "/static/app/assets/cpu-BpvoWsjk.js",
22
- "_download-BvkMLLLN.js": "/static/app/assets/download-BvkMLLLN.js",
23
- "_folder-open-YmGugIBf.js": "/static/app/assets/folder-open-YmGugIBf.js",
24
- "_hard-drive-BOzmS-cq.js": "/static/app/assets/hard-drive-BOzmS-cq.js",
25
- "_input-CFfCfMjO.js": "/static/app/assets/input-CFfCfMjO.js",
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-CcYzeM7M.js": "/static/app/assets/link-2-CcYzeM7M.js",
28
- "_permissionCopy-B23r24oX.js": "/static/app/assets/permissionCopy-B23r24oX.js",
29
- "_primitives-BDryQl6H.js": "/static/app/assets/primitives-BDryQl6H.js",
30
- "_search-DHsPwmPw.js": "/static/app/assets/search-DHsPwmPw.js",
31
- "_share-2-B-gPv2ec.js": "/static/app/assets/share-2-B-gPv2ec.js",
32
- "_shield-alert-CfyRO1p0.js": "/static/app/assets/shield-alert-CfyRO1p0.js",
33
- "_sourceMeta-C4LDEy1S.js": "/static/app/assets/sourceMeta-C4LDEy1S.js",
34
- "_textarea-BdVMYEb1.js": "/static/app/assets/textarea-BdVMYEb1.js",
35
- "_useFocusTrap-CV73DLHn.js": "/static/app/assets/useFocusTrap-CV73DLHn.js",
36
- "_useMutation-B8QKq2NW.js": "/static/app/assets/useMutation-B8QKq2NW.js",
37
- "_workspace-BmfVs66W.js": "/static/app/assets/workspace-BmfVs66W.js",
38
- "index.html": "/static/app/assets/index-CfeqZ9Ri.js",
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-wZIKJW7G.js",
41
- "src/features/act/RunsListPanel.tsx": "/static/app/assets/RunsListPanel-DAirtLkS.js",
42
- "src/features/act/WorkflowGraph.tsx": "/static/app/assets/WorkflowGraph-qrI6GU4R.js",
43
- "src/features/act/WorkflowsPanel.tsx": "/static/app/assets/WorkflowsPanel-CIMNTw-O.js",
44
- "src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-C6hcJGMr.js",
45
- "src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-CGJ6O69l.js",
46
- "src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-DiWyutdM.js",
47
- "src/pages/Act.tsx": "/static/app/assets/Act-BjGgeuQd.js",
48
- "src/pages/Brain.tsx": "/static/app/assets/Brain-CNQnIaA8.js",
49
- "src/pages/Capture.tsx": "/static/app/assets/Capture-BMCC5544.js",
50
- "src/pages/Chronicle.tsx": "/static/app/assets/Chronicle-DF6sOonx.js",
51
- "src/pages/Library.tsx": "/static/app/assets/Library-B-ue9hXL.js",
52
- "src/pages/System.tsx": "/static/app/assets/System-BEI1eoC4.js",
53
- "src/pages/brain/DigitalBrainExplorer.tsx": "/static/app/assets/DigitalBrainExplorer-BL3V6Dqz.js"
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-DAirtLkS.js","assets/jsx-runtime-bzQ4Vb5N.js","assets/index-CfeqZ9Ri.js","assets/QueryClientProvider-B3OjqSyJ.js","assets/index-C8gwOf0C.css","assets/primitives-BDryQl6H.js","assets/button-BA0N_zId.js","assets/useMutation-B8QKq2NW.js","assets/circle-check-BxaDWjPR.js","assets/actHelpers-BMukIRnQ.js","assets/circle-play-CS0IbVDV.js","assets/workspace-BmfVs66W.js","assets/WorkflowsPanel-CIMNTw-O.js","assets/input-CFfCfMjO.js","assets/textarea-BdVMYEb1.js","assets/folder-open-YmGugIBf.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-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};