ltcai 10.0.0 → 10.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +43 -32
  2. package/docs/CHANGELOG.md +204 -0
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/HYBRID_CLOUD_KG_STREAMING.md +101 -0
  6. package/docs/MYPY_BACKLOG.md +98 -0
  7. package/docs/ONBOARDING.md +1 -1
  8. package/docs/OPERATIONS.md +1 -1
  9. package/docs/TRUST_MODEL.md +1 -1
  10. package/docs/WHY_LATTICE.md +1 -1
  11. package/docs/kg-schema.md +1 -1
  12. package/lattice_brain/__init__.py +1 -1
  13. package/lattice_brain/archive.py +5 -4
  14. package/lattice_brain/conversations.py +14 -3
  15. package/lattice_brain/embeddings.py +12 -2
  16. package/lattice_brain/graph/_kg_common.py +5 -5
  17. package/lattice_brain/graph/_kg_fsutil.py +5 -4
  18. package/lattice_brain/graph/discovery.py +4 -3
  19. package/lattice_brain/graph/discovery_index.py +0 -1
  20. package/lattice_brain/graph/documents.py +3 -2
  21. package/lattice_brain/graph/fusion.py +4 -0
  22. package/lattice_brain/graph/ingest.py +12 -2
  23. package/lattice_brain/graph/projection.py +3 -2
  24. package/lattice_brain/graph/provenance.py +5 -3
  25. package/lattice_brain/graph/rerank.py +4 -1
  26. package/lattice_brain/graph/retrieval.py +0 -1
  27. package/lattice_brain/graph/retrieval_docgen.py +0 -1
  28. package/lattice_brain/graph/retrieval_reads.py +0 -1
  29. package/lattice_brain/graph/retrieval_vector.py +0 -1
  30. package/lattice_brain/graph/schema.py +4 -3
  31. package/lattice_brain/graph/store.py +18 -4
  32. package/lattice_brain/graph/write_master.py +46 -1
  33. package/lattice_brain/ingestion.py +4 -1
  34. package/lattice_brain/portability.py +5 -2
  35. package/lattice_brain/quality.py +12 -5
  36. package/lattice_brain/quiet.py +43 -0
  37. package/lattice_brain/runtime/agent_runtime.py +19 -10
  38. package/lattice_brain/runtime/hooks.py +3 -2
  39. package/lattice_brain/runtime/multi_agent.py +2 -3
  40. package/lattice_brain/sensitivity.py +94 -0
  41. package/lattice_brain/storage/base.py +30 -2
  42. package/lattice_brain/storage/migration.py +3 -2
  43. package/lattice_brain/storage/postgres.py +2 -2
  44. package/lattice_brain/storage/sqlite.py +6 -4
  45. package/lattice_brain/workflow.py +4 -2
  46. package/latticeai/__init__.py +1 -1
  47. package/latticeai/api/admin.py +1 -1
  48. package/latticeai/api/agents.py +4 -2
  49. package/latticeai/api/auth.py +5 -1
  50. package/latticeai/api/automation_intelligence.py +2 -1
  51. package/latticeai/api/browser.py +3 -2
  52. package/latticeai/api/chat.py +28 -17
  53. package/latticeai/api/chat_agent_http.py +22 -8
  54. package/latticeai/api/chat_contracts.py +4 -0
  55. package/latticeai/api/chat_documents.py +6 -2
  56. package/latticeai/api/chat_hybrid.py +82 -0
  57. package/latticeai/api/computer_use.py +8 -3
  58. package/latticeai/api/knowledge_graph.py +1 -1
  59. package/latticeai/api/mcp.py +4 -4
  60. package/latticeai/api/models.py +5 -2
  61. package/latticeai/api/network_boundary.py +220 -0
  62. package/latticeai/api/permissions.py +0 -1
  63. package/latticeai/api/realtime.py +1 -1
  64. package/latticeai/api/security_dashboard.py +1 -1
  65. package/latticeai/api/setup.py +16 -3
  66. package/latticeai/api/static_routes.py +2 -1
  67. package/latticeai/api/tools.py +12 -8
  68. package/latticeai/api/voice_capture.py +3 -1
  69. package/latticeai/api/workflow_designer.py +1 -1
  70. package/latticeai/api/workspace.py +1 -2
  71. package/latticeai/app_factory.py +174 -145
  72. package/latticeai/cli/entrypoint.py +6 -4
  73. package/latticeai/core/agent.py +55 -495
  74. package/latticeai/core/agent_eval.py +2 -2
  75. package/latticeai/core/agent_helpers.py +493 -0
  76. package/latticeai/core/agent_prompts.py +0 -1
  77. package/latticeai/core/agent_registry.py +3 -1
  78. package/latticeai/core/agent_state.py +41 -0
  79. package/latticeai/core/audit.py +1 -1
  80. package/latticeai/core/builtin_hooks.py +2 -1
  81. package/latticeai/core/config.py +0 -1
  82. package/latticeai/core/embedding_providers.py +12 -1
  83. package/latticeai/core/file_generation.py +3 -0
  84. package/latticeai/core/invitations.py +4 -1
  85. package/latticeai/core/io_utils.py +3 -1
  86. package/latticeai/core/legacy_compatibility.py +1 -2
  87. package/latticeai/core/local_embeddings.py +12 -1
  88. package/latticeai/core/marketplace.py +1 -2
  89. package/latticeai/core/mcp_registry.py +0 -1
  90. package/latticeai/core/model_compat.py +1 -1
  91. package/latticeai/core/model_resolution.py +1 -1
  92. package/latticeai/core/network_boundary.py +168 -0
  93. package/latticeai/core/oidc.py +3 -0
  94. package/latticeai/core/permission_mode.py +6 -6
  95. package/latticeai/core/plugins.py +3 -2
  96. package/latticeai/core/policy.py +0 -1
  97. package/latticeai/core/quiet.py +84 -0
  98. package/latticeai/core/realtime.py +3 -2
  99. package/latticeai/core/run_store.py +4 -2
  100. package/latticeai/core/security.py +4 -0
  101. package/latticeai/core/users.py +5 -3
  102. package/latticeai/core/workspace_graph_trace.py +3 -0
  103. package/latticeai/core/workspace_os.py +65 -273
  104. package/latticeai/core/workspace_os_constants.py +126 -0
  105. package/latticeai/core/workspace_os_state.py +180 -0
  106. package/latticeai/core/workspace_os_utils.py +3 -1
  107. package/latticeai/core/workspace_permissions.py +1 -0
  108. package/latticeai/core/workspace_snapshots.py +3 -1
  109. package/latticeai/core/workspace_timeline.py +3 -1
  110. package/latticeai/integrations/telegram_bot.py +25 -16
  111. package/latticeai/models/router.py +6 -3
  112. package/latticeai/runtime/access_runtime.py +3 -1
  113. package/latticeai/runtime/audit_runtime.py +3 -2
  114. package/latticeai/runtime/chat_wiring.py +4 -1
  115. package/latticeai/runtime/history_runtime.py +1 -1
  116. package/latticeai/runtime/history_writer.py +138 -0
  117. package/latticeai/runtime/lifespan_runtime.py +3 -1
  118. package/latticeai/runtime/network_boundary_wiring.py +124 -0
  119. package/latticeai/runtime/persistence_runtime.py +3 -1
  120. package/latticeai/runtime/router_registration.py +11 -1
  121. package/latticeai/services/architecture_readiness.py +1 -2
  122. package/latticeai/services/change_proposals.py +2 -1
  123. package/latticeai/services/cloud_egress_audit.py +85 -0
  124. package/latticeai/services/cloud_extraction.py +129 -0
  125. package/latticeai/services/cloud_streaming.py +266 -0
  126. package/latticeai/services/cloud_token_guard.py +84 -0
  127. package/latticeai/services/command_center.py +2 -1
  128. package/latticeai/services/folder_watch.py +3 -0
  129. package/latticeai/services/funnel_metrics.py +3 -1
  130. package/latticeai/services/hybrid_chat.py +265 -0
  131. package/latticeai/services/hybrid_context.py +228 -0
  132. package/latticeai/services/hybrid_policy.py +178 -0
  133. package/latticeai/services/memory_service.py +1 -1
  134. package/latticeai/services/model_catalog.py +10 -1
  135. package/latticeai/services/model_engines.py +35 -14
  136. package/latticeai/services/model_loading.py +3 -2
  137. package/latticeai/services/model_runtime.py +68 -17
  138. package/latticeai/services/multimodal_streaming.py +123 -0
  139. package/latticeai/services/network_boundary_service.py +154 -0
  140. package/latticeai/services/openai_compatible_adapter.py +100 -0
  141. package/latticeai/services/p_reinforce.py +4 -0
  142. package/latticeai/services/platform_runtime.py +9 -4
  143. package/latticeai/services/process_audit.py +0 -1
  144. package/latticeai/services/product_readiness.py +1 -1
  145. package/latticeai/services/run_executor.py +3 -2
  146. package/latticeai/services/search_service.py +1 -4
  147. package/latticeai/services/setup_detection.py +2 -1
  148. package/latticeai/services/tool_dispatch.py +7 -2
  149. package/latticeai/services/upload_service.py +2 -1
  150. package/latticeai/setup/auto_setup.py +10 -7
  151. package/latticeai/setup/wizard.py +15 -11
  152. package/latticeai/tools/__init__.py +3 -3
  153. package/latticeai/tools/commands.py +7 -7
  154. package/latticeai/tools/computer.py +3 -2
  155. package/latticeai/tools/documents.py +10 -9
  156. package/latticeai/tools/filesystem.py +7 -4
  157. package/latticeai/tools/knowledge.py +2 -0
  158. package/latticeai/tools/local_files.py +1 -1
  159. package/latticeai/tools/network.py +2 -1
  160. package/package.json +7 -3
  161. package/scripts/bench_agent_smoke.py +0 -1
  162. package/scripts/bench_models.py +0 -1
  163. package/scripts/brain_quality_eval.py +7 -2
  164. package/scripts/bump_version.py +2 -1
  165. package/scripts/check_current_release_docs.mjs +1 -1
  166. package/scripts/migrate_brain_storage.py +5 -1
  167. package/scripts/profile_kg.py +2 -7
  168. package/scripts/verify_hf_model_registry.py +2 -2
  169. package/src-tauri/Cargo.lock +1 -1
  170. package/src-tauri/Cargo.toml +1 -1
  171. package/src-tauri/tauri.conf.json +1 -1
  172. package/static/app/asset-manifest.json +37 -37
  173. package/static/app/assets/{Act-BtCREeN1.js → Act-DrKIGZeJ.js} +1 -1
  174. package/static/app/assets/{AdminConsole-TPeeN18T.js → AdminConsole-CEV1VefA.js} +1 -1
  175. package/static/app/assets/{Brain-BKs6JAp0.js → Brain-BZSXnwWU.js} +1 -1
  176. package/static/app/assets/{BrainHome-BPGOvSd6.js → BrainHome-CEBd86k6.js} +1 -1
  177. package/static/app/assets/{BrainSignals-CtzQZ15J.js → BrainSignals-O4s6R7av.js} +1 -1
  178. package/static/app/assets/{Capture-1_NaHWqB.js → Capture-AGbOxsg-.js} +1 -1
  179. package/static/app/assets/{CommandPalette-pqvQOXe4.js → CommandPalette-CeqBjCn2.js} +1 -1
  180. package/static/app/assets/Library-CXnbNiQW.js +1 -0
  181. package/static/app/assets/{LivingBrain-DlQ20Q75.js → LivingBrain-D9Iei2ZJ.js} +1 -1
  182. package/static/app/assets/{ProductFlow-BZvGDRi_.js → ProductFlow-JlXiDfMM.js} +1 -1
  183. package/static/app/assets/{ReviewCard-BWgI0D2s.js → ReviewCard-QQly2bTV.js} +1 -1
  184. package/static/app/assets/System-Bp9ZY4ER.js +1 -0
  185. package/static/app/assets/{activity-Dlfk8YC7.js → activity-CxRPOQ2F.js} +1 -1
  186. package/static/app/assets/{bot-CDvUB76P.js → bot-1bcsWB2s.js} +1 -1
  187. package/static/app/assets/{brain-xczrohrt.js → brain-CxaeKCRM.js} +1 -1
  188. package/static/app/assets/{button-SOdH3Oyf.js → button-ZYFqGan7.js} +1 -1
  189. package/static/app/assets/{circle-pause-CG1ythH4.js → circle-pause-B5NOIqvk.js} +1 -1
  190. package/static/app/assets/{circle-play-HXwvjS6W.js → circle-play-BiJVFXf7.js} +1 -1
  191. package/static/app/assets/{cpu-B0d-rGyk.js → cpu-Vvq0OKTr.js} +1 -1
  192. package/static/app/assets/{download-BGIkTQL6.js → download-SEcXzkx1.js} +1 -1
  193. package/static/app/assets/{folder-open-Dst_Z0_K.js → folder-open-Dw1ff_Qa.js} +1 -1
  194. package/static/app/assets/{hard-drive-D53MsWkV.js → hard-drive-B00fR7_r.js} +1 -1
  195. package/static/app/assets/index-CEkL4_M-.css +2 -0
  196. package/static/app/assets/{index-C_IrlQMV.js → index-Dm9VXl1o.js} +3 -3
  197. package/static/app/assets/{input-C5m0riF6.js → input-DtdWYQEa.js} +1 -1
  198. package/static/app/assets/{network-C5a-E5iS.js → network-CpjBu0kI.js} +1 -1
  199. package/static/app/assets/{primitives-vNXYf58F.js → primitives-CwsudBwc.js} +1 -1
  200. package/static/app/assets/search-CwEJWBEA.js +1 -0
  201. package/static/app/assets/{shield-alert-Cc-WVXqN.js → shield-alert-CpjBc-gQ.js} +1 -1
  202. package/static/app/assets/{textarea-BkZ0EqVO.js → textarea-DUPyjHQs.js} +1 -1
  203. package/static/app/assets/{useFocusTrap-CTtKbAOU.js → useFocusTrap-BWcMtCWH.js} +1 -1
  204. package/static/app/assets/{useQuery-Dx1fi4Wu.js → useQuery-Dg5fPqTS.js} +1 -1
  205. package/static/app/assets/{users-BFpQXtEF.js → users-BgcdTQGM.js} +1 -1
  206. package/static/app/assets/{utils-BA_lmW3J.js → utils-a3YXFtEO.js} +2 -2
  207. package/static/app/assets/workspace-BMUEiXUm.js +1 -0
  208. package/static/app/index.html +4 -4
  209. package/static/sw.js +1 -1
  210. package/static/app/assets/Library-DhvoPvC7.js +0 -1
  211. package/static/app/assets/System-CSMdYLMy.js +0 -1
  212. package/static/app/assets/index-FxDusbr0.css +0 -2
  213. package/static/app/assets/search-DhbSgW6m.js +0 -1
  214. package/static/app/assets/workspace-DBPB0jkX.js +0 -1
