dot-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/README.md +20 -200
- package/client/assets/ActFrame-BYOBkLYW.js +1 -0
- package/client/assets/ActFrame-C_WEt6bv.css +1 -0
- package/client/assets/ActInspectorPanel-C3VlS7tB.js +1 -0
- package/client/assets/ActInspectorPanel-CE6s6GYv.css +1 -0
- package/client/assets/AssistantChat-BOyW0K79.js +1 -0
- package/client/assets/AssistantChat-DoVmHvMJ.css +1 -0
- package/client/assets/CanvasTerminalFrame-BC-79q9U.css +1 -0
- package/client/assets/CanvasTerminalFrame-DxKbexK6.js +4 -0
- package/client/assets/CanvasTrackingFrame-DumxhNwg.js +1 -0
- package/client/assets/CanvasTrackingFrame-G4rRrfne.css +1 -0
- package/client/assets/CanvasWindowFrame-ziJeVfHG.js +1 -0
- package/client/assets/DanceBundleEditorFrame-CH8VDUMK.js +1 -0
- package/client/assets/DanceBundleEditorFrame-DaLqMflT.css +1 -0
- package/client/assets/MarkdownEditorFrame-DVecIZpZ.css +1 -0
- package/client/assets/MarkdownEditorFrame-Dwpgs2GX.js +2 -0
- package/client/assets/MarkdownRenderer-Cz8A4AgP.js +1 -0
- package/client/assets/PublishModal-DUlHz0fT.js +1 -0
- package/client/assets/TodoDock-DcVf7zQG.js +1 -0
- package/client/assets/WorkspaceToolbar-CXYi_sMD.js +2 -0
- package/client/assets/WorkspaceToolbar-CiQvVocC.css +1 -0
- package/client/assets/chat-message-visibility-YwJ-AQno.js +11 -0
- package/client/assets/dnd-vendor-CIAZE2P2.js +5 -0
- package/client/assets/flow-vendor-BZV40eAE.css +1 -0
- package/client/assets/flow-vendor-C868rU-6.js +23 -0
- package/client/assets/icon-vendor-I2JVIi1s.js +501 -0
- package/client/assets/index-BMY4hrBP.js +3 -0
- package/client/assets/index-C-vnj9y3.js +1 -0
- package/client/assets/index-C9HTqfZw.css +1 -0
- package/client/assets/index-CWrv6O3o.js +64 -0
- package/client/assets/index-DMS12-Q2.js +8 -0
- package/client/assets/index-Dn7t_Y7G.js +1 -0
- package/client/assets/index-p-wk7iGH.css +1 -0
- package/client/assets/markdown-vendor-BSTcku12.css +10 -0
- package/client/assets/markdown-vendor-DnTJ9hmR.js +35 -0
- package/client/assets/participant-labels-Cf3qP3GB.js +1 -0
- package/client/assets/queries-Dm1jEHfc.js +1 -0
- package/client/assets/query-vendor-_taqgrbn.js +1 -0
- package/client/assets/react-vendor-DzpMUNDT.js +49 -0
- package/client/assets/settings-utils-l7KCS3Ev.js +1 -0
- package/client/assets/terminal-vendor-6GBZ9nXN.css +32 -0
- package/client/assets/terminal-vendor-D0xRnmbI.js +112 -0
- package/client/index.html +13 -3
- package/dist/cli.js +25 -3
- package/dist/server/app.js +72 -0
- package/dist/server/index.js +2 -62
- package/dist/server/lib/act-session-policy.js +31 -0
- package/dist/server/lib/chat-session.js +101 -0
- package/dist/server/lib/config.js +18 -4
- package/dist/server/lib/dot-authoring.js +171 -102
- package/dist/server/lib/dot-loader.js +9 -8
- package/dist/server/lib/dot-login.js +8 -190
- package/dist/server/lib/dot-source.js +11 -0
- package/dist/server/lib/model-catalog.js +74 -15
- package/dist/server/lib/opencode-auth.js +4 -1
- package/dist/server/lib/opencode-errors.js +70 -38
- package/dist/server/lib/opencode-sidecar.js +5 -2
- package/dist/server/lib/project-config.js +8 -0
- package/dist/server/lib/runtime-tools.js +46 -8
- package/dist/server/lib/safe-mode.js +410 -0
- package/dist/server/lib/session-execution.js +81 -0
- package/dist/server/lib/sse.js +22 -0
- package/dist/server/routes/act-runtime-threads.js +156 -0
- package/dist/server/routes/act-runtime-tools.js +157 -0
- package/dist/server/routes/act-runtime.js +7 -0
- package/dist/server/routes/adapter.js +32 -0
- package/dist/server/routes/assets-collection.js +16 -0
- package/dist/server/routes/assets-detail.js +38 -0
- package/dist/server/routes/assets.js +4 -158
- package/dist/server/routes/chat-messages.js +104 -0
- package/dist/server/routes/chat-sessions.js +104 -0
- package/dist/server/routes/chat-stream.js +15 -0
- package/dist/server/routes/chat.js +6 -353
- package/dist/server/routes/compile.js +5 -91
- package/dist/server/routes/dot-assets.js +77 -0
- package/dist/server/routes/dot-core.js +62 -0
- package/dist/server/routes/dot-performer.js +80 -0
- package/dist/server/routes/dot.js +6 -267
- package/dist/server/routes/drafts-collection.js +40 -0
- package/dist/server/routes/drafts-dance-bundle.js +113 -0
- package/dist/server/routes/drafts-item.js +86 -0
- package/dist/server/routes/drafts.js +9 -0
- package/dist/server/routes/health.js +18 -33
- package/dist/server/routes/opencode-core.js +120 -0
- package/dist/server/routes/opencode-file.js +67 -0
- package/dist/server/routes/opencode-mcp.js +74 -0
- package/dist/server/routes/opencode-provider.js +41 -0
- package/dist/server/routes/opencode.js +8 -418
- package/dist/server/routes/route-errors.js +10 -0
- package/dist/server/routes/safe-actions.js +60 -0
- package/dist/server/routes/safe-summary.js +20 -0
- package/dist/server/routes/safe.js +7 -0
- package/dist/server/routes/workspaces.js +47 -0
- package/dist/server/services/act-runtime/act-context-builder.js +81 -0
- package/dist/server/services/act-runtime/act-runtime-service.js +313 -0
- package/dist/server/services/act-runtime/act-runtime-utils.js +10 -0
- package/dist/server/services/act-runtime/act-tool-projection.js +26 -0
- package/dist/server/services/act-runtime/act-tools.js +151 -0
- package/dist/server/services/act-runtime/board-persistence.js +38 -0
- package/dist/server/services/act-runtime/event-logger.js +73 -0
- package/dist/server/services/act-runtime/event-router.js +102 -0
- package/dist/server/services/act-runtime/mailbox.js +149 -0
- package/dist/server/services/act-runtime/safety-guard.js +162 -0
- package/dist/server/services/act-runtime/session-queue.js +114 -0
- package/dist/server/services/act-runtime/thread-manager.js +351 -0
- package/dist/server/services/act-runtime/wake-cascade.js +306 -0
- package/dist/server/services/act-runtime/wake-evaluator.js +43 -0
- package/dist/server/services/act-runtime/wake-performer-resolver.js +68 -0
- package/dist/server/services/act-runtime/wake-prompt-builder.js +77 -0
- package/dist/server/services/adapter-view-service.js +6 -0
- package/dist/server/services/asset-service.js +366 -0
- package/dist/server/services/chat-event-stream-service.js +157 -0
- package/dist/server/services/chat-service.js +207 -0
- package/dist/server/services/chat-session-service.js +203 -0
- package/dist/server/services/compile-service.js +4 -0
- package/dist/server/services/dance-bundle-service.js +222 -0
- package/dist/server/services/dot-add-service.js +59 -0
- package/dist/server/services/dot-service.js +178 -0
- package/dist/server/services/draft-service.js +367 -0
- package/dist/server/services/opencode-projection/dance-compiler.js +164 -0
- package/dist/server/services/opencode-projection/performer-compiler.js +195 -0
- package/dist/server/services/opencode-projection/preview-service.js +31 -0
- package/dist/server/services/opencode-projection/projection-manifest.js +98 -0
- package/dist/server/services/opencode-projection/stage-projection-service.js +188 -0
- package/dist/server/services/opencode-service.js +338 -0
- package/dist/server/services/safe-service.js +33 -0
- package/dist/server/services/studio-assistant/assistant-service.js +172 -0
- package/dist/server/services/studio-service.js +69 -0
- package/dist/server/services/workspace-service.js +224 -0
- package/dist/server/terminal.js +57 -11
- package/dist/shared/act-types.js +4 -0
- package/dist/shared/adapter-view.js +1 -0
- package/dist/shared/asset-contracts.js +1 -0
- package/dist/shared/assistant-actions.js +1 -0
- package/dist/shared/chat-contracts.js +1 -0
- package/dist/shared/dot-contracts.js +1 -0
- package/dist/shared/dot-types.js +4 -0
- package/dist/shared/draft-contracts.js +2 -0
- package/dist/shared/model-types.js +2 -0
- package/dist/shared/performer-mcp-portability.js +10 -0
- package/dist/shared/safe-mode.js +1 -0
- package/dist/shared/session-metadata.js +4 -3
- package/package.json +6 -4
- package/client/assets/index-C2eIILoa.css +0 -41
- package/client/assets/index-DUPZ_Lw5.js +0 -616
- package/dist/server/lib/act-runtime.js +0 -1282
- package/dist/server/lib/prompt.js +0 -222
- package/dist/server/routes/stages.js +0 -137
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Dn7t_Y7G.js","assets/react-vendor-DzpMUNDT.js","assets/settings-utils-l7KCS3Ev.js","assets/icon-vendor-I2JVIi1s.js","assets/dnd-vendor-CIAZE2P2.js","assets/query-vendor-_taqgrbn.js","assets/markdown-vendor-DnTJ9hmR.js","assets/markdown-vendor-BSTcku12.css","assets/queries-Dm1jEHfc.js","assets/flow-vendor-C868rU-6.js","assets/flow-vendor-BZV40eAE.css","assets/terminal-vendor-D0xRnmbI.js","assets/terminal-vendor-6GBZ9nXN.css","assets/ActInspectorPanel-C3VlS7tB.js","assets/participant-labels-Cf3qP3GB.js","assets/ActInspectorPanel-CE6s6GYv.css","assets/WorkspaceToolbar-CXYi_sMD.js","assets/WorkspaceToolbar-CiQvVocC.css","assets/index-DMS12-Q2.js","assets/CanvasWindowFrame-ziJeVfHG.js","assets/TodoDock-DcVf7zQG.js","assets/chat-message-visibility-YwJ-AQno.js","assets/MarkdownRenderer-Cz8A4AgP.js","assets/MarkdownEditorFrame-Dwpgs2GX.js","assets/MarkdownEditorFrame-DVecIZpZ.css","assets/CanvasTerminalFrame-DxKbexK6.js","assets/CanvasTerminalFrame-BC-79q9U.css","assets/CanvasTrackingFrame-DumxhNwg.js","assets/CanvasTrackingFrame-G4rRrfne.css","assets/ActFrame-BYOBkLYW.js","assets/ActFrame-C_WEt6bv.css","assets/index-BMY4hrBP.js","assets/AssistantChat-BOyW0K79.js","assets/AssistantChat-DoVmHvMJ.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
var Me=Object.defineProperty;var Pe=(e,r,t)=>r in e?Me(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var Te=(e,r,t)=>Pe(e,typeof r!="symbol"?r+"":r,t);import{R as React,c as getAugmentedNamespace,r as reactExports,j as jsxRuntimeExports,d as clientExports}from"./react-vendor-DzpMUNDT.js";import{Q as QueryClient,a as QueryClientProvider}from"./query-vendor-_taqgrbn.js";import{u as useReactFlow,M as MarkerType,a as useNodesState,B as BaseEdge,E as EdgeLabelRenderer,i as index,C as ConnectionMode,b as Background,R as ReactFlowProvider}from"./flow-vendor-C868rU-6.js";import{u as useDroppable,D as DndContext,a as DragOverlay}from"./dnd-vendor-CIAZE2P2.js";import{C as Check,X,P as Pencil,T as Trash2,a as Plus,b as ChevronRight,W as Workflow,E as EyeOff,c as Eye,A as Archive,d as PenLine,M as MessageSquare,e as Ellipsis,F as Folder,L as LayoutGrid,f as Maximize2,g as Minimize,h as Maximize,i as Package,S as Server,j as Cpu,Z as Zap,H as Hexagon,k as CircleAlert}from"./icon-vendor-I2JVIi1s.js";import{H as HighlightJS,t as typescript,j as javascript,p as python,c as css,a as json$1,x as xml,b as bash,m as markdown,y as yaml,s as sql,g as go,r as rust,d as java,e as csharp,f as diff}from"./markdown-vendor-DnTJ9hmR.js";import"./terminal-vendor-D0xRnmbI.js";(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(s){if(s.ep)return;s.ep=!0;const i=t(s);fetch(s.href,i)}})();const scriptRel="modulepreload",assetsURL=function(e){return"/"+e},seen={},__vitePreload=function(r,t,n){let s=Promise.resolve();if(t&&t.length>0){let o=function(d){return Promise.all(d.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),l=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));s=o(t.map(d=>{if(d=assetsURL(d),d in seen)return;seen[d]=!0;const u=d.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${f}`))return;const x=document.createElement("link");if(x.rel=u?"stylesheet":scriptRel,u||(x.as="script"),x.crossOrigin="",x.href=d,l&&x.setAttribute("nonce",l),document.head.appendChild(x),u)return new Promise((h,g)=>{x.addEventListener("load",h),x.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${d}`)))})}))}function i(o){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=o,window.dispatchEvent(c),!c.defaultPrevented)throw o}return s.then(o=>{for(const c of o||[])c.status==="rejected"&&i(c.reason);return r().catch(i)})},createStoreImpl=e=>{let r;const t=new Set,n=(d,u)=>{const f=typeof d=="function"?d(r):d;if(!Object.is(f,r)){const x=r;r=u??(typeof f!="object"||f===null)?f:Object.assign({},r,f),t.forEach(h=>h(r,x))}},s=()=>r,c={setState:n,getState:s,getInitialState:()=>l,subscribe:d=>(t.add(d),()=>t.delete(d))},l=r=e(n,s,c);return c},createStore=(e=>e?createStoreImpl(e):createStoreImpl),identity=e=>e;function useStore(e,r=identity){const t=React.useSyncExternalStore(e.subscribe,React.useCallback(()=>r(e.getState()),[e,r]),React.useCallback(()=>r(e.getInitialState()),[e,r]));return React.useDebugValue(t),t}const createImpl=e=>{const r=createStore(e),t=n=>useStore(r,n);return Object.assign(t,r),t},create=(e=>createImpl),createPerformerRelationSlice=(e,r)=>({});class StudioApiError extends Error{constructor(t,n=500){super(t.error||"Request failed.");Te(this,"code");Te(this,"action");Te(this,"detail");Te(this,"retryable");Te(this,"status");Te(this,"providerId");Te(this,"modelId");this.name="StudioApiError",this.code=t.code,this.action=t.action,this.detail=t.detail,this.retryable=t.retryable,this.status=t.status||n,this.providerId=t.providerId,this.modelId=t.modelId}}function coerceStudioApiError(e){return e instanceof StudioApiError?e:e instanceof Error?new StudioApiError({error:e.message},500):new StudioApiError({error:String(e||"Request failed.")},500)}function formatStudioApiErrorMessage(e,r=!0){const t=coerceStudioApiError(e);return`${r?"⚠️ ":""}${t.message}`}function formatStudioApiErrorComment(e){const r=coerceStudioApiError(e),t=[`// ${r.message}`];return r.code==="unknown"&&r.detail&&r.detail!==r.message&&t.push(`// Detail: ${r.detail}`),t.join(`
|
|
3
|
+
`)}const API_BASE="".replace(/\/+$/,"");let workingDirContext=null;function resolveWorkingDirContext(){return workingDirContext}function withWorkingDirQuery(e,r){if(!r)return e;const t=e.includes("?")?"&":"?";return`${e}${t}workingDir=${encodeURIComponent(r)}`}function setApiWorkingDirContext(e){workingDirContext=e!=null&&e.trim()?e.trim():null}function absolutizeWorkspacePath(e,r){return!e||e.startsWith("/")||e.startsWith("file://")||!r?e:`${r.replace(/\/+$/,"")}/${e.replace(/^\.?\//,"")}`}function withApiBase(e){return`${API_BASE}${withWorkingDirQuery(e,resolveWorkingDirContext())}`}async function fetchJSON(e,r){const t=resolveWorkingDirContext(),n=await fetch(withApiBase(e),{...r,headers:{"Content-Type":"application/json",...t?{"X-DOT-Working-Dir":t}:{},...r==null?void 0:r.headers}});if(!n.ok){const s=await n.text().catch(()=>"");let i={error:s||n.statusText};if(s)try{const o=JSON.parse(s);i=o&&typeof o=="object"?o:{error:s}}catch{i={error:s}}throw new StudioApiError(i,n.status)}return n.json()}function postJSON(e,r){return fetchJSON(e,{method:"POST",...r!==void 0?{body:JSON.stringify(r)}:{}})}function putJSON(e,r){return fetchJSON(e,{method:"PUT",...r!==void 0?{body:JSON.stringify(r)}:{}})}function patchJSON(e,r){return fetchJSON(e,{method:"PATCH",...r!==void 0?{body:JSON.stringify(r)}:{}})}function deleteJSON(e,r){return fetchJSON(e,{method:"DELETE",...r!==void 0?{body:JSON.stringify(r)}:{}})}function createApiEventSource(e){return new EventSource(withApiBase(e))}function normalizeWorkspaceFileEntry(e){return typeof e=="string"?{name:e.split("/").pop()||e,path:e,absolute:absolutizeWorkspacePath(e,resolveWorkingDirContext()),type:"file"}:{name:e.name,path:e.path,absolute:absolutizeWorkspacePath(e.absolute||e.path,resolveWorkingDirContext()),type:e.type}}const chatApi={createSession:(e,r,t,n,s)=>postJSON("/api/chat/sessions",{performerId:e,performerName:r,configHash:t,executionMode:n,actId:s}),deleteSession:e=>deleteJSON(`/api/chat/sessions/${e}`),updateSession:(e,r)=>putJSON(`/api/chat/sessions/${e}`,{title:r}),send:(e,r)=>postJSON(`/api/chat/sessions/${e}/send`,r),abort:e=>postJSON(`/api/chat/sessions/${e}/abort`),messages:(e,r)=>{const t=new URLSearchParams;typeof(r==null?void 0:r.limit)=="number"&&Number.isFinite(r.limit)&&r.limit>0&&t.set("limit",String(r.limit)),typeof(r==null?void 0:r.before)=="string"&&r.before.trim()&&t.set("before",r.before.trim());const n=t.toString();return fetchJSON(`/api/chat/sessions/${e}/messages${n?`?${n}`:""}`)},diff:e=>fetchJSON(`/api/chat/sessions/${e}/diff`),share:e=>postJSON(`/api/chat/sessions/${e}/share`),summarize:(e,r)=>postJSON(`/api/chat/sessions/${e}/summarize`,r||{}),revert:(e,r,t)=>postJSON(`/api/chat/sessions/${e}/revert`,{messageId:r,partId:t}),unrevert:e=>postJSON(`/api/chat/sessions/${e}/unrevert`),list:()=>fetchJSON("/api/chat/sessions"),events:()=>createApiEventSource("/api/chat/events"),resolveSession:e=>fetchJSON(`/api/chat/sessions/${e}/resolve`),respondPermission:(e,r,t)=>postJSON(`/api/chat/sessions/${e}/permission/${r}/respond`,{response:t}),listPendingPermissions:()=>fetchJSON("/api/chat/permissions"),respondQuestion:(e,r)=>postJSON(`/api/chat/questions/${e}/respond`,{answers:r}),rejectQuestion:e=>postJSON(`/api/chat/questions/${e}/reject`)},dotApi={status:()=>fetchJSON("/api/dot/status"),authUser:()=>fetchJSON("/api/dot/auth-user"),login:(e=!1)=>postJSON("/api/dot/login",{acknowledgedTos:e}),logout:()=>postJSON("/api/dot/logout"),init:()=>postJSON("/api/dot/init"),performer:e=>fetchJSON(`/api/dot/performers/${e}`),agents:()=>fetchJSON("/api/dot/agents"),updateAgents:e=>putJSON("/api/dot/agents",e),install:(e,r,t,n)=>postJSON("/api/dot/install",{urn:e,localName:r,force:t,scope:n}),saveLocalAsset:(e,r,t,n)=>putJSON("/api/dot/assets/local",{kind:e,slug:r,payload:t,author:n}),publishAsset:(e,r,t,n,s=!1)=>postJSON("/api/dot/assets/publish",{kind:e,slug:r,payload:t,tags:n,acknowledgedTos:s}),search:(e,r,t)=>fetchJSON(`/api/dot/search?q=${encodeURIComponent(e)}${r?`&kind=${r}`:""}${t?`&limit=${t}`:""}`),validate:e=>postJSON("/api/dot/validate",e),uninstallAsset:(e,r,t=!1)=>deleteJSON("/api/dot/assets/local",{kind:e,urn:r,cascade:t}),previewUninstall:(e,r)=>postJSON("/api/dot/assets/uninstall-preview",{kind:e,urn:r}),addFromGitHub:(e,r)=>postJSON("/api/dot/add",{source:e,scope:r})},opencodeApi={health:()=>fetchJSON("/api/opencode/health"),restart:()=>postJSON("/api/opencode/restart"),lsp:{status:()=>fetchJSON("/api/lsp/status")},mcp:{list:()=>fetchJSON("/api/mcp/servers"),add:(e,r)=>postJSON("/api/mcp/add",{name:e,config:r}),authStart:e=>postJSON(`/api/mcp/${e}/auth/start`),authCallback:(e,r)=>postJSON(`/api/mcp/${e}/auth/callback`,{code:r}),authenticate:e=>postJSON(`/api/mcp/${e}/auth/authenticate`),clearAuth:e=>deleteJSON(`/api/mcp/${e}/auth`),connect:e=>postJSON(`/api/mcp/${e}/connect`),disconnect:e=>postJSON(`/api/mcp/${e}/disconnect`)},models:{list:()=>fetchJSON("/api/models")},agents:{list:()=>fetchJSON("/api/agents")},tools:{list:()=>fetchJSON("/api/tools"),listForModel:(e,r)=>fetchJSON(`/api/tools/${e}/${r}`)},runtime:{resolveTools:e=>fetchJSON("/api/runtime/tools",{method:"POST",body:JSON.stringify(e)})},adapter:{list:e=>fetchJSON(`/api/adapter/views${e?`?performerId=${encodeURIComponent(e)}`:""}`),action:e=>postJSON("/api/adapter/action",e),events:()=>createApiEventSource("/api/adapter/events")},config:{get:()=>fetchJSON("/api/config"),getProject:()=>fetchJSON("/api/config/project"),update:e=>putJSON("/api/config",e)},providers:{list:()=>fetchJSON("/api/providers")},provider:{auth:()=>fetchJSON("/api/provider/auth"),oauthAuthorize:(e,r)=>postJSON(`/api/provider/${e}/oauth/authorize`,{method:r}),oauthCallback:(e,r,t)=>postJSON(`/api/provider/${e}/oauth/callback`,t?{method:r,code:t}:{method:r}),setAuth:(e,r)=>putJSON(`/api/provider/${e}/auth`,r),clearAuth:e=>deleteJSON(`/api/provider/${e}/auth`)},file:{list:(e=".")=>fetchJSON(`/api/file/list?path=${encodeURIComponent(e)}`),read:e=>fetchJSON(`/api/file/read?path=${encodeURIComponent(e)}`),status:()=>fetchJSON("/api/file/status")},find:{text:e=>fetchJSON(`/api/find/text?pattern=${encodeURIComponent(e)}`),files:e=>fetchJSON(`/api/find/files?pattern=${encodeURIComponent(e)}`),symbols:e=>fetchJSON(`/api/find/symbols?pattern=${encodeURIComponent(e)}`)},vcs:{get:()=>fetchJSON("/api/vcs")}},workspaceApi={findFiles:async e=>{const r=e.trim();return r?(await fetchJSON(`/api/find/files?pattern=${encodeURIComponent(r)}`)).map(n=>normalizeWorkspaceFileEntry(n)).filter(n=>n.type==="file"):(await fetchJSON(`/api/file/list?path=${encodeURIComponent(".")}`)).map(s=>normalizeWorkspaceFileEntry(s)).filter(s=>s.type==="file").map(s=>({name:s.name,path:s.path,absolute:absolutizeWorkspacePath(s.absolute||s.path,resolveWorkingDirContext()),type:s.type}))}},api={health:()=>fetchJSON("/api/health"),opencodeHealth:opencodeApi.health,opencodeRestart:opencodeApi.restart,assets:{list:e=>fetchJSON(`/api/assets/${e}`),get:(e,r,t)=>fetchJSON(`/api/assets/${e}/${r}?path=${encodeURIComponent(t)}`),getRegistry:(e,r,t)=>fetchJSON(`/api/assets/registry/${e}/${r}?path=${encodeURIComponent(t)}`)},workspaces:{list:(e=!1)=>fetchJSON(`/api/workspaces${e?"?includeHidden=1":""}`),get:e=>fetchJSON(`/api/workspaces/${e}`),save:e=>putJSON("/api/workspaces",e),setHidden:(e,r)=>patchJSON(`/api/workspaces/${e}`,{hiddenFromList:r}),delete:e=>deleteJSON(`/api/workspaces/${e}`)},drafts:{list:e=>fetchJSON(`/api/drafts${e?`?kind=${e}`:""}`).then(r=>r.drafts),get:(e,r)=>fetchJSON(`/api/drafts/${e}/${r}`).then(t=>t.draft),create:e=>postJSON("/api/drafts",e).then(r=>r.draft),update:(e,r,t)=>putJSON(`/api/drafts/${e}/${r}`,t).then(n=>n.draft),delete:(e,r,t=!1)=>deleteJSON(`/api/drafts/${e}/${r}`,{cascade:t}),previewDelete:(e,r)=>postJSON(`/api/drafts/delete-preview/${e}/${r}`,{}),danceBundle:{tree:e=>fetchJSON(`/api/drafts/dance/${e}/tree`).then(r=>r.tree),readFile:(e,r)=>fetchJSON(`/api/drafts/dance/${e}/file?path=${encodeURIComponent(r)}`),writeFile:(e,r,t)=>putJSON(`/api/drafts/dance/${e}/file`,{path:r,content:t}),createFile:(e,r,t)=>postJSON(`/api/drafts/dance/${e}/files`,{path:r,isDirectory:t}),deleteFile:(e,r)=>deleteJSON(`/api/drafts/dance/${e}/file`,{path:r})}},compile:(e,r,t,n,s,i,o,c,l=!1,d="auto",u)=>postJSON("/api/compile",{performerId:e||void 0,performerName:r||void 0,talRef:t,danceRefs:n,model:s,modelVariant:i,agentId:o,mcpServerNames:c,planMode:l,danceDeliveryMode:d,requestTargets:u}),chat:chatApi,actRuntime:{createThread:(e,r)=>postJSON(`/api/act/${e}/threads`,r?{actDefinition:r}:void 0),syncDefinition:(e,r)=>patchJSON(`/api/act/${e}/runtime-definition`,{actDefinition:r}),listThreads:e=>fetchJSON(`/api/act/${e}/threads`),getThread:(e,r)=>fetchJSON(`/api/act/${e}/thread/${r}`),events:(e,r,t=50)=>fetchJSON(`/api/act/${e}/thread/${r}/events?count=${t}`),deleteThread:(e,r)=>deleteJSON(`/api/act/${e}/thread/${r}`),readBoard:(e,r,t)=>fetchJSON(`/api/act/${e}/thread/${r}/read-board${t?`?key=${encodeURIComponent(t)}`:""}`)},safe:{summary:(e,r)=>fetchJSON(`/api/safe/${e}/${encodeURIComponent(r)}`),apply:(e,r)=>postJSON(`/api/safe/${e}/${encodeURIComponent(r)}/apply`),discardFile:(e,r,t)=>postJSON(`/api/safe/${e}/${encodeURIComponent(r)}/discard`,{filePath:t}),discardAll:(e,r)=>postJSON(`/api/safe/${e}/${encodeURIComponent(r)}/discard-all`),undoLastApply:(e,r)=>postJSON(`/api/safe/${e}/${encodeURIComponent(r)}/undo-last-apply`)},lsp:opencodeApi.lsp,mcp:opencodeApi.mcp,models:opencodeApi.models,agents:opencodeApi.agents,tools:opencodeApi.tools,runtime:opencodeApi.runtime,adapter:opencodeApi.adapter,config:opencodeApi.config,providers:opencodeApi.providers,provider:opencodeApi.provider,file:opencodeApi.file,find:opencodeApi.find,vcs:opencodeApi.vcs,workspace:workspaceApi,studio:{getConfig:()=>fetchJSON("/api/studio/config"),updateConfig:e=>putJSON("/api/studio/config",e),activate:e=>postJSON("/api/studio/activate",{workingDir:e}),openPath:e=>postJSON("/api/studio/open-path",{path:e}),pickDirectory:()=>fetchJSON("/api/studio/pick-directory")},dot:dotApi};let nanoid=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((r,t)=>(t&=63,t<36?r+=t.toString(36):t<62?r+=(t-26).toString(36).toUpperCase():t>62?r+="-":r+="_",r),"");const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$0=getAugmentedNamespace(__viteBrowserExternal$1);var kindOf,hasRequiredKindOf;function requireKindOf(){if(hasRequiredKindOf)return kindOf;hasRequiredKindOf=1;var e=Object.prototype.toString;kindOf=function(f){if(f===void 0)return"undefined";if(f===null)return"null";var x=typeof f;if(x==="boolean")return"boolean";if(x==="string")return"string";if(x==="number")return"number";if(x==="symbol")return"symbol";if(x==="function")return o(f)?"generatorfunction":"function";if(t(f))return"array";if(d(f))return"buffer";if(l(f))return"arguments";if(s(f))return"date";if(n(f))return"error";if(i(f))return"regexp";switch(r(f)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(c(f))return"generator";switch(x=e.call(f),x){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return x.slice(8,-1).toLowerCase().replace(/\s/g,"")};function r(u){return typeof u.constructor=="function"?u.constructor.name:null}function t(u){return Array.isArray?Array.isArray(u):u instanceof Array}function n(u){return u instanceof Error||typeof u.message=="string"&&u.constructor&&typeof u.constructor.stackTraceLimit=="number"}function s(u){return u instanceof Date?!0:typeof u.toDateString=="function"&&typeof u.getDate=="function"&&typeof u.setDate=="function"}function i(u){return u instanceof RegExp?!0:typeof u.flags=="string"&&typeof u.ignoreCase=="boolean"&&typeof u.multiline=="boolean"&&typeof u.global=="boolean"}function o(u,f){return r(u)==="GeneratorFunction"}function c(u){return typeof u.throw=="function"&&typeof u.return=="function"&&typeof u.next=="function"}function l(u){try{if(typeof u.length=="number"&&typeof u.callee=="function")return!0}catch(f){if(f.message.indexOf("callee")!==-1)return!0}return!1}function d(u){return u.constructor&&typeof u.constructor.isBuffer=="function"?u.constructor.isBuffer(u):!1}return kindOf}/*!
|
|
4
|
+
* is-extendable <https://github.com/jonschlinkert/is-extendable>
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2015, Jon Schlinkert.
|
|
7
|
+
* Licensed under the MIT License.
|
|
8
|
+
*/var isExtendable,hasRequiredIsExtendable;function requireIsExtendable(){return hasRequiredIsExtendable||(hasRequiredIsExtendable=1,isExtendable=function(r){return typeof r<"u"&&r!==null&&(typeof r=="object"||typeof r=="function")}),isExtendable}var extendShallow,hasRequiredExtendShallow;function requireExtendShallow(){if(hasRequiredExtendShallow)return extendShallow;hasRequiredExtendShallow=1;var e=requireIsExtendable();extendShallow=function(s){e(s)||(s={});for(var i=arguments.length,o=1;o<i;o++){var c=arguments[o];e(c)&&r(s,c)}return s};function r(n,s){for(var i in s)t(s,i)&&(n[i]=s[i])}function t(n,s){return Object.prototype.hasOwnProperty.call(n,s)}return extendShallow}var sectionMatter,hasRequiredSectionMatter;function requireSectionMatter(){if(hasRequiredSectionMatter)return sectionMatter;hasRequiredSectionMatter=1;var e=requireKindOf(),r=requireExtendShallow();sectionMatter=function(l,d){typeof d=="function"&&(d={parse:d});var u=n(l),f={section_delimiter:"---",parse:o},x=r({},f,d),h=x.section_delimiter,g=u.content.split(/\r?\n/),A=null,v=i(),S=[],y=[];function k(U){u.content=U,A=[],S=[]}function R(U){y.length&&(v.key=s(y[0],h),v.content=U,x.parse(v,A),A.push(v),v=i(),S=[],y=[])}for(var T=0;T<g.length;T++){var C=g[T],b=y.length,B=C.trim();if(t(B,h)){if(B.length===3&&T!==0){if(b===0||b===2){S.push(C);continue}y.push(B),v.data=S.join(`
|
|
9
|
+
`),S=[];continue}A===null&&k(S.join(`
|
|
10
|
+
`)),b===2&&R(S.join(`
|
|
11
|
+
`)),y.push(B);continue}S.push(C)}return A===null?k(S.join(`
|
|
12
|
+
`)):R(S.join(`
|
|
13
|
+
`)),u.sections=A,u};function t(l,d){return!(l.slice(0,d.length)!==d||l.charAt(d.length+1)===d.slice(-1))}function n(l){if(e(l)!=="object"&&(l={content:l}),typeof l.content!="string"&&!c(l.content))throw new TypeError("expected a buffer or string");return l.content=l.content.toString(),l.sections=[],l}function s(l,d){return l?l.slice(d.length).trim():""}function i(){return{key:"",data:"",content:""}}function o(l){return l}function c(l){return l&&l.constructor&&typeof l.constructor.isBuffer=="function"?l.constructor.isBuffer(l):!1}return sectionMatter}var engines={exports:{}},jsYaml$1={},loader={},common={},hasRequiredCommon;function requireCommon(){if(hasRequiredCommon)return common;hasRequiredCommon=1;function e(o){return typeof o>"u"||o===null}function r(o){return typeof o=="object"&&o!==null}function t(o){return Array.isArray(o)?o:e(o)?[]:[o]}function n(o,c){var l,d,u,f;if(c)for(f=Object.keys(c),l=0,d=f.length;l<d;l+=1)u=f[l],o[u]=c[u];return o}function s(o,c){var l="",d;for(d=0;d<c;d+=1)l+=o;return l}function i(o){return o===0&&Number.NEGATIVE_INFINITY===1/o}return common.isNothing=e,common.isObject=r,common.toArray=t,common.repeat=s,common.isNegativeZero=i,common.extend=n,common}var exception,hasRequiredException;function requireException(){if(hasRequiredException)return exception;hasRequiredException=1;function e(r,t){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e.prototype.toString=function(t){var n=this.name+": ";return n+=this.reason||"(unknown reason)",!t&&this.mark&&(n+=" "+this.mark.toString()),n},exception=e,exception}var mark,hasRequiredMark;function requireMark(){if(hasRequiredMark)return mark;hasRequiredMark=1;var e=requireCommon();function r(t,n,s,i,o){this.name=t,this.buffer=n,this.position=s,this.line=i,this.column=o}return r.prototype.getSnippet=function(n,s){var i,o,c,l,d;if(!this.buffer)return null;for(n=n||4,s=s||75,i="",o=this.position;o>0&&`\0\r
|
|
14
|
+
\u2028\u2029`.indexOf(this.buffer.charAt(o-1))===-1;)if(o-=1,this.position-o>s/2-1){i=" ... ",o+=5;break}for(c="",l=this.position;l<this.buffer.length&&`\0\r
|
|
15
|
+
\u2028\u2029`.indexOf(this.buffer.charAt(l))===-1;)if(l+=1,l-this.position>s/2-1){c=" ... ",l-=5;break}return d=this.buffer.slice(o,l),e.repeat(" ",n)+i+d+c+`
|
|
16
|
+
`+e.repeat(" ",n+this.position-o+i.length)+"^"},r.prototype.toString=function(n){var s,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),n||(s=this.getSnippet(),s&&(i+=`:
|
|
17
|
+
`+s)),i},mark=r,mark}var type,hasRequiredType;function requireType(){if(hasRequiredType)return type;hasRequiredType=1;var e=requireException(),r=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],t=["scalar","sequence","mapping"];function n(i){var o={};return i!==null&&Object.keys(i).forEach(function(c){i[c].forEach(function(l){o[String(l)]=c})}),o}function s(i,o){if(o=o||{},Object.keys(o).forEach(function(c){if(r.indexOf(c)===-1)throw new e('Unknown option "'+c+'" is met in definition of "'+i+'" YAML type.')}),this.tag=i,this.kind=o.kind||null,this.resolve=o.resolve||function(){return!0},this.construct=o.construct||function(c){return c},this.instanceOf=o.instanceOf||null,this.predicate=o.predicate||null,this.represent=o.represent||null,this.defaultStyle=o.defaultStyle||null,this.styleAliases=n(o.styleAliases||null),t.indexOf(this.kind)===-1)throw new e('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}return type=s,type}var schema,hasRequiredSchema;function requireSchema(){if(hasRequiredSchema)return schema;hasRequiredSchema=1;var e=requireCommon(),r=requireException(),t=requireType();function n(o,c,l){var d=[];return o.include.forEach(function(u){l=n(u,c,l)}),o[c].forEach(function(u){l.forEach(function(f,x){f.tag===u.tag&&f.kind===u.kind&&d.push(x)}),l.push(u)}),l.filter(function(u,f){return d.indexOf(f)===-1})}function s(){var o={scalar:{},sequence:{},mapping:{},fallback:{}},c,l;function d(u){o[u.kind][u.tag]=o.fallback[u.tag]=u}for(c=0,l=arguments.length;c<l;c+=1)arguments[c].forEach(d);return o}function i(o){this.include=o.include||[],this.implicit=o.implicit||[],this.explicit=o.explicit||[],this.implicit.forEach(function(c){if(c.loadKind&&c.loadKind!=="scalar")throw new r("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=n(this,"implicit",[]),this.compiledExplicit=n(this,"explicit",[]),this.compiledTypeMap=s(this.compiledImplicit,this.compiledExplicit)}return i.DEFAULT=null,i.create=function(){var c,l;switch(arguments.length){case 1:c=i.DEFAULT,l=arguments[0];break;case 2:c=arguments[0],l=arguments[1];break;default:throw new r("Wrong number of arguments for Schema.create function")}if(c=e.toArray(c),l=e.toArray(l),!c.every(function(d){return d instanceof i}))throw new r("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!l.every(function(d){return d instanceof t}))throw new r("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new i({include:c,explicit:l})},schema=i,schema}var str,hasRequiredStr;function requireStr(){if(hasRequiredStr)return str;hasRequiredStr=1;var e=requireType();return str=new e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}}),str}var seq,hasRequiredSeq;function requireSeq(){if(hasRequiredSeq)return seq;hasRequiredSeq=1;var e=requireType();return seq=new e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}}),seq}var map,hasRequiredMap;function requireMap(){if(hasRequiredMap)return map;hasRequiredMap=1;var e=requireType();return map=new e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}}),map}var failsafe,hasRequiredFailsafe;function requireFailsafe(){if(hasRequiredFailsafe)return failsafe;hasRequiredFailsafe=1;var e=requireSchema();return failsafe=new e({explicit:[requireStr(),requireSeq(),requireMap()]}),failsafe}var _null,hasRequired_null;function require_null(){if(hasRequired_null)return _null;hasRequired_null=1;var e=requireType();function r(s){if(s===null)return!0;var i=s.length;return i===1&&s==="~"||i===4&&(s==="null"||s==="Null"||s==="NULL")}function t(){return null}function n(s){return s===null}return _null=new e("tag:yaml.org,2002:null",{kind:"scalar",resolve:r,construct:t,predicate:n,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"}),_null}var bool,hasRequiredBool;function requireBool(){if(hasRequiredBool)return bool;hasRequiredBool=1;var e=requireType();function r(s){if(s===null)return!1;var i=s.length;return i===4&&(s==="true"||s==="True"||s==="TRUE")||i===5&&(s==="false"||s==="False"||s==="FALSE")}function t(s){return s==="true"||s==="True"||s==="TRUE"}function n(s){return Object.prototype.toString.call(s)==="[object Boolean]"}return bool=new e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:r,construct:t,predicate:n,represent:{lowercase:function(s){return s?"true":"false"},uppercase:function(s){return s?"TRUE":"FALSE"},camelcase:function(s){return s?"True":"False"}},defaultStyle:"lowercase"}),bool}var int,hasRequiredInt;function requireInt(){if(hasRequiredInt)return int;hasRequiredInt=1;var e=requireCommon(),r=requireType();function t(l){return 48<=l&&l<=57||65<=l&&l<=70||97<=l&&l<=102}function n(l){return 48<=l&&l<=55}function s(l){return 48<=l&&l<=57}function i(l){if(l===null)return!1;var d=l.length,u=0,f=!1,x;if(!d)return!1;if(x=l[u],(x==="-"||x==="+")&&(x=l[++u]),x==="0"){if(u+1===d)return!0;if(x=l[++u],x==="b"){for(u++;u<d;u++)if(x=l[u],x!=="_"){if(x!=="0"&&x!=="1")return!1;f=!0}return f&&x!=="_"}if(x==="x"){for(u++;u<d;u++)if(x=l[u],x!=="_"){if(!t(l.charCodeAt(u)))return!1;f=!0}return f&&x!=="_"}for(;u<d;u++)if(x=l[u],x!=="_"){if(!n(l.charCodeAt(u)))return!1;f=!0}return f&&x!=="_"}if(x==="_")return!1;for(;u<d;u++)if(x=l[u],x!=="_"){if(x===":")break;if(!s(l.charCodeAt(u)))return!1;f=!0}return!f||x==="_"?!1:x!==":"?!0:/^(:[0-5]?[0-9])+$/.test(l.slice(u))}function o(l){var d=l,u=1,f,x,h=[];return d.indexOf("_")!==-1&&(d=d.replace(/_/g,"")),f=d[0],(f==="-"||f==="+")&&(f==="-"&&(u=-1),d=d.slice(1),f=d[0]),d==="0"?0:f==="0"?d[1]==="b"?u*parseInt(d.slice(2),2):d[1]==="x"?u*parseInt(d,16):u*parseInt(d,8):d.indexOf(":")!==-1?(d.split(":").forEach(function(g){h.unshift(parseInt(g,10))}),d=0,x=1,h.forEach(function(g){d+=g*x,x*=60}),u*d):u*parseInt(d,10)}function c(l){return Object.prototype.toString.call(l)==="[object Number]"&&l%1===0&&!e.isNegativeZero(l)}return int=new r("tag:yaml.org,2002:int",{kind:"scalar",resolve:i,construct:o,predicate:c,represent:{binary:function(l){return l>=0?"0b"+l.toString(2):"-0b"+l.toString(2).slice(1)},octal:function(l){return l>=0?"0"+l.toString(8):"-0"+l.toString(8).slice(1)},decimal:function(l){return l.toString(10)},hexadecimal:function(l){return l>=0?"0x"+l.toString(16).toUpperCase():"-0x"+l.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),int}var float,hasRequiredFloat;function requireFloat(){if(hasRequiredFloat)return float;hasRequiredFloat=1;var e=requireCommon(),r=requireType(),t=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function n(l){return!(l===null||!t.test(l)||l[l.length-1]==="_")}function s(l){var d,u,f,x;return d=l.replace(/_/g,"").toLowerCase(),u=d[0]==="-"?-1:1,x=[],"+-".indexOf(d[0])>=0&&(d=d.slice(1)),d===".inf"?u===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:d===".nan"?NaN:d.indexOf(":")>=0?(d.split(":").forEach(function(h){x.unshift(parseFloat(h,10))}),d=0,f=1,x.forEach(function(h){d+=h*f,f*=60}),u*d):u*parseFloat(d,10)}var i=/^[-+]?[0-9]+e/;function o(l,d){var u;if(isNaN(l))switch(d){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===l)switch(d){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===l)switch(d){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(e.isNegativeZero(l))return"-0.0";return u=l.toString(10),i.test(u)?u.replace("e",".e"):u}function c(l){return Object.prototype.toString.call(l)==="[object Number]"&&(l%1!==0||e.isNegativeZero(l))}return float=new r("tag:yaml.org,2002:float",{kind:"scalar",resolve:n,construct:s,predicate:c,represent:o,defaultStyle:"lowercase"}),float}var json,hasRequiredJson;function requireJson(){if(hasRequiredJson)return json;hasRequiredJson=1;var e=requireSchema();return json=new e({include:[requireFailsafe()],implicit:[require_null(),requireBool(),requireInt(),requireFloat()]}),json}var core,hasRequiredCore;function requireCore(){if(hasRequiredCore)return core;hasRequiredCore=1;var e=requireSchema();return core=new e({include:[requireJson()]}),core}var timestamp,hasRequiredTimestamp;function requireTimestamp(){if(hasRequiredTimestamp)return timestamp;hasRequiredTimestamp=1;var e=requireType(),r=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),t=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function n(o){return o===null?!1:r.exec(o)!==null||t.exec(o)!==null}function s(o){var c,l,d,u,f,x,h,g=0,A=null,v,S,y;if(c=r.exec(o),c===null&&(c=t.exec(o)),c===null)throw new Error("Date resolve error");if(l=+c[1],d=+c[2]-1,u=+c[3],!c[4])return new Date(Date.UTC(l,d,u));if(f=+c[4],x=+c[5],h=+c[6],c[7]){for(g=c[7].slice(0,3);g.length<3;)g+="0";g=+g}return c[9]&&(v=+c[10],S=+(c[11]||0),A=(v*60+S)*6e4,c[9]==="-"&&(A=-A)),y=new Date(Date.UTC(l,d,u,f,x,h,g)),A&&y.setTime(y.getTime()-A),y}function i(o){return o.toISOString()}return timestamp=new e("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:n,construct:s,instanceOf:Date,represent:i}),timestamp}var merge,hasRequiredMerge;function requireMerge(){if(hasRequiredMerge)return merge;hasRequiredMerge=1;var e=requireType();function r(t){return t==="<<"||t===null}return merge=new e("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r}),merge}function commonjsRequire(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var binary,hasRequiredBinary;function requireBinary(){if(hasRequiredBinary)return binary;hasRequiredBinary=1;var e;try{var r=commonjsRequire;e=r("buffer").Buffer}catch{}var t=requireType(),n=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
18
|
+
\r`;function s(l){if(l===null)return!1;var d,u,f=0,x=l.length,h=n;for(u=0;u<x;u++)if(d=h.indexOf(l.charAt(u)),!(d>64)){if(d<0)return!1;f+=6}return f%8===0}function i(l){var d,u,f=l.replace(/[\r\n=]/g,""),x=f.length,h=n,g=0,A=[];for(d=0;d<x;d++)d%4===0&&d&&(A.push(g>>16&255),A.push(g>>8&255),A.push(g&255)),g=g<<6|h.indexOf(f.charAt(d));return u=x%4*6,u===0?(A.push(g>>16&255),A.push(g>>8&255),A.push(g&255)):u===18?(A.push(g>>10&255),A.push(g>>2&255)):u===12&&A.push(g>>4&255),e?e.from?e.from(A):new e(A):A}function o(l){var d="",u=0,f,x,h=l.length,g=n;for(f=0;f<h;f++)f%3===0&&f&&(d+=g[u>>18&63],d+=g[u>>12&63],d+=g[u>>6&63],d+=g[u&63]),u=(u<<8)+l[f];return x=h%3,x===0?(d+=g[u>>18&63],d+=g[u>>12&63],d+=g[u>>6&63],d+=g[u&63]):x===2?(d+=g[u>>10&63],d+=g[u>>4&63],d+=g[u<<2&63],d+=g[64]):x===1&&(d+=g[u>>2&63],d+=g[u<<4&63],d+=g[64],d+=g[64]),d}function c(l){return e&&e.isBuffer(l)}return binary=new t("tag:yaml.org,2002:binary",{kind:"scalar",resolve:s,construct:i,predicate:c,represent:o}),binary}var omap,hasRequiredOmap;function requireOmap(){if(hasRequiredOmap)return omap;hasRequiredOmap=1;var e=requireType(),r=Object.prototype.hasOwnProperty,t=Object.prototype.toString;function n(i){if(i===null)return!0;var o=[],c,l,d,u,f,x=i;for(c=0,l=x.length;c<l;c+=1){if(d=x[c],f=!1,t.call(d)!=="[object Object]")return!1;for(u in d)if(r.call(d,u))if(!f)f=!0;else return!1;if(!f)return!1;if(o.indexOf(u)===-1)o.push(u);else return!1}return!0}function s(i){return i!==null?i:[]}return omap=new e("tag:yaml.org,2002:omap",{kind:"sequence",resolve:n,construct:s}),omap}var pairs,hasRequiredPairs;function requirePairs(){if(hasRequiredPairs)return pairs;hasRequiredPairs=1;var e=requireType(),r=Object.prototype.toString;function t(s){if(s===null)return!0;var i,o,c,l,d,u=s;for(d=new Array(u.length),i=0,o=u.length;i<o;i+=1){if(c=u[i],r.call(c)!=="[object Object]"||(l=Object.keys(c),l.length!==1))return!1;d[i]=[l[0],c[l[0]]]}return!0}function n(s){if(s===null)return[];var i,o,c,l,d,u=s;for(d=new Array(u.length),i=0,o=u.length;i<o;i+=1)c=u[i],l=Object.keys(c),d[i]=[l[0],c[l[0]]];return d}return pairs=new e("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:t,construct:n}),pairs}var set,hasRequiredSet;function requireSet(){if(hasRequiredSet)return set;hasRequiredSet=1;var e=requireType(),r=Object.prototype.hasOwnProperty;function t(s){if(s===null)return!0;var i,o=s;for(i in o)if(r.call(o,i)&&o[i]!==null)return!1;return!0}function n(s){return s!==null?s:{}}return set=new e("tag:yaml.org,2002:set",{kind:"mapping",resolve:t,construct:n}),set}var default_safe,hasRequiredDefault_safe;function requireDefault_safe(){if(hasRequiredDefault_safe)return default_safe;hasRequiredDefault_safe=1;var e=requireSchema();return default_safe=new e({include:[requireCore()],implicit:[requireTimestamp(),requireMerge()],explicit:[requireBinary(),requireOmap(),requirePairs(),requireSet()]}),default_safe}var _undefined,hasRequired_undefined;function require_undefined(){if(hasRequired_undefined)return _undefined;hasRequired_undefined=1;var e=requireType();function r(){return!0}function t(){}function n(){return""}function s(i){return typeof i>"u"}return _undefined=new e("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:r,construct:t,predicate:s,represent:n}),_undefined}var regexp,hasRequiredRegexp;function requireRegexp(){if(hasRequiredRegexp)return regexp;hasRequiredRegexp=1;var e=requireType();function r(i){if(i===null||i.length===0)return!1;var o=i,c=/\/([gim]*)$/.exec(i),l="";return!(o[0]==="/"&&(c&&(l=c[1]),l.length>3||o[o.length-l.length-1]!=="/"))}function t(i){var o=i,c=/\/([gim]*)$/.exec(i),l="";return o[0]==="/"&&(c&&(l=c[1]),o=o.slice(1,o.length-l.length-1)),new RegExp(o,l)}function n(i){var o="/"+i.source+"/";return i.global&&(o+="g"),i.multiline&&(o+="m"),i.ignoreCase&&(o+="i"),o}function s(i){return Object.prototype.toString.call(i)==="[object RegExp]"}return regexp=new e("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:t,predicate:s,represent:n}),regexp}var _function,hasRequired_function;function require_function(){if(hasRequired_function)return _function;hasRequired_function=1;var e;try{var r=commonjsRequire;e=r("esprima")}catch{typeof window<"u"&&(e=window.esprima)}var t=requireType();function n(c){if(c===null)return!1;try{var l="("+c+")",d=e.parse(l,{range:!0});return!(d.type!=="Program"||d.body.length!==1||d.body[0].type!=="ExpressionStatement"||d.body[0].expression.type!=="ArrowFunctionExpression"&&d.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function s(c){var l="("+c+")",d=e.parse(l,{range:!0}),u=[],f;if(d.type!=="Program"||d.body.length!==1||d.body[0].type!=="ExpressionStatement"||d.body[0].expression.type!=="ArrowFunctionExpression"&&d.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return d.body[0].expression.params.forEach(function(x){u.push(x.name)}),f=d.body[0].expression.body.range,d.body[0].expression.body.type==="BlockStatement"?new Function(u,l.slice(f[0]+1,f[1]-1)):new Function(u,"return "+l.slice(f[0],f[1]))}function i(c){return c.toString()}function o(c){return Object.prototype.toString.call(c)==="[object Function]"}return _function=new t("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:n,construct:s,predicate:o,represent:i}),_function}var default_full,hasRequiredDefault_full;function requireDefault_full(){if(hasRequiredDefault_full)return default_full;hasRequiredDefault_full=1;var e=requireSchema();return default_full=e.DEFAULT=new e({include:[requireDefault_safe()],explicit:[require_undefined(),requireRegexp(),require_function()]}),default_full}var hasRequiredLoader;function requireLoader(){if(hasRequiredLoader)return loader;hasRequiredLoader=1;var e=requireCommon(),r=requireException(),t=requireMark(),n=requireDefault_safe(),s=requireDefault_full(),i=Object.prototype.hasOwnProperty,o=1,c=2,l=3,d=4,u=1,f=2,x=3,h=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,g=/[\x85\u2028\u2029]/,A=/[,\[\]\{\}]/,v=/^(?:!|!!|![a-z\-]+!)$/i,S=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function y(a){return Object.prototype.toString.call(a)}function k(a){return a===10||a===13}function R(a){return a===9||a===32}function T(a){return a===9||a===32||a===10||a===13}function C(a){return a===44||a===91||a===93||a===123||a===125}function b(a){var w;return 48<=a&&a<=57?a-48:(w=a|32,97<=w&&w<=102?w-97+10:-1)}function B(a){return a===120?2:a===117?4:a===85?8:0}function U(a){return 48<=a&&a<=57?a-48:-1}function W(a){return a===48?"\0":a===97?"\x07":a===98?"\b":a===116||a===9?" ":a===110?`
|
|
19
|
+
`:a===118?"\v":a===102?"\f":a===114?"\r":a===101?"\x1B":a===32?" ":a===34?'"':a===47?"/":a===92?"\\":a===78?"
":a===95?" ":a===76?"\u2028":a===80?"\u2029":""}function K(a){return a<=65535?String.fromCharCode(a):String.fromCharCode((a-65536>>10)+55296,(a-65536&1023)+56320)}function le(a,w,j){w==="__proto__"?Object.defineProperty(a,w,{configurable:!0,enumerable:!0,writable:!0,value:j}):a[w]=j}for(var se=new Array(256),G=new Array(256),Z=0;Z<256;Z++)se[Z]=W(Z)?1:0,G[Z]=W(Z);function ye(a,w){this.input=a,this.filename=w.filename||null,this.schema=w.schema||s,this.onWarning=w.onWarning||null,this.legacy=w.legacy||!1,this.json=w.json||!1,this.listener=w.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=a.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function ie(a,w){return new r(w,new t(a.filename,a.input,a.position,a.line,a.position-a.lineStart))}function F(a,w){throw ie(a,w)}function ne(a,w){a.onWarning&&a.onWarning.call(null,ie(a,w))}var oe={YAML:function(w,j,$){var N,p,m;w.version!==null&&F(w,"duplication of %YAML directive"),$.length!==1&&F(w,"YAML directive accepts exactly one argument"),N=/^([0-9]+)\.([0-9]+)$/.exec($[0]),N===null&&F(w,"ill-formed argument of the YAML directive"),p=parseInt(N[1],10),m=parseInt(N[2],10),p!==1&&F(w,"unacceptable YAML version of the document"),w.version=$[0],w.checkLineBreaks=m<2,m!==1&&m!==2&&ne(w,"unsupported YAML version of the document")},TAG:function(w,j,$){var N,p;$.length!==2&&F(w,"TAG directive accepts exactly two arguments"),N=$[0],p=$[1],v.test(N)||F(w,"ill-formed tag handle (first argument) of the TAG directive"),i.call(w.tagMap,N)&&F(w,'there is a previously declared suffix for "'+N+'" tag handle'),S.test(p)||F(w,"ill-formed tag prefix (second argument) of the TAG directive"),w.tagMap[N]=p}};function Q(a,w,j,$){var N,p,m,E;if(w<j){if(E=a.input.slice(w,j),$)for(N=0,p=E.length;N<p;N+=1)m=E.charCodeAt(N),m===9||32<=m&&m<=1114111||F(a,"expected valid JSON character");else h.test(E)&&F(a,"the stream contains non-printable characters");a.result+=E}}function J(a,w,j,$){var N,p,m,E;for(e.isObject(j)||F(a,"cannot merge mappings; the provided source object is unacceptable"),N=Object.keys(j),m=0,E=N.length;m<E;m+=1)p=N[m],i.call(w,p)||(le(w,p,j[p]),$[p]=!0)}function q(a,w,j,$,N,p,m,E){var M,D;if(Array.isArray(N))for(N=Array.prototype.slice.call(N),M=0,D=N.length;M<D;M+=1)Array.isArray(N[M])&&F(a,"nested arrays are not supported inside keys"),typeof N=="object"&&y(N[M])==="[object Object]"&&(N[M]="[object Object]");if(typeof N=="object"&&y(N)==="[object Object]"&&(N="[object Object]"),N=String(N),w===null&&(w={}),$==="tag:yaml.org,2002:merge")if(Array.isArray(p))for(M=0,D=p.length;M<D;M+=1)J(a,w,p[M],j);else J(a,w,p,j);else!a.json&&!i.call(j,N)&&i.call(w,N)&&(a.line=m||a.line,a.position=E||a.position,F(a,"duplicated mapping key")),le(w,N,p),delete j[N];return w}function Y(a){var w;w=a.input.charCodeAt(a.position),w===10?a.position++:w===13?(a.position++,a.input.charCodeAt(a.position)===10&&a.position++):F(a,"a line break is expected"),a.line+=1,a.lineStart=a.position}function V(a,w,j){for(var $=0,N=a.input.charCodeAt(a.position);N!==0;){for(;R(N);)N=a.input.charCodeAt(++a.position);if(w&&N===35)do N=a.input.charCodeAt(++a.position);while(N!==10&&N!==13&&N!==0);if(k(N))for(Y(a),N=a.input.charCodeAt(a.position),$++,a.lineIndent=0;N===32;)a.lineIndent++,N=a.input.charCodeAt(++a.position);else break}return j!==-1&&$!==0&&a.lineIndent<j&&ne(a,"deficient indentation"),$}function he(a){var w=a.position,j;return j=a.input.charCodeAt(w),!!((j===45||j===46)&&j===a.input.charCodeAt(w+1)&&j===a.input.charCodeAt(w+2)&&(w+=3,j=a.input.charCodeAt(w),j===0||T(j)))}function de(a,w){w===1?a.result+=" ":w>1&&(a.result+=e.repeat(`
|
|
20
|
+
`,w-1))}function ue(a,w,j){var $,N,p,m,E,M,D,_,P=a.kind,O=a.result,I;if(I=a.input.charCodeAt(a.position),T(I)||C(I)||I===35||I===38||I===42||I===33||I===124||I===62||I===39||I===34||I===37||I===64||I===96||(I===63||I===45)&&(N=a.input.charCodeAt(a.position+1),T(N)||j&&C(N)))return!1;for(a.kind="scalar",a.result="",p=m=a.position,E=!1;I!==0;){if(I===58){if(N=a.input.charCodeAt(a.position+1),T(N)||j&&C(N))break}else if(I===35){if($=a.input.charCodeAt(a.position-1),T($))break}else{if(a.position===a.lineStart&&he(a)||j&&C(I))break;if(k(I))if(M=a.line,D=a.lineStart,_=a.lineIndent,V(a,!1,-1),a.lineIndent>=w){E=!0,I=a.input.charCodeAt(a.position);continue}else{a.position=m,a.line=M,a.lineStart=D,a.lineIndent=_;break}}E&&(Q(a,p,m,!1),de(a,a.line-M),p=m=a.position,E=!1),R(I)||(m=a.position+1),I=a.input.charCodeAt(++a.position)}return Q(a,p,m,!1),a.result?!0:(a.kind=P,a.result=O,!1)}function ee(a,w){var j,$,N;if(j=a.input.charCodeAt(a.position),j!==39)return!1;for(a.kind="scalar",a.result="",a.position++,$=N=a.position;(j=a.input.charCodeAt(a.position))!==0;)if(j===39)if(Q(a,$,a.position,!0),j=a.input.charCodeAt(++a.position),j===39)$=a.position,a.position++,N=a.position;else return!0;else k(j)?(Q(a,$,N,!0),de(a,V(a,!1,w)),$=N=a.position):a.position===a.lineStart&&he(a)?F(a,"unexpected end of the document within a single quoted scalar"):(a.position++,N=a.position);F(a,"unexpected end of the stream within a single quoted scalar")}function re(a,w){var j,$,N,p,m,E;if(E=a.input.charCodeAt(a.position),E!==34)return!1;for(a.kind="scalar",a.result="",a.position++,j=$=a.position;(E=a.input.charCodeAt(a.position))!==0;){if(E===34)return Q(a,j,a.position,!0),a.position++,!0;if(E===92){if(Q(a,j,a.position,!0),E=a.input.charCodeAt(++a.position),k(E))V(a,!1,w);else if(E<256&&se[E])a.result+=G[E],a.position++;else if((m=B(E))>0){for(N=m,p=0;N>0;N--)E=a.input.charCodeAt(++a.position),(m=b(E))>=0?p=(p<<4)+m:F(a,"expected hexadecimal character");a.result+=K(p),a.position++}else F(a,"unknown escape sequence");j=$=a.position}else k(E)?(Q(a,j,$,!0),de(a,V(a,!1,w)),j=$=a.position):a.position===a.lineStart&&he(a)?F(a,"unexpected end of the document within a double quoted scalar"):(a.position++,$=a.position)}F(a,"unexpected end of the stream within a double quoted scalar")}function ae(a,w){var j=!0,$,N=a.tag,p,m=a.anchor,E,M,D,_,P,O={},I,L,z,H;if(H=a.input.charCodeAt(a.position),H===91)M=93,P=!1,p=[];else if(H===123)M=125,P=!0,p={};else return!1;for(a.anchor!==null&&(a.anchorMap[a.anchor]=p),H=a.input.charCodeAt(++a.position);H!==0;){if(V(a,!0,w),H=a.input.charCodeAt(a.position),H===M)return a.position++,a.tag=N,a.anchor=m,a.kind=P?"mapping":"sequence",a.result=p,!0;j||F(a,"missed comma between flow collection entries"),L=I=z=null,D=_=!1,H===63&&(E=a.input.charCodeAt(a.position+1),T(E)&&(D=_=!0,a.position++,V(a,!0,w))),$=a.line,ge(a,w,o,!1,!0),L=a.tag,I=a.result,V(a,!0,w),H=a.input.charCodeAt(a.position),(_||a.line===$)&&H===58&&(D=!0,H=a.input.charCodeAt(++a.position),V(a,!0,w),ge(a,w,o,!1,!0),z=a.result),P?q(a,p,O,L,I,z):D?p.push(q(a,null,O,L,I,z)):p.push(I),V(a,!0,w),H=a.input.charCodeAt(a.position),H===44?(j=!0,H=a.input.charCodeAt(++a.position)):j=!1}F(a,"unexpected end of the stream within a flow collection")}function te(a,w){var j,$,N=u,p=!1,m=!1,E=w,M=0,D=!1,_,P;if(P=a.input.charCodeAt(a.position),P===124)$=!1;else if(P===62)$=!0;else return!1;for(a.kind="scalar",a.result="";P!==0;)if(P=a.input.charCodeAt(++a.position),P===43||P===45)u===N?N=P===43?x:f:F(a,"repeat of a chomping mode identifier");else if((_=U(P))>=0)_===0?F(a,"bad explicit indentation width of a block scalar; it cannot be less than one"):m?F(a,"repeat of an indentation width identifier"):(E=w+_-1,m=!0);else break;if(R(P)){do P=a.input.charCodeAt(++a.position);while(R(P));if(P===35)do P=a.input.charCodeAt(++a.position);while(!k(P)&&P!==0)}for(;P!==0;){for(Y(a),a.lineIndent=0,P=a.input.charCodeAt(a.position);(!m||a.lineIndent<E)&&P===32;)a.lineIndent++,P=a.input.charCodeAt(++a.position);if(!m&&a.lineIndent>E&&(E=a.lineIndent),k(P)){M++;continue}if(a.lineIndent<E){N===x?a.result+=e.repeat(`
|
|
21
|
+
`,p?1+M:M):N===u&&p&&(a.result+=`
|
|
22
|
+
`);break}for($?R(P)?(D=!0,a.result+=e.repeat(`
|
|
23
|
+
`,p?1+M:M)):D?(D=!1,a.result+=e.repeat(`
|
|
24
|
+
`,M+1)):M===0?p&&(a.result+=" "):a.result+=e.repeat(`
|
|
25
|
+
`,M):a.result+=e.repeat(`
|
|
26
|
+
`,p?1+M:M),p=!0,m=!0,M=0,j=a.position;!k(P)&&P!==0;)P=a.input.charCodeAt(++a.position);Q(a,j,a.position,!1)}return!0}function fe(a,w){var j,$=a.tag,N=a.anchor,p=[],m,E=!1,M;for(a.anchor!==null&&(a.anchorMap[a.anchor]=p),M=a.input.charCodeAt(a.position);M!==0&&!(M!==45||(m=a.input.charCodeAt(a.position+1),!T(m)));){if(E=!0,a.position++,V(a,!0,-1)&&a.lineIndent<=w){p.push(null),M=a.input.charCodeAt(a.position);continue}if(j=a.line,ge(a,w,l,!1,!0),p.push(a.result),V(a,!0,-1),M=a.input.charCodeAt(a.position),(a.line===j||a.lineIndent>w)&&M!==0)F(a,"bad indentation of a sequence entry");else if(a.lineIndent<w)break}return E?(a.tag=$,a.anchor=N,a.kind="sequence",a.result=p,!0):!1}function ve(a,w,j){var $,N,p,m,E=a.tag,M=a.anchor,D={},_={},P=null,O=null,I=null,L=!1,z=!1,H;for(a.anchor!==null&&(a.anchorMap[a.anchor]=D),H=a.input.charCodeAt(a.position);H!==0;){if($=a.input.charCodeAt(a.position+1),p=a.line,m=a.position,(H===63||H===58)&&T($))H===63?(L&&(q(a,D,_,P,O,null),P=O=I=null),z=!0,L=!0,N=!0):L?(L=!1,N=!0):F(a,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),a.position+=1,H=$;else if(ge(a,j,c,!1,!0))if(a.line===p){for(H=a.input.charCodeAt(a.position);R(H);)H=a.input.charCodeAt(++a.position);if(H===58)H=a.input.charCodeAt(++a.position),T(H)||F(a,"a whitespace character is expected after the key-value separator within a block mapping"),L&&(q(a,D,_,P,O,null),P=O=I=null),z=!0,L=!1,N=!1,P=a.tag,O=a.result;else if(z)F(a,"can not read an implicit mapping pair; a colon is missed");else return a.tag=E,a.anchor=M,!0}else if(z)F(a,"can not read a block mapping entry; a multiline key may not be an implicit key");else return a.tag=E,a.anchor=M,!0;else break;if((a.line===p||a.lineIndent>w)&&(ge(a,w,d,!0,N)&&(L?O=a.result:I=a.result),L||(q(a,D,_,P,O,I,p,m),P=O=I=null),V(a,!0,-1),H=a.input.charCodeAt(a.position)),a.lineIndent>w&&H!==0)F(a,"bad indentation of a mapping entry");else if(a.lineIndent<w)break}return L&&q(a,D,_,P,O,null),z&&(a.tag=E,a.anchor=M,a.kind="mapping",a.result=D),z}function ce(a){var w,j=!1,$=!1,N,p,m;if(m=a.input.charCodeAt(a.position),m!==33)return!1;if(a.tag!==null&&F(a,"duplication of a tag property"),m=a.input.charCodeAt(++a.position),m===60?(j=!0,m=a.input.charCodeAt(++a.position)):m===33?($=!0,N="!!",m=a.input.charCodeAt(++a.position)):N="!",w=a.position,j){do m=a.input.charCodeAt(++a.position);while(m!==0&&m!==62);a.position<a.length?(p=a.input.slice(w,a.position),m=a.input.charCodeAt(++a.position)):F(a,"unexpected end of the stream within a verbatim tag")}else{for(;m!==0&&!T(m);)m===33&&($?F(a,"tag suffix cannot contain exclamation marks"):(N=a.input.slice(w-1,a.position+1),v.test(N)||F(a,"named tag handle cannot contain such characters"),$=!0,w=a.position+1)),m=a.input.charCodeAt(++a.position);p=a.input.slice(w,a.position),A.test(p)&&F(a,"tag suffix cannot contain flow indicator characters")}return p&&!S.test(p)&&F(a,"tag name cannot contain such characters: "+p),j?a.tag=p:i.call(a.tagMap,N)?a.tag=a.tagMap[N]+p:N==="!"?a.tag="!"+p:N==="!!"?a.tag="tag:yaml.org,2002:"+p:F(a,'undeclared tag handle "'+N+'"'),!0}function pe(a){var w,j;if(j=a.input.charCodeAt(a.position),j!==38)return!1;for(a.anchor!==null&&F(a,"duplication of an anchor property"),j=a.input.charCodeAt(++a.position),w=a.position;j!==0&&!T(j)&&!C(j);)j=a.input.charCodeAt(++a.position);return a.position===w&&F(a,"name of an anchor node must contain at least one character"),a.anchor=a.input.slice(w,a.position),!0}function xe(a){var w,j,$;if($=a.input.charCodeAt(a.position),$!==42)return!1;for($=a.input.charCodeAt(++a.position),w=a.position;$!==0&&!T($)&&!C($);)$=a.input.charCodeAt(++a.position);return a.position===w&&F(a,"name of an alias node must contain at least one character"),j=a.input.slice(w,a.position),i.call(a.anchorMap,j)||F(a,'unidentified alias "'+j+'"'),a.result=a.anchorMap[j],V(a,!0,-1),!0}function ge(a,w,j,$,N){var p,m,E,M=1,D=!1,_=!1,P,O,I,L,z;if(a.listener!==null&&a.listener("open",a),a.tag=null,a.anchor=null,a.kind=null,a.result=null,p=m=E=d===j||l===j,$&&V(a,!0,-1)&&(D=!0,a.lineIndent>w?M=1:a.lineIndent===w?M=0:a.lineIndent<w&&(M=-1)),M===1)for(;ce(a)||pe(a);)V(a,!0,-1)?(D=!0,E=p,a.lineIndent>w?M=1:a.lineIndent===w?M=0:a.lineIndent<w&&(M=-1)):E=!1;if(E&&(E=D||N),(M===1||d===j)&&(o===j||c===j?L=w:L=w+1,z=a.position-a.lineStart,M===1?E&&(fe(a,z)||ve(a,z,L))||ae(a,L)?_=!0:(m&&te(a,L)||ee(a,L)||re(a,L)?_=!0:xe(a)?(_=!0,(a.tag!==null||a.anchor!==null)&&F(a,"alias node should not have any properties")):ue(a,L,o===j)&&(_=!0,a.tag===null&&(a.tag="?")),a.anchor!==null&&(a.anchorMap[a.anchor]=a.result)):M===0&&(_=E&&fe(a,z))),a.tag!==null&&a.tag!=="!")if(a.tag==="?"){for(a.result!==null&&a.kind!=="scalar"&&F(a,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+a.kind+'"'),P=0,O=a.implicitTypes.length;P<O;P+=1)if(I=a.implicitTypes[P],I.resolve(a.result)){a.result=I.construct(a.result),a.tag=I.tag,a.anchor!==null&&(a.anchorMap[a.anchor]=a.result);break}}else i.call(a.typeMap[a.kind||"fallback"],a.tag)?(I=a.typeMap[a.kind||"fallback"][a.tag],a.result!==null&&I.kind!==a.kind&&F(a,"unacceptable node kind for !<"+a.tag+'> tag; it should be "'+I.kind+'", not "'+a.kind+'"'),I.resolve(a.result)?(a.result=I.construct(a.result),a.anchor!==null&&(a.anchorMap[a.anchor]=a.result)):F(a,"cannot resolve a node with !<"+a.tag+"> explicit tag")):F(a,"unknown tag !<"+a.tag+">");return a.listener!==null&&a.listener("close",a),a.tag!==null||a.anchor!==null||_}function Ee(a){var w=a.position,j,$,N,p=!1,m;for(a.version=null,a.checkLineBreaks=a.legacy,a.tagMap={},a.anchorMap={};(m=a.input.charCodeAt(a.position))!==0&&(V(a,!0,-1),m=a.input.charCodeAt(a.position),!(a.lineIndent>0||m!==37));){for(p=!0,m=a.input.charCodeAt(++a.position),j=a.position;m!==0&&!T(m);)m=a.input.charCodeAt(++a.position);for($=a.input.slice(j,a.position),N=[],$.length<1&&F(a,"directive name must not be less than one character in length");m!==0;){for(;R(m);)m=a.input.charCodeAt(++a.position);if(m===35){do m=a.input.charCodeAt(++a.position);while(m!==0&&!k(m));break}if(k(m))break;for(j=a.position;m!==0&&!T(m);)m=a.input.charCodeAt(++a.position);N.push(a.input.slice(j,a.position))}m!==0&&Y(a),i.call(oe,$)?oe[$](a,$,N):ne(a,'unknown document directive "'+$+'"')}if(V(a,!0,-1),a.lineIndent===0&&a.input.charCodeAt(a.position)===45&&a.input.charCodeAt(a.position+1)===45&&a.input.charCodeAt(a.position+2)===45?(a.position+=3,V(a,!0,-1)):p&&F(a,"directives end mark is expected"),ge(a,a.lineIndent-1,d,!1,!0),V(a,!0,-1),a.checkLineBreaks&&g.test(a.input.slice(w,a.position))&&ne(a,"non-ASCII line breaks are interpreted as content"),a.documents.push(a.result),a.position===a.lineStart&&he(a)){a.input.charCodeAt(a.position)===46&&(a.position+=3,V(a,!0,-1));return}if(a.position<a.length-1)F(a,"end of the stream or a document separator is expected");else return}function Ae(a,w){a=String(a),w=w||{},a.length!==0&&(a.charCodeAt(a.length-1)!==10&&a.charCodeAt(a.length-1)!==13&&(a+=`
|
|
27
|
+
`),a.charCodeAt(0)===65279&&(a=a.slice(1)));var j=new ye(a,w),$=a.indexOf("\0");for($!==-1&&(j.position=$,F(j,"null byte is not allowed in input")),j.input+="\0";j.input.charCodeAt(j.position)===32;)j.lineIndent+=1,j.position+=1;for(;j.position<j.length-1;)Ee(j);return j.documents}function Se(a,w,j){w!==null&&typeof w=="object"&&typeof j>"u"&&(j=w,w=null);var $=Ae(a,j);if(typeof w!="function")return $;for(var N=0,p=$.length;N<p;N+=1)w($[N])}function ke(a,w){var j=Ae(a,w);if(j.length!==0){if(j.length===1)return j[0];throw new r("expected a single document in the stream, but found more")}}function we(a,w,j){return typeof w=="object"&&w!==null&&typeof j>"u"&&(j=w,w=null),Se(a,w,e.extend({schema:n},j))}function Re(a,w){return ke(a,e.extend({schema:n},w))}return loader.loadAll=Se,loader.load=ke,loader.safeLoadAll=we,loader.safeLoad=Re,loader}var dumper={},hasRequiredDumper;function requireDumper(){if(hasRequiredDumper)return dumper;hasRequiredDumper=1;var e=requireCommon(),r=requireException(),t=requireDefault_full(),n=requireDefault_safe(),s=Object.prototype.toString,i=Object.prototype.hasOwnProperty,o=9,c=10,l=13,d=32,u=33,f=34,x=35,h=37,g=38,A=39,v=42,S=44,y=45,k=58,R=61,T=62,C=63,b=64,B=91,U=93,W=96,K=123,le=124,se=125,G={};G[0]="\\0",G[7]="\\a",G[8]="\\b",G[9]="\\t",G[10]="\\n",G[11]="\\v",G[12]="\\f",G[13]="\\r",G[27]="\\e",G[34]='\\"',G[92]="\\\\",G[133]="\\N",G[160]="\\_",G[8232]="\\L",G[8233]="\\P";var Z=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function ye(p,m){var E,M,D,_,P,O,I;if(m===null)return{};for(E={},M=Object.keys(m),D=0,_=M.length;D<_;D+=1)P=M[D],O=String(m[P]),P.slice(0,2)==="!!"&&(P="tag:yaml.org,2002:"+P.slice(2)),I=p.compiledTypeMap.fallback[P],I&&i.call(I.styleAliases,O)&&(O=I.styleAliases[O]),E[P]=O;return E}function ie(p){var m,E,M;if(m=p.toString(16).toUpperCase(),p<=255)E="x",M=2;else if(p<=65535)E="u",M=4;else if(p<=4294967295)E="U",M=8;else throw new r("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+E+e.repeat("0",M-m.length)+m}function F(p){this.schema=p.schema||t,this.indent=Math.max(1,p.indent||2),this.noArrayIndent=p.noArrayIndent||!1,this.skipInvalid=p.skipInvalid||!1,this.flowLevel=e.isNothing(p.flowLevel)?-1:p.flowLevel,this.styleMap=ye(this.schema,p.styles||null),this.sortKeys=p.sortKeys||!1,this.lineWidth=p.lineWidth||80,this.noRefs=p.noRefs||!1,this.noCompatMode=p.noCompatMode||!1,this.condenseFlow=p.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function ne(p,m){for(var E=e.repeat(" ",m),M=0,D=-1,_="",P,O=p.length;M<O;)D=p.indexOf(`
|
|
28
|
+
`,M),D===-1?(P=p.slice(M),M=O):(P=p.slice(M,D+1),M=D+1),P.length&&P!==`
|
|
29
|
+
`&&(_+=E),_+=P;return _}function oe(p,m){return`
|
|
30
|
+
`+e.repeat(" ",p.indent*m)}function Q(p,m){var E,M,D;for(E=0,M=p.implicitTypes.length;E<M;E+=1)if(D=p.implicitTypes[E],D.resolve(m))return!0;return!1}function J(p){return p===d||p===o}function q(p){return 32<=p&&p<=126||161<=p&&p<=55295&&p!==8232&&p!==8233||57344<=p&&p<=65533&&p!==65279||65536<=p&&p<=1114111}function Y(p){return q(p)&&!J(p)&&p!==65279&&p!==l&&p!==c}function V(p,m){return q(p)&&p!==65279&&p!==S&&p!==B&&p!==U&&p!==K&&p!==se&&p!==k&&(p!==x||m&&Y(m))}function he(p){return q(p)&&p!==65279&&!J(p)&&p!==y&&p!==C&&p!==k&&p!==S&&p!==B&&p!==U&&p!==K&&p!==se&&p!==x&&p!==g&&p!==v&&p!==u&&p!==le&&p!==R&&p!==T&&p!==A&&p!==f&&p!==h&&p!==b&&p!==W}function de(p){var m=/^\n* /;return m.test(p)}var ue=1,ee=2,re=3,ae=4,te=5;function fe(p,m,E,M,D){var _,P,O,I=!1,L=!1,z=M!==-1,H=-1,me=he(p.charCodeAt(0))&&!J(p.charCodeAt(p.length-1));if(m)for(_=0;_<p.length;_++){if(P=p.charCodeAt(_),!q(P))return te;O=_>0?p.charCodeAt(_-1):null,me=me&&V(P,O)}else{for(_=0;_<p.length;_++){if(P=p.charCodeAt(_),P===c)I=!0,z&&(L=L||_-H-1>M&&p[H+1]!==" ",H=_);else if(!q(P))return te;O=_>0?p.charCodeAt(_-1):null,me=me&&V(P,O)}L=L||z&&_-H-1>M&&p[H+1]!==" "}return!I&&!L?me&&!D(p)?ue:ee:E>9&&de(p)?te:L?ae:re}function ve(p,m,E,M){p.dump=(function(){if(m.length===0)return"''";if(!p.noCompatMode&&Z.indexOf(m)!==-1)return"'"+m+"'";var D=p.indent*Math.max(1,E),_=p.lineWidth===-1?-1:Math.max(Math.min(p.lineWidth,40),p.lineWidth-D),P=M||p.flowLevel>-1&&E>=p.flowLevel;function O(I){return Q(p,I)}switch(fe(m,P,p.indent,_,O)){case ue:return m;case ee:return"'"+m.replace(/'/g,"''")+"'";case re:return"|"+ce(m,p.indent)+pe(ne(m,D));case ae:return">"+ce(m,p.indent)+pe(ne(xe(m,_),D));case te:return'"'+Ee(m)+'"';default:throw new r("impossible error: invalid scalar style")}})()}function ce(p,m){var E=de(p)?String(m):"",M=p[p.length-1]===`
|
|
31
|
+
`,D=M&&(p[p.length-2]===`
|
|
32
|
+
`||p===`
|
|
33
|
+
`),_=D?"+":M?"":"-";return E+_+`
|
|
34
|
+
`}function pe(p){return p[p.length-1]===`
|
|
35
|
+
`?p.slice(0,-1):p}function xe(p,m){for(var E=/(\n+)([^\n]*)/g,M=(function(){var L=p.indexOf(`
|
|
36
|
+
`);return L=L!==-1?L:p.length,E.lastIndex=L,ge(p.slice(0,L),m)})(),D=p[0]===`
|
|
37
|
+
`||p[0]===" ",_,P;P=E.exec(p);){var O=P[1],I=P[2];_=I[0]===" ",M+=O+(!D&&!_&&I!==""?`
|
|
38
|
+
`:"")+ge(I,m),D=_}return M}function ge(p,m){if(p===""||p[0]===" ")return p;for(var E=/ [^ ]/g,M,D=0,_,P=0,O=0,I="";M=E.exec(p);)O=M.index,O-D>m&&(_=P>D?P:O,I+=`
|
|
39
|
+
`+p.slice(D,_),D=_+1),P=O;return I+=`
|
|
40
|
+
`,p.length-D>m&&P>D?I+=p.slice(D,P)+`
|
|
41
|
+
`+p.slice(P+1):I+=p.slice(D),I.slice(1)}function Ee(p){for(var m="",E,M,D,_=0;_<p.length;_++){if(E=p.charCodeAt(_),E>=55296&&E<=56319&&(M=p.charCodeAt(_+1),M>=56320&&M<=57343)){m+=ie((E-55296)*1024+M-56320+65536),_++;continue}D=G[E],m+=!D&&q(E)?p[_]:D||ie(E)}return m}function Ae(p,m,E){var M="",D=p.tag,_,P;for(_=0,P=E.length;_<P;_+=1)a(p,m,E[_],!1,!1)&&(_!==0&&(M+=","+(p.condenseFlow?"":" ")),M+=p.dump);p.tag=D,p.dump="["+M+"]"}function Se(p,m,E,M){var D="",_=p.tag,P,O;for(P=0,O=E.length;P<O;P+=1)a(p,m+1,E[P],!0,!0)&&((!M||P!==0)&&(D+=oe(p,m)),p.dump&&c===p.dump.charCodeAt(0)?D+="-":D+="- ",D+=p.dump);p.tag=_,p.dump=D||"[]"}function ke(p,m,E){var M="",D=p.tag,_=Object.keys(E),P,O,I,L,z;for(P=0,O=_.length;P<O;P+=1)z="",P!==0&&(z+=", "),p.condenseFlow&&(z+='"'),I=_[P],L=E[I],a(p,m,I,!1,!1)&&(p.dump.length>1024&&(z+="? "),z+=p.dump+(p.condenseFlow?'"':"")+":"+(p.condenseFlow?"":" "),a(p,m,L,!1,!1)&&(z+=p.dump,M+=z));p.tag=D,p.dump="{"+M+"}"}function we(p,m,E,M){var D="",_=p.tag,P=Object.keys(E),O,I,L,z,H,me;if(p.sortKeys===!0)P.sort();else if(typeof p.sortKeys=="function")P.sort(p.sortKeys);else if(p.sortKeys)throw new r("sortKeys must be a boolean or a function");for(O=0,I=P.length;O<I;O+=1)me="",(!M||O!==0)&&(me+=oe(p,m)),L=P[O],z=E[L],a(p,m+1,L,!0,!0,!0)&&(H=p.tag!==null&&p.tag!=="?"||p.dump&&p.dump.length>1024,H&&(p.dump&&c===p.dump.charCodeAt(0)?me+="?":me+="? "),me+=p.dump,H&&(me+=oe(p,m)),a(p,m+1,z,!0,H)&&(p.dump&&c===p.dump.charCodeAt(0)?me+=":":me+=": ",me+=p.dump,D+=me));p.tag=_,p.dump=D||"{}"}function Re(p,m,E){var M,D,_,P,O,I;for(D=E?p.explicitTypes:p.implicitTypes,_=0,P=D.length;_<P;_+=1)if(O=D[_],(O.instanceOf||O.predicate)&&(!O.instanceOf||typeof m=="object"&&m instanceof O.instanceOf)&&(!O.predicate||O.predicate(m))){if(p.tag=E?O.tag:"?",O.represent){if(I=p.styleMap[O.tag]||O.defaultStyle,s.call(O.represent)==="[object Function]")M=O.represent(m,I);else if(i.call(O.represent,I))M=O.represent[I](m,I);else throw new r("!<"+O.tag+'> tag resolver accepts not "'+I+'" style');p.dump=M}return!0}return!1}function a(p,m,E,M,D,_){p.tag=null,p.dump=E,Re(p,E,!1)||Re(p,E,!0);var P=s.call(p.dump);M&&(M=p.flowLevel<0||p.flowLevel>m);var O=P==="[object Object]"||P==="[object Array]",I,L;if(O&&(I=p.duplicates.indexOf(E),L=I!==-1),(p.tag!==null&&p.tag!=="?"||L||p.indent!==2&&m>0)&&(D=!1),L&&p.usedDuplicates[I])p.dump="*ref_"+I;else{if(O&&L&&!p.usedDuplicates[I]&&(p.usedDuplicates[I]=!0),P==="[object Object]")M&&Object.keys(p.dump).length!==0?(we(p,m,p.dump,D),L&&(p.dump="&ref_"+I+p.dump)):(ke(p,m,p.dump),L&&(p.dump="&ref_"+I+" "+p.dump));else if(P==="[object Array]"){var z=p.noArrayIndent&&m>0?m-1:m;M&&p.dump.length!==0?(Se(p,z,p.dump,D),L&&(p.dump="&ref_"+I+p.dump)):(Ae(p,z,p.dump),L&&(p.dump="&ref_"+I+" "+p.dump))}else if(P==="[object String]")p.tag!=="?"&&ve(p,p.dump,m,_);else{if(p.skipInvalid)return!1;throw new r("unacceptable kind of an object to dump "+P)}p.tag!==null&&p.tag!=="?"&&(p.dump="!<"+p.tag+"> "+p.dump)}return!0}function w(p,m){var E=[],M=[],D,_;for(j(p,E,M),D=0,_=M.length;D<_;D+=1)m.duplicates.push(E[M[D]]);m.usedDuplicates=new Array(_)}function j(p,m,E){var M,D,_;if(p!==null&&typeof p=="object")if(D=m.indexOf(p),D!==-1)E.indexOf(D)===-1&&E.push(D);else if(m.push(p),Array.isArray(p))for(D=0,_=p.length;D<_;D+=1)j(p[D],m,E);else for(M=Object.keys(p),D=0,_=M.length;D<_;D+=1)j(p[M[D]],m,E)}function $(p,m){m=m||{};var E=new F(m);return E.noRefs||w(p,E),a(E,0,p,!0,!0)?E.dump+`
|
|
42
|
+
`:""}function N(p,m){return $(p,e.extend({schema:n},m))}return dumper.dump=$,dumper.safeDump=N,dumper}var hasRequiredJsYaml$1;function requireJsYaml$1(){if(hasRequiredJsYaml$1)return jsYaml$1;hasRequiredJsYaml$1=1;var e=requireLoader(),r=requireDumper();function t(n){return function(){throw new Error("Function "+n+" is deprecated and cannot be used.")}}return jsYaml$1.Type=requireType(),jsYaml$1.Schema=requireSchema(),jsYaml$1.FAILSAFE_SCHEMA=requireFailsafe(),jsYaml$1.JSON_SCHEMA=requireJson(),jsYaml$1.CORE_SCHEMA=requireCore(),jsYaml$1.DEFAULT_SAFE_SCHEMA=requireDefault_safe(),jsYaml$1.DEFAULT_FULL_SCHEMA=requireDefault_full(),jsYaml$1.load=e.load,jsYaml$1.loadAll=e.loadAll,jsYaml$1.safeLoad=e.safeLoad,jsYaml$1.safeLoadAll=e.safeLoadAll,jsYaml$1.dump=r.dump,jsYaml$1.safeDump=r.safeDump,jsYaml$1.YAMLException=requireException(),jsYaml$1.MINIMAL_SCHEMA=requireFailsafe(),jsYaml$1.SAFE_SCHEMA=requireDefault_safe(),jsYaml$1.DEFAULT_SCHEMA=requireDefault_full(),jsYaml$1.scan=t("scan"),jsYaml$1.parse=t("parse"),jsYaml$1.compose=t("compose"),jsYaml$1.addConstructor=t("addConstructor"),jsYaml$1}var jsYaml,hasRequiredJsYaml;function requireJsYaml(){if(hasRequiredJsYaml)return jsYaml;hasRequiredJsYaml=1;var e=requireJsYaml$1();return jsYaml=e,jsYaml}var hasRequiredEngines;function requireEngines(){return hasRequiredEngines||(hasRequiredEngines=1,(function(module,exports$1){const yaml=requireJsYaml(),engines=module.exports;engines.yaml={parse:yaml.safeLoad.bind(yaml),stringify:yaml.safeDump.bind(yaml)},engines.json={parse:JSON.parse.bind(JSON),stringify:function(e,r){const t=Object.assign({replacer:null,space:2},r);return JSON.stringify(e,t.replacer,t.space)}},engines.javascript={parse:function parse(str,options,wrap){try{return wrap!==!1&&(str=`(function() {
|
|
43
|
+
return `+str.trim()+`;
|
|
44
|
+
}());`),eval(str)||{}}catch(e){if(wrap!==!1&&/(unexpected|identifier)/i.test(e.message))return parse(str,options,!1);throw new SyntaxError(e)}},stringify:function(){throw new Error("stringifying JavaScript is not supported")}}})(engines)),engines.exports}var utils={};/*!
|
|
45
|
+
* strip-bom-string <https://github.com/jonschlinkert/strip-bom-string>
|
|
46
|
+
*
|
|
47
|
+
* Copyright (c) 2015, 2017, Jon Schlinkert.
|
|
48
|
+
* Released under the MIT License.
|
|
49
|
+
*/var stripBomString,hasRequiredStripBomString;function requireStripBomString(){return hasRequiredStripBomString||(hasRequiredStripBomString=1,stripBomString=function(e){return typeof e=="string"&&e.charAt(0)==="\uFEFF"?e.slice(1):e}),stripBomString}var hasRequiredUtils;function requireUtils(){return hasRequiredUtils||(hasRequiredUtils=1,(function(e){const r=requireStripBomString(),t=requireKindOf();e.define=function(n,s,i){Reflect.defineProperty(n,s,{enumerable:!1,configurable:!0,writable:!0,value:i})},e.isBuffer=function(n){return t(n)==="buffer"},e.isObject=function(n){return t(n)==="object"},e.toBuffer=function(n){return typeof n=="string"?Buffer.from(n):n},e.toString=function(n){if(e.isBuffer(n))return r(String(n));if(typeof n!="string")throw new TypeError("expected input to be a string or buffer");return r(n)},e.arrayify=function(n){return n?Array.isArray(n)?n:[n]:[]},e.startsWith=function(n,s,i){return typeof i!="number"&&(i=s.length),n.slice(0,i)===s}})(utils)),utils}var defaults$1,hasRequiredDefaults;function requireDefaults(){if(hasRequiredDefaults)return defaults$1;hasRequiredDefaults=1;const e=requireEngines(),r=requireUtils();return defaults$1=function(t){const n=Object.assign({},t);return n.delimiters=r.arrayify(n.delims||n.delimiters||"---"),n.delimiters.length===1&&n.delimiters.push(n.delimiters[0]),n.language=(n.language||n.lang||"yaml").toLowerCase(),n.engines=Object.assign({},e,n.parsers,n.engines),n},defaults$1}var engine,hasRequiredEngine;function requireEngine(){if(hasRequiredEngine)return engine;hasRequiredEngine=1,engine=function(r,t){let n=t.engines[r]||t.engines[e(r)];if(typeof n>"u")throw new Error('gray-matter engine "'+r+'" is not registered');return typeof n=="function"&&(n={parse:n}),n};function e(r){switch(r.toLowerCase()){case"js":case"javascript":return"javascript";case"coffee":case"coffeescript":case"cson":return"coffee";case"yaml":case"yml":return"yaml";default:return r}}return engine}var stringify,hasRequiredStringify;function requireStringify(){if(hasRequiredStringify)return stringify;hasRequiredStringify=1;const e=requireKindOf(),r=requireEngine(),t=requireDefaults();stringify=function(s,i,o){if(i==null&&o==null)switch(e(s)){case"object":i=s.data,o={};break;case"string":return s;default:throw new TypeError("expected file to be a string or object")}const c=s.content,l=t(o);if(i==null){if(!l.data)return s;i=l.data}const d=s.language||l.language,u=r(d,l);if(typeof u.stringify!="function")throw new TypeError('expected "'+d+'.stringify" to be a function');i=Object.assign({},s.data,i);const f=l.delimiters[0],x=l.delimiters[1],h=u.stringify(i,o).trim();let g="";return h!=="{}"&&(g=n(f)+n(h)+n(x)),typeof s.excerpt=="string"&&s.excerpt!==""&&c.indexOf(s.excerpt.trim())===-1&&(g+=n(s.excerpt)+n(x)),g+n(c)};function n(s){return s.slice(-1)!==`
|
|
50
|
+
`?s+`
|
|
51
|
+
`:s}return stringify}var excerpt,hasRequiredExcerpt;function requireExcerpt(){if(hasRequiredExcerpt)return excerpt;hasRequiredExcerpt=1;const e=requireDefaults();return excerpt=function(r,t){const n=e(t);if(r.data==null&&(r.data={}),typeof n.excerpt=="function")return n.excerpt(r,n);const s=r.data.excerpt_separator||n.excerpt_separator;if(s==null&&(n.excerpt===!1||n.excerpt==null))return r;const i=typeof n.excerpt=="string"?n.excerpt:s||n.delimiters[0],o=r.content.indexOf(i);return o!==-1&&(r.excerpt=r.content.slice(0,o)),r},excerpt}var toFile,hasRequiredToFile;function requireToFile(){if(hasRequiredToFile)return toFile;hasRequiredToFile=1;const e=requireKindOf(),r=requireStringify(),t=requireUtils();return toFile=function(n){return e(n)!=="object"&&(n={content:n}),e(n.data)!=="object"&&(n.data={}),n.contents&&n.content==null&&(n.content=n.contents),t.define(n,"orig",t.toBuffer(n.content)),t.define(n,"language",n.language||""),t.define(n,"matter",n.matter||""),t.define(n,"stringify",function(s,i){return i&&i.language&&(n.language=i.language),r(n,s,i)}),n.content=t.toString(n.content),n.isEmpty=!1,n.excerpt="",n},toFile}var parse,hasRequiredParse;function requireParse(){if(hasRequiredParse)return parse;hasRequiredParse=1;const e=requireEngine(),r=requireDefaults();return parse=function(t,n,s){const i=r(s),o=e(t,i);if(typeof o.parse!="function")throw new TypeError('expected "'+t+'.parse" to be a function');return o.parse(n,i)},parse}var grayMatter,hasRequiredGrayMatter;function requireGrayMatter(){if(hasRequiredGrayMatter)return grayMatter;hasRequiredGrayMatter=1;const e=require$$0,r=requireSectionMatter(),t=requireDefaults(),n=requireStringify(),s=requireExcerpt(),i=requireEngines(),o=requireToFile(),c=requireParse(),l=requireUtils();function d(f,x){if(f==="")return{data:{},content:f,excerpt:"",orig:f};let h=o(f);const g=d.cache[h.content];if(!x){if(g)return h=Object.assign({},g),h.orig=g.orig,h;d.cache[h.content]=h}return u(h,x)}function u(f,x){const h=t(x),g=h.delimiters[0],A=`
|
|
52
|
+
`+h.delimiters[1];let v=f.content;h.language&&(f.language=h.language);const S=g.length;if(!l.startsWith(v,g,S))return s(f,h),f;if(v.charAt(S)===g.slice(-1))return f;v=v.slice(S);const y=v.length,k=d.language(v,h);k.name&&(f.language=k.name,v=v.slice(k.raw.length));let R=v.indexOf(A);return R===-1&&(R=y),f.matter=v.slice(0,R),f.matter.replace(/^\s*#[^\n]+/gm,"").trim()===""?(f.isEmpty=!0,f.empty=f.content,f.data={}):f.data=c(f.language,f.matter,h),R===y?f.content="":(f.content=v.slice(R+A.length),f.content[0]==="\r"&&(f.content=f.content.slice(1)),f.content[0]===`
|
|
53
|
+
`&&(f.content=f.content.slice(1))),s(f,h),(h.sections===!0||typeof h.section=="function")&&r(f,h.section),f}return d.engines=i,d.stringify=function(f,x,h){return typeof f=="string"&&(f=d(f,h)),n(f,x,h)},d.read=function(f,x){const h=e.readFileSync(f,"utf8"),g=d(h,x);return g.path=f,g},d.test=function(f,x){return l.startsWith(f,t(x).delimiters[0])},d.language=function(f,x){const g=t(x).delimiters[0];d.test(f)&&(f=f.slice(g.length));const A=f.slice(0,f.search(/\r?\n/));return{raw:A,name:A?A.trim():""}},d.cache={},d.clearCache=function(){d.cache={}},grayMatter=d,grayMatter}requireGrayMatter();var DOT_ASSET_KINDS=["tal","dance","performer","act"],URN_RE=/^(tal|dance|performer|act)\/@[A-Za-z0-9_-]+\/[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;function isRecord$1(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function isNonEmptyString$1(e){return typeof e=="string"&&e.trim().length>0}function asOptionalStringArray(e,r){if(e===void 0)return;if(!Array.isArray(e))throw new Error(`${r} must be an array of strings when provided`);const t=e.map((n,s)=>{if(typeof n!="string")throw new Error(`${r}[${s}] must be a string`);return n});return Array.from(new Set(t))}function parseDotAssetUrn(e,r){if(!isNonEmptyString$1(e))throw new Error("urn must be a non-empty string");if(!URN_RE.test(e))throw new Error("urn must match '<kind>/@<owner>/<stage>/<name>'");const[t,n,s,i]=e.split("/");if(!isDotAssetKind(t))throw new Error(`unsupported asset kind '${t}'`);if(r&&t!==r)throw new Error(`urn kind must be '${r}'`);return{kind:t,owner:n.slice(1),stage:s,name:i}}function isDotAssetKind(e){return DOT_ASSET_KINDS.includes(e)}function assertBaseAssetShape(e,r){if(!isRecord$1(e))throw new Error("asset must be an object");const t=parseDotAssetUrn(e.urn,r);if(e.description!==void 0&&typeof e.description!="string")throw new Error("description must be a string when provided");const n=asOptionalStringArray(e.tags,"tags");if(!isRecord$1(e.payload))throw new Error("payload must be an object");return{kind:r,urn:`${t.kind}/@${t.owner}/${t.stage}/${t.name}`,...typeof e.description=="string"?{description:e.description}:{},...n?{tags:n}:{},payload:e.payload}}function parseOptionalStringArray(e,r){if(e!==void 0){if(!Array.isArray(e))throw new Error(`${r} must be an array of strings when provided`);return Array.from(new Set(e.map((t,n)=>{if(!isNonEmptyString$1(t))throw new Error(`${r}[${n}] must be a non-empty string`);return t})))}}function parseSubscriptions(e,r){if(!isRecord$1(e))throw new Error(`${r} must be an object when provided`);const t=parseOptionalStringArray(e.messagesFrom,`${r}.messagesFrom`),n=parseOptionalStringArray(e.messageTags,`${r}.messageTags`),s=parseOptionalStringArray(e.callboardKeys,`${r}.callboardKeys`),i=parseOptionalStringArray(e.eventTypes,`${r}.eventTypes`);if(i&&i.some(o=>o!=="runtime.idle"))throw new Error(`${r}.eventTypes only supports 'runtime.idle' in act.v1`);return{...t?{messagesFrom:t}:{},...n?{messageTags:n}:{},...s?{callboardKeys:s}:{},...i?{eventTypes:i}:{}}}function parseParticipant(e,r){if(!isRecord$1(e))throw new Error(`payload.participants[${r}] must be an object`);if("id"in e)throw new Error(`payload.participants[${r}].id is not supported; use key`);if("activeDances"in e)throw new Error(`payload.participants[${r}].activeDances is not supported in act.v1`);if(!isNonEmptyString$1(e.key))throw new Error(`payload.participants[${r}].key must be a non-empty string`);if(!isNonEmptyString$1(e.performer))throw new Error(`payload.participants[${r}].performer must be a non-empty string`);return parseDotAssetUrn(e.performer,"performer"),{key:e.key,performer:e.performer,...e.subscriptions!==void 0?{subscriptions:parseSubscriptions(e.subscriptions,`payload.participants[${r}].subscriptions`)}:{}}}function parseRelation(e,r){if(!isRecord$1(e))throw new Error(`payload.relations[${r}] must be an object`);if("id"in e)throw new Error(`payload.relations[${r}].id is not supported in act.v1`);if("permissions"in e)throw new Error(`payload.relations[${r}].permissions is not supported in act.v1`);if("maxCalls"in e)throw new Error(`payload.relations[${r}].maxCalls is not supported in act.v1`);if("timeout"in e)throw new Error(`payload.relations[${r}].timeout is not supported in act.v1`);if("sessionPolicy"in e)throw new Error(`payload.relations[${r}].sessionPolicy is not supported in act.v1`);if(!Array.isArray(e.between)||e.between.length!==2)throw new Error(`payload.relations[${r}].between must be a 2-item string tuple`);const t=e.between.map((n,s)=>{if(!isNonEmptyString$1(n))throw new Error(`payload.relations[${r}].between[${s}] must be a non-empty string`);return n});if(e.direction!=="both"&&e.direction!=="one-way")throw new Error(`payload.relations[${r}].direction must be 'both' or 'one-way'`);if(!isNonEmptyString$1(e.name))throw new Error(`payload.relations[${r}].name must be a non-empty string`);if(!isNonEmptyString$1(e.description))throw new Error(`payload.relations[${r}].description must be a non-empty string`);return{between:t,direction:e.direction,name:e.name,description:e.description}}function parseActAsset(e){const r=assertBaseAssetShape(e,"act"),t=parseOptionalStringArray(r.payload.actRules,"payload.actRules");if(!Array.isArray(r.payload.participants))throw new Error("payload.participants must be an array");if(!Array.isArray(r.payload.relations))throw new Error("payload.relations must be an array");const n=r.payload.participants.map((o,c)=>parseParticipant(o,c));if(n.length===0)throw new Error("payload.participants must contain at least one participant");const s=new Set;for(const o of n){if(s.has(o.key))throw new Error(`payload.participants contains duplicate key '${o.key}'`);s.add(o.key)}const i=r.payload.relations.map((o,c)=>parseRelation(o,c));for(const o of i){if(!s.has(o.between[0]))throw new Error(`relation references unknown participant '${o.between[0]}'`);if(!s.has(o.between[1]))throw new Error(`relation references unknown participant '${o.between[1]}'`)}if(n.length>1&&i.length===0)throw new Error("payload.relations must contain at least one relation when multiple participants exist");return{...r,payload:{...t?{actRules:t}:{},participants:n,relations:i}}}function parseStudioAssetUrn(e){try{const r=parseDotAssetUrn(String(e||"").trim());return{kind:r.kind,author:`@${r.owner}`,path:`${r.stage}/${r.name}`,name:r.name,stage:r.stage}}catch{const r=String(e||"").trim().split("/").filter(Boolean);if(r.length!==3)return null;const[t,n,s]=r;return!t||!n||!n.startsWith("@")||!s?null:{kind:t,author:n,path:s,name:s,stage:null}}}function assetUrnDisplayName(e){var r;return((r=parseStudioAssetUrn(e))==null?void 0:r.name)||e.split("/").pop()||e}function assetUrnAuthor(e){var r;return((r=parseStudioAssetUrn(e))==null?void 0:r.author)||null}function assetUrnPath(e){var r;return((r=parseStudioAssetUrn(e))==null?void 0:r.path)||null}const toastListeners=new Set;function subscribeToToasts(e){return toastListeners.add(e),()=>{toastListeners.delete(e)}}function showToast(e,r="info",t){const n={id:`toast-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,title:t==null?void 0:t.title,message:e,tone:r,durationMs:(t==null?void 0:t.durationMs)??4e3,actionLabel:t==null?void 0:t.actionLabel,onAction:(t==null?void 0:t.onAction)??null,dedupeKey:t==null?void 0:t.dedupeKey};for(const s of toastListeners)s(n);return n.id}const actRuntimeSyncTimers=new Map;function createActParticipantKey(){return`participant-${nanoid(8)}`}function resolveBindingDisplayName(e,r){var t;return((t=e==null?void 0:e.displayName)==null?void 0:t.trim())||r}function normalizeSubscriptions(e){if(!e||typeof e!="object")return e;const r=Array.isArray(e.callboardKeys)?e.callboardKeys:void 0;return{...e,...r?{callboardKeys:r}:{}}}function fallbackParticipantLabel(e){return e.kind==="draft"?e.draftId:assetUrnDisplayName(e.urn)}function autoLayoutBindings(e){const r=Object.entries(e);if(r.length===0)return e;const t=r.length<=3?r.length:Math.min(3,Math.ceil(Math.sqrt(r.length))),n=260,s=180;return Object.fromEntries(r.map(([i,o],c)=>{const l=c%t,d=Math.floor(c/t);return[i,{...o,position:{x:40+l*n,y:120+d*s}}]}))}function importActFromAssetImpl(e,r,t,n){var S;const s=nanoid(12),i=e().canvasCenter,o=t,c={$schema:t.schema||"https://schemas.danceoftal.com/assets/act.v1.json",kind:"act",urn:t.urn||`act/@local/${t.name||"untitled"}`,description:t.description,payload:{actRules:Array.isArray(o.actRules)?o.actRules:void 0,participants:t.participants||[],relations:t.relations||[]}},l=parseActAsset(c),d={},u={},f=l.payload.participants;for(const y of f){const k=y.key,R=createActParticipantKey();u[k]=R}for(const y of f){const k=y.key,R=u[k]||createActParticipantKey();d[R]={performerRef:{kind:"registry",urn:y.performer},displayName:k,subscriptions:normalizeSubscriptions({...y.subscriptions,...(S=y.subscriptions)!=null&&S.messagesFrom?{messagesFrom:y.subscriptions.messagesFrom.map(T=>u[T]||T)}:{}}),position:{x:Object.keys(d).length*300,y:100}}}const h=l.payload.relations.map(y=>({id:nanoid(8),between:[u[y.between[0]]||y.between[0],u[y.between[1]]||y.between[1]],direction:y.direction,name:y.name,description:y.description})),g={id:s,name:t.name||`Act ${e().acts.length+1}`,description:t.description,actRules:l.payload.actRules,participants:d,relations:h,position:{x:((i==null?void 0:i.x)??400)-n.width/2,y:(i==null?void 0:i.y)??300},width:n.width,height:n.height,createdAt:Date.now(),meta:{derivedFrom:t.urn||null,authoring:{description:t.description||""}}},A=e().performers,v=[];for(const[y,k]of Object.entries(d)){if(k.performerRef.kind!=="registry")continue;const R=k.performerRef.urn;if(A.some(b=>{var B;return((B=b.meta)==null?void 0:B.derivedFrom)===R})||v.some(b=>{var B;return((B=b.meta)==null?void 0:B.derivedFrom)===R}))continue;const C={id:nanoid(12),name:resolveBindingDisplayName(k,y),position:{x:((i==null?void 0:i.x)??400)+v.length*340,y:((i==null?void 0:i.y)??300)+350},width:320,height:400,scope:"shared",model:null,talRef:null,danceRefs:[],mcpServerNames:[],mcpBindingMap:{},declaredMcpConfig:null,danceDeliveryMode:"auto",executionMode:"direct",hidden:!0,meta:{derivedFrom:R,authoring:{description:`Auto-created for Act participant "${y}" (${R}). Configure a model to make this participant runnable.`}}};v.push(C)}r(y=>({acts:[...y.acts,g],performers:[...y.performers,...v],selectedActId:s,actEditorState:null,workspaceDirty:!0}))}function buildServerActDefinition(e){return{id:e.id,name:e.name,description:e.description,actRules:e.actRules,participants:Object.fromEntries(Object.entries(e.participants).map(([r,t])=>[r,{performerRef:t.performerRef,displayName:t.displayName,subscriptions:normalizeSubscriptions(t.subscriptions)}])),relations:e.relations,safety:e.safety}}function hasLiveRuntimeThreads(e,r){return(e.actThreads[r]||[]).some(t=>t.status==="active"||t.status==="idle")}function scheduleActRuntimeSync(e,r,t,n=300){const s=actRuntimeSyncTimers.get(t);s&&clearTimeout(s),actRuntimeSyncTimers.set(t,setTimeout(()=>{actRuntimeSyncTimers.delete(t);const i=e();!i.acts.find(c=>c.id===t)||!hasLiveRuntimeThreads(i,t)||i.saveWorkspace().catch(c=>{console.warn("[act-sync] Failed to persist workspace before runtime sync",c)}).then(async()=>{const c=e(),l=c.acts.find(d=>d.id===t);if(!(!l||!hasLiveRuntimeThreads(c,t)))try{await api.actRuntime.syncDefinition(t,buildServerActDefinition(l)),await loadActThreadsImpl(e,r,t)}catch(d){console.error("[act-sync] Failed to sync act runtime definition",d),showToast("Studio could not sync the running Act threads.","error",{title:"Act sync failed",dedupeKey:`act:sync:${t}`})}})},n))}async function createActThreadImpl(e,r,t){const n=e().acts.find(c=>c.id===t),s=n?buildServerActDefinition(n):void 0;await e().saveWorkspace();const o=(await api.actRuntime.createThread(t,s)).thread;return r({selectedActId:t,activeThreadId:o.id,activeThreadParticipantKey:null}),await loadActThreadsImpl(e,r,t),o.id}async function loadActThreadsImpl(e,r,t){const n=await api.actRuntime.listThreads(t),s=new Set(n.threads.map(l=>l.id)),i={};for(const l of n.threads)for(const[d,u]of Object.entries(l.participantSessions||{}))u&&(i[`act:${t}:thread:${l.id}:participant:${d}`]=u);const o={},c=[];r(l=>{const d={...l.sessionMap},u={...l.chats},f=`act:${t}:thread:`;for(const h of Object.keys(d)){if(!h.startsWith(f))continue;const g=h.match(/^act:[^:]+:thread:([^:]+):participant:/),A=(g==null?void 0:g[1])||null;(!A||!s.has(A)||!(h in i))&&(delete d[h],delete u[h],c.push(h))}for(const[h,g]of Object.entries(i))d[h]!==g?(d[h]=g,delete u[h],o[h]=g):u[h]||(o[h]=g);let x=l.activeThreadParticipantKey;if(l.selectedActId===t&&l.activeThreadParticipantKey){const h=l.acts.find(g=>g.id===t);h!=null&&h.participants[l.activeThreadParticipantKey]||(x=null)}return{actThreads:{...l.actThreads,[t]:n.threads.map(h=>({id:h.id,actId:h.actId,status:h.status,participantSessions:h.participantSessions||{},createdAt:h.createdAt}))},sessionMap:d,chats:u,activeThreadId:l.selectedActId===t?n.threads.some(h=>h.id===l.activeThreadId)?l.activeThreadId:null:l.activeThreadId,activeThreadParticipantKey:x}});for(const l of c)e().unregisterBinding(l);for(const[l,d]of Object.entries(i))e().registerBinding(l,d),e().seEntities[d]||e().upsertSession({id:d,status:{type:"idle"}});if(Object.keys(o).length>0){const{mapSessionMessagesToChatMessages:l}=await __vitePreload(async()=>{const{mapSessionMessagesToChatMessages:d}=await Promise.resolve().then(()=>chatMessages);return{mapSessionMessagesToChatMessages:d}},void 0);for(const[d,u]of Object.entries(o))api.chat.messages(u).then(f=>{const x=Array.isArray(f)?f:f.messages||[],h=l(x);h.length>0&&(r(g=>({chats:{...g.chats,[d]:h}})),e().setSessionMessages(u,h))}).catch(()=>{})}}function unique$1(e){return Array.from(new Set(e.filter(Boolean)))}function extractMcpServerNamesFromConfig(e){if(!e||typeof e!="object")return[];const r=e,t=r.servers;return Array.isArray(t)?unique$1(t.filter(n=>typeof n=="string")):unique$1(t&&typeof t=="object"?Object.keys(t):Object.entries(r).filter(([,n])=>n!==null&&typeof n=="object").map(([n])=>n))}function unique(e){return Array.from(new Set(e.filter(Boolean)))}function slugifyAssetName(e){const r=e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-{2,}/g,"-").replace(/^[-._]+|[-._]+$/g,"");return r?r.length===1?`${r}${r}`:r.slice(0,100):"untitled-asset"}function registryAssetRef(e){return!e||!e.trim()?null:{kind:"registry",urn:e.trim()}}function registryAssetRefs(e){return(e||[]).map(r=>registryAssetRef(r)).filter(r=>r!==null)}function assetRefKey(e){return e?e.kind==="registry"?`registry:${e.urn}`:`draft:${e.draftId}`:null}function isSameAssetRef(e,r){return assetRefKey(e)===assetRefKey(r)}function registryUrnFromRef(e){return!e||e.kind!=="registry"?null:e.urn}function registryUrnsFromRefs(e){return(e||[]).map(r=>registryUrnFromRef(r)).filter(r=>!!r)}function declaredMcpServerNames(e){return extractMcpServerNamesFromConfig(e)}function sanitizeMcpBindingMap(e){return Object.fromEntries(Object.entries(e||{}).filter(([r,t])=>!!r&&!!t))}function buildAutoMcpBindingMap(e,r){const t=new Set(r.filter(Boolean));return Object.fromEntries(extractMcpServerNamesFromConfig(e).filter(n=>t.has(n)).map(n=>[n,n]))}function resolveMappedMcpServerNames(e){return unique([...e.mcpServerNames||[],...Object.values(e.mcpBindingMap||{}).filter(Boolean)])}function unresolvedDeclaredMcpServerNames(e){const r=declaredMcpServerNames(e.declaredMcpConfig),t=e.mcpBindingMap||{},n=new Set(e.mcpServerNames||[]);return r.filter(s=>{const i=t[s];return i&&i.trim()?!1:!n.has(s)})}function performerMcpConfigForAsset(e){const r=resolveMappedMcpServerNames(e);if(e.declaredMcpConfig&&typeof e.declaredMcpConfig=="object")return e.declaredMcpConfig;if(r.length!==0)return{servers:r}}function modelConfigFromAssetValue$1(e){if(typeof e!="string")return null;const r=e.trim();if(!r)return null;const t=r.indexOf("/"),n=r.indexOf(":"),s=t>0?t:n>0?n:-1;if(s===-1)return null;const i=r.slice(0,s).trim(),o=r.slice(s+1).trim();return!i||!o?null:{provider:i,modelId:o}}function normalizeModelValue(e){return typeof e=="object"&&e?e:modelConfigFromAssetValue$1(e)}function buildPerformerAssetPayload(e,r){var l;const t=registryUrnFromRef(e.talRef),n=registryUrnsFromRefs(e.danceRefs);if([...e.talRef&&!t?[e.talRef]:[],...(e.danceRefs||[]).filter(d=>d.kind!=="registry")].length>0)throw new Error("Save Tal and Dance drafts as local assets before authoring this performer asset.");if(!t&&n.length===0)throw new Error("A performer asset requires at least one Tal or Dance reference.");const i=performerMcpConfigForAsset(e),o=((l=r.description)==null?void 0:l.trim())||r.name.trim(),c=(r.tags||[]).filter(d=>d.trim().length>0);return{$schema:"https://schemas.danceoftal.com/assets/performer.v1.json",kind:"performer",urn:`performer/@pending/${slugifyAssetName(r.name.trim()||"untitled-performer")}`,description:o,tags:c,payload:{...t?{tal:t}:{},...n.length>0?{dances:n}:{},...e.model?{model:{provider:e.model.provider,modelId:e.model.modelId}}:{},...e.modelVariant?{modelVariant:e.modelVariant}:{},...i&&Object.keys(i).length>0?{mcp_config:i}:{}}}}function buildActAssetPayload(e,r={}){var l;const t=Object.fromEntries(Object.entries(e.participants).map(([d,u])=>{var f;return[d,((f=u.displayName)==null?void 0:f.trim())||d]})),n=Object.values(t);if(new Set(n).size!==n.length)throw new Error("Participant display names must be unique before saving or publishing this act asset.");const s=Object.entries(e.participants).map(([d,u])=>({key:t[d]||d,performerRef:u.performerRef,subscriptions:u.subscriptions?{...u.subscriptions,...u.subscriptions.messagesFrom?{messagesFrom:u.subscriptions.messagesFrom.map(f=>t[f]||f)}:{}}:void 0}));if(s.filter(d=>d.performerRef.kind!=="registry").length>0)throw new Error("Save participant performer drafts as local assets before authoring this act asset.");const o=e.relations.find(d=>!d.description||!d.description.trim());if(o)throw new Error(`Relation "${o.name}" requires a description before saving or publishing this act asset.`);const c=e.relations.map(d=>({between:d.between.map(u=>t[u]||u),direction:d.direction,name:d.name,description:d.description}));return{$schema:"https://schemas.danceoftal.com/assets/act.v1.json",kind:"act",urn:`act/@pending/${slugifyAssetName(e.name||"untitled-act")}`,description:((l=r.description)==null?void 0:l.trim())||e.description||e.name,tags:(r.tags||[]).filter(d=>d.trim().length>0),payload:{...e.actRules&&e.actRules.length>0?{actRules:e.actRules}:{},participants:s.map(d=>({key:d.key,performer:d.performerRef.kind==="registry"?d.performerRef.urn:"",...d.subscriptions?{subscriptions:d.subscriptions}:{}})),relations:c}}}function parseUrn(e){const r=parseStudioAssetUrn(e);return{kind:(r==null?void 0:r.kind)||e.split("/")[0],urn:e,name:assetUrnDisplayName(e),author:assetUrnAuthor(e)||"@unknown",description:""}}function draftCardFromRef(e,r){if(e.kind!=="draft")return null;const t=r[e.draftId];return t?{kind:t.kind,urn:`draft/${t.id}`,name:t.name,author:"@draft",description:t.description,source:"stage"}:{kind:"tal",urn:`draft/${e.draftId}`,name:e.draftId,author:"@draft",description:"Missing draft asset"}}function normalizePerformerAssetInput(e){const r=e.mcpConfig&&typeof e.mcpConfig=="object"?e.mcpConfig:null,t=unique(e.mcpServerNames||extractMcpServerNamesFromConfig(r)),n=buildAutoMcpBindingMap(r,t),s=t.filter(i=>!(i in n));return{name:e.name,talRef:registryAssetRef(e.talUrn),danceRefs:registryAssetRefs(e.danceUrns),model:normalizeModelValue(e.model),modelVariant:e.modelVariant||null,modelPlaceholder:e.modelPlaceholder||null,mcpServerNames:s,mcpBindingMap:{...n,...e.mcpBindingMap||{}},declaredMcpConfig:r,meta:e.urn?{derivedFrom:e.urn,publishBindingUrn:e.urn}:void 0}}function buildAssetCardMap(e){return e.reduce((r,t)=>(r[t.urn]=t,r),{})}function buildMcpServerMap(e){return e.reduce((r,t)=>(r[t.name]=t,r),{})}function resolveAssetCard(e,r,t){return e?e.kind==="registry"?r[e.urn]||parseUrn(e.urn):draftCardFromRef(e,t):null}function resolvePerformerPresentation(e,r,t,n={}){const s=extractMcpServerNamesFromConfig(e.declaredMcpConfig);return{talAsset:resolveAssetCard(e.talRef,r,n),danceAssets:(e.danceRefs||[]).map(i=>resolveAssetCard(i,r,n)).filter(i=>i!==null),mcpServers:resolveMappedMcpServerNames(e).map(i=>t[i]||{name:i,status:"unknown",tools:[],resources:[]}),mcpPlaceholders:unresolvedDeclaredMcpServerNames(e),mappedMcpPlaceholders:Object.entries(e.mcpBindingMap||{}).filter(([i,o])=>!!i&&!!o&&s.includes(i)).map(([i,o])=>({placeholderName:i,serverName:o,server:t[o]||null})),declaredMcpServerNames:s}}function modelConfigFromAssetValue(e){if(typeof e!="string")return null;const r=e.trim();if(!r)return null;const t=r.indexOf("/"),n=r.indexOf(":"),s=t>0?t:n>0?n:-1;if(s===-1)return null;const i=r.slice(0,s).trim(),o=r.slice(s+1).trim();return!i||!o?null:{provider:i,modelId:o}}function hasModelConfig(e){return!!(e&&e.provider&&e.modelId)}function resolveImportedModel(e,r){const t=typeof e=="object"&&e?e:modelConfigFromAssetValue(e);if(!t)return{model:null,modelPlaceholder:null};const n=r.find(s=>s.connected&&s.provider===t.provider&&s.id===t.modelId);return n?{model:{provider:n.provider,modelId:n.id},modelPlaceholder:t}:{model:null,modelPlaceholder:t}}function normalizeAssetModelForStudio(e,r){const t=resolveImportedModel(e.model??null,r);return{...e,model:t.model,modelPlaceholder:e.modelPlaceholder||t.modelPlaceholder}}function normalizeAssetMcpForStudio(e,r){const t=extractMcpServerNamesFromConfig(e.mcpConfig),n=new Set(r);return{...e,mcpServerNames:t.filter(s=>n.has(s))}}function createPerformerNode(e){return{id:e.id,name:e.name,position:{x:e.x,y:e.y},width:320,height:400,scope:e.scope||"shared",model:e.model||null,...e.modelPlaceholder?{modelPlaceholder:e.modelPlaceholder}:{},...e.modelVariant?{modelVariant:e.modelVariant}:{},...e.agentId?{agentId:e.agentId}:{},talRef:e.talRef||null,danceRefs:e.danceRefs||[],mcpServerNames:Array.from(new Set(e.mcpServerNames||[])),mcpBindingMap:sanitizeMcpBindingMap(e.mcpBindingMap),declaredMcpConfig:e.declaredMcpConfig||null,danceDeliveryMode:e.danceDeliveryMode||"auto",executionMode:e.executionMode||"direct",...e.activeSessionId?{activeSessionId:e.activeSessionId}:{},...e.planMode?{planMode:e.planMode}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.meta?{meta:e.meta}:{}}}function createPerformerNodeFromAsset(e){const r=normalizePerformerAssetInput(e.asset);return createPerformerNode({id:e.id,name:r.name,x:e.x,y:e.y,scope:e.scope,talRef:r.talRef,danceRefs:r.danceRefs,model:r.model,modelPlaceholder:r.modelPlaceholder,modelVariant:r.modelVariant,agentId:null,mcpServerNames:r.mcpServerNames,mcpBindingMap:r.mcpBindingMap,declaredMcpConfig:r.declaredMcpConfig,hidden:e.hidden,meta:r.meta})}function resolvePerformerAgentId(e){return e.agentId||(e.planMode?"plan":"build")}function resolvePerformerRuntimeConfig(e){return{talRef:e.talRef||null,danceRefs:e.danceRefs||[],model:e.model||null,modelVariant:e.modelVariant||null,agentId:resolvePerformerAgentId(e),mcpServerNames:resolveMappedMcpServerNames(e),danceDeliveryMode:e.danceDeliveryMode||"auto",planMode:!!e.planMode}}function normalizePath(e){return e.trim().replace(/\/+$/,"")}function getMaxPerformerCounter(e){return e.reduce((r,t)=>{const n=t.id.match(/^performer-(\d+)$/);return n?Math.max(r,Number.parseInt(n[1],10)):r},0)}function getMaxMarkdownEditorCounter(e){return e.reduce((r,t)=>{const n=t.id.match(/^markdown-editor-(\d+)$/);return n?Math.max(r,Number.parseInt(n[1],10)):r},0)}function defaultMarkdownContent(e){return""}function applyPerformerPatch(e,r){var s;const t=("name"in r||"talRef"in r||"danceRefs"in r||"model"in r||"modelPlaceholder"in r||"mcpServerNames"in r||"declaredMcpConfig"in r||"danceDeliveryMode"in r)&&((s=r.meta)==null?void 0:s.publishBindingUrn)===void 0,n={...e,...r};return t&&(n.meta={...e.meta,...r.meta,publishBindingUrn:null}),n}function mapPerformers(e,r,t){return e.map(n=>n.id===r?t(n):n)}function mapCanvasTerminals(e,r,t){return e.map(n=>n.id===r?t(n):n)}function mapMarkdownEditors(e,r,t){return e.map(n=>n.id===r?t(n):n)}const ACT_DEFAULT_WIDTH=340,ACT_DEFAULT_EXPANDED_HEIGHT=420,ACT_MIN_EXPANDED_HEIGHT=360;function resolveActExpandedHeight(e){return typeof e!="number"||!Number.isFinite(e)?ACT_DEFAULT_EXPANDED_HEIGHT:Math.max(ACT_MIN_EXPANDED_HEIGHT,e)}const TRACKING_WINDOW_ID$1="workspace-tracking-window";async function newWorkspace(e,r){try{const t=await api.studio.pickDirectory();if(t.path){const n=normalizePath(t.path);if(!n)return;const s=await api.workspaces.list(!0).catch(o=>(console.warn("[studio] workspace list failed",o),[])),i=s.find(o=>o.workingDir===n);if(i){await e().loadWorkspace(i.id);return}performerIdCounter.value=0,markdownEditorIdCounter.value=0,setApiWorkingDirContext(n),r({workspaceId:null,workspaceList:s,workingDir:n,performers:[],acts:[],drafts:{},markdownEditors:[],editingTarget:null,selectedPerformerId:null,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,inspectorFocus:null,chats:{},chatPrefixes:{},activeChatPerformerId:null,sessionMap:{},assistantModel:null,assistantAvailableModels:[],appliedAssistantActionMessageIds:{},assistantActionResults:{},safeSummaries:{},sessions:[],lspServers:[],lspDiagnostics:{},trackingWindow:null,isTrackingOpen:!1,workspaceDirty:!0,actEditorState:null,actThreads:{},activeThreadId:null,activeThreadParticipantKey:null}),e().initRealtimeEvents(),e().loadDraftsFromDisk(),api.studio.activate(n).catch(o=>console.warn("[studio] activate failed",o))}}catch(t){console.error("Failed to pick directory",t),showToast("Studio could not open the working directory picker.","error",{title:"Directory picker failed",dedupeKey:"workspace:directory-picker-failed",actionLabel:"Retry",onAction:()=>{e().newWorkspace()}})}}async function saveWorkspace(e,r){const{performers:t,markdownEditors:n,sessionMap:s,workingDir:i,trackingWindow:o}=e();if(!i)return;const c=t.map(u=>({...u,activeSessionId:s[u.id]||u.activeSessionId,declaredMcpConfig:u.declaredMcpConfig||null,mcpBindingMap:u.mcpBindingMap||{},modelPlaceholder:u.modelPlaceholder||null})),l={schemaVersion:5,workingDir:normalizePath(i),performers:c,markdownEditors:n,canvasTerminals:e().canvasTerminals.map(u=>({...u,sessionId:null,connected:!1})),trackingWindow:o,acts:e().acts},d=await api.workspaces.save(l);r({workspaceDirty:!1,workspaceId:d.id}),e().listWorkspaces(),api.studio.updateConfig({lastWorkspaceId:d.id}).catch(u=>console.warn("[studio] lastWorkspaceId persist failed",u))}function parseActs(e){if(!Array.isArray(e.acts))return[];const r=t=>t&&{...t,...t.callboardKeys?{callboardKeys:t.callboardKeys}:{}};return e.acts.map((t,n)=>{const s=typeof t.participants=="object"&&t.participants?Object.fromEntries(Object.entries(t.participants).map(([i,o],c)=>[i,{...o,subscriptions:r(o==null?void 0:o.subscriptions),position:(o==null?void 0:o.position)||{x:c*300,y:100}}])):{};return{...t,participants:s,relations:Array.isArray(t.relations)?t.relations:[],position:t.position||{x:200,y:200+n*120},width:t.width||ACT_DEFAULT_WIDTH,height:resolveActExpandedHeight(t.height),createdAt:typeof t.createdAt=="number"?t.createdAt:Date.now()}})}async function loadWorkspace(e,r,t){try{const n=await api.workspaces.get(e),s=(n.performers||[]).map(l=>{var u,f;const d=createPerformerNode({id:l.id,name:l.name,x:((u=l.position)==null?void 0:u.x)||0,y:((f=l.position)==null?void 0:f.y)||0,scope:l.scope||"shared",talRef:l.talRef||registryAssetRef(l.talUrn),danceRefs:l.danceRefs||registryAssetRefs(l.danceUrns),model:l.model||null,modelPlaceholder:l.modelPlaceholder||null,modelVariant:l.modelVariant||null,mcpServerNames:l.mcpServerNames||[],mcpBindingMap:l.mcpBindingMap||{},declaredMcpConfig:l.declaredMcpConfig||null,danceDeliveryMode:l.danceDeliveryMode||"auto",executionMode:l.executionMode==="safe"?"safe":"direct",planMode:l.planMode||!1,hidden:l.hidden||!1,activeSessionId:l.activeSessionId,meta:l.meta||(l.sourcePerformerUrn?{derivedFrom:l.sourcePerformerUrn}:void 0)});return{...d,position:l.position||d.position,width:l.width||d.width,height:l.height||d.height}});performerIdCounter.value=getMaxPerformerCounter(s);const i=(n.markdownEditors||[]).map(l=>{const d=l.kind==="dance"?"dance":"tal";return{id:l.id,kind:d,position:l.position||{x:160,y:160},width:l.width||520,height:l.height||360,draftId:l.draftId,baseline:l.baseline||null,attachTarget:l.attachTarget||null,hidden:!!l.hidden}});markdownEditorIdCounter.value=getMaxMarkdownEditorCounter(i);const o={};s&&s.forEach(l=>{l.activeSessionId&&(o[l.id]=l.activeSessionId)});const c=normalizePath(n.workingDir||"");setApiWorkingDirContext(c||null),t({workspaceId:e,performers:s,drafts:{},acts:parseActs(n),selectedActId:null,actEditorState:null,markdownEditors:i,editingTarget:null,selectedPerformerId:null,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,inspectorFocus:null,activeChatPerformerId:null,chats:{},chatPrefixes:{},sessionMap:o,assistantModel:null,assistantAvailableModels:[],appliedAssistantActionMessageIds:{},assistantActionResults:{},safeSummaries:{},sessions:[],canvasTerminals:(n.canvasTerminals||[]).map(l=>({id:l.id,title:l.title||"Terminal",position:l.position||{x:200,y:200},width:l.width||600,height:l.height||400,sessionId:null,connected:!1})),trackingWindow:n.trackingWindow&&typeof n.trackingWindow=="object"?{id:typeof n.trackingWindow.id=="string"?n.trackingWindow.id:TRACKING_WINDOW_ID$1,title:typeof n.trackingWindow.title=="string"?n.trackingWindow.title:"Workspace Tracking",position:n.trackingWindow.position||{x:260,y:180},width:typeof n.trackingWindow.width=="number"?n.trackingWindow.width:420,height:typeof n.trackingWindow.height=="number"?n.trackingWindow.height:360}:null,isTrackingOpen:!1,lspServers:[],lspDiagnostics:{},workspaceDirty:!1,workingDir:c,actThreads:{},activeThreadId:null,activeThreadParticipantKey:null}),api.workspaces.setHidden(e,!1).then(()=>r().listWorkspaces()).catch(l=>console.warn("[studio] workspace unhide failed",l)),r().initRealtimeEvents(),c&&api.studio.activate(c).catch(l=>console.warn("[studio] activate failed",l)),r().rehydrateSessions(),r().listSessions(),r().loadDraftsFromDisk()}catch(n){coerceStudioApiError(n).status!==404&&(console.error(`Failed to load stage ${e}:`,n),showToast("Studio could not load the saved workspace state.","error",{title:"Workspace load failed",dedupeKey:`workspace:load-stage:${e}`,actionLabel:"Retry",onAction:()=>{r().loadWorkspace(e)}}))}}const FOCUS_FIT_DELAY=50,FOCUS_EXIT_FIT={duration:400,padding:.2,maxZoom:1},DEFAULT_FOCUS_VIEWPORT={width:1200,height:800};function scheduleFitView(e,r){const t=FOCUS_EXIT_FIT;setTimeout(()=>{e(t)},FOCUS_FIT_DELAY)}function getCanvasViewportSize(e=typeof document<"u"?document:void 0,r=DEFAULT_FOCUS_VIEWPORT){var d,u,f;const t=(d=e==null?void 0:e.querySelector)==null?void 0:d.call(e,".canvas-area"),n=(u=t==null?void 0:t.getBoundingClientRect)==null?void 0:u.call(t),s=Math.round((n==null?void 0:n.width)??(t==null?void 0:t.clientWidth)??0),i=Math.round((n==null?void 0:n.height)??(t==null?void 0:t.clientHeight)??0);if(s>0&&i>0)return{width:s,height:i};const o=(f=e==null?void 0:e.querySelector)==null?void 0:f.call(e,".react-flow__pane"),c=Math.round((o==null?void 0:o.clientWidth)??0),l=Math.round((o==null?void 0:o.clientHeight)??0);return c>0&&l>0?{width:c,height:l}:r}function resolveFocusNodeId(e,r){return e&&(r||e.nodeId||e.actId)||null}function buildExitFocusModeState(e){const r=e.focusSnapshot;if(!r)return null;const t=resolveFocusNodeId(r,e.focusedPerformerId);return(e.focusedNodeType||r.type)==="performer"?{focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,performers:e.performers.map(s=>s.id===t?{...s,position:r.nodePosition||s.position,width:r.nodeSize.width,height:r.nodeSize.height,hidden:r.hiddenPerformerIds.includes(s.id)}:{...s,hidden:r.hiddenPerformerIds.includes(s.id)}),acts:e.acts.map(s=>({...s,hidden:r.hiddenActIds.includes(s.id)})),markdownEditors:e.markdownEditors.map(s=>({...s,hidden:r.hiddenEditorIds.includes(s.id)})),isAssetLibraryOpen:r.assetLibraryOpen,isAssistantOpen:r.assistantOpen,isTerminalOpen:r.terminalOpen}:{focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,performers:e.performers.map(s=>({...s,hidden:r.hiddenPerformerIds.includes(s.id)})),acts:e.acts.map(s=>s.id===t?{...s,width:r.nodeSize.width,height:r.nodeSize.height,position:r.nodePosition||s.position,hidden:r.hiddenActIds.includes(s.id)}:{...s,hidden:r.hiddenActIds.includes(s.id)}),markdownEditors:e.markdownEditors.map(s=>({...s,hidden:r.hiddenEditorIds.includes(s.id)})),isAssetLibraryOpen:r.assetLibraryOpen,isAssistantOpen:r.assistantOpen,isTerminalOpen:r.terminalOpen}}function enterFocusModeImpl(e,r,t,n,s){const i=e();if(i.focusSnapshot)return;const o=s.width,c=s.height,l={nodeId:t,hiddenPerformerIds:i.performers.filter(u=>u.hidden).map(u=>u.id),hiddenActIds:i.acts.filter(u=>u.hidden).map(u=>u.id),hiddenEditorIds:i.markdownEditors.filter(u=>u.hidden).map(u=>u.id),hiddenTerminalIds:[],assetLibraryOpen:i.isAssetLibraryOpen,assistantOpen:i.isAssistantOpen,terminalOpen:i.isTerminalOpen};if(n==="performer"){const u=i.performers.find(f=>f.id===t);if(!u)return;r({focusedPerformerId:t,focusedNodeType:"performer",focusSnapshot:{...l,type:"performer",nodePosition:u.position,nodeSize:{width:u.width??400,height:u.height??500}},selectedPerformerId:t,selectedPerformerSessionId:i.selectedPerformerSessionId,activeChatPerformerId:t,selectedActId:null,performers:i.performers.map(f=>f.id===t?{...f,hidden:!1,position:{x:0,y:0},width:o,height:c}:{...f,hidden:!0}),acts:i.acts.map(f=>({...f,hidden:!0})),markdownEditors:i.markdownEditors.map(f=>({...f,hidden:!0})),isAssetLibraryOpen:!1,isAssistantOpen:!1,isTerminalOpen:!1,editingTarget:null,inspectorFocus:null});return}const d=i.acts.find(u=>u.id===t);d&&r({focusedPerformerId:t,focusedNodeType:"act",focusSnapshot:{...l,type:"act",actId:t,nodeSize:{width:d.width??400,height:resolveActExpandedHeight(d.height)},nodePosition:d.position},selectedActId:t,selectedPerformerId:null,performers:i.performers.map(u=>({...u,hidden:!0})),acts:i.acts.map(u=>u.id===t?{...u,hidden:!1,width:o,height:c,position:{x:0,y:0}}:{...u,hidden:!0}),markdownEditors:i.markdownEditors.map(u=>({...u,hidden:!0})),isAssetLibraryOpen:!1,isAssistantOpen:!1,isTerminalOpen:!1,editingTarget:null,inspectorFocus:null})}function exitFocusModeImpl(e,r){const t=e(),n=buildExitFocusModeState(t);n&&r(n)}function switchFocusTargetImpl(e,r,t,n){const s=e(),i=s.focusSnapshot,o=resolveFocusNodeId(i,s.focusedPerformerId);if(!i||!o)return;const c=s.focusedNodeType||i.type;if(t===o&&n===c)return;const d=(c==="performer"?s.performers:s.acts).find(h=>h.id===o),{width:u,height:f}=getCanvasViewportSize(typeof document<"u"?document:void 0,{width:(d==null?void 0:d.width)||800,height:(d==null?void 0:d.height)||600});if(n==="performer"){const h=s.performers.find(g=>g.id===t);if(!h)return;r({focusedPerformerId:t,focusedNodeType:"performer",selectedPerformerId:t,selectedActId:null,activeChatPerformerId:t,focusSnapshot:{...i,nodeId:t,type:"performer",nodePosition:h.position,nodeSize:{width:h.width??400,height:h.height??500}},performers:s.performers.map(g=>g.id===o&&c==="performer"?{...g,position:i.nodePosition||g.position,width:i.nodeSize.width,height:i.nodeSize.height,hidden:!0}:g.id===t?{...g,hidden:!1,position:{x:0,y:0},width:u,height:f}:{...g,hidden:!0}),acts:s.acts.map(g=>g.id===o&&c==="act"?{...g,width:i.nodeSize.width,height:i.nodeSize.height,hidden:!0}:{...g,hidden:!0})});return}const x=s.acts.find(h=>h.id===t);x&&r({focusedPerformerId:t,focusedNodeType:"act",selectedActId:t,selectedPerformerId:null,focusSnapshot:{...i,nodeId:t,type:"act",actId:t,nodeSize:{width:x.width??400,height:resolveActExpandedHeight(x.height)},nodePosition:x.position},performers:s.performers.map(h=>h.id===o&&c==="performer"?{...h,width:i.nodeSize.width,height:i.nodeSize.height,hidden:!0}:{...h,hidden:!0}),acts:s.acts.map(h=>h.id===o&&c==="act"?{...h,width:i.nodeSize.width,height:i.nodeSize.height,position:i.nodePosition||h.position,hidden:!0}:h.id===t?{...h,hidden:!1,width:u,height:f,position:{x:0,y:0}}:{...h,hidden:!0})})}function setWorkingDirImpl(e,r,t){const n=normalizePath(t);n&&(setApiWorkingDirContext(n),r(s=>{var i;return{workspaceId:((i=s.workspaceList.find(o=>o.workingDir===n))==null?void 0:i.id)||null,workingDir:n,performers:s.performers.map(o=>({...o,activeSessionId:void 0})),drafts:{},markdownEditors:[],editingTarget:null,selectedPerformerId:null,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,chats:{},chatPrefixes:{},activeChatPerformerId:null,sessionMap:{},sessions:[],inspectorFocus:null,lspServers:[],lspDiagnostics:{},safeSummaries:{},trackingWindow:null,isTrackingOpen:!1,workspaceDirty:!0,acts:[],selectedActId:null,actEditorState:null,actThreads:{},activeThreadId:null,activeThreadParticipantKey:null}}),e().initRealtimeEvents(),api.studio.activate(n).catch(s=>console.warn("[studio] activate failed",s)))}function addCanvasTerminalImpl(e,r){r.value++;const t=`canvas-term-${r.value}`,n=`Terminal ${r.value}`;e(s=>({canvasTerminals:[...s.canvasTerminals,{id:t,title:n,position:{x:200+s.canvasTerminals.length*30,y:200+s.canvasTerminals.length*20},width:600,height:400,sessionId:null,connected:!1}],workspaceDirty:!0}))}function removeCanvasTerminalImpl(e,r){e(t=>({canvasTerminals:t.canvasTerminals.filter(n=>n.id!==r),workspaceDirty:!0}))}function updateCanvasTerminalPositionImpl(e,r,t,n){e(s=>({canvasTerminals:mapCanvasTerminals(s.canvasTerminals,r,i=>({...i,position:{x:t,y:n}})),workspaceDirty:!0}))}function updateCanvasTerminalSizeImpl(e,r,t,n){e(s=>({canvasTerminals:mapCanvasTerminals(s.canvasTerminals,r,i=>({...i,width:t,height:n})),workspaceDirty:!0}))}function updateCanvasTerminalSessionImpl(e,r,t,n){e(s=>({canvasTerminals:mapCanvasTerminals(s.canvasTerminals,r,i=>({...i,sessionId:t,connected:n}))}))}function closeTrackingWindowImpl(e){e({isTrackingOpen:!1,trackingWindow:null,workspaceDirty:!0})}function updateTrackingWindowPositionImpl(e,r,t){e(n=>({trackingWindow:n.trackingWindow?{...n.trackingWindow,position:{x:r,y:t}}:n.trackingWindow,workspaceDirty:!0}))}function updateTrackingWindowSizeImpl(e,r,t){e(n=>({trackingWindow:n.trackingWindow?{...n.trackingWindow,width:r,height:t}:n.trackingWindow,workspaceDirty:!0}))}function isPerformerAttachedToAct(e,r){var n,s;const t=(s=(n=r.meta)==null?void 0:n.derivedFrom)==null?void 0:s.trim();return Object.values(e.participants).some(i=>i.performerRef.kind==="draft"&&i.performerRef.draftId===r.id||i.performerRef.kind==="registry"&&!!t&&i.performerRef.urn===t)}function scheduleActWorkspacePersist(e,r,t){const n=e(),s=n.performers.find(i=>i.id===t);if(s)for(const i of n.acts){if(!isPerformerAttachedToAct(i,s))continue;if((n.actThreads[i.id]||[]).some(c=>c.status==="active"||c.status==="idle")){scheduleActRuntimeSync(e,r,i.id);return}}}function setPerformerTal(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id!==t?i:applyPerformerPatch(i,{talRef:n!=null&&n.urn?{kind:"registry",urn:n.urn}:null})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerTalRef(e,r,t,n){e(s=>({performers:mapPerformers(s.performers,t,i=>applyPerformerPatch(i,{talRef:n})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function addPerformerDance(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id===t&&!i.danceRefs.some(o=>o.kind==="registry"&&o.urn===n.urn)?applyPerformerPatch(i,{danceRefs:[...i.danceRefs,{kind:"registry",urn:n.urn}]}):i),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function addPerformerDanceRef(e,r,t,n){e(s=>({performers:mapPerformers(s.performers,t,i=>i.danceRefs.some(o=>isSameAssetRef(o,n))?i:applyPerformerPatch(i,{danceRefs:[...i.danceRefs,n]})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function replacePerformerDanceRef(e,r,t,n,s){e(i=>({performers:mapPerformers(i.performers,t,o=>applyPerformerPatch(o,{danceRefs:o.danceRefs.map(c=>isSameAssetRef(c,n)?s:c)})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function removePerformerDance(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id===t?(()=>{const o=i.danceRefs.filter(c=>assetRefKey(c)!==n&&!(c.kind==="registry"&&c.urn===n));return applyPerformerPatch(i,{danceRefs:o})})():i),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerModel(e,r,t,n){e(s=>({performers:s.performers.map(i=>{var c,l;if(i.id!==t)return i;const o=(((c=i.model)==null?void 0:c.provider)||null)===((n==null?void 0:n.provider)||null)&&(((l=i.model)==null?void 0:l.modelId)||null)===((n==null?void 0:n.modelId)||null);return applyPerformerPatch(i,{model:n,modelVariant:o&&i.modelVariant||null,modelPlaceholder:null})}),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerModelVariant(e,r,t,n){e(s=>({performers:mapPerformers(s.performers,t,i=>applyPerformerPatch(i,{modelVariant:n||null})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerAgentId(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id!==t?i:applyPerformerPatch(i,{agentId:n||null,planMode:n==="plan"})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerDanceDeliveryMode(e,r,t,n){e(s=>({performers:mapPerformers(s.performers,t,i=>applyPerformerPatch(i,{danceDeliveryMode:n})),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function addPerformerMcp(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id===t&&!i.mcpServerNames.includes(n.name)?applyPerformerPatch(i,{mcpServerNames:[...i.mcpServerNames,n.name]}):i),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function removePerformerMcp(e,r,t,n){e(s=>({performers:s.performers.map(i=>i.id===t?(()=>{const o=i.mcpServerNames.filter(l=>l!==n),c=Object.fromEntries(Object.entries(i.mcpBindingMap||{}).filter(([,l])=>l!==n));return applyPerformerPatch(i,{mcpServerNames:o,mcpBindingMap:c})})():i),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function setPerformerMcpBinding(e,r,t,n,s){e(i=>({performers:i.performers.map(o=>{if(o.id!==t)return o;const c={...o.mcpBindingMap||{}};return s&&s.trim()?c[n]=s.trim():delete c[n],applyPerformerPatch(o,{mcpBindingMap:c})}),workspaceDirty:!0})),scheduleActWorkspacePersist(r,e,t)}function updatePerformerAuthoringMeta(e,r,t){e(n=>({performers:n.performers.map(s=>{var i;return s.id===r?{...s,meta:{...s.meta,authoring:{...((i=s.meta)==null?void 0:i.authoring)||{},...t}}}:s}),workspaceDirty:!0}))}function togglePerformerVisibility(e,r,t){e(n=>{const s=buildExitFocusModeState(n),i=(s==null?void 0:s.performers)||n.performers;return{...s,performers:i.map(o=>o.id===t?{...o,hidden:!o.hidden}:o),workspaceDirty:!0}})}function upsertDraftImpl(e,r,t,n){r(s=>({drafts:{...s.drafts,[n.id]:n},workspaceDirty:!0})),t(n.id,()=>{const s=e().drafts[n.id];if(!s)return;const i=s.kind;api.drafts.update(i,n.id,{name:s.name,content:s.content,slug:s.slug,description:s.description,tags:s.tags,derivedFrom:s.derivedFrom}).catch(o=>{api.drafts.create({kind:i,name:s.name,content:s.content,slug:s.slug,description:s.description,tags:s.tags,derivedFrom:s.derivedFrom}).catch(()=>{console.warn("Failed to persist draft to disk",o)})})})}async function savePerformerAsDraftImpl(e,r,t){const n=e().performers.find(i=>i.id===t);if(!n)return;const s={talRef:n.talRef||null,danceRefs:n.danceRefs||[],model:n.model||null,modelVariant:n.modelVariant||null,mcpServerNames:n.mcpServerNames||[],mcpBindingMap:n.mcpBindingMap||{},danceDeliveryMode:n.danceDeliveryMode||"auto",planMode:n.planMode||!1,agentId:n.agentId||null,executionMode:n.executionMode||"direct"};try{const i=await api.drafts.create({kind:"performer",name:n.name,content:s,description:n.name});r(o=>({drafts:{...o.drafts,[i.id]:{id:i.id,kind:"performer",name:i.name,content:i.content,description:i.description,updatedAt:i.updatedAt}},workspaceDirty:!0}))}catch(i){console.error("Failed to save performer as draft",i)}}async function loadDraftsFromDiskImpl(e){try{const r=await api.drafts.list(),t={};for(const n of r)t[n.id]={id:n.id,kind:n.kind,name:n.name,content:n.content,slug:n.slug,description:n.description,tags:n.tags,derivedFrom:n.derivedFrom,updatedAt:n.updatedAt||Date.now()};e({drafts:t})}catch(r){console.warn("Failed to load drafts from disk",r)}}async function saveActAsDraftImpl(e,r,t){var i,o;const n=e().acts.find(c=>c.id===t);if(!n)return;const s={description:n.description,actRules:n.actRules,participants:Object.fromEntries(Object.entries(n.participants).map(([c,l])=>[c,{performerRef:l.performerRef,displayName:l.displayName,subscriptions:l.subscriptions,position:l.position}])),relations:n.relations.map(c=>({id:c.id,between:c.between,direction:c.direction,name:c.name,description:c.description})),safety:n.safety,position:n.position,width:n.width,height:n.height,hidden:n.hidden,meta:n.meta};try{const c=await api.drafts.create({kind:"act",name:n.name,content:s,description:((o=(i=n.meta)==null?void 0:i.authoring)==null?void 0:o.description)||n.name});r(l=>({drafts:{...l.drafts,[c.id]:{id:c.id,kind:"act",name:c.name,content:c.content,description:c.description,updatedAt:c.updatedAt}},workspaceDirty:!0}))}catch(c){console.error("Failed to save act as draft",c)}}function addPerformerFromDraftImpl(e,r,t,n,s){var d,u;t.value++;const i=`performer-${t.value}`,o=((d=e().canvasCenter)==null?void 0:d.x)??60+e().performers.length*28,c=((u=e().canvasCenter)==null?void 0:u.y)??60+e().performers.length*20,l=createPerformerNode({id:i,name:n,x:o,y:c,talRef:s.talRef||null,danceRefs:s.danceRefs||[],model:s.model||null,modelVariant:s.modelVariant||null,mcpServerNames:s.mcpServerNames||[],mcpBindingMap:s.mcpBindingMap||{},danceDeliveryMode:s.danceDeliveryMode||"auto",planMode:s.planMode||!1,executionMode:(s==null?void 0:s.executionMode)||"direct"});r(f=>({performers:[...f.performers,l],editingTarget:null,selectedPerformerId:i,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,activeChatPerformerId:i,inspectorFocus:null,workspaceDirty:!0}))}function importActFromDraftImpl(e,r,t,n,s){var A,v;const i=t("act"),o=((A=e().canvasCenter)==null?void 0:A.x)??200,c=((v=e().canvasCenter)==null?void 0:v.y)??200,l={},d={};if(s.participants&&typeof s.participants=="object"){for(const y of Object.keys(s.participants))d[y]=y.startsWith("participant-")?y:createActParticipantKey();let S=0;for(const[y,k]of Object.entries(s.participants)){const R=d[y];l[R]={performerRef:k.performerRef||{kind:"draft",draftId:""},displayName:k.displayName||y,subscriptions:k.subscriptions?{...k.subscriptions,...k.subscriptions.messagesFrom?{messagesFrom:k.subscriptions.messagesFrom.map(T=>d[T]||T)}:{}}:void 0,position:k.position||{x:o+S*300,y:c}},S++}}const u={id:i,name:n,description:s.description,actRules:s.actRules,position:s.position||{x:o,y:c},width:s.width||ACT_DEFAULT_WIDTH,height:s.height||ACT_DEFAULT_EXPANDED_HEIGHT,participants:l,relations:Array.isArray(s.relations)?s.relations.map(S=>({...S,between:S.between.map(y=>d[y]||y)})):[],createdAt:Date.now(),safety:s.safety,hidden:s.hidden||void 0,meta:s.meta},f=e().performers,x=e().drafts,h=[],g=new Set;for(const[S,y]of Object.entries(l)){if(y.performerRef.kind!=="draft"||!y.performerRef.draftId)continue;const k=y.performerRef.draftId,R=`draft:${k}`;if(f.some(U=>{var W;return((W=U.meta)==null?void 0:W.derivedFrom)===R})||g.has(k))continue;const C=x[k],b=C!=null&&C.content&&typeof C.content=="object"?C.content:null,B=createPerformerNode({id:t("performer"),name:(C==null?void 0:C.name)||S,x:o+h.length*340,y:c+400,talRef:(b==null?void 0:b.talRef)||null,danceRefs:(b==null?void 0:b.danceRefs)||[],model:(b==null?void 0:b.model)||null,modelVariant:(b==null?void 0:b.modelVariant)||null,mcpServerNames:(b==null?void 0:b.mcpServerNames)||[],mcpBindingMap:(b==null?void 0:b.mcpBindingMap)||{},danceDeliveryMode:(b==null?void 0:b.danceDeliveryMode)||"auto",planMode:(b==null?void 0:b.planMode)||!1,executionMode:(b==null?void 0:b.executionMode)||"direct",meta:{derivedFrom:R}});h.push(B),g.add(k)}r(S=>({acts:[...S.acts,u],performers:[...S.performers,...h],selectedActId:i,workspaceDirty:!0}))}function createMarkdownEditorImpl(e,r,t,n,s,i){t.value++;const o=`markdown-editor-${t.value}`,c=n(`${s}-draft`),l=i==null?void 0:i.source,d=(l==null?void 0:l.name)||(s==="tal"?"New Tal":"New Dance"),u=(l==null?void 0:l.slug)||d.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),f=(l==null?void 0:l.description)||d,x=(l==null?void 0:l.tags)||[],h=(l==null?void 0:l.content)||defaultMarkdownContent(s),g=(i==null?void 0:i.position)||{x:160+e().markdownEditors.length*28,y:140+e().markdownEditors.length*24};return r(A=>{const v=buildExitFocusModeState(A),S=(v==null?void 0:v.markdownEditors)||A.markdownEditors;return{...v,drafts:{...A.drafts,[c]:{id:c,kind:s,name:d,slug:u,description:f,tags:x,content:h,derivedFrom:(l==null?void 0:l.derivedFrom)||void 0,updatedAt:Date.now()}},markdownEditors:[...S,{id:o,kind:s,position:g,width:560,height:380,draftId:c,baseline:l?{name:d,slug:u,description:f,tags:x,content:h}:null,attachTarget:(i==null?void 0:i.attachTarget)||null,hidden:!1}],selectedMarkdownEditorId:o,selectedPerformerId:null,selectedPerformerSessionId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,inspectorFocus:null,workspaceDirty:!0}}),o}function openDraftEditorImpl(e,r,t,n){const s=e().markdownEditors.find(d=>d.draftId===n);if(s){const d=buildExitFocusModeState(e());return r({...d||{},selectedMarkdownEditorId:s.id,selectedPerformerId:null,selectedPerformerSessionId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,inspectorFocus:null}),s.id}const i=e().drafts[n];if(!i)return null;const o=i.kind;if(o!=="tal"&&o!=="dance")return null;t.value++;const c=`markdown-editor-${t.value}`,l=typeof i.content=="string"?i.content:"";return r(d=>{const u=buildExitFocusModeState(d),f=(u==null?void 0:u.markdownEditors)||d.markdownEditors;return{...u,markdownEditors:[...f,{id:c,kind:o,position:{x:160+f.length*28,y:140+f.length*24},width:560,height:380,draftId:n,baseline:{name:i.name,slug:i.slug||"",description:i.description||"",tags:i.tags||[],content:l},attachTarget:null,hidden:!1}],selectedMarkdownEditorId:c,selectedPerformerId:null,selectedPerformerSessionId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,inspectorFocus:null,workspaceDirty:!0}}),c}function matchesDeleteTarget(e,r){return r.kind==="draft"?e.kind==="draft"&&e.draftId===r.draftId:e.kind==="registry"&&e.urn===r.urn}function removeActParticipants(e,r){const t=[];for(const[o,c]of Object.entries(e.participants))r(o,c)&&t.push(o);if(t.length===0)return e;const n={...e.participants};for(const o of t)delete n[o];const s=new Set(t),i=e.relations.filter(o=>!o.between.some(c=>s.has(c)));return{...e,participants:n,relations:i}}function buildAssetDeleteCascade(e,r,t,n){if(e==="tal"){const s=t.map(i=>i.talRef&&matchesDeleteTarget(i.talRef,r)?{...i,talRef:null}:i);return s.some((i,o)=>i!==t[o])?{performers:s,workspaceDirty:!0}:{}}if(e==="dance"){const s=t.map(i=>{const o=i.danceRefs.filter(c=>!matchesDeleteTarget(c,r));return o.length!==i.danceRefs.length?{...i,danceRefs:o}:i});return s.some((i,o)=>i!==t[o])?{performers:s,workspaceDirty:!0}:{}}if(e==="performer"){const s=n.map(i=>removeActParticipants(i,(o,c)=>matchesDeleteTarget(c.performerRef,r)));return s.some((i,o)=>i!==n[o])?{acts:s,workspaceDirty:!0}:{}}return{}}function buildDraftDeleteCascade(e,r,t,n){return buildAssetDeleteCascade(e,{kind:"draft",draftId:r},t,n)}function buildInstalledDeleteCascade(e,r,t,n){return buildAssetDeleteCascade(e,{kind:"registry",urn:r},t,n)}function buildPerformerDeleteCascade(e,r){const t=r.map(n=>removeActParticipants(n,(s,i)=>i.performerRef.kind==="draft"&&i.performerRef.draftId===e));return t.some((n,s)=>n!==r[s])?{acts:t,workspaceDirty:!0}:{}}const performerIdCounter={value:0},markdownEditorIdCounter={value:0},canvasTerminalIdCounter={value:0},TRACKING_WINDOW_ID="workspace-tracking-window";function makeId(e){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function uniquePerformerName(e,r){if(!r.includes(e))return e;let t=2;for(;r.includes(`${e} (${t})`);)t++;return`${e} (${t})`}const _draftPersistTimers=new Map;function scheduleDraftPersist(e,r,t=1500){const n=_draftPersistTimers.get(e);n&&clearTimeout(n),_draftPersistTimers.set(e,setTimeout(()=>{_draftPersistTimers.delete(e),r()},t))}function buildClosedWorkspaceState(){return{workspaceId:null,workingDir:"",performers:[],acts:[],drafts:{},markdownEditors:[],canvasTerminals:[],trackingWindow:null,canvasCenter:null,layoutActId:null,editingTarget:null,selectedPerformerId:null,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,selectedActId:null,actEditorState:null,activeThreadId:null,activeThreadParticipantKey:null,actThreads:{},focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,canvasRevealTarget:null,inspectorFocus:null,workspaceList:[],workspaceDirty:!1,chats:{},chatPrefixes:{},sessionMap:{},sessions:[],loadingPerformerId:null,activeChatPerformerId:null}}const createWorkspaceSlice=(e,r)=>({workspaceId:null,performers:[],drafts:{},markdownEditors:[],editingTarget:null,selectedPerformerId:null,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,focusedPerformerId:null,focusedNodeType:null,focusSnapshot:null,canvasRevealTarget:null,inspectorFocus:null,workspaceList:[],workspaceDirty:!1,theme:localStorage.getItem("dot-theme")||"light",workingDir:"",isTerminalOpen:!1,isTrackingOpen:!1,isAssetLibraryOpen:!1,canvasTerminals:[],trackingWindow:null,canvasCenter:null,layoutActId:null,actEditorState:null,setTerminalOpen:t=>e({isTerminalOpen:t}),setTrackingOpen:t=>e(n=>{const s=t&&!n.trackingWindow;return{isTrackingOpen:t,trackingWindow:t?n.trackingWindow||{id:TRACKING_WINDOW_ID,title:"Workspace Tracking",position:{x:260,y:180},width:420,height:360}:n.trackingWindow,workspaceDirty:s?!0:n.workspaceDirty}}),setAssetLibraryOpen:t=>e({isAssetLibraryOpen:t}),toggleTheme:()=>e(t=>{const n=t.theme==="light"?"dark":"light";return localStorage.setItem("dot-theme",n),api.studio.updateConfig({theme:n}).catch(s=>console.warn("[studio] theme sync failed",s)),{theme:n}}),setCanvasCenter:(t,n)=>e({canvasCenter:{x:t,y:n}}),exitActLayoutMode:()=>e({layoutActId:null}),addPerformer:(t,n,s)=>{var f,x;performerIdCounter.value++;const i=`performer-${performerIdCounter.value}`,c=r().performers.length*40,l=uniquePerformerName(t,r().performers.map(h=>h.name)),d=n??(((f=r().canvasCenter)==null?void 0:f.x)??60)+c,u=s??(((x=r().canvasCenter)==null?void 0:x.y)??60)+c;return e(h=>({performers:[...h.performers,createPerformerNode({id:i,name:l,x:d,y:u})],editingTarget:null,selectedPerformerId:i,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,activeChatPerformerId:i,inspectorFocus:null,workspaceDirty:!0})),i},addPerformerFromAsset:(t,n,s)=>{var f,x;performerIdCounter.value++;const i=`performer-${performerIdCounter.value}`,c=r().performers.length*40,l=uniquePerformerName(t.name,r().performers.map(h=>h.name)),d=n??(((f=r().canvasCenter)==null?void 0:f.x)??60)+c,u=s??(((x=r().canvasCenter)==null?void 0:x.y)??60)+c;e(h=>({performers:[...h.performers,createPerformerNodeFromAsset({id:i,asset:{...t,name:l},x:d,y:u})],editingTarget:null,selectedPerformerId:i,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,activeChatPerformerId:i,inspectorFocus:null,workspaceDirty:!0}))},applyPerformerAsset:(t,n)=>e(s=>{const i=normalizePerformerAssetInput(n);return{performers:s.performers.map(o=>o.id!==t?o:applyPerformerPatch(o,{talRef:i.talRef,danceRefs:i.danceRefs,model:i.model,modelPlaceholder:i.modelPlaceholder,modelVariant:i.modelVariant,mcpServerNames:i.mcpServerNames,mcpBindingMap:i.mcpBindingMap,declaredMcpConfig:i.declaredMcpConfig,meta:i.meta})),workspaceDirty:!0}}),removePerformer:t=>{e(n=>{var l;const s=buildExitFocusModeState(n),i=(s==null?void 0:s.acts)||n.acts,o=(s==null?void 0:s.performers)||n.performers,c=buildPerformerDeleteCascade(t,i);return{...s,performers:o.filter(d=>d.id!==t),acts:c.acts||i,selectedPerformerId:n.selectedPerformerId===t?null:n.selectedPerformerId,selectedPerformerSessionId:n.selectedPerformerId===t?null:n.selectedPerformerSessionId,selectedMarkdownEditorId:n.selectedMarkdownEditorId,editingTarget:((l=n.editingTarget)==null?void 0:l.type)==="performer"&&n.editingTarget.id===t?null:n.editingTarget,activeChatPerformerId:n.activeChatPerformerId===t?null:n.activeChatPerformerId,workspaceDirty:!0}})},updatePerformerPosition:(t,n,s)=>e(i=>({performers:i.performers.map(o=>o.id===t?{...o,position:{x:n,y:s}}:o),workspaceDirty:!0})),updatePerformerSize:(t,n,s)=>e(i=>({performers:i.performers.map(o=>o.id===t?{...o,width:n,height:s}:o),workspaceDirty:!0})),updatePerformerName:(t,n)=>{const s=r(),i=s.performers.find(l=>l.id===t);if(!i)return;const o=uniquePerformerName(n,s.performers.filter(l=>l.id!==t).map(l=>l.name)),c=[];e(l=>{const d=l.acts.map(u=>{let f=!1;const x=Object.fromEntries(Object.entries(u.participants).map(([h,g])=>{var S;const A=g.performerRef.kind==="draft"&&g.performerRef.draftId===t,v=g.performerRef.kind==="registry"&&!!((S=i.meta)!=null&&S.derivedFrom)&&g.performerRef.urn===i.meta.derivedFrom;return!A&&!v?[h,g]:(f=!0,[h,{...g,displayName:o}])}));return f?(c.push(u.id),{...u,participants:x}):u});return{performers:l.performers.map(u=>u.id===t?applyPerformerPatch(u,{name:o}):u),acts:d,workspaceDirty:!0}});for(const l of c)scheduleActRuntimeSync(r,e,l)},selectPerformer:t=>e(n=>({selectedPerformerId:t,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,selectedActId:t?null:n.selectedActId,actEditorState:t?null:n.actEditorState,activeThreadId:t?null:n.activeThreadId,activeThreadParticipantKey:t?null:n.activeThreadParticipantKey,focusedPerformerId:n.focusSnapshot?n.focusedPerformerId:null,focusedNodeType:n.focusSnapshot?n.focusedNodeType:null,inspectorFocus:null})),selectPerformerSession:t=>e({selectedPerformerSessionId:t,selectedMarkdownEditorId:null}),selectMarkdownEditor:t=>e(n=>({...t&&n.focusSnapshot?buildExitFocusModeState(n)||{}:{},selectedMarkdownEditorId:t,selectedPerformerId:null,selectedPerformerSessionId:null,selectedActId:t?null:n.selectedActId,actEditorState:t?null:n.actEditorState,focusedPerformerId:t&&n.focusSnapshot?null:n.focusedPerformerId,focusedNodeType:t&&n.focusSnapshot?null:n.focusedNodeType,focusSnapshot:t&&n.focusSnapshot?null:n.focusSnapshot,inspectorFocus:null})),setFocusedPerformer:t=>e({focusedPerformerId:t}),enterFocusMode:(t,n,s)=>enterFocusModeImpl(r,e,t,n,s),exitFocusMode:()=>exitFocusModeImpl(r,e),switchFocusTarget:(t,n)=>switchFocusTargetImpl(r,e,t,n),revealCanvasNode:(t,n)=>e(s=>{var i;return{canvasRevealTarget:{id:t,type:n,nonce:(((i=s.canvasRevealTarget)==null?void 0:i.nonce)||0)+1}}}),setInspectorFocus:t=>e({inspectorFocus:t}),openPerformerEditor:(t,n=null)=>e(s=>({editingTarget:{type:"performer",id:t},selectedPerformerId:t,selectedPerformerSessionId:null,selectedMarkdownEditorId:null,selectedActId:null,actEditorState:null,focusedPerformerId:s.focusSnapshot?s.focusedPerformerId:null,focusedNodeType:s.focusSnapshot?s.focusedNodeType:null,inspectorFocus:n})),closeEditor:()=>e({editingTarget:null,inspectorFocus:null}),setWorkingDir:t=>setWorkingDirImpl(r,e,t),newWorkspace:async()=>newWorkspace(r,e),closeWorkspace:async()=>{const t=r().workspaceId;t&&(r().workspaceDirty&&await saveWorkspace(r,e),await api.workspaces.setHidden(t,!0)),r().cleanupRealtimeEvents(),setApiWorkingDirContext(null),e(buildClosedWorkspaceState()),await r().listWorkspaces(),api.studio.updateConfig({lastWorkspaceId:void 0}).catch(n=>console.warn("[studio] clear lastWorkspaceId failed",n))},saveWorkspace:async()=>saveWorkspace(r,e),loadWorkspace:async t=>loadWorkspace(t,r,e),listWorkspaces:async()=>{try{const t=await api.workspaces.list();e({workspaceList:t})}catch{e({workspaceList:[]})}},deleteWorkspace:async t=>{t&&(await api.workspaces.delete(t),r().workspaceId===t&&(r().cleanupRealtimeEvents(),setApiWorkingDirContext(null),e(buildClosedWorkspaceState()),api.studio.updateConfig({lastWorkspaceId:void 0}).catch(n=>console.warn("[studio] clear lastWorkspaceId failed",n))),r().listWorkspaces())},setPerformerTal:(t,n)=>setPerformerTal(e,r,t,n),setPerformerTalRef:(t,n)=>setPerformerTalRef(e,r,t,n),addPerformerDance:(t,n)=>addPerformerDance(e,r,t,n),addPerformerDanceRef:(t,n)=>addPerformerDanceRef(e,r,t,n),replacePerformerDanceRef:(t,n,s)=>replacePerformerDanceRef(e,r,t,n,s),removePerformerDance:(t,n)=>removePerformerDance(e,r,t,n),setPerformerModel:(t,n)=>setPerformerModel(e,r,t,n),setPerformerModelVariant:(t,n)=>setPerformerModelVariant(e,r,t,n),setPerformerAgentId:(t,n)=>setPerformerAgentId(e,r,t,n),setPerformerDanceDeliveryMode:(t,n)=>setPerformerDanceDeliveryMode(e,r,t,n),addPerformerMcp:(t,n)=>addPerformerMcp(e,r,t,n),removePerformerMcp:(t,n)=>removePerformerMcp(e,r,t,n),setPerformerMcpBinding:(t,n,s)=>setPerformerMcpBinding(e,r,t,n,s),updatePerformerAuthoringMeta:(t,n)=>updatePerformerAuthoringMeta(e,t,n),togglePerformerVisibility:t=>togglePerformerVisibility(e,r,t),setPerformerExecutionMode:(t,n)=>{e(s=>({performers:s.performers.map(i=>i.id===t?{...i,executionMode:n}:i),workspaceDirty:!0})),r().clearSafeOwner("performer",t),r().detachPerformerSession(t,n==="safe"?"Switched to Safe mode. The next turn will start a new thread lineage in the safe workspace.":"Switched to Direct mode. The next turn will start a new thread lineage in the project workspace."),r().listSessions(),r().forceReconnectRealtimeEvents()},addCanvasTerminal:()=>addCanvasTerminalImpl(e,canvasTerminalIdCounter),removeCanvasTerminal:t=>removeCanvasTerminalImpl(e,t),updateCanvasTerminalPosition:(t,n,s)=>updateCanvasTerminalPositionImpl(e,t,n,s),updateCanvasTerminalSize:(t,n,s)=>updateCanvasTerminalSizeImpl(e,t,n,s),updateCanvasTerminalSession:(t,n,s)=>updateCanvasTerminalSessionImpl(e,t,n,s),closeTrackingWindow:()=>closeTrackingWindowImpl(e),updateTrackingWindowPosition:(t,n)=>updateTrackingWindowPositionImpl(e,t,n),updateTrackingWindowSize:(t,n)=>updateTrackingWindowSizeImpl(e,t,n),upsertDraft:t=>{upsertDraftImpl(r,e,scheduleDraftPersist,t)},savePerformerAsDraft:async t=>savePerformerAsDraftImpl(r,e,t),loadDraftsFromDisk:async()=>loadDraftsFromDiskImpl(e),saveActAsDraft:async t=>saveActAsDraftImpl(r,e,t),addPerformerFromDraft:(t,n)=>addPerformerFromDraftImpl(r,e,performerIdCounter,t,n),importActFromDraft:(t,n)=>importActFromDraftImpl(r,e,makeId,t,n),createMarkdownEditor:(t,n)=>createMarkdownEditorImpl(r,e,markdownEditorIdCounter,makeId,t,n),openDraftEditor:t=>openDraftEditorImpl(r,e,markdownEditorIdCounter,t),updateMarkdownEditorPosition:(t,n,s)=>e(i=>({markdownEditors:mapMarkdownEditors(i.markdownEditors,t,o=>({...o,position:{x:n,y:s}})),workspaceDirty:!0})),updateMarkdownEditorSize:(t,n,s)=>e(i=>({markdownEditors:mapMarkdownEditors(i.markdownEditors,t,o=>({...o,width:n,height:s})),workspaceDirty:!0})),updateMarkdownEditorBaseline:(t,n)=>e(s=>({markdownEditors:mapMarkdownEditors(s.markdownEditors,t,i=>({...i,baseline:n})),workspaceDirty:!0})),removeMarkdownEditor:t=>e(n=>({markdownEditors:n.markdownEditors.filter(s=>s.id!==t),selectedMarkdownEditorId:n.selectedMarkdownEditorId===t?null:n.selectedMarkdownEditorId,workspaceDirty:!0}))}),ACTION_BLOCK_PATTERN=/<assistant-actions>\s*([\s\S]*?)\s*<\/assistant-actions>/i;function isRecord(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function isNonEmptyString(e){return typeof e=="string"&&e.trim().length>0}function isOptionalStringArray(e){return e===void 0||Array.isArray(e)&&e.every(r=>isNonEmptyString(r))}function isDraftBlueprint(e){return isRecord(e)?isNonEmptyString(e.name)&&isNonEmptyString(e.content)&&(e.ref===void 0||isNonEmptyString(e.ref))&&(e.slug===void 0||isNonEmptyString(e.slug))&&(e.description===void 0||isNonEmptyString(e.description))&&isOptionalStringArray(e.tags)&&(e.openEditor===void 0||typeof e.openEditor=="boolean"):!1}function isModelBlueprint(e){return isRecord(e)&&isNonEmptyString(e.provider)&&isNonEmptyString(e.modelId)}function hasActLocator(e){return isNonEmptyString(e.actId)||isNonEmptyString(e.actRef)||isNonEmptyString(e.actName)}function hasPerformerLocator(e){return isNonEmptyString(e.performerId)||isNonEmptyString(e.performerRef)||isNonEmptyString(e.performerName)}function hasParticipantLocator(e,r){const t=r[`${e}ParticipantKey`],n=r[`${e}PerformerId`],s=r[`${e}PerformerRef`],i=r[`${e}PerformerName`];return isNonEmptyString(t)||isNonEmptyString(n)||isNonEmptyString(s)||isNonEmptyString(i)}function isPerformerBlueprint(e){return isRecord(e)?isNonEmptyString(e.name)&&(e.ref===void 0||isNonEmptyString(e.ref))&&(e.talUrn===void 0||e.talUrn===null||isNonEmptyString(e.talUrn))&&(e.talDraftId===void 0||isNonEmptyString(e.talDraftId))&&(e.talDraftRef===void 0||isNonEmptyString(e.talDraftRef))&&(e.talDraft===void 0||isDraftBlueprint(e.talDraft))&&isOptionalStringArray(e.danceUrns)&&isOptionalStringArray(e.danceDraftIds)&&isOptionalStringArray(e.danceDraftRefs)&&(e.danceDrafts===void 0||Array.isArray(e.danceDrafts)&&e.danceDrafts.every(r=>isDraftBlueprint(r)))&&(e.model===void 0||e.model===null||isModelBlueprint(e.model))&&isOptionalStringArray(e.mcpServerNames):!1}function isActRelationBlueprint(e){return isRecord(e)?hasParticipantLocator("source",e)&&hasParticipantLocator("target",e)&&(e.direction===void 0||e.direction==="both"||e.direction==="one-way")&&(e.name===void 0||isNonEmptyString(e.name))&&(e.description===void 0||isNonEmptyString(e.description)):!1}function isValidAssistantAction(e){if(!isRecord(e)||!isNonEmptyString(e.type))return!1;switch(e.type){case"createTalDraft":case"createDanceDraft":return isNonEmptyString(e.name)&&isNonEmptyString(e.content)&&(e.slug===void 0||isNonEmptyString(e.slug))&&(e.description===void 0||isNonEmptyString(e.description))&&isOptionalStringArray(e.tags)&&(e.openEditor===void 0||typeof e.openEditor=="boolean");case"createPerformer":case"createAct":return isNonEmptyString(e.name);case"createPerformerBlueprint":return isPerformerBlueprint(e);case"createActBlueprint":return isNonEmptyString(e.name)&&(e.ref===void 0||isNonEmptyString(e.ref))&&(e.description===void 0||isNonEmptyString(e.description))&&isOptionalStringArray(e.participantPerformerIds)&&isOptionalStringArray(e.participantPerformerRefs)&&isOptionalStringArray(e.participantPerformerNames)&&(e.participantBlueprints===void 0||Array.isArray(e.participantBlueprints)&&e.participantBlueprints.every(r=>isPerformerBlueprint(r)))&&(e.relations===void 0||Array.isArray(e.relations)&&e.relations.every(r=>isActRelationBlueprint(r)));case"attachPerformerToAct":return hasActLocator(e)&&hasPerformerLocator(e);case"connectPerformers":return hasActLocator(e)&&hasParticipantLocator("source",e)&&hasParticipantLocator("target",e)&&(e.direction===void 0||e.direction==="both"||e.direction==="one-way")&&(e.name===void 0||isNonEmptyString(e.name))&&(e.description===void 0||isNonEmptyString(e.description));case"setPerformerModel":return hasPerformerLocator(e)&&isNonEmptyString(e.provider)&&isNonEmptyString(e.modelId);case"setPerformerTal":return hasPerformerLocator(e)&&(e.talUrn===null||isNonEmptyString(e.talUrn)||isNonEmptyString(e.talDraftId)||isNonEmptyString(e.talDraftRef));case"addPerformerDance":return hasPerformerLocator(e)&&(isNonEmptyString(e.danceUrn)||isNonEmptyString(e.danceDraftId)||isNonEmptyString(e.danceDraftRef));case"addPerformerMcp":return hasPerformerLocator(e)&&isNonEmptyString(e.mcpServerName);default:return!1}}function normalizeEnvelope(e){if(!e||typeof e!="object")return null;const r=e;return r.version!==1||!Array.isArray(r.actions)||!r.actions.every(t=>isValidAssistantAction(t))?null:{version:1,actions:r.actions}}function extractAssistantActionEnvelope(e){const r=e.match(ACTION_BLOCK_PATTERN);if(!r)return{content:e.trim(),envelope:null};let t=null;try{t=normalizeEnvelope(JSON.parse(r[1]))}catch{t=null}return{content:e.replace(ACTION_BLOCK_PATTERN,"").trim(),envelope:t}}function getAssistantMessageActions(e){var r,t,n;return(t=(r=e.metadata)==null?void 0:r.assistantActions)!=null&&t.length?e.metadata.assistantActions:((n=extractAssistantActionEnvelope(e.content).envelope)==null?void 0:n.actions)||[]}function stripAssistantActionBlock(e){return extractAssistantActionEnvelope(e).content}function extractAssistantErrorMessage(e){var t,n;const r=(t=e.info)==null?void 0:t.error;return r?typeof((n=r.data)==null?void 0:n.message)=="string"&&r.data.message.trim()?r.data.message.trim():typeof r.message=="string"&&r.message.trim()?r.message.trim():"OpenCode session failed.":null}function mapPartToChatMessagePart(e){if(!e.id||!e.type)return null;if(e.type==="reasoning")return{id:e.id,type:"reasoning",content:e.text||""};if(e.type==="tool"){const r=e.state||{},t=r.status==="pending"||r.status==="running"||r.status==="completed"||r.status==="error"?r.status:"pending";return{id:e.id,type:"tool",tool:{name:e.tool||"unknown",callId:e.callID||e.id,status:t,title:r.title,input:r.input,output:r.output,error:r.error,time:r.time}}}return e.type==="step-start"||e.type==="step-finish"?{id:e.id,type:e.type,step:e.type==="step-finish"?{reason:e.reason,cost:e.cost,tokens:e.tokens?{input:e.tokens.input,output:e.tokens.output,reasoning:e.tokens.reasoning}:void 0}:void 0}:e.type==="compaction"?{id:e.id,type:"compaction",compaction:{auto:!!e.auto,overflow:e.overflow}}:null}const PROMPT_SECTION_SEPARATOR=`
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
`;function stripInjectedContextFromUserMessage(e){const r=e.lastIndexOf(PROMPT_SECTION_SEPARATOR);return r===-1?e:e.slice(r+PROMPT_SECTION_SEPARATOR.length)}function mapSessionMessageToChatMessage(e){var d,u,f,x,h,g;const r=((d=e.info)==null?void 0:d.role)||e.role||"assistant",t=((u=e.parts)==null?void 0:u.filter(A=>A.type==="text").map(A=>A.text||"").join(`
|
|
58
|
+
`))||e.text||"",n=r==="user"?stripInjectedContextFromUserMessage(t):t,s=extractAssistantErrorMessage(e),i=extractAssistantActionEnvelope(n.trim()||s||""),o=i.content,c=s&&r==="assistant"?"system":r,l=[];if(e.parts)for(const A of e.parts){const v=mapPartToChatMessagePart(A);v&&l.push(v)}return{id:((f=e.info)==null?void 0:f.id)||e.id||`msg-${Date.now()}`,role:c,content:o,timestamp:((h=(x=e.info)==null?void 0:x.time)==null?void 0:h.created)||Date.parse(e.created_at||new Date().toISOString()),...l.length>0?{parts:l}:{},...(g=i.envelope)!=null&&g.actions.length?{metadata:{assistantActions:i.envelope.actions}}:{}}}function mapSessionMessagesToChatMessages(e){return e.map(mapSessionMessageToChatMessage)}function mergeSystemPrefixMessages(e,r){if(!(e!=null&&e.length))return r;const t=new Set(r.map(s=>s.id)),n=e.filter(s=>s.role==="system"&&!t.has(s.id));return n.length===0?r:[...n,...r]}const chatMessages=Object.freeze(Object.defineProperty({__proto__:null,mapSessionMessageToChatMessage,mapSessionMessagesToChatMessages,mergeSystemPrefixMessages},Symbol.toStringTag,{value:"Module"}));function getPerformerById(e,r){return e().performers.find(t=>t.id===r)||null}function getPerformerSessionId(e,r){return e().sessionMap[r]}function addChatMessage(e,r,t,n){e(s=>({chats:{...s.chats,[t]:[...s.chats[t]||[],n]}}))}function appendPerformerSystemMessage(e,r,t,n){addChatMessage(e,r,t,{id:`msg-${Date.now()}`,role:"system",content:n,timestamp:Date.now()})}async function syncPerformerMessages(e,r,t,n){var l;const s=await api.chat.messages(n),i=Array.isArray(s)?s:s.messages||[],o=mapSessionMessagesToChatMessages(i),c=mergeSystemPrefixMessages(r().chatPrefixes[t],o);return e(d=>({chats:{...d.chats,[t]:c}})),r().registerBinding(t,n),r().seEntities[n]||r().upsertSession({id:n,status:r().seStatuses[n]||{type:"idle"}}),r().setSessionMessages(n,o),((l=getPerformerById(r,t))==null?void 0:l.executionMode)==="safe"&&r().refreshSafeOwner("performer",t),i}function createChatApprovals(e,r){return{respondToPermission:async(t,n,s)=>{const i=r().sePermissions[t]||r().pendingPermissions[t];e(o=>{const c={...o.pendingPermissions},l={...o.sePermissions};return delete c[t],delete l[t],{pendingPermissions:c,sePermissions:l}});try{await api.chat.respondPermission(t,n,s)}catch(o){console.error("Failed to respond to permission:",o),i&&e(c=>({pendingPermissions:{...c.pendingPermissions,[t]:i},sePermissions:{...c.sePermissions,[t]:i}})),showToast(formatStudioApiErrorMessage(o),"error")}},respondToQuestion:async(t,n,s)=>{const i=r().seQuestions[t]||r().pendingQuestions[t];e(o=>{const c={...o.pendingQuestions},l={...o.seQuestions};return delete c[t],delete l[t],{pendingQuestions:c,seQuestions:l}});try{await api.chat.respondQuestion(n,s)}catch(o){console.error("Failed to respond to question:",o),i&&e(c=>({pendingQuestions:{...c.pendingQuestions,[t]:i},seQuestions:{...c.seQuestions,[t]:i}})),showToast(formatStudioApiErrorMessage(o),"error")}},rejectQuestion:async(t,n)=>{const s=r().seQuestions[t]||r().pendingQuestions[t];e(i=>{const o={...i.pendingQuestions},c={...i.seQuestions};return delete o[t],delete c[t],{pendingQuestions:o,seQuestions:c}});try{await api.chat.rejectQuestion(n)}catch(i){console.error("Failed to reject question:",i),s&&e(o=>({pendingQuestions:{...o.pendingQuestions,[t]:s},seQuestions:{...o.seQuestions,[t]:s}})),showToast(formatStudioApiErrorMessage(i),"error")}}}}const ASSISTANT_PERFORMER_ID="studio-assistant",createAssistantSlice=e=>({isAssistantOpen:!1,assistantModel:null,assistantAvailableModels:[],appliedAssistantActionMessageIds:{},assistantActionResults:{},toggleAssistant:()=>{e(r=>({isAssistantOpen:!r.isAssistantOpen}))},setAssistantModel:r=>e({assistantModel:r}),setAssistantAvailableModels:r=>e({assistantAvailableModels:r}),markAssistantActionsApplied:r=>e(t=>({appliedAssistantActionMessageIds:{...t.appliedAssistantActionMessageIds,[r]:!0}})),recordAssistantActionResult:(r,t)=>e(n=>({assistantActionResults:{...n.assistantActionResults,[r]:t}})),resetAssistantRuntimeState:()=>e({assistantModel:null,assistantAvailableModels:[],appliedAssistantActionMessageIds:{},assistantActionResults:{}})}),EMPTY_RUNTIME_CONFIG={talRef:null,danceRefs:[],model:null,modelVariant:null,agentId:"build",mcpServerNames:[],danceDeliveryMode:"auto",planMode:!1};function performerByRegistryUrn(e,r){return e.find(t=>{var n;return((n=t.meta)==null?void 0:n.derivedFrom)===r})||null}function performerByDraftId(e,r){return e.find(t=>{var n;return t.id===r||((n=t.meta)==null?void 0:n.derivedFrom)===`draft:${r}`})||null}function resolveParticipantSummary(e,r,t){var i,o,c,l;const n=e().performers,s=((i=t==null?void 0:t.performerRef)==null?void 0:i.kind)==="draft"?performerByDraftId(n,t.performerRef.draftId):((o=t==null?void 0:t.performerRef)==null?void 0:o.kind)==="registry"?performerByRegistryUrn(n,t.performerRef.urn):null;return{key:r,performerName:(s==null?void 0:s.name)||(t==null?void 0:t.displayName)||(((c=t==null?void 0:t.performerRef)==null?void 0:c.kind)==="registry"?t.performerRef.urn:((l=t==null?void 0:t.performerRef)==null?void 0:l.draftId)||r),performerId:(s==null?void 0:s.id)||null}}function resolveActSummary(e,r){const t=Object.entries(r.participants||{}).map(([s,i])=>resolveParticipantSummary(e,s,i)),n=(r.relations||[]).map(s=>({id:s.id,name:s.name,description:s.description,between:s.between,direction:s.direction}));return{id:r.id,name:r.name,participants:t,relations:n}}function isAssistantPerformerId(e){return e===ASSISTANT_PERFORMER_ID}function buildAssistantStageContext(e){const r=e();return r.workingDir?{workingDir:r.workingDir,performers:r.performers.map(t=>{var n;return{id:t.id,name:t.name,model:t.model?{provider:t.model.provider,modelId:t.model.modelId}:null,talUrn:((n=t.talRef)==null?void 0:n.kind)==="registry"?t.talRef.urn:null,danceUrns:t.danceRefs.filter(s=>s.kind==="registry").map(s=>s.urn)}}),acts:r.acts.map(t=>resolveActSummary(e,t)),drafts:Object.values(r.drafts).filter(t=>t.kind==="tal"||t.kind==="dance").map(t=>({id:t.id,kind:t.kind,name:t.name,description:t.description,tags:t.tags})),availableModels:r.assistantAvailableModels.map(t=>({provider:t.provider,providerName:t.providerName,modelId:t.modelId,name:t.name}))}:null}function resolveChatRuntimeTarget(e,r){const t=e();if(isAssistantPerformerId(r))return{isAssistant:!0,name:"Studio Assistant",runtimeConfig:{...EMPTY_RUNTIME_CONFIG,model:t.assistantModel?{provider:t.assistantModel.provider,modelId:t.assistantModel.modelId}:null},executionMode:"direct",assistantContext:buildAssistantStageContext(e)};const n=t.performers.find(s=>s.id===r)||null;return n?{isAssistant:!1,name:n.name||"Untitled Performer",runtimeConfig:resolvePerformerRuntimeConfig(n),executionMode:n.executionMode==="safe"?"safe":"direct",assistantContext:null}:null}function buildActParticipantChatKey(e,r,t){return`act:${e}:thread:${r}:participant:${t}`}function createChatSendActions(e,r,t){return{sendMessage:async(n,s,i,o=[])=>{var v,S;const c=(y,k)=>{e(R=>({chats:{...R.chats,[y]:(R.chats[y]||[]).filter(T=>T.id!==k)}}))},l=(y,k,R)=>{c(y,k),R&&(r().removeSessionMessage(R,k),r().setSessionLoading(R,!1))},d=(y,k)=>{r().registerBinding(y,k),r().seEntities[k]||r().upsertSession({id:k,status:{type:"idle"}})};let u=r().sessionMap[n];const f=resolveChatRuntimeTarget(r,n),x=getPerformerById(r,n),h=(f==null?void 0:f.runtimeConfig)||{talRef:null,danceRefs:[],model:null,modelVariant:null,agentId:"build",mcpServerNames:[],danceDeliveryMode:"auto",planMode:!1};if(!hasModelConfig(h.model))return;const g={id:`temp-${Date.now()}`,role:"user",content:s,timestamp:Date.now(),attachments:i&&i.length>0?i.map(y=>({type:y.type,filename:y.filename,mime:y.mime})):void 0,metadata:{agentName:h.agentId||"build",modelId:(v=h.model)==null?void 0:v.modelId,provider:(S=h.model)==null?void 0:S.provider,variant:h.modelVariant||void 0}};addChatMessage(e,r,n,g);const A=r().sessionMap[n];if(A&&(d(n,A),r().clearSessionRevert(A),r().appendSessionMessage(A,g),r().setSessionLoading(A,!0)),e({loadingPerformerId:n}),r().initRealtimeEvents(),!u)try{u=(await t(n)).sessionId||void 0,u&&(d(n,u),r().clearSessionRevert(u),r().appendSessionMessage(u,g),r().setSessionLoading(u,!0))}catch(y){console.error("Failed to create session",y),l(n,g.id),appendPerformerSystemMessage(e,r,n,formatStudioApiErrorMessage(y)),e({loadingPerformerId:null});return}if(!u){e({loadingPerformerId:null});return}try{await api.chat.send(u,{message:s,performer:{performerId:n,performerName:(f==null?void 0:f.name)||(x==null?void 0:x.name)||"Untitled Performer",talRef:h.talRef,danceRefs:h.danceRefs,extraDanceRefs:o,model:h.model,modelVariant:h.modelVariant,agentId:h.agentId,mcpServerNames:h.mcpServerNames,danceDeliveryMode:h.danceDeliveryMode,planMode:h.planMode},attachments:i,assistantContext:(f==null?void 0:f.assistantContext)||null})}catch(y){l(n,g.id,u);const k={id:`msg-${Date.now()}`,role:"system",content:formatStudioApiErrorMessage(y),timestamp:Date.now()};addChatMessage(e,r,n,k),u&&(r().appendSessionMessage(u,k),r().setSessionLoading(u,!1)),e({loadingPerformerId:null})}},sendActMessage:async(n,s,i,o)=>{var k,R;const c=(T,C)=>{e(b=>({chats:{...b.chats,[T]:(b.chats[T]||[]).filter(B=>B.id!==C)}}))},l=(T,C,b)=>{c(T,C),b&&(r().removeSessionMessage(b,C),r().setSessionLoading(b,!1))},d=(T,C)=>{r().registerBinding(T,C),r().seEntities[C]||r().upsertSession({id:C,status:{type:"idle"}})},u=r().acts.find(T=>T.id===n);if(!u||!s)return;const f=u.participants[i];if(!f)return;const x=f.displayName||i,h=buildActParticipantChatKey(n,s,i);let g=null;if(f.performerRef.kind==="draft"){const T=f.performerRef.draftId;g=r().performers.find(C=>{var b;return C.id===T||((b=C.meta)==null?void 0:b.derivedFrom)===`draft:${T}`})||null}else{const T=f.performerRef.urn;g=r().performers.find(C=>{var b;return((b=C.meta)==null?void 0:b.derivedFrom)===T})||null}if(!g){const T=f.performerRef.kind==="registry"?f.performerRef.urn:f.performerRef.draftId;appendPerformerSystemMessage(e,r,h,`Cannot resolve performer for participant "${x}" (ref: ${T}). No matching local performer node found. Try re-importing the Act or creating a performer manually.`);return}const A=resolvePerformerRuntimeConfig(g);if(!hasModelConfig(A.model)){appendPerformerSystemMessage(e,r,h,`Model not configured for performer "${g.name}". Open the performer editor and set up a model before sending messages.`);return}const v={id:`temp-${Date.now()}`,role:"user",content:o,timestamp:Date.now(),metadata:{agentName:A.agentId||"build",modelId:(k=A.model)==null?void 0:k.modelId,provider:(R=A.model)==null?void 0:R.provider,variant:A.modelVariant||void 0}};addChatMessage(e,r,h,v);const S=r().sessionMap[h];S&&(d(h,S),r().clearSessionRevert(S),r().appendSessionMessage(S,v),r().setSessionLoading(S,!0)),e({loadingPerformerId:h}),r().initRealtimeEvents();let y=r().sessionMap[h];if(!y)try{const T=await api.chat.createSession(h,(g==null?void 0:g.name)||"Performer","","direct",n);y=T.sessionId,e(C=>({sessionMap:{...C.sessionMap,[h]:T.sessionId},actThreads:{...C.actThreads,[n]:(C.actThreads[n]||[]).map(b=>b.id!==s?b:{...b,participantSessions:{...b.participantSessions,[i]:T.sessionId}})}})),d(h,T.sessionId),r().clearSessionRevert(T.sessionId),r().appendSessionMessage(T.sessionId,v),r().setSessionLoading(T.sessionId,!0),await r().listSessions()}catch(T){console.error("Failed to create Act session",T),l(h,v.id),appendPerformerSystemMessage(e,r,h,formatStudioApiErrorMessage(T)),e({loadingPerformerId:null});return}if(!y){e({loadingPerformerId:null});return}try{typeof r().saveWorkspace=="function"&&await r().saveWorkspace(),await api.chat.send(y,{message:o,performer:{performerId:h,performerName:(g==null?void 0:g.name)||"Performer",talRef:A.talRef,danceRefs:A.danceRefs,model:A.model,modelVariant:A.modelVariant,agentId:A.agentId,mcpServerNames:A.mcpServerNames,danceDeliveryMode:A.danceDeliveryMode,planMode:A.planMode},actId:n,actThreadId:s})}catch(T){l(h,v.id,y);const C={id:`msg-${Date.now()}`,role:"system",content:formatStudioApiErrorMessage(T),timestamp:Date.now()};addChatMessage(e,r,h,C),y&&(r().appendSessionMessage(y,C),r().setSessionLoading(y,!1)),e({loadingPerformerId:null})}},executeSlashCommand:async(n,s)=>{const i=r(),o=r().sessionMap[n];if(o){e({loadingPerformerId:n}),r().setSessionLoading(o,!0);try{if(s==="/share"){const c=await api.chat.share(o);i.addChatMessage(n,{id:`msg-${Date.now()}`,role:"assistant",content:`Session shared at: ${c.url}`,timestamp:Date.now()})}}catch(c){i.addChatMessage(n,{id:`msg-${Date.now()}`,role:"system",content:formatStudioApiErrorMessage(c),timestamp:Date.now()})}finally{e({loadingPerformerId:null}),r().setSessionLoading(o,!1)}}}}}function createChatSessionManagement(e,r){const t=async(s,i)=>{const o=getPerformerById(r,s),c=resolveChatRuntimeTarget(r,s),l=(i==null?void 0:i.performerName)||(c==null?void 0:c.name)||(o==null?void 0:o.name)||"Untitled Performer",d=(c==null?void 0:c.runtimeConfig)||{talRef:null,danceRefs:[],model:null,modelVariant:null,agentId:"build",mcpServerNames:[],danceDeliveryMode:"auto",planMode:!1};if(!hasModelConfig(d.model))return{sessionId:null,runtimeConfig:d};const u=(i==null?void 0:i.executionMode)||(c==null?void 0:c.executionMode)||"direct",x=(await api.chat.createSession(s,l,"",u,i==null?void 0:i.actId)).sessionId,h={sessionMap:{...r().sessionMap,[s]:x}};return i!=null&&i.resetMessages&&(h.chats={...r().chats,[s]:i.resetMessages},h.chatPrefixes={...r().chatPrefixes,[s]:i.resetMessages}),e(()=>h),r().registerBinding(s,x),r().upsertSession({id:x,title:l,createdAt:Date.now(),status:{type:"idle"}}),i!=null&&i.resetMessages&&r().setSessionMessages(x,i.resetMessages),(c==null?void 0:c.executionMode)==="safe"&&r().forceReconnectRealtimeEvents(),await r().listSessions(),{sessionId:x,runtimeConfig:d}};return{createFreshSession:t,clearSession:s=>{const i=r().sessionMap[s];e(o=>{const c={...o.chats};delete c[s];const l={...o.chatPrefixes};delete l[s];const d={...o.sessionMap};return delete d[s],{chats:c,chatPrefixes:l,sessionMap:d,selectedPerformerSessionId:o.selectedPerformerId===s?null:o.selectedPerformerSessionId,performers:o.performers.map(u=>u.id===s?{...u,activeSessionId:void 0}:u)}}),i&&(r().clearSessionData(i),r().unregisterBinding(s),r().clearSessionRevert(i))},startNewSession:async s=>{const i=resolveChatRuntimeTarget(r,s);if(!i||!hasModelConfig(i.runtimeConfig.model)){r().clearSession(s);return}try{await t(s,{resetMessages:[]}),e({selectedPerformerSessionId:null})}catch(o){console.error("Failed to start new session",o),appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(o))}},abortChat:async s=>{const i=getPerformerSessionId(r,s);if(i)try{await api.chat.abort(i),await syncPerformerMessages(e,r,s,i),appendPerformerSystemMessage(e,r,s,"Stopped the current turn.")}catch(o){console.error("Failed to abort chat",o),appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(o))}e({loadingPerformerId:null}),i&&r().setSessionLoading(i,!1)},undoLastTurn:async s=>{const i=getPerformerSessionId(r,s);if(!i)return;const o=[...r().chats[s]||[]].reverse().find(c=>c.role==="user");if(!o){appendPerformerSystemMessage(e,r,s,"No prior turn is available to undo.");return}e({loadingPerformerId:s}),r().setSessionLoading(i,!0);try{const c=await api.chat.revert(i,o.id),l=readSessionRevert(c);l&&r().setSessionRevert(i,l),await syncPerformerMessages(e,r,s,i)}catch(c){appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(c))}finally{e({loadingPerformerId:null}),r().setSessionLoading(i,!1)}},rehydrateSessions:async()=>{const s=r(),i=Object.entries(s.sessionMap);if(i.length===0)return;const o=[];for(const[c,l]of i)try{await syncPerformerMessages(e,r,c,l)}catch(d){console.error(`Failed to rehydrate session for performer ${c}:`,d),o.push(c)}o.length>0&&e(c=>{const l={...c.sessionMap};for(const d of o)delete l[d];return{sessionMap:l,performers:c.performers.map(d=>o.includes(d.id)?{...d,activeSessionId:void 0}:d)}})},revertSession:async(s,i)=>{const c=r().sessionMap[s];if(c){e({loadingPerformerId:s}),r().setSessionLoading(c,!0);try{const l=await api.chat.revert(c,i),d=readSessionRevert(l);d&&r().setSessionRevert(c,d),await syncPerformerMessages(e,r,s,c)}catch(l){console.error("Failed to revert session",l),appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(l))}finally{e({loadingPerformerId:null}),r().setSessionLoading(c,!1)}}},restoreRevertedMessage:async(s,i)=>{var f;const o=r(),c=o.sessionMap[s];if(!c)return;const l=o.sessionReverts[c];if(!(l!=null&&l.messageId))return;const u=(o.seMessages[c]||o.chats[s]||[]).find(x=>x.role==="user"&&x.id>i);e({loadingPerformerId:s}),r().setSessionLoading(c,!0);try{if((f=o.seStatuses[c])!=null&&f.type&&o.seStatuses[c].type!=="idle"&&await api.chat.abort(c).catch(()=>{}),!u)await api.chat.unrevert(c),r().clearSessionRevert(c);else{const x=await api.chat.revert(c,u.id),h=readSessionRevert(x);h?r().setSessionRevert(c,h):r().clearSessionRevert(c)}await syncPerformerMessages(e,r,s,c)}catch(x){console.error("Failed to restore reverted message",x),appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(x))}finally{e({loadingPerformerId:null}),r().setSessionLoading(c,!1)}},getDiff:async s=>{const o=r().sessionMap[s];if(!o)return[];try{return await api.chat.diff(o)}catch(c){return console.error("Failed to get diff",c),appendPerformerSystemMessage(e,r,s,formatStudioApiErrorMessage(c)),[]}},listSessions:async()=>{try{const s=await api.chat.list();e({sessions:s||[]})}catch{e({sessions:[]})}},deleteSession:async s=>{try{await api.chat.deleteSession(s);const{sessionMap:i,chats:o}=r(),c={...i},l={...o},d=[];for(const[u,f]of Object.entries(c))f===s&&(delete c[u],delete l[u],d.push(u));e(u=>({sessionMap:c,chats:l,selectedPerformerSessionId:u.selectedPerformerSessionId===s?null:u.selectedPerformerSessionId,performers:d.length>0?u.performers.map(f=>d.includes(f.id)?{...f,activeSessionId:void 0}:f):u.performers})),r().listSessions();for(const u of d)r().unregisterBinding(u);r().removeSession(s)}catch(i){console.error("Failed to delete session",i),showToast("Failed to delete session","error",{title:"Thread delete failed",dedupeKey:`thread:delete:${s}`})}},detachPerformerSession:(s,i)=>{const o=r().sessionMap[s];e(c=>{const l={...c.sessionMap};delete l[s];const d=i?[...c.chats[s]||[],{id:`msg-${Date.now()}`,role:"system",content:i,timestamp:Date.now()}]:c.chats[s]||[];return{chats:{...c.chats,[s]:d},chatPrefixes:{...c.chatPrefixes,[s]:d},sessionMap:l,selectedPerformerSessionId:c.selectedPerformerId===s?null:c.selectedPerformerSessionId,performers:c.performers.map(u=>u.id===s?{...u,activeSessionId:void 0}:u)}}),o&&(r().unregisterBinding(s),r().clearSessionRevert(o))}}}function readSessionRevert(e){if(!e||typeof e!="object")return null;const r=e.revert;return r!=null&&r.messageID?{messageId:r.messageID,...r.partID?{partId:r.partID}:{}}:null}function createChatSessionActions(e,r){const t=createChatSessionManagement(e,r);return{...createChatSendActions(e,r,t.createFreshSession),clearSession:t.clearSession,startNewSession:t.startNewSession,abortChat:t.abortChat,undoLastTurn:t.undoLastTurn,rehydrateSessions:t.rehydrateSessions,revertSession:t.revertSession,restoreRevertedMessage:t.restoreRevertedMessage,getDiff:t.getDiff,listSessions:t.listSessions,deleteSession:t.deleteSession,detachPerformerSession:t.detachPerformerSession}}const createChatSlice=(e,r)=>{const t=createChatApprovals(e,r),n=createChatSessionActions(e,r);return{chats:{},chatPrefixes:{},activeChatPerformerId:null,sessionMap:{},loadingPerformerId:null,sessions:[],pendingPermissions:{},pendingQuestions:{},todos:{},setActiveChatPerformer:s=>e({activeChatPerformerId:s}),addChatMessage:(s,i)=>addChatMessage(e,r,s,i),...t,...n}};function diagnosticMatchesWorkingDir(e,r){if(!r)return!0;try{if(e.startsWith("file://"))return decodeURIComponent(new URL(e).pathname).startsWith(r)}catch{return!1}return e.includes(r)}const queryClient=new QueryClient({defaultOptions:{queries:{retry:2,refetchOnWindowFocus:!0,staleTime:3e4}}});function invalidateRuntimeQueries(e){queryClient.invalidateQueries({queryKey:["mcp-servers",e]}),queryClient.invalidateQueries({queryKey:["runtime-tools",e]})}function handleLspDiagnostics(e,r,t){const{uri:n,diagnostics:s}=e.properties||{};if(typeof n!="string"||!diagnosticMatchesWorkingDir(n,r().workingDir))return;const i=Array.isArray(s)?s.filter(o=>!!o&&typeof o=="object"&&typeof o.message=="string"):[];t(o=>({lspDiagnostics:{...o.lspDiagnostics,[n]:i}}))}function handleLspUpdated(e){e().fetchLspStatus()}function handleMcpToolsChanged(e){invalidateRuntimeQueries(e().workingDir)}function handleMcpBrowserOpenFailed(e){var n,s;const r=(n=e.properties)==null?void 0:n.mcpName,t=(s=e.properties)==null?void 0:s.url;typeof r!="string"||typeof t!="string"||!t.trim()||showToast(`Studio could not open the browser for MCP auth (${r}).`,"warning",{title:"MCP auth needs browser",actionLabel:"Open auth",onAction:()=>{window.open(t,"_blank")},dedupeKey:`mcp-auth-open:${r}`,durationMs:8e3})}const MAX_RECONNECT_ATTEMPTS=5,BASE_RECONNECT_DELAY_MS=2e3,slotReconnectAttempts=new WeakMap,slotReconnectTimers=new WeakMap;function disposeEventSource(e){e&&(e.onmessage=null,e.onerror=null,e.close())}function getReconnectAttempts(e){return slotReconnectAttempts.get(e)||0}function resetReconnectAttempts(e){slotReconnectAttempts.set(e,0);const r=slotReconnectTimers.get(e);r&&(clearTimeout(r),slotReconnectTimers.delete(e))}function reconnectManagedEventSource(e){var f;const{slot:r,resolveWorkingDir:t,resolveExtraKey:n,createEventSource:s,onMessage:i,onDisconnect:o}=e,c=t(),l=(n==null?void 0:n())??null;if(r.getInstance()&&r.getWorkingDir()===c&&(!r.getExtraKey||r.getExtraKey()===l))return;const d=r.getInstance();d&&(disposeEventSource(d),r.setInstance(null)),resetReconnectAttempts(r),r.setWorkingDir(c),(f=r.setExtraKey)==null||f.call(r,l);const u=s();u&&(r.setInstance(u),u.onmessage=x=>{resetReconnectAttempts(r);try{const h=JSON.parse(x.data);i(h)}catch{}},u.onerror=()=>{const x=r.getInstance();x&&(x.close(),r.setInstance(null)),o==null||o();const h=getReconnectAttempts(r);if(h>=MAX_RECONNECT_ATTEMPTS)return;slotReconnectAttempts.set(r,h+1);const g=BASE_RECONNECT_DELAY_MS*Math.pow(2,h),A=setTimeout(()=>{slotReconnectTimers.delete(r);try{r.setWorkingDir(null),reconnectManagedEventSource(e)}catch{}},g);slotReconnectTimers.set(r,A)})}function closeManagedEventSource(e){const r=e.getInstance();r&&(disposeEventSource(r),e.setInstance(null))}function resetManagedEventSource(e){var r;closeManagedEventSource(e),resetReconnectAttempts(e),e.setWorkingDir(null),(r=e.setExtraKey)==null||r.call(e,null)}function resolveChatKey(e,r){const t=e.sessionToChatKey[r];if(t)return t;for(const[n,s]of Object.entries(e.sessionMap))if(s===r)return n;return null}function withoutKey(e,r){const t={...e};return delete t[r],t}function hasSession(e,r){if(e.sessionToChatKey[r])return!0;for(const t of Object.values(e.sessionMap))if(t===r)return!0;return!1}function reduceMessageUpdated(e,r,t,n,s,i){const o=s();if(!hasSession(o,e))return;const c=o.seMessages[e]||[],l=upsertMessageEnvelope(c,r,t==="user"||t==="assistant"||t==="system"?t:"assistant",n||Date.now());i({seMessages:{...o.seMessages,[e]:l}})}function reduceMessageRemoved(e,r,t,n){const s=t();if(!hasSession(s,e))return;const i=s.seMessages[e]||[];n({seMessages:{...s.seMessages,[e]:i.filter(o=>o.id!==r)}})}function reduceMessagePartUpdated(e,r,t,n,s){const i=n();if(!hasSession(i,e))return;const o=i.seMessages[e]||[];if(t.type==="text"){const c=typeof t.text=="string"?t.text:"",l=upsertMessageText(o,r,c);s({seMessages:{...i.seMessages,[e]:l}});return}if(t.type==="reasoning"){const c={id:t.id,type:"reasoning",content:typeof t.text=="string"?t.text:""},l=upsertMessagePart(o,r,c);s({seMessages:{...i.seMessages,[e]:l}});return}if(t.type==="tool"){const c=t.state||{},l={id:t.id,type:"tool",tool:{name:t.tool||"unknown",callId:t.callID||t.id,status:c.status||"pending",title:c.title,input:c.input,output:c.output,error:c.error,time:c.time}},d=upsertMessagePart(o,r,l);s({seMessages:{...i.seMessages,[e]:d}});return}if(t.type==="step-start"||t.type==="step-finish"){const c={id:t.id,type:t.type,step:t.type==="step-finish"?{reason:t.reason,cost:typeof t.cost=="number"?t.cost:void 0,tokens:t.tokens}:void 0},l=upsertMessagePart(o,r,c);s({seMessages:{...i.seMessages,[e]:l}});return}if(t.type==="compaction"){const c={id:t.id,type:"compaction",compaction:{auto:!!t.auto,overflow:t.overflow}},l=upsertMessagePart(o,r,c);s({seMessages:{...i.seMessages,[e]:l}})}}function reduceMessagePartDelta(e,r,t,n,s,i){var x;const o=s();if(!hasSession(o,e))return;const c=o.seMessages[e]||[],l=c.find(h=>h.id===r),d=(x=l==null?void 0:l.parts)==null?void 0:x.find(h=>h.id===t);if((d==null?void 0:d.type)==="reasoning"){const h=upsertMessagePart(c,r,{...d,content:(d.content||"")+n});i({seMessages:{...o.seMessages,[e]:h}});return}const u=(l==null?void 0:l.content)||"",f=upsertMessageText(c,r,u+n);i({seMessages:{...o.seMessages,[e]:f}})}function reduceMessagePartRemoved(e,r,t,n,s){const i=n();if(!hasSession(i,e))return;const o=i.seMessages[e]||[],c=removeMessagePartFromMessages(o,r,t);s({seMessages:{...i.seMessages,[e]:c}})}function reduceSessionStatus(e,r,t,n){const s=t();if(hasSession(s,e)){if(n({seStatuses:{...s.seStatuses,[e]:r}}),r.type==="busy"){n({sessionLoading:{...t().sessionLoading,[e]:!0}});const i=t().seMessages[e]||[],o=`retry-${e}`;i.some(c=>c.id===o)&&n({seMessages:{...t().seMessages,[e]:i.filter(c=>c.id!==o)}})}if(r.type==="idle"){n({sessionLoading:withoutKey(t().sessionLoading,e)});const i=t().seMessages[e]||[],o=`retry-${e}`;i.some(c=>c.id===o)&&n({seMessages:{...t().seMessages,[e]:i.filter(c=>c.id!==o)}})}if(r.type==="retry"){const i=t().seMessages[e]||[],o=`retry-${e}`,c=`⏳ Retrying (Attempt ${r.attempt}): ${r.message||"Operation failed, retrying..."}`,l=i.findIndex(d=>d.id===o);if(l>=0){const d=[...i];d[l]={...d[l],content:c},n({seMessages:{...t().seMessages,[e]:d}})}else n({seMessages:{...t().seMessages,[e]:[...i,{id:o,role:"system",content:c,timestamp:Date.now()}]}})}}}function reduceSessionError(e,r,t,n){const s=t();if(!hasSession(s,e))return;const i=withoutKey(s.sessionLoading,e);n({sessionLoading:i,seStatuses:{...s.seStatuses,[e]:{type:"error",message:r}}});const c=(t().seMessages[e]||[]).map(l=>!l.parts||!l.parts.some(u=>u.type==="tool"&&u.tool&&(u.tool.status==="running"||u.tool.status==="pending"))?l:{...l,parts:l.parts.map(u=>u.type==="tool"&&u.tool&&(u.tool.status==="running"||u.tool.status==="pending")?{...u,tool:{...u.tool,status:"error"}}:u)});n({seMessages:{...t().seMessages,[e]:[...c,{id:`system-${Date.now()}`,role:"system",content:`⚠️ ${r}`,timestamp:Date.now()}]}})}function reducePermissionAsked(e,r,t,n){const s=t();if(!hasSession(s,e))return;const i=withoutKey(s.sessionLoading,e);n({sePermissions:{...s.sePermissions,[e]:r},sessionLoading:i})}function reducePermissionReplied(e,r,t){t(n=>({sePermissions:withoutKey(n.sePermissions,e)}))}function reduceQuestionAsked(e,r,t,n){const s=t();if(!hasSession(s,e))return;const i=withoutKey(s.sessionLoading,e);n({seQuestions:{...s.seQuestions,[e]:r},sessionLoading:i})}function reduceTodoUpdated(e,r,t,n){const s=t(),i=resolveChatKey(s,e);n({seTodos:{...s.seTodos,[e]:r,...i&&i!==e?{[i]:r}:{}}})}function upsertMessagePart(e,r,t){const n=[...e],s=n.findIndex(l=>l.id===r);if(s===-1)return n.push({id:r,role:"assistant",content:"",timestamp:Date.now(),parts:[t]}),n;const i=n[s],o=i.parts?[...i.parts]:[],c=o.findIndex(l=>l.id===t.id);return c===-1?o.push(t):o[c]=t,n[s]={...i,parts:o},n}function removeMessagePartFromMessages(e,r,t){var o;const n=[...e],s=n.findIndex(c=>c.id===r);if(s===-1)return n;const i=n[s];return(o=i.parts)!=null&&o.length&&(n[s]={...i,parts:i.parts.filter(c=>c.id!==t)}),n}function findLatestTempUserMessageIndex(e){for(let r=e.length-1;r>=0;r--){const t=e[r];if(t.role==="user"&&t.id.startsWith("temp-"))return r}return-1}function upsertMessageEnvelope(e,r,t,n){const s=[...e],i=s.findIndex(o=>o.id===r);if(i>=0)return s[i]={...s[i],role:t,timestamp:n},s;if(t==="user"){const o=findLatestTempUserMessageIndex(s);if(o>=0)return s[o]={...s[o],id:r,role:t,timestamp:n},s}return s.push({id:r,role:t,content:"",timestamp:n}),s}function upsertMessageText(e,r,t,n=Date.now()){const s=[...e],i=s.findIndex(o=>o.id===r);return i===-1?(s.push({id:r,role:"assistant",content:t,timestamp:n}),s):(s[i]={...s[i],content:t},s)}const HEARTBEAT_TIMEOUT_MS=3e4;function createEventIngest(e){const{get:r,set:t,onHeartbeatTimeout:n,onSessionIdle:s,onSessionCompacted:i}=e;let o=[],c=null,l=null;function d(){l&&clearTimeout(l),l=setTimeout(()=>{n==null||n()},HEARTBEAT_TIMEOUT_MS)}function u(){l&&(clearTimeout(l),l=null)}function f(g){var y,k;if(g.length<=1)return g;const A=[],v=new Map,S=new Map;for(let R=0;R<g.length;R++){const T=g[R],C=T.type;if(C==="session.status"){const b=((y=T.properties)==null?void 0:y.sessionID)??((k=T.properties)==null?void 0:k.sessionId);if(b){const B=v.get(b);B!==void 0&&(A[B]=null),v.set(b,A.length)}}if(C==="message.part.delta"){const b=T.properties||{},B=`${b.sessionID}:${b.messageID}:${b.partID}`,U=S.get(B);if(U!==void 0){U.delta+=b.delta||"";continue}S.set(B,{idx:A.length,delta:b.delta||""})}else S.clear();A.push(T)}for(const[,{idx:R,delta:T}]of S){const C=A[R];C&&C.type==="message.part.delta"&&C.properties&&(C.properties.delta=T)}return A.filter(Boolean)}function x(){if(c=null,o.length===0)return;const g=f(o);o=[];for(const A of g)h(A)}function h(g){var S;const A=g.type,v=g.properties||{};switch(A){case"message.updated":{const y=v.info;if(!(y!=null&&y.sessionID)||!(y!=null&&y.id)||typeof y.role!="string")return;reduceMessageUpdated(y.sessionID,y.id,y.role,(S=y.time)==null?void 0:S.created,r,t);return}case"message.removed":{const y=v.sessionID,k=v.messageID;if(!y||!k)return;reduceMessageRemoved(y,k,r,t);return}case"message.part.updated":{const y=v.part;if(!(y!=null&&y.sessionID)||!(y!=null&&y.messageID)||!(y!=null&&y.id))return;reduceMessagePartUpdated(y.sessionID,y.messageID,{...y,id:y.id},r,t);return}case"message.part.delta":{const{sessionID:y,messageID:k,partID:R,field:T,delta:C}=v;if(!y||!k||!R||T!=="text"||typeof C!="string")return;reduceMessagePartDelta(y,k,R,C,r,t);return}case"message.part.removed":{const{sessionID:y,messageID:k,partID:R}=v;if(!y||!k||!R)return;reduceMessagePartRemoved(y,k,R,r,t);return}case"session.status":{const y=v.sessionID,k=v.status;if(!y||!(k!=null&&k.type))return;reduceSessionStatus(y,{type:k.type,attempt:k.attempt,message:k.message},r,t),k.type==="idle"&&(s==null||s(y));return}case"session.idle":{const y=v.sessionID;if(!y)return;reduceSessionStatus(y,{type:"idle"},r,t),s==null||s(y);return}case"session.compacted":{const y=v.sessionID;if(!y)return;i==null||i(y);return}case"session.error":{const y=v.sessionID,k=v.error;if(!y)return;const R=extractErrorMessage(k);reduceSessionError(y,R,r,t);return}case"permission.asked":{const y=v;if(!(y!=null&&y.sessionID)||!(y!=null&&y.id))return;reducePermissionAsked(y.sessionID,y,r,t);return}case"permission.replied":{const y=v;if(!(y!=null&&y.sessionID))return;reducePermissionReplied(y.sessionID,r,t);return}case"question.asked":{const y=v;if(!(y!=null&&y.sessionID)||!(y!=null&&y.id))return;reduceQuestionAsked(y.sessionID,y,r,t);return}case"question.replied":case"question.rejected":{const y=v;if(!(y!=null&&y.sessionID))return;t(k=>{const{[y.sessionID]:R,...T}=k.seQuestions;return{seQuestions:T}});return}case"todo.updated":{const y=v.sessionID,k=v.todos;if(!y||!k)return;reduceTodoUpdated(y,k,r,t);return}}}return{enqueue(g){d(),o.push(g),c===null&&(c=requestAnimationFrame(x))},flushSync(){c!==null&&(cancelAnimationFrame(c),c=null),x()},dispose(){c!==null&&(cancelAnimationFrame(c),c=null),u(),o=[]},get pendingCount(){return o.length}}}function extractErrorMessage(e){const r=e&&typeof e=="object"?e:null,t=r!=null&&r.data&&typeof r.data=="object"?r.data:null;if(typeof(t==null?void 0:t.message)=="string"&&t.message.trim())return t.message.trim();if(typeof(r==null?void 0:r.message)=="string"&&r.message.trim())return r.message.trim();try{return`OpenCode session failed: ${JSON.stringify(e)}`}catch{return"OpenCode session failed."}}const EMPTY_MESSAGES=[],EMPTY_TODOS=[];function selectSessionIdForChatKey(e,r){return e.chatKeyToSession[r]||e.sessionMap[r]||null}function selectChatKeyForSession(e,r){const t=e.sessionToChatKey[r];if(t)return t;for(const[n,s]of Object.entries(e.sessionMap))if(s===r)return n;return null}function selectStreamTarget(e,r){const t=selectChatKeyForSession(e,r);return t?t.startsWith("act:")?{kind:"act-participant",chatKey:t}:{kind:"performer",performerId:t}:null}function selectMessagesForChatKey(e,r){const t=selectSessionIdForChatKey(e,r);return t&&e.seMessages[t]?mergeSystemPrefixMessages(e.chatPrefixes[r],e.seMessages[t]):e.chats[r]||EMPTY_MESSAGES}function selectChatKeyIsLoading(e,r){const t=selectSessionIdForChatKey(e,r);return t?!!e.sessionLoading[t]:e.loadingPerformerId===r}function selectPendingPermission(e,r){return e.sePermissions[r]||e.pendingPermissions[r]||null}function selectPendingQuestion(e,r){return e.seQuestions[r]||e.pendingQuestions[r]||null}function selectTodos(e,r){return e.seTodos[r]||e.todos[r]||EMPTY_TODOS}const CHAT_EVENT_TYPES=new Set(["message.updated","message.removed","message.part.updated","message.part.delta","message.part.removed","session.status","session.idle","session.compacted","session.error","permission.asked","permission.replied","question.asked","question.replied","question.rejected","todo.updated"]),FAILED_RESOLVE_RETRY_MS=2e3;function resolveSessionTarget(e,r){const t=selectStreamTarget(e,r);if(t)return t;for(const[n,s]of Object.entries(e.sessionMap))if(s===r)return n.startsWith("act:")?{kind:"act-participant",chatKey:n}:{kind:"performer",performerId:n};return null}function updateTargetMessages(e,r,t){return r.kind==="performer"?{chats:{...e.chats,[r.performerId]:t(e.chats[r.performerId]||[])}}:{chats:{...e.chats,[r.chatKey]:t(e.chats[r.chatKey]||[])}}}function parseActParticipantOwnerId(e){const r=e.match(/^act:([^:]+):thread:([^:]+):participant:(.+)$/);if(!r)return null;const[,t,n,s]=r;return{actId:t,threadId:n,participantKey:s}}function streamTargetToChatKey(e){return e.kind==="performer"?e.performerId:e.chatKey}function registerResolvedSessionBinding(e,r,t,n){const s=parseActParticipantOwnerId(n);e(i=>({sessionMap:{...i.sessionMap,[n]:t},chatKeyToSession:{...i.chatKeyToSession,[n]:t},sessionToChatKey:{...i.sessionToChatKey,[t]:n},...s?{actThreads:{...i.actThreads,[s.actId]:(i.actThreads[s.actId]||[]).map(o=>o.id!==s.threadId?o:{...o,participantSessions:{...o.participantSessions,[s.participantKey]:t}})}}:{}})),r().seEntities[t]||r().upsertSession({id:t,status:{type:"idle"}})}const createIntegrationSlice=(e,r)=>{const t=new Set,n=new Set,s=new Map;let i=null,o=null,c=null,l=null;const d={getInstance:()=>i,setInstance:v=>{i=v},getWorkingDir:()=>o,setWorkingDir:v=>{o=v}},u={getInstance:()=>c,setInstance:v=>{c=v},getWorkingDir:()=>l,setWorkingDir:v=>{l=v}};async function f(v,S){if(!t.has(S)){t.add(S);try{const y=await api.chat.messages(S),k=Array.isArray(y)?y:y.messages||[],R=mapSessionMessagesToChatMessages(k),T=streamTargetToChatKey(v);e(C=>updateTargetMessages(C,v,()=>mergeSystemPrefixMessages(C.chatPrefixes[T],R))),r().setSessionMessages(S,R)}catch{}finally{t.delete(S)}}}function x(v){const S=s.get(v);S&&Date.now()-S<FAILED_RESOLVE_RETRY_MS||n.has(v)||resolveSessionTarget(r(),v)||(n.add(v),api.chat.resolveSession(v).then(y=>{if(n.delete(v),!y.found||!y.ownerId){s.set(v,Date.now());return}s.delete(v),registerResolvedSessionBinding(e,r,v,y.ownerId);const k=resolveSessionTarget(r(),v);k&&f(k,v)}).catch(()=>{n.delete(v),s.set(v,Date.now())}))}function h(){reconnectManagedEventSource({slot:d,resolveWorkingDir:()=>r().workingDir||null,createEventSource:()=>api.chat.events(),onDisconnect:()=>{r().loadingPerformerId&&e({loadingPerformerId:null}),g.flushSync()},onMessage:v=>{var R,T;const S=v;if(S.type==="server.instance.disposed"){resetManagedEventSource(d),h();return}if(S.type==="server.connected"){r().fetchLspStatus();const C=new Set;for(const b of Object.values(r().sessionMap))b&&C.add(b);for(const b of Object.keys(r().sessionToChatKey))C.add(b);for(const b of C){const B=resolveSessionTarget(r(),b);B&&f(B,b)}return}if(S.type==="server.heartbeat")return;const y=S.properties,k=(y==null?void 0:y.sessionID)||((R=y==null?void 0:y.info)==null?void 0:R.sessionID)||((T=y==null?void 0:y.part)==null?void 0:T.sessionID);if(k){y!=null&&y.ownerId&&!r().sessionToChatKey[k]&®isterResolvedSessionBinding(e,r,k,y.ownerId);const C=resolveSessionTarget(r(),k);if(!C)x(k);else if(!r().sessionToChatKey[k]){const b=streamTargetToChatKey(C);r().registerBinding(b,k),r().seEntities[k]||r().upsertSession({id:k,status:{type:"idle"}})}}if(S.type&&CHAT_EVENT_TYPES.has(S.type)){g.enqueue(S);return}if(S.type==="lsp.client.diagnostics")return handleLspDiagnostics(S,r,e);if(S.type==="lsp.updated")return handleLspUpdated(r);if(S.type==="mcp.tools.changed")return handleMcpToolsChanged(r);if(S.type==="mcp.browser.open.failed")return handleMcpBrowserOpenFailed(S)}})}const g=createEventIngest({get:r,set:e,onHeartbeatTimeout:()=>{resetManagedEventSource(d),h()},onSessionIdle:v=>{const S=resolveSessionTarget(r(),v);S&&f(S,v)},onSessionCompacted:v=>{const S=resolveSessionTarget(r(),v);S&&f(S,v)}}),A=()=>{reconnectManagedEventSource({slot:u,resolveWorkingDir:()=>r().workingDir||null,createEventSource:()=>api.adapter.events(),onMessage:v=>{const S=v;if(S.type==="adapter.updated"){r().upsertAdapterViewProjection(S.projection);return}if(S.type==="adapter.cleared"){const k={...r().adapterViewsByPerformer[S.performerId]||{}};delete k[S.adapterId],e(R=>({adapterViewsByPerformer:{...R.adapterViewsByPerformer,[S.performerId]:k}}))}}})};return{lspServers:[],lspDiagnostics:{},fetchLspStatus:async()=>{try{const v=await api.lsp.status();e({lspServers:v})}catch{e({lspServers:[]})}},initRealtimeEvents:()=>{h(),A(),api.chat.listPendingPermissions().then(v=>{v.length!==0&&e(S=>{const y={...S.pendingPermissions},k={...S.sePermissions};for(const R of v)y[R.sessionID]=R,k[R.sessionID]=R;return{pendingPermissions:y,sePermissions:k}})}).catch(()=>{})},forceReconnectRealtimeEvents:()=>{resetManagedEventSource(d),h(),resetManagedEventSource(u),A()},cleanupRealtimeEvents:()=>{closeManagedEventSource(d),closeManagedEventSource(u),d.setWorkingDir(null),u.setWorkingDir(null),g.dispose(),t.clear(),n.clear(),s.clear()},compilePrompt:async v=>{const S=r().performers.find(k=>k.id===v);if(!S)return"// No performer selected";const y=resolvePerformerRuntimeConfig(S);if(!hasModelConfig(y.model))return"// Prompt preview unavailable.";try{const k=[],R=await api.compile(S.id,S.name,y.talRef,y.danceRefs,y.model,y.modelVariant,y.agentId,y.mcpServerNames,y.planMode,y.danceDeliveryMode,k),T=[`// OpenCode Agent: ${R.agent}`,`// Delivery Mode: ${R.deliveryMode}`];if(y.modelVariant&&T.push(`// Model Variant: ${y.modelVariant}`),R.capabilitySnapshot&&T.push(`// Model Capabilities: tools=${R.capabilitySnapshot.toolCall?"yes":"no"}, attachments=${R.capabilitySnapshot.attachment?"yes":"no"}, reasoning=${R.capabilitySnapshot.reasoning?"yes":"no"}`),R.toolName&&T.push(`// Capability Loader Tool: ${R.toolName}`),R.danceCatalog.length>0){T.push("","// Dance Catalog");for(const C of R.danceCatalog)T.push(`- ${C.urn} (${C.loadMode})${C.description?`: ${C.description}`:""}`)}if(R.toolResolution&&R.toolResolution.selectedMcpServers.length>0&&T.push("",`// Selected MCP Servers: ${R.toolResolution.selectedMcpServers.join(", ")}`),R.toolResolution&&R.toolResolution.resolvedTools.length>0){T.push("","// Resolved Tools");for(const C of R.toolResolution.resolvedTools)T.push(`- ${C}`)}if(R.toolResolution&&R.toolResolution.unavailableTools.length>0){T.push("","// Tools Not Available For Current Model");for(const C of R.toolResolution.unavailableTools)T.push(`- ${C}`)}if(R.toolResolution&&R.toolResolution.unavailableDetails.length>0){T.push("","// MCP Availability");for(const C of R.toolResolution.unavailableDetails)T.push(`- ${C.serverName}: ${C.reason}${C.toolId?` (${C.toolId})`:""}${C.detail?` — ${C.detail}`:""}`)}return T.push("",R.system),T.join(`
|
|
59
|
+
`)}catch(k){return formatStudioApiErrorComment(k)}}}},createAdapterViewSlice=e=>({adapterViewsByPerformer:{},upsertAdapterViewProjection:r=>e(t=>({adapterViewsByPerformer:{...t.adapterViewsByPerformer,[r.performerId]:{...t.adapterViewsByPerformer[r.performerId]||{},[r.adapterId]:r}}})),clearAdapterViewsForPerformer:r=>e(t=>{const n={...t.adapterViewsByPerformer};return delete n[r],{adapterViewsByPerformer:n}})});function ownerKey(e,r){return`${e}:${r}`}function withUpdatedSummary(e,r,t,n){return{safeSummaries:{...e.safeSummaries,[ownerKey(r,t)]:n}}}const createSafeModeSlice=e=>({safeSummaries:{},refreshSafeOwner:async(r,t)=>{try{const n=await api.safe.summary(r,t);return e(s=>withUpdatedSummary(s,r,t,n)),n}catch(n){return showToast(`Failed to load safe mode changes: ${n instanceof Error?n.message:"Unknown error"}`,"error",{title:"Safe mode unavailable",dedupeKey:`safe:${r}:${t}:summary`}),null}},clearSafeOwner:(r,t)=>{e(n=>{const s={...n.safeSummaries};return delete s[ownerKey(r,t)],{safeSummaries:s}})},applySafeOwner:async(r,t)=>{const n=await api.safe.apply(r,t);e(s=>withUpdatedSummary(s,r,t,n))},discardSafeOwnerFile:async(r,t,n)=>{const s=await api.safe.discardFile(r,t,n);e(i=>withUpdatedSummary(i,r,t,s))},discardAllSafeOwner:async(r,t)=>{const n=await api.safe.discardAll(r,t);e(s=>withUpdatedSummary(s,r,t,n))},undoLastSafeApply:async(r,t)=>{const n=await api.safe.undoLastApply(r,t);e(s=>withUpdatedSummary(s,r,t,n))}});function addActRelationImpl(e,r,t,n,s){var y,k,R,T;const i=e().acts.find(C=>C.id===t),o=e().performers,c=i==null?void 0:i.participants[n[0]],l=i==null?void 0:i.participants[n[1]],d=c==null?void 0:c.performerRef,u=l==null?void 0:l.performerRef,f=c?resolveBindingDisplayName(c,n[0]):n[0],x=l?resolveBindingDisplayName(l,n[1]):n[1],h=d?d.kind==="draft"?((y=o.find(C=>C.id===d.draftId))==null?void 0:y.name)||fallbackParticipantLabel(d):((k=o.find(C=>{var b;return((b=C.meta)==null?void 0:b.derivedFrom)===d.urn}))==null?void 0:k.name)||fallbackParticipantLabel(d):f,g=u?u.kind==="draft"?((R=o.find(C=>C.id===u.draftId))==null?void 0:R.name)||fallbackParticipantLabel(u):((T=o.find(C=>{var b;return((b=C.meta)==null?void 0:b.derivedFrom)===u.urn}))==null?void 0:T.name)||fallbackParticipantLabel(u):x,A={id:`rel-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,between:n,direction:s,name:`${h}_to_${g}`,description:`Communication relation between ${h} and ${g}`};let v=!1,S=null;return r(C=>({acts:C.acts.map(b=>{if(b.id!==t)return b;const B=b.relations.find(U=>{const W=U.between[0]===n[0]&&U.between[1]===n[1],K=U.between[0]===n[0]&&U.between[1]===n[1]||U.between[0]===n[1]&&U.between[1]===n[0];return s==="both"||U.direction==="both"?K:W&&U.direction===s});return B?(S=B.id,b):(v=!0,{...b,relations:[...b.relations,A]})}),workspaceDirty:!0})),v&&scheduleActRuntimeSync(e,r,t),v?A.id:S}function createActEditorState(e,r,t={}){return{actId:e,mode:r,participantKey:t.participantKey??null,relationId:t.relationId??null}}const createActSlice=(e,r)=>({acts:[],selectedActId:null,actEditorState:null,actThreads:{},activeThreadId:null,activeThreadParticipantKey:null,addAct:t=>{const n=nanoid(12),s=r().canvasCenter,o=r().acts.length*40,c={id:n,name:t,position:s?{x:s.x+o,y:s.y+200+o}:{x:200+o,y:200+o},width:ACT_DEFAULT_WIDTH,height:ACT_DEFAULT_EXPANDED_HEIGHT,participants:{},relations:[],createdAt:Date.now()};return e(l=>({acts:[...l.acts,c],selectedActId:n,selectedPerformerId:null,actEditorState:null,activeThreadId:null,activeThreadParticipantKey:null,workspaceDirty:!0})),n},removeAct:t=>{e(n=>{var o;const s=buildExitFocusModeState(n),i=(s==null?void 0:s.acts)||n.acts;return{...s,acts:i.filter(c=>c.id!==t),actThreads:Object.fromEntries(Object.entries(n.actThreads).filter(([c])=>c!==t)),selectedActId:n.selectedActId===t?null:n.selectedActId,actEditorState:((o=n.actEditorState)==null?void 0:o.actId)===t?null:n.actEditorState,activeThreadId:n.selectedActId===t?null:n.activeThreadId,activeThreadParticipantKey:n.selectedActId===t?null:n.activeThreadParticipantKey,workspaceDirty:!0}})},renameAct:(t,n)=>{e(s=>({acts:s.acts.map(i=>i.id===t?{...i,name:n}:i),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},updateActDescription:(t,n)=>{e(s=>({acts:s.acts.map(i=>i.id===t?{...i,description:n}:i),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},updateActRules:(t,n)=>{e(s=>({acts:s.acts.map(i=>i.id===t?{...i,actRules:n}:i),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},updateActSafety:(t,n)=>{e(s=>({acts:s.acts.map(i=>i.id===t?{...i,safety:n}:i),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},selectAct:t=>{const n=r(),i=(t?n.actThreads[t]||[]:[]).some(o=>o.id===n.activeThreadId)?n.activeThreadId:null;e(o=>{var c;return{selectedActId:t,selectedPerformerId:null,selectedPerformerSessionId:null,actEditorState:((c=n.actEditorState)==null?void 0:c.actId)===t?n.actEditorState:null,activeThreadId:i,activeThreadParticipantKey:n.selectedActId===t?n.activeThreadParticipantKey:null,focusedPerformerId:o.focusSnapshot?o.focusedPerformerId:null,focusedNodeType:o.focusSnapshot?o.focusedNodeType:null}}),t&&r().loadThreads(t)},toggleActVisibility:t=>{e(n=>{const s=buildExitFocusModeState(n),i=(s==null?void 0:s.acts)||n.acts;return{...s,acts:i.map(o=>o.id===t?{...o,hidden:!o.hidden}:o),workspaceDirty:!0}})},bindPerformerToAct:(t,n)=>{var u,f,x,h;const s=r();let i=null;n.kind==="draft"?i=((u=s.performers.find(g=>g.id===n.draftId))==null?void 0:u.name)??null:n.kind==="registry"&&(i=((f=s.performers.find(g=>{var A;return((A=g.meta)==null?void 0:A.derivedFrom)===n.urn}))==null?void 0:f.name)??assetUrnDisplayName(n.urn)??null),i||(i=`Participant ${Object.keys(((x=s.acts.find(g=>g.id===t))==null?void 0:x.participants)||{}).length+1}`);const o=createActParticipantKey(),l={x:Object.keys(((h=s.acts.find(g=>g.id===t))==null?void 0:h.participants)||{}).length*300,y:100},d={performerRef:n,displayName:i,position:l};return e(g=>({acts:g.acts.map(A=>A.id!==t?A:{...A,participants:{...A.participants,[o]:d}}),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t),o},attachPerformerRefToAct:(t,n)=>{var l,d;const s=r(),i=s.acts.find(u=>u.id===t);if(!i)return null;const o=Object.entries(i.participants).find(([,u])=>u.performerRef.kind==="draft"&&n.kind==="draft"&&u.performerRef.draftId===n.draftId||u.performerRef.kind==="registry"&&n.kind==="registry"&&u.performerRef.urn===n.urn);if(o)return e({selectedActId:t,selectedPerformerId:null,actEditorState:((l=s.actEditorState)==null?void 0:l.actId)===t?s.actEditorState:null}),o[0];const c=r().bindPerformerToAct(t,n);return r().autoLayoutActParticipants(t),e({selectedActId:t,selectedPerformerId:null,actEditorState:((d=s.actEditorState)==null?void 0:d.actId)===t?s.actEditorState:null}),c},attachPerformerToAct:(t,n)=>{var d,u;const s=r(),i=s.acts.find(f=>f.id===t),o=s.performers.find(f=>f.id===n);if(!i||!o)return null;const c=(u=(d=o.meta)==null?void 0:d.derivedFrom)==null?void 0:u.trim(),l=c?{kind:"registry",urn:c}:{kind:"draft",draftId:o.id};return r().attachPerformerRefToAct(t,l)},autoLayoutActParticipants:t=>{e(n=>({acts:n.acts.map(s=>s.id!==t?s:{...s,participants:autoLayoutBindings(s.participants)}),workspaceDirty:!0}))},unbindPerformerFromAct:(t,n)=>{e(s=>({acts:s.acts.map(i=>{if(i.id!==t)return i;const o={...i.participants};delete o[n];const c=i.relations.filter(l=>!l.between.includes(n));return{...i,participants:o,relations:c}}),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},updatePerformerBinding:(t,n,s)=>{e(i=>({acts:i.acts.map(o=>o.id!==t||!o.participants[n]?o:{...o,participants:{...o.participants,[n]:{...o.participants[n],...s}}}),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},openActEditor:(t,n="act",s={})=>{e({selectedActId:t,selectedPerformerId:null,actEditorState:createActEditorState(t,n,s)})},closeActEditor:()=>{e({actEditorState:null})},openActParticipantEditor:(t,n)=>{e({selectedActId:t,selectedPerformerId:null,actEditorState:createActEditorState(t,"participant",{participantKey:n})})},openActRelationEditor:(t,n)=>{e({selectedActId:t,selectedPerformerId:null,actEditorState:createActEditorState(t,"relation",{relationId:n})})},updateActParticipantPosition:(t,n,s,i)=>{e(o=>({acts:o.acts.map(c=>c.id!==t||!c.participants[n]?c:{...c,participants:{...c.participants,[n]:{...c.participants[n],position:{x:s,y:i}}}}),workspaceDirty:!0}))},addRelation:(t,n,s)=>addActRelationImpl(r,e,t,n,s),removeRelation:(t,n)=>{e(s=>{const i=s.acts.find(u=>u.id===t);if(!i)return{};const o=i.relations.filter(u=>u.id!==n),c=new Set;for(const u of o)for(const f of u.between)c.add(f);const l=o.length===0?{}:Object.fromEntries(Object.entries(i.participants).filter(([u])=>c.has(u)));let d=s.actEditorState;return(d==null?void 0:d.actId)===t&&d.mode==="participant"&&d.participantKey&&!l[d.participantKey]&&(d=createActEditorState(t,"act")),(d==null?void 0:d.actId)===t&&d.mode==="relation"&&d.relationId===n&&(d=createActEditorState(t,"act")),{acts:s.acts.map(u=>u.id!==t?u:{...u,participants:l,relations:o}),actEditorState:d,workspaceDirty:!0}}),scheduleActRuntimeSync(r,e,t)},updateRelation:(t,n,s)=>{e(i=>({acts:i.acts.map(o=>o.id!==t?o:{...o,relations:o.relations.map(c=>c.id===n?{...c,...s}:c)}),workspaceDirty:!0})),scheduleActRuntimeSync(r,e,t)},updateActPosition:(t,n,s)=>{e(i=>({acts:i.acts.map(o=>o.id===t?{...o,position:{x:n,y:s}}:o),workspaceDirty:!0}))},updateActSize:(t,n,s)=>{e(i=>({acts:i.acts.map(o=>o.id===t?{...o,width:n,height:s}:o),workspaceDirty:!0}))},updateActAuthoringMeta:(t,n)=>{e(s=>({acts:s.acts.map(i=>i.id===t?{...i,meta:{...i.meta,...n}}:i),workspaceDirty:!0}))},importActFromAsset:t=>{importActFromAssetImpl(r,e,t,{width:ACT_DEFAULT_WIDTH,height:ACT_DEFAULT_EXPANDED_HEIGHT})},createThread:async t=>createActThreadImpl(r,e,t),selectThread:(t,n)=>{e({activeThreadId:n,activeThreadParticipantKey:null,selectedActId:t,selectedPerformerId:null,selectedPerformerSessionId:null})},selectThreadParticipant:t=>{e({activeThreadParticipantKey:t})},loadThreads:async t=>loadActThreadsImpl(r,e,t),deleteThread:async(t,n)=>{await api.actRuntime.deleteThread(t,n),e(s=>{const i=(s.actThreads[t]||[]).filter(u=>u.id!==n),o=s.activeThreadId===n?null:s.activeThreadId,c=`act:${t}:thread:${n}:participant:`,l={...s.sessionMap},d={...s.chats};for(const u of Object.keys(l))u.startsWith(c)&&delete l[u];for(const u of Object.keys(d))u.startsWith(c)&&delete d[u];return{actThreads:{...s.actThreads,[t]:i},activeThreadId:o,activeThreadParticipantKey:o?s.activeThreadParticipantKey:null,sessionMap:l,chats:d}})},renameThread:(t,n,s)=>{e(i=>({actThreads:{...i.actThreads,[t]:(i.actThreads[t]||[]).map(o=>o.id===n?{...o,name:s}:o)}}))}}),createSessionSlice=e=>({seEntities:{},seMessages:{},seStatuses:{},sePermissions:{},seQuestions:{},seTodos:{},chatKeyToSession:{},sessionToChatKey:{},sessionLoading:{},historyCursors:{},sessionReverts:{},upsertSession:r=>e(t=>({seEntities:{...t.seEntities,[r.id]:r}})),removeSession:r=>e(t=>{const{[r]:n,...s}=t.seEntities,{[r]:i,...o}=t.seMessages,{[r]:c,...l}=t.seStatuses,{[r]:d,...u}=t.sePermissions,{[r]:f,...x}=t.seQuestions,{[r]:h,...g}=t.seTodos,{[r]:A,...v}=t.sessionLoading,{[r]:S,...y}=t.historyCursors,k=t.sessionToChatKey[r],R={...t.chatKeyToSession},T={...t.sessionToChatKey};return k&&delete R[k],delete T[r],{seEntities:s,seMessages:o,seStatuses:l,sePermissions:u,seQuestions:x,seTodos:g,sessionLoading:v,historyCursors:y,chatKeyToSession:R,sessionToChatKey:T}}),setSessionMessages:(r,t)=>e(n=>({seMessages:{...n.seMessages,[r]:t}})),appendSessionMessage:(r,t)=>e(n=>({seMessages:{...n.seMessages,[r]:[...n.seMessages[r]||[],t]}})),removeSessionMessage:(r,t)=>e(n=>({seMessages:{...n.seMessages,[r]:(n.seMessages[r]||[]).filter(s=>s.id!==t)}})),upsertMessageById:(r,t,n)=>e(s=>{const i=s.seMessages[r]||[],o=i.findIndex(l=>l.id===t);if(o===-1)return s;const c=[...i];return c[o]=n(c[o]),{seMessages:{...s.seMessages,[r]:c}}}),setSessionStatus:(r,t)=>e(n=>({seStatuses:{...n.seStatuses,[r]:t}})),setSessionLoading:(r,t)=>e(n=>{if(t)return{sessionLoading:{...n.sessionLoading,[r]:!0}};const{[r]:s,...i}=n.sessionLoading;return{sessionLoading:i}}),setSessionPermission:(r,t)=>e(n=>({sePermissions:{...n.sePermissions,[r]:t}})),clearSessionPermission:r=>e(t=>{const{[r]:n,...s}=t.sePermissions;return{sePermissions:s}}),setSessionQuestion:(r,t)=>e(n=>({seQuestions:{...n.seQuestions,[r]:t}})),clearSessionQuestion:r=>e(t=>{const{[r]:n,...s}=t.seQuestions;return{seQuestions:s}}),setSessionTodos:(r,t)=>e(n=>({seTodos:{...n.seTodos,[r]:t}})),registerBinding:(r,t)=>e(n=>({chatKeyToSession:{...n.chatKeyToSession,[r]:t},sessionToChatKey:{...n.sessionToChatKey,[t]:r}})),unregisterBinding:r=>e(t=>{const n=t.chatKeyToSession[r],s={...t.chatKeyToSession},i={...t.sessionToChatKey};return delete s[r],n&&delete i[n],{chatKeyToSession:s,sessionToChatKey:i}}),unregisterBindingBySession:r=>e(t=>{const n=t.sessionToChatKey[r],s={...t.chatKeyToSession},i={...t.sessionToChatKey};return delete i[r],n&&delete s[n],{chatKeyToSession:s,sessionToChatKey:i}}),setHistoryCursor:(r,t)=>e(n=>({historyCursors:{...n.historyCursors,[r]:t}})),setSessionRevert:(r,t)=>e(n=>({sessionReverts:{...n.sessionReverts,[r]:t}})),clearSessionRevert:r=>e(t=>{const{[r]:n,...s}=t.sessionReverts;return{sessionReverts:s}}),clearSessionData:r=>e(t=>{const{[r]:n,...s}=t.seMessages,{[r]:i,...o}=t.seStatuses,{[r]:c,...l}=t.sePermissions,{[r]:d,...u}=t.seQuestions,{[r]:f,...x}=t.seTodos,{[r]:h,...g}=t.sessionLoading,{[r]:A,...v}=t.historyCursors,{[r]:S,...y}=t.sessionReverts;return{seMessages:s,seStatuses:o,sePermissions:l,seQuestions:u,seTodos:x,sessionLoading:g,historyCursors:v,sessionReverts:y}})}),_timers=new Map,_hashes=new Map,DEBOUNCE_MS=2e3;function configHash(e){return JSON.stringify({talRef:e.talRef,danceRefs:e.danceRefs,model:e.model,modelVariant:e.modelVariant,mcpServerNames:e.mcpServerNames,mcpBindingMap:e.mcpBindingMap,danceDeliveryMode:e.danceDeliveryMode,planMode:e.planMode,agentId:e.agentId})}function initDraftAutoSave(e){e((r,t)=>{var s;if(r.performers===t.performers)return;const n=new Set;for(const i of r.performers){n.add(i.id);const o=(s=i.meta)==null?void 0:s.derivedFrom;if(!o)continue;const c=configHash(i),l=_hashes.get(i.id);if(l===void 0){_hashes.set(i.id,c);continue}if(c===l)continue;_hashes.set(i.id,c);const d=_timers.get(i.id);d&&clearTimeout(d),_timers.set(i.id,setTimeout(()=>{_timers.delete(i.id);const u={talRef:i.talRef||null,danceRefs:i.danceRefs||[],model:i.model||null,modelVariant:i.modelVariant||null,mcpServerNames:i.mcpServerNames||[],mcpBindingMap:i.mcpBindingMap||{},danceDeliveryMode:i.danceDeliveryMode||"auto",planMode:i.planMode||!1,agentId:i.agentId||null},f=`auto-${i.id}`;api.drafts.update("performer",f,{name:`${i.name} (modified)`,content:u,derivedFrom:o}).catch(()=>{api.drafts.create({kind:"performer",id:f,name:`${i.name} (modified)`,content:u,derivedFrom:o}).catch(x=>{console.warn("[auto-save] Failed to save performer draft",x)})})},DEBOUNCE_MS))}for(const i of _hashes.keys())if(!n.has(i)){_hashes.delete(i);const o=_timers.get(i);o&&(clearTimeout(o),_timers.delete(i))}})}const useStudioStore=create()((...e)=>({...createPerformerRelationSlice(...e),...createWorkspaceSlice(...e),...createChatSlice(...e),...createIntegrationSlice(...e),...createAdapterViewSlice(...e),...createSafeModeSlice(...e),...createActSlice(...e),...createAssistantSlice(...e),...createSessionSlice(...e)}));initDraftAutoSave(useStudioStore.subscribe);const Ctx=reactExports.createContext({close:()=>{}});function DropdownMenu({trigger:e,align:r="left",items:t,children:n,open:s,onOpenChange:i,className:o}){const[c,l]=reactExports.useState(!1),d=s!==void 0,u=d?s:c,f=reactExports.useRef(null),x=reactExports.useCallback(v=>{d?i==null||i(v):l(v)},[d,i]),h=reactExports.useCallback(()=>x(!u),[x,u]),g=reactExports.useCallback(()=>x(!1),[x]);reactExports.useEffect(()=>{if(!u)return;const v=S=>{f.current&&!f.current.contains(S.target)&&g()};return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[u,g]),reactExports.useEffect(()=>{if(!u)return;const v=S=>{S.key==="Escape"&&g()};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[u,g]);let A=null;return t?A=t.map((v,S)=>v==="separator"?jsxRuntimeExports.jsx("div",{className:"dropdown-menu__separator"},`sep-${S}`):jsxRuntimeExports.jsx("button",{className:["dropdown-menu__item",v.variant==="danger"&&"dropdown-menu__item--danger",v.active&&"is-active"].filter(Boolean).join(" "),disabled:v.disabled,onClick:()=>{v.onClick(),g()},children:v.label},v.label)):n&&(A=n),jsxRuntimeExports.jsx(Ctx.Provider,{value:{close:g},children:jsxRuntimeExports.jsxs("div",{ref:f,className:`dropdown-menu ${o||""}`,children:[jsxRuntimeExports.jsx("div",{className:"dropdown-menu__trigger",onClick:h,children:e}),u&&A&&jsxRuntimeExports.jsx("div",{className:`dropdown-menu__panel ${r==="right"?"dropdown-menu__panel--right":""}`,children:A})]})})}function MenuGroup({label:e,children:r}){return jsxRuntimeExports.jsxs("div",{className:"dropdown-menu__group",children:[jsxRuntimeExports.jsx("div",{className:"dropdown-menu__group-label",children:e}),r]})}function MenuItem({children:e,onClick:r,active:t,variant:n,disabled:s}){const{close:i}=reactExports.useContext(Ctx);return jsxRuntimeExports.jsx("button",{className:["dropdown-menu__item",n==="danger"&&"dropdown-menu__item--danger",t&&"is-active"].filter(Boolean).join(" "),disabled:s,onClick:()=>{r==null||r(),i()},children:e})}DropdownMenu.Group=MenuGroup;DropdownMenu.Item=MenuItem;const SESSION_TITLE_PREFIX="DOT Studio:",SESSION_METADATA_PATTERN=/^DOT Studio:\s*(.*?)\s*\[studio:([^:\]]+):(.*)\]\s*$/;function buildStudioSessionTitle(e,r,t,n){return`${SESSION_TITLE_PREFIX} ${r} [studio:${e}:${t}]`}function parseStudioSessionTitle(e){if(!e||!e.startsWith(SESSION_TITLE_PREFIX))return null;const r=e.match(SESSION_METADATA_PATTERN);return r?{label:r[1].trim(),performerId:r[2],configHash:r[3]}:null}function renameStudioSessionTitle(e,r){const t=parseStudioSessionTitle(e);return t?buildStudioSessionTitle(t.performerId,r.trim(),t.configHash):null}function workspaceLabel(e){return e.trim().replace(/\/+$/,"").split(/[/\\]/).pop()||"Workspace"}function buildPerformerSessionRows(e,r,t){const n=e.map(i=>{const o=parseStudioSessionTitle(i.title),c=(o==null?void 0:o.performerId)||null,l=c&&r.find(d=>d.id===c)||null;return l?{session:i,performerId:c,active:t[l.id]===i.id}:null}).filter(i=>!!i&&typeof i.performerId=="string"),s=new Set;return n.filter(i=>s.has(i.session.id)?!1:(s.add(i.session.id),!0))}function groupPerformerSessionsById(e){const r=new Map;return e.forEach(t=>{const n=r.get(t.performerId)||[];n.push(t),r.set(t.performerId,n)}),r.forEach((t,n)=>{r.set(n,[...t].sort((s,i)=>s.active!==i.active?s.active?-1:1:(i.session.createdAt||0)-(s.session.createdAt||0)))}),r}function buildThreadRows(e){return e.sharedPerformers.map(r=>{var t,n;return{id:r.id,kind:"performer",label:r.name,meta:((t=r.model)==null?void 0:t.modelId)||"No model selected",hidden:!!r.hidden,active:e.selectedPerformerId===r.id||((n=e.editingTarget)==null?void 0:n.type)==="performer"&&e.editingTarget.id===r.id,children:e.performerSessionsById.get(r.id)||[]}})}function LayerRow({icon:e,label:r,meta:t,metaTone:n="default",active:s=!1,onClick:i,actions:o,muted:c=!1}){return jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:0,className:`layer-row ${s?"active":""} ${c?"muted":""}`,onClick:i,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&i&&(l.preventDefault(),i())},children:[jsxRuntimeExports.jsx("span",{className:"layer-row__icon",children:e}),jsxRuntimeExports.jsxs("span",{className:"layer-row__body",children:[jsxRuntimeExports.jsx("span",{className:"layer-row__label",children:r}),t?jsxRuntimeExports.jsx("span",{className:`layer-row__meta layer-row__meta--${n}`,children:t}):null]}),o?jsxRuntimeExports.jsx("span",{className:"layer-row__actions",onClick:l=>l.stopPropagation(),children:o}):null]})}function SessionNameEditor({renaming:e,display:r,onChange:t,onCommit:n,onCancel:s}){return e?jsxRuntimeExports.jsx("input",{autoFocus:!0,className:"thread-inline-input",value:e.value,onChange:i=>t(i.target.value),onClick:i=>i.stopPropagation(),onKeyDown:i=>{i.key==="Enter"?(i.preventDefault(),n()):i.key==="Escape"&&(i.preventDefault(),s())}}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:r})}function SessionRowActions({renaming:e,onCommit:r,onCancel:t,onRename:n,onDelete:s,renameTitle:i,deleteTitle:o}){return e?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:r,title:"Save name",children:jsxRuntimeExports.jsx(Check,{size:10})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:t,title:"Cancel rename",children:jsxRuntimeExports.jsx(X,{size:10})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:n,title:i,children:jsxRuntimeExports.jsx(Pencil,{size:10})}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:s,title:o,children:jsxRuntimeExports.jsx(Trash2,{size:10})})]})}function WorkspaceExplorerWorkspacesSection({workspacesHeight:e,workspaceRows:r,workingDir:t,onOpenWorkspace:n}){return jsxRuntimeExports.jsxs("section",{className:"explorer-section explorer-section--stages explorer-section--workspaces",style:{flex:`0 0 ${e}px`},children:[jsxRuntimeExports.jsxs("div",{className:"explorer__subheader",children:[jsxRuntimeExports.jsx("span",{className:"explorer__title",children:"Workspaces"}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:n,title:"Open workspace directory",children:jsxRuntimeExports.jsx(Plus,{size:12})})]}),jsxRuntimeExports.jsxs("div",{className:"explorer__context explorer__context--workspaces",children:[jsxRuntimeExports.jsx("span",{className:"explorer__context-label",children:"Current"}),jsxRuntimeExports.jsx("strong",{children:t?workspaceLabel(t):"No workspace open"}),t?jsxRuntimeExports.jsx("span",{className:"explorer__context-path",title:t,children:t}):null]}),jsxRuntimeExports.jsx("div",{className:"explorer__tree explorer__tree--workspaces scroll-area",children:r.length>0?r:jsxRuntimeExports.jsx("div",{className:"empty-state",children:"No saved workspaces"})})]})}function resolvePerformer(e,r){return e.kind==="draft"?r.find(t=>{var n;return t.id===e.draftId||((n=t.meta)==null?void 0:n.derivedFrom)===`draft:${e.draftId}`})??null:r.find(t=>{var n;return((n=t.meta)==null?void 0:n.derivedFrom)===e.urn})??null}function evaluateActReadiness(e,r){const t=[],n=Object.keys(e.participants);n.length===0&&t.push({code:"no-participants",severity:"error",message:"No participants bound to this Act",focus:{mode:"act"}}),n.length>1&&e.relations.length===0&&t.push({code:"no-relations",severity:"error",message:"Multiple participants require at least one relation",focus:{mode:"act"}});for(const i of e.relations){for(const o of i.between)n.includes(o)||t.push({code:"unknown-relation-endpoint",severity:"error",message:`Relation "${i.name}" references unknown participant "${o}"`,focus:{mode:"relation",relationId:i.id}});(!i.name||i.name.trim().length===0)&&t.push({code:"empty-relation-name",severity:"warning",message:`A relation between "${i.between[0]}" and "${i.between[1]}" has no name`,focus:{mode:"relation",relationId:i.id}})}for(const i of n){const o=e.participants[i],c=resolvePerformer(o.performerRef,r);if(!c){t.push({code:"unresolved-performer",severity:"error",message:`Participant "${i}" has no matching performer on the canvas`,focus:{mode:"participant",participantKey:i}});continue}hasModelConfig(c.model)||t.push({code:"no-model-config",severity:"error",message:`Participant "${i}" has no model configured`,focus:{mode:"participant",participantKey:i}})}if(n.length>1){const i=new Set;for(const o of e.relations)i.add(o.between[0]),i.add(o.between[1]);for(const o of n)i.has(o)||t.push({code:"disconnected-participant",severity:"warning",message:`Participant "${o}" is not connected by any relation`,focus:{mode:"participant",participantKey:o}})}if(n.length>1)for(const i of n){const o=e.participants[i];if(!resolvePerformer(o.performerRef,r))continue;const l=o.subscriptions;if(l!=null&&l.messagesFrom)for(const d of l.messagesFrom)n.includes(d)||t.push({code:"invalid-subscription-source",severity:"warning",message:`Participant "${i}" subscribes to messages from unknown participant "${d}"`,focus:{mode:"participant",participantKey:i}})}return{runnable:!t.some(i=>i.severity==="error"),issues:t}}function WorkspaceExplorerActGroup({act:e,selectedActId:r,activeThreadId:t,threads:n,expanded:s,pendingDelete:i,onToggleExpanded:o,onOpenAct:c,onCreateThread:l,onSetPendingDelete:d,onSaveActAsDraft:u,onToggleActVisibility:f,onRemoveAct:x,onSelectThread:h,onDeleteThread:g,onRenameThread:A,onOpenActEditor:v}){var ie;const S=`act-${e.id}`,y=r===e.id,k=Object.keys(e.participants).length,[R,T]=reactExports.useState(!1),[C,b]=reactExports.useState(null),[B,U]=reactExports.useState(""),W=5,K=[...n].sort((F,ne)=>{const oe=t===F.id,Q=t===ne.id;return oe!==Q?oe?-1:1:(ne.createdAt||0)-(F.createdAt||0)}),le=R?K:K.slice(0,W),se=n.length-W,G=useStudioStore(F=>F.performers),Z=evaluateActReadiness(e,G),ye=Z.runnable?"New Thread":((ie=Z.issues.find(F=>F.severity==="error"))==null?void 0:ie.message)||"Act is not runnable";return jsxRuntimeExports.jsxs("div",{className:"thread-group",children:[jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:0,className:["thread-card",y?"active":"",e.hidden?"muted":""].filter(Boolean).join(" "),onClick:()=>c(e.id),onKeyDown:F=>{(F.key==="Enter"||F.key===" ")&&(F.preventDefault(),c(e.id))},children:[jsxRuntimeExports.jsx("span",{className:`thread-card__chevron ${s?"is-open":""}`,onClick:F=>{F.stopPropagation(),o(S)},children:jsxRuntimeExports.jsx(ChevronRight,{size:12})}),jsxRuntimeExports.jsx("span",{className:"thread-card__icon",children:jsxRuntimeExports.jsx(Workflow,{size:13})}),jsxRuntimeExports.jsxs("span",{className:"thread-card__body",children:[jsxRuntimeExports.jsx("span",{className:"thread-card__name",children:e.name}),jsxRuntimeExports.jsxs("span",{className:"thread-card__meta",children:[k,"p · ",e.relations.length,"r · ",n.length,"t"]})]}),jsxRuntimeExports.jsx("span",{className:"thread-card__actions",onClick:F=>F.stopPropagation(),children:i===S?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("span",{className:"thread-card__delete-label",children:"Delete?"}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:()=>{d(null),x(e.id)},title:"Confirm delete",children:jsxRuntimeExports.jsx(Check,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>d(null),title:"Cancel delete",children:jsxRuntimeExports.jsx(X,{size:11})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("button",{className:`icon-btn ${e.hidden?"visibility-off":"visibility-on"}`,onClick:()=>f(e.id),title:e.hidden?"Show on canvas":"Hide from canvas",children:e.hidden?jsxRuntimeExports.jsx(EyeOff,{size:11}):jsxRuntimeExports.jsx(Eye,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>void l(e.id),title:ye,disabled:!Z.runnable,children:jsxRuntimeExports.jsx(Plus,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>v(e.id),title:"Edit act",children:jsxRuntimeExports.jsx(Pencil,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>{u(e.id),showToast(`Saved "${e.name}" as draft`,"success",{title:"Draft saved",dedupeKey:`draft:save:act:${e.id}`})},title:"Save act as draft",children:jsxRuntimeExports.jsx(Archive,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:()=>d(S),title:"Delete act",children:jsxRuntimeExports.jsx(Trash2,{size:11})})]})})]}),s?jsxRuntimeExports.jsx("div",{className:"thread-children",children:n.length>0?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[le.map(F=>{const ne=t===F.id,oe=F.status==="active"?"●":F.status==="completed"?"✓":"⏸",Q=`thread-status--${F.status||"idle"}`;return jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:0,className:"layer-row",onClick:()=>{h(e.id,F.id)},children:[jsxRuntimeExports.jsx("span",{className:"layer-row__icon",children:jsxRuntimeExports.jsx(Workflow,{size:11})}),jsxRuntimeExports.jsxs("span",{className:"layer-row__body",children:[jsxRuntimeExports.jsx("span",{className:"layer-row__label",children:C===F.id?jsxRuntimeExports.jsx("input",{className:"inline-rename-input",value:B,onChange:J=>U(J.target.value),onKeyDown:J=>{J.key==="Enter"?(A(e.id,F.id,B.trim()),b(null)):J.key==="Escape"&&b(null)},onBlur:()=>{B.trim()&&A(e.id,F.id,B.trim()),b(null)},onClick:J=>J.stopPropagation(),autoFocus:!0}):jsxRuntimeExports.jsxs("span",{className:"thread-label",children:[jsxRuntimeExports.jsx("span",{className:`thread-status-dot ${Q}`,children:oe}),F.name||`Thread ${F.id.slice(0,6)}`]})}),jsxRuntimeExports.jsx("span",{className:`layer-row__meta layer-row__meta--${ne?"success":"default"}`,children:ne?"Current thread":"Saved thread"})]}),jsxRuntimeExports.jsxs("span",{className:"layer-row__actions",onClick:J=>J.stopPropagation(),children:[jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>{U(F.name||`Thread ${F.id.slice(0,6)}`),b(F.id)},title:"Rename thread",children:jsxRuntimeExports.jsx(PenLine,{size:10})}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:()=>g(e.id,F.id),title:"Delete thread",children:jsxRuntimeExports.jsx(Trash2,{size:10})})]})]},F.id)}),se>0?jsxRuntimeExports.jsx("button",{className:"show-more-btn",onClick:F=>{F.stopPropagation(),T(!R)},type:"button",children:R?"Show less":`Show ${se} more`}):null]}):jsxRuntimeExports.jsx("div",{className:"empty-state empty-state--tight empty-state--nested",children:"No threads — click + to create one"})}):null]})}function WorkspaceExplorerPerformerGroup({row:e,expanded:r,pendingDelete:t,renamingSession:n,editingTarget:s,onToggleExpanded:i,onSetPendingDelete:o,onBeginRenamePerformerSession:c,onCommitRenameSession:l,onCancelRenameSession:d,onSetRenamingValue:u,performerSessionLabel:f,onOpenPerformer:x,onOpenPerformerSession:h,onDeleteSession:g,onTogglePerformerVisibility:A,onOpenPerformerEditor:v,onSetActiveChatPerformer:S,onRemovePerformer:y,onSavePerformerAsDraft:k,onStartNewSession:R}){const T=`performer-${e.id}`,[C,b]=reactExports.useState(!1),B=5,U=C?e.children:e.children.slice(0,B),W=e.children.length-B;return jsxRuntimeExports.jsxs("div",{className:"thread-group",children:[jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:0,className:["thread-card",e.active?"active":"",e.hidden?"muted":""].filter(Boolean).join(" "),onClick:()=>x(e.id),onKeyDown:K=>{(K.key==="Enter"||K.key===" ")&&(K.preventDefault(),x(e.id))},children:[jsxRuntimeExports.jsx("span",{className:`thread-card__chevron ${r?"is-open":""}`,onClick:K=>{K.stopPropagation(),i()},children:jsxRuntimeExports.jsx(ChevronRight,{size:12})}),jsxRuntimeExports.jsx("span",{className:"thread-card__icon",children:jsxRuntimeExports.jsx(MessageSquare,{size:13})}),jsxRuntimeExports.jsx("span",{className:"thread-card__body",children:jsxRuntimeExports.jsx("span",{className:"thread-card__name",children:e.label})}),jsxRuntimeExports.jsx("span",{className:"thread-card__actions",onClick:K=>K.stopPropagation(),children:t===T?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("span",{className:"thread-card__delete-label",children:"Delete?"}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:()=>{o(null),y(e.id)},title:"Confirm delete",children:jsxRuntimeExports.jsx(Check,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>o(null),title:"Cancel delete",children:jsxRuntimeExports.jsx(X,{size:11})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("button",{className:`icon-btn ${e.hidden?"visibility-off":"visibility-on"}`,onClick:()=>A(e.id),title:e.hidden?"Show performer":"Hide performer",children:e.hidden?jsxRuntimeExports.jsx(EyeOff,{size:11}):jsxRuntimeExports.jsx(Eye,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>R(e.id),title:"New session",children:jsxRuntimeExports.jsx(Plus,{size:11})}),jsxRuntimeExports.jsx("button",{className:`icon-btn ${(s==null?void 0:s.type)==="performer"&&s.id===e.id?"icon-btn--active":""}`,onClick:()=>{v(e.id,"performer-runtime"),S(e.id)},title:"Edit performer",children:jsxRuntimeExports.jsx(Pencil,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>{k(e.id),showToast(`Saved "${e.label}" as draft`,"success",{title:"Draft saved",dedupeKey:`draft:save:${e.id}`})},title:"Save performer as draft",children:jsxRuntimeExports.jsx(Archive,{size:11})}),jsxRuntimeExports.jsx("button",{className:"icon-btn remove-btn",onClick:()=>o(T),title:"Delete performer",children:jsxRuntimeExports.jsx(Trash2,{size:11})})]})})]}),r?jsxRuntimeExports.jsx("div",{className:"thread-children",children:e.children.length>0?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[U.map(K=>jsxRuntimeExports.jsx(LayerRow,{icon:jsxRuntimeExports.jsx(MessageSquare,{size:11,className:K.active?"icon-active":"icon-muted"}),label:jsxRuntimeExports.jsx(SessionNameEditor,{renaming:(n==null?void 0:n.key)===`performer:${K.session.id}`?n:null,display:f(K.session),onChange:u,onCommit:()=>void l(),onCancel:d}),meta:K.active?"Current thread":"Saved thread",metaTone:K.active?"success":"default",active:!1,onClick:(n==null?void 0:n.key)===`performer:${K.session.id}`?void 0:()=>void h(e.id,K.session),actions:jsxRuntimeExports.jsx(SessionRowActions,{renaming:(n==null?void 0:n.key)===`performer:${K.session.id}`?n:null,onCommit:()=>void l(),onCancel:d,onRename:()=>c(K.session),onDelete:()=>g(K.session.id),renameTitle:"Rename session",deleteTitle:"Delete session"})},K.session.id)),W>0?jsxRuntimeExports.jsx("button",{className:"show-more-btn",onClick:K=>{K.stopPropagation(),b(!C)},type:"button",children:C?"Show less":`Show ${W} more`}):null]}):jsxRuntimeExports.jsx("div",{className:"empty-state empty-state--tight empty-state--nested",children:"No threads yet"})}):null]})}function WorkspaceExplorerThreadsSection({workspaceId:e,acts:r,threadRows:t,expandedRows:n,pendingDelete:s,renamingSession:i,editingTarget:o,selectedActId:c,activeThreadId:l,actThreads:d,onToggleExpanded:u,onSetPendingDelete:f,onBeginRenamePerformerSession:x,onCommitRenameSession:h,onCancelRenameSession:g,onSetRenamingValue:A,performerSessionLabel:v,onOpenPerformer:S,onOpenPerformerSession:y,onDeleteSession:k,onAddPerformer:R,onAddAct:T,onTogglePerformerVisibility:C,onOpenPerformerEditor:b,onSetActiveChatPerformer:B,onRemovePerformer:U,onSavePerformerAsDraft:W,onOpenAct:K,onCreateThread:le,onSaveActAsDraft:se,onToggleActVisibility:G,onRemoveAct:Z,onSelectThread:ye,onDeleteThread:ie,onRenameThread:F,onStartNewSession:ne,onOpenActEditor:oe}){const Q=t.length>0,J=r.length>0,[q,Y]=reactExports.useState(1),V=reactExports.useRef(null),he=reactExports.useRef(!1),de=reactExports.useCallback(()=>{const ee=re=>{re.preventDefault(),re.stopPropagation(),document.removeEventListener("click",ee,!0)};document.addEventListener("click",ee,!0),window.setTimeout(()=>{document.removeEventListener("click",ee,!0)},0)},[]),ue=reactExports.useCallback(ee=>{ee.preventDefault(),ee.stopPropagation(),he.current=!0;const re=V.current;if(!re)return;const ae=ee.clientY,fe=re.getBoundingClientRect().height,ve=q,ce=xe=>{if(!he.current)return;const Ee=(xe.clientY-ae)/fe;Y(Math.min(5,Math.max(.2,ve+Ee*2)))},pe=xe=>{xe.preventDefault(),xe.stopPropagation(),he.current=!1,document.removeEventListener("mousemove",ce),document.removeEventListener("mouseup",pe),document.body.style.cursor="",document.body.style.userSelect="",de()};document.addEventListener("mousemove",ce),document.addEventListener("mouseup",pe),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},[q,de]);return jsxRuntimeExports.jsxs("section",{className:"explorer-section explorer-section--threads",ref:V,children:[jsxRuntimeExports.jsxs("div",{className:"explorer__pane",style:{flex:q},children:[jsxRuntimeExports.jsxs("div",{className:"explorer__subheader explorer__subheader--inline",children:[jsxRuntimeExports.jsx("span",{className:"explorer__title",children:"Performers"}),jsxRuntimeExports.jsx("div",{className:"explorer__actions",children:jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:R,title:"Add performer",disabled:!e,children:jsxRuntimeExports.jsx(MessageSquare,{size:12})})})]}),jsxRuntimeExports.jsx("div",{className:"explorer__pane-scroll scroll-area",children:Q?jsxRuntimeExports.jsx("div",{className:"explorer__section-list",children:t.map(ee=>{const re=`performer-${ee.id}`,ae=n[re]??ee.children.length>0;return jsxRuntimeExports.jsx(WorkspaceExplorerPerformerGroup,{row:ee,expanded:ae,pendingDelete:s,renamingSession:i,editingTarget:o,onToggleExpanded:()=>u(re),onSetPendingDelete:f,onBeginRenamePerformerSession:x,onCommitRenameSession:h,onCancelRenameSession:g,onSetRenamingValue:A,performerSessionLabel:v,onOpenPerformer:S,onOpenPerformerSession:y,onDeleteSession:k,onTogglePerformerVisibility:C,onOpenPerformerEditor:b,onSetActiveChatPerformer:B,onRemovePerformer:U,onSavePerformerAsDraft:W,onStartNewSession:ne},re)})}):jsxRuntimeExports.jsx("div",{className:"empty-state empty-state--tight empty-state--nested",children:"No performers yet"})})]}),jsxRuntimeExports.jsx("div",{className:"explorer__divider",onMouseDown:ue}),jsxRuntimeExports.jsxs("div",{className:"explorer__pane",style:{flex:1},children:[jsxRuntimeExports.jsxs("div",{className:"explorer__subheader explorer__subheader--inline",children:[jsxRuntimeExports.jsx("span",{className:"explorer__title",children:"Acts"}),jsxRuntimeExports.jsx("div",{className:"explorer__actions",children:jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:T,title:"Add Act",disabled:!e,children:jsxRuntimeExports.jsx(Workflow,{size:12})})})]}),jsxRuntimeExports.jsx("div",{className:"explorer__pane-scroll scroll-area",children:J?jsxRuntimeExports.jsx("div",{className:"explorer__section-list",children:r.map(ee=>{const re=`act-${ee.id}`,ae=d[ee.id]||[],te=n[re]??ae.length>0;return jsxRuntimeExports.jsx(WorkspaceExplorerActGroup,{act:ee,selectedActId:c,activeThreadId:l,threads:ae,expanded:te,pendingDelete:s,onToggleExpanded:u,onOpenAct:K,onCreateThread:le,onSetPendingDelete:f,onSaveActAsDraft:se,onToggleActVisibility:G,onRemoveAct:Z,onSelectThread:ye,onDeleteThread:ie,onRenameThread:F,onOpenActEditor:oe},re)})}):jsxRuntimeExports.jsx("div",{className:"empty-state empty-state--tight empty-state--nested",children:"No acts yet"})})]})]})}function WorkspaceExplorer(){const[e,r]=reactExports.useState(208),t=reactExports.useRef(!1),n=reactExports.useCallback(()=>{const m=E=>{E.preventDefault(),E.stopPropagation(),document.removeEventListener("click",m,!0)};document.addEventListener("click",m,!0),window.setTimeout(()=>{document.removeEventListener("click",m,!0)},0)},[]),s=reactExports.useCallback(m=>{m.preventDefault(),m.stopPropagation(),t.current=!0;const E=m.clientY,M=e,D=P=>{if(!t.current)return;const O=P.clientY-E;r(Math.min(400,Math.max(80,M+O)))},_=P=>{P.preventDefault(),P.stopPropagation(),t.current=!1,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",_),document.body.style.cursor="",document.body.style.userSelect="",n()};document.addEventListener("mousemove",D),document.addEventListener("mouseup",_),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},[n,e]),{workspaceId:i,workingDir:o,workspaceList:c,performers:l,sessions:d,sessionMap:u,editingTarget:f,selectedPerformerId:x,selectedPerformerSessionId:h,newWorkspace:g,closeWorkspace:A,loadWorkspace:v,listWorkspaces:S,listSessions:y,deleteWorkspace:k,addPerformer:R,selectPerformer:T,selectPerformerSession:C,setActiveChatPerformer:b,openPerformerEditor:B,closeEditor:U,deleteSession:W,togglePerformerVisibility:K,removePerformer:le,savePerformerAsDraft:se,saveActAsDraft:G}=useStudioStore(),Z=useStudioStore(m=>m.acts),ye=useStudioStore(m=>m.selectedActId),ie=useStudioStore(m=>m.selectAct),F=useStudioStore(m=>m.removeAct),ne=useStudioStore(m=>m.toggleActVisibility),oe=useStudioStore(m=>m.actThreads),Q=useStudioStore(m=>m.activeThreadId),J=useStudioStore(m=>m.createThread),q=useStudioStore(m=>m.selectThread),Y=useStudioStore(m=>m.deleteThread),V=useStudioStore(m=>m.renameThread),he=useStudioStore(m=>m.startNewSession),de=useStudioStore(m=>m.openActEditor),[ue,ee]=reactExports.useState({}),[re,ae]=reactExports.useState(null),[te,fe]=reactExports.useState(null),ve=reactExports.useCallback(async m=>{try{await api.studio.openPath(m)}catch(E){console.error("Failed to open workspace path",E),showToast("Studio could not open that workspace path.","error",{title:"Open failed",dedupeKey:`workspace:open:${m}`})}},[]);reactExports.useEffect(()=>{S(),y()},[y,S,o]);const ce=reactExports.useMemo(()=>l.filter(m=>m.scope==="shared"),[l]),pe=reactExports.useMemo(()=>buildPerformerSessionRows(d,l,u),[l,u,d]),xe=reactExports.useMemo(()=>groupPerformerSessionsById(pe),[pe]),ge=reactExports.useMemo(()=>buildThreadRows({sharedPerformers:ce,editingTarget:(f==null?void 0:f.type)==="performer"?f:null,performerSessionsById:xe,selectedPerformerId:x}),[f,xe,x,h,ce]),Ee=c.map(m=>{const E=m.workingDir.trim().replace(/\/+$/,"").split("/"),M=E.length>2?`…/${E.slice(-2).join("/")}`:m.workingDir;return jsxRuntimeExports.jsx(LayerRow,{icon:jsxRuntimeExports.jsx(Folder,{size:12,className:m.id===i?"icon-active":"icon-muted"}),label:workspaceLabel(m.workingDir),meta:M,active:m.id===i,onClick:()=>v(m.id),actions:jsxRuntimeExports.jsx(DropdownMenu,{align:"right",trigger:jsxRuntimeExports.jsx("button",{className:"icon-btn",title:"Workspace actions",children:jsxRuntimeExports.jsx(Ellipsis,{size:10})}),items:[{label:"Open",onClick:()=>{ve(m.workingDir)}},"separator",{label:"Close workspace",onClick:()=>A(),disabled:m.id!==i},"separator",{label:"Delete workspace",onClick:()=>k(m.id),variant:"danger"}]})},m.id)}),Ae=m=>{ee(E=>({...E,[m]:!E[m]}))},Se=reactExports.useCallback(m=>{const E=parseStudioSessionTitle(m.title);return(E==null?void 0:E.label)||("slug"in m&&typeof m.slug=="string"?m.slug:null)||m.id.slice(0,8)},[]),ke=reactExports.useCallback(m=>{fe({key:`performer:${m.id}`,kind:"performer",sessionId:m.id,currentTitle:m.title,value:Se(m)})},[Se]),we=reactExports.useCallback(()=>{fe(null)},[]),Re=reactExports.useCallback(async()=>{if(!te)return;const m=te.value.trim();if(!m){we();return}try{const E=renameStudioSessionTitle(te.currentTitle,m);if(!E)throw new Error("Studio could not preserve thread metadata while renaming this session.");await api.chat.updateSession(te.sessionId,E),await y(),fe(null)}catch(E){console.error("Failed to rename session",E),showToast("Studio could not rename that thread.","error",{title:"Thread rename failed",dedupeKey:`thread:rename:${te.sessionId}`})}},[we,y,te]),a=useStudioStore(m=>m.switchFocusTarget),w=useStudioStore(m=>m.revealCanvasNode),j=m=>{const{focusSnapshot:E,focusedPerformerId:M,focusedNodeType:D,performers:_,unregisterBinding:P}=useStudioStore.getState(),O=_.find(L=>L.id===m);O!=null&&O.hidden&&useStudioStore.setState(L=>({performers:L.performers.map(z=>z.id===m?{...z,hidden:!1}:z)})),U(),C(null),P(m),useStudioStore.setState(L=>({sessionMap:{...L.sessionMap,[m]:""},chats:{...L.chats,[m]:[]}})),E&&(M!==m||D!=="performer")?a(m,"performer"):T(m),b(m),w(m,"performer")},$=async(m,E)=>{useStudioStore.getState().registerBinding(m,E.id),useStudioStore.setState(O=>({sessionMap:{...O.sessionMap,[m]:E.id}}));try{const O=await api.chat.messages(E.id),I=Array.isArray(O)?O:O.messages||[],L=mapSessionMessagesToChatMessages(I);useStudioStore.setState(z=>({chats:{...z.chats,[m]:L}})),useStudioStore.getState().setSessionMessages(E.id,L),useStudioStore.getState().seEntities[E.id]||useStudioStore.getState().upsertSession({id:E.id,title:E.title,status:{type:"idle"}})}catch(O){console.error("Failed to load session messages",O),showToast("Studio could not load messages for that thread.","error",{title:"Thread load failed",dedupeKey:`thread:load:${m}:${E.id}`,actionLabel:"Retry",onAction:()=>{$(m,E)}})}const{focusSnapshot:M,focusedPerformerId:D,focusedNodeType:_}=useStudioStore.getState();U(),M&&(D!==m||_!=="performer")?a(m,"performer"):T(m),C(E.id),b(m),w(m,"performer")},N=reactExports.useCallback(m=>{const{focusSnapshot:E,focusedPerformerId:M,focusedNodeType:D,acts:_}=useStudioStore.getState(),P=_.find(I=>I.id===m);P!=null&&P.hidden&&useStudioStore.setState(I=>({acts:I.acts.map(L=>L.id===m?{...L,hidden:!1}:L)})),U(),E&&(M!==m||D!=="act")?a(m,"act"):ie(m),w(m,"act")},[U,w,ie,a]),p=reactExports.useCallback((m,E)=>{const{focusSnapshot:M,focusedPerformerId:D,focusedNodeType:_,acts:P}=useStudioStore.getState(),O=P.find(L=>L.id===m);O!=null&&O.hidden&&useStudioStore.setState(L=>({acts:L.acts.map(z=>z.id===m?{...z,hidden:!1}:z)})),U(),M&&(D!==m||_!=="act")?a(m,"act"):ie(m),q(m,E),w(m,"act")},[U,w,ie,q,a]);return jsxRuntimeExports.jsxs("div",{className:"explorer explorer--stacked",children:[jsxRuntimeExports.jsx(WorkspaceExplorerWorkspacesSection,{workspacesHeight:e,workspaceRows:Ee,workingDir:o,onOpenWorkspace:g}),jsxRuntimeExports.jsx("div",{className:"explorer__divider",onMouseDown:s}),jsxRuntimeExports.jsx(WorkspaceExplorerThreadsSection,{workspaceId:i,acts:Z,threadRows:ge,expandedRows:ue,pendingDelete:re,renamingSession:te,editingTarget:f,selectedActId:ye,activeThreadId:Q,actThreads:oe,onToggleExpanded:Ae,onSetPendingDelete:ae,onBeginRenamePerformerSession:ke,onCommitRenameSession:Re,onCancelRenameSession:we,onSetRenamingValue:m=>fe(E=>E&&{...E,value:m}),performerSessionLabel:Se,onOpenPerformer:j,onOpenPerformerSession:$,onDeleteSession:W,onAddPerformer:()=>R(`Performer ${ce.length+1}`),onAddAct:()=>useStudioStore.getState().addAct(`Act ${Z.length+1}`),onTogglePerformerVisibility:K,onOpenPerformerEditor:B,onSetActiveChatPerformer:b,onRemovePerformer:le,onSavePerformerAsDraft:se,onOpenAct:N,onCreateThread:async m=>{await J(m)},onSaveActAsDraft:G,onToggleActVisibility:ne,onRemoveAct:F,onSelectThread:p,onDeleteThread:Y,onRenameThread:V,onStartNewSession:m=>void he(m),onOpenActEditor:m=>de(m)})]})}const AssetLibrary=reactExports.lazy(()=>__vitePreload(()=>import("./index-Dn7t_Y7G.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])).then(e=>({default:e.AssetLibrary})));function LeftSidebar$1(){const e=useStudioStore(h=>h.isAssetLibraryOpen),r=useStudioStore(h=>h.setAssetLibraryOpen),t=useStudioStore(h=>h.focusSnapshot),[n,s]=reactExports.useState(240),[i,o]=reactExports.useState(320),c=reactExports.useCallback(()=>{const h=g=>{g.preventDefault(),g.stopPropagation(),document.removeEventListener("click",h,!0)};document.addEventListener("click",h,!0),window.setTimeout(()=>{document.removeEventListener("click",h,!0)},0)},[]),l=(h,g,A)=>{const v=reactExports.useRef(!1);return reactExports.useCallback(y=>{y.preventDefault(),y.stopPropagation(),v.current=!0;const k=y.clientX,R=(()=>{const b=y.target.parentElement;return b?b.getBoundingClientRect().width:240})(),T=b=>{if(!v.current)return;const B=b.clientX-k;h(Math.min(A,Math.max(g,R+B)))},C=b=>{b.preventDefault(),b.stopPropagation(),v.current=!1,document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",C),document.body.style.cursor="",document.body.style.userSelect="",c()};document.addEventListener("mousemove",T),document.addEventListener("mouseup",C),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[h,g,A])},d=l(s,180,400),u=l(o,240,480),f=!!t,x=!f&&e;return reactExports.useEffect(()=>{f&&e&&r(!1)},[f,e,r]),jsxRuntimeExports.jsxs("div",{className:`sidebar-container ${x?"sidebar-container--drawer-open":""}`,children:[jsxRuntimeExports.jsxs("div",{className:"sidebar",style:{width:n},children:[jsxRuntimeExports.jsx("div",{className:"sidebar-main-top",style:{flex:1,display:"flex",flexDirection:"column"},children:jsxRuntimeExports.jsx(WorkspaceExplorer,{})}),!f&&jsxRuntimeExports.jsx("div",{className:"sidebar-main-bottom sidebar-main-bottom--asset-drawer",children:jsxRuntimeExports.jsxs("button",{className:`asset-library-btn ${x?"active":""}`,onClick:()=>r(!e),children:[jsxRuntimeExports.jsx(LayoutGrid,{size:14}),jsxRuntimeExports.jsx("span",{children:"Asset Library"}),jsxRuntimeExports.jsx(ChevronRight,{size:12,className:`asset-library-arrow ${x?"rotated":""}`})]})}),jsxRuntimeExports.jsx("div",{className:"sidebar-resize-handle",onMouseDown:d,onClick:h=>{h.preventDefault(),h.stopPropagation()}})]}),jsxRuntimeExports.jsxs("div",{className:`sidebar-drawer left-drawer ${x?"open":""}`,style:x?{width:i}:void 0,children:[jsxRuntimeExports.jsx("div",{className:"sidebar-resize-handle sidebar-resize-handle--drawer",onMouseDown:u,onClick:h=>{h.preventDefault(),h.stopPropagation()}}),x?jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(AssetLibrary,{onClose:()=>r(!1)})}):null]})]})}function isProjectMcpCatalog(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function extractProjectMcpCatalog(e){if(!e||typeof e!="object")return{};const r=e;return isProjectMcpCatalog(r.mcp)?r.mcp:{}}function projectMcpServerNames(e){return Object.keys(extractProjectMcpCatalog(e))}function createJSONStorage(e,r){let t;try{t=e()}catch{return}return{getItem:s=>{var i;const o=l=>l===null?null:JSON.parse(l,void 0),c=(i=t.getItem(s))!=null?i:null;return c instanceof Promise?c.then(o):o(c)},setItem:(s,i)=>t.setItem(s,JSON.stringify(i,void 0)),removeItem:s=>t.removeItem(s)}}const toThenable=e=>r=>{try{const t=e(r);return t instanceof Promise?t:{then(n){return toThenable(n)(t)},catch(n){return this}}}catch(t){return{then(n){return this},catch(n){return toThenable(n)(t)}}}},persistImpl=(e,r)=>(t,n,s)=>{let i={storage:createJSONStorage(()=>window.localStorage),partialize:v=>v,version:0,merge:(v,S)=>({...S,...v}),...r},o=!1,c=0;const l=new Set,d=new Set;let u=i.storage;if(!u)return e((...v)=>{console.warn(`[zustand persist middleware] Unable to update item '${i.name}', the given storage is currently unavailable.`),t(...v)},n,s);const f=()=>{const v=i.partialize({...n()});return u.setItem(i.name,{state:v,version:i.version})},x=s.setState;s.setState=(v,S)=>(x(v,S),f());const h=e((...v)=>(t(...v),f()),n,s);s.getInitialState=()=>h;let g;const A=()=>{var v,S;if(!u)return;const y=++c;o=!1,l.forEach(R=>{var T;return R((T=n())!=null?T:h)});const k=((S=i.onRehydrateStorage)==null?void 0:S.call(i,(v=n())!=null?v:h))||void 0;return toThenable(u.getItem.bind(u))(i.name).then(R=>{if(R)if(typeof R.version=="number"&&R.version!==i.version){if(i.migrate){const T=i.migrate(R.state,R.version);return T instanceof Promise?T.then(C=>[!0,C]):[!0,T]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,R.state];return[!1,void 0]}).then(R=>{var T;if(y!==c)return;const[C,b]=R;if(g=i.merge(b,(T=n())!=null?T:h),t(g,!0),C)return f()}).then(()=>{y===c&&(k==null||k(g,void 0),g=n(),o=!0,d.forEach(R=>R(g)))}).catch(R=>{y===c&&(k==null||k(void 0,R))})};return s.persist={setOptions:v=>{i={...i,...v},v.storage&&(u=v.storage)},clearStorage:()=>{u==null||u.removeItem(i.name)},getOptions:()=>i,rehydrate:()=>A(),hasHydrated:()=>o,onHydrate:v=>(l.add(v),()=>{l.delete(v)}),onFinishHydration:v=>(d.add(v),()=>{d.delete(v)})},i.skipHydration||A(),g||h},persist=persistImpl,defaults={showReasoningSummaries:!1,shellToolPartsExpanded:!0,editToolPartsExpanded:!1,followup:"steer"},useUISettings=create()(persist(e=>({...defaults,setShowReasoningSummaries:r=>e({showReasoningSummaries:r}),setShellToolPartsExpanded:r=>e({shellToolPartsExpanded:r}),setEditToolPartsExpanded:r=>e({editToolPartsExpanded:r}),setFollowup:r=>e({followup:r})}),{name:"dot-studio-ui-settings"}));HighlightJS.registerLanguage("typescript",typescript);HighlightJS.registerLanguage("javascript",javascript);HighlightJS.registerLanguage("python",python);HighlightJS.registerLanguage("css",css);HighlightJS.registerLanguage("json",json$1);HighlightJS.registerLanguage("xml",xml);HighlightJS.registerLanguage("html",xml);HighlightJS.registerLanguage("bash",bash);HighlightJS.registerLanguage("shell",bash);HighlightJS.registerLanguage("markdown",markdown);HighlightJS.registerLanguage("yaml",yaml);HighlightJS.registerLanguage("sql",sql);HighlightJS.registerLanguage("go",go);HighlightJS.registerLanguage("rust",rust);HighlightJS.registerLanguage("java",java);HighlightJS.registerLanguage("csharp",csharp);HighlightJS.registerLanguage("diff",diff);HighlightJS.registerLanguage("ts",typescript);HighlightJS.registerLanguage("tsx",typescript);HighlightJS.registerLanguage("js",javascript);HighlightJS.registerLanguage("jsx",javascript);HighlightJS.registerLanguage("py",python);HighlightJS.registerLanguage("md",markdown);HighlightJS.registerLanguage("yml",yaml);HighlightJS.registerLanguage("sh",bash);HighlightJS.registerLanguage("zsh",bash);HighlightJS.registerLanguage("cs",csharp);function langFromFilename(e){var n;if(!e)return;const r=(n=e.split(".").pop())==null?void 0:n.toLowerCase();return r?{ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",py:"python",css:"css",json:"json",html:"xml",xml:"xml",svg:"xml",sh:"bash",bash:"bash",zsh:"bash",md:"markdown",yaml:"yaml",yml:"yaml",sql:"sql",go:"go",rs:"rust",java:"java",cs:"csharp",diff:"diff",patch:"diff"}[r]:void 0}function SyntaxBlock({code:e,language:r,filename:t,lineNumbers:n=!0,maxHeight:s=400,variant:i="default"}){const o=r||langFromFilename(t||""),c=reactExports.useMemo(()=>{if(!e)return"";try{return o&&HighlightJS.getLanguage(o)?HighlightJS.highlight(e,{language:o}).value:HighlightJS.highlightAuto(e).value}catch{return escapeHtml(e)}},[e,o]),l=reactExports.useMemo(()=>e.split(`
|
|
60
|
+
`),[e]);return jsxRuntimeExports.jsx("div",{className:`syntax-block syntax-block--${i}`,style:{maxHeight:`${s}px`},"data-scrollable":!0,children:jsxRuntimeExports.jsxs("pre",{className:"syntax-block__pre",children:[n&&jsxRuntimeExports.jsx("span",{className:"syntax-block__gutter","aria-hidden":"true",children:l.map((d,u)=>jsxRuntimeExports.jsx("span",{className:"syntax-block__line-num",children:u+1},u))}),jsxRuntimeExports.jsx("code",{className:`syntax-block__code hljs${o?` language-${o}`:""}`,dangerouslySetInnerHTML:{__html:c}})]})})}function escapeHtml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function DiffBlock({before:e,after:r,filename:t,maxHeight:n=400}){const s=langFromFilename(t||"");return jsxRuntimeExports.jsxs("div",{className:"diff-block",style:{maxHeight:`${n}px`},"data-scrollable":!0,children:[e&&jsxRuntimeExports.jsxs("div",{className:"diff-block__section diff-block__section--old",children:[jsxRuntimeExports.jsx("div",{className:"diff-block__section-label",children:"Before"}),jsxRuntimeExports.jsx(SyntaxBlock,{code:e,language:s,lineNumbers:!1,maxHeight:1e6,variant:"diff-old"})]}),r&&jsxRuntimeExports.jsxs("div",{className:"diff-block__section diff-block__section--new",children:[jsxRuntimeExports.jsx("div",{className:"diff-block__section-label",children:"After"}),jsxRuntimeExports.jsx(SyntaxBlock,{code:r,language:s,lineNumbers:!1,maxHeight:1e6,variant:"diff-new"})]})]})}const TRACK=Array.from({length:30},(e,r)=>r%10),DURATION=600;function normalize(e){return(e%10+10)%10}function spin(e,r,t){return e===r?0:t>0?(r-e+10)%10:-((e-r+10)%10)}function Digit({value:e,direction:r}){const[t,n]=reactExports.useState(e+10),[s,i]=reactExports.useState(!1),o=reactExports.useRef(e);reactExports.useEffect(()=>{const l=o.current,d=spin(l,e,r);if(o.current=e,!d){i(!1),n(e+10);return}i(!0),n(u=>u+d)},[e,r]);const c=()=>{i(!1),n(l=>normalize(l)+10)};return jsxRuntimeExports.jsx("span",{"data-slot":"animated-number-digit",children:jsxRuntimeExports.jsx("span",{"data-slot":"animated-number-strip","data-animating":s?"true":"false",onTransitionEnd:c,style:{"--animated-number-offset":`${t}`,"--animated-number-duration":`${DURATION}ms`},children:TRACK.map((l,d)=>jsxRuntimeExports.jsx("span",{"data-slot":"animated-number-cell",children:l},d))})})}function AnimatedNumber({value:e,className:r=""}){const t=reactExports.useMemo(()=>Number.isFinite(e)?Math.max(0,Math.round(e)):0,[e]),[n,s]=reactExports.useState(t),[i,o]=reactExports.useState(1);reactExports.useEffect(()=>{t!==n&&(o(t>n?1:-1),s(t))},[t,n]);const c=reactExports.useMemo(()=>{const d=n.toString();return Array.from(d,u=>{const f=u.charCodeAt(0)-48;return f<0||f>9?0:f}).reverse()},[n]),l=`${c.length}ch`;return jsxRuntimeExports.jsx("span",{"data-component":"animated-number",className:r,"aria-label":n.toString(),children:jsxRuntimeExports.jsx("span",{"data-slot":"animated-number-value",style:{"--animated-number-width":l},children:c.map((d,u)=>jsxRuntimeExports.jsx(Digit,{value:d,direction:i},u))})})}function usePreventBrowserZoom(e){reactExports.useEffect(()=>{const r=e.current;if(!r)return;const t=s=>{(s.ctrlKey||s.metaKey)&&s.preventDefault()},n=s=>{s.preventDefault()};return r.addEventListener("wheel",t,{passive:!1}),r.addEventListener("gesturestart",n,{passive:!1}),r.addEventListener("gesturechange",n,{passive:!1}),r.addEventListener("gestureend",n,{passive:!1}),()=>{r.removeEventListener("wheel",t),r.removeEventListener("gesturestart",n),r.removeEventListener("gesturechange",n),r.removeEventListener("gestureend",n)}},[e])}function CanvasControls(){const{fitView:e,zoomIn:r,zoomOut:t,getViewport:n,setViewport:s}=useReactFlow(),[i,o]=reactExports.useState(!1),c=reactExports.useRef(null),{selectedPerformerId:l,selectedActId:d,focusSnapshot:u,enterFocusMode:f,exitFocusMode:x,exitActLayoutMode:h}=useStudioStore(),g=!!u,A=reactExports.useCallback(()=>{i&&c.current?(s(c.current,{duration:400}),o(!1)):(c.current=n(),e({duration:400,padding:.1,maxZoom:1}),o(!0))},[i,e,n,s]),v=reactExports.useCallback(()=>{const S=l||d,y=l?"performer":"act";S&&f(S,y,getCanvasViewportSize())},[l,d,f,e]);return reactExports.useEffect(()=>{const S=y=>{if(y.key==="Escape"){if((u==null?void 0:u.type)==="act"){h(),x(),scheduleFitView(e);return}g&&(x(),scheduleFitView(e))}};return window.addEventListener("keydown",S),()=>window.removeEventListener("keydown",S)},[g,x,u,h,e]),g?null:jsxRuntimeExports.jsxs("div",{className:"canvas-controls",children:[jsxRuntimeExports.jsx("button",{className:"canvas-controls__btn",onClick:()=>r({duration:200}),title:"Zoom In",children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[jsxRuntimeExports.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsxRuntimeExports.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),jsxRuntimeExports.jsx("button",{className:"canvas-controls__btn",onClick:()=>t({duration:200}),title:"Zoom Out",children:jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntimeExports.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})})}),(l||d)&&jsxRuntimeExports.jsx("button",{className:"canvas-controls__btn",onClick:v,title:"Focus Selected",children:jsxRuntimeExports.jsx(Maximize2,{size:14})}),jsxRuntimeExports.jsx("button",{className:"canvas-controls__btn",onClick:A,title:i?"Restore View":"Fit to Screen",children:i?jsxRuntimeExports.jsx(Minimize,{size:14}):jsxRuntimeExports.jsx(Maximize,{size:14})})]})}function CanvasDropOverlay({active:e,label:r}){return r?jsxRuntimeExports.jsx("div",{className:`canvas-drop-overlay ${e?"is-active":""}`,children:jsxRuntimeExports.jsxs("div",{className:"canvas-drop-overlay__card",children:[jsxRuntimeExports.jsx("div",{className:"canvas-drop-overlay__title",children:"Canvas drop target"}),jsxRuntimeExports.jsx("div",{className:"canvas-drop-overlay__body",children:r})]})}):null}function getCanvasDropLabel(e){return e!=="performer"?null:"Drop to add this performer to the current stage"}function routeActConnection(e){const{currentActId:r,connection:t,nodes:n,onConnectPerformersInAct:s}=e;if(!r||!t.source||!t.target||t.source===t.target)return!1;const i=n.find(c=>c.id===t.source),o=n.find(c=>c.id===t.target);return(i==null?void 0:i.type)==="performer"&&(o==null?void 0:o.type)==="performer"?(s(r,[t.source,t.target]),!0):!1}function roundedPosition(e){return{x:Math.round(e.position.x),y:Math.round(e.position.y)}}function shouldIgnoreCanvasInteractiveClick(e){return e instanceof HTMLElement&&!!e.closest(".canvas-drag-handle--interactive")}function resolveCanvasDragStop(e){const r=roundedPosition(e);return e.type==="markdownEditor"?{kind:"markdownEditor",id:e.id,...r}:e.type==="canvasTerminal"?{kind:"canvasTerminal",id:e.id,...r}:e.type==="stageTracking"?{kind:"stageTracking",...r}:e.type==="act"?{kind:"act",id:e.id,...r}:{kind:"performer",id:e.id,...r}}function resolveCanvasNodeClick(e,r,t){return shouldIgnoreCanvasInteractiveClick(r)?{kind:"ignore"}:e.type==="markdownEditor"?{kind:"markdownEditor",id:e.id}:e.type==="canvasTerminal"?{kind:"canvasTerminal"}:e.type==="stageTracking"?{kind:"stageTracking"}:e.type==="act"?{kind:"act",id:e.id}:{kind:"performer",id:e.id,shouldCloseEditor:!!(t&&!(t.type==="performer"&&t.id===e.id))}}function resolveCanvasEdgeClick(e){if(e.id.startsWith("rel:")){const t=e.id.split(":");return t.length>=3?t.slice(2).join(":"):e.id}const r=e.id.indexOf("-rel-");return r>=0?e.id.slice(r+1):e.id}function resolveCanvasResizeChange(e,r){if(e.type!=="dimensions"||e.resizing!==!1||!e.dimensions)return null;const t=r.find(i=>i.id===e.id),{width:n,height:s}=e.dimensions;return(t==null?void 0:t.type)==="markdownEditor"?{kind:"markdownEditor",id:e.id,width:n,height:s}:(t==null?void 0:t.type)==="canvasTerminal"?{kind:"canvasTerminal",id:e.id,width:n,height:s}:(t==null?void 0:t.type)==="stageTracking"?{kind:"stageTracking",width:n,height:s}:(t==null?void 0:t.type)==="act"?{kind:"act",id:e.id,width:n,height:s}:{kind:"performer",id:e.id,width:n,height:s}}function useCanvasFlowHandlers(e){const{nodes:r,editingActId:t,editingTarget:n,reactFlowInstance:s,canvasAreaRef:i,transformTarget:o,clearTransformTarget:c,closeEditor:l,closeActEditor:d,openActEditor:u,openActRelationEditor:f,setCanvasCenter:x,selectMarkdownEditor:h,selectPerformer:g,setActiveChatPerformer:A,selectAct:v,attachPerformerToAct:S,addRelation:y,onNodesChange:k,updateMarkdownEditorPosition:R,updateCanvasTerminalPosition:T,updateTrackingWindowPosition:C,updateActPosition:b,updatePerformerPosition:B,updateActSize:U,updateMarkdownEditorSize:W,updateCanvasTerminalSize:K,updateTrackingWindowSize:le,updatePerformerSize:se}=e,G=reactExports.useCallback((Q,J)=>{if(!t)return;const q=resolveCanvasEdgeClick(J);q&&f(t,q)},[t,f]),Z=reactExports.useCallback((Q,J)=>{const q=resolveCanvasDragStop(J);switch(q.kind){case"markdownEditor":R(q.id,q.x,q.y);return;case"canvasTerminal":T(q.id,q.x,q.y);return;case"stageTracking":C(q.x,q.y);return;case"act":b(q.id,q.x,q.y);return;case"performer":B(q.id,q.x,q.y);return}},[R,T,C,b,B]),ye=reactExports.useCallback((Q,J)=>{const q=resolveCanvasNodeClick(J,Q.target,n);if(q.kind!=="ignore")switch(c(),q.kind){case"markdownEditor":l(),t||d(),h(q.id);return;case"canvasTerminal":case"stageTracking":l(),t||d(),g(null),h(null);return;case"act":l(),g(null),h(null),v(q.id);return;case"performer":if(t){l(),v(t);return}q.shouldCloseEditor&&l(),d(),g(q.id),A(q.id);return}},[n,t,c,l,d,h,g,v,A]),ie=reactExports.useCallback(()=>{c(),l(),t||(d(),v(null)),g(null),h(null)},[c,l,t,d,g,h,v]),F=reactExports.useCallback(Q=>{routeActConnection({currentActId:t,connection:Q,nodes:r,onConnectPerformersInAct:(J,q)=>{const Y=useStudioStore.getState(),V=Y.acts.find(ee=>ee.id===J);if((V?Object.keys(V.participants).length:0)>0){const ee=re=>{var fe,ve;const ae=Y.performers.find(ce=>ce.id===re),te=(ve=(fe=ae==null?void 0:ae.meta)==null?void 0:fe.derivedFrom)==null?void 0:ve.trim();return V&&Object.values(V.participants).some(ce=>{const pe=ce.performerRef;return pe.kind==="draft"&&pe.draftId===re||pe.kind==="registry"&&!!te&&pe.urn===te})};if(!ee(q[0])&&!ee(q[1]))return}const de=S(J,q[0]),ue=S(J,q[1]);!de||!ue||de===ue||(y(J,[de,ue],"one-way"),u(J,"act"))}})},[t,r,S,y,u]),ne=reactExports.useCallback(Q=>{const J=Q.filter(q=>q.type!=="select");k(J),Q.forEach(q=>{const Y=resolveCanvasResizeChange(q,r);if(!(!Y||!("id"in Y&&o&&o.id===Y.id&&o.type===Y.kind||Y.kind==="stageTracking"&&(o==null?void 0:o.type)==="stageTracking")))switch(Y.kind){case"markdownEditor":W(Y.id,Y.width,Y.height);return;case"canvasTerminal":K(Y.id,Y.width,Y.height);return;case"stageTracking":le(Y.width,Y.height);return;case"act":U(Y.id,Y.width,Y.height);return;case"performer":se(Y.id,Y.width,Y.height);return}})},[k,r,o,W,K,le,U,se]),oe=reactExports.useCallback(()=>{if(!s||!i.current)return;const Q=i.current.getBoundingClientRect(),J=s.screenToFlowPosition({x:Q.left+Q.width/2,y:Q.top+Q.height/2});x(Math.round(J.x),Math.round(J.y))},[s,i,x]);return{onEdgeClick:G,onNodeDragStop:Z,onNodeClick:ye,onPaneClick:ie,onConnect:F,handleNodesChange:ne,onMoveEnd:oe}}function useCanvasTransformTarget(e){const{acts:r,performers:t,markdownEditors:n,canvasTerminals:s,trackingWindow:i}=e,[o,c]=reactExports.useState(null),l=reactExports.useCallback(()=>{c(null)},[]),d=reactExports.useCallback((f,x)=>{c({type:f,id:x})},[]),u=reactExports.useCallback((f,x)=>{c(h=>h&&h.type===f&&h.id===x?null:h)},[]);return reactExports.useEffect(()=>{if(!o)return;o.type==="act"&&r.some(x=>x.id===o.id)||o.type==="performer"&&t.some(x=>x.id===o.id)||o.type==="markdownEditor"&&n.some(x=>x.id===o.id)||o.type==="canvasTerminal"&&s.some(x=>x.id===o.id)||o.type==="stageTracking"&&(i==null?void 0:i.id)===o.id||c(null)},[r,t,n,s,i,o]),{transformTarget:o,clearTransformTarget:l,activateTransformTarget:d,deactivateTransformTarget:u}}function useCanvasFocusFit(e){const{focusedPerformerId:r,focusSnapshot:t,canvasRevealTarget:n,reactFlowInstance:s,nodeCount:i}=e;reactExports.useEffect(()=>{const o=(n==null?void 0:n.id)||resolveFocusNodeId(t,r);if(!s||!o)return;const c=!!t&&o===resolveFocusNodeId(t,r),l=window.setTimeout(()=>{if(c){s.setViewport({x:0,y:0,zoom:1});return}s.fitView({duration:250,padding:.15,minZoom:1,maxZoom:1,nodes:[{id:o}]})},80);return()=>{window.clearTimeout(l)}},[r,t,n==null?void 0:n.id,n==null?void 0:n.nonce,s,i])}function resolvePerformerNodeId(e,r,t){var i;const n=e.participants[r];if(!n)return null;const s=n.performerRef;return s.kind==="draft"?s.draftId||null:((i=t.find(o=>{var c;return((c=o.meta)==null?void 0:c.derivedFrom)===s.urn}))==null?void 0:i.id)||null}function pickHandles(e,r){const t=r.x-e.x,n=r.y-e.y;return Math.abs(t)>=Math.abs(n)?t>=0?{sourceHandle:"right",targetHandle:"left"}:{sourceHandle:"left",targetHandle:"right"}:n>=0?{sourceHandle:"bottom",targetHandle:"top"}:{sourceHandle:"top",targetHandle:"bottom"}}const PAIR_OFFSET=50;function buildRelationEdges(e,r,t){const n=[],s=new Map,i=new Map;for(const o of e)for(const c of o.relations){const l=resolvePerformerNodeId(o,c.between[0],r),d=resolvePerformerNodeId(o,c.between[1],r);if(!l||!d)continue;const u=[l,d].sort().join(":");s.set(u,(s.get(u)||0)+1)}for(const o of e)for(const c of o.relations){const l=resolvePerformerNodeId(o,c.between[0],r),d=resolvePerformerNodeId(o,c.between[1],r);if(!l||!d)continue;const u=[l,d].sort().join(":"),f=i.get(u)||0;i.set(u,f+1);const x=s.get(u)||1;let h=0;if(x===2)h=f===0?-PAIR_OFFSET:PAIR_OFFSET;else if(x>2){const y=(x-1)/2;h=(f-y)*PAIR_OFFSET}const g=t.get(l),A=t.get(d),v=g&&A?pickHandles(g,A):{sourceHandle:"right",targetHandle:"left-target"},S=c.direction==="one-way";n.push({id:`rel:${o.id}:${c.id}`,source:l,target:d,sourceHandle:v.sourceHandle,targetHandle:v.targetHandle,type:"offsetBezier",animated:S,data:{offset:h},label:c.name||void 0,...S?{markerEnd:{type:MarkerType.ArrowClosed,width:16,height:16,color:"var(--info, #58f)"}}:{markerEnd:{type:MarkerType.ArrowClosed,width:12,height:12,color:"var(--accent)"},markerStart:{type:MarkerType.ArrowClosed,width:12,height:12,color:"var(--accent)"}},style:{stroke:S?"var(--info, #58f)":"var(--accent)",strokeWidth:S?2:1.5,strokeDasharray:S?"6 3":void 0}})}return n}function composeCanvasEdges(e,r,t){if(!r)return[];const n=e.find(i=>i.id===r);if(!n)return[];const s=new Map;if(t)for(const i of t)s.set(i.id,i.position);return buildRelationEdges([n],t||[],s)}function composeCanvasNodes(e){return[...e.performerNodes,...e.markdownEditorNodes,...e.canvasTerminalNodes,...e.trackingNodes,...e.actNodes]}function getCanvasWindowZIndex({selected:e=!1,focused:r=!1,editing:t=!1,transformActive:n=!1}){return n?80:t?70:r?60:e?50:1}function assetRefLabel(e,r){if(!e)return null;if(e.kind==="draft"){const t=r[e.draftId];return(t==null?void 0:t.name)||(t==null?void 0:t.slug)||`Draft · ${e.draftId.slice(0,8)}`}return assetUrnDisplayName(e.urn)}function danceSummaryLabel(e,r){if(e.length===0)return null;const t=e.map(n=>assetRefLabel(n,r)).filter(n=>!!n);return t.length===0?`${e.length} dance${e.length===1?"":"s"}`:t.length>1?`${t[0]} +${t.length-1}`:t[0]}function buildPerformerCanvasNodes(e){const{acts:r,editingActId:t,performers:n,selectedPerformerId:s,focusedPerformerId:i,editingTarget:o,transformTarget:c,drafts:l,performerMcpSummary:d,onActivateTransform:u,onDeactivateTransform:f}=e,x=t&&r.find(g=>g.id===t)||null,h=g=>x?Object.values(x.participants).some(A=>{var S;const v=A.performerRef;return v.kind==="draft"?v.draftId===g.id:((S=g.meta)==null?void 0:S.derivedFrom)===v.urn}):!1;return n.map(g=>{var A;return{id:g.id,type:"performer",position:g.position,selected:g.id===s,dragHandle:".canvas-frame__header",hidden:g.hidden,zIndex:getCanvasWindowZIndex({selected:g.id===s,focused:i===g.id,editing:(o==null?void 0:o.type)==="performer"&&o.id===g.id,transformActive:(c==null?void 0:c.type)==="performer"&&c.id===g.id}),data:{name:g.name,width:g.width,height:g.height,model:g.model,modelLabel:((A=g.model)==null?void 0:A.modelId)||null,modelTitle:g.model?`${g.model.provider}/${g.model.modelId}`:null,modelVariant:g.modelVariant||null,agentId:g.agentId||null,modelConfigured:hasModelConfig(g.model),planMode:g.planMode,transformActive:(c==null?void 0:c.type)==="performer"&&c.id===g.id,onActivateTransform:()=>u("performer",g.id),onDeactivateTransform:()=>f("performer",g.id),talLabel:assetRefLabel(g.talRef,l),danceSummary:danceSummaryLabel(g.danceRefs,l),mcpSummary:d(g),editMode:(o==null?void 0:o.type)==="performer"&&o.id===g.id,actEditConnectVisible:!!x,actEditParticipant:h(g),actEditDimmed:!!x&&!h(g)},style:{width:g.width||400,height:g.height||500}}})}function buildMarkdownEditorCanvasNodes(e){const{markdownEditors:r,selectedMarkdownEditorId:t,transformTarget:n,workingDir:s,onActivateTransform:i,onDeactivateTransform:o}=e;return r.map(c=>({id:c.id,type:"markdownEditor",position:c.position,selected:c.id===t,dragHandle:".canvas-frame__header",hidden:c.hidden,zIndex:getCanvasWindowZIndex({selected:c.id===t,editing:t===c.id,transformActive:(n==null?void 0:n.type)==="markdownEditor"&&n.id===c.id}),data:{kind:c.kind,draftId:c.draftId,baseline:c.baseline,attachTarget:c.attachTarget,width:c.width,height:c.height,transformActive:(n==null?void 0:n.type)==="markdownEditor"&&n.id===c.id,onActivateTransform:()=>i("markdownEditor",c.id),onDeactivateTransform:()=>o("markdownEditor",c.id),workingDir:s},style:{width:c.width||560,height:c.height||420}}))}function buildCanvasTerminalWindowNodes(e){const{canvasTerminals:r,transformTarget:t,onActivateTransform:n,onDeactivateTransform:s,onCloseTerminal:i,onResizeTerminal:o,onSessionChange:c}=e;return r.map(l=>({id:l.id,type:"canvasTerminal",position:l.position,dragHandle:".canvas-frame__header",zIndex:getCanvasWindowZIndex({transformActive:(t==null?void 0:t.type)==="canvasTerminal"&&t.id===l.id}),data:{nodeId:l.id,title:l.title,width:l.width,height:l.height,transformActive:(t==null?void 0:t.type)==="canvasTerminal"&&t.id===l.id,onActivateTransform:()=>n("canvasTerminal",l.id),onDeactivateTransform:()=>s("canvasTerminal",l.id),onClose:()=>i(l.id),onResize:(d,u)=>o(l.id,d,u),onSessionChange:(d,u)=>c(l.id,d,u)},style:{width:l.width||600,height:l.height||400}}))}function buildTrackingWindowNodes(e){const{trackingWindow:r,transformTarget:t,onActivateTransform:n,onDeactivateTransform:s,onCloseTrackingWindow:i,onResizeTrackingWindow:o}=e;return r?[{id:r.id,type:"stageTracking",position:r.position,dragHandle:".canvas-frame__header",zIndex:getCanvasWindowZIndex({transformActive:(t==null?void 0:t.type)==="stageTracking"&&t.id===r.id}),data:{title:r.title,width:r.width,height:r.height,transformActive:(t==null?void 0:t.type)==="stageTracking"&&t.id===r.id,onActivateTransform:()=>n("stageTracking",r.id),onDeactivateTransform:()=>s("stageTracking",r.id),onClose:()=>i(),onResize:(c,l)=>o(c,l)},style:{width:r.width||420,height:r.height||360}}]:[]}function buildActCanvasNodes(e){const{acts:r,editingActId:t,selectedActId:n,transformTarget:s,onActivateTransform:i,onDeactivateTransform:o}=e;return r.map(c=>({id:c.id,type:"act",position:c.position,dragHandle:".canvas-frame__header",hidden:c.hidden,zIndex:getCanvasWindowZIndex({editing:t===c.id,selected:n===c.id,transformActive:(s==null?void 0:s.type)==="act"&&s.id===c.id}),data:{width:c.width||ACT_DEFAULT_WIDTH,height:resolveActExpandedHeight(c.height),editMode:t===c.id,transformActive:(s==null?void 0:s.type)==="act"&&s.id===c.id,onActivateTransform:()=>i("act",c.id),onDeactivateTransform:()=>o("act",c.id)},style:{width:c.width||ACT_DEFAULT_WIDTH,height:resolveActExpandedHeight(c.height)}}))}function useCanvasPresentation(e){const{acts:r,performers:t,markdownEditors:n,canvasTerminals:s,trackingWindow:i,drafts:o,workingDir:c,editingActId:l,selectedActId:d,selectedPerformerId:u,selectedMarkdownEditorId:f,focusedPerformerId:x,editingTarget:h,transformTarget:g,performerMcpSummary:A,onActivateTransform:v,onDeactivateTransform:S,onCloseTerminal:y,onResizeTerminal:k,onSessionChange:R,onCloseTrackingWindow:T,onResizeTrackingWindow:C}=e,[b,B,U]=useNodesState([]),W=reactExports.useCallback(()=>buildPerformerCanvasNodes({acts:r,editingActId:l,performers:t,selectedPerformerId:u,focusedPerformerId:x,editingTarget:h,transformTarget:g,drafts:o,performerMcpSummary:A,onActivateTransform:v,onDeactivateTransform:S}),[r,l,t,u,x,h,g,o,A,v,S]),K=reactExports.useCallback(()=>buildMarkdownEditorCanvasNodes({markdownEditors:n,selectedMarkdownEditorId:f,transformTarget:g,workingDir:c,onActivateTransform:v,onDeactivateTransform:S}),[n,f,g,c,v,S]),le=reactExports.useCallback(()=>buildCanvasTerminalWindowNodes({canvasTerminals:s,transformTarget:g,onActivateTransform:v,onDeactivateTransform:S,onCloseTerminal:y,onResizeTerminal:k,onSessionChange:R}),[s,g,v,S,y,k,R]),se=reactExports.useCallback(()=>buildTrackingWindowNodes({trackingWindow:i,transformTarget:g,onActivateTransform:v,onDeactivateTransform:S,onCloseTrackingWindow:T,onResizeTrackingWindow:C}),[i,g,v,S,T,C]),G=reactExports.useCallback(()=>buildActCanvasNodes({acts:r,editingActId:l,selectedActId:d,transformTarget:g,onActivateTransform:v,onDeactivateTransform:S}),[r,l,d,g,v,S]);reactExports.useEffect(()=>{B(composeCanvasNodes({performerNodes:W(),markdownEditorNodes:K(),canvasTerminalNodes:le(),trackingNodes:se(),actNodes:G()}))},[W,K,le,se,G,B]);const Z=reactExports.useMemo(()=>composeCanvasEdges(r,l,t),[r,l,t]);return{nodes:b,setNodes:B,onNodesChange:U,edges:Z}}function OffsetBezierEdge({id:e,sourceX:r,sourceY:t,targetX:n,targetY:s,data:i,style:o,markerEnd:c,markerStart:l,label:d}){const u=(i==null?void 0:i.offset)||0,f=r<n||r===n&&t<s,x=f?n-r:r-n,h=f?s-t:t-s,g=Math.sqrt(x*x+h*h)||1,A=-h/g,v=x/g,S=n-r,y=s-t,k=u*2,R=r+S*.25+A*k,T=t+y*.25+v*k,C=r+S*.75+A*k,b=t+y*.75+v*k,B=`M ${r} ${t} C ${R} ${T}, ${C} ${b}, ${n} ${s}`,U=r*.125+R*.375+C*.375+n*.125,W=t*.125+T*.375+b*.375+s*.125;return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(BaseEdge,{id:e,path:B,style:o,markerEnd:c,markerStart:l}),d&&jsxRuntimeExports.jsx(EdgeLabelRenderer,{children:jsxRuntimeExports.jsx("div",{className:"react-flow__edge-label",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${U}px, ${W}px)`,pointerEvents:"all",background:"var(--bg-surface)",opacity:.9,padding:"3px 6px",borderRadius:4,fontSize:10,fontWeight:600,color:"var(--text-muted)"},children:d})})]})}const ActInspectorPanel=reactExports.lazy(()=>__vitePreload(()=>import("./ActInspectorPanel-C3VlS7tB.js"),__vite__mapDeps([13,1,14,3,5,9,10,4,6,7,11,12,15]))),WorkspaceToolbar=reactExports.lazy(()=>__vitePreload(()=>import("./WorkspaceToolbar-CXYi_sMD.js").then(e=>e.W),__vite__mapDeps([16,1,8,5,3,17]))),AgentFrame=reactExports.lazy(()=>__vitePreload(()=>import("./index-DMS12-Q2.js"),__vite__mapDeps([18,1,4,9,10,8,5,19,3,20,21,22,6,7,11,12])).then(e=>({default:e.AgentFrame}))),MarkdownEditorFrame=reactExports.lazy(()=>__vitePreload(()=>import("./MarkdownEditorFrame-Dwpgs2GX.js"),__vite__mapDeps([23,1,5,22,6,7,3,8,19,9,10,4,11,12,24]))),CanvasTerminalFrame=reactExports.lazy(()=>__vitePreload(()=>import("./CanvasTerminalFrame-DxKbexK6.js"),__vite__mapDeps([25,1,11,12,19,9,10,3,5,4,6,7,26]))),CanvasTrackingFrame=reactExports.lazy(()=>__vitePreload(()=>import("./CanvasTrackingFrame-DumxhNwg.js"),__vite__mapDeps([27,1,19,9,10,3,5,4,6,7,11,12,28]))),ActFrame=reactExports.lazy(()=>__vitePreload(()=>import("./ActFrame-BYOBkLYW.js"),__vite__mapDeps([29,1,9,10,19,3,21,22,6,7,14,20,5,4,11,12,30]))),withCanvasNodeSuspense=e=>r=>jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(e,{...r})}),nodeTypes={performer:withCanvasNodeSuspense(AgentFrame),markdownEditor:withCanvasNodeSuspense(MarkdownEditorFrame),canvasTerminal:withCanvasNodeSuspense(CanvasTerminalFrame),stageTracking:withCanvasNodeSuspense(CanvasTrackingFrame),act:withCanvasNodeSuspense(ActFrame)},edgeTypes={offsetBezier:OffsetBezierEdge};function CanvasArea(){var j,$;const{performers:e,markdownEditors:r,canvasTerminals:t,trackingWindow:n,drafts:s,workingDir:i,focusedPerformerId:o,focusSnapshot:c,canvasRevealTarget:l,selectedMarkdownEditorId:d,editingTarget:u,updatePerformerPosition:f,updatePerformerSize:x,updateMarkdownEditorPosition:h,updateMarkdownEditorSize:g,updateCanvasTerminalPosition:A,updateCanvasTerminalSize:v,updateCanvasTerminalSession:S,removeCanvasTerminal:y,closeTrackingWindow:k,updateTrackingWindowPosition:R,updateTrackingWindowSize:T,selectedPerformerId:C,selectMarkdownEditor:b,selectPerformer:B,setActiveChatPerformer:U,closeEditor:W,closeActEditor:K,openActEditor:le,setCanvasCenter:se,acts:G,actEditorState:Z,selectedActId:ye,selectAct:ie,openActRelationEditor:F,updateActPosition:ne,updateActSize:oe,attachPerformerToAct:Q,addRelation:J}=useStudioStore(),[q,Y]=reactExports.useState(null),{active:V,isOver:he,setNodeRef:de}=useDroppable({id:"canvas-root-dropzone",data:{type:"canvas-root"}}),ue=reactExports.useRef(null);usePreventBrowserZoom(ue);const ee=reactExports.useCallback(N=>{ue.current=N,de(N)},[de]),{transformTarget:re,clearTransformTarget:ae,activateTransformTarget:te,deactivateTransformTarget:fe}=useCanvasTransformTarget({acts:G,performers:e,markdownEditors:r,canvasTerminals:t,trackingWindow:n}),ve=reactExports.useCallback(N=>{const p=resolvePerformerRuntimeConfig(N).mcpServerNames.length;return p?`${p} server${p===1?"":"s"}`:null},[]),{nodes:ce,onNodesChange:pe,edges:xe}=useCanvasPresentation({acts:G,performers:e,markdownEditors:r,canvasTerminals:t,trackingWindow:n,drafts:s,workingDir:i,editingActId:(Z==null?void 0:Z.actId)||null,selectedActId:ye,selectedPerformerId:C,selectedMarkdownEditorId:d,focusedPerformerId:o,editingTarget:u,transformTarget:re,performerMcpSummary:ve,onActivateTransform:te,onDeactivateTransform:fe,onCloseTerminal:y,onResizeTerminal:v,onSessionChange:S,onCloseTrackingWindow:k,onResizeTrackingWindow:T});useCanvasFocusFit({focusedPerformerId:o,focusSnapshot:c,canvasRevealTarget:l,reactFlowInstance:q,nodeCount:ce.length}),reactExports.useEffect(()=>{if(!c||!ue.current)return;const N=resolveFocusNodeId(c,o);if(!N)return;const p=ue.current;let m=0;const E=()=>{m=0;const _=Math.round(p.clientWidth),P=Math.round(p.clientHeight);!_||!P||(useStudioStore.setState(O=>{if(!O.focusSnapshot)return{};if(O.focusSnapshot.type==="performer"){const L=O.performers.find(z=>z.id===N);return!L||L.width===_&&L.height===P?{}:{performers:O.performers.map(z=>z.id===N?{...z,width:_,height:P}:z)}}const I=O.acts.find(L=>L.id===N);return!I||I.width===_&&I.height===P?{}:{acts:O.acts.map(L=>L.id===N?{...L,width:_,height:P}:L)}}),q==null||q.setViewport({x:0,y:0,zoom:1},{duration:200}))},M=()=>{m&&window.cancelAnimationFrame(m),m=window.requestAnimationFrame(E)};M();const D=new ResizeObserver(M);return D.observe(p),()=>{m&&window.cancelAnimationFrame(m),D.disconnect()}},[c,o,q]);const{onEdgeClick:ge,onNodeDragStop:Ee,onNodeClick:Ae,onPaneClick:Se,onConnect:ke,handleNodesChange:we,onMoveEnd:Re}=useCanvasFlowHandlers({nodes:ce,editingActId:(Z==null?void 0:Z.actId)||null,editingTarget:u,reactFlowInstance:q,canvasAreaRef:ue,transformTarget:re,clearTransformTarget:ae,closeEditor:W,closeActEditor:K,openActEditor:le,openActRelationEditor:F,setCanvasCenter:se,selectMarkdownEditor:b,selectPerformer:B,setActiveChatPerformer:U,selectAct:ie,attachPerformerToAct:Q,addRelation:J,onNodesChange:pe,updateMarkdownEditorPosition:h,updateCanvasTerminalPosition:A,updateTrackingWindowPosition:R,updateActPosition:ne,updatePerformerPosition:f,updateActSize:oe,updateMarkdownEditorSize:g,updateCanvasTerminalSize:v,updateTrackingWindowSize:T,updatePerformerSize:x}),a=getCanvasDropLabel(($=(j=V==null?void 0:V.data)==null?void 0:j.current)==null?void 0:$.kind),w=!!c;return jsxRuntimeExports.jsxs("div",{className:`canvas-area ${w?"canvas-area--focus":""}`,ref:ee,children:[jsxRuntimeExports.jsxs("div",{className:"canvas-top-right-bar",children:[jsxRuntimeExports.jsx(CanvasControls,{}),!w&&jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(WorkspaceToolbar,{})})]}),jsxRuntimeExports.jsx(CanvasDropOverlay,{active:he,label:a}),jsxRuntimeExports.jsx(index,{nodes:ce,edges:xe,onInit:Y,onNodesChange:we,onNodeDragStop:Ee,onNodeClick:Ae,onConnect:ke,isValidConnection:()=>!0,connectionMode:ConnectionMode.Loose,onEdgeClick:ge,onPaneClick:Se,onMoveEnd:Re,nodeTypes,edgeTypes,multiSelectionKeyCode:null,selectionKeyCode:null,proOptions:{hideAttribution:!0},fitView:!0,fitViewOptions:{maxZoom:1,padding:.2},panOnDrag:!w,zoomOnScroll:!w,zoomOnPinch:!w,zoomOnDoubleClick:!w,nodesDraggable:!w,children:jsxRuntimeExports.jsx(Background,{color:w?"transparent":"var(--border-strong)",gap:16,size:1})}),Z?jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(ActInspectorPanel,{})}):null]})}function resolvePerformerMcpPortability(e,r){const t=extractMcpServerNamesFromConfig(e),n=new Set(r.filter(Boolean));return{declaredMcpServerNames:t,projectMcpMatches:t.filter(s=>n.has(s)),projectMcpMissing:t.filter(s=>!n.has(s))}}function toDragPreview(e){return{kind:(e==null?void 0:e.kind)||"asset",label:(e==null?void 0:e.label)||(e==null?void 0:e.name)||(e==null?void 0:e.modelId)||"Asset"}}function assetRefFromDragAsset(e){return(e==null?void 0:e.source)==="draft"&&typeof e.draftId=="string"?{kind:"draft",draftId:e.draftId}:typeof(e==null?void 0:e.urn)=="string"&&e.urn.length>0?{kind:"registry",urn:e.urn}:null}function isInstalledAsset(e){return e.source==="stage"||e.source==="global"}function getAssetAuthor(e){return String(e.author||"").replace(/^@/,"")}function getAssetSlug(e){return typeof e.urn=="string"&&e.urn.length>0?assetUrnPath(e.urn)||e.slug||e.name||"":e.slug||e.name||""}function applyTalToPerformer(e,r,t){const n=assetRefFromDragAsset(t);if(n){e.setPerformerTalRef(r,n);return}e.setPerformerTal(r,t)}function applyDanceToPerformer(e,r,t){const n=assetRefFromDragAsset(t);if(n){e.addPerformerDanceRef(r,n);return}e.addPerformerDance(r,t)}function applyModelToPerformer(e,r,t,n){e.setPerformerModel(r,{provider:t.provider,modelId:t.modelId}),t.connected===!1&&n(`${t.providerName||t.provider} is not connected in Settings yet. The performer can keep this model selection, but it will not run until provider access is configured.`)}function applyMcpToPerformer(e,r,t){e.addPerformerMcp(r,t)}async function applyAssetToPerformerTarget(e,r,t,n,s,i){return n.kind==="performer"?(e.applyPerformerAsset(r,await i(n)),!0):t==="tal"&&n.kind==="tal"?(applyTalToPerformer(e,r,n),!0):t==="dance"&&n.kind==="dance"?(applyDanceToPerformer(e,r,n),!0):t==="model"&&n.kind==="model"?(applyModelToPerformer(e,r,n,s),!0):t==="mcp"&&n.kind==="mcp"?(applyMcpToPerformer(e,r,n),!0):!1}function markdownContentFromAssetDetail(e){return typeof e.content=="string"?e.content:""}function getDragIcon(e){switch(e){case"tal":return jsxRuntimeExports.jsx(Hexagon,{size:12,className:"asset-icon tal"});case"dance":return jsxRuntimeExports.jsx(Zap,{size:12,className:"asset-icon dance"});case"model":return jsxRuntimeExports.jsx(Cpu,{size:12,className:"asset-icon model"});case"mcp":return jsxRuntimeExports.jsx(Server,{size:12,className:"asset-icon mcp"});case"performer":return jsxRuntimeExports.jsx(Package,{size:12,className:"asset-icon performer"});default:return jsxRuntimeExports.jsx(Package,{size:12})}}async function loadMarkdownTemplateIntoEditor(e,r,t){const n=t.markdownEditors.find(c=>c.id===e);if(!n)throw new Error("Editor not found.");if(n.kind!==r.kind)throw new Error(`${n.kind==="tal"?"Tal":"Dance"} editor only accepts ${n.kind} assets.`);const i=isInstalledAsset(r)?await api.assets.get(r.kind,getAssetAuthor(r),getAssetSlug(r)):await api.assets.getRegistry(r.kind,getAssetAuthor(r),getAssetSlug(r)),o=t.drafts[n.draftId];if(!o)throw new Error("Editor draft not found.");t.upsertDraft({...o,name:i.name||r.name||o.name,slug:i.slug||r.slug||r.name,description:i.description||i.name||r.name,tags:Array.isArray(i.tags)?i.tags:[],content:markdownContentFromAssetDetail(i),derivedFrom:i.urn||r.urn||void 0,updatedAt:Date.now()}),t.updateMarkdownEditorBaseline(n.id,{name:i.name||r.name||o.name,slug:i.slug||r.slug||r.name,description:i.description||i.name||r.name,tags:Array.isArray(i.tags)?i.tags:[],content:markdownContentFromAssetDetail(i)}),t.selectMarkdownEditor(n.id),showToast(`Loaded ${r.kind} template into the editor.`,"success")}async function resolvePerformerAssetForStudio(e,r){const t=await api.config.getProject().catch(()=>({config:{}})),n=projectMcpServerNames(t.config),s=await api.models.list(),i=normalizeAssetMcpForStudio(normalizeAssetModelForStudio(e,s),n);!i.model&&i.modelPlaceholder&&r(`Model ${i.modelPlaceholder.provider}/${i.modelPlaceholder.modelId} is not available in this Studio runtime. A placeholder was kept so you can pick a replacement.`);const o=Array.isArray(e.declaredMcpServerNames)&&Array.isArray(e.projectMcpMatches)&&Array.isArray(e.projectMcpMissing)?{declaredMcpServerNames:e.declaredMcpServerNames,projectMcpMatches:e.projectMcpMatches,projectMcpMissing:e.projectMcpMissing}:resolvePerformerMcpPortability(e.mcpConfig,n),l=(o.declaredMcpServerNames.length>0?o.declaredMcpServerNames:extractMcpServerNamesFromConfig(e.mcpConfig)).filter(d=>{var u;return!(((u=i.mcpBindingMap)==null?void 0:u[d])||"").trim()});if(o.projectMcpMatches.length>0&&showToast(`Imported performer found project MCP name matches: ${o.projectMcpMatches.join(", ")}. Review the performer binding after import.`,"info",{title:"MCP matches found",dedupeKey:`performer-import-mcp-match:${e.urn||e.name}:${o.projectMcpMatches.join(",")}`,durationMs:5e3}),l.length>0){const d=e.mcpConfig&&typeof e.mcpConfig=="object"?e.mcpConfig:{},u=l.map(f=>{const x=d[f];if(x&&x.command){const h=Array.isArray(x.command)?x.command.join(" "):String(x.command);return`• ${f} (local: ${h})`}return x&&x.url?`• ${f} (remote: ${x.url})`:`• ${f}`}).join(`
|
|
61
|
+
`);showToast(`This performer requires the following MCP servers not yet configured in your project:
|
|
62
|
+
${u}
|
|
63
|
+
|
|
64
|
+
Add them in Asset Library → MCP.`,"warning",{title:"MCP servers required",dedupeKey:`performer-import-mcp-missing:${e.urn||e.name}`,durationMs:8e3})}return i}function createDragStartHandler(e){return r=>{e(toDragPreview(r.active.data.current||{}))}}function createDragEndHandler(e,r){return async t=>{e(null);const{active:n,over:s}=t;if(!s)return;const i=n.data.current,o=s.data.current;if(!i||!o)return;const c=useStudioStore.getState(),l=async()=>{if(o.type!=="canvas-root")return!1;if(i.kind==="performer"){if(i.source==="draft"&&i.draftContent){const u=i.draftContent;return c.addPerformerFromDraft(i.name||"Draft Performer",u),!0}return c.addPerformerFromAsset(await resolvePerformerAssetForStudio(i,r)),!0}if(i.kind==="act"){if(i.source==="draft"&&i.draftContent){const u=i.draftContent;return c.importActFromDraft(i.name||"Draft Act",u),!0}return c.importActFromAsset(i),!0}return!1},d=async()=>{if(o.type!=="markdown-editor"||i.kind!=="tal"&&i.kind!=="dance"||!o.editorId)return!1;try{await loadMarkdownTemplateIntoEditor(o.editorId,i,c)}catch(u){console.error("Failed to load markdown template",u),showToast("Failed to load asset template into the editor.","error",{title:"Template import failed",dedupeKey:`markdown-template-import:${o.editorId}:${i.kind}:${i.slug||i.name}`,actionLabel:"Retry",onAction:()=>{loadMarkdownTemplateIntoEditor(o.editorId,i,useStudioStore.getState()).catch(f=>{console.error("Failed to retry markdown template load",f)})}})}return!0};await l()||await d()||o.performerId&&await applyAssetToPerformerTarget(c,o.performerId,o.type,i,r,u=>resolvePerformerAssetForStudio(u,r))}}const LeftSidebar=reactExports.lazy(()=>__vitePreload(()=>import("./index-BMY4hrBP.js"),__vite__mapDeps([31,1,4,6,7,11,12,3,5,9,10])).then(e=>({default:e.LeftSidebar}))),ToastViewport=reactExports.lazy(()=>__vitePreload(()=>import("./index-BMY4hrBP.js"),__vite__mapDeps([31,1,4,6,7,11,12,3,5,9,10])).then(e=>({default:e.ToastViewport}))),TerminalPanel=reactExports.lazy(()=>__vitePreload(()=>import("./index-BMY4hrBP.js"),__vite__mapDeps([31,1,4,6,7,11,12,3,5,9,10])).then(e=>({default:e.TerminalPanel}))),AssistantChat=reactExports.lazy(()=>__vitePreload(()=>import("./AssistantChat-BOyW0K79.js"),__vite__mapDeps([32,1,8,5,21,3,22,6,7,9,10,4,11,12,33])).then(e=>({default:e.AssistantChat})));function App(){const e=useStudioStore(W=>W.theme),r=useStudioStore(W=>W.workingDir),t=useStudioStore(W=>W.performers),n=useStudioStore(W=>W.acts),s=useStudioStore(W=>W.drafts),i=useStudioStore(W=>W.markdownEditors),o=useStudioStore(W=>W.sessionMap),c=useStudioStore(W=>W.canvasTerminals),l=useStudioStore(W=>W.workspaceDirty),d=useStudioStore(W=>W.isTerminalOpen),u=useStudioStore(W=>W.setTerminalOpen),x=!!useStudioStore(W=>W.focusSnapshot),h=reactExports.useRef(!0);reactExports.useEffect(()=>{if(h.current){h.current=!1;return}if(!l)return;const W=setTimeout(()=>{useStudioStore.getState().saveWorkspace()},2e3);return()=>clearTimeout(W)},[l,t,n,s,i,r,o,c]),reactExports.useEffect(()=>{document.documentElement.setAttribute("data-theme",e)},[e]),reactExports.useEffect(()=>(useStudioStore.getState().initRealtimeEvents(),api.studio.getConfig().then(K=>{setApiWorkingDirContext(K.projectDir||null),K.theme&&K.theme!==useStudioStore.getState().theme&&(useStudioStore.setState({theme:K.theme}),localStorage.setItem("dot-theme",K.theme)),K.lastWorkspaceId&&useStudioStore.getState().loadWorkspace(K.lastWorkspaceId)}).catch(()=>{}),()=>{useStudioStore.getState().cleanupRealtimeEvents()}),[]);const[g,A]=reactExports.useState(null),[v,S]=reactExports.useState(null),[y,k]=reactExports.useState(0),[R,T]=reactExports.useState(250);reactExports.useEffect(()=>{if(!v)return;const W=window.setTimeout(()=>{S(null)},4800);return()=>{window.clearTimeout(W)}},[v,y]);const C=W=>{S(W),k(K=>K+1)},b=()=>{A(null)},B=createDragStartHandler(A),U=createDragEndHandler(b,C);return jsxRuntimeExports.jsxs(DndContext,{onDragStart:B,onDragEnd:U,children:[jsxRuntimeExports.jsxs("div",{className:`studio-app theme-${e}`,style:{display:"flex",flexDirection:"column",height:"100vh"},children:[v?jsxRuntimeExports.jsxs("div",{className:"app-warning-banner",role:"status","aria-live":"polite",children:[jsxRuntimeExports.jsxs("div",{className:"app-warning-banner__copy",children:[jsxRuntimeExports.jsx(CircleAlert,{size:13}),jsxRuntimeExports.jsx("span",{children:v})]}),jsxRuntimeExports.jsx("button",{className:"icon-btn",onClick:()=>S(null),title:"Dismiss warning",children:jsxRuntimeExports.jsx(X,{size:12})})]}):null,jsxRuntimeExports.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(LeftSidebar,{})}),jsxRuntimeExports.jsx(ReactFlowProvider,{children:jsxRuntimeExports.jsx(CanvasArea,{})}),!x&&jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(AssistantChat,{})})]}),!x&&jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(TerminalPanel,{isOpen:d,onToggle:()=>u(!d),height:R,onHeightChange:T})})]}),jsxRuntimeExports.jsx(DragOverlay,{dropAnimation:null,children:g?jsxRuntimeExports.jsxs("div",{className:"drag-overlay-card",children:[getDragIcon(g.kind),jsxRuntimeExports.jsx("span",{children:g.label})]}):null}),jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(ToastViewport,{})})]})}const preventGestureZoom=e=>e.preventDefault(),gestureListenerOptions={passive:!1,capture:!0};document.addEventListener("wheel",e=>{(e.ctrlKey||e.metaKey)&&e.preventDefault()},{passive:!1,capture:!0});document.addEventListener("gesturestart",preventGestureZoom,gestureListenerOptions);document.addEventListener("gesturechange",preventGestureZoom,gestureListenerOptions);clientExports.createRoot(document.getElementById("root")).render(jsxRuntimeExports.jsx(reactExports.StrictMode,{children:jsxRuntimeExports.jsx(QueryClientProvider,{client:queryClient,children:jsxRuntimeExports.jsx(App,{})})}));export{ASSISTANT_PERFORMER_ID as A,hasModelConfig as B,CanvasArea as C,DropdownMenu as D,resolvePerformerAgentId as E,scheduleFitView as F,getCanvasViewportSize as G,assetUrnAuthor as H,formatStudioApiErrorMessage as I,ACT_DEFAULT_WIDTH as J,resolveActExpandedHeight as K,LeftSidebar$1 as L,ACT_MIN_EXPANDED_HEIGHT as M,AnimatedNumber as N,useUISettings as O,stripAssistantActionBlock as P,registryUrnFromRef as Q,buildPerformerAssetPayload as R,SyntaxBlock as S,buildActAssetPayload as T,__vitePreload as _,api as a,selectMessagesForChatKey as b,selectChatKeyIsLoading as c,showToast as d,assetUrnDisplayName as e,assetUrnPath as f,getAssistantMessageActions as g,extractProjectMcpCatalog as h,slugifyAssetName as i,buildDraftDeleteCascade as j,buildInstalledDeleteCascade as k,evaluateActReadiness as l,buildMcpServerMap as m,buildAssetCardMap as n,resolvePerformerRuntimeConfig as o,unresolvedDeclaredMcpServerNames as p,assetRefKey as q,resolvePerformerPresentation as r,subscribeToToasts as s,DiffBlock as t,useStudioStore as u,selectSessionIdForChatKey as v,selectTodos as w,selectPendingPermission as x,selectPendingQuestion as y,resolveFocusNodeId as z};
|