ltcai 8.8.0 → 8.9.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 (63) hide show
  1. package/README.md +34 -27
  2. package/auto_setup.py +73 -8
  3. package/docs/CHANGELOG.md +37 -0
  4. package/docs/CODE_REVIEW_2026-07-06.md +764 -0
  5. package/docs/COMMUNITY_AND_PLUGINS.md +3 -3
  6. package/docs/DEVELOPMENT.md +10 -10
  7. package/docs/LEGACY_COMPATIBILITY.md +1 -1
  8. package/docs/ONBOARDING.md +2 -2
  9. package/docs/PRODUCT_DIRECTION_REVIEW.md +3 -2
  10. package/docs/TRUST_MODEL.md +5 -1
  11. package/docs/WHY_LATTICE.md +4 -3
  12. package/docs/architecture.md +4 -0
  13. package/docs/kg-schema.md +1 -1
  14. package/lattice_brain/__init__.py +1 -1
  15. package/lattice_brain/conversations.py +156 -21
  16. package/lattice_brain/graph/_kg_common.py +12 -34
  17. package/lattice_brain/graph/json_utils.py +25 -0
  18. package/lattice_brain/graph/retrieval.py +66 -27
  19. package/lattice_brain/graph/runtime.py +16 -0
  20. package/lattice_brain/runtime/multi_agent.py +1 -1
  21. package/latticeai/__init__.py +1 -1
  22. package/latticeai/api/chat.py +31 -14
  23. package/latticeai/api/mcp.py +3 -2
  24. package/latticeai/api/models.py +4 -1
  25. package/latticeai/api/permissions.py +69 -30
  26. package/latticeai/api/setup.py +17 -2
  27. package/latticeai/api/tools.py +104 -62
  28. package/latticeai/app_factory.py +93 -10
  29. package/latticeai/core/agent.py +25 -7
  30. package/latticeai/core/legacy_compatibility.py +1 -1
  31. package/latticeai/core/marketplace.py +1 -1
  32. package/latticeai/core/sessions.py +11 -3
  33. package/latticeai/core/tool_registry.py +15 -4
  34. package/latticeai/core/workspace_os.py +1 -1
  35. package/latticeai/runtime/bootstrap.py +1 -1
  36. package/latticeai/services/app_context.py +1 -0
  37. package/latticeai/services/architecture_readiness.py +2 -2
  38. package/latticeai/services/model_engines.py +79 -12
  39. package/latticeai/services/model_runtime.py +24 -4
  40. package/latticeai/services/process_audit.py +208 -0
  41. package/latticeai/services/product_readiness.py +11 -11
  42. package/latticeai/services/search_service.py +106 -30
  43. package/latticeai/services/tool_dispatch.py +66 -0
  44. package/latticeai/services/workspace_service.py +15 -0
  45. package/package.json +1 -1
  46. package/scripts/check_i18n_literals.mjs +20 -8
  47. package/scripts/i18n_literal_allowlist.json +34 -0
  48. package/scripts/lint_frontend.mjs +6 -2
  49. package/setup_wizard.py +185 -19
  50. package/src-tauri/Cargo.lock +1 -1
  51. package/src-tauri/Cargo.toml +1 -1
  52. package/src-tauri/tauri.conf.json +1 -1
  53. package/static/app/asset-manifest.json +10 -10
  54. package/static/app/assets/{Act-C7K9wsO9.js → Act-fZokUnC0.js} +1 -1
  55. package/static/app/assets/{Brain-I1OSzxJu.js → Brain-DtyuWubr.js} +1 -1
  56. package/static/app/assets/{Capture-B3V4_5Xp.js → Capture-D5KV3Cu7.js} +1 -1
  57. package/static/app/assets/{Library-Cgj-EF50.js → Library-C9kyFkSt.js} +1 -1
  58. package/static/app/assets/{System-D1Lkei3I.js → System-VbChmX7r.js} +1 -1
  59. package/static/app/assets/{index--P0ksosz.js → index-DPdcPoF0.js} +5 -5
  60. package/static/app/assets/{primitives-BLqaKk5g.js → primitives-DFeanEV6.js} +1 -1
  61. package/static/app/assets/{textarea-CVQkN2Tk.js → textarea-CD8UNKIy.js} +1 -1
  62. package/static/app/index.html +1 -1
  63. package/static/sw.js +1 -1
