ltcai 9.8.0 → 9.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -28
- package/bin/ltcai.js +1 -1
- package/desktop/electron/main.cjs +1 -1
- package/docs/BENCHMARKS.md +107 -0
- package/docs/CHANGELOG.md +82 -0
- package/docs/CI_AND_RELEASE_GATES.md +106 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +11 -8
- package/docs/LEGACY_COMPATIBILITY.md +48 -49
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +15 -6
- package/docs/PERFORMANCE.md +9 -1
- package/docs/SECURITY_AUDIT.md +91 -0
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/USABILITY_AUDIT.md +164 -0
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/architecture.md +4 -2
- package/docs/kg-schema.md +6 -6
- package/docs/spec-vs-impl.md +8 -1
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/schema.py +1 -1
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/review_queue.py +7 -0
- package/latticeai/core/agent.py +105 -8
- package/latticeai/core/agent_eval.py +99 -1
- package/latticeai/core/legacy_compatibility.py +71 -47
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/tool_governor.py +92 -1
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/change_proposals.py +165 -23
- package/latticeai/services/product_readiness.py +2 -2
- package/latticeai/services/tool_dispatch.py +33 -0
- package/latticeai/tools/__init__.py +1 -1
- package/latticeai/tools/knowledge.py +1 -1
- package/package.json +9 -17
- package/scripts/bench_models.py +312 -0
- package/scripts/check_bundle_budget.mjs +103 -0
- package/scripts/check_current_release_docs.mjs +20 -1
- package/scripts/check_doc_status.mjs +149 -0
- package/scripts/check_legacy_debt.mjs +91 -0
- package/scripts/generate_sbom.py +70 -0
- package/scripts/prune_release_evidence.mjs +38 -0
- package/scripts/wheel_smoke.py +22 -6
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/src/main.rs +12 -12
- package/src-tauri/tauri.conf.json +1 -13
- package/static/app/asset-manifest.json +27 -11
- package/static/app/assets/Act-CcSWTQsx.js +1 -0
- package/static/app/assets/{Brain-BMkgdWnI.js → Brain-CSCDZEHd.js} +2 -2
- package/static/app/assets/BrainHome-B5QpJ1Fx.js +2 -0
- package/static/app/assets/BrainSignals-CmFD8PWk.js +1 -0
- package/static/app/assets/Capture-BiuerOio.js +1 -0
- package/static/app/assets/CommandPalette-BrqpT7K2.js +1 -0
- package/static/app/assets/Library-BcaiPbum.js +1 -0
- package/static/app/assets/LivingBrain-6FvA0H5T.js +1 -0
- package/static/app/assets/ProductFlow-Cr8bkQPw.js +1 -0
- package/static/app/assets/ReviewCard-D56TMypk.js +1 -0
- package/static/app/assets/System-D6uJacqu.js +1 -0
- package/static/app/assets/bot-DgC7xgUl.js +1 -0
- package/static/app/assets/cpu-DDGb4XHl.js +1 -0
- package/static/app/assets/download-C-Ei3GFa.js +1 -0
- package/static/app/assets/folder-open-BbVuSO9M.js +1 -0
- package/static/app/assets/hard-drive-yDZR6XYz.js +1 -0
- package/static/app/assets/index-CFRhNBuH.css +2 -0
- package/static/app/assets/index-DrZSkwrE.js +10 -0
- package/static/app/assets/input-DPIkTs9n.js +1 -0
- package/static/app/assets/navigation-B1mkmyUe.js +1 -0
- package/static/app/assets/network-0XDI1Uf_.js +1 -0
- package/static/app/assets/primitives-sIQYKyf5.js +1 -0
- package/static/app/assets/sunrise-DXMjueec.js +1 -0
- package/static/app/assets/textarea-DvnwpnqS.js +1 -0
- package/static/app/assets/utils-BrfFHAJl.js +7 -0
- package/static/app/index.html +4 -2
- package/static/sw.js +1 -1
- package/auto_setup.py +0 -21
- package/kg_schema.py +0 -13
- package/knowledge_graph.py +0 -51
- package/knowledge_graph_api.py +0 -24
- package/llm_router.py +0 -20
- package/local_knowledge_api.py +0 -16
- package/ltcai_cli.py +0 -21
- package/mcp_registry.py +0 -20
- package/p_reinforce.py +0 -16
- package/setup_wizard.py +0 -16
- package/static/app/assets/Act-Dd3z8AzF.js +0 -2
- package/static/app/assets/Capture-D2Aw9gkv.js +0 -1
- package/static/app/assets/Library-Yreq-KW5.js +0 -1
- package/static/app/assets/System-CXNmmtEo.js +0 -1
- package/static/app/assets/index-7gY9t9Sd.css +0 -2
- package/static/app/assets/index-CndfILiF.js +0 -18
- package/static/app/assets/primitives-DxsIXb6G.js +0 -1
- package/static/app/assets/textarea-DH7ne8VI.js +0 -1
- package/telegram_bot.py +0 -16
- package/tools/__init__.py +0 -29
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,D as t,E as n,F as r,I as i,M as a,N as o,O as s,R as c,S as l,T as u,U as d,V as f,a as p,c as m,k as h,p as g,z as _}from"./index-CndfILiF.js";var v=u(`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`}]]),y=u(`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`}]]),b=d(f()),x=_(),S={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 C({className:e,variant:t=`default`,...n}){return(0,x.jsx)(`span`,{className:s(`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`,S[t],e),...n})}function w({className:e,...t}){return(0,x.jsx)(`section`,{className:s(`premium-surface rounded-lg text-card-foreground`,e),...t})}function T({className:e,...t}){return(0,x.jsx)(`div`,{className:s(`flex flex-col gap-1.5 p-5`,e),...t})}function E({className:e,...t}){return(0,x.jsx)(`h2`,{className:s(`text-base font-semibold tracking-normal`,e),...t})}function D({className:e,...t}){return(0,x.jsx)(`p`,{className:s(`text-sm leading-6 text-muted-foreground`,e),...t})}function O({className:e,...t}){return(0,x.jsx)(`div`,{className:s(`p-5 pt-0`,e),...t})}function k({result:e}){let t=r(e=>e.mode),i=r(e=>e.language);return e?e.source===`live`&&e.ok?(0,x.jsx)(C,{variant:`success`,children:t===`basic`?n(i,`ui.status.ready`):n(i,`ui.status.connected`)}):(0,x.jsx)(C,{variant:`warning`,children:t===`basic`?n(i,`ui.status.needsSetup`):n(i,`ui.status.unavailable`)}):(0,x.jsx)(C,{variant:`muted`,children:n(i,`ui.status.notLoaded`)})}function A({title:e,detail:t}){let i=r(e=>e.language);return(0,x.jsxs)(`div`,{className:`product-empty-state 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,x.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-card`,children:(0,x.jsx)(m,{className:`h-5 w-5 text-primary`})}),(0,x.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:e||n(i,`ui.empty.title`)}),t?(0,x.jsx)(`div`,{className:`max-w-md leading-6`,children:t}):null]})}function j({title:e,description:t,result:i,children:a,className:o}){let c=r(e=>e.mode),l=r(e=>e.language);return(0,x.jsxs)(w,{className:s(`data-panel overflow-hidden`,o),children:[(0,x.jsxs)(T,{className:`flex-row items-start justify-between gap-3`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(E,{children:e}),t?(0,x.jsx)(D,{children:t}):null]}),c===`basic`?null:(0,x.jsx)(k,{result:i})]}),(0,x.jsx)(O,{children:i?.ok?a(i.data):(0,x.jsx)(A,{detail:c===`basic`?n(l,`ui.empty.basicDetail`):i?.error||n(l,`ui.empty.advancedDetail`)})})]})}function M({title:e}){let t=r(e=>e.language);return(0,x.jsxs)(w,{children:[(0,x.jsx)(T,{children:(0,x.jsx)(E,{children:e})}),(0,x.jsx)(O,{children:(0,x.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,x.jsx)(g,{className:`h-4 w-4 animate-spin`}),` `,n(t,`ui.loading`)]})})]})}function N({stats:e}){return(0,x.jsx)(`div`,{className:`data-stat-grid grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:e.map(e=>(0,x.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-4`,children:[(0,x.jsx)(`div`,{className:`text-xs uppercase text-muted-foreground`,children:e.label}),(0,x.jsx)(`div`,{className:`mt-2 text-2xl font-semibold leading-tight`,children:typeof e.value==`number`?h(e.value):String(e.value??`-`)}),e.hint?(0,x.jsx)(`div`,{className:`mt-2 text-xs leading-5 text-muted-foreground`,children:e.hint}):null]},e.label))})}function P(e){return e==null||e===``?`-`:typeof e==`number`?Number.isFinite(e)?h(e):`-`:typeof e==`boolean`?e?`Enabled`:`Disabled`:String(e)}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 t=P(e);return t===`-`||t.includes(`/`)||t.includes(`@`)||/\.[a-z0-9]{2,5}$/i.test(t)?t:o(t.replace(/^agent:/i,``).replace(/^tool:/i,``))}function R(e){for(let n of[`documents`,`sources`,`items`,`agents`,`workflows`,`runs`,`events`,`permissions`,`models`,`peers`,`invitations`,`roles`,`policies`,`hooks`,`tools`,`templates`,`plugins`,`recent_events`]){let r=t(e[n]);if(r.length)return r}return[]}function z({value:t}){let i=r(e=>e.language);if(typeof t==`boolean`)return(0,x.jsx)(C,{variant:t?`success`:`muted`,children:n(i,t?`ui.value.enabled`:`ui.value.disabled`)});if(Array.isArray(t))return t.length?t.every(e=>e===null||[`string`,`number`,`boolean`].includes(typeof e))?(0,x.jsxs)(`span`,{className:`flex flex-wrap gap-1`,children:[t.slice(0,5).map((e,t)=>(0,x.jsx)(C,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),t.length>5?(0,x.jsxs)(C,{variant:`muted`,children:[`+`,t.length-5]}):null]}):(0,x.jsx)(`span`,{className:`text-muted-foreground`,children:n(i,`ui.value.records`,{count:h(t.length)})}):(0,x.jsx)(`span`,{className:`text-muted-foreground`,children:n(i,`ui.value.none`)});if(e(t)){let e=Object.keys(t);return e.length?(0,x.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.slice(0,4).map(o).join(`, `),e.length>4?` +${e.length-4}`:``]}):(0,x.jsx)(`span`,{className:`text-muted-foreground`,children:n(i,`ui.value.noFields`)})}let s=P(t);return(0,x.jsx)(`span`,{className:`break-words`,children:s.length>96?a(s,96):s})}function B({data:e,limit:t=8}){let i=r(e=>e.mode),a=r(e=>e.language),s=Object.entries(e||{}).filter(([e])=>i!==`basic`||!I(e)).slice(0,t);return s.length?(0,x.jsx)(`div`,{className:`divide-y divide-border rounded-md border border-border`,children:s.map(([e,t])=>(0,x.jsxs)(`div`,{className:`grid grid-cols-[minmax(9rem,0.5fr)_1fr] gap-3 p-3 text-sm`,children:[(0,x.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:o(e)}),(0,x.jsx)(`span`,{className:`min-w-0 break-words`,children:(0,x.jsx)(z,{value:t})})]},e))}):(0,x.jsx)(A,{title:n(a,`ui.noValues`)})}function V({value:t,titleKey:i=`title`,metaKey:a=`status`,limit:o=8}){let s=r(e=>e.mode),c=r(e=>e.language);return s===`basic`?(0,x.jsx)(H,{value:t,titleKey:i,metaKey:a,limit:o}):Array.isArray(t)?t.length?t.every(t=>e(t))?(0,x.jsx)(W,{items:t,titleKey:i,metaKey:a,limit:o}):(0,x.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background p-3`,children:[t.slice(0,o).map((e,t)=>(0,x.jsx)(C,{variant:`muted`,children:P(e)},`${String(e)}-${t}`)),t.length>o?(0,x.jsxs)(C,{variant:`muted`,children:[`+`,t.length-o]}):null]}):(0,x.jsx)(A,{detail:n(c,`ui.empty.listDetail`)}):e(t)?(0,x.jsx)(B,{data:t,limit:o}):(0,x.jsx)(`div`,{className:`rounded-md border border-border bg-background p-3 text-sm`,children:(0,x.jsx)(z,{value:t})})}function H({value:t,titleKey:i=`title`,metaKey:a=`status`,limit:o=6}){let s=r(e=>e.language);if(Array.isArray(t))return t.length?t.every(t=>e(t))?(0,x.jsx)(W,{items:t,titleKey:i,metaKey:a,limit:o}):(0,x.jsxs)(`div`,{className:`flex flex-wrap gap-1 rounded-md border border-border bg-background/55 p-3`,children:[t.slice(0,o).map((e,t)=>(0,x.jsx)(C,{variant:`muted`,children:L(e)},`${String(e)}-${t}`)),t.length>o?(0,x.jsxs)(C,{variant:`muted`,children:[`+`,t.length-o]}):null]}):(0,x.jsx)(A,{detail:n(s,`ui.empty.listDetail`)});if(e(t)){let n=R(t);return n.length?(0,x.jsx)(W,{items:n,titleKey:i,metaKey:a,limit:o}):(0,x.jsx)(B,{data:Object.fromEntries(Object.entries(t).filter(([e])=>!I(e)).map(([t,n])=>[t,Array.isArray(n)?`${h(n.length)} items`:e(n)?`available`:n])),limit:o})}return(0,x.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 i=r(e=>e.mode),a=r(e=>e.language);return e?e.ok?(0,x.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border bg-background p-3`,children:[(0,x.jsx)(C,{variant:`success`,children:t||n(a,`ui.requestCompleted`)}),i===`basic`?(0,x.jsx)(H,{value:e.data}):(0,x.jsx)(V,{value:e.data})]}):(0,x.jsx)(A,{title:n(a,`ui.requestUnavailable`),detail:e.error||(0,x.jsx)(z,{value:e.data})}):null}function W({items:e,titleKey:i=`title`,metaKey:o=`type`,limit:s=8}){let c=r(e=>e.mode),l=r(e=>e.language),u=t(e).slice(0,s);return u.length?(0,x.jsx)(`div`,{className:`entity-list grid gap-2`,children:u.map((e,t)=>(0,x.jsxs)(`div`,{className:`entity-list-row rounded-lg border border-border bg-background/55 p-3`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,x.jsx)(`div`,{className:`font-medium`,children:c===`basic`?L(e[i]||e.name||e.label||`Item ${t+1}`):String(e[i]||e.name||e.id||`Record ${t+1}`)}),(0,x.jsx)(C,{variant:`muted`,children:c===`basic`?L(e[o]||e.status||e.state||`ready`):String(e[o]||e.status||e.state||`record`)})]}),e.summary||e.description||e.path||e.id&&e[i]!==e.id?(0,x.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:String(e.summary||e.description||e.path||e.id)}):null,c!==`basic`&&e.id&&e[i]!==e.id?(0,x.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:a(e.id,48)}):null]},String(e.id||e.name||t)))}):(0,x.jsx)(A,{detail:n(l,`ui.empty.listDetail`)})}function G({title:e,detail:t,target:i=`advanced`}){let a=r(e=>e.setMode),o=r(e=>e.language);return(0,x.jsx)(w,{children:(0,x.jsxs)(O,{className:`flex flex-col items-start gap-3 p-6`,children:[(0,x.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-md border border-border bg-background/70`,children:(0,x.jsx)(y,{className:`h-5 w-5 text-primary`})}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`div`,{className:`text-lg font-semibold`,children:e||n(o,`ui.modeGate.title`)}),(0,x.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t||n(o,`ui.modeGate.detail`)})]}),(0,x.jsx)(p,{onClick:()=>a(i),children:i===`admin`?n(o,`ui.modeGate.admin`):n(o,`ui.modeGate.advanced`)})]})})}function K({label:e,successLabel:t,action:a,onSuccess:o,invalidate:u,variant:d=`outline`,disabled:f}){let m=c(),h=r(e=>e.language),_=t||n(h,`ui.done`),[y,S]=b.useState(null),C=i({mutationFn:a,onSuccess:async e=>{S(e.ok?_:e.error||n(h,`ui.status.unavailable`)),e.ok&&(await o?.(e),u&&await Promise.all(u.map(e=>m.invalidateQueries({queryKey:[e]}))))}});return(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,x.jsxs)(p,{variant:d,disabled:f||C.isPending,onClick:()=>C.mutate(),children:[C.isPending?(0,x.jsx)(g,{className:`h-4 w-4 animate-spin`}):null,e]}),y?(0,x.jsxs)(`span`,{className:s(`inline-flex items-center gap-1 text-xs`,y===_?`text-success`:`text-warning`),children:[y===_?(0,x.jsx)(l,{className:`h-3.5 w-3.5`}):(0,x.jsx)(v,{className:`h-3.5 w-3.5`}),y]}):null]})}function q({tabs:e,value:t,onChange:n}){let r=b.useRef([]),i=(t,i)=>{let a=(t+i+e.length)%e.length;r.current[a]?.focus(),n(e[a].id)};return(0,x.jsx)(`div`,{className:`product-tabs inline-flex max-w-full flex-wrap gap-1 rounded-lg border border-border bg-muted/28 p-1`,role:`tablist`,children:e.map((a,o)=>(0,x.jsx)(`button`,{ref:e=>{r.current[o]=e},type:`button`,role:`tab`,"aria-selected":t===a.id,tabIndex:t===a.id?0:-1,onClick:()=>n(a.id),onKeyDown:t=>{t.key===`ArrowRight`||t.key===`ArrowDown`?(t.preventDefault(),i(o,1)):t.key===`ArrowLeft`||t.key===`ArrowUp`?(t.preventDefault(),i(o,-1)):t.key===`Home`?(t.preventDefault(),r.current[0]?.focus(),n(e[0].id)):t.key===`End`&&(t.preventDefault(),r.current[e.length-1]?.focus(),n(e[e.length-1].id))},className:s(`h-9 rounded-md px-3.5 text-sm font-semibold transition`,t===a.id?`bg-card text-foreground shadow-sm`:`text-muted-foreground hover:bg-card/60 hover:text-foreground`),children:a.label},a.id))})}export{E as _,B as a,U as c,q as d,z as f,T as g,D as h,W as i,N as l,O as m,j as n,M as o,w as p,A as r,G as s,K as t,V as u,C as v,v as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as e,U as t,V as n,z as r}from"./index-CndfILiF.js";var i=t(n()),a=r(),o=i.forwardRef(({className:t,...n},r)=>(0,a.jsx)(`textarea`,{ref:r,className:e(`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`,t),...n}));o.displayName=`Textarea`;export{o as t};
|
package/telegram_bot.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Compatibility shim for the historical root Telegram bot module."""
|
|
2
|
-
|
|
3
|
-
from latticeai.integrations import telegram_bot as _impl
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if __name__ == "__main__":
|
|
7
|
-
import asyncio
|
|
8
|
-
|
|
9
|
-
try:
|
|
10
|
-
asyncio.run(_impl.run_bot())
|
|
11
|
-
except KeyboardInterrupt:
|
|
12
|
-
pass
|
|
13
|
-
else:
|
|
14
|
-
import sys
|
|
15
|
-
|
|
16
|
-
sys.modules[__name__] = _impl
|
package/tools/__init__.py
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"""Compatibility alias for the physical :mod:`latticeai.tools` package.
|
|
2
|
-
|
|
3
|
-
This shim replaces itself with the implementation module instead of copying
|
|
4
|
-
exports. Thus legacy and package imports share globals, registry instances,
|
|
5
|
-
submodules, and monkeypatches.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from __future__ import annotations
|
|
9
|
-
|
|
10
|
-
import importlib
|
|
11
|
-
import sys
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
_IMPLEMENTATION = importlib.import_module("latticeai.tools")
|
|
15
|
-
|
|
16
|
-
for _submodule in (
|
|
17
|
-
"commands",
|
|
18
|
-
"computer",
|
|
19
|
-
"documents",
|
|
20
|
-
"filesystem",
|
|
21
|
-
"knowledge",
|
|
22
|
-
"local_files",
|
|
23
|
-
"network",
|
|
24
|
-
):
|
|
25
|
-
sys.modules[f"{__name__}.{_submodule}"] = importlib.import_module(
|
|
26
|
-
f"latticeai.tools.{_submodule}"
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
sys.modules[__name__] = _IMPLEMENTATION
|