@@ -1 +1 @@
1
- import{S as e,_ as t,b as n,d as r,g as i,m as a,o,t as s,y as c}from"./utils-BA_lmW3J.js";import{r as l,t as u}from"./useQuery-Dx1fi4Wu.js";import{t as d}from"./workspace-DBPB0jkX.js";import{t as f}from"./activity-Dlfk8YC7.js";import{t as p}from"./search-DhbSgW6m.js";import{t as m}from"./users-BFpQXtEF.js";import{a as h,d as g,l as _}from"./index-C_IrlQMV.js";import{t as v}from"./button-SOdH3Oyf.js";var y=i(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),b=i(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),x=i(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),S=e(n()),C=c();function w({onBack:e}){let n=l(),i=t(e=>e.language),[o,c]=S.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:u,statsQ:p,usersQ:b,auditQ:w,securityQ:L,securityEventsQ:R,policiesQ:z,rolesQ:B,retentionQ:V,indexQ:H,agentRuntimeQ:U,toolRegistryQ:W}=T(o),G=d({mutationFn:r.rebuildIndex,onSuccess:()=>void n.invalidateQueries({queryKey:[`indexStatus`]})}),K=s(b.data?.data),q=s(w.data?.data?.recent_events),J=s(R.data?.data?.events),Y=s(z.data?.data?.policies),X=s(B.data?.data?.roles),Z=V.data?.data||{};return(0,C.jsxs)(`main`,{className:`admin-console`,"aria-label":a(i,`admin.aria.console`),children:[(0,C.jsxs)(`header`,{className:`admin-console-header`,children:[(0,C.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,C.jsx)(y,{className:`h-4 w-4`}),a(i,`admin.back`)]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`span`,{children:a(i,`admin.kicker`)}),(0,C.jsx)(`h1`,{children:a(i,`admin.title`)}),(0,C.jsx)(`p`,{children:a(i,`admin.body`)})]}),(0,C.jsx)(h,{compact:!0})]}),(0,C.jsxs)(`section`,{className:`admin-metrics`,"aria-label":a(i,`admin.overview`),children:[(0,C.jsx)(O,{icon:(0,C.jsx)(m,{className:`h-4 w-4`}),label:a(i,`admin.metric.users`),value:String(K.length),detail:M(b.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(f,{className:`h-4 w-4`}),label:a(i,`admin.metric.logs`),value:String(q.length+J.length),detail:M(w.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(_,{className:`h-4 w-4`}),label:a(i,`admin.metric.security`),value:N(L.data?.data,`status`)||(L.data?.ok?a(i,`admin.status.ready`):a(i,`admin.status.unavailable`)),detail:M(L.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(x,{className:`h-4 w-4`}),label:a(i,`admin.metric.index`),value:N(H.data?.data,`status`)||(H.data?.ok?a(i,`admin.status.indexed`):a(i,`admin.status.unknown`)),detail:P(H.data?.data,i)})]}),(0,C.jsxs)(`section`,{className:`admin-grid`,children:[(0,C.jsx)(k,{title:a(i,`admin.panel.users`),eyebrow:a(i,`admin.panel.people`),children:(0,C.jsx)(A,{items:K.slice(0,8),empty:a(i,`admin.empty.users`),render:e=>{let t=e;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`strong`,{children:I(t.name||t.email||t.id,a(i,`admin.fallback.localUser`))}),(0,C.jsx)(`span`,{children:I(t.role||t.status||t.workspace_id,a(i,`admin.fallback.member`))})]})}})}),(0,C.jsx)(k,{title:a(i,`admin.panel.roles`),eyebrow:a(i,`admin.panel.access`),children:(0,C.jsx)(A,{items:X.slice(0,6),empty:a(i,`admin.empty.roles`),render:e=>{let t=e;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`strong`,{children:[I(t.role,a(i,`admin.fallback.role`)),` · `,I(t.members,`0`),` `,a(i,`admin.metric.users`)]}),(0,C.jsx)(`span`,{children:s(t.caps).slice(0,4).map(e=>I(e,``)).filter(Boolean).join(`, `)||a(i,`admin.fallback.noCaps`)})]})}})}),(0,C.jsxs)(k,{title:a(i,`admin.panel.logs`),eyebrow:a(i,`admin.panel.audit`),children:[(0,C.jsx)(D,{language:i,filters:o,onChange:c,matched:w.data?.data?.filters}),(0,C.jsx)(A,{items:q.slice(0,8),empty:a(i,`admin.empty.audit`),render:e=>j(e,i)})]}),(0,C.jsx)(k,{title:a(i,`admin.panel.securityEvents`),eyebrow:a(i,`admin.panel.protection`),children:(0,C.jsx)(A,{items:J.slice(0,8),empty:a(i,`admin.empty.security`),render:e=>j(e,i)})}),(0,C.jsxs)(k,{title:a(i,`admin.panel.brainOps`),eyebrow:a(i,`admin.panel.maintenance`),children:[(0,C.jsxs)(`div`,{className:`admin-operation`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`strong`,{children:P(H.data?.data,i)}),(0,C.jsx)(`span`,{children:F(u.data?.data)||F(p.data?.data)||a(i,`admin.brain.summaryFallback`)})]}),(0,C.jsxs)(v,{variant:`outline`,size:`sm`,disabled:G.isPending,onClick:()=>G.mutate(),children:[(0,C.jsx)(g,{className:`h-3.5 w-3.5`}),G.isPending?a(i,`admin.brain.rebuilding`):a(i,`admin.brain.rebuild`)]})]}),(0,C.jsxs)(`div`,{className:`admin-policy-strip`,children:[Y.slice(0,5).map((e,t)=>{let n=e;return(0,C.jsx)(`span`,{children:I(n.label||n.name||n.id,a(i,`admin.policy.fallback`))},`${I(n.id||n.name,`policy`)}-${t}`)}),Y.length?null:(0,C.jsx)(`span`,{children:a(i,`admin.policy.quiet`)})]}),(0,C.jsxs)(`div`,{className:`admin-retention`,children:[(0,C.jsx)(`strong`,{children:a(i,`admin.retention.days`,{days:I(Z.retention_days,`90`)})}),(0,C.jsx)(`span`,{children:a(i,`admin.retention.detail`,{events:I(Z.retained_events,`0`),candidates:I(Z.prune_candidates,`0`)})})]})]}),(0,C.jsx)(k,{title:a(i,`admin.panel.runtimeTrust`),eyebrow:a(i,`admin.panel.contracts`),children:(0,C.jsx)(E,{runtime:U.data?.data,registry:W.data?.data,language:i})})]})]})}function T(e){let t=S.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:u({queryKey:[`adminSummary`],queryFn:r.adminSummary}),statsQ:u({queryKey:[`adminStats`],queryFn:r.adminStats}),usersQ:u({queryKey:[`adminUsers`],queryFn:r.adminUsers}),auditQ:u({queryKey:[`adminAudit`,t],queryFn:()=>r.adminAudit(t)}),securityQ:u({queryKey:[`adminSecurity`],queryFn:r.adminSecurity}),securityEventsQ:u({queryKey:[`adminSecurityEvents`],queryFn:()=>r.adminSecurityEvents(50)}),policiesQ:u({queryKey:[`adminPolicies`],queryFn:r.adminPolicies}),rolesQ:u({queryKey:[`adminRoles`],queryFn:r.adminRoles}),retentionQ:u({queryKey:[`adminLogRetention`],queryFn:r.adminLogRetention}),indexQ:u({queryKey:[`indexStatus`],queryFn:r.indexStatus}),agentRuntimeQ:u({queryKey:[`agentRuntime`],queryFn:r.agentRuntime}),toolRegistryQ:u({queryKey:[`toolRegistryDiagnostics`],queryFn:r.toolRegistryDiagnostics})}}function E({runtime:e,registry:t,language:n}){let r=e?.runtime||{},i=e?.health||{},o=t?.diagnostics||{},s=!!r.ready,c=!!o.ready,l=I(r.unavailable_reason,s?a(n,`admin.runtime.readyDetail`):a(n,`admin.runtime.blockedFallback`));return(0,C.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,C.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,C.jsx)(`strong`,{children:a(n,`admin.runtime.agent`)}),(0,C.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?a(n,`admin.status.ready`):a(n,`admin.status.unavailable`)}),(0,C.jsx)(`small`,{children:l})]}),(0,C.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,C.jsx)(`strong`,{children:a(n,`admin.runtime.tools`)}),(0,C.jsx)(`span`,{className:c?`is-ok`:`is-warn`,children:c?a(n,`admin.runtime.aligned`):a(n,`admin.runtime.drift`)}),(0,C.jsx)(`small`,{children:a(n,`admin.runtime.toolCounts`,{registered:I(o.registered_tools,`0`),governed:I(o.governed_tools,`0`),described:I(o.described_tools,`0`)})})]}),(0,C.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,C.jsx)(`span`,{children:a(n,`admin.runtime.mode`,{mode:I(r.mode,`unknown`)})}),(0,C.jsx)(`span`,{children:a(n,`admin.runtime.execution`,{mode:I(r.execution_mode,`unknown`)})}),(0,C.jsx)(`span`,{children:a(n,`admin.runtime.health`,{status:I(i.status,`unknown`)})})]})]})}function D({filters:e,matched:t,onChange:n,language:r}){return(0,C.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":a(r,`admin.filters.label`),children:[(0,C.jsxs)(`label`,{children:[(0,C.jsx)(p,{className:`h-3.5 w-3.5`}),(0,C.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:a(r,`admin.filters.search`),"aria-label":a(r,`admin.filters.searchAria`)})]}),(0,C.jsxs)(`label`,{children:[(0,C.jsx)(b,{className:`h-3.5 w-3.5`}),(0,C.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":a(r,`admin.filters.severityAria`),children:[(0,C.jsx)(`option`,{value:``,children:a(r,`admin.filters.all`)}),(0,C.jsx)(`option`,{value:`informational`,children:a(r,`admin.filters.informational`)}),(0,C.jsx)(`option`,{value:`notice`,children:a(r,`admin.filters.notice`)}),(0,C.jsx)(`option`,{value:`warning`,children:a(r,`admin.filters.warning`)}),(0,C.jsx)(`option`,{value:`high`,children:a(r,`admin.filters.high`)})]})]}),(0,C.jsx)(`span`,{children:a(r,`admin.filters.matched`,{count:I(t?.matched_events,`0`)})})]})}function O({icon:e,label:t,value:n,detail:r}){return(0,C.jsxs)(`div`,{className:`admin-metric`,children:[(0,C.jsx)(`div`,{children:e}),(0,C.jsx)(`span`,{children:t}),(0,C.jsx)(`strong`,{children:n}),(0,C.jsx)(`small`,{children:r})]})}function k({eyebrow:e,title:t,children:n}){return(0,C.jsxs)(`section`,{className:`admin-panel`,children:[(0,C.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`h2`,{children:t})]}),n]})}function A({items:e,empty:t,render:n}){return e.length?(0,C.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,C.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,C.jsx)(`div`,{className:`admin-empty`,children:t})}function j(e,t){let n=I(e.action||e.event||e.type||e.name,a(t,`admin.log.event`)),r=I(e.actor||e.user||e.user_id||e.workspace_id,a(t,`admin.log.system`)),i=I(e.timestamp||e.time||e.created_at||e.ts,a(t,`admin.log.recently`));return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`strong`,{children:n}),(0,C.jsxs)(`span`,{children:[r,` · `,i]})]})}function M(e,t){if(!e)return a(t,`admin.source.loading`);if(e.ok)return a(t,`admin.source.live`);let n=a(t,`admin.status.unavailable`);return e.error&&e.error!==n?`${n} · ${e.error}`:n}function N(e,t){return L(o(e)?e:{},[t,`health`,`state`,`overall_status`])}function P(e,t){let n=o(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?`${I(r,`0`)} docs · ${I(i,`0`)} chunks`:L(n,[`message`,`detail`,`status`],a(t,`admin.index.ready`))}function F(e){return L(o(e)?e:{},[`summary`,`message`,`status`,`detail`])}function I(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 L(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{w as AdminConsole};
1
+ import{S as e,_ as t,b as n,d as r,g as i,m as a,o,t as s,y as c}from"./utils-a3YXFtEO.js";import{r as l,t as u}from"./useQuery-Dg5fPqTS.js";import{t as d}from"./workspace-BMUEiXUm.js";import{t as f}from"./activity-CxRPOQ2F.js";import{t as p}from"./search-CwEJWBEA.js";import{t as m}from"./users-BgcdTQGM.js";import{a as h,d as g,l as _}from"./index-Dm9VXl1o.js";import{t as v}from"./button-ZYFqGan7.js";var y=i(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),b=i(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),x=i(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),S=e(n()),C=c();function w({onBack:e}){let n=l(),i=t(e=>e.language),[o,c]=S.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:u,statsQ:p,usersQ:b,auditQ:w,securityQ:L,securityEventsQ:R,policiesQ:z,rolesQ:B,retentionQ:V,indexQ:H,agentRuntimeQ:U,toolRegistryQ:W}=T(o),G=d({mutationFn:r.rebuildIndex,onSuccess:()=>void n.invalidateQueries({queryKey:[`indexStatus`]})}),K=s(b.data?.data),q=s(w.data?.data?.recent_events),J=s(R.data?.data?.events),Y=s(z.data?.data?.policies),X=s(B.data?.data?.roles),Z=V.data?.data||{};return(0,C.jsxs)(`main`,{className:`admin-console`,"aria-label":a(i,`admin.aria.console`),children:[(0,C.jsxs)(`header`,{className:`admin-console-header`,children:[(0,C.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,C.jsx)(y,{className:`h-4 w-4`}),a(i,`admin.back`)]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`span`,{children:a(i,`admin.kicker`)}),(0,C.jsx)(`h1`,{children:a(i,`admin.title`)}),(0,C.jsx)(`p`,{children:a(i,`admin.body`)})]}),(0,C.jsx)(h,{compact:!0})]}),(0,C.jsxs)(`section`,{className:`admin-metrics`,"aria-label":a(i,`admin.overview`),children:[(0,C.jsx)(O,{icon:(0,C.jsx)(m,{className:`h-4 w-4`}),label:a(i,`admin.metric.users`),value:String(K.length),detail:M(b.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(f,{className:`h-4 w-4`}),label:a(i,`admin.metric.logs`),value:String(q.length+J.length),detail:M(w.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(_,{className:`h-4 w-4`}),label:a(i,`admin.metric.security`),value:N(L.data?.data,`status`)||(L.data?.ok?a(i,`admin.status.ready`):a(i,`admin.status.unavailable`)),detail:M(L.data,i)}),(0,C.jsx)(O,{icon:(0,C.jsx)(x,{className:`h-4 w-4`}),label:a(i,`admin.metric.index`),value:N(H.data?.data,`status`)||(H.data?.ok?a(i,`admin.status.indexed`):a(i,`admin.status.unknown`)),detail:P(H.data?.data,i)})]}),(0,C.jsxs)(`section`,{className:`admin-grid`,children:[(0,C.jsx)(k,{title:a(i,`admin.panel.users`),eyebrow:a(i,`admin.panel.people`),children:(0,C.jsx)(A,{items:K.slice(0,8),empty:a(i,`admin.empty.users`),render:e=>{let t=e;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`strong`,{children:I(t.name||t.email||t.id,a(i,`admin.fallback.localUser`))}),(0,C.jsx)(`span`,{children:I(t.role||t.status||t.workspace_id,a(i,`admin.fallback.member`))})]})}})}),(0,C.jsx)(k,{title:a(i,`admin.panel.roles`),eyebrow:a(i,`admin.panel.access`),children:(0,C.jsx)(A,{items:X.slice(0,6),empty:a(i,`admin.empty.roles`),render:e=>{let t=e;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`strong`,{children:[I(t.role,a(i,`admin.fallback.role`)),` · `,I(t.members,`0`),` `,a(i,`admin.metric.users`)]}),(0,C.jsx)(`span`,{children:s(t.caps).slice(0,4).map(e=>I(e,``)).filter(Boolean).join(`, `)||a(i,`admin.fallback.noCaps`)})]})}})}),(0,C.jsxs)(k,{title:a(i,`admin.panel.logs`),eyebrow:a(i,`admin.panel.audit`),children:[(0,C.jsx)(D,{language:i,filters:o,onChange:c,matched:w.data?.data?.filters}),(0,C.jsx)(A,{items:q.slice(0,8),empty:a(i,`admin.empty.audit`),render:e=>j(e,i)})]}),(0,C.jsx)(k,{title:a(i,`admin.panel.securityEvents`),eyebrow:a(i,`admin.panel.protection`),children:(0,C.jsx)(A,{items:J.slice(0,8),empty:a(i,`admin.empty.security`),render:e=>j(e,i)})}),(0,C.jsxs)(k,{title:a(i,`admin.panel.brainOps`),eyebrow:a(i,`admin.panel.maintenance`),children:[(0,C.jsxs)(`div`,{className:`admin-operation`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`strong`,{children:P(H.data?.data,i)}),(0,C.jsx)(`span`,{children:F(u.data?.data)||F(p.data?.data)||a(i,`admin.brain.summaryFallback`)})]}),(0,C.jsxs)(v,{variant:`outline`,size:`sm`,disabled:G.isPending,onClick:()=>G.mutate(),children:[(0,C.jsx)(g,{className:`h-3.5 w-3.5`}),G.isPending?a(i,`admin.brain.rebuilding`):a(i,`admin.brain.rebuild`)]})]}),(0,C.jsxs)(`div`,{className:`admin-policy-strip`,children:[Y.slice(0,5).map((e,t)=>{let n=e;return(0,C.jsx)(`span`,{children:I(n.label||n.name||n.id,a(i,`admin.policy.fallback`))},`${I(n.id||n.name,`policy`)}-${t}`)}),Y.length?null:(0,C.jsx)(`span`,{children:a(i,`admin.policy.quiet`)})]}),(0,C.jsxs)(`div`,{className:`admin-retention`,children:[(0,C.jsx)(`strong`,{children:a(i,`admin.retention.days`,{days:I(Z.retention_days,`90`)})}),(0,C.jsx)(`span`,{children:a(i,`admin.retention.detail`,{events:I(Z.retained_events,`0`),candidates:I(Z.prune_candidates,`0`)})})]})]}),(0,C.jsx)(k,{title:a(i,`admin.panel.runtimeTrust`),eyebrow:a(i,`admin.panel.contracts`),children:(0,C.jsx)(E,{runtime:U.data?.data,registry:W.data?.data,language:i})})]})]})}function T(e){let t=S.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:u({queryKey:[`adminSummary`],queryFn:r.adminSummary}),statsQ:u({queryKey:[`adminStats`],queryFn:r.adminStats}),usersQ:u({queryKey:[`adminUsers`],queryFn:r.adminUsers}),auditQ:u({queryKey:[`adminAudit`,t],queryFn:()=>r.adminAudit(t)}),securityQ:u({queryKey:[`adminSecurity`],queryFn:r.adminSecurity}),securityEventsQ:u({queryKey:[`adminSecurityEvents`],queryFn:()=>r.adminSecurityEvents(50)}),policiesQ:u({queryKey:[`adminPolicies`],queryFn:r.adminPolicies}),rolesQ:u({queryKey:[`adminRoles`],queryFn:r.adminRoles}),retentionQ:u({queryKey:[`adminLogRetention`],queryFn:r.adminLogRetention}),indexQ:u({queryKey:[`indexStatus`],queryFn:r.indexStatus}),agentRuntimeQ:u({queryKey:[`agentRuntime`],queryFn:r.agentRuntime}),toolRegistryQ:u({queryKey:[`toolRegistryDiagnostics`],queryFn:r.toolRegistryDiagnostics})}}function E({runtime:e,registry:t,language:n}){let r=e?.runtime||{},i=e?.health||{},o=t?.diagnostics||{},s=!!r.ready,c=!!o.ready,l=I(r.unavailable_reason,s?a(n,`admin.runtime.readyDetail`):a(n,`admin.runtime.blockedFallback`));return(0,C.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,C.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,C.jsx)(`strong`,{children:a(n,`admin.runtime.agent`)}),(0,C.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?a(n,`admin.status.ready`):a(n,`admin.status.unavailable`)}),(0,C.jsx)(`small`,{children:l})]}),(0,C.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,C.jsx)(`strong`,{children:a(n,`admin.runtime.tools`)}),(0,C.jsx)(`span`,{className:c?`is-ok`:`is-warn`,children:c?a(n,`admin.runtime.aligned`):a(n,`admin.runtime.drift`)}),(0,C.jsx)(`small`,{children:a(n,`admin.runtime.toolCounts`,{registered:I(o.registered_tools,`0`),governed:I(o.governed_tools,`0`),described:I(o.described_tools,`0`)})})]}),(0,C.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,C.jsx)(`span`,{children:a(n,`admin.runtime.mode`,{mode:I(r.mode,`unknown`)})}),(0,C.jsx)(`span`,{children:a(n,`admin.runtime.execution`,{mode:I(r.execution_mode,`unknown`)})}),(0,C.jsx)(`span`,{children:a(n,`admin.runtime.health`,{status:I(i.status,`unknown`)})})]})]})}function D({filters:e,matched:t,onChange:n,language:r}){return(0,C.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":a(r,`admin.filters.label`),children:[(0,C.jsxs)(`label`,{children:[(0,C.jsx)(p,{className:`h-3.5 w-3.5`}),(0,C.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:a(r,`admin.filters.search`),"aria-label":a(r,`admin.filters.searchAria`)})]}),(0,C.jsxs)(`label`,{children:[(0,C.jsx)(b,{className:`h-3.5 w-3.5`}),(0,C.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":a(r,`admin.filters.severityAria`),children:[(0,C.jsx)(`option`,{value:``,children:a(r,`admin.filters.all`)}),(0,C.jsx)(`option`,{value:`informational`,children:a(r,`admin.filters.informational`)}),(0,C.jsx)(`option`,{value:`notice`,children:a(r,`admin.filters.notice`)}),(0,C.jsx)(`option`,{value:`warning`,children:a(r,`admin.filters.warning`)}),(0,C.jsx)(`option`,{value:`high`,children:a(r,`admin.filters.high`)})]})]}),(0,C.jsx)(`span`,{children:a(r,`admin.filters.matched`,{count:I(t?.matched_events,`0`)})})]})}function O({icon:e,label:t,value:n,detail:r}){return(0,C.jsxs)(`div`,{className:`admin-metric`,children:[(0,C.jsx)(`div`,{children:e}),(0,C.jsx)(`span`,{children:t}),(0,C.jsx)(`strong`,{children:n}),(0,C.jsx)(`small`,{children:r})]})}function k({eyebrow:e,title:t,children:n}){return(0,C.jsxs)(`section`,{className:`admin-panel`,children:[(0,C.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`h2`,{children:t})]}),n]})}function A({items:e,empty:t,render:n}){return e.length?(0,C.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,C.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,C.jsx)(`div`,{className:`admin-empty`,children:t})}function j(e,t){let n=I(e.action||e.event||e.type||e.name,a(t,`admin.log.event`)),r=I(e.actor||e.user||e.user_id||e.workspace_id,a(t,`admin.log.system`)),i=I(e.timestamp||e.time||e.created_at||e.ts,a(t,`admin.log.recently`));return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`strong`,{children:n}),(0,C.jsxs)(`span`,{children:[r,` · `,i]})]})}function M(e,t){if(!e)return a(t,`admin.source.loading`);if(e.ok)return a(t,`admin.source.live`);let n=a(t,`admin.status.unavailable`);return e.error&&e.error!==n?`${n} · ${e.error}`:n}function N(e,t){return L(o(e)?e:{},[t,`health`,`state`,`overall_status`])}function P(e,t){let n=o(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?`${I(r,`0`)} docs · ${I(i,`0`)} chunks`:L(n,[`message`,`detail`,`status`],a(t,`admin.index.ready`))}function F(e){return L(o(e)?e:{},[`summary`,`message`,`status`,`detail`])}function I(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 L(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{w as AdminConsole};