@@ -1 +1 @@
1
- import{C as e,E as t,I as n,M as r,O as i,P as a,S as o,T as s,_ as c,a as l,b as u,j as d,k as f,l as p,n as m,x as h,y as g}from"./index--P0ksosz.js";var _=g(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),v=g(`lock-keyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),y=n(a()),b=r(),x={default:`border-primary/25 bg-primary/12 text-primary`,success:`border-success/30 bg-success/12 text-success`,warning:`border-warning/30 bg-warning/12 text-warning`,muted:`border-border bg-muted/70 text-muted-foreground`,danger:`border-destructive/30 bg-destructive/12 text-destructive`};function S({className:e,variant:t=`default`,...n}){return(0,b.jsx)(`span`,{className:o(`inline-flex min-h-6 max-w-full items-center whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-semibold leading-none`,x[t],e),...n})}function C({className:e,...t}){return(0,b.jsx)(`section`,{className:o(`premium-surface rounded-lg text-card-foreground`,e),...t})}function w({className:e,...t}){return(0,b.jsx)(`div`,{className:o(`flex flex-col gap-1.5 p-5`,e),...t})}function T({className:e,...t}){return(0,b.jsx)(`h2`,{className:o(`text-base font-semibold tracking-normal`,e),...t})}function E({className:e,...t}){return(0,b.jsx)(`p`,{className:o(`text-sm leading-6 text-muted-foreground`,e),...t})}function D({className:e,...t}){return(0,b.jsx)(`div`,{className:o(`p-5 pt-0`,e),...t})}function O({result:e}){let t=i(e=>e.mode),n=i(e=>e.language);return e?e.source===`live`&&e.ok?(0,b.jsx)(S,{variant:`success`,children:t===`basic`?u(n,`ui.status.ready`):u(n,`ui.status.connected`)}):(0,b.jsx)(S,{variant:`warning`,children:t===`basic`?u(n,`ui.status.needsSetup`):u(n,`ui.status.unavailable`)}):(0,b.jsx)(S,{variant:`muted`,children:u(n,`ui.status.notLoaded`)})}function k({title:e,detail:t}){let n=i(e=>e.language);return(0,b.jsxs)(`div`,{className:`flex min-h-36 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border bg-muted/24 p-6 text-center text-sm text-muted-foreground`,children:[(0,b.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-card`,children:(0,b.jsx)(l,{className:`h-5 w-5 text-primary`})}),(0,b.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:e||u(n,`ui.empty.title`)}),t?(0,b.jsx)(`div`,{className:`max-w-md leading-6`,children:t}):null]})}function A({title:e,description:t,result:n,children:r,className:a}){let s=i(e=>e.mode),c=i(e=>e.language);return(0,b.jsxs)(C,{className:o(`overflow-hidden`,a),children:[(0,b.jsxs)(w,{className:`flex-row items-start justify-between gap-3`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(T,{children:e}),t?(0,b.jsx)(E,{children:t}):null]}),(0,b.jsx)(O,{result:n})]}),(0,b.jsx)(D,{children:n?.ok?r(n.data):(0,b.jsx)(k,{detail:s===`basic`?u(c,`ui.empty.basicDetail`):n?.error||u(c,`ui.empty.advancedDetail`)})})]})}function j({title:e}){let t=i(e=>e.language);return(0,b.jsxs)(C,{children:[(0,b.jsx)(w,{children:(0,b.jsx)(T,{children:e})}),(0,b.jsx)(D,{children:(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,b.jsx)(p,{className:`h-4 w-4 animate-spin`}),` `,u(t,`ui.loading`)]})})]})}function M({stats:t}){return(0,b.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:t.map(t=>(0,b.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-4`,children:[(0,b.jsx)(`div`,{className:`text-xs uppercase text-muted-foreground`,children:t.label}),(0,b.jsx)(`div`,{className:`mt-2 text-2xl font-semibold leading-tight`,children:typeof t.value==`number`?e(t.value):String(t.value??`-`)}),t.hint?(0,b.jsx)(`div`,{className:`mt-2 text-xs leading-5 text-muted-foreground`,children:t.hint}):null]},t.label))})}function N(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function P(t){return t==null||t===``?`-`:typeof t==`number`?Number.isFinite(t)?e(t):`-`:typeof t==`boolean`?t?`Enabled`:`Disabled`:String(t)}var F=/(^id$|_id$|token|secret|passphrase|fingerprint|public_key|private_key|dsn|schema|endpoint|base_url|localhost|127\.0\.0\.1|stack|trace|raw|runtime|engine|module|port|host|api|internal)/i;function I(e){return F.test(e)}function L(e){let n=P(e);return n===`-`||n.includes(`/`)||n.includes(`@`)||/\.[a-z0-9]{2,5}$/i.test(n)?n:t(n.replace(/^agent:/i,``).replace(/^tool:/i,``))}function R(e){for(let t of[`documents`,`sources`,`items`,`agents`,`workflows`,`runs`,`events`,`permissions`,`models`,`peers`,`invitations`,`roles`,`policies`,`hooks`,`tools`,`templates`,`plugins`,`recent_events`]){let n=h(e[t]);if(n.length)return n}return[]}function z({value:n}){if(typeof n==`boolean`)return(0,b.jsx)(S,{variant:n?`success`:`muted`,children:n?`enabled`:`disabled`});if(Array.isArray(n))return n.length?n.every(e=>e===null||[`string`,`number`,`boolean`].includes(typeof e))?(0,b.jsxs)(`span`,{className:`flex flex-wrap gap-1`,children:[n.slice(0,5).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),n.length>5?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,n.length-5]}):null]}):(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[e(n.length),` records`]}):(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:`None`});if(N(n)){let e=Object.keys(n);return e.length?(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.slice(0,4).map(t).join(`, `),e.length>4?` +${e.length-4}`:``]}):(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:`No fields`})}let r=P(n);return(0,b.jsx)(`span`,{className:`break-words`,children:r.length>96?s(r,96):r})}function B({data:e,limit:n=8}){let r=i(e=>e.mode),a=i(e=>e.language),o=Object.entries(e||{}).filter(([e])=>r!==`basic`||!I(e)).slice(0,n);return o.length?(0,b.jsx)(`div`,{className:`divide-y divide-border rounded-md border border-border`,children:o.map(([e,n])=>(0,b.jsxs)(`div`,{className:`grid grid-cols-[minmax(9rem,0.5fr)_1fr] gap-3 p-3 text-sm`,children:[(0,b.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:t(e)}),(0,b.jsx)(`span`,{className:`min-w-0 break-words`,children:(0,b.jsx)(z,{value:n})})]},e))}):(0,b.jsx)(k,{title:u(a,`ui.noValues`)})}function V({value:e,titleKey:t=`title`,metaKey:n=`status`,limit:r=8}){let a=i(e=>e.mode),o=i(e=>e.language);return a===`basic`?(0,b.jsx)(H,{value:e,titleKey:t,metaKey:n,limit:r}):Array.isArray(e)?e.length?e.every(e=>N(e))?(0,b.jsx)(W,{items:e,titleKey:t,metaKey:n,limit:r}):(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background p-3`,children:[e.slice(0,r).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),e.length>r?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,e.length-r]}):null]}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)}):N(e)?(0,b.jsx)(B,{data:e,limit:r}):(0,b.jsx)(`div`,{className:`rounded-md border border-border bg-background p-3 text-sm`,children:(0,b.jsx)(z,{value:e})})}function H({value:t,titleKey:n=`title`,metaKey:r=`status`,limit:a=6}){let o=i(e=>e.language);if(Array.isArray(t))return t.length?t.every(e=>N(e))?(0,b.jsx)(W,{items:t,titleKey:n,metaKey:r,limit:a}):(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background/55 p-3`,children:[t.slice(0,a).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:L(e)},`${String(e)}-${t}`)),t.length>a?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,t.length-a]}):null]}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)});if(N(t)){let i=R(t);return i.length?(0,b.jsx)(W,{items:i,titleKey:n,metaKey:r,limit:a}):(0,b.jsx)(B,{data:Object.fromEntries(Object.entries(t).filter(([e])=>!I(e)).map(([t,n])=>[t,Array.isArray(n)?`${e(n.length)} items`:N(n)?`available`:n])),limit:a})}return(0,b.jsx)(`div`,{className:`rounded-md border border-border bg-background/55 p-3 text-sm`,children:L(t)})}function U({result:e,successLabel:t}){let n=i(e=>e.mode),r=i(e=>e.language);return e?e.ok?(0,b.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border bg-background p-3`,children:[(0,b.jsx)(S,{variant:`success`,children:t||u(r,`ui.requestCompleted`)}),n===`basic`?(0,b.jsx)(H,{value:e.data}):(0,b.jsx)(V,{value:e.data})]}):(0,b.jsx)(k,{title:u(r,`ui.requestUnavailable`),detail:e.error||(0,b.jsx)(z,{value:e.data})}):null}function W({items:e,titleKey:t=`title`,metaKey:n=`type`,limit:r=8}){let a=i(e=>e.mode),o=i(e=>e.language),c=h(e).slice(0,r);return c.length?(0,b.jsx)(`div`,{className:`grid gap-2`,children:c.map((e,r)=>(0,b.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:a===`basic`?L(e[t]||e.name||e.label||`Item ${r+1}`):String(e[t]||e.name||e.id||`Record ${r+1}`)}),(0,b.jsx)(S,{variant:`muted`,children:a===`basic`?L(e[n]||e.status||e.state||`ready`):String(e[n]||e.status||e.state||`record`)})]}),e.summary||e.description||e.path||e.id&&e[t]!==e.id?(0,b.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:String(e.summary||e.description||e.path||e.id)}):null,a!==`basic`&&e.id&&e[t]!==e.id?(0,b.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:s(e.id,48)}):null]},String(e.id||e.name||r)))}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)})}function G({title:e,detail:t,target:n=`advanced`}){let r=i(e=>e.setMode),a=i(e=>e.language);return(0,b.jsx)(C,{children:(0,b.jsxs)(D,{className:`flex flex-col items-start gap-3 p-6`,children:[(0,b.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-background/70`,children:(0,b.jsx)(v,{className:`h-5 w-5 text-primary`})}),(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`div`,{className:`text-lg font-semibold`,children:e||u(a,`ui.modeGate.title`)}),(0,b.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t||u(a,`ui.modeGate.detail`)})]}),(0,b.jsx)(m,{onClick:()=>r(n),children:n===`admin`?u(a,`ui.modeGate.admin`):u(a,`ui.modeGate.advanced`)})]})})}function K({label:e,successLabel:t,action:n,invalidate:r,variant:a=`outline`,disabled:s}){let l=d(),h=i(e=>e.language),g=t||u(h,`ui.done`),[v,x]=y.useState(null),S=f({mutationFn:n,onSuccess:async e=>{x(e.ok?g:e.error||u(h,`ui.status.unavailable`)),r&&await Promise.all(r.map(e=>l.invalidateQueries({queryKey:[e]})))}});return(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsxs)(m,{variant:a,disabled:s||S.isPending,onClick:()=>S.mutate(),children:[S.isPending?(0,b.jsx)(p,{className:`h-4 w-4 animate-spin`}):null,e]}),v?(0,b.jsxs)(`span`,{className:o(`inline-flex items-center gap-1 text-xs`,v===g?`text-success`:`text-warning`),children:[v===g?(0,b.jsx)(c,{className:`h-3.5 w-3.5`}):(0,b.jsx)(_,{className:`h-3.5 w-3.5`}),v]}):null]})}function q({tabs:e,value:t,onChange:n}){return(0,b.jsx)(`div`,{className:`inline-flex max-w-full flex-wrap gap-1 rounded-lg border border-border bg-muted/28 p-1`,children:e.map(e=>(0,b.jsx)(`button`,{onClick:()=>n(e.id),className:o(`h-9 rounded-md px-3.5 text-sm font-semibold transition`,t===e.id?`bg-card text-foreground shadow-sm`:`text-muted-foreground hover:bg-card/60 hover:text-foreground`),children:e.label},e.id))})}export{T as _,B as a,U as c,q as d,z as f,w as g,E as h,W as i,M as l,D as m,A as n,j as o,C as p,k as r,G as s,K as t,V as u,S as v,_ as y};
1
+ import{C as e,E as t,I as n,M as r,O as i,P as a,S as o,T as s,_ as c,a as l,b as u,j as d,k as f,l as p,n as m,x as h,y as g}from"./index-DPdcPoF0.js";var _=g(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),v=g(`lock-keyhole`,[[`circle`,{cx:`12`,cy:`16`,r:`1`,key:`1au0dj`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`,key:`6s8ecr`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`,key:`1pqi11`}]]),y=n(a()),b=r(),x={default:`border-primary/25 bg-primary/12 text-primary`,success:`border-success/30 bg-success/12 text-success`,warning:`border-warning/30 bg-warning/12 text-warning`,muted:`border-border bg-muted/70 text-muted-foreground`,danger:`border-destructive/30 bg-destructive/12 text-destructive`};function S({className:e,variant:t=`default`,...n}){return(0,b.jsx)(`span`,{className:o(`inline-flex min-h-6 max-w-full items-center whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-semibold leading-none`,x[t],e),...n})}function C({className:e,...t}){return(0,b.jsx)(`section`,{className:o(`premium-surface rounded-lg text-card-foreground`,e),...t})}function w({className:e,...t}){return(0,b.jsx)(`div`,{className:o(`flex flex-col gap-1.5 p-5`,e),...t})}function T({className:e,...t}){return(0,b.jsx)(`h2`,{className:o(`text-base font-semibold tracking-normal`,e),...t})}function E({className:e,...t}){return(0,b.jsx)(`p`,{className:o(`text-sm leading-6 text-muted-foreground`,e),...t})}function D({className:e,...t}){return(0,b.jsx)(`div`,{className:o(`p-5 pt-0`,e),...t})}function O({result:e}){let t=i(e=>e.mode),n=i(e=>e.language);return e?e.source===`live`&&e.ok?(0,b.jsx)(S,{variant:`success`,children:t===`basic`?u(n,`ui.status.ready`):u(n,`ui.status.connected`)}):(0,b.jsx)(S,{variant:`warning`,children:t===`basic`?u(n,`ui.status.needsSetup`):u(n,`ui.status.unavailable`)}):(0,b.jsx)(S,{variant:`muted`,children:u(n,`ui.status.notLoaded`)})}function k({title:e,detail:t}){let n=i(e=>e.language);return(0,b.jsxs)(`div`,{className:`flex min-h-36 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border bg-muted/24 p-6 text-center text-sm text-muted-foreground`,children:[(0,b.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-card`,children:(0,b.jsx)(l,{className:`h-5 w-5 text-primary`})}),(0,b.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:e||u(n,`ui.empty.title`)}),t?(0,b.jsx)(`div`,{className:`max-w-md leading-6`,children:t}):null]})}function A({title:e,description:t,result:n,children:r,className:a}){let s=i(e=>e.mode),c=i(e=>e.language);return(0,b.jsxs)(C,{className:o(`overflow-hidden`,a),children:[(0,b.jsxs)(w,{className:`flex-row items-start justify-between gap-3`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(T,{children:e}),t?(0,b.jsx)(E,{children:t}):null]}),(0,b.jsx)(O,{result:n})]}),(0,b.jsx)(D,{children:n?.ok?r(n.data):(0,b.jsx)(k,{detail:s===`basic`?u(c,`ui.empty.basicDetail`):n?.error||u(c,`ui.empty.advancedDetail`)})})]})}function j({title:e}){let t=i(e=>e.language);return(0,b.jsxs)(C,{children:[(0,b.jsx)(w,{children:(0,b.jsx)(T,{children:e})}),(0,b.jsx)(D,{children:(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,b.jsx)(p,{className:`h-4 w-4 animate-spin`}),` `,u(t,`ui.loading`)]})})]})}function M({stats:t}){return(0,b.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:t.map(t=>(0,b.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-4`,children:[(0,b.jsx)(`div`,{className:`text-xs uppercase text-muted-foreground`,children:t.label}),(0,b.jsx)(`div`,{className:`mt-2 text-2xl font-semibold leading-tight`,children:typeof t.value==`number`?e(t.value):String(t.value??`-`)}),t.hint?(0,b.jsx)(`div`,{className:`mt-2 text-xs leading-5 text-muted-foreground`,children:t.hint}):null]},t.label))})}function N(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function P(t){return t==null||t===``?`-`:typeof t==`number`?Number.isFinite(t)?e(t):`-`:typeof t==`boolean`?t?`Enabled`:`Disabled`:String(t)}var F=/(^id$|_id$|token|secret|passphrase|fingerprint|public_key|private_key|dsn|schema|endpoint|base_url|localhost|127\.0\.0\.1|stack|trace|raw|runtime|engine|module|port|host|api|internal)/i;function I(e){return F.test(e)}function L(e){let n=P(e);return n===`-`||n.includes(`/`)||n.includes(`@`)||/\.[a-z0-9]{2,5}$/i.test(n)?n:t(n.replace(/^agent:/i,``).replace(/^tool:/i,``))}function R(e){for(let t of[`documents`,`sources`,`items`,`agents`,`workflows`,`runs`,`events`,`permissions`,`models`,`peers`,`invitations`,`roles`,`policies`,`hooks`,`tools`,`templates`,`plugins`,`recent_events`]){let n=h(e[t]);if(n.length)return n}return[]}function z({value:n}){if(typeof n==`boolean`)return(0,b.jsx)(S,{variant:n?`success`:`muted`,children:n?`enabled`:`disabled`});if(Array.isArray(n))return n.length?n.every(e=>e===null||[`string`,`number`,`boolean`].includes(typeof e))?(0,b.jsxs)(`span`,{className:`flex flex-wrap gap-1`,children:[n.slice(0,5).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),n.length>5?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,n.length-5]}):null]}):(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[e(n.length),` records`]}):(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:`None`});if(N(n)){let e=Object.keys(n);return e.length?(0,b.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.slice(0,4).map(t).join(`, `),e.length>4?` +${e.length-4}`:``]}):(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:`No fields`})}let r=P(n);return(0,b.jsx)(`span`,{className:`break-words`,children:r.length>96?s(r,96):r})}function B({data:e,limit:n=8}){let r=i(e=>e.mode),a=i(e=>e.language),o=Object.entries(e||{}).filter(([e])=>r!==`basic`||!I(e)).slice(0,n);return o.length?(0,b.jsx)(`div`,{className:`divide-y divide-border rounded-md border border-border`,children:o.map(([e,n])=>(0,b.jsxs)(`div`,{className:`grid grid-cols-[minmax(9rem,0.5fr)_1fr] gap-3 p-3 text-sm`,children:[(0,b.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:t(e)}),(0,b.jsx)(`span`,{className:`min-w-0 break-words`,children:(0,b.jsx)(z,{value:n})})]},e))}):(0,b.jsx)(k,{title:u(a,`ui.noValues`)})}function V({value:e,titleKey:t=`title`,metaKey:n=`status`,limit:r=8}){let a=i(e=>e.mode),o=i(e=>e.language);return a===`basic`?(0,b.jsx)(H,{value:e,titleKey:t,metaKey:n,limit:r}):Array.isArray(e)?e.length?e.every(e=>N(e))?(0,b.jsx)(W,{items:e,titleKey:t,metaKey:n,limit:r}):(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background p-3`,children:[e.slice(0,r).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),e.length>r?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,e.length-r]}):null]}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)}):N(e)?(0,b.jsx)(B,{data:e,limit:r}):(0,b.jsx)(`div`,{className:`rounded-md border border-border bg-background p-3 text-sm`,children:(0,b.jsx)(z,{value:e})})}function H({value:t,titleKey:n=`title`,metaKey:r=`status`,limit:a=6}){let o=i(e=>e.language);if(Array.isArray(t))return t.length?t.every(e=>N(e))?(0,b.jsx)(W,{items:t,titleKey:n,metaKey:r,limit:a}):(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background/55 p-3`,children:[t.slice(0,a).map((e,t)=>(0,b.jsx)(S,{variant:`muted`,children:L(e)},`${String(e)}-${t}`)),t.length>a?(0,b.jsxs)(S,{variant:`muted`,children:[`+`,t.length-a]}):null]}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)});if(N(t)){let i=R(t);return i.length?(0,b.jsx)(W,{items:i,titleKey:n,metaKey:r,limit:a}):(0,b.jsx)(B,{data:Object.fromEntries(Object.entries(t).filter(([e])=>!I(e)).map(([t,n])=>[t,Array.isArray(n)?`${e(n.length)} items`:N(n)?`available`:n])),limit:a})}return(0,b.jsx)(`div`,{className:`rounded-md border border-border bg-background/55 p-3 text-sm`,children:L(t)})}function U({result:e,successLabel:t}){let n=i(e=>e.mode),r=i(e=>e.language);return e?e.ok?(0,b.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border bg-background p-3`,children:[(0,b.jsx)(S,{variant:`success`,children:t||u(r,`ui.requestCompleted`)}),n===`basic`?(0,b.jsx)(H,{value:e.data}):(0,b.jsx)(V,{value:e.data})]}):(0,b.jsx)(k,{title:u(r,`ui.requestUnavailable`),detail:e.error||(0,b.jsx)(z,{value:e.data})}):null}function W({items:e,titleKey:t=`title`,metaKey:n=`type`,limit:r=8}){let a=i(e=>e.mode),o=i(e=>e.language),c=h(e).slice(0,r);return c.length?(0,b.jsx)(`div`,{className:`grid gap-2`,children:c.map((e,r)=>(0,b.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,b.jsx)(`div`,{className:`font-medium`,children:a===`basic`?L(e[t]||e.name||e.label||`Item ${r+1}`):String(e[t]||e.name||e.id||`Record ${r+1}`)}),(0,b.jsx)(S,{variant:`muted`,children:a===`basic`?L(e[n]||e.status||e.state||`ready`):String(e[n]||e.status||e.state||`record`)})]}),e.summary||e.description||e.path||e.id&&e[t]!==e.id?(0,b.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:String(e.summary||e.description||e.path||e.id)}):null,a!==`basic`&&e.id&&e[t]!==e.id?(0,b.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:s(e.id,48)}):null]},String(e.id||e.name||r)))}):(0,b.jsx)(k,{detail:u(o,`ui.empty.listDetail`)})}function G({title:e,detail:t,target:n=`advanced`}){let r=i(e=>e.setMode),a=i(e=>e.language);return(0,b.jsx)(C,{children:(0,b.jsxs)(D,{className:`flex flex-col items-start gap-3 p-6`,children:[(0,b.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-background/70`,children:(0,b.jsx)(v,{className:`h-5 w-5 text-primary`})}),(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`div`,{className:`text-lg font-semibold`,children:e||u(a,`ui.modeGate.title`)}),(0,b.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t||u(a,`ui.modeGate.detail`)})]}),(0,b.jsx)(m,{onClick:()=>r(n),children:n===`admin`?u(a,`ui.modeGate.admin`):u(a,`ui.modeGate.advanced`)})]})})}function K({label:e,successLabel:t,action:n,invalidate:r,variant:a=`outline`,disabled:s}){let l=d(),h=i(e=>e.language),g=t||u(h,`ui.done`),[v,x]=y.useState(null),S=f({mutationFn:n,onSuccess:async e=>{x(e.ok?g:e.error||u(h,`ui.status.unavailable`)),r&&await Promise.all(r.map(e=>l.invalidateQueries({queryKey:[e]})))}});return(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsxs)(m,{variant:a,disabled:s||S.isPending,onClick:()=>S.mutate(),children:[S.isPending?(0,b.jsx)(p,{className:`h-4 w-4 animate-spin`}):null,e]}),v?(0,b.jsxs)(`span`,{className:o(`inline-flex items-center gap-1 text-xs`,v===g?`text-success`:`text-warning`),children:[v===g?(0,b.jsx)(c,{className:`h-3.5 w-3.5`}):(0,b.jsx)(_,{className:`h-3.5 w-3.5`}),v]}):null]})}function q({tabs:e,value:t,onChange:n}){return(0,b.jsx)(`div`,{className:`inline-flex max-w-full flex-wrap gap-1 rounded-lg border border-border bg-muted/28 p-1`,children:e.map(e=>(0,b.jsx)(`button`,{onClick:()=>n(e.id),className:o(`h-9 rounded-md px-3.5 text-sm font-semibold transition`,t===e.id?`bg-card text-foreground shadow-sm`:`text-muted-foreground hover:bg-card/60 hover:text-foreground`),children:e.label},e.id))})}export{T as _,B as a,U as c,q as d,z as f,w as g,E as h,W as i,M as l,D as m,A as n,j as o,C as p,k as r,G as s,K as t,V as u,S as v,_ as y};
@@ -1 +1 @@
1
- import{I as e,M as t,P as n,S as r}from"./index--P0ksosz.js";var i=e(n()),a=t(),o=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`textarea`,{ref:n,className:r(`min-h-28 w-full resize-y rounded-md border border-input bg-background/70 px-3 py-3 text-sm leading-6 outline-none transition placeholder:text-muted-foreground focus:border-ring focus:ring-2 focus:ring-ring/35 disabled:cursor-not-allowed disabled:opacity-50`,e),...t}));o.displayName=`Textarea`;export{o as t};
1
+ import{I as e,M as t,P as n,S as r}from"./index-DPdcPoF0.js";var i=e(n()),a=t(),o=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`textarea`,{ref:n,className:r(`min-h-28 w-full resize-y rounded-md border border-input bg-background/70 px-3 py-3 text-sm leading-6 outline-none transition placeholder:text-muted-foreground focus:border-ring focus:ring-2 focus:ring-ring/35 disabled:cursor-not-allowed disabled:opacity-50`,e),...t}));o.displayName=`Textarea`;export{o as t};
@@ -8,7 +8,7 @@
8
8
  <link rel="manifest" href="/manifest.json" />
9
9
  <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32.png" />
10
10
  <script src="/static/app/theme-boot.js"></script>
11
- <script type="module" crossorigin src="/static/app/assets/index--P0ksosz.js"></script>
11
+ <script type="module" crossorigin src="/static/app/assets/index-DPdcPoF0.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="/static/app/assets/index-DCh5AoXt.css">
13
13
  </head>
14
14
  <body>
package/static/sw.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Lattice Service Worker — PWA install + offline shell for the /app SPA.
2
2
  // Strategy: precache the Vite app bundle from its asset manifest,
3
3
  // cache-first for static assets, network-only for everything dynamic.
4
- const CACHE = "lattice-v880";
4
+ const CACHE = "lattice-v890";
5
5
  const MANIFEST_URL = "/static/app/asset-manifest.json";
6
6
 
7
7
  // Non-manifest assets the shell needs offline.