mcard-studio 0.0.1 → 0.0.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.
- package/astro.config.mjs +6 -1
- package/bin/mcard-studio.mjs +1 -1
- package/dist/client/_astro/{ChartAnalyticsViewlet.Cevj0EOs.js → ChartAnalyticsViewlet.jrwIemvb.js} +1 -1
- package/dist/client/_astro/ClmPcardViewlet.C-fU7oZf.js +3 -0
- package/dist/client/_astro/D3GraphViewlet.BCZl0b2U.js +2 -0
- package/dist/client/_astro/DockviewSpatialWorkbench.B_I1GJHw.js +12 -0
- package/dist/client/_astro/{DocumentViewlets.Dm_GL3AL.js → DocumentViewlets.B53IqmpY.js} +1 -1
- package/dist/client/_astro/ExcalidrawWhiteboardViewlet.CFpPYSdn.js +1 -0
- package/dist/client/_astro/{FaroVCardSpanInstrumenter.BIk2NhJY.js → FaroVCardSpanInstrumenter.un8kDMWv.js} +1 -1
- package/dist/client/_astro/{FontSpecimenViewlet.CpONhJh0.js → FontSpecimenViewlet.D7Aw2xBZ.js} +1 -1
- package/dist/client/_astro/HeadMeta.astro_astro_type_script_index_0_lang.VDRYJCM-.js +1 -0
- package/dist/client/_astro/{ImageViewlet.CHeNvX6L.js → ImageViewlet.D4FN87n_.js} +1 -1
- package/dist/client/_astro/{KatexFormulaViewlet.Cy_InWOK.js → KatexFormulaViewlet.CzhdIOw8.js} +1 -1
- package/dist/client/_astro/KoishiChatViewlet.5mepQvLX.js +16 -0
- package/dist/client/_astro/MCardLibraryHarness.DE8KeghO.js +2 -0
- package/dist/client/_astro/{MarkdownViewlet.qoPlM-TZ.js → MarkdownViewlet.CRuuXXmF.js} +1 -1
- package/dist/client/_astro/{MermaidDiagramViewlet.RnwDfQl6.js → MermaidDiagramViewlet.eW6sk-rF.js} +1 -1
- package/dist/client/_astro/PCardRendererBridge.oxVKc0gN.js +1 -0
- package/dist/client/_astro/RendererPCardRegistry.CWjYZs2H.js +1 -0
- package/dist/client/_astro/{SchemaYamlViewlet.D6HVdmrq.js → SchemaYamlViewlet.ZJBvxItR.js} +1 -1
- package/dist/client/_astro/{ShellContainer.astro_astro_type_script_index_0_lang.2oi8fhQo.js → ShellContainer.astro_astro_type_script_index_0_lang.j_ELcN5d.js} +1 -1
- package/dist/client/_astro/{Spatial3dViewlet.CCYBSSib.js → Spatial3dViewlet.DnVMBENJ.js} +1 -1
- package/dist/client/_astro/StudioWorkbench.Blo5oSIw.js +7 -0
- package/dist/client/_astro/{SvgViewlet.BxlWQ-JX.js → SvgViewlet.BCje7Qqb.js} +1 -1
- package/dist/client/_astro/{TerminalView.DWZR-hUa.js → TerminalView.C_Ksz6lT.js} +4 -4
- package/dist/client/_astro/{ThemeSettingsViewlet.Cb1r8fWw.js → ThemeSettingsViewlet.DJpjQQ0Z.js} +1 -1
- package/dist/client/_astro/{TikzDiagramViewlet.CqY7VTeP.js → TikzDiagramViewlet.CXb1A8nf.js} +1 -1
- package/dist/client/_astro/{VideoPlayerViewlet.DoSYmmoQ.js → VideoPlayerViewlet.CmECt7yT.js} +1 -1
- package/dist/client/_astro/{WebappZenViewlet.CQW50OhX.js → WebappZenViewlet.whCmGVHR.js} +1 -1
- package/dist/client/_astro/{WelcomeViewport.LwKTA6h7.js → WelcomeViewport.BiYwLh6l.js} +1 -1
- package/dist/client/_astro/__vite-browser-external.CQZnr-r3.js +1 -0
- package/dist/client/_astro/{agentIdentityCredentialService.BtKVsl2C.js → agentIdentityCredentialService.UzMMwBwv.js} +5 -5
- package/dist/client/_astro/cardTypeDetector.Ci4APwhX.js +1 -0
- package/dist/client/_astro/disposable.Dsb0sbRP.js +1 -0
- package/dist/client/_astro/{markdownService.D-tM2RYx.js → markdownService.BgWjyJ57.js} +1 -1
- package/dist/client/_astro/{mcardStore.BiAvqM-D.js → mcardStore.CT-ollfl.js} +2 -2
- package/dist/client/_astro/mcardVfs.2UOw9Z-r.js +3 -0
- package/dist/client/_astro/polyfills._3wYPjZf.js +1 -0
- package/dist/client/_astro/rendererEventBus.DMH9afq9.js +1 -0
- package/dist/client/_astro/themeStore.CEt0e54l.js +1 -0
- package/dist/client/_astro/{tikzCompiler.DFojjdxR.js → tikzCompiler.fe3qomFY.js} +1 -1
- package/dist/client/_astro/{useMCardHydration.Co47OH3D.js → useMCardHydration.7Z-HfBh5.js} +1 -1
- package/dist/client/_astro/vendor-ai.D6NcJ6lu.js +69 -0
- package/dist/client/_astro/vendor-clm-kernel.Bvk3XHk2.js +116 -0
- package/dist/client/_astro/vfsHandles.IX_wTpw_.js +1 -0
- package/dist/client/_astro/vfsPersistence.BuhXYeSb.js +1 -0
- package/dist/client/_astro/vfsTransactions.C_IQQg0s.js +1 -0
- package/dist/client/_astro/{workspaceStore.CXakha4Y.js → workspaceStore.CD0kAVAl.js} +1 -1
- package/dist/client/js/buffer-polyfill.js +14 -0
- package/dist/server/chunks/{StudioLayout_D163irJ0.mjs → StudioLayout_B5ZnlqjF.mjs} +2 -2
- package/dist/server/chunks/{_.._ZXsz792-.mjs → _.._5gPhVOLM.mjs} +1 -1
- package/dist/server/chunks/{mcard-library_DvPPUs9_.mjs → mcard-library_7Wzoihkm.mjs} +1 -1
- package/dist/server/chunks/{ws-server-init_CkcgcI5V.mjs → ws-server-init_DUjuR2-o.mjs} +3 -3
- package/dist/server/entry.mjs +8 -4
- package/dist/server/entry2.mjs +3 -3
- package/dist/server/virtual_astro_middleware.mjs +1 -1
- package/package.json +1 -1
- package/public/js/buffer-polyfill.js +14 -0
- package/src/layouts/StudioLayout.astro +1 -0
- package/src/pages/index.astro +75 -0
- package/src/services/inBrowserLlm/engines/litertEngine.ts +1 -1
- package/dist/client/_astro/ClmPcardViewlet.DW5Yft0E.js +0 -3
- package/dist/client/_astro/D3GraphViewlet.DAjPz1DP.js +0 -2
- package/dist/client/_astro/DockviewSpatialWorkbench.DyQjSoHd.js +0 -12
- package/dist/client/_astro/ExcalidrawWhiteboardViewlet.DrlW7B6G.js +0 -1
- package/dist/client/_astro/HeadMeta.astro_astro_type_script_index_0_lang.DGXU-3Lu.js +0 -1
- package/dist/client/_astro/KoishiChatViewlet.B0eDEMnT.js +0 -16
- package/dist/client/_astro/MCardLibraryHarness.CUJLJFBt.js +0 -2
- package/dist/client/_astro/PCardRendererBridge.BnyaE05I.js +0 -1
- package/dist/client/_astro/RendererPCardRegistry.CLr4j1Ub.js +0 -1
- package/dist/client/_astro/StudioWorkbench.CF0SOYwy.js +0 -7
- package/dist/client/_astro/cardTypeDetector.C9kGObMh.js +0 -1
- package/dist/client/_astro/disposable.66apX1Q2.js +0 -1
- package/dist/client/_astro/empty.DOwCrGXH.js +0 -1
- package/dist/client/_astro/mcardVfs.Bj-RA0p7.js +0 -2
- package/dist/client/_astro/path.CR60mj9W.js +0 -1
- package/dist/client/_astro/polyfills.DcBkS56X.js +0 -1
- package/dist/client/_astro/rendererEventBus.CyFnSRLk.js +0 -1
- package/dist/client/_astro/themeStore.zUMFLo3Q.js +0 -1
- package/dist/client/_astro/vendor-ai.CZe7UVVK.js +0 -69
- package/dist/client/_astro/vfsHandles.B-nczBRy.js +0 -1
- package/dist/client/_astro/vfsPersistence.D6zRzVML.js +0 -1
- package/dist/client/_astro/vfsTransactions.04mkEHxD.js +0 -1
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["_astro/MarkdownViewlet.qoPlM-TZ.js","_astro/rolldown-runtime.Dd_uD5pT.js","_astro/vendor-react.DpDU3q_x.js","_astro/themeStore.zUMFLo3Q.js","_astro/mcardStore.BiAvqM-D.js","_astro/workspaceStore.CXakha4Y.js","_astro/pathsConfig.D0hV34p7.js","_astro/vfsHandles.B-nczBRy.js","_astro/cardTypeDetector.C9kGObMh.js","_astro/disposable.66apX1Q2.js","_astro/webappUrlResolver.BdblM2xU.js","_astro/mcardVfs.Bj-RA0p7.js","_astro/preload-helper.oCYlU9a4.js","_astro/vfsPersistence.D6zRzVML.js","_astro/markdownService.D-tM2RYx.js","_astro/rendererEventBus.CyFnSRLk.js","_astro/RendererPCardRegistry.CLr4j1Ub.js","_astro/useMCardHydration.Co47OH3D.js","_astro/RendererLoader.D-ThYU1B.js","_astro/mediaEmbeds.CWeXA8QP.js","_astro/vendor-katex.OWop7R8Y.js","_astro/vendor-katex.BNLSuGWh.css","_astro/tikzCompiler.DFojjdxR.js","_astro/mermaidParams.CoRBi7AN.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./rolldown-runtime.Dd_uD5pT.js";import{a as t,i as n}from"./vendor-react.DpDU3q_x.js";import{g as r}from"./themeStore.zUMFLo3Q.js";import{C as i,_ as a,c as o,l as s,o as c,s as l,v as u,x as d,y as f}from"./mcardStore.BiAvqM-D.js";import{r as p}from"./disposable.66apX1Q2.js";import{n as m,t as h}from"./pathsConfig.D0hV34p7.js";import{C as g,d as _,n as v,t as y}from"./Codicons.6XKAVgP8.js";import{a as b,c as ee,d as te,l as ne}from"./agentIdentityCredentialService.BtKVsl2C.js";import{t as x}from"./preload-helper.oCYlU9a4.js";import{c as S,l as re,s as ie,u as C}from"./mcardVfs.Bj-RA0p7.js";import{AgentDid as w,ChatBotTurnPCard as T,ContentHash as E,MCard as D,TriDatabaseManager as O,cardElement as k,commitSatoriTurnToTriDb as ae,commitToTriadicEventLog as oe,containsSatoriElements as se,extractToolCall as ce,imageElement as A,mintImageMCard as le,parseSatoriXml as ue,textElement as j}from"clm-kernel";var M=e(t(),1),de={personas:{"did:pkc:winston-architect":{did:`did:pkc:winston-architect`,name:`Winston`,role:`architect`,lens:`Rhetoric (∇_Plato)`,avatar:`🏛️`,status:`idle`,lastActive:Date.now()},"did:pkc:amelia-dev":{did:`did:pkc:amelia-dev`,name:`Amelia`,role:`developer`,lens:`Logic (set_logic)`,avatar:`⚡`,status:`idle`,lastActive:Date.now()},"did:pkc:paige-critic":{did:`did:pkc:paige-critic`,name:`Paige`,role:`critic`,lens:`Grammar (Δ_Orwell)`,avatar:`⚖️`,status:`idle`,lastActive:Date.now()}},floorLease:{holderDid:`did:pkc:winston-architect`,priority:`normal`,grantedAt:Date.now(),expiresAt:Date.now()+3e4,queue:[]},channelId:`channel:studio:default`,activeNodesCount:3},N=r(de);function fe(e,t=`normal`,n=3e4){let r=N.get(),i=r.personas[e];if(!i)return;let a=Date.now(),o={...r.personas};if(r.floorLease.holderDid&&o[r.floorLease.holderDid]){let e=o[r.floorLease.holderDid];e.status===`speaking`&&(o[r.floorLease.holderDid]={...e,status:`idle`})}o[e]={...i,status:`speaking`,lastActive:a};let s=r.floorLease.queue.filter(t=>t.did!==e);N.set({...r,personas:o,floorLease:{holderDid:e,priority:t,grantedAt:a,expiresAt:a+n,queue:s}})}function pe(){let e=N.get(),t=[`did:pkc:winston-architect`,`did:pkc:amelia-dev`,`did:pkc:paige-critic`],n=e.floorLease.holderDid,r=t[n?(t.indexOf(n)+1)%t.length:0];fe(r,`normal`)}var P=n();function me(e){switch(e){case`speaking`:return{color:`#4ec9b0`,label:`Speaking`,icon:`🔊`};case`reasoning`:return{color:`#75beff`,label:`Reasoning`,icon:`💭`};case`verifying`:return{color:`#c586c0`,label:`Verifying`,icon:`🔍`};case`offline`:return{color:`#666666`,label:`Offline`,icon:`💤`};default:return{color:`#888888`,label:`Idle`,icon:`⚪`}}}var he=({onSelectPersona:e})=>{let t=p(N),[n,r]=(0,M.useState)(null),i=Object.values(t.personas),a=t.floorLease.holderDid,o=a?t.personas[a]:null;return(0,P.jsxs)(`div`,{className:`swarm-presence-bar`,style:{display:`flex`,flexDirection:`column`,gap:`4px`,padding:`6px 10px`,backgroundColor:`rgba(30, 30, 30, 0.75)`,borderBottom:`1px solid rgba(255, 255, 255, 0.08)`,backdropFilter:`blur(8px)`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,fontSize:`11px`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`6px`},children:[(0,P.jsx)(`span`,{style:{fontSize:`9px`,textTransform:`uppercase`,letterSpacing:`0.5px`,padding:`1px 5px`,borderRadius:`3px`,backgroundColor:o?`rgba(78, 201, 176, 0.2)`:`rgba(255, 255, 255, 0.1)`,color:o?`#4ec9b0`:`#888888`,fontWeight:600,border:`1px solid rgba(78, 201, 176, 0.4)`},children:`Floor Lease (INV-259-01)`}),o?(0,P.jsxs)(`span`,{style:{color:`#d4d4d4`,fontWeight:500},children:[(0,P.jsx)(`span`,{style:{marginRight:`3px`},children:o.avatar}),(0,P.jsx)(`strong`,{style:{color:`#ffffff`},children:o.name}),` (`,o.role,`)`]}):(0,P.jsx)(`span`,{style:{color:`#888888`,fontStyle:`italic`},children:`Open Floor (No Speaker)`})]}),(0,P.jsxs)(`button`,{onClick:()=>pe(),title:`Cycle turn lease (Winston -> Amelia -> Paige)`,style:{background:`none`,border:`1px solid rgba(255, 255, 255, 0.15)`,color:`#75beff`,fontSize:`10px`,padding:`2px 7px`,borderRadius:`3px`,cursor:`pointer`,display:`flex`,alignItems:`center`,gap:`3px`},children:[(0,P.jsx)(`span`,{children:`↻`}),` Pass Floor`]})]}),(0,P.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`8px`,overflowX:`auto`,padding:`2px 0`},children:i.map(t=>{let i=t.did===a,o=me(t.status),s=t.did===n;return(0,P.jsxs)(`div`,{onClick:()=>{fe(t.did),e&&e(t)},onMouseEnter:()=>r(t.did),onMouseLeave:()=>r(null),title:`${t.name} (${t.role})\nLens: ${t.lens}\nDID: ${t.did}\nClick to grant floor`,style:{position:`relative`,display:`flex`,alignItems:`center`,gap:`5px`,padding:`3px 8px`,borderRadius:`16px`,backgroundColor:i?`rgba(78, 201, 176, 0.15)`:s?`rgba(255, 255, 255, 0.08)`:`rgba(255, 255, 255, 0.04)`,border:i?`1px solid #4ec9b0`:`1px solid rgba(255, 255, 255, 0.08)`,cursor:`pointer`,transition:`all 0.15s ease`,flexShrink:0},children:[(0,P.jsx)(`span`,{style:{fontSize:`13px`},children:t.avatar}),(0,P.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,lineHeight:1.1},children:[(0,P.jsx)(`span`,{style:{fontSize:`11px`,fontWeight:i?700:500,color:i?`#4ec9b0`:`#cccccc`},children:t.name}),(0,P.jsx)(`span`,{style:{fontSize:`9px`,color:`#888888`,letterSpacing:`0.2px`},children:t.role})]}),(0,P.jsx)(`span`,{style:{width:`6px`,height:`6px`,borderRadius:`50%`,backgroundColor:o.color,boxShadow:i?`0 0 6px ${o.color}`:`none`,marginLeft:`2px`}})]},t.did)})})]})},ge=[{id:`gemini:gemini-3.8-flash`,name:`Gemini 3.8 Flash (1M Context, Thinking CoT)`},{id:`gemini:gemini-3.5-flash`,name:`Gemini 3.5 Flash (1M Context, High Reliability)`},{id:`gemini:gemini-3.5-flash-lite`,name:`Gemini 3.5 Flash-Lite (Low Latency)`},{id:`gemini:gemini-3.8-pro`,name:`Gemini 3.8 Pro (2M Context)`},{id:`gemini:gemini-3.8-thinking`,name:`Gemini 3.8 Thinking (Extended CoT)`}],_e=[{id:`remote:deepseek-v3`,name:`DeepSeek-V3 (api.deepseek.com)`},{id:`remote:openai-gpt4o`,name:`OpenAI GPT-4o (api.openai.com)`}],ve=()=>{let e=p(c),t=p(o),n=p(ne),r=p(l),i=!!(r.apiKey&&r.apiKey.trim().length>0);return(0,M.useEffect)(()=>{e.startsWith(`gemini:`)&&(ge.some(t=>t.id===e)||(c.set(`gemini:gemini-3.8-flash`),typeof window<`u`&&(localStorage.setItem(`clm:chat:active_model`,`gemini:gemini-3.8-flash`),localStorage.setItem(`clm:chat:model`,`gemini-3.8-flash`))))},[e]),(0,P.jsxs)(`select`,{"data-testid":`model-select`,value:e,onChange:e=>{let t=e.target.value;c.set(t),typeof window<`u`&&(localStorage.setItem(`clm:chat:active_model`,t),t.startsWith(`gemini:`)?(localStorage.setItem(`clm:chat:provider`,`google`),localStorage.setItem(`clm:chat:model`,t.replace(/^gemini:/,``))):t.startsWith(`ollama:`)&&(localStorage.setItem(`clm:chat:provider`,`ollama`),localStorage.setItem(`clm:chat:model`,t.replace(/^ollama:/,``))))},style:{width:`100%`,backgroundColor:`#1e1e1e`,color:`#cccccc`,border:`1px solid #3c3c3c`,borderRadius:`4px`,padding:`3px 6px`,fontSize:`11px`,outline:`none`,cursor:`pointer`},children:[(0,P.jsx)(`optgroup`,{label:`In-Browser (WebGPU / Wasm / Native)`,children:Object.values(te).map(e=>{let t=n?.modelId===e.modelId?`${e.displayName} (${n.statusText} ${n.progressPct}%)`:e.displayName;return(0,P.jsx)(`option`,{value:e.modelId,title:`Engine: ${e.engine}`,children:t},e.modelId)})}),(0,P.jsx)(`optgroup`,{label:`Local Host (Ollama - ${t.online?`Online`:`Offline`})`,children:t.models.map(e=>(0,P.jsx)(`option`,{value:`ollama:${e}`,children:e},`ollama:${e}`))}),(0,P.jsx)(`optgroup`,{label:i?`Google Gemini (Cloud AI — API Key Ready 🔑)`:`Google Gemini (Cloud AI)`,children:ge.map(e=>(0,P.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,P.jsx)(`optgroup`,{label:`Remote Cloud Providers`,children:_e.map(e=>(0,P.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})};function F(e){switch(e.type){case`card`:return{type:`card`,hash:e.hash||``,handle:e.handle||``,cardType:e.cardType||`unknown`};case`execute`:return{type:`execute`,pcard:e.pcard||``,input:e.input||e.text||``,label:e.label};case`image`:return{type:`image`,src:e.src||``,alt:e.alt,width:e.width,height:e.height};case`audio`:return{type:`audio`,src:e.src||``,title:e.attrs?.title,duration:e.attrs?.duration?parseFloat(e.attrs.duration):void 0};case`video`:return{type:`video`,src:e.src||``,poster:e.attrs?.poster};case`model3d`:return{type:`model3d`,src:e.src||``,format:e.attrs?.format||be(e.src||``)};case`quote`:return{type:`quote`,id:e.id||``,author:e.attrs?.author||``,content:e.text};case`button`:return{type:`button`,id:e.id||``,label:e.label||e.text||``};case`at`:return{type:`at`,id:e.id||``,name:e.label||e.attrs?.name};case`action`:return{type:`button`,id:e.id||``,label:e.label||e.text||``};default:return e.children&&e.children.length>0?{type:`message`,forward:e.attrs?.forward===`true`,children:e.children.map(F)}:{type:`text`,content:e.text||``}}}function ye(e){return ue(e).map(F)}function be(e){return{glb:`gltf-binary`,gltf:`gltf`,obj:`wavefront`,stl:`stl`,"3ds":`3ds`,fbx:`fbx`}[e.split(`.`).pop()?.toLowerCase()||``]||`unknown`}function xe(e){return se(e)}var I=({node:e,onClick:t})=>(0,P.jsxs)(`div`,{"data-testid":`satori-card`,"data-handle":e.handle,onClick:()=>t?.(e.handle),style:{display:`inline-flex`,alignItems:`center`,gap:`6px`,padding:`4px 10px`,borderRadius:`4px`,backgroundColor:`rgba(117, 190, 255, 0.1)`,border:`1px solid rgba(117, 190, 255, 0.3)`,cursor:`pointer`,fontSize:`11px`,color:`#75beff`,transition:`background-color 0.15s ease`},children:[(0,P.jsx)(`span`,{children:`📄`}),(0,P.jsx)(`span`,{style:{fontWeight:600},children:e.handle.split(`:`).pop()}),(0,P.jsx)(`span`,{style:{opacity:.6,fontSize:`10px`},children:e.cardType}),e.hash&&(0,P.jsxs)(`span`,{"data-testid":`satori-card-badge`,style:{fontFamily:`monospace`,fontSize:`10px`,background:`rgba(117, 190, 255, 0.15)`,padding:`1px 4px`,borderRadius:`3px`},children:[`blake3-`,e.hash.slice(0,10)]})]}),Se=({node:e,onExecute:t})=>(0,P.jsxs)(`button`,{"data-testid":`satori-execute`,"data-pcard":e.pcard,onClick:()=>t?.(e.pcard,e.input),style:{display:`inline-flex`,alignItems:`center`,gap:`6px`,padding:`4px 12px`,borderRadius:`4px`,backgroundColor:`#0e639c`,border:`1px solid #1177bb`,color:`#ffffff`,cursor:`pointer`,fontSize:`11px`,fontWeight:600,transition:`opacity 0.15s ease`},children:[`▶ `,e.label||`Run ${e.pcard}`]}),Ce=({node:e})=>(0,P.jsx)(`div`,{"data-testid":`satori-image`,style:{margin:`4px 0`},children:(0,P.jsx)(`img`,{src:e.src,alt:e.alt||`Satori image`,style:{maxWidth:`100%`,maxHeight:`200px`,borderRadius:`6px`,border:`1px solid rgba(255, 255, 255, 0.1)`}})}),we=({node:e})=>(0,P.jsxs)(`div`,{"data-testid":`satori-audio`,style:{display:`flex`,alignItems:`center`,gap:`8px`,padding:`6px 10px`,backgroundColor:`rgba(255, 255, 255, 0.05)`,borderRadius:`4px`,border:`1px solid rgba(255, 255, 255, 0.1)`,fontSize:`11px`},children:[(0,P.jsx)(`span`,{children:`🔊`}),(0,P.jsx)(`span`,{children:e.title||`Audio`}),e.duration&&(0,P.jsxs)(`span`,{style:{opacity:.6},children:[e.duration,`s`]})]}),Te=({node:e})=>(0,P.jsxs)(`div`,{"data-testid":`satori-model3d`,style:{display:`flex`,alignItems:`center`,gap:`8px`,padding:`8px 12px`,backgroundColor:`rgba(188, 63, 188, 0.1)`,borderRadius:`6px`,border:`1px solid rgba(188, 63, 188, 0.3)`,fontSize:`11px`},children:[(0,P.jsx)(`span`,{style:{fontSize:`16px`},children:`🧊`}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`div`,{style:{fontWeight:600,color:`#d670d6`},children:`3D Model`}),(0,P.jsxs)(`div`,{style:{opacity:.7},children:[e.format,` — `,e.src.split(`/`).pop()]})]})]}),Ee=({node:e})=>(0,P.jsx)(`div`,{"data-testid":`satori-quote`,style:{borderLeft:`3px solid rgba(117, 190, 255, 0.5)`,padding:`4px 10px`,margin:`4px 0`,backgroundColor:`rgba(255, 255, 255, 0.03)`,fontSize:`11px`,fontStyle:`italic`,color:`rgba(255, 255, 255, 0.7)`},children:e.content||`[Quoted message: ${e.id}]`}),De=({node:e,onCardClick:t,onExecute:n})=>{switch(e.type){case`text`:return(0,P.jsx)(`span`,{children:e.content});case`card`:return(0,P.jsx)(I,{node:e,onClick:t});case`execute`:return(0,P.jsx)(Se,{node:e,onExecute:n});case`image`:return(0,P.jsx)(Ce,{node:e});case`audio`:return(0,P.jsx)(we,{node:e});case`model3d`:return(0,P.jsx)(Te,{node:e});case`quote`:return(0,P.jsx)(Ee,{node:e});case`message`:return(0,P.jsx)(`div`,{"data-testid":`satori-message`,children:e.children.map((e,r)=>(0,P.jsx)(De,{node:e,onCardClick:t,onExecute:n},r))});case`button`:return(0,P.jsx)(`button`,{"data-testid":`satori-button`,"data-action":e.id,onClick:()=>{e.id===`open-llm-settings`&&window.dispatchEvent(new CustomEvent(`clm:open-llm-settings`,{detail:{provider:`google`}}))},style:{display:`inline-flex`,alignItems:`center`,gap:`6px`,padding:`5px 12px`,margin:`4px 0`,fontSize:`11px`,fontWeight:600,backgroundColor:e.id===`open-llm-settings`?`#0e639c`:`#37373d`,border:e.id===`open-llm-settings`?`1px solid #1177bb`:`1px solid #45475a`,borderRadius:`4px`,color:`#ffffff`,cursor:`pointer`,transition:`background-color 0.15s ease`},children:e.label||`Action`});case`at`:return(0,P.jsxs)(`span`,{"data-testid":`satori-at`,style:{color:`#75beff`,fontWeight:600},children:[`@`,e.name||e.id]});default:return null}},L=O.newInMemory(),Oe=r(`waiting`),ke=r([]);function Ae(e,t,n={}){L.getPillar(`execution_log`).put(e),je({event:t,operation:`pcard:chatbot:${t}`,runtime:`clm-browser-satori`,pcard_hash:e.hash.asHex(),mcard_uri:e.uri,mcard_hash:e.hash.asHex(),output:e.content,...n})}function je(e){let t={...e,timestamp:new Date().toISOString(),agent_did:localStorage.getItem(`clm:sponsorDid`)||`did:key:z6Mkdefault`},n=ke.get();ke.set([...n,t])}var Me=r(`channel:studio:default`),R={id:`welcome`,channelId:`channel:studio:default`,role:`assistant`,text:"Koishi Satori conversational engine active.\nType `/help` for commands or ask a question.",timestamp:17261352e5,mcardUri:`mcard:chat/message/welcome`},z=a(`clm:conversational_mcards:v1`,[R],{encode:JSON.stringify,decode:e=>{try{let t=JSON.parse(e);return Array.isArray(t)&&t.length>0?t:[R]}catch{return[R]}}});async function B(e,t=`assertive`){let n=e.elements&&e.elements.length>0?e.elements:[j(e.text)],r={id:e.id,channel_id:e.channelId,user_did:e.role===`user`?`did:clm:user:studio`:`did:clm:agent:assistant`,elements:n,timestamp:e.timestamp},i=e.contentHash,a=e.mcardUri;try{let e=await ae(L,r,{speechActType:t});i=e.hashHex,a=e.card.uri}catch(e){console.warn(`[conversationalMCardStore] CAS commit warning:`,e)}let o={...e,contentHash:i,mcardUri:a},s=z.get();return z.set([...s,o]),o}function Ne(e,t){let n=z.get();z.set(n.map(n=>n.id===e?{...n,...t}:n))}function Pe(e){z.set(e)}function Fe(e){let t=e??Me.get(),n=z.get().filter(e=>e.channelId!==t);z.set(n.length>0?n:[R])}var Ie=({src:e,alt:t,messageId:n,messageText:r,savedToAssets:a,savedAssetHandle:o})=>{let[s,c]=(0,M.useState)(!1),[l,u]=(0,M.useState)(!1),[d,p]=(0,M.useState)(()=>o&&f.get()[o]||null),m=e.startsWith(`data:image/png`)?`image/png`:e.startsWith(`data:image/webp`)?`image/webp`:`image/jpeg`,h=m===`image/png`?`.png`:m===`image/webp`?`.webp`:`.jpg`,g=ie(t||r,m).replace(/\.[^.]+$/,``),[_,y]=(0,M.useState)(g),b=async()=>{if(!l){u(!0);try{let i=await S({base64Data:e,mimeType:m,prompt:t||r,preferredName:_.trim()||g});p(i),c(!1);let a=z.get();z.set(a.map(e=>e.id===n?{...e,elements:e.elements?.map(e=>e.type===`card`&&(e.cardType===`image`||e.handle?.includes(`event/chat/image`))?{...e,handle:i.handle}:e),savedToAssets:!0,savedAssetHandle:i.handle}:e))}catch(e){console.error(`Failed to save image to assets:`,e)}finally{u(!1)}}};return(0,P.jsxs)(`div`,{"data-testid":`satori-image`,style:{position:`relative`,display:`inline-block`,margin:`6px 0`,borderRadius:`6px`,overflow:`visible`},children:[(0,P.jsx)(`img`,{src:e,alt:t||`Attached image`,style:{display:`block`,maxWidth:`100%`,maxHeight:`240px`,borderRadius:`6px`,border:`1px solid rgba(255, 255, 255, 0.2)`,objectFit:`contain`}}),(0,P.jsx)(`div`,{style:{position:`absolute`,top:`6px`,right:`6px`,display:`flex`,gap:`4px`,zIndex:10},children:d||a?(0,P.jsxs)(`button`,{type:`button`,"data-testid":`badge-saved-asset`,onClick:()=>{let e=d||(o?f.get()[o]:null);e&&i(e)},title:`Saved to ${d?.path||o}. Click to open in Studio Workbench.`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,backgroundColor:`rgba(26, 46, 38, 0.88)`,color:`#4ec9b0`,border:`1px solid #4ec9b0`,borderRadius:`3px`,padding:`2px 8px`,fontSize:`11px`,fontWeight:600,cursor:`pointer`,backdropFilter:`blur(4px)`,boxShadow:`0 2px 6px rgba(0,0,0,0.5)`},children:[(0,P.jsx)(v,{size:12,color:`#4ec9b0`}),(0,P.jsx)(`span`,{children:d?.name||o?.split(`:`).pop()})]}):(0,P.jsx)(`button`,{type:`button`,"data-testid":`btn-send-to-assets`,onClick:()=>c(!0),title:`Send this image to project assets/ directory`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,backgroundColor:`rgba(20, 24, 30, 0.88)`,color:`#ffffff`,border:`1px solid rgba(255, 255, 255, 0.35)`,borderRadius:`3px`,padding:`3px 8px`,fontSize:`11px`,fontWeight:500,cursor:`pointer`,backdropFilter:`blur(4px)`,boxShadow:`0 2px 6px rgba(0,0,0,0.5)`,transition:`all 0.15s ease`},children:(0,P.jsx)(`span`,{children:`📁 Send to assets/`})})}),s&&(0,P.jsxs)(`div`,{"data-testid":`image-naming-popover`,style:{position:`absolute`,top:`36px`,right:`6px`,width:`280px`,backgroundColor:`#1e1e1e`,border:`1px solid #007acc`,borderRadius:`6px`,padding:`10px`,boxShadow:`0 4px 16px rgba(0,0,0,0.6)`,zIndex:20,display:`flex`,flexDirection:`column`,gap:`8px`},children:[(0,P.jsx)(`div`,{style:{fontSize:`11px`,fontWeight:600,color:`#9cdcfe`},children:`📁 Send Image to assets/`}),(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`4px`},children:[(0,P.jsx)(`input`,{type:`text`,autoFocus:!0,"data-testid":`input-image-filename`,value:_,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`?b():e.key===`Escape`&&c(!1)},placeholder:`filename-without-extension`,style:{flex:1,padding:`4px 6px`,fontSize:`11px`,backgroundColor:`#2d2d2d`,color:`#cccccc`,border:`1px solid #444`,borderRadius:`3px`,outline:`none`}}),(0,P.jsx)(`span`,{style:{fontSize:`10px`,fontFamily:`monospace`,backgroundColor:`rgba(0, 122, 204, 0.25)`,color:`#75beff`,padding:`3px 6px`,borderRadius:`3px`,border:`1px solid rgba(0, 122, 204, 0.4)`},children:h})]}),(0,P.jsxs)(`div`,{style:{display:`flex`,justifyContent:`flex-end`,gap:`6px`},children:[(0,P.jsx)(`button`,{type:`button`,onClick:()=>c(!1),style:{padding:`3px 8px`,fontSize:`10px`,backgroundColor:`transparent`,color:`#aaa`,border:`1px solid #444`,borderRadius:`3px`,cursor:`pointer`},children:`Cancel`}),(0,P.jsx)(`button`,{type:`button`,"data-testid":`btn-confirm-save-image`,onClick:b,disabled:l,style:{padding:`3px 10px`,fontSize:`10px`,fontWeight:600,backgroundColor:`#0e639c`,color:`#ffffff`,border:`none`,borderRadius:`3px`,cursor:l?`wait`:`pointer`},children:l?`Saving...`:`Save Asset`})]})]})]})};function Le(e){if(typeof e==`string`)return e.split(`:`).pop()||e;if(`name`in e&&e.name)return e.name;if(`handle`in e&&e.handle)return e.handle;if(`metadata`in e&&e.metadata){let t=e.metadata,n=`get`in t&&typeof t.get==`function`?t.get(`name`):t.name;if(typeof n==`string`&&n)return n}return`uri`in e&&e.uri?e.uri.split(`/`).pop()||e.uri.replace(/^mcard:/,``):`unnamed`}function Re(){let[e,t]=(0,M.useState)([]);return{attachments:e,setAttachments:t,attachCurrentCard:(0,M.useCallback)(()=>{let n=u.get();n&&!e.includes(n.handle)&&t(e=>[...e,n.handle])},[e]),removeAttachment:(0,M.useCallback)(e=>{t(t=>t.filter(t=>t!==e))},[]),clearAttachments:(0,M.useCallback)(()=>{t([])},[]),resolveAttachedNodes:(0,M.useCallback)(()=>{let t=f.get(),n=u.get(),r=[];n&&e.includes(n.handle)&&r.push(n);for(let n of e)if(!r.some(e=>e.handle===n)){let e=t[n]||Object.values(t).find(e=>e.handle===n||e.path===n);if(e)r.push(e);else{let e=n.endsWith(`.png`)||n.endsWith(`.jpg`)||n.endsWith(`.jpeg`)||n.endsWith(`.webp`);r.push({handle:n,name:n.split(`:`).pop()||n,path:n,hash:``,mimeType:e?`image/png`:`text/markdown`,detectedType:e?`image`:`markdown`,epistemicStatus:`definition`,readOnly:!0})}}return r},[e])}}var ze=M.lazy(()=>x(()=>import(`./MarkdownViewlet.qoPlM-TZ.js`).then(e=>({default:e.MarkdownContentView})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])).catch(e=>(console.warn(`[ChatMessageBubble] Failed to load MarkdownViewlet, falling back to plain text:`,e),{default:({content:e,style:t})=>(0,P.jsx)(`div`,{style:{whiteSpace:`pre-wrap`,opacity:.9,...t},children:e})}))),V=e=>(0,P.jsx)(M.Suspense,{fallback:(0,P.jsx)(`div`,{style:{whiteSpace:`pre-wrap`,opacity:.8,...e.style},children:e.content}),children:(0,P.jsx)(ze,{...e})}),Be=({message:e,onInsertAsMCard:t,insertingId:n,insertedMap:r={}})=>{let a=(e,n)=>{t&&t(e,n)};return(0,P.jsxs)(`div`,{className:`chat-bubble chat-bubble-${e.role}`,"data-testid":`chat-bubble-${e.role}`,style:{display:`flex`,flexDirection:`column`,alignSelf:e.role===`user`?`flex-end`:`flex-start`,maxWidth:`96%`,padding:`6px 10px`,borderRadius:`6px`,backgroundColor:e.role===`user`?`#0e639c`:e.role===`gate`?`#2d1820`:`#1f2428`,border:e.role===`user`?`1px solid #1177bb`:e.role===`gate`?`1px solid #f14c4c`:`1px solid #2d2d2d`,color:`#ffffff`,lineHeight:1.45,fontSize:`11px`,wordBreak:`break-word`,overflowWrap:`anywhere`},onClick:e=>{e.target.closest(`[data-action="open-llm-settings"], #open-llm-settings`)&&(e.preventDefault(),e.stopPropagation(),window.dispatchEvent(new CustomEvent(`clm:open-llm-settings`,{detail:{provider:`google`}})))},children:[(0,P.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`5px`,marginBottom:`3px`,fontSize:`10px`,opacity:.85},children:e.role===`assistant`?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(y,{size:12,color:`#75beff`}),(0,P.jsx)(`span`,{style:{fontWeight:600,color:`#75beff`},children:`Koishi Satori`})]}):e.role===`gate`?(0,P.jsx)(`span`,{style:{fontWeight:600,color:`#f14c4c`},children:`Maxwell's Demon Gate`}):(0,P.jsx)(`span`,{style:{fontWeight:600},children:`You`})}),e.attachments&&e.attachments.length>0&&(0,P.jsxs)(`div`,{style:{fontSize:`10px`,backgroundColor:`rgba(0, 0, 0, 0.25)`,padding:`3px 6px`,borderRadius:`4px`,marginBottom:`6px`,border:`1px solid rgba(255, 255, 255, 0.12)`,display:`flex`,flexDirection:`column`,gap:`3px`},children:[(0,P.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`4px`,opacity:.85},children:(0,P.jsx)(`span`,{children:`📎 Attached MCard:`})}),(0,P.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:`4px`},children:e.attachments.map((e,t)=>{let n=Le(e),r=typeof e==`string`?f.get()[e]||{handle:e,name:e.split(`:`).pop()||e,path:e,hash:``,mimeType:`text/markdown`,detectedType:`markdown`,epistemicStatus:`definition`,readOnly:!0}:`handle`in e?e:d(e),a=r.handle,o=f.get()[a]||r,s=o.mimeType?.startsWith(`image/`)||n.endsWith(`.png`)||n.endsWith(`.jpg`)||n.endsWith(`.jpeg`)||n.endsWith(`.webp`);return(0,P.jsxs)(`div`,{onClick:()=>{o&&i(o)},style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,padding:`2px 6px`,borderRadius:`3px`,backgroundColor:`rgba(255, 255, 255, 0.1)`,cursor:o?`pointer`:`default`,fontSize:`10px`},title:o?`Open ${n} in editor`:n,children:[(0,P.jsx)(`span`,{children:s?`🖼️`:`📄`}),(0,P.jsx)(`span`,{style:{textDecoration:o?`underline`:`none`},children:n})]},t)})})]}),e.elements&&e.elements.length>0?(0,P.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:`4px`},children:e.elements.map((t,n)=>t.type===`text`&&t.text?(0,P.jsx)(V,{content:t.text,compact:!0},n):t.type===`image`&&t.src?(0,P.jsx)(Ie,{src:t.src,alt:t.alt,messageId:e.id,messageText:e.text,savedToAssets:e.savedToAssets,savedAssetHandle:e.savedAssetHandle},n):t.type===`card`?(0,P.jsx)(I,{node:{type:`card`,hash:t.hash||``,handle:t.handle||``,cardType:t.cardType||`document`},onClick:e=>{let t=f.get()[e];t&&i(t)}},n):null)}):e.satoriContent||xe(e.text)?(0,P.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:`4px`},children:ye(e.text).map((e,t)=>e.type===`text`?(0,P.jsx)(V,{content:e.content,compact:!0},t):(0,P.jsx)(De,{node:e,onCardClick:e=>{let t=f.get()[e];t&&i(t)}},t))}):(0,P.jsx)(V,{content:e.text,compact:!0}),e.role===`assistant`&&(e.text.trim().length>0||e.elements?.some(e=>e.type===`image`&&e.src))&&(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:`6px`,marginTop:`6px`,paddingTop:`4px`,borderTop:`1px solid rgba(255, 255, 255, 0.08)`},children:[e.text.trim().length>0&&(0,P.jsx)(`button`,{type:`button`,"data-action":`insert-response-as-mcard`,onClick:()=>a(e.id,e.text),disabled:n===e.id,title:`Insert this response as a new MCard in assets' root directory and display as Chosen MCard`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,backgroundColor:r[e.id]?`rgba(78, 201, 176, 0.16)`:`rgba(255, 255, 255, 0.08)`,color:r[e.id]?`#4ec9b0`:`#cccccc`,border:r[e.id]?`1px solid #4ec9b0`:`1px solid rgba(255, 255, 255, 0.15)`,borderRadius:`3px`,padding:`2px 7px`,fontSize:`10px`,fontWeight:500,cursor:n===e.id?`wait`:`pointer`,transition:`all 0.15s ease`},children:r[e.id]?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(v,{size:12,color:`#4ec9b0`}),(0,P.jsxs)(`span`,{children:[`Chosen: `,r[e.id]]})]}):n===e.id?(0,P.jsx)(`span`,{children:`Inserting...`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(_,{size:12,color:`#75beff`}),(0,P.jsx)(`span`,{children:`Insert as MCard`})]})}),e.elements?.some(e=>e.type===`image`&&e.src)&&(0,P.jsx)(`button`,{type:`button`,"data-action":`save-image-to-assets-secondary`,onClick:async()=>{let t=e.elements?.find(e=>e.type===`image`&&e.src);if(!t?.src)return;let n=e.savedAssetHandle;if(n&&f.get()[n]){i(f.get()[n]);return}let r=t.src.startsWith(`data:image/png`)?`image/png`:t.src.startsWith(`data:image/webp`)?`image/webp`:`image/jpeg`,a=await S({base64Data:t.src,mimeType:r,prompt:t.alt||e.text}),o=z.get();z.set(o.map(t=>t.id===e.id?{...t,elements:t.elements?.map(e=>e.type===`card`&&(e.cardType===`image`||e.handle?.includes(`event/chat/image`))?{...e,handle:a.handle}:e),savedToAssets:!0,savedAssetHandle:a.handle}:t))},title:`Save the generated image in this turn to assets/`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,backgroundColor:e.savedToAssets?`rgba(78, 201, 176, 0.16)`:`rgba(255, 255, 255, 0.08)`,color:e.savedToAssets?`#4ec9b0`:`#cccccc`,border:e.savedToAssets?`1px solid #4ec9b0`:`1px solid rgba(255, 255, 255, 0.15)`,borderRadius:`3px`,padding:`2px 7px`,fontSize:`10px`,fontWeight:500,cursor:`pointer`,transition:`all 0.15s ease`},children:e.savedToAssets?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(v,{size:12,color:`#4ec9b0`}),(0,P.jsxs)(`span`,{children:[`Asset: `,e.savedAssetHandle?.split(`:`).pop()]})]}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`span`,{children:`📁`}),(0,P.jsx)(`span`,{children:`Save Image to Assets`})]})})]})]},e.id)},Ve=({inputMessage:e,setInputMessage:t,attachments:n,onRemoveAttachment:r,onAttachCurrentCard:i,hasActiveMCard:a,activeMCardHandle:o,onSendMessage:s})=>{p(Oe);let[c,l]=(0,M.useState)(!1);return(0,M.useRef)(null),!e.trim()&&n.length,(0,P.jsxs)(P.Fragment,{children:[n.length>0&&(0,P.jsx)(`div`,{style:{padding:`4px 12px`,backgroundColor:`#1e1e1e`,borderTop:`1px solid #2d2d2d`,display:`flex`,gap:`6px`,flexWrap:`wrap`},children:n.map(e=>{let t=f.get()[e]?.mimeType?.startsWith(`image/`)||e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.webp`);return(0,P.jsxs)(`span`,{style:{fontSize:`11px`,backgroundColor:`#37373d`,padding:`2px 6px`,borderRadius:`3px`,display:`flex`,alignItems:`center`,gap:`4px`,border:t?`1px solid rgba(117, 190, 255, 0.4)`:`1px solid #45475a`},children:[(0,P.jsxs)(`span`,{children:[t?`🖼️`:`📎`,` `,e.split(`:`).pop()]}),(0,P.jsx)(`span`,{onClick:()=>r(e),style:{cursor:`pointer`,opacity:.7},title:`Remove attachment`,children:`✕`})]},e)})}),(0,P.jsx)(`div`,{style:{padding:`6px 8px`,borderTop:`1px solid var(--vscode-sideBar-border, #333333)`,backgroundColor:`var(--vscode-sideBarSectionHeader-background, #1e1e1e)`},children:(0,P.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,backgroundColor:`var(--vscode-input-background, #3c3c3c)`,border:c?`1px solid #007fd4`:`1px solid var(--vscode-input-border, #3c3c3c)`,borderRadius:`4px`,padding:`4px 6px`,gap:`4px`,transition:`border-color 0.15s ease`},children:[(0,P.jsx)(`input`,{id:`chatbot-prompt-input`,"data-testid":`chat-input`,className:`chatbot-input chatbot-textarea`,value:e,onChange:e=>t(e.target.value),onFocus:()=>l(!0),onBlur:()=>l(!1),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),s())},placeholder:`Ask Koishi or ask a question (/help for commands)...`,style:{width:`100%`,backgroundColor:`transparent`,color:`var(--vscode-input-foreground, #cccccc)`,border:`none`,outline:`none`,fontSize:`11px`,fontFamily:`inherit`,padding:`3px 0`}}),(0,P.jsxs)(`div`,{style:{display:`flex`,justifyContent:`space-between`,alignItems:`center`},children:[(0,P.jsx)(`button`,{onClick:i,disabled:!a,title:a?o?`Attach ${o}`:`Attach active MCard`:`Select an MCard to attach`,style:{fontSize:`10px`,background:`transparent`,border:`1px solid rgba(255, 255, 255, 0.15)`,color:a?`#ffffff`:`#666666`,borderRadius:`2px`,padding:`1px 5px`,cursor:a?`pointer`:`default`},children:`+ Attach Active MCard`}),(0,P.jsx)(`button`,{id:`chatbot-send-btn`,onClick:s,style:{backgroundColor:`var(--vscode-button-background, #0e639c)`,color:`var(--vscode-button-foreground, #ffffff)`,border:`none`,borderRadius:`2px`,padding:`2px 8px`,fontSize:`10.5px`,fontWeight:600,cursor:`pointer`},children:`Send`})]})]})})]})};function He(e){return E.computeString(e).asHex()}var Ue=`__CLEAR__`,We={"/help":()=>({response:[`📖 **Available Commands:**`," `/model` — Show or switch active LLM model"," `/ollama` — Check Ollama daemon status"," `/run <pcard>` — Execute a PCard morphism"," `/query <handle>` — Query an MCard by handle"," `/diff <h1> <h2>` — Diff two MCard hashes"," `/time-travel <hash>` — Rewind CAS to a previous state"," `/revert` — Revert last mutation"," `/trace <handle>` — Trace MCard lineage"," `/card attach` — Attach current MCard to context"," `/status` — Show system status"," `/clear` — Clear chat history"].join(`
|
|
3
|
-
`),satoriContent:!1}),"/model":e=>({response:e.length>0?`Model switched to: **${e.join(` `)}**`:`Current model: Use the selector above to switch models.`,satoriContent:!1}),"/ollama":()=>({response:`🦙 **Ollama Status:** Check model manager tab in secondary sidebar for latency metrics.`,satoriContent:!1}),"/run":e=>e.length===0?{response:"Usage: `/run <pcard-name> [json-input]`",satoriContent:!1}:{response:`<execute pcard="${e[0]}" input="${e.slice(1).join(` `)||`{}`}" />`,satoriContent:!0},"/query":e=>e.length===0?{response:"Usage: `/query <handle>`",satoriContent:!1}:{response:`<card handle="${e[0]}" cardType="query" />`,satoriContent:!0},"/diff":e=>e.length<2?{response:"Usage: `/diff <hash1> <hash2>`",satoriContent:!1}:{response:`Comparing \`${e[0].slice(0,8)}\` ↔ \`${e[1].slice(0,8)}\`...\n[Diff viewlet available in Main Editor]`,satoriContent:!1},"/time-travel":e=>e.length===0?{response:"Usage: `/time-travel <hash>`",satoriContent:!1}:{response:`⏳ Rewinding CAS state to \`${e[0].slice(0,8)}\`...\n[Savepoint unwound to target content hash]`,satoriContent:!1},"/revert":()=>({response:`↩️ Reverting last mutation... [Restored from SavepointGuard]`,satoriContent:!1}),"/card":e=>({response:e[0]===`attach`?`📎 Current MCard attached to context.`:"Usage: `/card attach`",satoriContent:!1}),"/trace":e=>e.length===0?{response:"Usage: `/trace <handle>`",satoriContent:!1}:{response:`🔍 Tracing lineage for \`${e[0]}\`...\n[Lineage trace requires server-side CAS graph traversal]`,satoriContent:!1},"/status":()=>({response:[`**System Status:**`,` 🟢 Cordis Context: Active`,` 🟢 Maxwell's Demon: Engaged (H¹ = 0)`,` 🟡 Server PTY: Connecting...`,` 🟢 Browser WASM: Ready`,` 📅 Time: ${new Date().toISOString()}`].join(`
|
|
4
|
-
`),satoriContent:!1}),"/clear":()=>({response:Ue,satoriContent:!1})},H=new Map;function Ge(e,t,n){H.set(e,t)}function Ke(e){return H.has(e)}function qe(e,t){let n=H.get(e);return n?n(t):{response:`Unknown command: \`${e}\`. Type \`/help\` for available commands.`,satoriContent:!1}}for(let[e,t]of Object.entries(We))Ge(e,t);var Je=[`[HALLUCINATED]`,`<hallucination>`,`I made that up`,`I do not actually have`,`I cannot verify`,`fictional`],Ye=new Set([`/query`,`/run`,`/diff`,`/trace`,`/time-travel`,`/revert`,`/model`,`/ollama`,`/remote`,`/card`,`/help`,`/status`,`/clear`]);function Xe(e,t,n){let r=[],i;try{i=E.compute(new TextEncoder().encode(JSON.stringify(e))).asHex()}catch{i=He(JSON.stringify(e))}if((!e.sponsorDid||!e.sponsorDid.startsWith(`did:`))&&r.push({code:`UNGROUNDED_IDENTITY`,reason:`Sponsor identity '${e.sponsorDid}' is not a grounded DID`,field:`sponsorDid`}),e.command&&!Ye.has(e.command)&&!Ke(e.command)&&r.push({code:`INVALID_COMMAND`,reason:`Command '${e.command}' is not in the valid command set`,field:`command`}),t!==void 0)for(let n of e.referencedHandles)t.has(n)||r.push({code:`MISSING_HANDLE`,reason:`Referenced MCard handle '${n}' does not exist in CAS`,field:`referencedHandles`});if(n!==void 0)for(let t of e.referencedPCards)n.has(t)||r.push({code:`MISSING_PCARD`,reason:`Referenced PCard morphism '${t}' is not registered`,field:`referencedPCards`});let a=e.rawContent.toLowerCase();for(let e of Je)if(a.includes(e.toLowerCase())){r.push({code:`HALLUCINATION_DETECTED`,reason:`Content contains hallucination marker: '${e}'`,field:`rawContent`});break}let o=r.length===0?`PASS`:`REJECT`,s=r.length===0?0:1,c=r.length>0?r.map(e=>`${e.code}: ${e.reason}`).join(`; `):void 0;return{verdict:o,cohomologyH1:s,h1Entropy:s,hash:i,rejections:r,violations:r,reason:c,timestamp:Date.now()}}function Ze(e){if(e.verdict===`PASS`)return`✅ Maxwell's Demon PASS (H¹ = 0) [${e.hash}]`;let t=e.rejections.map(e=>` ⛔ ${e.code}: ${e.reason}`).join(`
|
|
5
|
-
`);return`❌ Maxwell's Demon REJECT (H¹ ≠ 0) [${e.hash}]\n${t}`}var Qe=new Set([`wav`,`wave`,`mp3`,`m4a`,`aac`,`ogg`,`oga`,`flac`,`weba`,`wma`,`opus`,`aiff`]),$e=new Set([`mp4`,`m4v`,`webm`,`mov`,`mkv`,`avi`,`flv`,`wmv`,`ogv`]),et=new Set([`png`,`jpg`,`jpeg`,`webp`,`gif`,`svg`,`bmp`,`ico`,`avif`,`tiff`,`tif`]),tt=new Set([`glb`,`gltf`,`obj`,`stl`,`3ds`,`fbx`,`dae`]),nt=new Set([`pdf`,`doc`,`docx`,`xls`,`xlsx`,`ppt`,`pptx`,`rtf`,`odt`,`ods`,`odp`]),rt=new Set([`json`,`yaml`,`yml`,`csv`,`tsv`,`xml`,`toml`,`ini`]),it=new Set([`md`,`markdown`,`mdown`,`mkdn`]),at=new Set(`ts.tsx.js.jsx.py.rs.go.java.c.cpp.h.css.scss.html.astro.vue.svelte.sh.bash.zsh.sql.graphql.proto.toml.ini.mk.makefile`.split(`.`)),ot={"image/png":`image`,"image/jpeg":`image`,"image/webp":`image`,"image/svg+xml":`image`,"image/gif":`image`,"audio/wav":`audio`,"audio/mp3":`audio`,"audio/mpeg":`audio`,"audio/ogg":`audio`,"video/mp4":`video`,"video/webm":`video`,"model/gltf-binary":`model3d`,"model/gltf+json":`model3d`,"model/stl":`model3d`,"model/obj":`model3d`,"application/pdf":`document`,"application/json":`structured_data`,"application/x-yaml":`structured_data`,"text/yaml":`structured_data`,"text/csv":`structured_data`,"text/xml":`structured_data`,"text/markdown":`text`,"text/plain":`text`},st=[{set:Qe,modality:`audio`},{set:$e,modality:`video`},{set:et,modality:`image`},{set:tt,modality:`model3d`},{set:nt,modality:`document`},{set:rt,modality:`structured_data`},{set:at,modality:`code`},{set:it,modality:`text`}];function ct(e,t,n){let r=(e||``).toLowerCase();if(r.startsWith(`image/`))return`image`;if(r.startsWith(`audio/`))return`audio`;if(r.startsWith(`video/`))return`video`;if(r.startsWith(`model/`))return`model3d`;if(ot[r])return ot[r];let i=(t||n||``).split(`.`).pop()?.toLowerCase()||``;for(let{set:e,modality:t}of st)if(e.has(i))return t;let a=(n||t||``).toLowerCase();return a.includes(`/audio/`)&&(i===`txt`||i===`url`||a.includes(`spotify`)||a.includes(`soundcloud`))?`audio`:a.includes(`/videos/`)&&(i===`txt`||i===`url`||a.includes(`youtube`)||a.includes(`vimeo`))?`video`:`text`}function U(e){if(!e||isNaN(e)||!isFinite(e))return`00:00`;let t=Math.floor(e/60),n=Math.floor(e%60),r=Math.floor(e%1*100);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}.${r.toString().padStart(2,`0`)}`}function W(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function lt(e){if(e.length<44)return null;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=String.fromCharCode(e[0],e[1],e[2],e[3]),r=String.fromCharCode(e[8],e[9],e[10],e[11]);if(n!==`RIFF`||r!==`WAVE`)return null;let i=12,a=1,o=44100,s=16,c=1,l=0,u=44;for(;i<e.length-8;){let n=String.fromCharCode(e[i],e[i+1],e[i+2],e[i+3]),r=t.getUint32(i+4,!0);if(n===`fmt `)c=t.getUint16(i+8,!0),a=t.getUint16(i+10,!0),o=t.getUint32(i+12,!0),s=t.getUint16(i+22,!0);else if(n===`data`){l=r,u=i+8;break}i+=8+r}let d=s/8,f=l&&o&&a?l/(o*a*d):0,p=0,m=0,h=0;if(s===16&&u+2<=e.length){let n=Math.min(Math.floor(l/2),4e3),r=Math.max(1,Math.floor(l/2/n));for(let i=0;i<n;i++){let n=u+i*r*2;if(n+2>e.length)break;let a=t.getInt16(n,!0)/32768,o=Math.abs(a);o>p&&(p=o),m+=a*a,h++}}let g=h>0?Math.sqrt(m/h):0,_=p>0?(20*Math.log10(p)).toFixed(1):`-inf`,v=g>0?(20*Math.log10(g)).toFixed(1):`-inf`;return{format:c===1?`PCM`:c===3?`IEEE Float`:`Format ${c}`,channels:a===1?`Mono (1 channel)`:a===2?`Stereo (2 channels)`:`${a} channels`,sampleRate:`${o.toLocaleString()} Hz`,bitsPerSample:`${s}-bit`,durationSec:f,durationFormatted:U(f),peakDb:`${_} dBFS`,rmsDb:`${v} dBFS`}}var ut={id:`wavProbe`,matches(e,t){return e===`wav`||e===`wave`||(t?.includes(`wav`)??!1)},probe(e,t){let n=lt(e);return n?{modality:`audio`,metadata:n,summary:[`[Audio File: ${t.name}]`,`• Format: WAV (${n.format}, ${n.bitsPerSample})`,`• Duration: ${n.durationFormatted} (${n.durationSec.toFixed(2)}s)`,`• Sample Rate: ${n.sampleRate}`,`• Channels: ${n.channels}`,`• File Size: ${W(e.length)}`,`• Signal Analysis: Peak ${n.peakDb}, RMS ${n.rmsDb}`,`• Status: Verified & ready for playback in MCard Studio Audio Player`].join(`
|
|
6
|
-
`)}:null}};function dt(e){if(e.length<10)return null;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=String.fromCharCode(e[0],e[1],e[2])===`ID3`,r={},i=0;if(n){let n=e[3];i=(e[6]&127)<<21|(e[7]&127)<<14|(e[8]&127)<<7|e[9]&127;let a=10,o=Math.min(e.length,10+i);for(;a<o-10;){let i=String.fromCharCode(e[a],e[a+1],e[a+2],e[a+3]);if(!/^[A-Z0-9]{4}$/.test(i))break;let s=0;if(s=n===4?(e[a+4]&127)<<21|(e[a+5]&127)<<14|(e[a+6]&127)<<7|e[a+7]&127:t.getUint32(a+4,!1),s<=0||a+10+s>o)break;let c=e.subarray(a+10,a+10+s);if(c.length>1){let e=c[0],t=``;try{if(e===0||e===3){let e=c.subarray(1),n=e.indexOf(0);n===-1&&(n=e.length),t=new TextDecoder(`utf-8`).decode(e.subarray(0,n))}else(e===1||e===2)&&(t=new TextDecoder(`utf-16le`).decode(c.subarray(1)).replace(/\0.*$/,``))}catch{}t=t.trim(),t&&(i===`TIT2`?r.title=t:i===`TPE1`?r.artist=t:i===`TALB`?r.album=t:i===`TCON`?r.genre=t:i===`TYER`||i===`TDRC`?r.year=t:i===`TRCK`&&(r.track=t))}a+=10+s}}let a=n?10+i:0,o=0,s=0,c=`Stereo`,l=[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0],u=[44100,48e3,32e3,0];for(;a<e.length-4;){if(e[a]===255&&(e[a+1]&224)==224){let t=e[a+1],n=e[a+2],r=e[a+3],i=t>>3&3,d=t>>1&3;if(i===3&&d===1){let e=n>>4&15,t=n>>2&3,i=r>>6&3;o=l[e]||0,s=u[t]||0,c=i===3?`Mono`:`Stereo`;break}}a++}let d=0;return o>0&&(d=(e.length-(n?10+i:0))*8/(o*1e3)),{format:`MP3 (MPEG-1 Layer III)`,bitrate:o?`${o} kbps`:void 0,sampleRate:s?`${s.toLocaleString()} Hz`:void 0,channels:c,tags:r,durationSec:d>0?d:void 0,durationFormatted:d>0?U(d):void 0}}var ft={id:`mp3Probe`,matches(e,t){return e===`mp3`||(t?.includes(`mpeg`)??!1)||(t?.includes(`mp3`)??!1)},probe(e,t){let n=dt(e);if(!n)return null;let r=Object.entries(n.tags).map(([e,t])=>` - ${e.charAt(0).toUpperCase()+e.slice(1)}: ${t}`).join(`
|
|
7
|
-
`);return{modality:`audio`,metadata:n,summary:[`[Audio File: ${t.name}]`,`• Format: ${n.format}${n.bitrate?` (${n.bitrate})`:``}`,n.durationFormatted?`• Duration: ${n.durationFormatted}`:``,`• Channels: ${n.channels}`,n.sampleRate?`• Sample Rate: ${n.sampleRate}`:``,`• File Size: ${W(e.length)}`,r?`• ID3 Metadata Tags:\n${r}`:``,`• Status: Verified & ready for playback in MCard Studio Audio Player`].filter(Boolean).join(`
|
|
8
|
-
`)}}};function pt(e){if(e.length<16)return null;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=0,r=0,i=0;function a(o,s,c=0){if(c>6)return;let l=o;for(;l<s-8;){let o=t.getUint32(l,!1),u=String.fromCharCode(e[l+4],e[l+5],e[l+6],e[l+7]);if(o<8||l+o>e.length+8)break;if(u===`moov`||u===`trak`||u===`mdia`)a(l+8,Math.min(s,l+o),c+1);else if(u===`mvhd`){let r=e[l+8],i=r===1?l+28:l+20;if(i+8<=e.length){let e=t.getUint32(i,!1),a=r===1?Number(t.getBigUint64(i+4,!1)):t.getUint32(i+4,!1);e>0&&(n=a/e)}}else if(u===`tkhd`){let n=e[l+8]===1?l+88:l+76;if(n+8<=e.length){let e=t.getUint32(n,!1)>>16,a=t.getUint32(n+4,!1)>>16;e>0&&a>0&&(r=e,i=a)}}l+=o}}return a(0,e.length),{durationSec:n>0?n:void 0,durationFormatted:n>0?U(n):void 0,width:r>0?r:void 0,height:i>0?i:void 0}}var mt={id:`mp4Probe`,matches(e,t){return e===`mp4`||e===`m4v`||(t?.includes(`mp4`)??!1)},probe(e,t){let n=pt(e);if(!n)return null;let r=n.width&&n.height?`${n.width}x${n.height}`:``;return{modality:`video`,metadata:n,summary:[`[Video File: ${t.name}]`,`• Format: MP4`,r?`• Resolution: ${r}`:``,n.durationFormatted?`• Duration: ${n.durationFormatted}`:``,`• File Size: ${W(e.length)}`,`• Status: Verified & ready for playback in MCard Studio Video Player`].filter(Boolean).join(`
|
|
9
|
-
`)}}},ht={id:`imageProbe`,matches(e,t){return et.has(e)||(t?.startsWith(`image/`)??!1)},probe(e,t){let n=t.mimeType||`image/png`,r=`[Image: ${t.name} (${n}, ${W(e.length)})]`;return{modality:`image`,metadata:{sizeBytes:e.length,mimeType:n},summary:r}}},gt={id:`genericProbe`,matches(){return!0},probe(e,t){let n=ct(t.mimeType,t.name,t.path),r=t.mimeType||n,i=`[${n.charAt(0).toUpperCase()+n.slice(1)}: ${t.name} (${r}, ${W(e.length)})]`;return{modality:n,metadata:{sizeBytes:e.length},summary:i}}},G=[];function K(e){e.id!==`genericProbe`&&(G.some(t=>t.id===e.id)||G.push(e))}function _t(e,t){for(let n of G)if(n.matches(e,t))return n;return gt}function q(e,t){return _t((t.name||t.path||``).split(`.`).pop()?.toLowerCase()||``,t.mimeType).probe(e,t)}K(ut),K(ft),K(mt),K(ht);async function J(e){if(typeof window<`u`&&e)try{let t=await fetch(m({path:e}));if(t.ok){let e=await t.arrayBuffer();return new Uint8Array(e)}}catch{}else if(typeof window>`u`&&globalThis.process!==void 0&&e)try{let t=Function(`m`,`return import(m)`),n=await t(`node:fs`),r=await t(`node:path`),i=e,a=globalThis.process;if(!r.isAbsolute(i)&&a?.cwd&&(i=r.resolve(a.cwd(),i)),n.existsSync(i)&&n.statSync(i).isFile()){let e=n.readFileSync(i);return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}}catch{}return null}async function Y(e){if(typeof window<`u`&&e)try{let t=await fetch(m({path:e}));if(t.ok)return await t.text()}catch{}else if(typeof window>`u`&&globalThis.process!==void 0&&e)try{let t=Function(`m`,`return import(m)`),n=await t(`node:fs`),r=await t(`node:path`),i=e,a=globalThis.process;if(!r.isAbsolute(i)&&a?.cwd&&(i=r.resolve(a.cwd(),i)),n.existsSync(i)&&n.statSync(i).isFile())return n.readFileSync(i,`utf8`)}catch{}return null}async function X(e){let t=e,n=e.match(/https?:\/\/open\.spotify\.com\/(track|album|artist|playlist)\/([a-zA-Z0-9]+)/i);if(n)try{let e=typeof AbortController<`u`?new AbortController:null,r=e?setTimeout(()=>e.abort(),1500):null,i=await fetch(`https://open.spotify.com/oembed?url=${encodeURIComponent(n[0])}`,{...e?{signal:e.signal}:{}});if(r&&clearTimeout(r),i.ok){let e=await i.json();e.title&&(t+=`\n🎧 Spotify Metadata: "${e.title}" (${e.type||n[1]}) by ${e.provider_name||`Spotify`}`)}}catch{}let r=e.match(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/i);if(r)try{let e=typeof AbortController<`u`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1500):null,i=await fetch(`https://www.youtube.com/oembed?url=${encodeURIComponent(r[0])}&format=json`,{...e?{signal:e.signal}:{}});if(n&&clearTimeout(n),i.ok){let e=await i.json();e.title&&(t+=`\n🎬 YouTube Metadata: "${e.title}" by ${e.author_name||`YouTube`}`)}}catch{}return t}function vt(e){let t=ct(e.mimeType,e.name,e.path);if(t!==`text`)return t;let n=e.category||e.metadata?.category;return n===`audio`?`audio`:n===`video`?`video`:n===`image`?`image`:n===`model3d`?`model3d`:n===`document`?`document`:{image:`image`,audio:`audio`,video:`video`,model:`model3d`,document:`document`,markdown:`text`}[e.detectedType]??`text`}async function yt(e){let t=[],n=[],r=0;for(let i of e)try{let e=await xt(i);t.push(e),r+=Math.ceil(e.textRepresentation.length/4)}catch(e){n.push(`Failed to assemble ${i.handle}: ${e?.message||String(e)}`)}return r>1e5&&n.push(`Total estimated tokens (${r}) exceeds 100K. Consider reducing attachments.`),{contexts:t,totalTokenEstimate:r,warnings:n}}function bt(e){let t=vt(e),n=typeof e.content==`string`?e.content:``,r=n.startsWith(`Content-addressed MCard:`),i=r?``:n,a=typeof e.content==`string`?new TextEncoder().encode(e.content).length:e.content?.length??0,o={handle:e.handle,hash:e.hash,modality:t,mimeType:e.mimeType||``,label:e.name,textRepresentation:``,metadata:{path:e.path,detectedType:e.detectedType,subclass:e.subclass,epistemicStatus:e.epistemicStatus},sizeBytes:a};switch(t){case`image`:e.content instanceof Uint8Array?(o.rawBase64=wt(e.content),o.dataUri=`data:${e.mimeType||`image/png`};base64,${o.rawBase64}`,o.sizeBytes=e.content.length):typeof e.content==`string`&&e.content.startsWith(`data:image/`)?(o.dataUri=e.content,o.rawBase64=e.content.replace(/^data:image\/[^;]+;base64,/,``)):typeof e.content==`string`&&e.content.length>0&&!r&&(o.rawBase64=e.content,o.dataUri=`data:${e.mimeType||`image/png`};base64,${e.content}`),o.textRepresentation=`[Image: ${e.name} (${e.mimeType||`image/png`}, ${Q(o.sizeBytes)})]`;break;case`audio`:o.textRepresentation=`[Audio: ${e.name} (${e.mimeType||`audio`}, ${Q(a)})]`,i&&(o.textRepresentation+=`\n--- Audio Content / Reference ---\n${Z(i,4e3)}\n--- End ---`);break;case`video`:o.textRepresentation=`[Video: ${e.name} (${e.mimeType||`video`}, ${Q(a)})]`,i&&(o.textRepresentation+=`\n--- Video Content / Reference ---\n${Z(i,4e3)}\n--- End ---`);break;case`model3d`:o.textRepresentation=`[3D Model: ${e.name} (${e.mimeType||`model3d`})]`,o.metadata.format=Tt(e.name);break;case`document`:o.textRepresentation=`[Document: ${e.name} (${e.mimeType||`document`}, ${Q(a)})]`,i&&(o.textRepresentation+=`\n--- Document Content ---\n${Z(i,8e3)}\n--- End ---`);break;case`structured_data`:o.textRepresentation=St(e.name,i);break;case`code`:o.textRepresentation=Ct(e.name,i);break;default:o.textRepresentation=i?`--- ${e.name} ---\n${Z(i,8e3)}\n--- End ---`:`[Text: ${e.name} (pending hydration)]`}return o}async function xt(e){let t=bt(e),n=e.path||(e.handle.startsWith(`${h.paths.assets_dirname}:`)?e.handle.replace(`${h.paths.assets_dirname}:`,`${h.paths.assets_dirname}/`):e.handle),r=(typeof e.content==`string`?e.content:``).startsWith(`Content-addressed MCard:`);if(t.modality===`image`&&!t.dataUri){let r=await J(n);if(r){t.sizeBytes=r.length,t.rawBase64=wt(r);let n=t.mimeType||`image/png`;t.dataUri=`data:${n};base64,${t.rawBase64}`,t.textRepresentation=`[Image: ${e.name} (${n}, ${Q(t.sizeBytes)})]`}}if(t.modality===`audio`){if(e.name.endsWith(`.txt`)||e.name.endsWith(`.url`)||e.name.endsWith(`.md`)){let i=r||!e.content?await Y(n):e.content;i&&(i=await X(i),t.textRepresentation=`--- ${e.name} (Audio Link / Reference) ---\n${Z(i,4e3)}\n--- End ---`)}else{let r=await J(n);if(r){t.sizeBytes=r.length;let n=q(r,e);n?(t.metadata={...t.metadata,...n.metadata},t.textRepresentation=n.summary):t.textRepresentation=`[Audio File: ${e.name} (${t.mimeType||`audio`}, ${Q(t.sizeBytes)})]`}}}if(t.modality===`video`){if(e.name.endsWith(`.txt`)||e.name.endsWith(`.url`)||e.name.endsWith(`.md`)){let i=r||!e.content?await Y(n):e.content;i&&(i=await X(i),t.textRepresentation=`--- ${e.name} (Video Link / Stream) ---\n${Z(i,4e3)}\n--- End ---`)}else{let r=await J(n);if(r){t.sizeBytes=r.length;let i=q(r,e);if(i&&(t.metadata={...t.metadata,...i.metadata}),typeof window<`u`&&n)try{let e=m({path:n}),r=document.createElement(`video`);if(r.crossOrigin=`anonymous`,r.muted=!0,r.preload=`metadata`,r.src=e,await new Promise(e=>{r.addEventListener(`loadeddata`,()=>{r.currentTime=Math.min(1,(r.duration||2)/2)},{once:!0}),r.addEventListener(`seeked`,()=>e(),{once:!0}),r.addEventListener(`error`,()=>e(),{once:!0}),setTimeout(e,1500)}),r.videoWidth>0&&r.videoHeight>0){let e=document.createElement(`canvas`);e.width=Math.min(640,r.videoWidth),e.height=Math.round(e.width/r.videoWidth*r.videoHeight);let n=e.getContext(`2d`);if(n){n.drawImage(r,0,0,e.width,e.height);let i=e.toDataURL(`image/jpeg`,.82);t.dataUri=i,t.rawBase64=i.replace(/^data:image\/jpeg;base64,/,``),t.metadata.keyframeCaptured=!0,t.metadata.videoWidth=r.videoWidth,t.metadata.videoHeight=r.videoHeight,!t.metadata.durationSec&&r.duration&&(t.metadata.durationSec=r.duration)}}}catch{}if(i){let n=t.metadata.durationFormatted||(t.metadata.durationSec?String(t.metadata.durationSec):``),r=t.metadata.videoWidth?`${t.metadata.videoWidth}x${t.metadata.videoHeight}`:t.metadata.width?`${t.metadata.width}x${t.metadata.height}`:``;t.textRepresentation=[`[Video File: ${e.name}]`,`• Format: MP4 (${t.mimeType||`video/mp4`})`,r?`• Resolution: ${r}`:``,n?`• Duration: ${n}`:``,`• File Size: ${Q(t.sizeBytes)}`,t.rawBase64?`• Keyframe Snapshot: Captured and supplied as image to vision model`:``,`• Status: Verified & ready for playback in MCard Studio Video Player`].filter(Boolean).join(`
|
|
10
|
-
`)}else t.textRepresentation=`[Video File: ${e.name} (${t.mimeType||`video`}, ${Q(t.sizeBytes)})]`}}}if(t.modality===`text`||t.modality===`code`||t.modality===`structured_data`||t.modality===`document`){let i=r||!e.content?await Y(n):e.content;i&&(i=await X(i),t.sizeBytes=new TextEncoder().encode(i).length,t.textRepresentation=t.modality===`code`?Ct(e.name,i):t.modality===`structured_data`?St(e.name,i):`--- ${e.name} ---\n${Z(i,8e3)}\n--- End ---`)}return t}function St(e,t){return t?`\`\`\`${e.split(`.`).pop()?.toLowerCase()||``}\n${Z(t,8e3)}\n\`\`\``:`[Structured Data: ${e} (empty)]`}function Ct(e,t){if(!t)return`[Code: ${e} (empty)]`;let n=e.split(`.`).pop()?.toLowerCase()||``;return`\`\`\`${{ts:`typescript`,tsx:`tsx`,js:`javascript`,jsx:`jsx`,py:`python`,rs:`rust`,go:`go`,java:`java`,c:`c`,cpp:`cpp`,h:`c`,css:`css`,html:`html`,astro:`astro`,sh:`bash`,sql:`sql`}[n]||n}\n// File: ${e}\n${Z(t,8e3)}\n\`\`\``}function Z(e,t){return e.length<=t?e:e.slice(0,t)+`\n... (truncated, ${e.length-t} chars omitted)`}function Q(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function wt(e){let t=globalThis.Buffer;if(t)return t.from(e.buffer,e.byteOffset,e.byteLength).toString(`base64`);let n=``,r=e.byteLength,i=32768;for(let t=0;t<r;t+=i){let a=e.subarray(t,Math.min(t+i,r));n+=String.fromCharCode.apply(null,a)}return btoa(n)}function Tt(e){return{glb:`glTF Binary`,gltf:`glTF`,obj:`Wavefront OBJ`,stl:`STL`,"3ds":`3D Studio`,fbx:`FBX`}[e.split(`.`).pop()?.toLowerCase()||``]||`Unknown 3D Format`}var Et=class{static async generateImage(e){try{let t=await fetch(`/api/llm/image/generate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});return t.ok?await t.json():{success:!1,error:(await t.json().catch(()=>({})))?.error||`HTTP ${t.status} ${t.statusText}`}}catch(e){return console.error(`[ImageGenerationService] Request failed:`,e),{success:!1,error:e?.message||`Network error communicating with image gateway`}}}},Dt=[{prefix:`ollama:`,generate:async e=>{let t=e.activeModel.replace(/^ollama:/,``),n=e.assembledContexts.map(e=>e.textRepresentation).filter(e=>!!(e&&e.trim())).join(`
|
|
11
|
-
|
|
12
|
-
`),r={role:`user`,content:[e.prompt,n?`\n\n[Attached Context (${e.assembledContexts.length} item(s))]:\n${n}`:``,e.contextSummary?`\n${e.contextSummary}`:``].filter(Boolean).join(``)};e.base64Images.length>0&&(r.images=e.base64Images);let i=await fetch(`/api/llm/ollama/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:t,messages:[r]})});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e?.error||`HTTP ${i.status}: Ollama daemon unreachable or model not found`)}let a=await i.json(),o=a?.message?.content||a?.response;if(!o||!o.trim())throw Error(`Received empty response from Ollama daemon`);return o}},{prefix:`browser:`,generate:async e=>{let t=e.assembledContexts.map(e=>e.textRepresentation).filter(e=>!!(e&&e.trim())).join(`
|
|
13
|
-
|
|
14
|
-
`),n=e.prompt;t&&(n+=`\n\n[Attached Context (${e.assembledContexts.length} item(s))]:\n${t}`),e.base64Images.length>0&&(n+=`\n[Notice: ${e.base64Images.length} image/video snapshot attachment(s) provided. Local browser model is text-only; switch to Ollama vision model to parse visual pixels.]`);let r=``,i=await ee.generate(e.activeModel,n,t=>{r+=t,e.onStreamChunk(e.assistantMsgId,r)});if(!i||!i.trim())throw Error(`In-browser LM returned empty response`);return i}},{prefix:`gemini:`,generate:async e=>{let t=e.userDid||`did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK`,n=e.llmConfig??{},r=b(t,`google`),i=(r?.authN?.token||n.apiKey||typeof window<`u`&&localStorage.getItem(`clm:llm_config:google_api_key`)||``).trim(),a=e.activeModel.replace(/^gemini:/,``);if(!i)return`[Google Gemini Cloud AI: ${a}]\n\n⚠️ **Provider EOA Capability Not Authorized**\n- **Caller EOA**: \`${t}\`\n- **Provider EOA**: \`did:pkc:eoa:google:ai-studio\` (Google Cloud AI)\n- **Target Model**: \`${a}\`\n- **Defect**: AuthN Token Missing (No API key bound for did:pkc:eoa:google:ai-studio)\n\n<button id="open-llm-settings" label="⚙️ Fulfill AuthN/AuthO for Google Gemini Provider Agency">⚙️ Fulfill AuthN/AuthO for Google Gemini Provider Agency</button>`;if(r?.authO?.allowedModels&&r.authO.allowedModels.length>0&&!r.authO.allowedModels.some(e=>e===a||a.startsWith(`gemini-`)&&(e.includes(a)||a.includes(e))))return`[Google Gemini Cloud AI: ${a}]\n\n⚠️ **Provider EOA Capability Not Authorized**\n- **Caller EOA**: \`${t}\`\n- **Provider EOA**: \`did:pkc:eoa:google:ai-studio\` (Google Cloud AI)\n- **Target Model**: \`${a}\`\n- **Defect**: AuthO Restricted (Model \`${a}\` not in authorized catalog)\n\n<button id="open-llm-settings" label="⚙️ Fulfill AuthN/AuthO for Google Gemini Provider Agency">⚙️ Fulfill AuthN/AuthO for Google Gemini Provider Agency</button>`;let o=e.assembledContexts.map(e=>e.textRepresentation).filter(e=>!!(e&&e.trim())).join(`
|
|
15
|
-
|
|
16
|
-
`),s=e.prompt;o&&(s+=`\n\n[Attached Context (${e.assembledContexts.length} item(s))]:\n${o}`);let c=n.provider===`google`&&n.baseUrl&&!n.baseUrl.includes(`11434`)&&!n.baseUrl.includes(`localhost`)&&!n.baseUrl.includes(`127.0.0.1`)?n.baseUrl:`https://generativelanguage.googleapis.com/v1beta`,l=/\b(generate|create|draw|make|paint|design|sketch|render|produce|show me)\b.*\b(image|picture|photo|illustration|diagram|icon|logo|art|drawing|cartoon|avatar)\b/i.test(s),u=[];try{let e=typeof window<`u`?localStorage.getItem(`clm:llm_config:google_available_models`):null;if(e){let t=JSON.parse(e);Array.isArray(t)&&(u=t)}}catch{}if(u.length===0&&i&&!i.startsWith(`AIzaSyTest`))try{let e=await fetch(`/api/llm/google/models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({apiKey:i.trim(),baseUrl:c})});if(e.ok){let t=((await e.json()).models||[]).filter(e=>e.supportedGenerationMethods?.includes(`generateContent`)).map(e=>e.name.replace(/^models\//,``));t.length>0&&(u=t,typeof window<`u`&&localStorage.setItem(`clm:llm_config:google_available_models`,JSON.stringify(t)))}}catch{}let d=(e=>{if(u.length>0&&u.includes(e))return e;let t=u.filter(e=>e.includes(`gemini-3`));return e.includes(`pro`)?t.find(e=>e.includes(`pro`))||`gemini-3.1-pro-preview`:e.includes(`thinking`)?t.find(e=>e.includes(`thinking`))||`gemini-3.8-thinking`:t.includes(e)?e:t.find(e=>e===`gemini-3.6-flash`)||t.find(e=>e===`gemini-3.5-flash`)||t.find(e=>e.includes(`flash`))||(e.startsWith(`gemini-3`)?e:`gemini-3.6-flash`)})(a);console.info(`[Koishi Satori] Mapped 3.x model "${a}" → upstream Google API "${d}" (imageMode: ${l}, baseUrl: ${c})`);let f=async(t,n)=>{let r=n===void 0?l:n,a=[{text:s}];for(let t of e.assembledContexts)t.modality===`image`&&t.rawBase64&&a.push({inlineData:{mimeType:t.mimeType||`image/jpeg`,data:t.rawBase64}});let o={model:t,contents:[{role:`user`,parts:a}],apiKey:i.trim(),baseUrl:c};r&&(o.generationConfig={responseModalities:[`TEXT`,`IMAGE`]});let u=await fetch(`/api/llm/google/generate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(o)});if(!u.ok){let e=await u.json().catch(()=>({})),t=Error(e?.error?.message||`HTTP ${u.status} ${u.statusText}`);throw t.status=e?.status||u.status,t}let d=((await u.json()).candidates?.[0])?.content?.parts||[],f=[],p=[];for(let e of d)e.text?f.push(e.text):e.inlineData?.mimeType&&e.inlineData?.data&&p.push({mimeType:e.inlineData.mimeType,base64Data:e.inlineData.data});let m=f.join(``);if(!m.trim()&&p.length===0)throw Error(`Received empty response from Google Gemini API`);return{text:m,inlineImages:p}};try{let t,n=``;try{t=await f(d)}catch(e){if(e.status===503||e.status===404||e.message?.includes(`high demand`)||e.message?.includes(`not found`)){let r=u.length>0?u.filter(e=>e!==d&&e.includes(`gemini-3`)&&!e.includes(`embedding`)):[`gemini-3.6-flash`,`gemini-3.8-flash`,`gemini-3.5-flash`,`gemini-3.1-pro-preview`,`gemini-3.8-pro`],i=!1;for(let a of r)try{let r=await f(a,!1);n=`*(Notice: \`${d}\` was temporarily unavailable on Google AI Studio (${e.status||`503`}). Response served by verified fallback \`${a}\`)*`,t=r,i=!0;break}catch{}if(!i)throw Error(`Google Gemini Cloud AI error: ${e?.message||String(e)}`)}else throw e}let r=t;if(r.inlineImages.length>0){let t=w.create(e.userDid||`did:clm:agent:gemini`);for(let n of r.inlineImages){let r=le(e.turnId,n.mimeType,n.base64Data,t);oe(e.triDatabase,r),e.artifacts.imageMCards.push(r);let i=`data:${n.mimeType};base64,${n.base64Data}`,a=r.hash.asHex().slice(0,10);if(e.artifacts.imageElements.push(A(i,`Gemini-generated image`)),e.artifacts.imageElements.push(k(r.hash.asHex(),r.uri,`image`)),C({id:r.uri,name:`chat_img_${a}.jpg`,path:`virtual/chat/images/${a}.jpg`,mimeType:n.mimeType,content:i,hash:r.hash.asHex(),sizeBytes:n.base64Data.length*.75}),typeof window<`u`&&localStorage.getItem(`clm:chat:auto_save_images_to_assets`)===`true`)try{let r=await S({base64Data:n.base64Data,mimeType:n.mimeType,prompt:`Gemini-generated image`,authorDid:t});e.artifacts.imageElements.pop(),e.artifacts.imageElements.push(k(r.hash,r.handle,`image`))}catch(e){console.warn(`[ChatTurnOrchestrator] Auto-save image to assets failed:`,e)}}}let a=n?`${n}\n\n${r.text}`:r.text,o=ce(a);if(o.isToolCall&&(o.action===`dalle.text2im`||o.action===`image_generation`||o.action===`generate_image`||o.action===`text2im`)){let t=o.prompt||e.lastPrompt||`Synthesized visual asset`,n=await Et.generateImage({prompt:t,apiKey:i.trim(),size:o.size||`1024x1024`,baseUrl:c});if(n.success&&n.base64Data){let r=w.create(e.userDid||`did:clm:agent:gemini`),i=le(e.turnId,n.mimeType||`image/jpeg`,n.base64Data,r);oe(e.triDatabase,i),e.artifacts.imageMCards.push(i);let a=`data:${n.mimeType||`image/jpeg`};base64,${n.base64Data}`,s=i.hash.asHex().slice(0,10);if(e.artifacts.imageElements.push(A(a,t)),e.artifacts.imageElements.push(k(i.hash.asHex(),i.uri,`image`)),C({id:i.uri,name:`chat_img_${s}.jpg`,path:`virtual/chat/images/${s}.jpg`,mimeType:n.mimeType||`image/jpeg`,content:a,hash:i.hash.asHex(),sizeBytes:n.base64Data.length*.75}),typeof window<`u`&&localStorage.getItem(`clm:chat:auto_save_images_to_assets`)===`true`)try{let i=await S({base64Data:n.base64Data,mimeType:n.mimeType||`image/jpeg`,prompt:t,authorDid:r});e.artifacts.imageElements.pop(),e.artifacts.imageElements.push(k(i.hash,i.handle,`image`))}catch(e){console.warn(`[ChatTurnOrchestrator] Auto-save image to assets failed:`,e)}let c=``;o.preamble&&(c+=`${o.preamble}\n\n`),o.thought&&(c+=`${o.thought}\n\n`);let l=n.provider===`pollinations`?`Pollinations Fallback`:`Google Imagen 3`;return c+=`*[Generated image via ${l} | MCard: \`#${s}\`]*`,c}}let s=n?`${n}\n\n${r.text}`:r.text;if(e.artifacts.imageMCards.length>0&&!s.trim()&&(s=`Generated ${e.artifacts.imageMCards.length} image(s) via Google Gemini.`),e.artifacts.imageMCards.length>0){let t=e.artifacts.imageMCards.map(e=>`\`${e.hash.asHex().slice(0,10)}\` (${e.getMetadata(`mimeType`)||`image`})`).join(`, `);s+=`\n\n📎 *Image MCard(s): ${t}*`}return s}catch(e){throw Error(`Google Gemini Cloud AI error: ${e?.message||String(e)}`)}}}];function Ot(e){let t=Dt.find(t=>e.activeModel.startsWith(t.prefix));return t?t.generate(e):Promise.resolve(`[Satori SpeechAct: received] Processed query on model **${e.activeModel}**.`)}async function kt(e,t){let n=e.input.trim();if(!n&&e.attachments.length===0)return{kind:`no-op`};let r=n.startsWith(`/`),i=n.split(/\s+/),a=r?i[0]:``,o=r?i.slice(1):[],s=``,c=[],l=[];if(e.attachments.length>0){let t=await yt(e.attachments);c=t.contexts,l=t.contexts.filter(e=>!!e.rawBase64).map(e=>e.rawBase64),s=`\n📎 Assembled ${t.contexts.length} attachment(s) (~${t.totalTokenEstimate} tokens)`}let u=[];n&&u.push(j(n));for(let e of c)e.modality===`image`&&e.dataUri?u.push(A(e.dataUri,e.label)):u.push(k(e.hash,e.handle,e.modality));let d={id:crypto.randomUUID(),role:`user`,text:n,timestamp:Date.now(),attachments:e.attachments.length>0?e.attachments:void 0,elements:u.length>0?u:void 0,satoriContent:u.length>1,speechAct:`directive`},f=Xe({sponsorDid:e.userDid,command:a,args:o,referencedHandles:e.attachments.map(e=>e.handle),referencedPCards:r&&a===`/run`?o.slice(0,1):[],rawContent:n},e.existingHandles,e.existingPCards);if(f.verdict===`REJECT`)return t.onUserMessage(d),t.onGateMessage({id:crypto.randomUUID(),role:`gate`,text:Ze(f),timestamp:Date.now(),gateResult:f,speechAct:`declarative`}),{kind:`gate-rejected`,gateResult:f};if(r){let e=qe(a,o);return e.response===`__CLEAR__`?(t.onClearHistory(),{kind:`slash-command`,gateResult:f}):(t.onUserMessage(d),t.onAssistantMessage({id:crypto.randomUUID(),role:`assistant`,text:e.response+s,timestamp:Date.now(),gateResult:f,satoriContent:e.satoriContent,speechAct:`assertive`}),{kind:`slash-command`,gateResult:f,assistantText:e.response})}let p=`turn_${Date.now()}_${Math.random().toString(36).slice(2,7)}`,m=crypto.randomUUID(),h=w.create(e.userDid||`did:clm:agent:user`),g={imageElements:[],imageMCards:[]};t.onUserMessage(d),t.onAssistantMessage({id:m,role:`assistant`,text:`⏳ [PROGRESSING] Thinking with **${e.activeModel}** (PCard: \`${p}\`)...`,timestamp:Date.now(),gateResult:f,pcardState:`progressing`,speechAct:`commissive`}),t.onTurnStateChange(`progressing`);let _=new T(`pcard:chatbot:turn:${p}`,e.triDatabase),v={prompt:n,attachments:e.attachments.map(e=>e.handle),authorDid:h,modelId:e.activeModel,turnId:p};try{let r=await _.executeTurn(v,{provider:n=>Ot({prompt:n,activeModel:e.activeModel,userDid:e.userDid,lastPrompt:e.lastPrompt,llmConfig:e.llmConfig,turnId:p,assistantMsgId:m,triDatabase:e.triDatabase,assembledContexts:c,base64Images:l,contextSummary:s,artifacts:g,onStreamChunk:t.onStreamChunk}),preGate:async()=>f.verdict===`REJECT`?{pass:!1,reason:f.reason||f.rejections?.map(e=>`${e.code}: ${e.reason}`).join(`; `)||`Precondition gate rejected`,obstruction:{violations:f.violations||f.rejections}}:{pass:!0}});t.onWitness({queryMCard:r.queryMCard,feedbackMCard:r.feedbackMCard,turnId:p,input:n,feedbackText:r.feedbackText,modelId:e.activeModel}),t.onTurnStateChange(r.finalState);let i=[];r.feedbackText.trim()&&i.push(j(r.feedbackText)),g.imageElements.length>0&&i.push(...g.imageElements);let a=i.some(e=>e.type===`image`);return t.onAssistantSettled(m,{text:a?r.feedbackText:`${r.feedbackText}\n\n*[PCard State: ${r.finalState} | Event MCard: \`${r.feedbackMCard.hash.asHex().slice(0,10)}\` | Model: ${e.activeModel}]*`,pcardState:r.finalState,contentHash:r.feedbackMCard.hash.asHex(),satoriContent:a||void 0,elements:i.length>0?i:void 0}),{kind:`chat-turn`,gateResult:f,assistantText:r.feedbackText,finalState:r.finalState,feedbackMCardHash:r.feedbackMCard.hash.asHex()}}catch(e){return t.onTurnStateChange(`waiting`),t.onAssistantSettled(m,{text:`⚠️ **Turn Reverted (H_T = 0)**: ${e?.message||e}\n\n*State rolled back cleanly to \`waiting\` via SavepointGuard. Ensure local Ollama daemon is running at http://127.0.0.1:11434.*`,pcardState:`waiting`}),{kind:`chat-turn`,gateResult:f,error:e?.message||String(e)}}}M.lazy(()=>x(()=>import(`./MarkdownViewlet.qoPlM-TZ.js`).then(e=>({default:e.MarkdownContentView})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])));function At(e){let t=p(z),n=p(Me),r=t.filter(e=>e.channelId===n).map(e=>({id:e.id,role:e.role,text:e.text,timestamp:e.timestamp,attachments:e.attachments,elements:e.elements,gateResult:e.gateResult,satoriContent:e.satoriContent,pcardState:e.pcardState,feedbackMCardHash:e.contentHash,savedToAssets:e.savedToAssets,savedAssetHandle:e.savedAssetHandle})),i=(0,M.useCallback)(e=>{typeof e==`function`?Pe(e(z.get())):Array.isArray(e)&&(e.length===0?Fe(n):Pe(e))},[n]);return{messages:r,processInput:(0,M.useCallback)(async(t,r=[])=>{let i=r.map(e=>e instanceof D?d(e):e),a=l.get();kt({input:t,attachments:i,activeModel:e.activeModel,userDid:e.userDid,existingHandles:e.existingHandles,existingPCards:e.existingPCards,lastPrompt:e.lastPrompt,llmConfig:{apiKey:a.apiKey,provider:a.provider,baseUrl:a.baseUrl},triDatabase:L},{onUserMessage:e=>{B({...e,channelId:n},e.speechAct??`directive`)},onGateMessage:e=>{B({...e,channelId:n},e.speechAct??`declarative`)},onAssistantMessage:e=>{B({...e,channelId:n},e.speechAct??`assertive`)},onStreamChunk:(e,t)=>{Ne(e,{text:t,pcardState:`progressing`})},onAssistantSettled:(e,t)=>{Ne(e,t)},onClearHistory:()=>{Fe(n)},onTurnStateChange:e=>{Oe.set(e)},onWitness:e=>{Ae(e.queryMCard,`chat_query`,{turn_id:e.turnId,input:e.input}),Ae(e.feedbackMCard,`chat_feedback`,{turn_id:e.turnId,feedback:e.feedbackText,model_id:e.modelId})}})},[e.userDid,e.activeModel,e.existingHandles,e.existingPCards,e.lastPrompt,n]),setMessages:i}}function jt(e={}){let t=p(c),n=e.userDid||`did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK`,[r,a]=(0,M.useState)({}),[o,s]=(0,M.useState)(null),l=(0,M.useRef)(null),{messages:u,processInput:d}=At({userDid:n,activeModel:e.activeModel||t});return(0,M.useEffect)(()=>{l.current?.scrollIntoView({behavior:`smooth`})},[u]),(0,M.useEffect)(()=>()=>{},[]),{messages:u,processInput:d,messagesEndRef:l,insertedMap:r,insertingId:o,handleInsertResponseAsMCard:(0,M.useCallback)(async(e,t)=>{if(!t||o)return;let n=r[e];if(n){let e=`assets:${n}`,t=f.get()[e];if(t){i(t);return}}s(e);try{let n=await re(t);a(t=>({...t,[e]:n.name}))}catch(e){console.error(`Failed to insert response as MCard:`,e)}finally{s(null)}},[r,o])}}function Mt(){(0,M.useEffect)(()=>{let e=!1;async function t(){let t=performance.now();try{let n=await fetch(`/api/llm/ollama/tags`);if(n.ok){let r=await n.json(),i=r.latencyMs===void 0?Math.round(performance.now()-t):r.latencyMs;if(!e){let e=(Array.isArray(r.models)?r.models:[]).map(e=>typeof e==`string`?e:e.name),t=!!(r.online===void 0?e.length>0:r.online);s({online:t&&e.length>0,latencyMs:i,models:e})}}else e||s({online:!1,latencyMs:0,models:[]})}catch{e||s({online:!1,latencyMs:0,models:[]})}}return t(),()=>{e=!0}},[])}var $=({onOpenSettings:e,onClose:t})=>{let n=p(c),r=p(o),i=p(u),a=p(ne),s=p(l),[d,f]=(0,M.useState)(``);Mt();let{attachments:m,attachCurrentCard:h,removeAttachment:_,clearAttachments:v,resolveAttachedNodes:b}=Re(),{messages:ee,processInput:te,messagesEndRef:x,insertedMap:S,insertingId:re,handleInsertResponseAsMCard:ie}=jt(),C=()=>{if(!d.trim()&&m.length===0)return;let e=b();te(d,e),f(``),v()},w=n.startsWith(`browser:`),T=n.startsWith(`ollama:`),E=n.startsWith(`gemini:`),D=!!(s.apiKey&&s.apiKey.trim().length>0),O=w||E&&D?`#89d185`:E?`#ffd700`:T&&r.online?`#4ec9b0`:T?`#f14c4c`:`#cca700`,k=w?`WebGPU (0ms Local)`:E&&D?`Google Cloud AI`:E?`AuthN Required`:T&&r.online?`${r.latencyMs}ms`:T?`Ollama Offline`:`Remote Cloud`;return(0,P.jsxs)(`div`,{"data-testid":`koishi-chat-viewlet`,style:{display:`flex`,flexDirection:`column`,height:`100%`,backgroundColor:`#181818`,color:`#cccccc`,fontFamily:`system-ui, -apple-system, sans-serif`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,padding:`8px 10px`,borderBottom:`1px solid #2d2d2d`,backgroundColor:`#1f1f1f`,gap:`6px`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`6px`},children:[(0,P.jsx)(y,{size:14,color:`#007acc`}),(0,P.jsx)(`span`,{style:{fontSize:`11px`,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.5px`},children:`Koishi Chat`}),(0,P.jsxs)(`span`,{"data-testid":`status-indicator`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,padding:`1px 6px`,borderRadius:`10px`,fontSize:`10px`,backgroundColor:`rgba(255, 255, 255, 0.05)`,color:O},children:[(0,P.jsx)(`span`,{style:{width:`6px`,height:`6px`,borderRadius:`50%`,backgroundColor:O,display:`inline-block`}}),k]}),E&&(0,P.jsx)(`span`,{"data-testid":`provider-eoa-badge`,title:D?`Provider EOA did:pkc:eoa:google:ai-studio (Authorized)`:`Provider EOA did:pkc:eoa:google:ai-studio (AuthN Missing - Click to configure)`,onClick:()=>{window.dispatchEvent(new CustomEvent(`clm:open-llm-settings`,{detail:{provider:`google`}})),e?.()},style:{display:`inline-flex`,alignItems:`center`,gap:`3px`,padding:`1px 6px`,borderRadius:`10px`,fontSize:`9px`,cursor:`pointer`,backgroundColor:D?`rgba(137, 209, 133, 0.15)`:`rgba(255, 215, 0, 0.15)`,color:D?`#89d185`:`#ffd700`,border:D?`1px solid rgba(137, 209, 133, 0.3)`:`1px solid rgba(255, 215, 0, 0.3)`},children:D?`🔑 did:pkc:eoa:google`:`⚠️ Missing AuthN`})]}),(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`4px`},children:[e&&(0,P.jsx)(`button`,{type:`button`,"data-testid":`btn-open-settings`,onClick:e,title:`Configure LLM & Ollama Endpoints`,style:{background:`none`,border:`none`,color:`#858585`,cursor:`pointer`,padding:`2px`,display:`flex`,alignItems:`center`},children:(0,P.jsx)(g,{size:13})}),t&&(0,P.jsx)(`button`,{type:`button`,"data-testid":`btn-close-chat`,onClick:t,title:`Close Viewlet`,style:{background:`none`,border:`none`,color:`#858585`,cursor:`pointer`,padding:`2px`,fontSize:`14px`,lineHeight:1},children:`✕`})]})]}),(0,P.jsx)(ve,{})]}),a&&(0,P.jsxs)(`div`,{"data-testid":`download-progress-banner`,style:{padding:`4px 10px`,backgroundColor:`rgba(137, 209, 133, 0.15)`,borderBottom:`1px solid rgba(137, 209, 133, 0.3)`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,fontSize:`10px`,color:`#89d185`},children:[(0,P.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`6px`,overflow:`hidden`},children:[(0,P.jsx)(`span`,{children:`⚡`}),(0,P.jsxs)(`span`,{style:{textOverflow:`ellipsis`,overflow:`hidden`,whiteSpace:`nowrap`},children:[`Preloading `,a.modelId.replace(`browser:`,``),`: `,a.statusText]})]}),(0,P.jsxs)(`span`,{style:{fontWeight:600,flexShrink:0,marginLeft:`6px`},children:[a.progressPct,`%`]})]}),(0,P.jsx)(he,{}),(0,P.jsxs)(`div`,{style:{flex:1,overflowY:`auto`,padding:`8px 10px`,display:`flex`,flexDirection:`column`,gap:`8px`},children:[ee.map(e=>(0,P.jsx)(Be,{message:e,onInsertAsMCard:ie,insertingId:re,insertedMap:S},e.id)),(0,P.jsx)(`div`,{ref:x})]}),(0,P.jsx)(Ve,{inputMessage:d,setInputMessage:f,attachments:m,onRemoveAttachment:_,onAttachCurrentCard:h,hasActiveMCard:!!i,activeMCardHandle:i?.name||i?.handle,onSendMessage:C})]})},Nt=$;export{$ as KoishiChatViewlet,Nt as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime.Dd_uD5pT.js";import{a as t,i as n}from"./vendor-react.DpDU3q_x.js";import{AgentDid as r,ContentHash as i,FibrationFiber as a,MCard as o,PolynomialFunctor as s,ProcessFibration as c,VALID_UNIVERSES as l,getUniverseCoordinates as u,isStratified as d,textPayload as f,verifyFibrationAxioms as p}from"clm-kernel";var m=e(t(),1),h=new Set([`U0`,`U1`,`U3`]),g=e=>e.isHead&&!e.isImmutable&&h.has(e.universe),_=e=>e.universe===`U1`||e.semanticStratum===`process`,v=e=>e.universe===`U2`||e.semanticStratum===`proof`,y=e=>e.universe===`U0`||e.universe===`U1`,b=e=>Promise.resolve({description:e}),x=[{id:`edit`,label:`Edit`,icon:`✎`,shortcut:`Cmd+E`,priority:100,enabled:g,execute:()=>b(`edit`)},{id:`restore_as_head`,label:`Restore as HEAD`,icon:`↺`,priority:98,enabled:e=>e.isHistorical,execute:()=>b(`restore as head`)},{id:`save`,label:`Save`,icon:`💾`,shortcut:`Cmd+S`,priority:95,enabled:g,execute:()=>b(`save`)},{id:`step_transition`,label:`Step Transition`,icon:`▶`,priority:85,enabled:_,execute:()=>b(`step transition`)},{id:`verify_proof`,label:`Verify Proof`,icon:`✓`,priority:85,enabled:v,execute:()=>b(`verify proof`)},{id:`zoom_into`,label:`Zoom In`,icon:`⤵`,priority:80,enabled:e=>e.hasChildren,execute:()=>b(`zoom into`)},{id:`duplicate`,label:`Duplicate`,icon:`⧉`,priority:60,enabled:e=>e.isHead&&!e.isImmutable,execute:()=>b(`duplicate`)},{id:`compose_tensor`,label:`Compose (⊗)`,icon:`⊗`,priority:55,enabled:y,execute:()=>b(`compose tensor`)},{id:`compose_coproduct`,label:`Compose (+)`,icon:`+`,priority:54,enabled:y,execute:()=>b(`compose coproduct`)},{id:`compose_substitute`,label:`Substitute (◁)`,icon:`◁`,priority:53,enabled:e=>e.hasChildren||e.category===`code`,execute:()=>b(`compose substitute`)},{id:`export_artifact`,label:`Export`,icon:`⤓`,priority:20,enabled:()=>!0,execute:()=>b(`export`)},{id:`archive`,label:`Archive`,icon:`🗄`,priority:10,enabled:e=>e.isHead&&!e.isImmutable,execute:()=>b(`archive`)}],ee=class e{actions=new Map;static withBuiltins(){let t=new e;for(let e of x)t.register({...e,origin:`builtin`});return t}register(e){return this.actions.set(e.id,{...e,origin:e.origin??`host`}),()=>this.actions.delete(e.id)}get(e){return this.actions.get(e)}all(){return[...this.actions.values()]}custom(){return this.all().filter(e=>e.origin===`host`)}},te=class{registry;constructor(e){this.registry=e}resolveDirections(e){return this.registry.all().filter(t=>t.enabled(e)).sort((e,t)=>t.priority-e.priority)}toPolynomial(e){let t=this.resolveDirections(e);return s.monomial(t.length,t.length,e)}};function S(e,t,n){switch(t.id){case`save`:case`restore_as_head`:return{...e,isHead:!0,isHistorical:!1};case`archive`:return{...e,isImmutable:!0};case`zoom_into`:return{...e,activeViewport:`zoom`};default:return e}}var C=class{registry;resolver;constructor(e,t){this.registry=e,this.resolver=t}view(e){return this.resolver.resolveDirections(e)}async step(e,t,n){let r=this.view(e).find(e=>e.id===t);if(!r)return;let i=await r.execute(e,n);return{nextPosition:S(e,r,n),effect:i}}};function w(e){return{handle:e.handle,hash:e.hash,universe:e.universe,category:e.category,...e.semanticStratum?{semanticStratum:e.semanticStratum}:{},isHead:e.isHead??!0,isHistorical:e.isHistorical??!1,isImmutable:e.isImmutable??!1,hasChildren:e.hasChildren??!1,activeViewport:e.activeViewport??`fit`}}var T=n(),ne=({position:e,engine:t,onEffect:n,className:r})=>{let i=t.view(e);return(0,T.jsx)(`div`,{role:`toolbar`,"aria-label":`Card affordances`,className:`polynomial-toolbar ${r??``}`.trim(),"data-testid":`polynomial-toolbar`,style:{display:`flex`,alignItems:`center`,gap:`6px`,flexWrap:`wrap`},children:i.map(r=>(0,T.jsxs)(`button`,{type:`button`,"data-testid":`affordance-${r.id}`,"aria-label":r.label,title:r.shortcut?`${r.label} (${r.shortcut})`:r.label,onClick:()=>{t.step(e,r.id).then(e=>{e&&n?.(r.id)})},style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,padding:`2px 8px`,fontSize:`11px`,cursor:`pointer`,background:`#2a2d2e`,color:`#cccccc`,border:`1px solid #3c3c3c`,borderRadius:`3px`},children:[r.icon?(0,T.jsx)(`span`,{"aria-hidden":`true`,children:r.icon}):null,(0,T.jsx)(`span`,{children:r.label})]},r.id))})},E=r.create(`did:clm:agent:zoom`),D=class{structureProvider;trail=[];idStack=[];fibration=new c;processes=new Map;listeners=new Set;constructor(e){this.structureProvider=e}getTrail(){return{steps:[...this.trail],current:this.trail[this.trail.length-1],depth:this.trail.length}}async pushZoom(e){let t=this.trail[this.trail.length-1];if(t){let n=await this.structureProvider.getChildHandles(t.handle);if(n.length>0&&!n.includes(e.handle))return!1}return this.trail.push(e),this.register(e),this.notify(),!0}popZoom(){if(this.trail.length<=1)return;let e=this.trail.pop(),t=this.idStack.pop();return t&&(this.fibration.deregister(t),this.processes.delete(t)),this.notify(),e}jumpToDepth(e){e<0||e>=this.trail.length||(this.trail=this.trail.slice(0,e+1),this.rebuildFibration(),this.notify())}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get size(){return this.fibration.size}verifyAxioms(){for(let e of this.processes.values())if(!p(this.fibration,e).valid)return!1;return!0}register(e){let t=`${e.handle}#${this.trail.length}`,n=o.create(`mcard:${e.handle}`,f(e.hash),E,0),r=new a(t,n,{carrierHandle:e.handle}),i={id:t,carrier:n,carrierHandle:e.handle,fiber:r,createdAt:Date.now()};this.fibration.register(i),this.processes.set(t,i),this.idStack.push(t)}rebuildFibration(){for(let e of[...this.processes.keys()])this.fibration.deregister(e),this.processes.delete(e);this.idStack.length=0;let e=this.trail;this.trail=[];for(let t of e)this.trail.push(t),this.register(t)}notify(){let e=this.getTrail();for(let t of this.listeners)t(e)}},O=new Set([`code`,`data`,`text`,`blob`,`process`]),k=class{contentProvider;constructor(e){this.contentProvider=e}async getPorts(e){let t=await this.contentProvider.getCard(e);if(!t)return[];let n=t.metadata?.ports;if(Array.isArray(n))return n;let r=[{id:`out`,label:`Output`,direction:`out`,typeId:t.mimeType,universe:t.universe}];return O.has(t.category)&&r.push({id:`in`,label:`Input`,direction:`in`,typeId:t.mimeType,universe:t.universe}),r}async getChildHandles(e){let t=(await this.contentProvider.getCard(e))?.metadata?.children;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}},A=({trail:e,onJump:t})=>(0,T.jsxs)(`nav`,{"data-testid":`zoom-breadcrumb`,"aria-label":`Zoom trail`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,flexWrap:`wrap`,fontSize:`11px`,minHeight:`18px`},children:[e.steps.length===0?(0,T.jsx)(`span`,{"data-testid":`zoom-step-0`,"data-current":`true`,style:{color:`#888`},children:`Root`}):null,e.steps.map((n,r)=>{let i=r===e.steps.length-1;return(0,T.jsxs)(m.Fragment,{children:[r>0?(0,T.jsx)(`span`,{"aria-hidden":`true`,style:{color:`#666`},children:`›`}):null,(0,T.jsx)(`button`,{type:`button`,"data-testid":`zoom-step-${r}`,"data-current":i?`true`:`false`,"aria-current":i?`page`:void 0,title:n.title,onClick:()=>t?.(r),style:{padding:`1px 6px`,fontSize:`11px`,cursor:`pointer`,borderRadius:`3px`,border:`1px solid #3c3c3c`,background:i?`#04395e`:`#252526`,color:i?`#ffffff`:`#cccccc`},children:n.title})]},`${n.handle}#${r}`)})]}),j=class{nodes=new Map;activeNodeId=null;subscribers=new Set;async executeEffect(e){let t=await e.apply(),n=this.activeNodeId;if(n){this.setHead(n,!1);let t=this.nodes.get(n);t&&t.children.push(e.id)}let r={id:e.id,effect:e,parentId:n,children:[],isHead:!0};return this.nodes.set(r.id,r),this.activeNodeId=r.id,this.notify(),t}async stepBack(){let e=this.activeNodeId?this.nodes.get(this.activeNodeId):void 0;return e?(await e.effect.inverse(),this.setHead(e.id,!1),this.activeNodeId=e.parentId,this.activeNodeId&&this.setHead(this.activeNodeId,!0),this.notify(),!0):!1}async stepForward(e){let t=this.childrenOf(this.activeNodeId),n=e??t[t.length-1];if(!n)return!1;let r=this.nodes.get(n);return!r||r.parentId!==this.activeNodeId?!1:(await r.effect.apply(),this.activeNodeId&&this.setHead(this.activeNodeId,!1),this.setHead(n,!0),this.activeNodeId=n,this.notify(),!0)}branchSession(){return{nodeId:this.activeNodeId,children:this.childrenOf(this.activeNodeId)}}getTree(){return{nodes:[...this.nodes.values()],activeId:this.activeNodeId}}get activeId(){return this.activeNodeId}headId(){for(let e of this.nodes.values())if(e.isHead)return e.id;return null}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}childrenOf(e){return e?[...this.nodes.get(e)?.children??[]]:[...this.nodes.values()].filter(e=>e.parentId===null).map(e=>e.id)}setHead(e,t){let n=this.nodes.get(e);n&&n.isHead!==t&&this.nodes.set(e,{...n,isHead:t})}notify(){for(let e of this.subscribers)e()}},M=({tree:e,onStepBack:t,onStepForward:n})=>{let r=e.activeId,i=r?e.nodes.find(e=>e.id===r)?.children??[]:[];return(0,T.jsxs)(`div`,{"data-testid":`timeline-scrubber`,style:{display:`flex`,flexDirection:`column`,gap:`6px`,fontSize:`11px`},children:[(0,T.jsx)(`div`,{style:{display:`flex`,gap:`4px`,flexWrap:`wrap`},children:e.nodes.map(e=>(0,T.jsx)(`button`,{type:`button`,"data-testid":`timeline-node-${e.id}`,"data-head":e.isHead?`true`:`false`,"data-active":e.id===r?`true`:`false`,"data-branch":e.children.length>1?`true`:`false`,"aria-label":`Timeline node ${e.id}`,title:e.effect.description,onClick:()=>n?.(e.id),style:{padding:`1px 6px`,fontSize:`11px`,cursor:`pointer`,borderRadius:`3px`,border:`1px solid ${e.isHead?`#73c991`:`#3c3c3c`}`,background:e.id===r?`#04395e`:`#252526`,color:e.id===r?`#ffffff`:`#cccccc`},children:e.effect.description},e.id))}),(0,T.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[(0,T.jsx)(`button`,{type:`button`,"data-testid":`timeline-back`,onClick:()=>t?.(),children:`← Back`}),(0,T.jsxs)(`span`,{"data-testid":`timeline-branch-count`,children:[i.length,` branch`,i.length===1?``:`es`]})]})]})},re=({canUndo:e,canRedo:t,pending:n=0})=>(0,T.jsxs)(`span`,{"data-testid":`journal-indicator`,"data-can-undo":e?`true`:`false`,"data-can-redo":t?`true`:`false`,"data-pending":String(n),"aria-label":`Journal: ${e?`undo available`:`no undo`}, ${t?`redo available`:`no redo`}`,title:`Revertible effect journal · pending ${n}`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,padding:`1px 6px`,fontSize:`10px`,borderRadius:`3px`,border:`1px solid #3c3c3c`,color:e||t?`#73c991`:`#858585`},children:[(0,T.jsxs)(`span`,{"aria-hidden":`true`,children:[e?`↶`:`·`,t?`↷`:`·`]}),n>0?(0,T.jsx)(`span`,{"data-testid":`journal-pending`,children:n}):null]}),N=({dataSource:e,contentProvider:t,actionRegistry:n,onSelectCard:r,className:i,style:a})=>{let[o,s]=(0,m.useState)([]),[c,l]=(0,m.useState)([]),[u,d]=(0,m.useState)(),[f,p]=(0,m.useState)(null),[h,g]=(0,m.useState)(null),_=(0,m.useMemo)(()=>n??ee.withBuiltins(),[n]),v=(0,m.useMemo)(()=>new C(_,new te(_)),[_]),y=(0,m.useMemo)(()=>new D(new k(t)),[t]),b=(0,m.useMemo)(()=>new j,[]),[x,S]=(0,m.useState)(y.getTrail()),[E,O]=(0,m.useState)(b.getTree()),N=(0,m.useCallback)(async()=>{let[t,n]=await Promise.all([e.search({universe:u}),e.getFacets?e.getFacets():Promise.resolve([])]);s(t),l(n),!f&&t.length>0&&p(t[0].handle)},[e,u,f]);(0,m.useEffect)(()=>{N()},[N]),(0,m.useEffect)(()=>{if(!f){g(null);return}let e=!1;return t.getCard(f).then(t=>{e||g(t)}),()=>{e=!0}},[f,t]);let P=(0,m.useMemo)(()=>o.find(e=>e.handle===f),[o,f]),F=(0,m.useMemo)(()=>P?w({handle:P.handle,hash:P.hash,universe:P.universe,category:P.category,semanticStratum:P.semanticStratum}):null,[P]),I=typeof h?.content==`string`?h.content:h?.content?new TextDecoder().decode(h.content):``;return(0,T.jsxs)(`div`,{"data-testid":`mcard-studio-workbench`,className:`mcard-studio-workbench ${i??``}`.trim(),style:{display:`flex`,flexDirection:`column`,height:`100%`,width:`100%`,background:`#1e1e1e`,color:`#ccc`,...a},children:[(0,T.jsxs)(`header`,{"data-testid":`universe-facets`,style:{display:`flex`,gap:`6px`,padding:`8px`,background:`#252526`,borderBottom:`1px solid #333`},children:[(0,T.jsxs)(`button`,{type:`button`,"data-testid":`facet-all`,"data-selected":u===void 0,onClick:()=>d(void 0),style:{padding:`2px 8px`,background:u===void 0?`#0e639c`:`#333`,color:`#fff`,border:`none`},children:[`All (`,c.reduce((e,t)=>e+t.count,0),`)`]}),c.map(e=>(0,T.jsxs)(`button`,{type:`button`,"data-testid":`facet-${e.universe}`,"data-selected":u===e.universe,onClick:()=>d(e.universe),style:{padding:`2px 8px`,background:u===e.universe?`#0e639c`:`#333`,color:`#fff`,border:`none`},children:[e.label,` (`,e.count,`)`]},e.universe))]}),(0,T.jsxs)(`div`,{style:{display:`flex`,flex:1,minHeight:0},children:[(0,T.jsx)(`aside`,{"data-testid":`mcard-sidebar`,style:{width:`240px`,borderRight:`1px solid #333`,overflowY:`auto`},children:(0,T.jsx)(`div`,{"data-testid":`mcard-list`,children:o.map(e=>(0,T.jsxs)(`button`,{type:`button`,"data-testid":`card-item-${e.handle}`,onClick:()=>{p(e.handle),r?.(e.handle)},style:{display:`flex`,justifyContent:`space-between`,width:`100%`,padding:`6px 10px`,background:e.handle===f?`#37373d`:`transparent`,color:`#ccc`,border:`none`,textAlign:`left`},children:[(0,T.jsx)(`span`,{children:e.title}),(0,T.jsx)(`span`,{style:{fontSize:`10px`},children:e.universe})]},e.handle))})}),(0,T.jsx)(`main`,{"data-testid":`mcard-detail-pane`,style:{flex:1,display:`flex`,flexDirection:`column`},children:F?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(`div`,{style:{display:`flex`,justifyContent:`space-between`,padding:`8px`,background:`#252526`,borderBottom:`1px solid #333`},children:[(0,T.jsx)(A,{trail:x,onJump:e=>{y.jumpToDepth(e),S(y.getTrail())}}),(0,T.jsx)(ne,{position:F,engine:v,onEffect:()=>O(b.getTree())})]}),(0,T.jsxs)(`div`,{"data-testid":`card-content-viewport`,style:{flex:1,padding:`16px`,overflowY:`auto`},children:[(0,T.jsx)(`h3`,{children:P?.title}),(0,T.jsx)(`pre`,{style:{background:`#141414`,padding:`10px`,borderRadius:`4px`},children:I||`(empty)`})]}),(0,T.jsxs)(`footer`,{style:{borderTop:`1px solid #333`,padding:`6px`,background:`#252526`,display:`flex`,justifyContent:`space-between`},children:[(0,T.jsx)(M,{tree:E,onStepBack:async()=>{await b.stepBack(),O(b.getTree())}}),(0,T.jsx)(re,{canUndo:E.activeId!==null,canRedo:!1})]})]}):(0,T.jsx)(`div`,{style:{padding:`24px`,color:`#888`},children:`Select a card`})})]})]})};function P(e,t){if(e.typeId!==t.typeId)return!1;let n=l.indexOf(e.universe),r=l.indexOf(t.universe);return n<0||r<0?!1:d(n,r)}function F(e,t){let n=l.indexOf(e),r=l.indexOf(t);return l[Math.max(n<0?0:n,r<0?0:r)]}var I={U0:`#9cdcfe`,U1:`#4ec9b0`,U2:`#dcdcaa`,U3:`#c586c0`,U4:`#ce9178`,U5:`#f48771`},L={in:`◀`,out:`▶`,coeffect:`◇`},R=({port:e,connected:t=!1})=>{let n=I[e.universe]??`#cccccc`;return(0,T.jsxs)(`span`,{"data-testid":`port-${e.id}`,"data-universe":e.universe,"data-direction":e.direction,title:`${e.label} · ${e.direction} · ${e.typeId} · ${e.universe}${e.optional?` (optional)`:``}`,"aria-label":`Port ${e.label}, ${e.direction}, universe ${e.universe}`,style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,padding:`1px 6px`,fontSize:`10px`,borderRadius:`3px`,border:`1px solid ${t?n:`#3c3c3c`}`,background:t?`${n}22`:`#252526`,color:n},children:[(0,T.jsx)(`span`,{"aria-hidden":`true`,children:L[e.direction]}),(0,T.jsx)(`span`,{children:e.label}),(0,T.jsx)(`span`,{style:{color:`#858585`},children:e.universe})]})},z=({engine:e,source:t,target:n,onComposed:r})=>{let[i,a]=(0,m.useState)(null),o=async e=>{let t=await e();a(t),r?.(t)},s=t.ports.filter(e=>e.direction===`out`),c=n.ports.filter(e=>e.direction===`in`);return(0,T.jsxs)(`div`,{"data-testid":`composition-surface`,style:{display:`flex`,flexDirection:`column`,gap:`10px`,padding:`10px`,fontSize:`11px`,color:`#cccccc`},children:[(0,T.jsxs)(`div`,{style:{display:`flex`,gap:`16px`},children:[(0,T.jsxs)(`section`,{"data-testid":`composition-source`,style:{flex:1},children:[(0,T.jsxs)(`header`,{style:{fontWeight:600,color:`#e0e0e0`},children:[`Source · `,t.handle]}),(0,T.jsx)(`div`,{style:{display:`flex`,gap:`6px`,flexWrap:`wrap`,marginTop:`6px`},children:t.ports.map(e=>(0,T.jsx)(R,{port:e},e.id))})]}),(0,T.jsxs)(`section`,{"data-testid":`composition-target`,style:{flex:1},children:[(0,T.jsxs)(`header`,{style:{fontWeight:600,color:`#e0e0e0`},children:[`Target · `,n.handle]}),(0,T.jsx)(`div`,{style:{display:`flex`,gap:`6px`,flexWrap:`wrap`,marginTop:`6px`},children:n.ports.map(e=>(0,T.jsx)(R,{port:e},e.id))})]})]}),(0,T.jsxs)(`div`,{style:{display:`flex`,gap:`6px`,flexWrap:`wrap`},children:[(0,T.jsx)(`button`,{type:`button`,"data-testid":`compose-tensor`,onClick:()=>void o(()=>e.composeTensor(t.handle,n.handle)),children:`Compose (⊗)`}),(0,T.jsx)(`button`,{type:`button`,"data-testid":`compose-coproduct`,onClick:()=>void o(()=>e.composeCoproduct(t.handle,n.handle)),children:`Compose (+)`}),c.map(r=>s.some(e=>P(e,r))?(0,T.jsxs)(`button`,{type:`button`,"data-testid":`compose-substitute-${r.id}`,onClick:()=>void o(()=>e.composeSubstitute(n.handle,r.id,t.handle)),children:[`Substitute into `,r.label,` (◁)`]},r.id):null)]}),i?(0,T.jsx)(`div`,{"data-testid":`composition-result`,"data-success":i.success?`true`:`false`,style:{color:i.success?`#73c991`:`#f48771`},children:i.success?`Sealed ${i.composedHandle} · ${i.composedUniverse} · #${i.composedHash?.asHex().slice(0,8)}`:`Error (${i.error?.code}): ${i.error?.message}`}):null]})};function B(e,t={}){let n=t.delimiter??`:`,r=[],i=new Map;for(let t of e){let e=t.handle.split(n).filter(Boolean);if(e.length===0)continue;let a=``,o=r;for(let t=0;t<e.length;t++){let r=e[t],s=a?`${a}${n}${r}`:r,c=t===e.length-1,l=i.get(s);l||(l={handle:s,name:r,isBranch:!c,children:[]},i.set(s,l),o.push(l)),c&&(l.isBranch=!1),a=s,o=l.children}}let a=e=>({handle:e.handle,name:e.name,isBranch:e.isBranch,children:e.children.map(a)});return r.map(a)}var V=new Map(u().map(e=>[e.identifier,e.stratum_name]));function H(e){let t=e instanceof Uint8Array?e:new TextEncoder().encode(e);return i.compute(t).asHex()}function U(e){return{handle:e.handle,hash:e.hash,title:e.handle.split(`:`).pop()??e.handle,mimeType:e.mimeType,universe:e.universe,category:e.category,...e.semanticStratum?{semanticStratum:e.semanticStratum}:{},sizeBytes:e.content instanceof Uint8Array?e.content.byteLength:new TextEncoder().encode(e.content).byteLength,updatedAt:e.updatedAt,isLeaf:!0,path:e.metadata?.path}}function W(e){return{handle:e.handle,hash:e.hash,mimeType:e.mimeType,universe:e.universe,category:e.category,...e.semanticStratum?{semanticStratum:e.semanticStratum}:{},content:e.content,encoding:e.encoding,updatedAt:e.updatedAt,...e.metadata?{metadata:e.metadata}:{}}}var G=class{records=new Map;handleByHash=new Map;async putCard(e,t,n={}){let r=H(t),i=this.records.get(e),a=i?[...i.history]:[];a[a.length-1]!==r&&a.push(r);let o={handle:e,hash:r,content:t,encoding:t instanceof Uint8Array?`binary`:n.mimeType===`application/json`?`json`:`utf-8`,mimeType:n.mimeType??`text/plain`,universe:n.universe??`U0`,category:n.category??`data`,...n.semanticStratum?{semanticStratum:n.semanticStratum}:{},updatedAt:new Date().toISOString(),...n.metadata?{metadata:n.metadata}:{},history:a};return this.records.set(e,o),this.handleByHash.set(r,e),U(o)}async getCard(e){let t=this.resolve(e);return t?W(t):null}async deleteCard(e){let t=this.records.get(e);return t?(this.records.delete(e),this.handleByHash.delete(t.hash),!0):!1}async search(e={}){let t=[...this.records.values()].map(U);if(e.pattern){let n=e.pattern.toLowerCase();t=t.filter(e=>e.handle.toLowerCase().includes(n))}e.universe&&(t=t.filter(t=>t.universe===e.universe)),e.category&&(t=t.filter(t=>t.category===e.category)),e.semanticStratum&&(t=t.filter(t=>t.semanticStratum===e.semanticStratum)),e.prefix&&(t=t.filter(t=>t.handle.startsWith(e.prefix))),t.sort((e,t)=>e.handle.localeCompare(t.handle));let n=e.offset??0,r=e.limit??t.length;return t.slice(n,n+r)}async getTree(e){return B(await this.search(e?{prefix:e}:{}),{delimiter:`:`})}async getHistory(e){let t=this.records.get(e);return t?t.history.map(e=>U({...t,hash:e})):[]}async has(e){return this.resolve(e)!==void 0}async getFacets(e={}){let t=await this.search({...e,limit:void 0,offset:void 0}),n=new Map;for(let e of t)n.set(e.universe,(n.get(e.universe)??0)+1);return[...n.entries()].sort((e,t)=>e[0].localeCompare(t[0])).map(([e,t])=>({universe:e,label:V.get(e)??e,count:t}))}resolve(e){let t=this.records.get(e);if(t)return t;let n=this.handleByHash.get(e);return n?this.records.get(n):void 0}hydrate(e){let t={handle:e.handle,hash:e.hash,content:e.content,encoding:e.encoding,mimeType:e.mimeType,universe:e.universe,category:e.category,...e.semanticStratum?{semanticStratum:e.semanticStratum}:{},updatedAt:e.updatedAt,...e.metadata?{metadata:e.metadata}:{},history:[e.hash]};this.records.set(e.handle,t),this.handleByHash.set(e.hash,e.handle)}},K=`application/vnd.mcard+json`,q=`clm:compound:tensor`,J=`clm:compound:coproduct`,Y=`clm:compound:substitute`;function ie(e){if(typeof e.content==`string`)try{let t=JSON.parse(e.content);return t&&typeof t==`object`?t:void 0}catch{return}}function X(e,t,n){let r=ie(e);return r?.type===t&&Array.isArray(r[n])?r[n]:[{handle:e.handle,hash:e.hash,universe:e.universe}]}function Z(e){let t=new Map;for(let n of e)t.set(n.hash,n);return[...t.values()].sort((e,t)=>e.hash.localeCompare(t.hash))}var Q=e=>e.reduce((e,t)=>F(e,t.universe),`U0`),$=(e,t)=>({success:!1,error:{code:e,message:t}}),ae=class{contentProvider;structureProvider;compoundMime;constructor(e,t,n=K){this.contentProvider=e,this.structureProvider=t,this.compoundMime=n}async seal(e,t,n){let r=await this.contentProvider.putCard(e,JSON.stringify(t),{mimeType:this.compoundMime,universe:n,category:`data`});return{success:!0,composedHandle:r.handle,composedHash:i.fromHex(r.hash),composedUniverse:n}}async load(e,t){let[n,r]=await Promise.all([this.contentProvider.getCard(e),this.contentProvider.getCard(t)]);return n&&r?[n,r]:void 0}async composeTensor(e,t){let n=await this.load(e,t);if(!n)return $(`NOT_FOUND`,`One or both cards were not found`);let r=Z([...X(n[0],q,`members`),...X(n[1],q,`members`)]);if(r.length===0)return $(`INVALID_OPERAND`,`Tensor requires at least one member`);let i=Q(r);return this.seal(`tensor:${r.map(e=>e.hash).join(`+`)}`,{type:q,members:r,universe:i},i)}async composeCoproduct(e,t,n){let r=await this.load(e,t);if(!r)return $(`NOT_FOUND`,`One or both cards were not found`);let i=Z([...X(r[0],J,`variants`),...X(r[1],J,`variants`)]);if(i.length===0)return $(`INVALID_OPERAND`,`Coproduct requires at least one variant`);let a=Q(i),o=n&&i.some(e=>e.hash===n)?n:i[0].hash;return this.seal(`coproduct:${i.map(e=>e.hash).join(`+`)}:${o}`,{type:J,variants:i,chosen:o,universe:a},a)}async composeSubstitute(e,t,n){let r=await this.load(e,n);if(!r)return $(`NOT_FOUND`,`Host or inserted card was not found`);let[i,a]=r,o=(await this.structureProvider.getPorts(e)).find(e=>e.id===t&&e.direction===`in`);if(!o)return $(`BAD_PORT`,`Invalid input port "${t}" on host`);if(!(await this.structureProvider.getPorts(n)).find(e=>e.direction===`out`&&P(e,o)))return $(`TYPE_MISMATCH`,`No out port compatible with "${o.typeId}"`);let s=F(i.universe,a.universe);return this.seal(`substitute:${i.hash}:${t}:${a.hash}`,{type:Y,host:i.handle,hostHash:i.hash,port:t,inserted:a.handle,insertedHash:a.hash,universe:s},s)}},oe=()=>{let[e]=(0,m.useState)(()=>new G),[t,n]=(0,m.useState)(!1),[r,i]=(0,m.useState)(!1),a=(0,m.useMemo)(()=>new ae(e,new k(e)),[e]);return(0,m.useEffect)(()=>{let t=!0;async function r(){await e.putCard(`fixture:u0:static-image`,`fake-image-bytes`,{universe:`U0`,category:`media`,mimeType:`image/png`}),await e.putCard(`fixture:u1:process1`,`places: [p1]
|
|
2
|
-
transitions: [t1]`,{universe:`U1`,category:`data`,mimeType:`application/clm-pcard+yaml`,semanticStratum:`process`}),await e.putCard(`fixture:u2:proof-receipt`,`{"verified": true, "witness": "proof-hash"}`,{universe:`U2`,category:`data`,mimeType:`application/clm-vcard+json`,semanticStratum:`proof`}),await e.putCard(`fixture:u3:dialogue`,`<card><propose text="agree" /></card>`,{universe:`U3`,category:`text`,mimeType:`application/satori+xml`,semanticStratum:`dialogue`}),await e.putCard(`fixture:u4:membrane`,`<membrane id="surface-1" />`,{universe:`U4`,category:`text`,mimeType:`text/html`,semanticStratum:`membrane`}),await e.putCard(`fixture:u5:meta`,`{"epoch": 1, "telemetry_hook": true}`,{universe:`U5`,category:`data`,mimeType:`application/json`,semanticStratum:`meta`}),await e.putCard(`fixture:u0:data1`,`{"value": 42}`,{universe:`U0`,category:`data`,mimeType:`application/json`}),t&&(n(!0),console.log(`clm:workbench-ready`),window.dispatchEvent(new CustomEvent(`clm:workbench-ready`)))}return r(),()=>{t=!1}},[e]),t?(0,T.jsxs)(`div`,{style:{width:`100vw`,height:`100vh`,display:`flex`,flexDirection:`column`},children:[(0,T.jsxs)(`div`,{style:{background:`#333`,padding:`4px 12px`,display:`flex`,justifyContent:`space-between`,alignItems:`center`},children:[(0,T.jsx)(`span`,{style:{fontSize:`11px`,color:`#aaa`},children:`@mcard/studio Embedding Harness`}),(0,T.jsx)(`button`,{type:`button`,"data-testid":`toggle-composition-btn`,onClick:()=>i(e=>!e),style:{padding:`2px 8px`,fontSize:`11px`,cursor:`pointer`},children:r?`Show Workbench`:`Show Composition Surface`})]}),(0,T.jsx)(`div`,{style:{flex:1,minHeight:0},children:r?(0,T.jsx)(z,{engine:a,source:{handle:`fixture:u0:data1`,universe:`U0`,ports:[{id:`out-1`,label:`Output Port`,direction:`out`,typeId:`application/json`,universe:`U0`}]},target:{handle:`fixture:u1:process1`,universe:`U1`,ports:[{id:`in-1`,label:`Input Port`,direction:`in`,typeId:`application/json`,universe:`U1`},{id:`out-2`,label:`Output Port`,direction:`out`,typeId:`application/json`,universe:`U1`}]},onComposed:async t=>{t.success&&t.composedHandle&&await e.putCard(t.composedHandle,`composed-content`,{universe:t.composedUniverse})}}):(0,T.jsx)(N,{dataSource:e,contentProvider:e})})]}):(0,T.jsx)(`div`,{"data-testid":`harness-loading`,style:{padding:`20px`,color:`#888`},children:`Initializing MCard Library Harness...`})};export{oe as MCardLibraryHarness};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime.Dd_uD5pT.js";import{a as t,i as n}from"./vendor-react.DpDU3q_x.js";import{a as r,g as i,i as a,l as o,n as s,r as c,t as l,u}from"./themeStore.zUMFLo3Q.js";import{n as d,r as f,t as p}from"./disposable.66apX1Q2.js";import{t as m}from"./rendererEventBus.CyFnSRLk.js";import{n as h}from"./RendererPCardRegistry.CLr4j1Ub.js";import{ContentHash as g}from"clm-kernel";var _=e(t(),1),v=i(null);function y(e){v.set(e)}var b=new class{judgeService;constructor(e){this.judgeService=e??new d}evaluatePreCondition(e,t){if(!t||t.content===void 0||t.content===null)return{valid:!1,error:`Empty or missing MCard payload`};try{let n=this.judgeService.judge({handle:t.handle||e.handle,content:typeof t.content==`string`?t.content:JSON.stringify(t.content),mimeHint:t.mimeType}),r=e.verifyPre(t);return{valid:r,matchedCategory:n.category,mimeType:n.mimeType,error:r?void 0:`PCard verifyPre assertion failed`}}catch(e){return{valid:!1,error:e?.message||`Pre-condition evaluation error`}}}evaluatePostCondition(e,t,n){let r=t.coeffects.tokens||{},i=Object.keys(r).length,a=n!==null;if(!a)return{valid:!1,tokenCount:i,boundsOk:!1,error:`DOM container unmounted or null`};let o=e.verifyPost(t,n);return{valid:o,tokenCount:i,boundsOk:a,error:o?void 0:`PCard verifyPost assertion failed`}}sealWitness(e,t,n,r,i){let a=r.valid&&i.valid?`verified`:`rejected`,o=Date.now(),s=`${e}|${t}|${n}|${a}|${o}`,c=`blake3:${g.computeString(s).asHex()}`,l=`ed25519:${g.computeString(`${c}|witness`).asHex().slice(0,32)}`,u=`did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK`,d={pcardHandle:e,targetHash:t,positionHash:n,preVerified:r.valid,postVerified:i.valid,signature:l,sponsorDid:u,timestamp:o,status:a};return y({pcardHash:t,vcardHash:c,signature:l,sponsorDid:u,firedBy:e,parentMarkingHash:n}),d}},x=n(),S=({card:e,handle:t=`unknown`})=>{let n=(0,_.useRef)(null),i=(0,_.useRef)(new p),d=f(r),g=f(s),v=f(a),y=f(l),S=f(c),C=(0,_.useMemo)(()=>u({theme:d,density:g,responsive:v,context:y,environment:S},o),[d,g,v,y,S]),w=(0,_.useMemo)(()=>({theme:d,density:g,responsive:v,context:y,environment:S,tokens:C}),[d,g,v,y,S,C]),T=(0,_.useMemo)(()=>h.getPCard(t)||h.resolveForMCard(e||{}),[t,e]),[E,D]=(0,_.useState)(()=>T?T.computeInitialPosition(e,w):null),[O,k]=(0,_.useState)(null);(0,_.useEffect)(()=>{E&&T&&D(e=>e?{...e,coeffects:w,tokens:w.tokens}:null)},[w,T]),(0,_.useEffect)(()=>{if(!T||!E)return;let t=b.evaluatePreCondition(T,e),r=b.evaluatePostCondition(T,E,n.current),a=b.sealWitness(T.handle,e?.hash||`blake3:00000000`,E.positionHash,t,r);return k(a),()=>{i.current.dispose(),T.dispose&&E&&T.dispose(E)}},[T,e]);let A=(0,_.useMemo)(()=>!T||!E?[]:T.computeFiber(E).filter(e=>e.available(E)),[T,E]),j=async t=>{if(E&&T)try{let n=await t.step(E);n.effect&&(Array.isArray(n.effect)?n.effect.forEach(e=>i.current.add(e)):i.current.add(n.effect)),D(e=>e?{...e,state:n.nextState}:null),m({modality:T.modality,type:t.id,payload:{nextState:n.nextState},handle:e?.handle||T.handle})}catch(e){console.error(`[PCardRendererBridge] Error executing affordance ${t.id}:`,e)}};return T?(0,x.jsxs)(`div`,{className:`pcard-renderer-bridge mcard-surface`,style:{padding:`var(--mcard-space-lg)`,display:`flex`,flexDirection:`column`,gap:`var(--mcard-space-md)`},children:[(0,x.jsxs)(`header`,{className:`bridge-header`,style:{display:`flex`,justifyContent:`space-between`,alignItems:`center`,borderBottom:`1px solid var(--mcard-border-default)`,paddingBottom:`var(--mcard-space-sm)`},children:[(0,x.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`var(--mcard-space-sm)`},children:[(0,x.jsx)(`span`,{className:`mcard-badge`,children:T.modality.toUpperCase()}),(0,x.jsx)(`strong`,{style:{color:`var(--mcard-text-primary)`},children:T.displayName}),(0,x.jsxs)(`span`,{style:{fontSize:`var(--mcard-font-size-xs)`,color:`var(--mcard-text-muted)`},children:[`[`,E?.positionHash.slice(0,15),`...]`]})]}),(0,x.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`var(--mcard-space-sm)`},children:O&&(0,x.jsxs)(`span`,{className:`vcard-pill`,style:{fontSize:`var(--mcard-font-size-xs)`,padding:`2px 8px`,borderRadius:`var(--mcard-radius-xs)`,background:O.status===`verified`?`var(--mcard-status-success-bg, #1b3d2f)`:`var(--mcard-status-error-bg, #3d1b1b)`,color:O.status===`verified`?`var(--mcard-status-success, #4ec9b0)`:`var(--mcard-status-error, #f48771)`,border:`1px solid var(--mcard-border-subtle)`},children:[`VCard: `,O.status.toUpperCase()]})})]}),A.length>0&&(0,x.jsx)(`nav`,{className:`bridge-toolbar`,style:{display:`flex`,gap:`var(--mcard-space-xs)`,background:`var(--mcard-bg-elevated)`,padding:`4px 8px`,borderRadius:`var(--mcard-radius-sm)`},children:A.map(e=>(0,x.jsxs)(`button`,{onClick:()=>j(e),className:`mcard-button mcard-button-secondary`,style:{fontSize:`var(--mcard-font-size-xs)`,padding:`2px 8px`,cursor:`pointer`},title:e.shortcut?`${e.label} (${e.shortcut})`:e.label,children:[e.icon&&(0,x.jsx)(`span`,{style:{marginRight:`4px`},children:e.icon}),e.label]},e.id))}),(0,x.jsx)(`div`,{ref:n,className:`bridge-surface-viewport`,style:{minHeight:`280px`,background:`var(--mcard-canvas-clear, var(--mcard-bg-canvas))`,border:`1px solid var(--mcard-border-default)`,borderRadius:`var(--mcard-radius-md)`,padding:`var(--mcard-space-md)`,overflow:`auto`},children:(0,x.jsx)(`pre`,{style:{margin:0,fontFamily:`var(--mcard-font-mono)`,fontSize:`var(--mcard-font-size-sm)`,color:`var(--mcard-text-primary)`},children:typeof e?.content==`string`?e.content:JSON.stringify(e?.content||E?.state,null,2)})})]}):(0,x.jsxs)(`div`,{className:`pcard-bridge-empty mcard-surface`,style:{padding:`var(--mcard-space-xl)`},children:[(0,x.jsxs)(`h3`,{children:[`Unrecognized Renderer PCard: `,(0,x.jsx)(`code`,{children:t})]}),(0,x.jsx)(`p`,{children:`No registered modality matches this PCard handle or MCard schema.`})]})};export{S as PCardRendererBridge};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ContentHash as e}from"clm-kernel";function t(e){let t=e.trim();return t.startsWith(`pcard:render:`)?`pcard:render/${t.slice(13)}`:t}function n(t,n,r,i){let a=`${t}|${n}|${Object.keys(r).sort().map(e=>`${e}:${r[e]}`).join(`;`)}|${JSON.stringify(i??{})}`;return`blake3:${e.computeString(a).asHex()}`}var r=new class{pcards=new Map;modalityMap=new Map;constructor(){this.registerDefaults()}register(e){let n=t(e.handle);this.pcards.set(n,e),this.modalityMap.set(e.modality,e)}getPCard(e){let n=t(e);if(this.pcards.has(n))return this.pcards.get(n);if(this.modalityMap.has(e))return this.modalityMap.get(e)}resolveForMCard(e){if(!e)return;let t=(e.path||e.handle||``).toLowerCase(),n=(e.mimeType||``).toLowerCase();for(let e of this.modalityMap.values())if(e.supportedExtensions.some(e=>t.endsWith(e.toLowerCase()))||e.supportedMimes.some(e=>n===e.toLowerCase()||n.startsWith(e.toLowerCase())))return e}getAll(){return Array.from(this.pcards.values())}registerDefaults(){let t=[`mermaid`,`katex`,`d3`,`chartjs`,`excalidraw`,`three`,`tikz`,`table`],r={mermaid:{displayName:`Mermaid Diagram PCard`,description:`Reactive SVG flowcharts, sequence diagrams, and class graphs`,mimes:[`text/vnd.mermaid`,`text/x-mermaid`],exts:[`.mermaid`,`.mmd`]},katex:{displayName:`KaTeX Math PCard`,description:`Zero-bundle mathematical typography and equation proofs`,mimes:[`text/x-tex`,`application/x-latex`,`text/x-math`],exts:[`.math`,`.latex`,`.tex`]},d3:{displayName:`D3.js Graph PCard`,description:`Interactive topological force networks and hierarchical trees`,mimes:[`application/vnd.d3+json`,`application/x-graph`],exts:[`.d3.json`,`.graph.json`,`.adjlist`]},chartjs:{displayName:`Chart.js Analytics PCard`,description:`Multi-series timeseries, bar, radar, and statistical distributions`,mimes:[`application/vnd.chartjs+json`,`application/x-timeseries`],exts:[`.chart.json`,`.timeseries.json`]},excalidraw:{displayName:`Excalidraw Whiteboard PCard`,description:`Spatial hand-drawn conceptual sketching and architecture canvas`,mimes:[`application/vnd.excalidraw+json`,`application/x-excalidraw`],exts:[`.excalidraw`,`.excalidraw.json`]},three:{displayName:`Three.js 3D Viewport PCard`,description:`WebGL spatial geometry, meshes, and lighting environments`,mimes:[`model/gltf-binary`,`model/gltf+json`,`model/obj`,`model/stl`],exts:[`.glb`,`.gltf`,`.obj`,`.stl`,`.3ds`]},tikz:{displayName:`TikZ Categorical Vector PCard`,description:`High-fidelity commutative diagrams and LaTeX vector diagrams`,mimes:[`text/x-tikz`,`text/x-tikzcd`],exts:[`.tikz`,`.tikzcd`,`.tikz-cd`]},table:{displayName:`GFM Data Table PCard`,description:`Tabular record grids, sorting, filtering, and CSV evaluation`,mimes:[`text/csv`,`text/tab-separated-values`],exts:[`.csv`,`.tsv`]}};for(let i of t){let t=r[i];this.register({modality:i,handle:`pcard:render/${i}`,displayName:t.displayName,description:t.description,supportedMimes:t.mimes,supportedExtensions:t.exts,coeffects:[`theme`,`density`,`responsive`,`context`,`environment`,`tokens`],computeInitialPosition:(t,r)=>{let a=t?.handle||`anonymous:${i}`,o=t?.hash||e.computeString(String(t?.content||``)).asHex(),s={zoom:1,panX:0,panY:0};return{handle:a,hash:o,universe:t?.universe||`U1`,category:t?.category||`data`,...t?.semanticStratum?{semanticStratum:t.semanticStratum}:{},isHead:!0,isHistorical:!1,isImmutable:!1,hasChildren:!1,activeViewport:`fit`,positionHash:n(o,i,r.tokens,s),modality:i,coeffects:r,state:s}},computeFiber:e=>[{id:`pcard:render:${i}:affordance:zoom_fit`,label:`Fit View`,icon:`⊡`,priority:90,available:()=>!0,step:async e=>({nextState:{...e.state,zoom:1,panX:0,panY:0}})},{id:`pcard:render:${i}:affordance:copy_source`,label:`Copy Source`,icon:`⎘`,priority:50,available:()=>!0,step:async e=>({nextState:e.state})}],verifyPre:e=>e!=null,verifyPost:(e,t)=>t!==null})}}};export{r as n,t};
|