ltcai 11.5.1 → 11.5.2

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 (176) hide show
  1. package/README.md +85 -53
  2. package/docs/CHANGELOG.md +54 -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 +8 -4
  6. package/docs/MULTI_AGENT_RUNTIME.md +1 -1
  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/WORKFLOW_DESIGNER.md +1 -1
  12. package/docs/architecture.md +4 -4
  13. package/docs/kg-schema.md +1 -1
  14. package/docs/v11.5.2_TIGHT_SHIP_PLAN.md +144 -0
  15. package/lattice_brain/__init__.py +1 -1
  16. package/lattice_brain/graph/proactive.py +1 -1
  17. package/lattice_brain/graph/projection/v2_schema.py +0 -28
  18. package/lattice_brain/graph/vector_index/base.py +0 -3
  19. package/lattice_brain/graph/vector_index/brute_force.py +0 -4
  20. package/lattice_brain/graph/vector_index/hnsw.py +0 -3
  21. package/lattice_brain/graph/vector_index/quantized.py +0 -3
  22. package/lattice_brain/ingestion_jobs.py +0 -3
  23. package/lattice_brain/memory.py +0 -27
  24. package/lattice_brain/portability/sharing.py +0 -4
  25. package/lattice_brain/quality.py +0 -49
  26. package/lattice_brain/runtime/agent_runtime.py +1 -1
  27. package/lattice_brain/runtime/hooks.py +0 -13
  28. package/lattice_brain/runtime/multi_agent.py +1 -1
  29. package/lattice_brain/sealed_box.py +0 -4
  30. package/latticeai/__init__.py +1 -1
  31. package/latticeai/api/admin.py +12 -12
  32. package/latticeai/api/auth.py +25 -2
  33. package/latticeai/api/chat.py +3 -3
  34. package/latticeai/api/chat_agent_http.py +3 -12
  35. package/latticeai/api/chat_helpers.py +10 -13
  36. package/latticeai/api/computer_use.py +31 -42
  37. package/latticeai/api/health.py +21 -1
  38. package/latticeai/api/local_files.py +14 -0
  39. package/latticeai/api/permissions.py +38 -12
  40. package/latticeai/api/search.py +24 -0
  41. package/latticeai/api/static_routes.py +4 -1
  42. package/latticeai/cli/runtime.py +7 -3
  43. package/latticeai/core/config.py +47 -3
  44. package/latticeai/core/csrf.py +28 -2
  45. package/latticeai/core/embedding_providers/__init__.py +3 -5
  46. package/latticeai/core/embedding_providers/base.py +1 -1
  47. package/latticeai/core/embedding_providers/text.py +1 -1
  48. package/latticeai/core/enterprise.py +1 -4
  49. package/latticeai/core/http_origin.py +146 -0
  50. package/latticeai/core/invitations.py +3 -2
  51. package/latticeai/core/io_utils.py +2 -11
  52. package/latticeai/core/legacy_compatibility.py +1 -1
  53. package/latticeai/core/marketplace.py +1 -1
  54. package/latticeai/core/messages.py +5 -0
  55. package/latticeai/core/model_compat.py +2 -8
  56. package/latticeai/core/module_probe.py +37 -0
  57. package/latticeai/core/run_explain.py +5 -2
  58. package/latticeai/core/run_store.py +2 -2
  59. package/latticeai/core/security.py +13 -0
  60. package/latticeai/core/sessions.py +3 -2
  61. package/latticeai/core/sse.py +25 -0
  62. package/latticeai/core/users.py +0 -9
  63. package/latticeai/core/workspace_graph_trace.py +2 -8
  64. package/latticeai/core/workspace_os.py +0 -10
  65. package/latticeai/core/workspace_os_constants.py +1 -1
  66. package/latticeai/core/workspace_os_utils.py +34 -0
  67. package/latticeai/core/workspace_review_items.py +2 -8
  68. package/latticeai/core/workspace_runs.py +2 -8
  69. package/latticeai/core/workspace_skills.py +2 -7
  70. package/latticeai/models/router/documents.py +0 -35
  71. package/latticeai/models/router/registry.py +0 -4
  72. package/latticeai/runtime/access_runtime.py +16 -4
  73. package/latticeai/runtime/build_phases/features.py +2 -0
  74. package/latticeai/runtime/build_phases/web.py +2 -0
  75. package/latticeai/runtime/feature_toggle_wiring.py +12 -18
  76. package/latticeai/runtime/network_boundary_wiring.py +8 -19
  77. package/latticeai/runtime/permission_mode_wiring.py +6 -13
  78. package/latticeai/runtime/router_registration.py +4 -0
  79. package/latticeai/runtime/runtime_context.py +1 -13
  80. package/latticeai/runtime/service_singletons.py +55 -0
  81. package/latticeai/services/architecture_readiness.py +1 -1
  82. package/latticeai/services/brain_intelligence/proposals.py +0 -5
  83. package/latticeai/services/change_proposals.py +2 -36
  84. package/latticeai/services/chronicle.py +4 -6
  85. package/latticeai/services/command_center.py +4 -4
  86. package/latticeai/services/evidence_actions.py +5 -2
  87. package/latticeai/services/hybrid_chat.py +2 -2
  88. package/latticeai/services/hybrid_policy.py +8 -57
  89. package/latticeai/services/mode_store.py +132 -0
  90. package/latticeai/services/model_capability_registry.py +0 -15
  91. package/latticeai/services/model_catalog.py +0 -7
  92. package/latticeai/services/model_loading.py +3 -2
  93. package/latticeai/services/model_runtime/__init__.py +0 -57
  94. package/latticeai/services/model_runtime/engines.py +27 -128
  95. package/latticeai/services/model_runtime/loading.py +2 -2
  96. package/latticeai/services/network_boundary_service.py +7 -44
  97. package/latticeai/services/permission_mode_service.py +8 -56
  98. package/latticeai/services/product_readiness.py +1 -1
  99. package/latticeai/services/setup_detection.py +67 -1
  100. package/latticeai/services/tool_dispatch.py +0 -4
  101. package/latticeai/services/upload_service.py +7 -20
  102. package/latticeai/services/workspace_service.py +0 -6
  103. package/latticeai/setup/auto_setup.py +15 -26
  104. package/latticeai/setup/wizard/catalog.py +5 -2
  105. package/latticeai/setup/wizard/detect.py +6 -27
  106. package/latticeai/setup/wizard/paths.py +2 -5
  107. package/latticeai/setup/wizard/plans.py +2 -2
  108. package/package.json +2 -4
  109. package/scripts/bump_version.py +14 -1
  110. package/scripts/check_current_release_docs.mjs +1 -1
  111. package/scripts/check_legacy_debt.mjs +1 -1
  112. package/scripts/generate_agent_loop_fixtures.py +87 -0
  113. package/scripts/generate_rust_parity_fixtures.py +3 -95
  114. package/scripts/parity_fixture_corpus_context.py +162 -0
  115. package/scripts/release_screen_claims.json +10 -0
  116. package/src-tauri/Cargo.lock +7 -7
  117. package/src-tauri/Cargo.toml +1 -1
  118. package/src-tauri/src/backend.rs +76 -2
  119. package/src-tauri/src/main.rs +13 -3
  120. package/src-tauri/tauri.conf.json +2 -2
  121. package/static/app/asset-manifest.json +40 -40
  122. package/static/app/assets/{Act-Drs_jd-O.js → Act-DcQizkl1.js} +1 -1
  123. package/static/app/assets/{AdminConsole-BqNx5oF6.js → AdminConsole-cf4npybT.js} +1 -1
  124. package/static/app/assets/{Brain-C7bdNmz-.js → Brain-3VCSHFcn.js} +1 -1
  125. package/static/app/assets/{BrainHome-DcTnINcI.js → BrainHome-Qm8eaztx.js} +1 -1
  126. package/static/app/assets/{BrainSignals-Df1MRIPD.js → BrainSignals-DS9BtKOW.js} +1 -1
  127. package/static/app/assets/{Capture-Dgsxvnbx.js → Capture-DiQ219jW.js} +1 -1
  128. package/static/app/assets/{Chronicle-BrkTxJK1.js → Chronicle-BGvuAchH.js} +1 -1
  129. package/static/app/assets/{CommandPalette-DDziw7Oj.js → CommandPalette-Bqhm0Urn.js} +1 -1
  130. package/static/app/assets/{Library-CYxeuraA.js → Library-BV6NnF0a.js} +1 -1
  131. package/static/app/assets/{LivingBrain-CNp6mvCm.js → LivingBrain-GzenJchP.js} +1 -1
  132. package/static/app/assets/{ProductFlow-BVsowu3Z.js → ProductFlow-DEP6-vML.js} +1 -1
  133. package/static/app/assets/{ReviewCard-D1LbOfJS.js → ReviewCard-CNZ7XjWG.js} +1 -1
  134. package/static/app/assets/{System-DcRAq7wj.js → System-CieofHQa.js} +1 -1
  135. package/static/app/assets/arrow-left-kfsrk0mv.js +1 -0
  136. package/static/app/assets/{bot-BK2xQ9mN.js → bot-B_K1Tdmw.js} +1 -1
  137. package/static/app/assets/{brain-BZNztFBb.js → brain-DWyaV1L1.js} +1 -1
  138. package/static/app/assets/{button-CjueubVZ.js → button-aTn4s84A.js} +1 -1
  139. package/static/app/assets/circle-check-qqLug9nU.js +1 -0
  140. package/static/app/assets/{circle-pause-HRjSmpyY.js → circle-pause-xKgeGXkT.js} +1 -1
  141. package/static/app/assets/{circle-play-CMcKDVwu.js → circle-play-DkT6tYPX.js} +1 -1
  142. package/static/app/assets/{cpu-B_MyTfYr.js → cpu-85xYObUC.js} +1 -1
  143. package/static/app/assets/{download-CTy0EByV.js → download-B5Fm7YXo.js} +1 -1
  144. package/static/app/assets/{folder-open-DF6bLhTg.js → folder-open-kk2Xa52u.js} +1 -1
  145. package/static/app/assets/{hard-drive-CpWHG77C.js → hard-drive-DkA3zBW_.js} +1 -1
  146. package/static/app/assets/{index-Dd6abJHX.js → index-BMPdTmlY.js} +3 -3
  147. package/static/app/assets/{input-bVgIRN3s.js → input-B0nRf2jO.js} +1 -1
  148. package/static/app/assets/{link-2-bg6CG5Vk.js → link-2-Dwb4gnTc.js} +1 -1
  149. package/static/app/assets/{permissionCopy-DFTf1HDZ.js → permissionCopy-CQDUBrOZ.js} +1 -1
  150. package/static/app/assets/{primitives-D7D-sQ3T.js → primitives-SNp0LRJz.js} +1 -1
  151. package/static/app/assets/search-BcHqkjoy.js +1 -0
  152. package/static/app/assets/{share-2-BLzo7U4L.js → share-2-BsrxFglO.js} +1 -1
  153. package/static/app/assets/{shield-alert-BmngqnsJ.js → shield-alert-5BStfp2_.js} +1 -1
  154. package/static/app/assets/{textarea-DOSlAQQ3.js → textarea-Cg8IUA-k.js} +1 -1
  155. package/static/app/assets/{useFocusTrap-pZhgeee4.js → useFocusTrap-CYKvE46M.js} +1 -1
  156. package/static/app/assets/{useMutation-BMDwNk4I.js → useMutation-CSn9t1op.js} +1 -1
  157. package/static/app/assets/{useQuery-CSjKttRo.js → useQuery-CY2OI2uy.js} +1 -1
  158. package/static/app/assets/{utils-D3u_yv7B.js → utils-Ddol2RWD.js} +1 -1
  159. package/static/app/assets/{workspace-H3bMjYXC.js → workspace-BqDwOz_p.js} +1 -1
  160. package/static/app/index.html +3 -3
  161. package/static/sw.js +1 -1
  162. package/desktop/electron/README.md +0 -9
  163. package/desktop/electron/main.cjs +0 -58
  164. package/desktop/electron/preload.cjs +0 -5
  165. package/latticeai/core/graph_curator.py +0 -11
  166. package/latticeai/core/hooks.py +0 -11
  167. package/latticeai/core/local_embeddings.py +0 -104
  168. package/latticeai/core/multi_agent.py +0 -11
  169. package/latticeai/core/workflow_engine.py +0 -11
  170. package/latticeai/services/ingestion.py +0 -11
  171. package/latticeai/services/kg_portability.py +0 -11
  172. package/latticeai/services/multimodal_streaming.py +0 -129
  173. package/scripts/measure_brain_home_fill.mjs +0 -141
  174. package/static/app/assets/arrow-left-BHYmOTWU.js +0 -1
  175. package/static/app/assets/circle-check-CLeWJr67.js +0 -1
  176. package/static/app/assets/search-BgSVX6NG.js +0 -1
