ltcai 7.0.0 → 7.2.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.
- package/README.md +22 -20
- package/docs/CHANGELOG.md +43 -0
- package/frontend/src/App.tsx +80 -0
- package/frontend/src/api/client.ts +9 -0
- package/frontend/src/components/AdminAccessGate.tsx +70 -0
- package/frontend/src/components/BrainConversation.tsx +232 -8
- package/frontend/src/components/FeedbackState.tsx +45 -0
- package/frontend/src/components/WorkspaceProfileSwitcher.tsx +176 -0
- package/frontend/src/components/onboarding/AnalysisScreen.tsx +20 -12
- package/frontend/src/components/onboarding/InstallScreen.tsx +55 -0
- package/frontend/src/components/onboarding/RecommendationScreen.tsx +55 -5
- package/frontend/src/components/onboarding/recommendationModel.ts +59 -2
- package/frontend/src/features/admin/AdminConsole.tsx +41 -1
- package/frontend/src/features/brain/BrainConversation.tsx +232 -19
- package/frontend/src/features/brain/BrainGraphLayer.tsx +258 -25
- package/frontend/src/features/brain/BrainHome.tsx +193 -1
- package/frontend/src/features/brain/brainData.ts +25 -1
- package/frontend/src/features/brain/graphLayout.ts +12 -1
- package/frontend/src/features/brain/types.ts +41 -0
- package/frontend/src/i18n.ts +328 -0
- package/frontend/src/store/appStore.ts +15 -0
- package/frontend/src/styles.css +1175 -0
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/runtime/agent_runtime.py +51 -0
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/agents.py +12 -0
- package/latticeai/api/tools.py +14 -0
- package/latticeai/api/workspace.py +59 -0
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/tool_registry.py +47 -0
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/services/tool_dispatch.py +14 -0
- package/package.json +1 -1
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +28 -28
- package/static/app/assets/Act-Di4tRFWY.js +2 -0
- package/static/app/assets/{Act-DhLaHnrT.js.map → Act-Di4tRFWY.js.map} +1 -1
- package/static/app/assets/Brain-BZB3Gy9w.js +322 -0
- package/static/app/assets/Brain-BZB3Gy9w.js.map +1 -0
- package/static/app/assets/{Capture-CAKouj52.js → Capture-tNyYWxnh.js} +2 -2
- package/static/app/assets/{Capture-CAKouj52.js.map → Capture-tNyYWxnh.js.map} +1 -1
- package/static/app/assets/Library-DAtDDLdg.js +2 -0
- package/static/app/assets/{Library-B_hW4AwR.js.map → Library-DAtDDLdg.js.map} +1 -1
- package/static/app/assets/System-DEu0xNUc.js +2 -0
- package/static/app/assets/System-DEu0xNUc.js.map +1 -0
- package/static/app/assets/{index-DKFpn5Kn.css → index-Bi_bpigM.css} +1 -1
- package/static/app/assets/index-COuGp7_5.js +17 -0
- package/static/app/assets/index-COuGp7_5.js.map +1 -0
- package/static/app/assets/primitives-CdwcE--L.js +2 -0
- package/static/app/assets/primitives-CdwcE--L.js.map +1 -0
- package/static/app/assets/textarea-CqOdBPL1.js +2 -0
- package/static/app/assets/{textarea-DR2Tyy_6.js.map → textarea-CqOdBPL1.js.map} +1 -1
- package/static/app/index.html +2 -2
- package/static/app/assets/Act-DhLaHnrT.js +0 -2
- package/static/app/assets/Brain-DS7NULyY.js +0 -322
- package/static/app/assets/Brain-DS7NULyY.js.map +0 -1
- package/static/app/assets/Library-B_hW4AwR.js +0 -2
- package/static/app/assets/System-9OAoXWPz.js +0 -2
- package/static/app/assets/System-9OAoXWPz.js.map +0 -1
- package/static/app/assets/index-C-7aHabu.js +0 -17
- package/static/app/assets/index-C-7aHabu.js.map +0 -1
- package/static/app/assets/primitives-DcO2H3yh.js +0 -2
- package/static/app/assets/primitives-DcO2H3yh.js.map +0 -1
- package/static/app/assets/textarea-DR2Tyy_6.js +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
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,a as c,g as l,j as u,k as d,n as f,v as p,x as m}from"./index-C-7aHabu.js";var h=p(`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`}]]),g=p(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),_=p(`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`}]]),v=n(a()),y=r(),b={default:`border-primary/25 bg-primary/12 text-primary`,success:`border-emerald-500/25 bg-emerald-500/12 text-emerald-300`,warning:`border-amber-500/25 bg-amber-500/12 text-amber-300`,muted:`border-border bg-muted/70 text-muted-foreground`,danger:`border-destructive/30 bg-destructive/12 text-destructive`};function x({className:e,variant:t=`default`,...n}){return(0,y.jsx)(`span`,{className:o(`inline-flex min-h-6 max-w-full items-center rounded-md border px-2 py-0.5 text-xs font-semibold leading-none`,b[t],e),...n})}function S({className:e,...t}){return(0,y.jsx)(`section`,{className:o(`premium-surface rounded-lg text-card-foreground`,e),...t})}function C({className:e,...t}){return(0,y.jsx)(`div`,{className:o(`flex flex-col gap-1.5 p-5`,e),...t})}function w({className:e,...t}){return(0,y.jsx)(`h2`,{className:o(`text-base font-semibold tracking-normal`,e),...t})}function T({className:e,...t}){return(0,y.jsx)(`p`,{className:o(`text-sm leading-6 text-muted-foreground`,e),...t})}function E({className:e,...t}){return(0,y.jsx)(`div`,{className:o(`p-5 pt-0`,e),...t})}function D({result:e}){let t=i(e=>e.mode);return e?e.source===`live`&&e.ok?(0,y.jsx)(x,{variant:`success`,children:t===`basic`?`ready`:`connected`}):(0,y.jsx)(x,{variant:`warning`,children:t===`basic`?`needs setup`:`unavailable`}):(0,y.jsx)(x,{variant:`muted`,children:`not loaded`})}function O({title:e=`Unavailable`,detail:t}){return(0,y.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,y.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-card`,children:(0,y.jsx)(c,{className:`h-5 w-5 text-primary`})}),(0,y.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:e}),t?(0,y.jsx)(`div`,{className:`max-w-md leading-6`,children:t}):null]})}function k({title:e,description:t,result:n,children:r,className:a}){let s=i(e=>e.mode);return(0,y.jsxs)(S,{className:o(`overflow-hidden`,a),children:[(0,y.jsxs)(C,{className:`flex-row items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsx)(w,{children:e}),t?(0,y.jsx)(T,{children:t}):null]}),(0,y.jsx)(D,{result:n})]}),(0,y.jsx)(E,{children:n?.ok?r(n.data):(0,y.jsx)(O,{detail:s===`basic`?`This area needs setup or is not available yet.`:n?.error||`This capability is not reporting right now.`})})]})}function A({title:e}){return(0,y.jsxs)(S,{children:[(0,y.jsx)(C,{children:(0,y.jsx)(w,{children:e})}),(0,y.jsx)(E,{children:(0,y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,y.jsx)(g,{className:`h-4 w-4 animate-spin`}),` Loading`]})})]})}function j({stats:t}){return(0,y.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:t.map(t=>(0,y.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-4`,children:[(0,y.jsx)(`div`,{className:`text-xs uppercase text-muted-foreground`,children:t.label}),(0,y.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,y.jsx)(`div`,{className:`mt-2 text-xs leading-5 text-muted-foreground`,children:t.hint}):null]},t.label))})}function M(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function N(t){return t==null||t===``?`-`:typeof t==`number`?Number.isFinite(t)?e(t):`-`:typeof t==`boolean`?t?`Enabled`:`Disabled`:String(t)}var P=/(^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 F(e){return P.test(e)}function I(e){let n=N(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 L(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=m(e[t]);if(n.length)return n}return[]}function R({value:n}){if(typeof n==`boolean`)return(0,y.jsx)(x,{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,y.jsxs)(`span`,{className:`flex flex-wrap gap-1`,children:[n.slice(0,5).map((e,t)=>(0,y.jsx)(x,{variant:`muted`,children:N(e)},`${String(e)}-${t}`)),n.length>5?(0,y.jsxs)(x,{variant:`muted`,children:[`+`,n.length-5]}):null]}):(0,y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e(n.length),` records`]}):(0,y.jsx)(`span`,{className:`text-muted-foreground`,children:`None`});if(M(n)){let e=Object.keys(n);return e.length?(0,y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.slice(0,4).map(t).join(`, `),e.length>4?` +${e.length-4}`:``]}):(0,y.jsx)(`span`,{className:`text-muted-foreground`,children:`No fields`})}let r=N(n);return(0,y.jsx)(`span`,{className:`break-words`,children:r.length>96?s(r,96):r})}function z({data:e,limit:n=8}){let r=i(e=>e.mode),a=Object.entries(e||{}).filter(([e])=>r!==`basic`||!F(e)).slice(0,n);return a.length?(0,y.jsx)(`div`,{className:`divide-y divide-border rounded-md border border-border`,children:a.map(([e,n])=>(0,y.jsxs)(`div`,{className:`grid grid-cols-[minmax(9rem,0.5fr)_1fr] gap-3 p-3 text-sm`,children:[(0,y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:t(e)}),(0,y.jsx)(`span`,{className:`min-w-0 break-words`,children:(0,y.jsx)(R,{value:n})})]},e))}):(0,y.jsx)(O,{title:`No values`})}function B({value:e,titleKey:t=`title`,metaKey:n=`status`,limit:r=8}){return i(e=>e.mode)===`basic`?(0,y.jsx)(V,{value:e,titleKey:t,metaKey:n,limit:r}):Array.isArray(e)?e.length?e.every(e=>M(e))?(0,y.jsx)(U,{items:e,titleKey:t,metaKey:n,limit:r}):(0,y.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,y.jsx)(x,{variant:`muted`,children:N(e)},`${String(e)}-${t}`)),e.length>r?(0,y.jsxs)(x,{variant:`muted`,children:[`+`,e.length-r]}):null]}):(0,y.jsx)(O,{title:`Nothing here yet`,detail:`New items will appear here when Lattice has something to show.`}):M(e)?(0,y.jsx)(z,{data:e,limit:r}):(0,y.jsx)(`div`,{className:`rounded-md border border-border bg-background p-3 text-sm`,children:(0,y.jsx)(R,{value:e})})}function V({value:t,titleKey:n=`title`,metaKey:r=`status`,limit:i=6}){if(Array.isArray(t))return t.length?t.every(e=>M(e))?(0,y.jsx)(U,{items:t,titleKey:n,metaKey:r,limit:i}):(0,y.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background/55 p-3`,children:[t.slice(0,i).map((e,t)=>(0,y.jsx)(x,{variant:`muted`,children:I(e)},`${String(e)}-${t}`)),t.length>i?(0,y.jsxs)(x,{variant:`muted`,children:[`+`,t.length-i]}):null]}):(0,y.jsx)(O,{title:`Nothing here yet`,detail:`New items will appear here when Lattice has something to show.`});if(M(t)){let a=L(t);return a.length?(0,y.jsx)(U,{items:a,titleKey:n,metaKey:r,limit:i}):(0,y.jsx)(z,{data:Object.fromEntries(Object.entries(t).filter(([e])=>!F(e)).map(([t,n])=>[t,Array.isArray(n)?`${e(n.length)} items`:M(n)?`available`:n])),limit:i})}return(0,y.jsx)(`div`,{className:`rounded-md border border-border bg-background/55 p-3 text-sm`,children:I(t)})}function H({result:e,successLabel:t=`Request completed`}){let n=i(e=>e.mode);return e?e.ok?(0,y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border bg-background p-3`,children:[(0,y.jsx)(x,{variant:`success`,children:t}),n===`basic`?(0,y.jsx)(V,{value:e.data}):(0,y.jsx)(B,{value:e.data})]}):(0,y.jsx)(O,{title:`Request unavailable`,detail:e.error||(0,y.jsx)(R,{value:e.data})}):null}function U({items:e,titleKey:t=`title`,metaKey:n=`type`,limit:r=8}){let a=i(e=>e.mode),o=m(e).slice(0,r);return o.length?(0,y.jsx)(`div`,{className:`grid gap-2`,children:o.map((e,r)=>(0,y.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3`,children:[(0,y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,y.jsx)(`div`,{className:`font-medium`,children:a===`basic`?I(e[t]||e.name||e.label||`Item ${r+1}`):String(e[t]||e.name||e.id||`Record ${r+1}`)}),(0,y.jsx)(x,{variant:`muted`,children:a===`basic`?I(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,y.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,y.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:s(e.id,48)}):null]},String(e.id||e.name||r)))}):(0,y.jsx)(O,{title:`Nothing here yet`,detail:`New items will appear here when Lattice has something to show.`})}function W({title:e=`Advanced controls`,detail:t=`Switch modes when you want diagnostics or administrative controls. Basic mode keeps the product focused on everyday use.`,target:n=`advanced`}){let r=i(e=>e.setMode);return(0,y.jsx)(S,{children:(0,y.jsxs)(E,{className:`flex flex-col items-start gap-3 p-6`,children:[(0,y.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-background/70`,children:(0,y.jsx)(_,{className:`h-5 w-5 text-primary`})}),(0,y.jsxs)(`div`,{children:[(0,y.jsx)(`div`,{className:`text-lg font-semibold`,children:e}),(0,y.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t})]}),(0,y.jsx)(f,{onClick:()=>r(n),children:n===`admin`?`Switch to Admin Console`:`Switch to Advanced`})]})})}function G({label:e,successLabel:t=`Done`,action:n,invalidate:r,variant:i=`outline`,disabled:a}){let s=u(),[c,p]=v.useState(null),m=d({mutationFn:n,onSuccess:async e=>{p(e.ok?t:e.error||`Unavailable`),r&&await Promise.all(r.map(e=>s.invalidateQueries({queryKey:[e]})))}});return(0,y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,y.jsxs)(f,{variant:i,disabled:a||m.isPending,onClick:()=>m.mutate(),children:[m.isPending?(0,y.jsx)(g,{className:`h-4 w-4 animate-spin`}):null,e]}),c?(0,y.jsxs)(`span`,{className:o(`inline-flex items-center gap-1 text-xs`,c===t?`text-emerald-300`:`text-amber-300`),children:[c===t?(0,y.jsx)(l,{className:`h-3.5 w-3.5`}):(0,y.jsx)(h,{className:`h-3.5 w-3.5`}),c]}):null]})}function K({tabs:e,value:t,onChange:n}){return(0,y.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,y.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{C as _,z as a,g as b,H as c,B as d,K as f,T as g,E as h,U as i,D as l,S as m,k as n,A as o,R as p,O as r,W as s,G as t,j as u,w as v,h as x,x as y};
|
|
2
|
-
//# sourceMappingURL=primitives-DcO2H3yh.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitives-DcO2H3yh.js","names":["__iconNode","__iconNode"],"sources":["../../../node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","../../../node_modules/lucide-react/dist/esm/icons/loader-circle.mjs","../../../node_modules/lucide-react/dist/esm/icons/lock-keyhole.mjs","../../../frontend/src/components/ui/badge.tsx","../../../frontend/src/components/ui/card.tsx","../../../frontend/src/components/primitives.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.17.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","/**\n * @license lucide-react v1.17.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.mjs.map\n","/**\n * @license lucide-react v1.17.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"16\", r: \"1\", key: \"1au0dj\" }],\n [\"rect\", { x: \"3\", y: \"10\", width: \"18\", height: \"12\", rx: \"2\", key: \"6s8ecr\" }],\n [\"path\", { d: \"M7 10V7a5 5 0 0 1 10 0v3\", key: \"1pqi11\" }]\n];\nconst LockKeyhole = createLucideIcon(\"lock-keyhole\", __iconNode);\n\nexport { __iconNode, LockKeyhole as default };\n//# sourceMappingURL=lock-keyhole.mjs.map\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ntype BadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n variant?: \"default\" | \"success\" | \"warning\" | \"muted\" | \"danger\";\n};\n\nconst variants = {\n default: \"border-primary/25 bg-primary/12 text-primary\",\n success: \"border-emerald-500/25 bg-emerald-500/12 text-emerald-300\",\n warning: \"border-amber-500/25 bg-amber-500/12 text-amber-300\",\n muted: \"border-border bg-muted/70 text-muted-foreground\",\n danger: \"border-destructive/30 bg-destructive/12 text-destructive\",\n};\n\nexport function Badge({ className, variant = \"default\", ...props }: BadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex min-h-6 max-w-full items-center rounded-md border px-2 py-0.5 text-xs font-semibold leading-none\",\n variants[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <section className={cn(\"premium-surface rounded-lg text-card-foreground\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 p-5\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\n return <h2 className={cn(\"text-base font-semibold tracking-normal\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn(\"text-sm leading-6 text-muted-foreground\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"p-5 pt-0\", className)} {...props} />;\n}\n","import * as React from \"react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { AlertCircle, CheckCircle2, Loader2, LockKeyhole, Sparkles } from \"lucide-react\";\nimport type { ApiResult } from \"@/api/client\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { useAppStore } from \"@/store/appStore\";\nimport { cn, asArray, fmtNumber, shortId, titleize } from \"@/lib/utils\";\n\nexport function SourceBadge({ result }: { result?: Pick<ApiResult, \"source\" | \"ok\" | \"status\"> }) {\n const mode = useAppStore((state) => state.mode);\n if (!result) return <Badge variant=\"muted\">not loaded</Badge>;\n if (result.source === \"live\" && result.ok) return <Badge variant=\"success\">{mode === \"basic\" ? \"ready\" : \"connected\"}</Badge>;\n return <Badge variant=\"warning\">{mode === \"basic\" ? \"needs setup\" : \"unavailable\"}</Badge>;\n}\n\nexport function EmptyState({ title = \"Unavailable\", detail }: { title?: string; detail?: React.ReactNode }) {\n return (\n <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\">\n <div className=\"grid h-10 w-10 place-items-center rounded-md border border-border bg-card\">\n <Sparkles className=\"h-5 w-5 text-primary\" />\n </div>\n <div className=\"text-base font-semibold text-foreground\">{title}</div>\n {detail ? <div className=\"max-w-md leading-6\">{detail}</div> : null}\n </div>\n );\n}\n\nexport function DataPanel<T>({\n title,\n description,\n result,\n children,\n className,\n}: {\n title: string;\n description?: string;\n result?: ApiResult<T>;\n children: (data: T) => React.ReactNode;\n className?: string;\n}) {\n const mode = useAppStore((state) => state.mode);\n return (\n <Card className={cn(\"overflow-hidden\", className)}>\n <CardHeader className=\"flex-row items-start justify-between gap-3\">\n <div>\n <CardTitle>{title}</CardTitle>\n {description ? <CardDescription>{description}</CardDescription> : null}\n </div>\n <SourceBadge result={result} />\n </CardHeader>\n <CardContent>\n {result?.ok ? children(result.data) : (\n <EmptyState detail={mode === \"basic\" ? \"This area needs setup or is not available yet.\" : result?.error || \"This capability is not reporting right now.\"} />\n )}\n </CardContent>\n </Card>\n );\n}\n\nexport function LoadingPanel({ title }: { title: string }) {\n return (\n <Card>\n <CardHeader>\n <CardTitle>{title}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading\n </div>\n </CardContent>\n </Card>\n );\n}\n\nexport function StatGrid({ stats }: { stats: Array<{ label: string; value: unknown; hint?: string }> }) {\n return (\n <div className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"rounded-lg border border-border bg-background/55 p-4\">\n <div className=\"text-xs uppercase text-muted-foreground\">{stat.label}</div>\n <div className=\"mt-2 text-2xl font-semibold leading-tight\">{typeof stat.value === \"number\" ? fmtNumber(stat.value) : String(stat.value ?? \"-\")}</div>\n {stat.hint ? <div className=\"mt-2 text-xs leading-5 text-muted-foreground\">{stat.hint}</div> : null}\n </div>\n ))}\n </div>\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction scalarText(value: unknown) {\n if (value === null || value === undefined || value === \"\") return \"-\";\n if (typeof value === \"number\") return Number.isFinite(value) ? fmtNumber(value) : \"-\";\n if (typeof value === \"boolean\") return value ? \"Enabled\" : \"Disabled\";\n return String(value);\n}\n\nconst BASIC_HIDDEN_KEY = /(^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;\n\nfunction hideInBasic(key: string) {\n return BASIC_HIDDEN_KEY.test(key);\n}\n\nfunction humanText(value: unknown) {\n const text = scalarText(value);\n if (text === \"-\") return text;\n if (text.includes(\"/\") || text.includes(\"@\") || /\\.[a-z0-9]{2,5}$/i.test(text)) return text;\n return titleize(text.replace(/^agent:/i, \"\").replace(/^tool:/i, \"\"));\n}\n\nfunction firstRecordList(value: Record<string, unknown>) {\n const preferred = [\n \"documents\", \"sources\", \"items\", \"agents\", \"workflows\", \"runs\", \"events\",\n \"permissions\", \"models\", \"peers\", \"invitations\", \"roles\", \"policies\",\n \"hooks\", \"tools\", \"templates\", \"plugins\", \"recent_events\",\n ];\n for (const key of preferred) {\n const rows = asArray<Record<string, unknown>>(value[key]);\n if (rows.length) return rows;\n }\n return [];\n}\n\nexport function ValuePreview({ value }: { value: unknown }) {\n if (typeof value === \"boolean\") {\n return <Badge variant={value ? \"success\" : \"muted\"}>{value ? \"enabled\" : \"disabled\"}</Badge>;\n }\n if (Array.isArray(value)) {\n if (!value.length) return <span className=\"text-muted-foreground\">None</span>;\n const primitive = value.every((item) => item === null || [\"string\", \"number\", \"boolean\"].includes(typeof item));\n if (primitive) {\n return (\n <span className=\"flex flex-wrap gap-1\">\n {value.slice(0, 5).map((item, index) => <Badge key={`${String(item)}-${index}`} variant=\"muted\">{scalarText(item)}</Badge>)}\n {value.length > 5 ? <Badge variant=\"muted\">+{value.length - 5}</Badge> : null}\n </span>\n );\n }\n return <span className=\"text-muted-foreground\">{fmtNumber(value.length)} records</span>;\n }\n if (isRecord(value)) {\n const keys = Object.keys(value);\n if (!keys.length) return <span className=\"text-muted-foreground\">No fields</span>;\n return <span className=\"text-muted-foreground\">{keys.slice(0, 4).map(titleize).join(\", \")}{keys.length > 4 ? ` +${keys.length - 4}` : \"\"}</span>;\n }\n const text = scalarText(value);\n return <span className=\"break-words\">{text.length > 96 ? shortId(text, 96) : text}</span>;\n}\n\nexport function KeyValueList({ data, limit = 8 }: { data: Record<string, unknown>; limit?: number }) {\n const mode = useAppStore((state) => state.mode);\n const rows = Object.entries(data || {})\n .filter(([key]) => mode !== \"basic\" || !hideInBasic(key))\n .slice(0, limit);\n if (!rows.length) return <EmptyState title=\"No values\" />;\n return (\n <div className=\"divide-y divide-border rounded-md border border-border\">\n {rows.map(([key, value]) => (\n <div key={key} className=\"grid grid-cols-[minmax(9rem,0.5fr)_1fr] gap-3 p-3 text-sm\">\n <span className=\"font-medium text-muted-foreground\">{titleize(key)}</span>\n <span className=\"min-w-0 break-words\"><ValuePreview value={value} /></span>\n </div>\n ))}\n </div>\n );\n}\n\nexport function StructuredView({\n value,\n titleKey = \"title\",\n metaKey = \"status\",\n limit = 8,\n}: {\n value: unknown;\n titleKey?: string;\n metaKey?: string;\n limit?: number;\n}) {\n const mode = useAppStore((state) => state.mode);\n if (mode === \"basic\") return <FriendlySummary value={value} titleKey={titleKey} metaKey={metaKey} limit={limit} />;\n if (Array.isArray(value)) {\n if (!value.length) return <EmptyState title=\"Nothing here yet\" detail=\"New items will appear here when Lattice has something to show.\" />;\n if (value.every((item) => isRecord(item))) {\n return <EntityList items={value} titleKey={titleKey} metaKey={metaKey} limit={limit} />;\n }\n return (\n <div className=\"flex flex-wrap gap-1 rounded-md border border-border bg-background p-3\">\n {value.slice(0, limit).map((item, index) => <Badge key={`${String(item)}-${index}`} variant=\"muted\">{scalarText(item)}</Badge>)}\n {value.length > limit ? <Badge variant=\"muted\">+{value.length - limit}</Badge> : null}\n </div>\n );\n }\n if (isRecord(value)) return <KeyValueList data={value} limit={limit} />;\n return (\n <div className=\"rounded-md border border-border bg-background p-3 text-sm\">\n <ValuePreview value={value} />\n </div>\n );\n}\n\nexport function FriendlySummary({\n value,\n titleKey = \"title\",\n metaKey = \"status\",\n limit = 6,\n}: {\n value: unknown;\n titleKey?: string;\n metaKey?: string;\n limit?: number;\n}) {\n if (Array.isArray(value)) {\n if (!value.length) return <EmptyState title=\"Nothing here yet\" detail=\"New items will appear here when Lattice has something to show.\" />;\n if (value.every((item) => isRecord(item))) {\n return <EntityList items={value} titleKey={titleKey} metaKey={metaKey} limit={limit} />;\n }\n return (\n <div className=\"flex flex-wrap gap-1 rounded-md border border-border bg-background/55 p-3\">\n {value.slice(0, limit).map((item, index) => <Badge key={`${String(item)}-${index}`} variant=\"muted\">{humanText(item)}</Badge>)}\n {value.length > limit ? <Badge variant=\"muted\">+{value.length - limit}</Badge> : null}\n </div>\n );\n }\n if (isRecord(value)) {\n const list = firstRecordList(value);\n if (list.length) return <EntityList items={list} titleKey={titleKey} metaKey={metaKey} limit={limit} />;\n const friendly = Object.fromEntries(\n Object.entries(value)\n .filter(([key]) => !hideInBasic(key))\n .map(([key, item]) => [key, Array.isArray(item) ? `${fmtNumber(item.length)} items` : isRecord(item) ? \"available\" : item]),\n );\n return <KeyValueList data={friendly} limit={limit} />;\n }\n return (\n <div className=\"rounded-md border border-border bg-background/55 p-3 text-sm\">\n {humanText(value)}\n </div>\n );\n}\n\nexport function OperationResult({\n result,\n successLabel = \"Request completed\",\n}: {\n result?: ApiResult<unknown> | null;\n successLabel?: string;\n}) {\n const mode = useAppStore((state) => state.mode);\n if (!result) return null;\n if (!result.ok) {\n return <EmptyState title=\"Request unavailable\" detail={result.error || <ValuePreview value={result.data} />} />;\n }\n return (\n <div className=\"space-y-2 rounded-md border border-border bg-background p-3\">\n <Badge variant=\"success\">{successLabel}</Badge>\n {mode === \"basic\" ? <FriendlySummary value={result.data} /> : <StructuredView value={result.data} />}\n </div>\n );\n}\n\nexport function EntityList({\n items,\n titleKey = \"title\",\n metaKey = \"type\",\n limit = 8,\n}: {\n items: unknown;\n titleKey?: string;\n metaKey?: string;\n limit?: number;\n}) {\n const mode = useAppStore((state) => state.mode);\n const rows = asArray<Record<string, unknown>>(items).slice(0, limit);\n if (!rows.length) return <EmptyState title=\"Nothing here yet\" detail=\"New items will appear here when Lattice has something to show.\" />;\n return (\n <div className=\"grid gap-2\">\n {rows.map((item, index) => (\n <div key={String(item.id || item.name || index)} className=\"rounded-lg border border-border bg-background/55 p-3\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"font-medium\">{mode === \"basic\" ? humanText(item[titleKey] || item.name || item.label || `Item ${index + 1}`) : String(item[titleKey] || item.name || item.id || `Record ${index + 1}`)}</div>\n <Badge variant=\"muted\">{mode === \"basic\" ? humanText(item[metaKey] || item.status || item.state || \"ready\") : String(item[metaKey] || item.status || item.state || \"record\")}</Badge>\n </div>\n {item.summary || item.description || item.path || (item.id && item[titleKey] !== item.id) ? (\n <p className=\"mt-1 text-sm text-muted-foreground\">{String(item.summary || item.description || item.path || item.id)}</p>\n ) : null}\n {mode !== \"basic\" && item.id && item[titleKey] !== item.id ? (\n <div className=\"mt-1 text-xs text-muted-foreground\">{shortId(item.id, 48)}</div>\n ) : null}\n </div>\n ))}\n </div>\n );\n}\n\nexport function ModeGate({\n title = \"Advanced controls\",\n detail = \"Switch modes when you want diagnostics or administrative controls. Basic mode keeps the product focused on everyday use.\",\n target = \"advanced\",\n}: {\n title?: string;\n detail?: string;\n target?: \"advanced\" | \"admin\";\n}) {\n const setMode = useAppStore((state) => state.setMode);\n return (\n <Card>\n <CardContent className=\"flex flex-col items-start gap-3 p-6\">\n <div className=\"grid h-10 w-10 place-items-center rounded-md border border-border bg-background/70\">\n <LockKeyhole className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <div className=\"text-lg font-semibold\">{title}</div>\n <p className=\"mt-1 max-w-2xl text-sm leading-6 text-muted-foreground\">{detail}</p>\n </div>\n <Button onClick={() => setMode(target)}>{target === \"admin\" ? \"Switch to Admin Console\" : \"Switch to Advanced\"}</Button>\n </CardContent>\n </Card>\n );\n}\n\nexport function ActionButton({\n label,\n successLabel = \"Done\",\n action,\n invalidate,\n variant = \"outline\",\n disabled,\n}: {\n label: string;\n successLabel?: string;\n action: () => Promise<ApiResult<unknown>>;\n invalidate?: string[];\n variant?: React.ComponentProps<typeof Button>[\"variant\"];\n disabled?: boolean;\n}) {\n const qc = useQueryClient();\n const [result, setResult] = React.useState<string | null>(null);\n const mut = useMutation({\n mutationFn: action,\n onSuccess: async (res) => {\n setResult(res.ok ? successLabel : res.error || \"Unavailable\");\n if (invalidate) {\n await Promise.all(invalidate.map((key) => qc.invalidateQueries({ queryKey: [key] })));\n }\n },\n });\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button variant={variant} disabled={disabled || mut.isPending} onClick={() => mut.mutate()}>\n {mut.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : null}\n {label}\n </Button>\n {result ? (\n <span className={cn(\"inline-flex items-center gap-1 text-xs\", result === successLabel ? \"text-emerald-300\" : \"text-amber-300\")}>\n {result === successLabel ? <CheckCircle2 className=\"h-3.5 w-3.5\" /> : <AlertCircle className=\"h-3.5 w-3.5\" />}\n {result}\n </span>\n ) : null}\n </div>\n );\n}\n\nexport function Tabs({\n tabs,\n value,\n onChange,\n}: {\n tabs: Array<{ id: string; label: string }>;\n value: string;\n onChange: (id: string) => void;\n}) {\n return (\n <div className=\"inline-flex max-w-full flex-wrap gap-1 rounded-lg border border-border bg-muted/28 p-1\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => onChange(tab.id)}\n className={cn(\n \"h-9 rounded-md px-3.5 text-sm font-semibold transition\",\n value === tab.id ? \"bg-card text-foreground shadow-sm\" : \"text-muted-foreground hover:bg-card/60 hover:text-foreground\",\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as e,M as t,P as n,S as r}from"./index-C-7aHabu.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};
|
|
2
|
-
//# sourceMappingURL=textarea-DR2Tyy_6.js.map
|