@@ -1 +1 @@
1
- import{C as e,_ as t,b as n,d as r,m as i,o as a,t as o,v as s,x as c}from"./utils-D3u_yv7B.js";import{r as l,t as u}from"./useQuery-CSjKttRo.js";import{t as d}from"./useMutation-BMDwNk4I.js";import{t as f}from"./arrow-left-BHYmOTWU.js";import{t as p}from"./search-BgSVX6NG.js";import{a as m,d as h,u as g}from"./index-Dd6abJHX.js";import{t as _}from"./button-CjueubVZ.js";import"./workspace-H3bMjYXC.js";var v=t(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),y=e(c()),b=n();function x({onBack:e}){let t=l(),n=s(e=>e.language),[a,c]=y.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:u,statsQ:p,usersQ:v,auditQ:x,securityQ:M,securityEventsQ:N,policiesQ:P,rolesQ:F,retentionQ:I,indexQ:L,agentRuntimeQ:R,toolRegistryQ:z,healthSummaryQ:B}=S(a),V=d({mutationFn:r.rebuildIndex,onSuccess:()=>void t.invalidateQueries({queryKey:[`indexStatus`]})}),H=o(v.data?.data),U=o(x.data?.data?.recent_events),W=o(N.data?.data?.events),G=o(P.data?.data?.policies),K=o(F.data?.data?.roles),q=I.data?.data||{},J=B.data?.data||B.data,Y=J?.status===`attention`||typeof J?.issue_count==`number`&&J.issue_count>0;return(0,b.jsxs)(`main`,{className:`admin-console`,"aria-label":i(n,`admin.aria.console`),children:[(0,b.jsxs)(`header`,{className:`admin-console-header`,children:[(0,b.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,b.jsx)(f,{className:`h-4 w-4`}),i(n,`admin.back`)]}),(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`span`,{children:i(n,`admin.kicker`)}),(0,b.jsx)(`h1`,{children:i(n,`admin.title`)}),(0,b.jsx)(`p`,{children:i(n,`admin.body`)})]}),(0,b.jsx)(m,{compact:!0})]}),(0,b.jsxs)(`section`,{className:`admin-metrics-statement px-4 py-3 border border-border/40 rounded-lg bg-muted/25 text-sm text-muted-foreground flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2`,"aria-label":i(n,`admin.overview`),children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2 font-medium text-foreground`,children:[(0,b.jsx)(g,{className:`h-4 w-4 ${Y?`text-amber-500`:`text-emerald-500`}`}),(0,b.jsx)(`span`,{children:Y?i(n,`admin.health.attention`,{count:String(J?.issue_count||1)}):i(n,`admin.health.ok`)})]}),(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(n,`admin.summaryStatement`,{users:H.length,logs:U.length+W.length,security:O(M.data?.data,`status`)||(M.data?.ok?i(n,`admin.status.ready`):i(n,`admin.status.unavailable`)),index:O(L.data?.data,`status`)||(L.data?.ok?i(n,`admin.status.indexed`):i(n,`admin.status.unknown`))})})]}),(0,b.jsxs)(`section`,{className:`admin-accordion-list flex flex-col gap-4 mt-4`,children:[(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,open:!0,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.users`),` · `,i(n,`admin.panel.people`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.users`),eyebrow:i(n,`admin.panel.people`),children:(0,b.jsx)(E,{items:H.slice(0,8),empty:i(n,`admin.empty.users`),render:e=>{let t=e;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`strong`,{children:j(t.name||t.email||t.id,i(n,`admin.fallback.localUser`))}),(0,b.jsx)(`span`,{children:j(t.role||t.status||t.workspace_id,i(n,`admin.fallback.member`))})]})}})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.roles`),` · `,i(n,`admin.panel.access`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.roles`),eyebrow:i(n,`admin.panel.access`),children:(0,b.jsx)(E,{items:K.slice(0,6),empty:i(n,`admin.empty.roles`),render:e=>{let t=e;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`strong`,{children:[j(t.role,i(n,`admin.fallback.role`)),` · `,j(t.members,`0`),` `,i(n,`admin.metric.users`)]}),(0,b.jsx)(`span`,{children:o(t.caps).slice(0,4).map(e=>j(e,``)).filter(Boolean).join(`, `)||i(n,`admin.fallback.noCaps`)})]})}})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.logs`),` · `,i(n,`admin.panel.audit`)]})}),(0,b.jsxs)(T,{title:i(n,`admin.panel.logs`),eyebrow:i(n,`admin.panel.audit`),children:[(0,b.jsx)(w,{language:n,filters:a,onChange:c,matched:x.data?.data?.filters}),(0,b.jsx)(E,{items:U.slice(0,8),empty:i(n,`admin.empty.audit`),render:e=>D(e,n)})]})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.securityEvents`),` · `,i(n,`admin.panel.protection`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.securityEvents`),eyebrow:i(n,`admin.panel.protection`),children:(0,b.jsx)(E,{items:W.slice(0,8),empty:i(n,`admin.empty.security`),render:e=>D(e,n)})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.brainOps`),` · `,i(n,`admin.panel.maintenance`)]})}),(0,b.jsxs)(T,{title:i(n,`admin.panel.brainOps`),eyebrow:i(n,`admin.panel.maintenance`),children:[(0,b.jsxs)(`div`,{className:`admin-operation`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`strong`,{children:k(L.data?.data,n)}),(0,b.jsx)(`span`,{children:A(u.data?.data)||A(p.data?.data)||i(n,`admin.brain.summaryFallback`)})]}),(0,b.jsxs)(_,{variant:`outline`,size:`sm`,disabled:V.isPending,onClick:()=>V.mutate(),children:[(0,b.jsx)(h,{className:`h-3.5 w-3.5`}),V.isPending?i(n,`admin.brain.rebuilding`):i(n,`admin.brain.rebuild`)]})]}),(0,b.jsxs)(`div`,{className:`admin-policy-strip`,children:[G.slice(0,5).map((e,t)=>{let r=e;return(0,b.jsx)(`span`,{children:j(r.label||r.name||r.id,i(n,`admin.policy.fallback`))},`${j(r.id||r.name,`policy`)}-${t}`)}),G.length?null:(0,b.jsx)(`span`,{children:i(n,`admin.policy.quiet`)})]}),(0,b.jsxs)(`div`,{className:`admin-retention`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.retention.days`,{days:j(q.retention_days,`90`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.retention.detail`,{events:j(q.retained_events,`0`),candidates:j(q.prune_candidates,`0`)})})]})]})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.runtimeTrust`),` · `,i(n,`admin.panel.contracts`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.runtimeTrust`),eyebrow:i(n,`admin.panel.contracts`),children:(0,b.jsx)(C,{runtime:R.data?.data,registry:z.data?.data,language:n})})]})]})]})}function S(e){let t=y.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}),healthSummaryQ:u({queryKey:[`adminHealthSummary`],queryFn:r.adminHealthSummary})}}function C({runtime:e,registry:t,language:n}){let r=e?.runtime||{},a=e?.health||{},o=t?.diagnostics||{},s=!!r.ready,c=!!o.ready,l=j(r.unavailable_reason,s?i(n,`admin.runtime.readyDetail`):i(n,`admin.runtime.blockedFallback`));return(0,b.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,b.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.runtime.agent`)}),(0,b.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?i(n,`admin.status.ready`):i(n,`admin.status.unavailable`)}),(0,b.jsx)(`small`,{children:l})]}),(0,b.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.runtime.tools`)}),(0,b.jsx)(`span`,{className:c?`is-ok`:`is-warn`,children:c?i(n,`admin.runtime.aligned`):i(n,`admin.runtime.drift`)}),(0,b.jsx)(`small`,{children:i(n,`admin.runtime.toolCounts`,{registered:j(o.registered_tools,`0`),governed:j(o.governed_tools,`0`),described:j(o.described_tools,`0`)})})]}),(0,b.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,b.jsx)(`span`,{children:i(n,`admin.runtime.mode`,{mode:j(r.mode,`unknown`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.runtime.execution`,{mode:j(r.execution_mode,`unknown`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.runtime.health`,{status:j(a.status,`unknown`)})})]})]})}function w({filters:e,matched:t,onChange:n,language:r}){return(0,b.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":i(r,`admin.filters.label`),children:[(0,b.jsxs)(`label`,{children:[(0,b.jsx)(p,{className:`h-3.5 w-3.5`}),(0,b.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:i(r,`admin.filters.search`),"aria-label":i(r,`admin.filters.searchAria`)})]}),(0,b.jsxs)(`label`,{children:[(0,b.jsx)(v,{className:`h-3.5 w-3.5`}),(0,b.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":i(r,`admin.filters.severityAria`),children:[(0,b.jsx)(`option`,{value:``,children:i(r,`admin.filters.all`)}),(0,b.jsx)(`option`,{value:`informational`,children:i(r,`admin.filters.informational`)}),(0,b.jsx)(`option`,{value:`notice`,children:i(r,`admin.filters.notice`)}),(0,b.jsx)(`option`,{value:`warning`,children:i(r,`admin.filters.warning`)}),(0,b.jsx)(`option`,{value:`high`,children:i(r,`admin.filters.high`)})]})]}),(0,b.jsx)(`span`,{children:i(r,`admin.filters.matched`,{count:j(t?.matched_events,`0`)})})]})}function T({eyebrow:e,title:t,children:n}){return(0,b.jsxs)(`section`,{className:`admin-panel`,children:[(0,b.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,b.jsx)(`span`,{children:e}),(0,b.jsx)(`h2`,{children:t})]}),n]})}function E({items:e,empty:t,render:n}){return e.length?(0,b.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,b.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,b.jsx)(`div`,{className:`admin-empty`,children:t})}function D(e,t){let n=j(e.action||e.event||e.type||e.name,i(t,`admin.log.event`)),r=j(e.actor||e.user||e.user_id||e.workspace_id,i(t,`admin.log.system`)),a=j(e.timestamp||e.time||e.created_at||e.ts,i(t,`admin.log.recently`));return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`strong`,{children:n}),(0,b.jsxs)(`span`,{children:[r,` · `,a]})]})}function O(e,t){return M(a(e)?e:{},[t,`health`,`state`,`overall_status`])}function k(e,t){let n=a(e)?e:{},r=n.documents??n.document_count??n.docs,o=n.chunks??n.chunk_count??n.vectors;return r!==void 0||o!==void 0?`${j(r,`0`)} docs · ${j(o,`0`)} chunks`:M(n,[`message`,`detail`,`status`],i(t,`admin.index.ready`))}function A(e){return M(a(e)?e:{},[`summary`,`message`,`status`,`detail`])}function j(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 M(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{x as AdminConsole};
1
+ import{C as e,_ as t,b as n,d as r,m as i,o as a,t as o,v as s,x as c}from"./utils-Ddol2RWD.js";import{r as l,t as u}from"./useQuery-CY2OI2uy.js";import{t as d}from"./useMutation-CSn9t1op.js";import{t as f}from"./arrow-left-kfsrk0mv.js";import{t as p}from"./search-BcHqkjoy.js";import{a as m,d as h,u as g}from"./index-BMPdTmlY.js";import{t as _}from"./button-aTn4s84A.js";import"./workspace-BqDwOz_p.js";var v=t(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),y=e(c()),b=n();function x({onBack:e}){let t=l(),n=s(e=>e.language),[a,c]=y.useState({q:``,actor:``,action:``,severity:``,limit:50}),{summaryQ:u,statsQ:p,usersQ:v,auditQ:x,securityQ:M,securityEventsQ:N,policiesQ:P,rolesQ:F,retentionQ:I,indexQ:L,agentRuntimeQ:R,toolRegistryQ:z,healthSummaryQ:B}=S(a),V=d({mutationFn:r.rebuildIndex,onSuccess:()=>void t.invalidateQueries({queryKey:[`indexStatus`]})}),H=o(v.data?.data),U=o(x.data?.data?.recent_events),W=o(N.data?.data?.events),G=o(P.data?.data?.policies),K=o(F.data?.data?.roles),q=I.data?.data||{},J=B.data?.data||B.data,Y=J?.status===`attention`||typeof J?.issue_count==`number`&&J.issue_count>0;return(0,b.jsxs)(`main`,{className:`admin-console`,"aria-label":i(n,`admin.aria.console`),children:[(0,b.jsxs)(`header`,{className:`admin-console-header`,children:[(0,b.jsxs)(`button`,{className:`admin-back-button`,type:`button`,onClick:e,children:[(0,b.jsx)(f,{className:`h-4 w-4`}),i(n,`admin.back`)]}),(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`span`,{children:i(n,`admin.kicker`)}),(0,b.jsx)(`h1`,{children:i(n,`admin.title`)}),(0,b.jsx)(`p`,{children:i(n,`admin.body`)})]}),(0,b.jsx)(m,{compact:!0})]}),(0,b.jsxs)(`section`,{className:`admin-metrics-statement px-4 py-3 border border-border/40 rounded-lg bg-muted/25 text-sm text-muted-foreground flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2`,"aria-label":i(n,`admin.overview`),children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2 font-medium text-foreground`,children:[(0,b.jsx)(g,{className:`h-4 w-4 ${Y?`text-amber-500`:`text-emerald-500`}`}),(0,b.jsx)(`span`,{children:Y?i(n,`admin.health.attention`,{count:String(J?.issue_count||1)}):i(n,`admin.health.ok`)})]}),(0,b.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(n,`admin.summaryStatement`,{users:H.length,logs:U.length+W.length,security:O(M.data?.data,`status`)||(M.data?.ok?i(n,`admin.status.ready`):i(n,`admin.status.unavailable`)),index:O(L.data?.data,`status`)||(L.data?.ok?i(n,`admin.status.indexed`):i(n,`admin.status.unknown`))})})]}),(0,b.jsxs)(`section`,{className:`admin-accordion-list flex flex-col gap-4 mt-4`,children:[(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,open:!0,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.users`),` · `,i(n,`admin.panel.people`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.users`),eyebrow:i(n,`admin.panel.people`),children:(0,b.jsx)(E,{items:H.slice(0,8),empty:i(n,`admin.empty.users`),render:e=>{let t=e;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`strong`,{children:j(t.name||t.email||t.id,i(n,`admin.fallback.localUser`))}),(0,b.jsx)(`span`,{children:j(t.role||t.status||t.workspace_id,i(n,`admin.fallback.member`))})]})}})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.roles`),` · `,i(n,`admin.panel.access`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.roles`),eyebrow:i(n,`admin.panel.access`),children:(0,b.jsx)(E,{items:K.slice(0,6),empty:i(n,`admin.empty.roles`),render:e=>{let t=e;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`strong`,{children:[j(t.role,i(n,`admin.fallback.role`)),` · `,j(t.members,`0`),` `,i(n,`admin.metric.users`)]}),(0,b.jsx)(`span`,{children:o(t.caps).slice(0,4).map(e=>j(e,``)).filter(Boolean).join(`, `)||i(n,`admin.fallback.noCaps`)})]})}})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.logs`),` · `,i(n,`admin.panel.audit`)]})}),(0,b.jsxs)(T,{title:i(n,`admin.panel.logs`),eyebrow:i(n,`admin.panel.audit`),children:[(0,b.jsx)(w,{language:n,filters:a,onChange:c,matched:x.data?.data?.filters}),(0,b.jsx)(E,{items:U.slice(0,8),empty:i(n,`admin.empty.audit`),render:e=>D(e,n)})]})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.securityEvents`),` · `,i(n,`admin.panel.protection`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.securityEvents`),eyebrow:i(n,`admin.panel.protection`),children:(0,b.jsx)(E,{items:W.slice(0,8),empty:i(n,`admin.empty.security`),render:e=>D(e,n)})})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.brainOps`),` · `,i(n,`admin.panel.maintenance`)]})}),(0,b.jsxs)(T,{title:i(n,`admin.panel.brainOps`),eyebrow:i(n,`admin.panel.maintenance`),children:[(0,b.jsxs)(`div`,{className:`admin-operation`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`strong`,{children:k(L.data?.data,n)}),(0,b.jsx)(`span`,{children:A(u.data?.data)||A(p.data?.data)||i(n,`admin.brain.summaryFallback`)})]}),(0,b.jsxs)(_,{variant:`outline`,size:`sm`,disabled:V.isPending,onClick:()=>V.mutate(),children:[(0,b.jsx)(h,{className:`h-3.5 w-3.5`}),V.isPending?i(n,`admin.brain.rebuilding`):i(n,`admin.brain.rebuild`)]})]}),(0,b.jsxs)(`div`,{className:`admin-policy-strip`,children:[G.slice(0,5).map((e,t)=>{let r=e;return(0,b.jsx)(`span`,{children:j(r.label||r.name||r.id,i(n,`admin.policy.fallback`))},`${j(r.id||r.name,`policy`)}-${t}`)}),G.length?null:(0,b.jsx)(`span`,{children:i(n,`admin.policy.quiet`)})]}),(0,b.jsxs)(`div`,{className:`admin-retention`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.retention.days`,{days:j(q.retention_days,`90`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.retention.detail`,{events:j(q.retained_events,`0`),candidates:j(q.prune_candidates,`0`)})})]})]})]}),(0,b.jsxs)(`details`,{className:`admin-accordion-details border border-border rounded-lg bg-card p-4`,children:[(0,b.jsx)(`summary`,{className:`font-semibold text-base cursor-pointer mb-3`,children:(0,b.jsxs)(`h2`,{className:`inline font-semibold text-base`,children:[i(n,`admin.panel.runtimeTrust`),` · `,i(n,`admin.panel.contracts`)]})}),(0,b.jsx)(T,{title:i(n,`admin.panel.runtimeTrust`),eyebrow:i(n,`admin.panel.contracts`),children:(0,b.jsx)(C,{runtime:R.data?.data,registry:z.data?.data,language:n})})]})]})]})}function S(e){let t=y.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}),healthSummaryQ:u({queryKey:[`adminHealthSummary`],queryFn:r.adminHealthSummary})}}function C({runtime:e,registry:t,language:n}){let r=e?.runtime||{},a=e?.health||{},o=t?.diagnostics||{},s=!!r.ready,c=!!o.ready,l=j(r.unavailable_reason,s?i(n,`admin.runtime.readyDetail`):i(n,`admin.runtime.blockedFallback`));return(0,b.jsxs)(`div`,{className:`admin-runtime-trust`,children:[(0,b.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.runtime.agent`)}),(0,b.jsx)(`span`,{className:s?`is-ok`:`is-warn`,children:s?i(n,`admin.status.ready`):i(n,`admin.status.unavailable`)}),(0,b.jsx)(`small`,{children:l})]}),(0,b.jsxs)(`div`,{className:`admin-runtime-row`,children:[(0,b.jsx)(`strong`,{children:i(n,`admin.runtime.tools`)}),(0,b.jsx)(`span`,{className:c?`is-ok`:`is-warn`,children:c?i(n,`admin.runtime.aligned`):i(n,`admin.runtime.drift`)}),(0,b.jsx)(`small`,{children:i(n,`admin.runtime.toolCounts`,{registered:j(o.registered_tools,`0`),governed:j(o.governed_tools,`0`),described:j(o.described_tools,`0`)})})]}),(0,b.jsxs)(`div`,{className:`admin-policy-strip`,children:[(0,b.jsx)(`span`,{children:i(n,`admin.runtime.mode`,{mode:j(r.mode,`unknown`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.runtime.execution`,{mode:j(r.execution_mode,`unknown`)})}),(0,b.jsx)(`span`,{children:i(n,`admin.runtime.health`,{status:j(a.status,`unknown`)})})]})]})}function w({filters:e,matched:t,onChange:n,language:r}){return(0,b.jsxs)(`div`,{className:`admin-log-filters`,"aria-label":i(r,`admin.filters.label`),children:[(0,b.jsxs)(`label`,{children:[(0,b.jsx)(p,{className:`h-3.5 w-3.5`}),(0,b.jsx)(`input`,{value:e.q,onChange:e=>n(t=>({...t,q:e.target.value})),placeholder:i(r,`admin.filters.search`),"aria-label":i(r,`admin.filters.searchAria`)})]}),(0,b.jsxs)(`label`,{children:[(0,b.jsx)(v,{className:`h-3.5 w-3.5`}),(0,b.jsxs)(`select`,{value:e.severity,onChange:e=>n(t=>({...t,severity:e.target.value})),"aria-label":i(r,`admin.filters.severityAria`),children:[(0,b.jsx)(`option`,{value:``,children:i(r,`admin.filters.all`)}),(0,b.jsx)(`option`,{value:`informational`,children:i(r,`admin.filters.informational`)}),(0,b.jsx)(`option`,{value:`notice`,children:i(r,`admin.filters.notice`)}),(0,b.jsx)(`option`,{value:`warning`,children:i(r,`admin.filters.warning`)}),(0,b.jsx)(`option`,{value:`high`,children:i(r,`admin.filters.high`)})]})]}),(0,b.jsx)(`span`,{children:i(r,`admin.filters.matched`,{count:j(t?.matched_events,`0`)})})]})}function T({eyebrow:e,title:t,children:n}){return(0,b.jsxs)(`section`,{className:`admin-panel`,children:[(0,b.jsxs)(`div`,{className:`admin-panel-head`,children:[(0,b.jsx)(`span`,{children:e}),(0,b.jsx)(`h2`,{children:t})]}),n]})}function E({items:e,empty:t,render:n}){return e.length?(0,b.jsx)(`div`,{className:`admin-list`,children:e.map((e,t)=>(0,b.jsx)(`div`,{className:`admin-list-row`,children:n(e)},t))}):(0,b.jsx)(`div`,{className:`admin-empty`,children:t})}function D(e,t){let n=j(e.action||e.event||e.type||e.name,i(t,`admin.log.event`)),r=j(e.actor||e.user||e.user_id||e.workspace_id,i(t,`admin.log.system`)),a=j(e.timestamp||e.time||e.created_at||e.ts,i(t,`admin.log.recently`));return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`strong`,{children:n}),(0,b.jsxs)(`span`,{children:[r,` · `,a]})]})}function O(e,t){return M(a(e)?e:{},[t,`health`,`state`,`overall_status`])}function k(e,t){let n=a(e)?e:{},r=n.documents??n.document_count??n.docs,o=n.chunks??n.chunk_count??n.vectors;return r!==void 0||o!==void 0?`${j(r,`0`)} docs · ${j(o,`0`)} chunks`:M(n,[`message`,`detail`,`status`],i(t,`admin.index.ready`))}function A(e){return M(a(e)?e:{},[`summary`,`message`,`status`,`detail`])}function j(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 M(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{x as AdminConsole};