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.
Files changed (148) hide show
  1. package/README.md +20 -200
  2. package/client/assets/ActFrame-BYOBkLYW.js +1 -0
  3. package/client/assets/ActFrame-C_WEt6bv.css +1 -0
  4. package/client/assets/ActInspectorPanel-C3VlS7tB.js +1 -0
  5. package/client/assets/ActInspectorPanel-CE6s6GYv.css +1 -0
  6. package/client/assets/AssistantChat-BOyW0K79.js +1 -0
  7. package/client/assets/AssistantChat-DoVmHvMJ.css +1 -0
  8. package/client/assets/CanvasTerminalFrame-BC-79q9U.css +1 -0
  9. package/client/assets/CanvasTerminalFrame-DxKbexK6.js +4 -0
  10. package/client/assets/CanvasTrackingFrame-DumxhNwg.js +1 -0
  11. package/client/assets/CanvasTrackingFrame-G4rRrfne.css +1 -0
  12. package/client/assets/CanvasWindowFrame-ziJeVfHG.js +1 -0
  13. package/client/assets/DanceBundleEditorFrame-CH8VDUMK.js +1 -0
  14. package/client/assets/DanceBundleEditorFrame-DaLqMflT.css +1 -0
  15. package/client/assets/MarkdownEditorFrame-DVecIZpZ.css +1 -0
  16. package/client/assets/MarkdownEditorFrame-Dwpgs2GX.js +2 -0
  17. package/client/assets/MarkdownRenderer-Cz8A4AgP.js +1 -0
  18. package/client/assets/PublishModal-DUlHz0fT.js +1 -0
  19. package/client/assets/TodoDock-DcVf7zQG.js +1 -0
  20. package/client/assets/WorkspaceToolbar-CXYi_sMD.js +2 -0
  21. package/client/assets/WorkspaceToolbar-CiQvVocC.css +1 -0
  22. package/client/assets/chat-message-visibility-YwJ-AQno.js +11 -0
  23. package/client/assets/dnd-vendor-CIAZE2P2.js +5 -0
  24. package/client/assets/flow-vendor-BZV40eAE.css +1 -0
  25. package/client/assets/flow-vendor-C868rU-6.js +23 -0
  26. package/client/assets/icon-vendor-I2JVIi1s.js +501 -0
  27. package/client/assets/index-BMY4hrBP.js +3 -0
  28. package/client/assets/index-C-vnj9y3.js +1 -0
  29. package/client/assets/index-C9HTqfZw.css +1 -0
  30. package/client/assets/index-CWrv6O3o.js +64 -0
  31. package/client/assets/index-DMS12-Q2.js +8 -0
  32. package/client/assets/index-Dn7t_Y7G.js +1 -0
  33. package/client/assets/index-p-wk7iGH.css +1 -0
  34. package/client/assets/markdown-vendor-BSTcku12.css +10 -0
  35. package/client/assets/markdown-vendor-DnTJ9hmR.js +35 -0
  36. package/client/assets/participant-labels-Cf3qP3GB.js +1 -0
  37. package/client/assets/queries-Dm1jEHfc.js +1 -0
  38. package/client/assets/query-vendor-_taqgrbn.js +1 -0
  39. package/client/assets/react-vendor-DzpMUNDT.js +49 -0
  40. package/client/assets/settings-utils-l7KCS3Ev.js +1 -0
  41. package/client/assets/terminal-vendor-6GBZ9nXN.css +32 -0
  42. package/client/assets/terminal-vendor-D0xRnmbI.js +112 -0
  43. package/client/index.html +13 -3
  44. package/dist/cli.js +25 -3
  45. package/dist/server/app.js +72 -0
  46. package/dist/server/index.js +2 -62
  47. package/dist/server/lib/act-session-policy.js +31 -0
  48. package/dist/server/lib/chat-session.js +101 -0
  49. package/dist/server/lib/config.js +18 -4
  50. package/dist/server/lib/dot-authoring.js +171 -102
  51. package/dist/server/lib/dot-loader.js +9 -8
  52. package/dist/server/lib/dot-login.js +8 -190
  53. package/dist/server/lib/dot-source.js +11 -0
  54. package/dist/server/lib/model-catalog.js +74 -15
  55. package/dist/server/lib/opencode-auth.js +4 -1
  56. package/dist/server/lib/opencode-errors.js +70 -38
  57. package/dist/server/lib/opencode-sidecar.js +5 -2
  58. package/dist/server/lib/project-config.js +8 -0
  59. package/dist/server/lib/runtime-tools.js +46 -8
  60. package/dist/server/lib/safe-mode.js +410 -0
  61. package/dist/server/lib/session-execution.js +81 -0
  62. package/dist/server/lib/sse.js +22 -0
  63. package/dist/server/routes/act-runtime-threads.js +156 -0
  64. package/dist/server/routes/act-runtime-tools.js +157 -0
  65. package/dist/server/routes/act-runtime.js +7 -0
  66. package/dist/server/routes/adapter.js +32 -0
  67. package/dist/server/routes/assets-collection.js +16 -0
  68. package/dist/server/routes/assets-detail.js +38 -0
  69. package/dist/server/routes/assets.js +4 -158
  70. package/dist/server/routes/chat-messages.js +104 -0
  71. package/dist/server/routes/chat-sessions.js +104 -0
  72. package/dist/server/routes/chat-stream.js +15 -0
  73. package/dist/server/routes/chat.js +6 -353
  74. package/dist/server/routes/compile.js +5 -91
  75. package/dist/server/routes/dot-assets.js +77 -0
  76. package/dist/server/routes/dot-core.js +62 -0
  77. package/dist/server/routes/dot-performer.js +80 -0
  78. package/dist/server/routes/dot.js +6 -267
  79. package/dist/server/routes/drafts-collection.js +40 -0
  80. package/dist/server/routes/drafts-dance-bundle.js +113 -0
  81. package/dist/server/routes/drafts-item.js +86 -0
  82. package/dist/server/routes/drafts.js +9 -0
  83. package/dist/server/routes/health.js +18 -33
  84. package/dist/server/routes/opencode-core.js +120 -0
  85. package/dist/server/routes/opencode-file.js +67 -0
  86. package/dist/server/routes/opencode-mcp.js +74 -0
  87. package/dist/server/routes/opencode-provider.js +41 -0
  88. package/dist/server/routes/opencode.js +8 -418
  89. package/dist/server/routes/route-errors.js +10 -0
  90. package/dist/server/routes/safe-actions.js +60 -0
  91. package/dist/server/routes/safe-summary.js +20 -0
  92. package/dist/server/routes/safe.js +7 -0
  93. package/dist/server/routes/workspaces.js +47 -0
  94. package/dist/server/services/act-runtime/act-context-builder.js +81 -0
  95. package/dist/server/services/act-runtime/act-runtime-service.js +313 -0
  96. package/dist/server/services/act-runtime/act-runtime-utils.js +10 -0
  97. package/dist/server/services/act-runtime/act-tool-projection.js +26 -0
  98. package/dist/server/services/act-runtime/act-tools.js +151 -0
  99. package/dist/server/services/act-runtime/board-persistence.js +38 -0
  100. package/dist/server/services/act-runtime/event-logger.js +73 -0
  101. package/dist/server/services/act-runtime/event-router.js +102 -0
  102. package/dist/server/services/act-runtime/mailbox.js +149 -0
  103. package/dist/server/services/act-runtime/safety-guard.js +162 -0
  104. package/dist/server/services/act-runtime/session-queue.js +114 -0
  105. package/dist/server/services/act-runtime/thread-manager.js +351 -0
  106. package/dist/server/services/act-runtime/wake-cascade.js +306 -0
  107. package/dist/server/services/act-runtime/wake-evaluator.js +43 -0
  108. package/dist/server/services/act-runtime/wake-performer-resolver.js +68 -0
  109. package/dist/server/services/act-runtime/wake-prompt-builder.js +77 -0
  110. package/dist/server/services/adapter-view-service.js +6 -0
  111. package/dist/server/services/asset-service.js +366 -0
  112. package/dist/server/services/chat-event-stream-service.js +157 -0
  113. package/dist/server/services/chat-service.js +207 -0
  114. package/dist/server/services/chat-session-service.js +203 -0
  115. package/dist/server/services/compile-service.js +4 -0
  116. package/dist/server/services/dance-bundle-service.js +222 -0
  117. package/dist/server/services/dot-add-service.js +59 -0
  118. package/dist/server/services/dot-service.js +178 -0
  119. package/dist/server/services/draft-service.js +367 -0
  120. package/dist/server/services/opencode-projection/dance-compiler.js +164 -0
  121. package/dist/server/services/opencode-projection/performer-compiler.js +195 -0
  122. package/dist/server/services/opencode-projection/preview-service.js +31 -0
  123. package/dist/server/services/opencode-projection/projection-manifest.js +98 -0
  124. package/dist/server/services/opencode-projection/stage-projection-service.js +188 -0
  125. package/dist/server/services/opencode-service.js +338 -0
  126. package/dist/server/services/safe-service.js +33 -0
  127. package/dist/server/services/studio-assistant/assistant-service.js +172 -0
  128. package/dist/server/services/studio-service.js +69 -0
  129. package/dist/server/services/workspace-service.js +224 -0
  130. package/dist/server/terminal.js +57 -11
  131. package/dist/shared/act-types.js +4 -0
  132. package/dist/shared/adapter-view.js +1 -0
  133. package/dist/shared/asset-contracts.js +1 -0
  134. package/dist/shared/assistant-actions.js +1 -0
  135. package/dist/shared/chat-contracts.js +1 -0
  136. package/dist/shared/dot-contracts.js +1 -0
  137. package/dist/shared/dot-types.js +4 -0
  138. package/dist/shared/draft-contracts.js +2 -0
  139. package/dist/shared/model-types.js +2 -0
  140. package/dist/shared/performer-mcp-portability.js +10 -0
  141. package/dist/shared/safe-mode.js +1 -0
  142. package/dist/shared/session-metadata.js +4 -3
  143. package/package.json +6 -4
  144. package/client/assets/index-C2eIILoa.css +0 -41
  145. package/client/assets/index-DUPZ_Lw5.js +0 -616
  146. package/dist/server/lib/act-runtime.js +0 -1282
  147. package/dist/server/lib/prompt.js +0 -222
  148. package/dist/server/routes/stages.js +0 -137
@@ -0,0 +1,8 @@
1
+ import{r as u,j as e,b as Xe}from"./react-vendor-DzpMUNDT.js";import{u as ce}from"./dnd-vendor-CIAZE2P2.js";import{u as Je,H as re,P as de}from"./flow-vendor-C868rU-6.js";import{r as es,m as ss,n as ns,o as ts,e as Ne,p as as,q as J,_ as ls,S as is,t as os,u as O,v as ke,w as cs,x as Re,a as _e,d as ue,y as rs,z as ds,b as us,c as hs,B as ms,E as ps,F as fs,G as xs,H as vs,f as js}from"./index-CWrv6O3o.js";import{j as gs,u as _s,k as bs,d as Ns,e as ys,b as Ss}from"./queries-Dm1jEHfc.js";import{C as Ms}from"./CanvasWindowFrame-ziJeVfHG.js";import{P as he,X as ee,H as Ie,Z as me,S as $e,K as ws,a0 as Cs,j as ks,a1 as be,x as Ds,a2 as Ps,a3 as Rs,a4 as Is,a5 as $s,p as Ts,C as As,a6 as Es,m as Te,a7 as Fs,a8 as zs,b as Os,a9 as Bs,n as Vs,aa as Ls,ab as Us,f as Ks,E as Ws}from"./icon-vendor-I2JVIi1s.js";import{u as qs,P as Hs,Q as Qs,T as Ys}from"./TodoDock-DcVf7zQG.js";import{D as Ae,T as Gs,b as Zs,h as Xs,a as Js,C as en}from"./chat-message-visibility-YwJ-AQno.js";import"./query-vendor-_taqgrbn.js";import"./markdown-vendor-DnTJ9hmR.js";import"./terminal-vendor-D0xRnmbI.js";import"./MarkdownRenderer-Cz8A4AgP.js";const sn={talAsset:null,danceAssets:[],mcpServers:[],mcpPlaceholders:[],mappedMcpPlaceholders:[],declaredMcpServerNames:[]};function nn(s,n,t,a,i){const c=u.useMemo(()=>s?es(s,ns(n),ss(t),a):sn,[n,a,t,s]),l=u.useMemo(()=>s?ts(s):null,[s]),{data:d}=gs((l==null?void 0:l.model)||null,(l==null?void 0:l.mcpServerNames)||[],((i==null?void 0:i.enableTools)??!0)&&!!l);return{presentation:c,runtimeConfig:l,runtimeTools:d}}function tn({cards:s,footer:n,hidden:t=!1}){return e.jsxs("div",{className:`edit-grid ${t?"edit-grid--hidden":""}`,children:[s.map(a=>{var i,c;return e.jsxs("div",{ref:a.setNodeRef,className:`edit-card-shell ${a.isOver?"is-over":""}`,children:[e.jsxs("button",{type:"button",className:"edit-card",onClick:a.onClick,disabled:a.disabled,children:[e.jsx("span",{className:"edit-card__icon",children:a.icon}),e.jsxs("span",{className:"edit-card__body",children:[e.jsx("strong",{children:a.title}),a.hint?e.jsx("span",{className:"edit-card__hint",children:a.hint}):null,(i=a.items)!=null&&i.length?null:e.jsx("span",{children:a.description})]})]}),(c=a.items)!=null&&c.length?e.jsx("div",{className:"edit-card__stack",children:a.items.map(l=>e.jsxs("div",{className:"edit-card__stack-item",children:[e.jsxs("span",{className:"edit-card__stack-body",children:[e.jsx("strong",{children:l.label}),l.description?e.jsx("span",{children:l.description}):null]}),l.onOpen?e.jsx("button",{type:"button",className:"edit-card__remove",onClick:d=>{var o;d.stopPropagation(),(o=l.onOpen)==null||o.call(l)},title:`Edit ${l.label}`,children:e.jsx(he,{size:10})}):null,l.onRemove?e.jsx("button",{type:"button",className:"edit-card__remove",onClick:d=>{var o;d.stopPropagation(),(o=l.onRemove)==null||o.call(l)},title:`Remove ${l.label}`,children:e.jsx(ee,{size:10})}):null]},l.key))}):null]},a.key)}),n?e.jsx("div",{className:"edit-card-shell edit-card-shell--wide",children:e.jsx("div",{className:"edit-card edit-card--wide",children:n})}):null]})}function Ee(s,n,t){return!n||!t?null:s.find(a=>a.provider===n&&a.id===t)||null}function an(s,n,t,a){if(!a)return null;const i=Ee(s,n,t);return(i==null?void 0:i.variants.find(c=>c.id===a))||null}function Fe({model:s,value:n,onChange:t,className:a,compact:i=!1,titlePrefix:c="Variant",disabled:l=!1}){const{data:d=[]}=_s(!!s),o=u.useMemo(()=>Ee(d,s==null?void 0:s.provider,s==null?void 0:s.modelId),[d,s==null?void 0:s.modelId,s==null?void 0:s.provider]),f=(o==null?void 0:o.variants)||[],r=u.useMemo(()=>an(d,s==null?void 0:s.provider,s==null?void 0:s.modelId,n||null),[d,s==null?void 0:s.modelId,s==null?void 0:s.provider,n]);return u.useEffect(()=>{n&&!r&&t(null)},[t,r,n]),!s||f.length===0?null:e.jsxs("label",{className:a||"model-variant-select",children:[i?null:e.jsx("span",{children:"Variant"}),e.jsxs("select",{className:"select",value:n||"",disabled:l,onChange:x=>t(x.target.value||null),title:n?`${c}: ${n}${r!=null&&r.summary?` · ${r.summary}`:""}`:`${c}: default`,children:[e.jsx("option",{value:"",children:"Default"}),f.map(x=>e.jsx("option",{value:x.id,children:x.id},x.id))]})]})}function ln(s){return s.kind==="draft"?`Draft ${s.draftId.slice(0,8)}`:Ne(s.urn)}function on({performer:s,talAsset:n,onOpenAssetEditor:t,onTalRefChange:a}){return e.jsx("div",{className:"edit-advanced nodrag nowheel",children:e.jsxs("div",{className:"adv-section",children:[e.jsxs("div",{className:"adv-section__head",children:[e.jsx("span",{className:"section-title",children:"Tal"}),(s==null?void 0:s.talRef)&&e.jsx("button",{type:"button",className:"btn btn--sm",onClick:()=>void t("tal",s.talRef,"tal"),children:"Edit"})]}),e.jsx("div",{className:"adv-section__body",children:n?e.jsx("div",{className:"adv-list",children:e.jsxs("div",{className:"adv-list__item",children:[e.jsx(Ie,{size:10,className:"adv-list__icon"}),e.jsx("span",{className:"adv-list__label",children:n.name}),n.description?e.jsx("span",{className:"adv-section__summary",children:n.description}):null,e.jsxs("div",{className:"adv-list__actions",children:[e.jsx("button",{type:"button",className:"icon-btn",onClick:()=>void t("tal",(s==null?void 0:s.talRef)||null,"tal"),title:"Edit tal",children:e.jsx(he,{size:10})}),e.jsx("button",{type:"button",className:"icon-btn",onClick:()=>a(null),title:"Remove tal",children:e.jsx(ee,{size:10})})]})]})}):e.jsx("span",{className:"adv-section__summary",children:"No Tal connected. Drag & drop from the Asset Library."})})]})})}function cn({performer:s,performerId:n,onOpenAssetEditor:t,onRemoveDance:a,onDanceDeliveryModeChange:i}){var c;return e.jsxs("div",{className:"edit-advanced nodrag nowheel",children:[e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Dances"})}),e.jsx("div",{className:"adv-section__body",children:(c=s==null?void 0:s.danceRefs)!=null&&c.length?e.jsx("div",{className:"adv-list",children:s.danceRefs.map(l=>e.jsxs("div",{className:"adv-list__item",children:[e.jsx(me,{size:10,className:"adv-list__icon"}),e.jsx("span",{className:"adv-list__label",children:ln(l)}),e.jsxs("div",{className:"adv-list__actions",children:[e.jsx("button",{type:"button",className:"icon-btn",onClick:()=>void t("dance",l,"dance-replace"),title:"Edit dance",children:e.jsx(he,{size:10})}),e.jsx("button",{type:"button",className:"icon-btn",onClick:()=>a(n,l.kind==="draft"?l.draftId:l.urn),title:"Remove dance",children:e.jsx(ee,{size:10})})]})]},`${l.kind}-${l.kind==="draft"?l.draftId:l.urn}`))}):e.jsx("span",{className:"adv-section__summary",children:"No dances connected. Drag & drop from the Asset Library."})})]}),e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Delivery Mode"})}),e.jsx("div",{className:"adv-section__body",children:e.jsx("label",{className:"adv-field",children:e.jsxs("select",{className:"select nodrag nowheel",value:(s==null?void 0:s.danceDeliveryMode)||"auto",onChange:l=>i(l.target.value),children:[e.jsx("option",{value:"auto",children:"Auto"}),e.jsx("option",{value:"inject",children:"Inject"}),e.jsx("option",{value:"tool",children:"Tool"})]})})})]})]})}function rn({performer:s,runtimeTools:n,onModelChange:t,onModelVariantChange:a}){return e.jsxs("div",{className:"edit-advanced nodrag nowheel",children:[e.jsxs("div",{className:"adv-section",children:[e.jsxs("div",{className:"adv-section__head",children:[e.jsx("span",{className:"section-title",children:"Model"}),s!=null&&s.model?e.jsx("button",{type:"button",className:"btn btn--sm",onClick:()=>t(null),children:"Clear"}):null]}),e.jsxs("div",{className:"adv-section__body",children:[e.jsx("span",{className:"adv-section__summary",children:s!=null&&s.model?`${s.model.provider} / ${s.model.modelId}`:(s!=null&&s.modelPlaceholder,"No model selected")}),(s==null?void 0:s.modelPlaceholder)&&e.jsxs("span",{className:"adv-section__hint",children:["Recommended: ",s.modelPlaceholder.provider,"/",s.modelPlaceholder.modelId]})]})]}),s!=null&&s.model?e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Variant"})}),e.jsx("div",{className:"adv-section__body",children:e.jsx(Fe,{model:s.model,value:s.modelVariant||null,onChange:a,titlePrefix:"Performer variant"})})]}):null,n&&n.resolvedTools.length>0?e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Runtime"})}),e.jsx("div",{className:"adv-section__body",children:e.jsxs("span",{className:"adv-section__summary",children:[n.resolvedTools.length," tools resolved",n.unavailableDetails.length>0?` · ${n.unavailableDetails.length} unavailable`:""]})})]}):null]})}function dn({performer:s,performerId:n,unresolvedMcpPlaceholders:t,mcpBindingRows:a,mcpBindingOptions:i,requestRelations:c,onRemoveMcp:l,onSetMcpBinding:d}){var o;return e.jsxs("div",{className:"edit-advanced nodrag nowheel",children:[e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"MCP Servers"})}),e.jsx("div",{className:"adv-section__body",children:(o=s==null?void 0:s.mcpServerNames)!=null&&o.length||t.length?e.jsxs("div",{className:"adv-list",children:[((s==null?void 0:s.mcpServerNames)||[]).map(f=>e.jsxs("div",{className:"adv-list__item",children:[e.jsx($e,{size:10,className:"adv-list__icon"}),e.jsx("span",{className:"adv-list__label",children:f}),e.jsx("div",{className:"adv-list__actions",children:e.jsx("button",{type:"button",className:"icon-btn",onClick:()=>l(n,f),title:"Remove MCP",children:e.jsx(ee,{size:10})})})]},f)),!(a!=null&&a.length)&&t.map(f=>e.jsxs("div",{className:"adv-list__item",children:[e.jsx("span",{className:"adv-list__label",children:f}),e.jsx("span",{className:"adv-section__summary",children:"Not mapped"})]},`placeholder:${f}`))]}):e.jsx("span",{className:"adv-section__summary",children:"No MCP servers connected. Drag & drop from Asset Library."})})]}),a&&a.length>0?e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Bindings"})}),e.jsx("div",{className:"adv-section__body",children:e.jsx("div",{className:"adv-list",children:a.map(f=>e.jsxs("label",{className:"adv-field",children:[e.jsx("span",{className:"adv-field__label",children:f.placeholderName}),e.jsxs("select",{className:"select nodrag nowheel",value:f.serverName||"",onChange:r=>d(n,f.placeholderName,r.target.value||null),children:[e.jsx("option",{value:"",children:"Select project MCP server"}),(i||[]).map(r=>e.jsxs("option",{value:r.name,disabled:r.disabled,children:[r.name,r.disabled?" (disabled)":""]},r.name))]})]},`binding:${f.placeholderName}`))})})]}):null,c&&c.length>0?e.jsxs("div",{className:"adv-section",children:[e.jsx("div",{className:"adv-section__head",children:e.jsx("span",{className:"section-title",children:"Requests"})}),e.jsx("div",{className:"adv-section__body",children:e.jsx("div",{className:"adv-list",children:c.map((f,r)=>e.jsxs("div",{className:"adv-list__item",children:[e.jsx(me,{size:10,className:"adv-list__icon"}),e.jsx("span",{className:"adv-list__label",children:f.targetName}),e.jsx("span",{className:"adv-section__summary",children:f.description||"Request relation"})]},`${f.targetName}:${r}`))})})]}):null]})}function un({performerId:s,performer:n,presentation:t,runtimeTools:a,requestRelations:i,mcpBindingRows:c,mcpBindingOptions:l,dropRefs:d,hideBackButton:o,onClose:f,onNameChange:r,onTalRefChange:x,onDanceDeliveryModeChange:P,onModelChange:k,onModelVariantChange:N,onRemoveDance:v,onRemoveMcp:_,onSetMcpBinding:y,onOpenAssetEditor:M}){const[h,w]=u.useState(null),m=n?as(n):[],D={tal:"Tal",dances:"Dances",model:"Model & Runtime",mcp:"MCP & Relations"},A=t.talAsset?t.talAsset.name:"Drag & drop or click to add",R=t.danceAssets.length>0?`${t.danceAssets.length} dance${t.danceAssets.length!==1?"s":""}`:"Drag & drop or click to add",I=n!=null&&n.model?`${n.model.modelId}`:"Drag & drop or click to select",$=t.mcpServers.length>0?`${t.mcpServers.length} server${t.mcpServers.length!==1?"s":""}`:"Drag & drop or click to add";return e.jsxs(e.Fragment,{children:[(h||!o)&&e.jsxs("div",{className:"edit-workbench__header",children:[h?e.jsx("button",{className:"edit-workbench__back",onClick:g=>{g.stopPropagation(),w(null)},title:"Back to overview",children:e.jsx(ws,{size:12})}):e.jsx("button",{className:"edit-workbench__back",onClick:g=>{g.stopPropagation(),f()},title:"Back to chat",children:e.jsx(Cs,{size:12})}),e.jsx("span",{className:"section-title",children:h?D[h]:"Back to Chat"})]}),!h&&e.jsx("div",{className:"adv-section",children:e.jsx("div",{className:"adv-section__body",children:e.jsxs("label",{className:"adv-field",children:[e.jsx("span",{className:"adv-field__label",children:"Name"}),e.jsx("input",{className:"text-input nodrag nowheel",value:(n==null?void 0:n.name)||"",onChange:g=>r(g.target.value)})]})})}),!h&&e.jsx(e.Fragment,{children:e.jsx(tn,{cards:[{key:"tal",title:"Tal",description:A,icon:e.jsx(Ie,{size:12}),isOver:d.tal.isOver,setNodeRef:d.tal.setNodeRef,onClick:()=>w("tal")},{key:"dances",title:"Dances",description:R,icon:e.jsx(me,{size:12}),isOver:d.dance.isOver,setNodeRef:d.dance.setNodeRef,onClick:()=>w("dances")},{key:"model",title:"Model",description:I,icon:e.jsx(ks,{size:12}),isOver:d.model.isOver,setNodeRef:d.model.setNodeRef,onClick:()=>w("model")},{key:"mcp",title:"MCP",description:$,icon:e.jsx($e,{size:12}),isOver:d.mcp.isOver,setNodeRef:d.mcp.setNodeRef,onClick:()=>w("mcp")}]})}),h==="tal"&&e.jsx(on,{performer:n,talAsset:t.talAsset,onOpenAssetEditor:M,onTalRefChange:x}),h==="dances"&&e.jsx(cn,{performer:n,performerId:s,onOpenAssetEditor:M,onRemoveDance:v,onDanceDeliveryModeChange:P}),h==="model"&&e.jsx(rn,{performer:n,runtimeTools:a,onModelChange:k,onModelVariantChange:N}),h==="mcp"&&e.jsx(dn,{performer:n,performerId:s,unresolvedMcpPlaceholders:m,mcpBindingRows:c,mcpBindingOptions:l,requestRelations:i,onRemoveMcp:_,onSetMcpBinding:y})]})}function hn({messagePreview:s,onConfirm:n,onCancel:t}){const a=s.length>120?s.slice(0,120)+"…":s;return Xe.createPortal(e.jsx("div",{className:"publish-modal__backdrop",onClick:t,children:e.jsxs("div",{className:"publish-modal revert-confirm-modal",onClick:i=>i.stopPropagation(),children:[e.jsxs("div",{className:"publish-modal__header revert-confirm-modal__header",children:[e.jsxs("div",{className:"revert-confirm-modal__title-wrap",children:[e.jsx(be,{size:16}),e.jsx("h3",{children:"Revert to this message?"})]}),e.jsx("button",{className:"icon-btn",onClick:t,type:"button",children:e.jsx(ee,{size:16})})]}),e.jsxs("div",{className:"publish-modal__body revert-confirm-modal__body",children:[e.jsxs("div",{className:"revert-confirm-modal__preview",children:[e.jsx("span",{className:"revert-confirm-modal__preview-label",children:"Revert to:"}),e.jsx("span",{className:"revert-confirm-modal__preview-text",children:a})]}),e.jsxs("div",{className:"revert-confirm-modal__warning",children:[e.jsx(Ds,{size:14}),e.jsx("span",{children:"All messages after this point will be permanently deleted. This action cannot be undone."})]}),e.jsx("div",{className:"revert-confirm-modal__note",children:"Studio will also ask the session runtime to roll back file changes made after this message when that history is reversible."})]}),e.jsxs("div",{className:"publish-modal__footer",children:[e.jsx("button",{type:"button",className:"publish-modal__action",onClick:t,children:"Cancel"}),e.jsxs("button",{type:"button",className:"publish-modal__action publish-modal__action--destructive",onClick:n,children:[e.jsx(be,{size:12}),e.jsx("span",{children:"Revert"})]})]})]})}),document.body)}function mn({turnDanceSelections:s,setTurnDanceSelections:n,attachments:t,setAttachments:a}){return t.length===0&&s.length===0?null:e.jsxs("div",{style:{display:"flex",gap:"4px",padding:"4px 8px",flexWrap:"wrap",borderBottom:"1px solid var(--border-main)"},children:[s.map((i,c)=>e.jsxs("div",{className:"turn-option-pill",children:[e.jsx(me,{size:10,style:{marginRight:"4px"}}),e.jsx("span",{children:i.label}),e.jsx("span",{className:`turn-option-pill__scope turn-option-pill__scope--${i.scope}`,children:i.scope}),e.jsx(ee,{size:10,style:{marginLeft:"4px",cursor:"pointer"},onClick:()=>n(l=>l.filter((d,o)=>o!==c))})]},`${i.scope}:${J(i.ref)||c}`)),t.map((i,c)=>e.jsxs("div",{style:{display:"flex",alignItems:"center",background:"var(--bg-hover)",borderRadius:"4px",padding:"2px 6px",fontSize:"10px"},children:[e.jsx(Ps,{size:10,style:{marginRight:"4px"}}),i.name,e.jsx(ee,{size:10,style:{marginLeft:"4px",cursor:"pointer"},onClick:()=>a(l=>l.filter((d,o)=>o!==c))})]},c))]})}const De=new Map;let ge=null;function pn(s){return`data:image/svg+xml;utf8,${encodeURIComponent(s)}`}async function fn(s){if(!s)return"";const n=De.get(s);if(n)return n;ge=ge||ls(()=>import("./index.es-Btlrnc3g.js"),[]);const{getIcon:t}=await ge,a=t(s),i=pn(a.svg);return De.set(s,i),i}function xn({path:s}){const[n,t]=u.useState("");return u.useEffect(()=>{let a=!0;return fn(s).then(i=>{a&&t(i)}),()=>{a=!1}},[s]),e.jsx("span",{className:"mention-result__icon",style:{"--mention-icon":n?`url(${n})`:"none",background:n?"var(--text-secondary)":"transparent"},"aria-hidden":"true"})}function vn(s){const{setInput:n,inputRef:t,isFileMentioning:a,fileMentionResults:i,fileMentionIndex:c,extractFileMentionText:l,setAttachments:d,danceSlashMatch:o,danceSearchSections:f,danceSearchResults:r,danceSearchIndex:x,addTurnDanceSelection:P,showSlashMenu:k,setShowSlashMenu:N,slashIndex:v,filteredCommands:_,performerId:y,executeSlashCommand:M}=s;return e.jsxs(e.Fragment,{children:[a&&i.length>0?e.jsx("div",{className:"slash-menu",style:{bottom:"100%",marginBottom:"4px"},children:i.map((h,w)=>e.jsxs("div",{className:`slash-menu-item mention-menu-item ${w===c?"active":""}`,onClick:()=>{var D;const m=l();m!==null&&(n(m),d(A=>[...A,h])),(D=t.current)==null||D.focus()},children:[e.jsx(xn,{path:h.path}),e.jsxs("span",{className:"mention-result__content",children:[e.jsx("span",{className:"mention-result__name",children:h.name}),e.jsx("span",{className:"mention-result__path",children:h.path})]})]},h.absolute))}):null,o!==null?e.jsx("div",{className:"slash-menu",style:{bottom:"100%",marginBottom:"4px"},children:f.length>0?f.map(h=>e.jsxs("div",{className:"slash-menu__section",children:[e.jsx("div",{className:"slash-menu__section-title",children:h.title}),h.items.map(w=>{const m=r.findIndex(D=>D.key===w.key);return e.jsxs("div",{className:`slash-menu-item dance-menu-item ${m===x?"active":""}`,onClick:()=>P(w),children:[e.jsx("span",{className:`dance-result__scope dance-result__scope--${w.scope}`,children:w.scope}),e.jsxs("span",{className:"mention-result__content",children:[e.jsx("span",{className:"mention-result__name",children:w.label}),e.jsx("span",{className:"mention-result__path",children:w.subtitle})]})]},w.key)})]},h.key)):e.jsxs("div",{className:"slash-menu__section",children:[e.jsx("div",{className:"slash-menu__section-title",children:"Dance"}),e.jsx("div",{className:"slash-menu-item",children:e.jsx("span",{className:"slash-desc",children:"No matching dances found."})})]})}):null,o===null&&k&&_.length>0?e.jsx("div",{className:"slash-menu",style:{bottom:"100%",marginBottom:"4px"},children:_.map((h,w)=>e.jsxs("div",{className:`slash-menu-item ${w===v?"active":""}`,onClick:()=>{h.mode==="compose"?n(`${h.cmd} `):(M(y,h.cmd),n("")),N(!1)},children:[e.jsx("span",{className:"slash-cmd",children:h.cmd}),e.jsx("span",{className:"slash-desc",children:h.desc})]},h.cmd))}):null]})}function jn({performerId:s,performer:n,selectedAgentId:t,buildAgent:a,planAgent:i,safeSummary:c,onSetAgentId:l,onSetModelVariant:d,onSetExecutionMode:o}){const f=t==="plan";return e.jsxs("div",{className:"chat-input__runtime-row",children:[e.jsxs("div",{className:"chat-input__mode-group",children:[e.jsxs("button",{className:`mode-toggle ${t!=="plan"?"is-active":""}`,onClick:r=>{r.stopPropagation(),t!=="build"&&l(s,"build")},title:(a==null?void 0:a.description)||"Build mode",type:"button",children:[e.jsx(Rs,{size:12}),e.jsx("span",{children:"Build"})]}),e.jsxs("button",{className:`mode-toggle mode-plan ${f?"is-active":""}`,onClick:r=>{r.stopPropagation(),t!=="plan"&&l(s,"plan")},title:(i==null?void 0:i.description)||"Plan mode",type:"button",children:[e.jsx(Is,{size:12}),e.jsx("span",{children:"Plan"})]})]}),e.jsx(Fe,{model:(n==null?void 0:n.model)||null,value:(n==null?void 0:n.modelVariant)||null,onChange:r=>d(s,r),className:"chat-input__variant",compact:!0,titlePrefix:"Performer variant"})]})}function gn(s){const{performerId:n,performer:t,input:a,setInput:i,isLoading:c,modelConfigured:l,sessionId:d,selectedAgentId:o,buildAgent:f,planAgent:r,safeSummary:x,attachments:P,setAttachments:k,turnDanceSelections:N,setTurnDanceSelections:v,inputRef:_,handleDrop:y,handlePaste:M,handleInputChange:h,handleKeyDownWrapper:w,handleSend:m,abortChat:D,executeSlashCommand:A,danceSlashMatch:R,danceSearchSections:I,danceSearchResults:$,danceSearchIndex:g,addTurnDanceSelection:U,showSlashMenu:q,setShowSlashMenu:B,slashIndex:z,filteredCommands:V,isFileMentioning:Q,fileMentionResults:H,fileMentionIndex:L,extractFileMentionText:se,checkFileMention:F,permissionRequest:ne,questionRequest:Y,respondToPermission:ae,respondToQuestion:le,rejectQuestion:p,onSetAgentId:T,onSetModelVariant:b,onSetExecutionMode:S}=s,{isResponding:E,permissionRequest:G,questionRequest:ie,handlePermissionDecide:te,handleQuestionRespond:pe,handleQuestionReject:fe}=qs({sessionId:d,permissionRequest:ne,questionRequest:Y,respondToPermission:ae,respondToQuestion:le,rejectQuestion:p}),Z=o==="plan";return e.jsxs("div",{className:"chat-input",style:{position:"relative"},onDrop:y,onDragOver:K=>K.preventDefault(),children:[e.jsx(mn,{turnDanceSelections:N,setTurnDanceSelections:v,attachments:P,setAttachments:k}),e.jsx(vn,{input:a,setInput:i,inputRef:_,isFileMentioning:Q,fileMentionResults:H,fileMentionIndex:L,extractFileMentionText:se,setAttachments:k,danceSlashMatch:R,danceSearchSections:I,danceSearchResults:$,danceSearchIndex:g,addTurnDanceSelection:U,showSlashMenu:q,setShowSlashMenu:B,slashIndex:z,filteredCommands:V,performerId:n,executeSlashCommand:A}),G?e.jsx(Hs,{request:G,responding:E,onDecide:te}):null,ie?e.jsx(Qs,{request:ie,responding:E,onRespond:pe,onReject:fe},ie.id):null,e.jsxs("div",{className:"chat-input__main",children:[e.jsx("textarea",{ref:_,value:a,onChange:K=>{h(K.target.value),K.target.style.height="0",K.target.style.height=`${K.target.scrollHeight}px`,K.target.style.overflowY=K.target.scrollHeight>102?"auto":"hidden"},onKeyUp:()=>{F()},onMouseUp:()=>{F()},onKeyDown:w,onPaste:M,placeholder:l?Z?"Plan mode — ask for a plan...":"Message... (# files, / to use dance for this turn)":"Select a model before chatting",disabled:c,rows:1,className:"text-input"}),c?e.jsx("button",{className:"send-btn abort",onClick:()=>D(n),title:"Abort generation",children:e.jsx($s,{size:12,fill:"currentColor"})}):e.jsx("button",{className:"send-btn",onClick:m,disabled:!a.trim()||!l||R!==null,children:e.jsx(Ts,{size:12})})]}),e.jsx(jn,{performerId:n,performer:t,selectedAgentId:o,buildAgent:f,planAgent:r,safeSummary:x,onSetAgentId:T,onSetModelVariant:b,onSetExecutionMode:S})]})}function _n({metadata:s}){const n=[];if(s.agentName&&n.push(s.agentName.charAt(0).toUpperCase()+s.agentName.slice(1)),s.modelId){const a=s.modelId.replace(/-\d{8}$/,"");n.push(a)}if(s.variant&&n.push(s.variant),n.length===0)return null;const t=[s.agentName?`Agent: ${s.agentName}`:null,s.provider&&s.modelId?`Model: ${s.provider}/${s.modelId}`:null,s.variant?`Variant: ${s.variant}`:null].filter(Boolean).join(`
2
+ `);return e.jsx("span",{className:"msg-action__metadata",title:t,children:n.join(" · ")})}function bn({message:s,performerId:n,canRevert:t,onRevert:a}){const[i,c]=u.useState(!1),l=async()=>{try{await navigator.clipboard.writeText(s.content),c(!0),setTimeout(()=>c(!1),1500)}catch{const o=document.createElement("textarea");o.value=s.content,document.body.appendChild(o),o.select(),document.execCommand("copy"),document.body.removeChild(o),c(!0),setTimeout(()=>c(!1),1500)}},d=t&&s.role==="user";return e.jsxs("div",{className:"msg-action-bar",children:[s.metadata?e.jsx(_n,{metadata:s.metadata}):null,e.jsxs("div",{className:"msg-action-bar__actions",children:[e.jsx("button",{className:"msg-action-btn",onClick:l,title:i?"Copied!":"Copy message",children:i?e.jsx(As,{size:12}):e.jsx(Es,{size:12})}),d?e.jsx("button",{className:"msg-action-btn",onClick:()=>a(n,s.id),title:"Revert to this message",children:e.jsx(be,{size:12})}):null]})]})}function Nn({items:s,restoringId:n=null,disabled:t=!1,onRestore:a}){var o,f;const[i,c]=u.useState(!0);u.useEffect(()=>{c(!0)},[s.length,(o=s[0])==null?void 0:o.id]);const l=u.useMemo(()=>s.length===1?"1 rolled back message":`${s.length} rolled back messages`,[s.length]),d=((f=s[0])==null?void 0:f.text)||"";return s.length===0?null:e.jsxs("div",{"data-component":"session-revert-dock",children:[e.jsxs("button",{className:"session-revert-dock__header",type:"button",onClick:()=>c(r=>!r),children:[e.jsx("span",{className:"session-revert-dock__summary",children:l}),i&&d?e.jsx("span",{className:"session-revert-dock__preview",children:d}):null,e.jsx("span",{className:"session-revert-dock__chevron",style:{transform:`rotate(${i?180:0}deg)`},children:e.jsx(Te,{size:14})})]}),i?e.jsx("div",{className:"session-revert-dock__collapsed-spacer","aria-hidden":"true"}):e.jsx("div",{className:"session-revert-dock__body",children:s.map(r=>e.jsxs("div",{className:"session-revert-dock__item",children:[e.jsx("span",{className:"session-revert-dock__text",children:r.text}),e.jsxs("button",{type:"button",className:"btn btn--sm",disabled:t||n===r.id,onClick:()=>a(r.id),children:[e.jsx(Fs,{size:11}),e.jsx("span",{children:n===r.id?"Restoring…":"Restore"})]})]},r.id))})]})}const yn=new Set(["replace_in_file","multi_replace_file_content","str_replace_editor","replace_file_content","edit"]),Sn=new Set(["write_to_file","create_file","write"]),Mn=new Set(["apply_patch"]);function wn(s){return s?String(s.path||s.TargetFile||s.file||s.filePath||s.AbsolutePath||""):""}function Cn(s){return s?s.split("/").pop()||s:""}function kn(s){return s.includes("/")?s.split("/").slice(0,-1).join("/")+"/":""}function ze(s){var t,a,i,c,l,d,o,f,r,x,P;const n=new Map;for(const k of s)if(k.parts)for(const N of k.parts){if(N.type!=="tool"||!N.tool)continue;const v=N.tool;if(v.status==="error")continue;const _=wn(v.input);if(_){if(yn.has(v.name)){const y=String(((t=v.input)==null?void 0:t.old_string)||((a=v.input)==null?void 0:a.oldString)||((i=v.input)==null?void 0:i.TargetContent)||""),M=String(((c=v.input)==null?void 0:c.new_string)||((l=v.input)==null?void 0:l.newString)||((d=v.input)==null?void 0:d.ReplacementContent)||"");if(y||M){const h=n.get(_);h?(h.after=(h.after||"").replace(y,M),h.additions+=M.split(`
3
+ `).length,h.deletions+=y.split(`
4
+ `).length,h.status="modified"):n.set(_,{file:_,before:y,after:M,additions:M.split(`
5
+ `).length,deletions:y.split(`
6
+ `).length,status:"modified"})}}else if(Sn.has(v.name)){const y=String(((o=v.input)==null?void 0:o.content)||((f=v.input)==null?void 0:f.CodeContent)||"");n.set(_,{file:_,before:"",after:y,additions:y?y.split(`
7
+ `).length:0,deletions:0,status:"added"})}else if(Mn.has(v.name)){const y=String(((r=v.input)==null?void 0:r.diff)||((x=v.input)==null?void 0:x.patch)||((P=v.input)==null?void 0:P.content)||"");if(y){const M=n.get(_);if(M)M.rawDiff=y;else{const h=y.split(`
8
+ `),w=h.filter(D=>D.startsWith("+")&&!D.startsWith("+++")).length,m=h.filter(D=>D.startsWith("-")&&!D.startsWith("---")).length;n.set(_,{file:_,before:"",after:"",additions:w,deletions:m,status:"modified",rawDiff:y})}}}}}return Array.from(n.values())}function Dn({diff:s}){const[n,t]=u.useState(!1),a=Cn(s.file),i=kn(s.file),c=s.status==="added"?e.jsx("span",{className:"session-review__badge session-review__badge--added",children:"added"}):s.status==="deleted"?e.jsx("span",{className:"session-review__badge session-review__badge--deleted",children:"deleted"}):null;return e.jsxs("div",{className:"session-review__file","data-open":n?"true":"false",children:[e.jsxs("button",{className:"session-review__file-header",onClick:()=>t(!n),type:"button",children:[e.jsx("span",{className:"session-review__file-icon",children:e.jsx(zs,{size:12})}),e.jsxs("span",{className:"session-review__file-info",children:[e.jsx("span",{className:"session-review__filename",children:a}),i&&e.jsx("span",{className:"session-review__directory",children:i})]}),e.jsxs("span",{className:"session-review__file-actions",children:[c,(s.additions>0||s.deletions>0)&&e.jsx(Ae,{changes:s})]}),e.jsx("span",{className:"session-review__chevron",children:n?e.jsx(Te,{size:11}):e.jsx(Os,{size:11})})]}),n&&e.jsx("div",{className:"session-review__file-content",children:s.rawDiff?e.jsx(is,{code:s.rawDiff,language:"diff",lineNumbers:!1,maxHeight:500}):s.before||s.after?e.jsx(os,{before:s.before,after:s.after,filename:a,maxHeight:500}):e.jsx("div",{className:"session-review__empty-diff",children:"No content available"})})]})}function Pn({messages:s,className:n=""}){const t=u.useMemo(()=>ze(s),[s]),a=u.useMemo(()=>t.reduce((d,o)=>d+o.additions,0),[t]),i=u.useMemo(()=>t.reduce((d,o)=>d+o.deletions,0),[t]),[c,l]=u.useState(!1);return t.length===0?null:e.jsxs("div",{className:`session-review ${n}`,children:[e.jsxs("div",{className:"session-review__header",children:[e.jsxs("span",{className:"session-review__title",children:["Changes",e.jsxs("span",{className:"session-review__count",children:[t.length," file",t.length!==1?"s":""]})]}),e.jsx("span",{className:"session-review__summary",children:e.jsx(Ae,{changes:{additions:a,deletions:i}})}),e.jsx("button",{className:"session-review__toggle-all",onClick:()=>l(!c),type:"button",children:c?"Collapse All":"Expand All"})]}),e.jsx("div",{className:"session-review__files",children:t.map((d,o)=>e.jsx(Dn,{diff:d},d.file||o))})]})}function Oe(s,n){if(s.kind==="draft"){const t=n[s.draftId];return(t==null?void 0:t.name)||(t==null?void 0:t.slug)||`Draft ${s.draftId.slice(0,8)}`}return Ne(s.urn)}function Rn(s,n,t){return`${s} ${n} ${t}`.toLowerCase()}function Be(s,n){return((s==null?void 0:s.danceRefs)||[]).filter(t=>t.kind==="draft").map(t=>({key:`draft:${J(t)||Math.random().toString(36).slice(2)}`,ref:t,label:Oe(t,n),scope:"draft",subtitle:"Attached to performer"}))}function Ve(s,n){const t=new Set(((s==null?void 0:s.danceRefs)||[]).filter(a=>a.kind==="draft").map(a=>a.draftId));return Object.entries(n).filter(([a,i])=>i.kind==="dance"&&!t.has(a)).map(([a,i])=>({key:`draft:${a}`,ref:{kind:"draft",draftId:a},label:i.name||i.slug||`Draft ${a.slice(0,8)}`,scope:"draft",subtitle:"Unsaved draft"}))}function Le(s,n){return((s==null?void 0:s.danceRefs)||[]).filter(t=>t.kind==="registry").map(t=>({key:`performer:${J(t)||Math.random().toString(36).slice(2)}`,ref:t,label:Oe(t,n),scope:"performer",subtitle:t.urn||""}))}function In(s,n,t){const a=[...Be(t,n),...Ve(t,n)],i=Le(t,n),c=new Set([...a,...i].map(l=>J(l.ref)).filter(l=>!!l));return s.filter(l=>l.kind==="dance").map(l=>({key:`${l.source||"local"}:${l.urn}`,ref:{kind:"registry",urn:l.urn},label:l.name,scope:l.source==="global"?"global":"stage",subtitle:l.urn})).filter(l=>!c.has(J(l.ref)||""))}function $n(s,n,t,a){const i=[...Be(a,t),...Ve(a,t)],c=Le(a,t),l=In(s,t,a),d=o=>!n||Rn(o.label,o.subtitle,o.scope).includes(n);return[{key:"draft",title:"Draft",items:i.filter(d)},{key:"performer",title:"Performer",items:c.filter(d)},{key:"stage",title:"Workspace",items:l.filter(o=>o.scope==="stage").filter(d)},{key:"global",title:"Global",items:l.filter(o=>o.scope==="global").filter(d)}].filter(o=>o.items.length>0)}function Pe(s){return s.map(n=>({type:"file",mime:n.type||"text/plain",url:n.absolute.startsWith("data:")?n.absolute:`file://${n.absolute}`,filename:n.name}))}function Tn(s,n){if(!n)return!1;const t=s[s.length-1];return!((t==null?void 0:t.role)==="assistant"&&t.content.trim().length>0)}const An=[];function En({performerId:s,messages:n,prefixCount:t,isLoading:a,hasActiveSession:i,chatEndRef:c,onOpenRevert:l,composer:d}){const o=O(m=>ke(m,s)),f=O(m=>o?cs(m,o):An),r=O(m=>o&&m.sessionReverts[o]||null),x=O(m=>o?!!Re(m,o):!1),P=O(m=>m.restoreRevertedMessage),[k,N]=u.useState(!1),v=u.useMemo(()=>r!=null&&r.messageId?n.filter(m=>m.id<r.messageId):n,[n,r==null?void 0:r.messageId]),_=u.useMemo(()=>r!=null&&r.messageId?n.filter(m=>m.role==="user"&&m.id>=r.messageId).map(m=>({id:m.id,text:Fn(m)})):[],[n,r==null?void 0:r.messageId]),y=u.useMemo(()=>ze(v).length>0,[v]),M=a||x,h=u.useCallback(()=>{O.setState(m=>{const D={...m.todos},A={...m.seTodos};delete D[s];const R=ke(m,s);return R&&(delete D[R],delete A[R]),{todos:D,seTodos:A}})},[s]),w=e.jsxs(e.Fragment,{children:[e.jsx(Nn,{items:_,disabled:a,onRestore:m=>{P(s,m)}}),e.jsx(Ys,{todos:f,isLive:M,onClear:h}),d]});return e.jsxs(e.Fragment,{children:[k&&e.jsx(Pn,{messages:v,className:"performer-session-review"}),e.jsx(Gs,{messages:v,loading:Tn(v,a),renderEmpty:()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(Vs,{size:28,className:"empty-icon"}),e.jsx("p",{className:"empty-title",children:"Start a conversation"}),e.jsx("p",{className:"empty-subtitle",children:"Send a message to begin"})]}),renderMessage:(m,D)=>{const A=D>=t;return m.role==="user"&&!Xs(m)||m.role==="assistant"&&!Js(m)?null:e.jsxs("div",{className:`thread-msg thread-msg--${m.role}`,"data-scrollable":!0,children:[m.role==="user"?e.jsxs("div",{className:"user-input-box",children:[e.jsx("span",{className:"user-input-text",children:m.content}),m.attachments&&m.attachments.length>0?e.jsx("div",{style:{display:"flex",gap:"4px",flexWrap:"wrap",marginTop:"4px"},children:m.attachments.map((R,I)=>e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"3px",background:"var(--bg-hover)",borderRadius:"4px",padding:"2px 6px",fontSize:"10px",color:"var(--text-secondary)"},children:[e.jsx(Bs,{size:10}),R.filename||"file"]},I))}):null]}):e.jsx(en,{message:m}),m.role==="user"&&A?e.jsx(bn,{message:m,performerId:s,canRevert:i,onRevert:(R,I)=>l(R,I,m.content)}):null]},m.id)},renderLoading:()=>e.jsx("div",{className:"thread-msg thread-msg--assistant","data-scrollable":!0,children:e.jsx("div",{className:"assistant-body",children:e.jsx(Zs,{text:"Thinking",active:!0})})}),endRef:c,composer:w}),y&&e.jsx("button",{className:"session-review-toggle",onClick:()=>N(!k),title:k?"Hide changes":"Review changes",type:"button",children:e.jsx(Ls,{size:14})})]})}function Fn(s){var t;const n=(s.content||"").replace(/\s+/g," ").trim();return n||((t=s.attachments)!=null&&t.length?s.attachments.length===1?"[attachment]":`[${s.attachments.length} attachments]`:"[message]")}const zn=[{cmd:"/dance",desc:"Add dance for this turn",mode:"compose"}];function On(s,n,t){const{executeSlashCommand:a}=O(),[i,c]=u.useState(!1),[l,d]=u.useState(0),o=zn.filter(x=>x.cmd.startsWith(n.trim())),f=u.useCallback(x=>{t(x),x.startsWith("/")?(c(!0),d(0)):c(!1)},[t]),r=u.useCallback((x,P)=>{if(i&&o.length>0){if(x.key==="ArrowDown")return x.preventDefault(),d(N=>(N+1)%o.length),!0;if(x.key==="ArrowUp")return x.preventDefault(),d(N=>(N-1+o.length)%o.length),!0;if(x.key==="Enter"){x.preventDefault();const N=o[l];return N&&(N.mode==="compose"?t(N.cmd):(a(s,N.cmd),t("")),c(!1)),!0}if(x.key==="Escape")return x.preventDefault(),c(!1),!0}const k=n.trim();return x.key==="Enter"&&!x.shiftKey?(x.preventDefault(),k.startsWith("/")||P&&k&&(P(k),t(""),c(!1)),!0):!1},[s,n,t,i,o,l,a]);return{showSlashMenu:i,setShowSlashMenu:c,slashIndex:l,filteredCommands:o,handleInputChange:f,handleKeyDown:r}}function Bn(s){const[n,t]=u.useState(null),[a,i]=u.useState([]),[c,l]=u.useState(0),[d,o]=u.useState(!1),f=u.useRef(null),r=s||f,x=/#([a-zA-Z0-9_\-\.\/]*)$/,P=u.useCallback((N,v)=>{const _=r.current,y=typeof N=="string"?N:_==null?void 0:_.value,M=typeof v=="number"?v:_==null?void 0:_.selectionStart;if(typeof y!="string"||typeof M!="number")return;const h=y.slice(0,M),w=x.exec(h);w?(o(!0),t(w[1])):(o(!1),t(null),i([]))},[]);u.useEffect(()=>{if(n===null)return;let N=!0;async function v(){try{const y=await _e.workspace.findFiles(n||"");N&&(i(y.filter(M=>M.type==="file")),l(0))}catch(y){console.error("Mention search error",y)}}const _=setTimeout(v,150);return()=>{N=!1,clearTimeout(_)}},[n]);const k=u.useCallback(()=>{if(!r.current)return null;const N=r.current.selectionStart,v=r.current.value,_=v.slice(0,N),y=x.exec(_);if(!y)return null;const M=y.index,h=v.slice(0,M)+v.slice(N);return o(!1),t(null),i([]),h},[]);return{inputRef:r,isMentioning:d,mentionResults:a,mentionIndex:c,setMentionIndex:l,checkMention:P,extractMentionText:k,setIsMentioning:o}}function Vn({performerId:s,performer:n,modelConfigured:t,isLoading:a,runtimeTools:i,danceAssets:c,drafts:l}){const{sendMessage:d,executeSlashCommand:o}=O(),[f,r]=u.useState(""),[x,P]=u.useState([]),[k,N]=u.useState([]),[v,_]=u.useState(0),y=u.useRef(null),{showSlashMenu:M,setShowSlashMenu:h,slashIndex:w,filteredCommands:m,handleInputChange:D,handleKeyDown:A}=On(s,f,r),{inputRef:R,isMentioning:I,mentionResults:$,mentionIndex:g,setMentionIndex:U,checkMention:q,extractMentionText:B,setIsMentioning:z}=Bn(y),V=u.useMemo(()=>{const p=f.trimStart();return p.startsWith("/")?p.slice(1).trim().toLowerCase():null},[f]),Q=u.useMemo(()=>$n(c,V,l,n),[c,V,l,n]),H=u.useMemo(()=>Q.flatMap(p=>p.items),[Q]),L=u.useCallback(p=>{var T;N(b=>b.some(S=>J(S.ref)===J(p.ref))?b:[...b,{ref:p.ref,label:p.label,scope:p.scope}]),r(""),h(!1),_(0),(T=R.current)==null||T.focus()},[R,h]),se=u.useCallback(()=>{if(!f.trim()||a||!t||V!==null)return;const p=f.trim();if(r(""),h(!1),z(!1),p==="/undo"||p==="/redo"){ue("Use the Undo Last Turn button for performer undo.","info",{title:"Undo moved",dedupeKey:`performer-undo-moved:${s}`});return}if(/^\/(share)$/.test(p)){o(s,p);return}const T=Pe(x);if(i&&i.selectedMcpServers.length>0&&i.resolvedTools.length===0&&i.unavailableDetails.length>0){ue(`Selected MCP servers are unavailable: ${i.unavailableDetails.map(b=>`${b.serverName} (${b.reason})`).join(", ")}.`,"error",{title:"MCP tools unavailable",dedupeKey:`performer-mcp-block:${s}`});return}i&&i.resolvedTools.length>0&&i.unavailableDetails.length>0&&ue(`Some MCP tools are unavailable: ${i.unavailableDetails.map(b=>`${b.serverName} (${b.reason})`).join(", ")}.`,"warning",{title:"Partial MCP availability",dedupeKey:`performer-mcp-warn:${s}`}),d(s,p,T,k.map(b=>b.ref)),P([]),N([])},[x,V,o,f,a,t,s,i,d,z,h,k]),F=p=>{var T;_(0),D(p),q(p,((T=R.current)==null?void 0:T.selectionStart)??p.length)},ne=p=>{if(p.nativeEvent.isComposing)return;if(V!==null){if(H.length>0){if(p.key==="ArrowDown"){p.preventDefault(),_(b=>Math.min(b+1,H.length-1));return}if(p.key==="ArrowUp"){p.preventDefault(),_(b=>Math.max(b-1,0));return}if(p.key==="Enter"){p.preventDefault(),L(H[v]);return}}if(p.key==="Escape"){p.preventDefault(),r(""),h(!1),_(0);return}}if(I&&$.length>0){if(p.key==="ArrowDown"){p.preventDefault(),U(b=>b<$.length-1?b+1:b);return}if(p.key==="ArrowUp"){p.preventDefault(),U(b=>b>0?b-1:b);return}if(p.key==="Enter"){p.preventDefault();const b=$[g],S=B();S!==null&&(r(S),P(E=>[...E,b]));return}if(p.key==="Escape"){z(!1);return}}!A(p,b=>{t&&(d(s,b,Pe(x),k.map(S=>S.ref)),P([]),N([]))})&&p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),se())},Y=u.useCallback(p=>{const T=new FileReader;T.onload=b=>{const S=b.target;S!=null&&S.result&&P(E=>[...E,{name:p.name,path:p.name,absolute:S.result,type:p.type}])},T.readAsDataURL(p)},[]),ae=async p=>{p.preventDefault(),p.dataTransfer.files&&p.dataTransfer.files.length>0&&Array.from(p.dataTransfer.files).forEach(Y),p.dataTransfer.clearData()},le=u.useCallback(p=>{var S;const T=(S=p.clipboardData)==null?void 0:S.items;if(!T)return;const b=[];for(const E of Array.from(T))if(E.kind==="file"){const G=E.getAsFile();G&&b.push(G)}b.length>0&&(p.preventDefault(),b.forEach(Y))},[Y]);return{input:f,setInput:r,attachments:x,setAttachments:P,turnDanceSelections:k,setTurnDanceSelections:N,danceSearchIndex:v,setDanceSearchIndex:_,composerInputRef:y,inputRef:R,showSlashMenu:M,setShowSlashMenu:h,slashIndex:w,filteredCommands:m,isFileMentioning:I,fileMentionResults:$,fileMentionIndex:g,setFileMentionIndex:U,checkFileMention:q,extractFileMentionText:B,setIsFileMentioning:z,danceSlashMatch:V,danceSearchSections:Q,danceSearchResults:H,addTurnDanceSelection:L,handleSend:se,handleInputChange:F,handleKeyDownWrapper:ne,handleDrop:ae,handlePaste:le}}function Ln({performerId:s,performer:n,messages:t,prefixCount:a,isLoading:i,sessionId:c,hasActiveSession:l,modelConfigured:d,selectedAgentId:o,buildAgent:f,planAgent:r,runtimeTools:x,danceAssets:P,drafts:k,chatEndRef:N,onSetAgentId:v,onSetModelVariant:_,onSetExecutionMode:y,safeSummary:M}){const{abortChat:h,executeSlashCommand:w,revertSession:m,respondToPermission:D,respondToQuestion:A,rejectQuestion:R}=O(),[I,$]=u.useState(null),g=Vn({performerId:s,performer:n,modelConfigured:d,isLoading:i,runtimeTools:x,danceAssets:P,drafts:k}),U=O(B=>c?Re(B,c):null),q=O(B=>c?rs(B,c):null);return e.jsxs(e.Fragment,{children:[e.jsx(En,{performerId:s,messages:t,prefixCount:a,isLoading:i,hasActiveSession:l,chatEndRef:N,onOpenRevert:(B,z,V)=>$({performerId:B,messageId:z,messageContent:V}),composer:e.jsx(gn,{performerId:s,performer:n,input:g.input,setInput:g.setInput,isLoading:i,modelConfigured:d,sessionId:c,selectedAgentId:o,buildAgent:f,planAgent:r,safeSummary:M,attachments:g.attachments,setAttachments:g.setAttachments,turnDanceSelections:g.turnDanceSelections,setTurnDanceSelections:g.setTurnDanceSelections,inputRef:g.inputRef,handleDrop:g.handleDrop,handlePaste:g.handlePaste,handleInputChange:g.handleInputChange,handleKeyDownWrapper:g.handleKeyDownWrapper,handleSend:g.handleSend,abortChat:h,executeSlashCommand:w,danceSlashMatch:g.danceSlashMatch,danceSearchSections:g.danceSearchSections,danceSearchResults:g.danceSearchResults,danceSearchIndex:g.danceSearchIndex,addTurnDanceSelection:g.addTurnDanceSelection,showSlashMenu:g.showSlashMenu,setShowSlashMenu:g.setShowSlashMenu,slashIndex:g.slashIndex,filteredCommands:g.filteredCommands,isFileMentioning:g.isFileMentioning,fileMentionResults:g.fileMentionResults,fileMentionIndex:g.fileMentionIndex,extractFileMentionText:g.extractFileMentionText,setFileMentionIndex:g.setFileMentionIndex,setIsFileMentioning:g.setIsFileMentioning,checkFileMention:g.checkFileMention,permissionRequest:U,questionRequest:q,respondToPermission:D,respondToQuestion:A,rejectQuestion:R,onSetAgentId:v,onSetModelVariant:_,onSetExecutionMode:y})}),I?e.jsx(hn,{messagePreview:I.messageContent,onConfirm:async()=>{const B=I.messageContent;await m(I.performerId,I.messageId),$(null),g.setInput(B),setTimeout(()=>{var z;return(z=g.composerInputRef.current)==null?void 0:z.focus()},50)},onCancel:()=>$(null)}):null]})}function Un({modelLabel:s,modelTitle:n,talLabel:t,danceSummary:a,executionMode:i,pendingCount:c,conflictCount:l}){return e.jsxs("div",{className:"canvas-frame__badges",children:[l>0?e.jsx("span",{className:"canvas-frame__badge",title:`${l} conflict${l===1?"":"s"} require review`,children:"Conflict"}):null,c>0?e.jsxs("span",{className:"canvas-frame__badge",title:`${c} pending change${c===1?"":"s"}`,children:[c," change",c===1?"":"s"]}):null,t?e.jsx("span",{className:"canvas-frame__badge",title:`Tal: ${t}`,children:t}):null,a?e.jsx("span",{className:"canvas-frame__badge",title:`Dance: ${a}`,children:a}):null,s?e.jsx("span",{className:"canvas-frame__badge",title:n||s,children:s}):null]})}function Kn(s){const{performerId:n,performer:t,isSelected:a,isFocused:i,isEditMode:c,refreshSafeOwner:l,safeSummary:d,setPerformerExecutionMode:o,detachPerformerSession:f,applySafeOwner:r,discardSafeOwnerFile:x,discardAllSafeOwner:P,undoLastSafeApply:k}=s,[N,v]=u.useState(!1),[_,y]=u.useState(!1),[M,h]=u.useState(null),[w,m]=u.useState(!1);u.useEffect(()=>{(t==null?void 0:t.executionMode)==="safe"&&(a||i||c||N)&&l("performer",n)},[n,c,i,a,t==null?void 0:t.executionMode,l,N]);const D=u.useCallback(async()=>{if(t){if(t.executionMode==="safe"){const $=d||await l("performer",n);if($&&$.pendingCount>0){h("direct"),v(!0);return}o(n,"direct");return}m(!0)}},[t,d,l,n,o]),A=u.useCallback(()=>{o(n,"safe"),l("performer",n),m(!1)},[n,l,o]),R=u.useCallback(()=>{m(!1)},[]),I=u.useCallback(async($,g,U="Updated the safe workspace and started a new thread lineage.")=>{y(!0);try{await $(),g?o(n,g):f(n,U),l("performer",n),v(!1),h(null)}finally{y(!1)}},[f,n,l,o]);return{showSafeReview:N,safeBusy:_,pendingModeSwitch:M,pendingSafeModeConfirm:w,setShowSafeReview:v,setPendingModeSwitch:h,handleToggleExecutionMode:D,confirmSafeModeSwitch:A,cancelSafeModeSwitch:R,switchNotice:M==="direct"?"Switching to Direct mode will start a new session in the project workspace. Your current safe mode chat context will not carry over.":null,applySafeReview:()=>I(()=>r("performer",n),M||void 0),discardSafeReviewAll:()=>I(()=>P("performer",n),M||void 0),discardSafeReviewFile:$=>I(()=>x("performer",n,$),void 0,`Discarded ${$} from the safe workspace and started a new thread lineage.`),undoSafeReviewApply:()=>I(()=>k("performer",n),void 0,"Undid the last apply and started a new thread lineage.")}}function lt({data:s,id:n}){const{selectedPerformerId:t,focusedPerformerId:a,editingTarget:i,chatPrefixes:c,setPerformerAgentId:l,togglePerformerVisibility:d,closeEditor:o,performers:f,drafts:r,openDraftEditor:x,updatePerformerName:P,setPerformerTalRef:k,setPerformerDanceDeliveryMode:N,setPerformerModel:v,setPerformerModelVariant:_,removePerformerMcp:y,setPerformerMcpBinding:M,removePerformerDance:h,setPerformerExecutionMode:w,sessionMap:m,safeSummaries:D,refreshSafeOwner:A,applySafeOwner:R,discardSafeOwnerFile:I,discardAllSafeOwner:$,undoLastSafeApply:g,detachPerformerSession:U,enterFocusMode:q,exitFocusMode:B,focusSnapshot:z}=O(),V=u.useRef(null),Q=u.useRef(null),{fitView:H}=Je(),L=t===n,se=ds(z,a),F=(z==null?void 0:z.type)==="performer"&&se===n,ne=O(j=>us(j,n)),Y=O(j=>hs(j,n)),ae=u.useMemo(()=>(c[n]||[]).length,[c,n]),le=ms(s.model),p=(i==null?void 0:i.type)==="performer"&&i.id===n,T=!!s.actEditConnectVisible,b=p||T,S=f.find(j=>j.id===n)||null,E=D[`performer:${n}`]||null,G=m[n]||null,ie=!!G,{data:te=[]}=bs(L||b),{data:pe=[]}=Ns("dance",L||F||b),{data:fe=[]}=ys(L||b),{data:Z=[]}=Ss(L||b),K=ce({id:`performer-edit-tal-${n}`,data:{performerId:n,type:"tal"}}),ye=ce({id:`performer-edit-dance-${n}`,data:{performerId:n,type:"dance"}}),Se=ce({id:`performer-edit-model-${n}`,data:{performerId:n,type:"model"}}),Me=ce({id:`performer-edit-mcp-${n}`,data:{performerId:n,type:"mcp"}}),Ue=S?ps(S):s.agentId||(s.planMode?"plan":"build"),Ke=u.useMemo(()=>te.find(j=>j.name==="build")||null,[te]),We=u.useMemo(()=>te.find(j=>j.name==="plan")||null,[te]),{presentation:xe,runtimeTools:we}=nn(S,fe,Z,r,{enableTools:L||b}),qe=[],He=u.useMemo(()=>(xe.declaredMcpServerNames||[]).map(j=>{var C;return{placeholderName:j,serverName:((C=S==null?void 0:S.mcpBindingMap)==null?void 0:C[j])||null}}),[S==null?void 0:S.mcpBindingMap,xe.declaredMcpServerNames]),Qe=u.useMemo(()=>Z.map(j=>({name:j.name,disabled:j.enabled===!1})),[Z]);u.useEffect(()=>{if(!(S!=null&&S.mcpBindingMap))return;const j=new Set(Z.filter(C=>C.enabled!==!1).map(C=>C.name));for(const[C,X]of Object.entries(S.mcpBindingMap))!X||j.has(X)||M(n,C,null)},[n,Z,S==null?void 0:S.mcpBindingMap,M]),u.useEffect(()=>{const j=Q.current;if(!j)return;const C=X=>{X.stopPropagation()};return j.addEventListener("wheel",C,{passive:!0}),()=>j.removeEventListener("wheel",C)},[]),u.useEffect(()=>{var j;(j=V.current)==null||j.scrollIntoView({behavior:"smooth"})},[ne,Y]);const{handleToggleExecutionMode:Ye}=Kn({performerId:n,performer:S,isSelected:L,isFocused:F,isEditMode:b,refreshSafeOwner:A,safeSummary:E,setPerformerExecutionMode:w,detachPerformerSession:U,applySafeOwner:R,discardSafeOwnerFile:I,discardAllSafeOwner:$,undoLastSafeApply:g}),Ge=u.useCallback(()=>{if(F){B(),fs(H);return}q(n,"performer",xs())},[q,B,n,F,H]),Ce=u.useCallback(async(j,C,X)=>{if(C)try{if(C.kind==="draft"){if(!r[C.draftId])throw new Error("Draft not found.");x(C.draftId);return}const oe=vs(C.urn),ve=js(C.urn),je=Ne(C.urn);if(!oe||!ve)throw new Error("Invalid asset reference.");let W;try{W=await _e.assets.get(j,oe.replace(/^@/,""),ve)}catch{W=await _e.assets.getRegistry(j,oe.replace(/^@/,""),ve)}const{createMarkdownEditor:Ze}=O.getState();Ze(j,{source:{name:W.name||je,slug:W.slug||je,description:W.description||W.name||je,tags:Array.isArray(W.tags)?W.tags:[],content:typeof W.content=="string"?W.content:"",derivedFrom:W.urn||C.urn||null},attachTarget:S?{performerId:S.id,mode:X,targetRef:C}:void 0})}catch(oe){console.error("Failed to open markdown editor",oe),ue(`Studio could not open the ${j} editor for this performer.`,"error",{title:`${j==="tal"?"Tal":"Dance"} editor failed`,dedupeKey:`performer-editor-open:${n}:${j}:${C==null?void 0:C.kind}:${(C==null?void 0:C.kind)==="registry"?C.urn:C==null?void 0:C.draftId}`,actionLabel:"Retry",onAction:()=>{Ce(j,C,X)}})}},[x,r,n,S]);return e.jsxs("div",{className:`performer-node-shell ${s.actEditParticipant?"performer-node-shell--act-participant":""} ${s.actEditDimmed?"performer-node-shell--act-dimmed":""}`,children:[s.actEditConnectVisible?e.jsxs(e.Fragment,{children:[e.jsx(re,{id:"top",type:"source",position:de.Top,className:"performer-node-shell__handle",isConnectable:!0}),e.jsx(re,{id:"right",type:"source",position:de.Right,className:"performer-node-shell__handle",isConnectable:!0}),e.jsx(re,{id:"bottom",type:"source",position:de.Bottom,className:"performer-node-shell__handle",isConnectable:!0}),e.jsx(re,{id:"left",type:"source",position:de.Left,className:"performer-node-shell__handle",isConnectable:!0})]}):null,e.jsx(Ms,{className:`nowheel ${F?"canvas-frame--focused":""}`,width:s.width||320,height:s.height||400,transformActive:!!s.transformActive,onActivateTransform:s.onActivateTransform,onDeactivateTransform:s.onDeactivateTransform,selected:L,focused:F,minWidth:280,minHeight:320,headerStart:e.jsx("span",{className:"canvas-frame__name",children:s.name}),headerEnd:e.jsxs("div",{className:"canvas-frame__header-actions",children:[!F&&e.jsx(Un,{modelLabel:s.modelLabel||null,modelTitle:s.modelTitle||null,talLabel:s.talLabel||null,danceSummary:s.danceSummary||null,executionMode:(S==null?void 0:S.executionMode)==="safe"?"safe":"direct",pendingCount:(E==null?void 0:E.pendingCount)||0,conflictCount:(E==null?void 0:E.conflictCount)||0}),e.jsx("button",{className:`icon-btn ${F?"icon-btn--active":""}`,onClick:j=>{j.stopPropagation(),Ge()},title:F?"Exit focus mode":"Focus mode",style:{padding:"0 4px",opacity:.7},children:F?e.jsx(Us,{size:11}):e.jsx(Ks,{size:11})}),!F&&!b&&e.jsx("button",{className:"icon-btn",onClick:j=>{j.stopPropagation(),O.getState().openPerformerEditor(n)},title:"Edit performer",style:{padding:"0 4px",opacity:.7},children:e.jsx(he,{size:11})}),!F&&e.jsx("button",{className:"icon-btn",onClick:j=>{j.stopPropagation(),d(n)},title:"Hide from Canvas",style:{padding:"0 4px",opacity:.7},children:e.jsx(Ws,{size:11})})]}),bodyClassName:"nowheel nodrag",bodyRef:Q,children:b?e.jsx(un,{performerId:n,performer:S,hideBackButton:T,presentation:xe,runtimeTools:we||null,requestRelations:qe,mcpBindingRows:He,mcpBindingOptions:Qe,dropRefs:{tal:{isOver:K.isOver,setNodeRef:K.setNodeRef},dance:{isOver:ye.isOver,setNodeRef:ye.setNodeRef},model:{isOver:Se.isOver,setNodeRef:Se.setNodeRef},mcp:{isOver:Me.isOver,setNodeRef:Me.setNodeRef}},onClose:o,onNameChange:j=>P(n,j),onTalRefChange:j=>k(n,j),onDanceDeliveryModeChange:j=>N(n,j),onModelChange:j=>v(n,j),onModelVariantChange:j=>_(n,j),onRemoveDance:h,onRemoveMcp:y,onSetMcpBinding:M,onOpenAssetEditor:Ce}):e.jsx(Ln,{performerId:n,performer:S,messages:ne,prefixCount:ae,isLoading:Y,sessionId:G,hasActiveSession:ie,modelConfigured:le,selectedAgentId:Ue,buildAgent:Ke,planAgent:We,runtimeTools:we||null,danceAssets:pe,drafts:r,chatEndRef:V,onSetAgentId:l,onSetModelVariant:_,onSetExecutionMode:Ye,safeSummary:E})})]})}export{lt as AgentFrame,ps as resolvePerformerAgentId,es as resolvePerformerPresentation,ts as resolvePerformerRuntimeConfig};
@@ -0,0 +1 @@
1
+ import{j as t,r as h,b as mt}from"./react-vendor-DzpMUNDT.js";import{e as sn,f as rn,a as R,h as an,d as J,u as E,i as ln,j as rt,k as cn}from"./index-CWrv6O3o.js";import{i as on,s as pt,b as dn}from"./settings-utils-l7KCS3Ev.js";import{a as G,T as oe,X as We,P as un,r as ht,D as mn,s as Be,G as Se,t as pn,H as Je,Z as de,i as at,W as hn,j as ft,S as gt,u as xt,v as jt,U as vt,w as fn,x as gn}from"./icon-vendor-I2JVIi1s.js";import{b as Xe}from"./dnd-vendor-CIAZE2P2.js";import{u as xn,b as yt}from"./query-vendor-_taqgrbn.js";import{M as jn,h as vn}from"./markdown-vendor-DnTJ9hmR.js";import{a as yn,b as bn,q as X,c as Nn,d as _n,e as kn,u as An,f as Cn,g as Mn}from"./queries-Dm1jEHfc.js";import"./flow-vendor-C868rU-6.js";import"./terminal-vendor-D0xRnmbI.js";function Sn(e){return[e.name,e.author,e.urn,e.description,...Array.isArray(e.tags)?e.tags:[]].filter(Boolean).join(" ").toLowerCase()}function wn(e){return[e.name,e.id,e.provider,e.providerName,e.toolCall?"tool-call":"",e.attachment?"attachment":""].filter(Boolean).join(" ").toLowerCase()}function Pn(e){return[e.name,e.status,...Array.isArray(e.tools)?e.tools.map(n=>`${n.name} ${n.description||""}`):[]].filter(Boolean).join(" ").toLowerCase()}function $n(e,n,s){return e.filter(i=>n==="all"?!0:i.source===n).filter(i=>!s||Sn(i).includes(s))}function Rn(e){return["performer","tal","dance","act"].map(s=>({kind:s,label:bt(s),items:e.filter(i=>i.kind===s)})).filter(s=>s.items.length>0)}function bt(e){return e==="tal"?"Tal":e==="dance"?"Dance":e==="performer"?"Performer":"Act"}function In(e,n){return e==="installed"?"name, urn, author, tag...":n==="models"?"model, provider, capability...":"server, tool, status..."}function Dn(e){return e==="tal"||e==="dance"?"Drag & drop onto a performer, or edit from the draft card.":e==="performer"?"Drag & drop onto the canvas to create a new performer.":"Drag & drop onto the canvas to create a new act."}function En(e){return e.kind==="performer"?e.source==="draft"?{kind:"performer",urn:e.urn,draftId:e.draftId,source:e.source,name:e.name,author:e.author,draftContent:e.draftContent??void 0}:{kind:"performer",urn:e.urn,name:e.name,author:e.author,source:e.source,talUrn:e.talUrn||null,danceUrns:Array.isArray(e.danceUrns)?e.danceUrns:[],model:e.model||null,modelVariant:e.modelVariant||null,mcpConfig:e.mcpConfig||null,declaredMcpServerNames:Array.isArray(e.declaredMcpServerNames)?e.declaredMcpServerNames:[],projectMcpMatches:Array.isArray(e.projectMcpMatches)?e.projectMcpMatches:[],projectMcpMissing:Array.isArray(e.projectMcpMissing)?e.projectMcpMissing:[]}:e.kind==="act"?e.source==="draft"?{kind:"act",urn:e.urn,draftId:e.draftId,source:e.source,name:e.name,author:e.author,draftContent:e.draftContent??void 0}:{kind:"act",urn:e.urn,slug:e.slug,name:e.name,author:e.author,source:e.source,description:e.description||"",actRules:Array.isArray(e.actRules)?e.actRules:[],participants:Array.isArray(e.participants)?e.participants:[],relations:Array.isArray(e.relations)?e.relations:[]}:e.source==="draft"?{kind:e.kind,urn:e.urn,draftId:e.draftId,source:e.source,name:e.name,author:e.author}:{kind:e.kind,urn:e.urn,slug:e.slug,name:e.name,author:e.author,source:e.source}}function Ln(e){return{kind:"model",provider:e.provider,providerName:e.providerName||e.provider,modelId:e.id,name:e.name||e.id,connected:!!e.connected}}function zn(e){return{kind:"mcp",name:e.name,status:e.status,tools:Array.isArray(e.tools)?e.tools:[],resources:Array.isArray(e.resources)?e.resources:[]}}const Fn=8;function it(e){const n=`${e.provider||""} ${e.providerName||""}`.toLowerCase();return n.includes("anthropic")?"anthropic":n.includes("openai")?"openai":n.includes("google")||n.includes("gemini")?"google":n.includes("xai")||n.includes("grok")?"xai":"other"}function Un(e){return e==="anthropic"?"Anthropic":e==="openai"?"OpenAI":e==="google"?"Google":e==="xai"?"xAI/Grok":"Other"}function lt(e){const n=`${e.name||""} ${e.id||""}`.toLowerCase();let s=e.connected?1e3:0;return n.includes("sonnet")&&(s+=140),n.includes("opus")&&(s+=132),n.includes("haiku")&&(s+=110),n.includes("gpt-5")&&(s+=145),n.includes("gpt-4.1")&&(s+=132),n.includes("o3")&&(s+=128),n.includes("o4")&&(s+=120),(n.includes("gemini 2.5 pro")||n.includes("gemini-2.5-pro"))&&(s+=140),(n.includes("gemini 2.5 flash")||n.includes("gemini-2.5-flash"))&&(s+=128),(n.includes("grok 4")||n.includes("grok-4"))&&(s+=135),(n.includes("grok 3")||n.includes("grok-3"))&&(s+=120),n.includes("mini")&&(s-=8),(n.includes("preview")||n.includes("beta"))&&(s-=12),e.toolCall&&(s+=8),e.reasoning&&(s+=4),s+Math.min(Math.round((e.context||0)/1e4),20)}function Kn(e,n,s){const a=e.filter(c=>!n||wn(c).includes(n)).filter(c=>!!c.connected).filter(c=>{const u=it(c);return s==="all"?!0:u===s}),o=new Map;for(const c of a){const u=it(c),p=c.provider||`${u}-provider`,g=o.get(p);if(g){g.items.push(c),g.connected=g.connected||!!c.connected;continue}o.set(p,{key:p,category:u,label:c.providerName||Un(u),connected:!!c.connected,items:[c]})}return Array.from(o.values()).map(c=>({...c,items:[...c.items].sort((u,p)=>{const g=lt(p)-lt(u);return g!==0?g:String(u.name||u.id).localeCompare(String(p.name||p.id))})})).sort((c,u)=>{const p=Number(u.connected)-Number(c.connected);if(p!==0)return p;const g=["anthropic","openai","google","xai"],d=g.indexOf(c.category),y=g.indexOf(u.category),f=d===-1?999:d,M=y===-1?999:y;return f!==M?f-M:c.label.localeCompare(u.label)})}function Tn(e,n){return Object.values(e).filter(s=>!!s&&s.kind===n).sort((s,i)=>i.updatedAt-s.updatedAt).map(s=>({kind:s.kind,urn:`draft/${s.id}`,draftId:s.id,name:s.name,author:"@draft",description:s.description||s.name,source:"draft",tags:Array.isArray(s.tags)?s.tags:[],content:typeof s.content=="string"?s.content:"",...s.kind==="performer"||s.kind==="act"?{draftContent:s.content}:{}}))}function On(e){if(e.kind==="tal"||e.kind==="dance")return{description:e.description||e.name,tags:Array.isArray(e.tags)?e.tags:[],content:typeof e.content=="string"?e.content:""};if(e.kind==="performer")return{description:e.description||e.name,tags:Array.isArray(e.tags)?e.tags:[],...e.talUrn?{tal:e.talUrn}:{},...Array.isArray(e.danceUrns)&&e.danceUrns.length>0?{dances:e.danceUrns}:{},...e.model?{model:e.model}:{},...e.modelVariant?{modelVariant:e.modelVariant}:{},...e.mcpConfig?{mcp_config:e.mcpConfig}:{}};if(e.kind==="act"){const s=(Array.isArray(e.participants)?e.participants:[]).map(a=>{const o=a;return typeof o.key=="string"&&typeof o.performer=="string"?{key:o.key,performer:o.performer,...o.subscriptions?{subscriptions:o.subscriptions}:{}}:o}),r=(Array.isArray(e.relations)?e.relations:[]).map(a=>{const o=a;return{between:o.between,direction:o.direction,name:o.name,description:o.description}});return{description:e.description||e.name,tags:Array.isArray(e.tags)?e.tags:[],actRules:Array.isArray(e.actRules)?e.actRules:[],participants:s,relations:r}}throw new Error(`Unsupported asset kind '${e.kind}' for authoring action.`)}function ne(e){return sn(e)}function Ye(e){return e?e.startsWith("@")?e:`@${e}`:""}function Nt(e){return e==="tal"||e==="dance"||e==="performer"||e==="act"}function Q(e){return e?typeof e.urn=="string"&&e.urn.length>0?e.urn:!Nt(e.kind)||!e.name||!e.author?null:`${e.kind}/${Ye(e.author)}/${e.slug||e.name}`:null}function ce(e){if(!e)return"";const n=Q(e);return n||(e.kind==="model"?`model:${e.provider}:${e.id||e.modelId||e.name}`:e.kind==="mcp"?`mcp:${e.name}`:`${e.kind}:${e.name}:${e.author||""}`)}function Hn({label:e,items:n,addLabel:s,placeholder:i,onChange:r}){return t.jsxs("div",{className:"asset-mcp-list-field",children:[t.jsx("span",{className:"asset-mcp-list-field__label",children:e}),n.map((a,o)=>t.jsxs("div",{className:"asset-mcp-list-row",children:[t.jsx("input",{className:"text-input",value:a,placeholder:i,onChange:c=>{const u=[...n];u[o]=c.target.value,r(u)},onClick:c=>c.stopPropagation()}),t.jsx("button",{className:"icon-btn",onClick:c=>{c.stopPropagation(),r(n.filter((u,p)=>p!==o))},title:"Remove",children:t.jsx(oe,{size:12})})]},o)),t.jsxs("button",{className:"text-btn",style:{alignSelf:"flex-start",display:"inline-flex",alignItems:"center",gap:"4px",marginTop:"2px",paddingLeft:0},onClick:a=>{a.stopPropagation(),r([...n,""])},children:[t.jsx(G,{size:10})," ",s]})]})}function ct({label:e,items:n,addLabel:s,keyPlaceholder:i,valuePlaceholder:r,onChange:a}){return t.jsxs("div",{className:"asset-mcp-list-field",children:[t.jsx("span",{className:"asset-mcp-list-field__label",children:e}),n.map((o,c)=>t.jsxs("div",{className:"asset-mcp-list-row asset-mcp-list-row--kv",children:[t.jsx("input",{className:"text-input",value:o.key,placeholder:i||"Key",onChange:u=>{const p=[...n];p[c]={...o,key:u.target.value},a(p)},onClick:u=>u.stopPropagation()}),t.jsx("input",{className:"text-input",value:o.value,placeholder:r||"Value",onChange:u=>{const p=[...n];p[c]={...o,value:u.target.value},a(p)},onClick:u=>u.stopPropagation()}),t.jsx("button",{className:"icon-btn",onClick:u=>{u.stopPropagation(),a(n.filter((p,g)=>g!==c))},title:"Remove",children:t.jsx(oe,{size:12})})]},c)),t.jsxs("button",{className:"text-btn",style:{alignSelf:"flex-start",display:"inline-flex",alignItems:"center",gap:"4px",marginTop:"2px",paddingLeft:0},onClick:o=>{o.stopPropagation(),a([...n,{key:"",value:""}])},children:[t.jsx(G,{size:10})," ",s]})]})}function qn({entry:e,updateMcpEntry:n}){const s=r=>n(e.key,r),i=e.transport==="http";return t.jsxs("div",{className:"asset-mcp-editor__body",onClick:r=>r.stopPropagation(),children:[t.jsxs("div",{className:"asset-mcp-tabs",children:[t.jsx("button",{className:`asset-mcp-tab${i?"":" asset-mcp-tab--active"}`,onClick:()=>s(r=>({...r,transport:"stdio"})),children:"STDIO"}),t.jsx("button",{className:`asset-mcp-tab${i?" asset-mcp-tab--active":""}`,onClick:()=>s(r=>({...r,transport:"http"})),children:"Streamable HTTP"})]}),t.jsxs("div",{className:"asset-mcp-editor__grid",children:[t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"Name"}),t.jsx("input",{className:"text-input",value:e.name,placeholder:"MCP server name",onChange:r=>s(a=>({...a,name:r.target.value}))})]}),t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"Enabled"}),t.jsxs("select",{className:"select",value:e.enabled?"enabled":"disabled",onChange:r=>s(a=>({...a,enabled:r.target.value==="enabled"})),children:[t.jsx("option",{value:"enabled",children:"Enabled"}),t.jsx("option",{value:"disabled",children:"Disabled"})]})]})]}),!i&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"asset-mcp-editor__grid",children:t.jsxs("label",{className:"asset-mcp-editor__field asset-mcp-editor__field--wide",children:[t.jsx("span",{children:"Command to launch"}),t.jsx("input",{className:"text-input",value:e.command,placeholder:"openai-dev-mcp serve-sqlite",onChange:r=>s(a=>({...a,command:r.target.value}))})]})}),t.jsx(Hn,{label:"Arguments",items:e.args,addLabel:"Add argument",placeholder:"",onChange:r=>s(a=>({...a,args:r}))}),t.jsx(ct,{label:"Environment variables",items:e.env,addLabel:"Add environment variable",keyPlaceholder:"Key",valuePlaceholder:"Value",onChange:r=>s(a=>({...a,env:r}))})]}),i&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"asset-mcp-editor__grid",children:t.jsxs("label",{className:"asset-mcp-editor__field asset-mcp-editor__field--wide",children:[t.jsx("span",{children:"URL"}),t.jsx("input",{className:"text-input",value:e.url,placeholder:"https://mcp.example.com/mcp",onChange:r=>s(a=>({...a,url:r.target.value}))})]})}),t.jsx(ct,{label:"Headers",items:e.headers,addLabel:"Add header",keyPlaceholder:"Key",valuePlaceholder:"Value",onChange:r=>s(a=>({...a,headers:r}))}),t.jsxs("div",{className:"asset-mcp-editor__grid",children:[t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"OAuth"}),t.jsxs("select",{className:"select",value:e.oauthEnabled?"enabled":"disabled",onChange:r=>s(a=>({...a,oauthEnabled:r.target.value==="enabled"})),children:[t.jsx("option",{value:"enabled",children:"Auto / Configured"}),t.jsx("option",{value:"disabled",children:"Disabled"})]})]}),t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"Client ID"}),t.jsx("input",{className:"text-input",value:e.oauthClientId,onChange:r=>s(a=>({...a,oauthClientId:r.target.value})),placeholder:"client id"})]}),t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"Client Secret"}),t.jsx("input",{className:"text-input",value:e.oauthClientSecret,onChange:r=>s(a=>({...a,oauthClientSecret:r.target.value})),placeholder:"client secret"})]}),t.jsxs("label",{className:"asset-mcp-editor__field",children:[t.jsx("span",{children:"OAuth Scope"}),t.jsx("input",{className:"text-input",value:e.oauthScope,onChange:r=>s(a=>({...a,oauthScope:r.target.value})),placeholder:"repo read:org"})]})]})]})]})}function Gn({filteredMcps:e,mcpDraftEntries:n,mcpCatalogDirty:s,mcpCatalogStatus:i,mcpCatalogSaving:r,pendingMcpAuthName:a,updateMcpEntry:o,addMcpEntry:c,removeMcpEntry:u,saveMcpCatalog:p,resetMcpCatalog:g,connectMcpServer:d,disconnectMcpServer:y,authenticateMcpServer:f,clearMcpAuth:M,showMcpRawConfig:C,setShowMcpRawConfig:$,expandedMcpEntries:w,setExpandedMcpEntries:K}){return t.jsxs("div",{className:"asset-mcp-manager",children:[t.jsxs("div",{className:"asset-authoring-row",children:[t.jsxs("button",{className:"btn",onClick:()=>c(),children:[t.jsx(G,{size:10})," Add Server"]}),t.jsx("div",{className:"asset-authoring-row__note",children:"Drag connected servers onto performers."})]}),n.length>0?t.jsx("div",{className:"asset-mcp-editor-list",children:n.map(v=>{var U,m;const b=e.find(x=>x.name===v.name.trim())||null,P=(b==null?void 0:b.status)||(v.enabled?"disconnected":"disabled"),L=on(v),j=L&&(P==="needs_auth"||P==="failed"),I=L&&!!b&&(b.authStatus==="needs_auth"||b.status==="connected"||b.status==="failed"),z=!!w[v.key];return t.jsxs("div",{className:"asset-mcp-editor",children:[t.jsxs("div",{className:"asset-mcp-editor__header",onClick:()=>K(x=>({...x,[v.key]:!x[v.key]})),children:[t.jsxs("div",{className:"asset-mcp-editor__header-left",children:[t.jsx("span",{className:`asset-mcp-editor__status-dot asset-mcp-editor__status-dot--${P}`}),t.jsxs("div",{children:[t.jsx("div",{className:"asset-mcp-editor__title",children:v.name.trim()||"New MCP Server"}),t.jsxs("div",{className:"asset-mcp-editor__meta",children:[t.jsx("span",{children:L?"remote":"local"}),t.jsxs("span",{children:[((U=b==null?void 0:b.tools)==null?void 0:U.length)||0," tools"]}),t.jsxs("span",{children:[((m=b==null?void 0:b.resources)==null?void 0:m.length)||0," resources"]})]})]})]}),t.jsx("span",{className:`asset-mcp-editor__status asset-mcp-editor__status--${P}`,children:P})]}),z?t.jsxs(t.Fragment,{children:[b!=null&&b.error?t.jsx("div",{className:"asset-authoring-hint",children:b.error}):null,b!=null&&b.clientRegistrationRequired?t.jsx("div",{className:"asset-authoring-hint",children:"OAuth client registration required. Fill client ID and secret, save, then retry."}):null,t.jsx(qn,{entry:v,updateMcpEntry:o}),t.jsxs("div",{className:"asset-mcp-editor__actions",children:[t.jsx("button",{className:"btn btn--primary",onClick:()=>v.name.trim()&&void d(v.name.trim()),disabled:!v.name.trim()||!v.enabled,children:"Connect"}),t.jsx("button",{className:"btn",onClick:()=>v.name.trim()&&void y(v.name.trim()),disabled:!v.name.trim(),children:"Disconnect"}),j?t.jsx("button",{className:"btn",onClick:()=>v.name.trim()&&void f(v.name.trim()),disabled:!v.name.trim(),children:a===v.name.trim()?"Waiting…":P==="failed"?"Retry Auth":"Authenticate"}):null,I?t.jsx("button",{className:"btn",onClick:()=>v.name.trim()&&void M(v.name.trim()),disabled:!v.name.trim(),children:"Clear Auth"}):null,t.jsx("button",{className:"btn btn--danger",onClick:()=>u(v.key),children:"Remove"})]})]}):null]},v.key)})}):t.jsx("div",{className:"asset-authoring-hint",children:"No MCP servers defined for this project."}),t.jsxs("div",{className:"asset-mcp-manager__footer",children:[t.jsx("button",{className:`btn${C?" btn--active":""}`,onClick:()=>$(v=>!v),title:"Show the raw config.json MCP payload sent to OpenCode",children:C?"Hide Raw":"View Raw"}),t.jsx("button",{className:"btn",onClick:g,disabled:!s||r,children:"Reset"}),t.jsx("button",{className:"btn",onClick:()=>void p(),disabled:!s||r,children:r?"Saving…":"Save"})]}),C?t.jsx("pre",{className:"asset-mcp-editor__raw-config",children:JSON.stringify({mcp:pt(n)},null,2)}):null,i?t.jsx("div",{className:"asset-authoring-hint",children:i}):null]})}function ot(e){return!!e&&(e.kind==="tal"||e.kind==="dance"||e.kind==="performer"||e.kind==="act")&&e.source!=="draft"&&typeof e.author=="string"&&typeof e.name=="string"&&typeof(e.slug||e.name)=="string"}function Ze(e){const n=xn({queryKey:["asset-detail",e==null?void 0:e.kind,e==null?void 0:e.source,e==null?void 0:e.author,(e==null?void 0:e.urn)||(e==null?void 0:e.slug)||(e==null?void 0:e.name)],enabled:ot(e),queryFn:async()=>{if(!ot(e))throw new Error("Asset detail fetch requested for a non-fetchable asset.");const i=e.author.replace(/^@/,""),r=(typeof e.urn=="string"?rn(e.urn):null)||e.slug||e.name;return e.source==="stage"||e.source==="global"?await R.assets.get(e.kind,i,r):await R.assets.getRegistry(e.kind,i,r)},retry:!1});return{resolvedAsset:n.data??e,loading:n.isLoading}}function Qn(e){return e==="tal"||e==="dance"||e==="performer"||e==="act"}function Y(e){return typeof e=="object"&&e!==null}function ke(e){return Array.isArray(e)?e.filter(n=>typeof n=="string"&&n.trim().length>0):[]}function Vn(e){if(e==="stage"||e==="global"||e==="registry")return e}function Qe(e,n){const[s,i,r,a]=e.split("/");if(!Qn(s)||!i)return null;const o=a||r;if(!o)return null;const c=Vn(n);return c?{kind:s,urn:e,name:o,slug:o,author:i,source:c}:null}function Wn(e){return e?typeof e.body=="string"&&e.body.trim()?e.body:typeof e.instructions=="string"&&e.instructions.trim()?e.instructions:typeof e.content=="string"&&e.content.trim()?e.content:null:null}function Bn(e,n=180){if(!e)return null;const s=e.replace(/!\[[^\]]*\]\([^)]*\)/g," ").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/`{1,3}[^`]*`{1,3}/g," ").replace(/^\s{0,3}#{1,6}\s+/gm,"").replace(/^\s*[-*+]\s+/gm,"").replace(/^\s*\d+\.\s+/gm,"").replace(/[>*_~|]/g," ").replace(/\s+/g," ").trim();return s?s.length>n?`${s.slice(0,Math.max(0,n-1)).trimEnd()}…`:s:null}function Jn(e){return e.kind!=="performer"||!Y(e.draftContent)?null:e.draftContent}function Ce(e){return e.kind!=="act"||!Y(e.draftContent)?null:e.draftContent}function Ve(e,n){return n?typeof n.urn=="string"&&n.urn.trim()?ne(n.urn):typeof n.draftId=="string"&&n.draftId.trim()?`${e} draft`:e:e}function _t(e){if(e.kind!=="performer")return[];const n=[];if(typeof e.talUrn=="string"&&e.talUrn.trim()&&n.push({kind:"tal",label:ne(e.talUrn),stub:Qe(e.talUrn,e.source)}),Array.isArray(e.danceUrns)&&e.danceUrns.filter(i=>typeof i=="string"&&i.trim().length>0).forEach(i=>{n.push({kind:"dance",label:ne(i),stub:Qe(i,e.source)})}),n.length>0)return n;const s=Jn(e);return s&&(s.talRef&&n.push({kind:"tal",label:Ve("tal",s.talRef),stub:null}),Array.isArray(s.danceRefs)&&s.danceRefs.forEach(i=>{n.push({kind:"dance",label:Ve("dance",i),stub:null})})),n}function Xn(e){var s,i;if(e.kind!=="performer")return null;const n=[];return e.talUrn&&n.push("Tal linked"),Array.isArray(e.danceUrns)&&e.danceUrns.length>0&&n.push(`${e.danceUrns.length} dance${e.danceUrns.length>1?"s":""}`),(s=e.model)!=null&&s.provider&&((i=e.model)!=null&&i.modelId)&&n.push(`${e.model.provider}/${e.model.modelId}`),n.length>0?n.join(" · "):null}function Ae(e,n){return n.length>0?`${e}: ${n.join(", ")}`:null}function dt(e){return e?[Ae("from",ke(e.messagesFrom)),Ae("tags",ke(e.messageTags)),Ae("board",ke(e.callboardKeys)),Ae("events",ke(e.eventTypes))].filter(n=>!!n):[]}function Yn(e){if(e.kind!=="act")return[];if(Array.isArray(e.participants))return e.participants.map((s,i)=>{const r=Y(s)?s:{},a=typeof r.performer=="string"?r.performer:"";return{key:typeof r.key=="string"&&r.key.trim()?r.key:`participant-${i+1}`,performer:{kind:"performer",label:a?ne(a):"performer",stub:a?Qe(a,e.source):null},subscriptions:dt(r.subscriptions)}});const n=Ce(e);return!n||!Y(n.participants)?[]:Object.entries(n.participants).map(([s,i])=>{const r=Y(i)?i.performerRef:null;return{key:s,performer:{kind:"performer",label:Ve("performer",r),stub:null},subscriptions:dt(Y(i)?i.subscriptions:void 0)}})}function Zn(e){var s,i;return e.kind!=="act"?[]:(Array.isArray(e.relations)?e.relations:Array.isArray((s=Ce(e))==null?void 0:s.relations)?((i=Ce(e))==null?void 0:i.relations)||[]:[]).map((r,a)=>{const o=Y(r)?r:{},c=Array.isArray(o.between)&&o.between.length===2?[typeof o.between[0]=="string"?o.between[0]:`participant-${a+1}`,typeof o.between[1]=="string"?o.between[1]:`participant-${a+2}`]:[`participant-${a+1}`,`participant-${a+2}`];return{name:typeof o.name=="string"&&o.name.trim()?o.name:`Relation ${a+1}`,direction:o.direction==="one-way"?"one-way":"both",between:c,description:typeof o.description=="string"?o.description:""}})}function es(e){if(Array.isArray(e.actRules))return e.actRules.filter(s=>typeof s=="string"&&s.trim().length>0);const n=Ce(e);return Array.isArray(n==null?void 0:n.actRules)?n.actRules.filter(s=>typeof s=="string"&&s.trim().length>0):[]}function et({reference:e,subtitle:n,level:s=0}){const{resolvedAsset:i,loading:r}=Ze(e.stub),a=i||e.stub,o=(a==null?void 0:a.name)||e.label,c=(a==null?void 0:a.kind)||e.kind,u=Bn(Wn(a)),p=(a==null?void 0:a.kind)==="performer"?Xn(a):null,g=(a==null?void 0:a.kind)==="performer"?_t(a):[];return t.jsxs("div",{className:"asset-cascade__node","data-kind":c,"data-level":s,children:[t.jsxs("div",{className:"asset-cascade__header",children:[t.jsx("span",{className:`asset-cascade__kind asset-cascade__kind--${c}`,children:c}),t.jsx("span",{className:"asset-cascade__title",children:o})]}),n?t.jsx("div",{className:"asset-cascade__meta",children:n}):null,p?t.jsx("div",{className:"asset-cascade__meta",children:p}):null,u?t.jsx("div",{className:"asset-cascade__excerpt",children:u}):null,r&&!u&&!p?t.jsx("div",{className:"asset-cascade__meta",children:"Loading details..."}):null,g.length>0?t.jsx("div",{className:"asset-cascade__children",children:g.map((d,y)=>{var f;return t.jsx(et,{reference:d,level:s+1},`${d.kind}:${((f=d.stub)==null?void 0:f.urn)||d.label}:${y}`)})}):null]})}function ts({asset:e}){const n=_t(e);return n.length===0?t.jsx("div",{className:"asset-cascade__empty",children:"No linked Tal or Dance assets."}):t.jsx("div",{className:"asset-cascade",children:n.map((s,i)=>{var r;return t.jsx(et,{reference:s},`${s.kind}:${((r=s.stub)==null?void 0:r.urn)||s.label}:${i}`)})})}function ns({asset:e}){const n=Yn(e),s=Zn(e),i=es(e);return t.jsxs("div",{className:"asset-cascade asset-cascade--act",children:[t.jsxs("div",{className:"asset-cascade__group",children:[t.jsx("div",{className:"asset-cascade__group-title",children:"Participants"}),n.length>0?n.map((r,a)=>{var o;return t.jsx(et,{reference:r.performer,subtitle:[`key: ${r.key}`,...r.subscriptions].join(" · ")},`${r.key}:${((o=r.performer.stub)==null?void 0:o.urn)||r.performer.label}:${a}`)}):t.jsx("div",{className:"asset-cascade__empty",children:"No participants defined."})]}),t.jsxs("div",{className:"asset-cascade__group",children:[t.jsx("div",{className:"asset-cascade__group-title",children:"Relations"}),s.length>0?t.jsx("div",{className:"asset-cascade__relations",children:s.map((r,a)=>t.jsxs("div",{className:"asset-cascade__relation",children:[t.jsxs("div",{className:"asset-cascade__relation-title",children:[r.name,t.jsxs("span",{className:"asset-cascade__relation-path",children:[r.between[0]," ",r.direction==="one-way"?"->":"<->"," ",r.between[1]]})]}),r.description?t.jsx("div",{className:"asset-cascade__relation-desc",children:r.description}):null]},`${r.name}:${r.between.join(":")}:${a}`))}):t.jsx("div",{className:"asset-cascade__empty",children:"No relations defined."})]}),i.length>0?t.jsxs("div",{className:"asset-cascade__group",children:[t.jsx("div",{className:"asset-cascade__group-title",children:"Act Rules"}),t.jsx("div",{className:"asset-cascade__rules",children:i.map(r=>t.jsx("div",{className:"asset-cascade__rule",children:r},r))})]}):null]})}function kt({asset:e,loading:n,installed:s}){var d,y;if(!e)return null;const i=Ye(e.author),r=Q(e),a=Array.isArray(e.tags)?e.tags:[],o=typeof e.body=="string"?e.body:typeof e.instructions=="string"?e.instructions:typeof e.content=="string"?e.content:null,c=e.participantCount||(Array.isArray(e.participants)?e.participants.length:0),u=Array.isArray(e.relations)?e.relations.length:0,p=!!o||!!e.talUrn||Array.isArray(e.danceUrns)&&e.danceUrns.length>0||!!e.model||c>0||u>0,g=e.source==="registry"&&!n&&!p;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"asset-popover__meta",children:[i||e.providerName||e.status||"Local",e.kind&&` · ${e.kind}`,e.source&&t.jsx("span",{className:`source-badge ${e.source}`,style:{marginLeft:6},children:e.source}),s&&e.source!=="stage"&&e.source!=="global"&&t.jsx("span",{className:"asset-detail-panel__badge",children:"Installed"})]}),r&&t.jsx("div",{className:"asset-popover__urn",children:r}),t.jsx("div",{className:"asset-popover__desc",children:e.description||e.desc||"No description available."}),n&&t.jsx("div",{className:"asset-popover__section-item",children:"Loading details..."}),g&&!n&&t.jsx("div",{className:"asset-detail-panel__note",children:"Registry preview shows summary metadata only. Install the asset to inspect full content."}),o&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:e.kind==="tal"?"Instructions":e.kind==="dance"?"Skills":"Content"}),t.jsx("div",{className:"asset-popover__content",children:t.jsx(jn,{remarkPlugins:[vn],children:o})})]}),a.length>0&&t.jsx("div",{className:"asset-popover__tags",children:a.map(f=>t.jsx("span",{className:"asset-popover__tag",children:f},f))}),e.kind==="performer"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Cascade"}),t.jsx(ts,{asset:e})]}),(e.talUrn||Array.isArray(e.danceUrns)&&e.danceUrns.length>0)&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"References"}),e.talUrn?t.jsxs("div",{className:"asset-popover__section-item",children:["Tal: ",ne(e.talUrn)]}):null,Array.isArray(e.danceUrns)&&e.danceUrns.map(f=>t.jsxs("div",{className:"asset-popover__section-item",children:["Dance: ",ne(f)]},f))]}),e.model&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Model"}),t.jsxs("div",{className:"asset-popover__section-item",children:[e.model.provider,"/",e.model.modelId]}),e.modelVariant&&t.jsxs("div",{className:"asset-popover__section-item",children:["Variant: ",e.modelVariant]})]}),Array.isArray(e.declaredMcpServerNames)&&e.declaredMcpServerNames.length>0&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"MCP Portability"}),t.jsxs("div",{className:"asset-popover__section-item",children:["Declared: ",e.declaredMcpServerNames.join(", ")]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Project matches: ",Array.isArray(e.projectMcpMatches)&&e.projectMcpMatches.length>0?e.projectMcpMatches.join(", "):"None"]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Needs mapping: ",Array.isArray(e.projectMcpMissing)&&e.projectMcpMissing.length>0?e.projectMcpMissing.join(", "):"None"]}),t.jsx("div",{className:"asset-detail-panel__note",children:"Registry and local performer assets keep portable MCP requirements. Exact project-name matches can auto-connect on import, but final MCP binding still belongs to each performer on the stage."})]})]}),e.kind==="act"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Act Summary"}),t.jsxs("div",{className:"asset-popover__section-item",children:["Participants: ",c]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Relations: ",u]})]}),t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Cascade"}),t.jsx(ns,{asset:e})]})]}),e.kind==="model"&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Details"}),e.context&&t.jsxs("div",{className:"asset-popover__section-item",children:["Context: ",Math.round(e.context/1e3),"k tokens"]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Status: ",e.connected?"Ready":"Not Configured"]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Tools: ",e.toolCall?"Yes":"No"]}),t.jsxs("div",{className:"asset-popover__section-item",children:["Attachments: ",e.attachment?"Yes":"No"]}),e.modalities&&t.jsxs("div",{className:"asset-popover__section-item",children:["I/O: ",(e.modalities.input||[]).join(", ")||"text"," / ",(e.modalities.output||[]).join(", ")||"text"]})]}),e.kind==="mcp"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Capabilities"}),t.jsxs("div",{className:"asset-popover__section-item",children:["Status: ",e.status||"unknown"]}),t.jsxs("div",{className:"asset-popover__section-item",children:[((d=e.tools)==null?void 0:d.length)||0," Tools"]}),t.jsxs("div",{className:"asset-popover__section-item",children:[((y=e.resources)==null?void 0:y.length)||0," Resources"]}),e.authStatus==="needs_auth"&&t.jsx("div",{className:"asset-popover__section-item",children:"Authentication required"}),e.clientRegistrationRequired&&t.jsx("div",{className:"asset-popover__section-item",children:"OAuth client registration required"}),e.error&&t.jsx("div",{className:"asset-popover__section-item",children:e.error})]}),Array.isArray(e.tools)&&e.tools.length>0&&t.jsxs("div",{className:"asset-popover__section",children:[t.jsx("div",{className:"section-title",children:"Tools"}),e.tools.slice(0,8).map(f=>t.jsxs("div",{className:"asset-popover__section-item",children:[f.name,f.description?` · ${f.description}`:""]},f.name))]})]})]})}function ss({asset:e,rect:n,installed:s,onEnter:i,onLeave:r}){const{resolvedAsset:a,loading:o}=Ze(e),c=Math.max(8,Math.min(n.top,window.innerHeight-420)),u=n.right+8;return mt.createPortal(t.jsxs("div",{className:"asset-popover",style:{top:c,left:u},onMouseEnter:i,onMouseLeave:r,children:[t.jsx("div",{className:"asset-popover__title",children:(a==null?void 0:a.name)||(e==null?void 0:e.name)}),t.jsx(kt,{asset:a,loading:o,installed:s})]}),document.body)}function we({asset:e,installed:n,children:s}){const[i,r]=h.useState(!1),[a,o]=h.useState(null),c=h.useRef(null),u=h.useRef(void 0),p=h.useRef(void 0),g=()=>{clearTimeout(p.current),u.current=setTimeout(()=>{c.current&&(o(c.current.getBoundingClientRect()),r(!0))},350)},d=()=>{clearTimeout(u.current),p.current=setTimeout(()=>r(!1),200)},y=()=>{clearTimeout(p.current)};return t.jsxs("div",{ref:c,onMouseEnter:g,onMouseLeave:d,style:{position:"relative"},children:[s,i&&a&&t.jsx(ss,{asset:e,rect:a,installed:n,onEnter:y,onLeave:d})]})}function At({asset:e,installed:n,onClose:s,authUser:i,actionStatus:r,actionLoading:a,onSaveLocal:o,onPublish:c,onImportToStage:u,onDeleteDraft:p,onUninstall:g}){const{resolvedAsset:d,loading:y}=Ze(e);return e?t.jsxs("div",{className:"asset-detail-panel",children:[t.jsxs("div",{className:"asset-detail-panel__header",children:[t.jsxs("div",{children:[t.jsx("div",{className:"section-title",children:"Pinned Details"}),t.jsx("div",{className:"asset-detail-panel__title",children:(d==null?void 0:d.name)||e.name})]}),t.jsx("button",{className:"icon-btn",onClick:s,title:"Clear detail panel",children:t.jsx(We,{size:14})})]}),(d==null?void 0:d.source)==="global"&&(i!=null&&i.authenticated)&&o?t.jsx("div",{className:"btns",children:t.jsx("button",{className:"btn",onClick:()=>o(d),disabled:a!==null,children:a==="save-local"?"Saving…":"Save Local Fork"})}):null,(d==null?void 0:d.source)==="stage"&&(i!=null&&i.authenticated)&&c?t.jsx("div",{className:"btns",children:t.jsx("button",{className:"btn",onClick:()=>c(d),disabled:a!==null,children:a==="publish"?"Publishing…":"Publish"})}):null,(d==null?void 0:d.kind)==="act"&&((d==null?void 0:d.source)==="stage"||(d==null?void 0:d.source)==="global")&&u?t.jsx("div",{className:"btns",children:t.jsx("button",{className:"btn",onClick:()=>u(d),disabled:a!==null,children:a==="import"?"Importing…":"Import to Workspace"})}):null,(d==null?void 0:d.source)==="draft"&&p?t.jsx("div",{className:"btns",children:t.jsxs("button",{className:"btn btn--danger",onClick:()=>p(d),children:[t.jsx(oe,{size:11,style:{marginRight:4}})," Delete Draft"]})}):null,((d==null?void 0:d.source)==="global"||(d==null?void 0:d.source)==="stage")&&g?t.jsx("div",{className:"btns",children:t.jsxs("button",{className:"btn btn--danger",onClick:()=>g(d),children:[t.jsx(oe,{size:11,style:{marginRight:4}})," Uninstall"]})}):null,!(i!=null&&i.authenticated)&&((d==null?void 0:d.source)==="global"||(d==null?void 0:d.source)==="stage")?t.jsx("div",{className:"asset-detail-panel__note",children:"Sign in with DOT from the toolbar before saving a local fork or publishing assets."}):null,r?t.jsx("div",{className:"asset-detail-panel__note",children:r}):null,t.jsx(kt,{asset:d,loading:y,installed:n})]}):t.jsx("div",{className:"asset-detail-panel asset-detail-panel--empty",children:t.jsx("div",{className:"asset-detail-panel__empty-copy",children:"Click a card to pin its details here."})})}function Me(e){if(e.kind!=="performer"||!Array.isArray(e.declaredMcpServerNames)||e.declaredMcpServerNames.length===0)return null;const n=Array.isArray(e.projectMcpMatches)?e.projectMcpMatches.length:0,s=Array.isArray(e.projectMcpMissing)?e.projectMcpMissing.length:0;return`MCP ${e.declaredMcpServerNames.length} declared · ${n} match · ${s} need mapping`}function Pe(e,n="asset-icon combo"){return e==="tal"?t.jsx(Je,{size:12,className:"asset-icon tal"}):e==="dance"?t.jsx(de,{size:12,className:"asset-icon dance"}):e==="performer"?t.jsx(at,{size:12,className:"asset-icon performer"}):e==="act"?t.jsx(hn,{size:12,className:"asset-icon act"}):e==="model"?t.jsx(ft,{size:12,className:"asset-icon model"}):e==="mcp"?t.jsx(gt,{size:12,className:"asset-icon mcp"}):t.jsx(at,{size:12,className:n})}function $e({icon:e,name:n,trailing:s,dragHandle:i=!1}){return t.jsxs("div",{className:"asset-card__header",children:[i?t.jsx(pn,{size:10,className:"drag-handle"}):null,e,t.jsx("span",{className:"asset-card__name",children:n}),s]})}function rs({asset:e,selected:n,onSelect:s,onUninstall:i,onDeleteDraft:r,onEditDraft:a}){const o=h.useMemo(()=>En(e),[e]),{attributes:c,listeners:u,setNodeRef:p,isDragging:g}=Xe({id:`asset-${e.urn||e.name}`,data:o}),d=e.source==="draft"?!!r:e.source==="global"||e.source==="stage"?!!i:!1,y=f=>{f.stopPropagation(),f.preventDefault(),e.source==="draft"?r==null||r(e):i==null||i(e)};return t.jsx(we,{asset:e,installed:!0,children:t.jsxs("div",{ref:p,...u,...c,className:`asset-card ${g?"is-dragging":""} ${n?"is-selected":""}`,onClick:()=>s(e),children:[t.jsx($e,{icon:Pe(e.kind),name:e.name,dragHandle:!0,trailing:t.jsxs(t.Fragment,{children:[e.source?t.jsx("span",{className:`source-badge ${e.source}`,children:e.source}):void 0,e.source==="draft"&&(e.kind==="tal"||e.kind==="dance")&&a&&t.jsx("button",{className:"asset-card__edit-btn",onClick:f=>{f.stopPropagation(),f.preventDefault(),a(e)},onPointerDown:f=>f.stopPropagation(),title:"Edit draft",children:t.jsx(un,{size:11})}),d&&t.jsx("button",{className:"asset-card__delete-btn",onClick:y,onPointerDown:f=>f.stopPropagation(),title:e.source==="draft"?"Delete draft":"Uninstall",children:t.jsx(oe,{size:11})})]})}),t.jsx("div",{className:"asset-card__author",children:e.author}),t.jsx("div",{className:"asset-card__desc",children:e.description||"No description provided."}),Me(e)?t.jsx("div",{className:"asset-card__desc",children:Me(e)}):null]})})}function as({model:e,selected:n,onSelect:s}){const i=h.useMemo(()=>Ln(e),[e]),{attributes:r,listeners:a,setNodeRef:o,isDragging:c}=Xe({id:`model-${e.provider}-${e.id}`,data:i}),u={...e,kind:"model",name:e.name||e.id};return t.jsx(we,{asset:u,children:t.jsxs("div",{ref:o,...a,...r,className:`asset-card model-card ${c?"is-dragging":""} ${n?"is-selected":""}`,onClick:()=>s(u),children:[t.jsx($e,{icon:Pe("model"),name:e.name||e.id,dragHandle:!0}),t.jsx("div",{className:"asset-card__author",children:e.providerName}),t.jsxs("div",{className:"asset-card__desc",children:[e.context?`Ctx: ${Math.round(e.context/1e3)}k`:"",e.connected?" • Ready":" • Not Configured"]})]})})}function is({mcp:e,selected:n,onSelect:s}){var g,d;const i=h.useMemo(()=>zn(e),[e]),r=e.enabled===!1||e.defined===!1,{attributes:a,listeners:o,setNodeRef:c,isDragging:u}=Xe({id:`mcp-${e.name}`,data:i,disabled:r}),p={...e,kind:"mcp"};return t.jsx(we,{asset:p,children:t.jsxs("div",{ref:c,...o,...a,className:`asset-card mcp-card ${u?"is-dragging":""} ${n?"is-selected":""}`,onClick:()=>s(p),children:[t.jsx($e,{icon:Pe("mcp"),name:e.name,dragHandle:!0}),t.jsxs("div",{className:"asset-card__author",children:[t.jsx("span",{className:`asset-mcp-editor__status-dot asset-mcp-editor__status-dot--${e.status||"disconnected"}`,style:{display:"inline-block",marginRight:4,verticalAlign:"middle"}}),e.status,e.configType?` · ${e.configType}`:"",e.enabled===!1?" · disabled":""]}),t.jsxs("div",{className:"asset-card__desc",children:[((g=e.tools)==null?void 0:g.length)||0," Tools • ",((d=e.resources)==null?void 0:d.length)||0," Resources",r?" • not draggable":""]})]})})}function ls({item:e,installed:n,selected:s,onInstall:i,onSelect:r}){const[a,o]=h.useState(!1),[c,u]=h.useState(n),[p,g]=h.useState(null),[d,y]=h.useState(!1);h.useEffect(()=>{u(n)},[n]);const f=Q(e)||"",M=async C=>{y(!1),o(!0),g(null);try{await i(f,C),u(!0)}catch($){g($ instanceof Error?$.message:"Install failed")}finally{o(!1)}};return t.jsx(we,{asset:e,installed:c,children:t.jsxs("div",{className:`asset-card registry-result ${p?"has-error":""} ${s?"is-selected":""}`,onClick:()=>r(e),children:[t.jsx($e,{icon:Pe(e.kind),name:e.name,trailing:t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"badge",children:e.kind}),t.jsxs("div",{style:{position:"relative",marginLeft:"auto"},onClick:C=>C.stopPropagation(),children:[t.jsx("button",{className:`registry-install-btn ${c?"is-installed":""}`,onClick:()=>c?null:y(!d),disabled:a||c,title:c?"Already installed":`Install ${f}`,children:c?"Installed":a?t.jsx(ht,{size:11,className:"spin-icon"}):t.jsx(mn,{size:11})}),d&&t.jsxs("div",{className:"install-scope-menu",children:[t.jsxs("button",{className:"install-scope-opt",onClick:()=>M("stage"),children:[t.jsx(Be,{size:11})," Workspace"]}),t.jsxs("button",{className:"install-scope-opt",onClick:()=>M("global"),children:[t.jsx(Se,{size:11})," Global"]})]})]})]})}),t.jsx("div",{className:"asset-card__author",children:Ye(e.author)}),t.jsx("div",{className:"asset-card__desc",children:e.description||"No description."}),Me(e)?t.jsx("div",{className:"asset-card__desc",children:Me(e)}):null,Array.isArray(e.tags)&&e.tags.length>0&&t.jsx("div",{className:"badges",children:e.tags.slice(0,3).map(C=>t.jsx("span",{className:"badge",children:C},C))}),p&&t.jsx("div",{className:"install-error",children:p})]})})}function cs({showInstalledAssets:e,showModels:n,showMcps:s,assetsLoading:i,filteredInstalledAssets:r,filteredMcps:a,groupedModels:o,selectedAsset:c,selectedAssetKey:u,selectedInstalled:p,authUser:g,detailActionStatus:d,detailActionLoading:y,expandedModelProviders:f,setExpandedModelProviders:M,installedEmptyMessage:C,onSelectAsset:$,onCloseAsset:w,onSaveLocal:K,onPublish:v,onDeleteDraft:b,onEditDraft:P,onUninstall:L}){return t.jsxs("div",{className:"asset-library-body",children:[t.jsxs("div",{className:"assets-list",children:[e&&(i?t.jsx("div",{className:"empty-state",children:"Loading..."}):r.length===0?t.jsx("div",{className:"empty-state",children:C}):r.map(j=>t.jsx(rs,{asset:j,selected:u===ce(j),onSelect:$,onUninstall:L,onDeleteDraft:b,onEditDraft:P},j.urn))),n&&(o.length===0?t.jsx("div",{className:"empty-state",children:"No models available for this filter."}):o.map(j=>{const z=!!f[j.key]?j.items:j.items.slice(0,Fn),U=j.items.length-z.length;return t.jsxs("div",{className:"asset-group",children:[t.jsxs("div",{className:"asset-group__header",children:[t.jsxs("div",{className:"asset-group__meta",children:[t.jsx("span",{children:j.label}),t.jsx("span",{className:"asset-group__count",children:j.items.length}),!j.connected&&t.jsx("span",{className:"asset-group__status",children:"Not connected"})]}),U>0?t.jsxs("button",{className:"asset-group__toggle",onClick:()=>M(m=>({...m,[j.key]:!0})),children:["+",U," more"]}):null]}),z.map(m=>t.jsx(as,{model:m,selected:u===ce({kind:"model",...m}),onSelect:$},`${m.provider}-${m.id}`))]},j.key)})),s&&(a.length===0?t.jsx("div",{className:"empty-state",children:"No MCP servers connected."}):a.map(j=>t.jsx(is,{mcp:j,selected:u===ce({kind:"mcp",...j}),onSelect:$},j.name)))]}),t.jsx(At,{asset:c,installed:p,onClose:w,authUser:g,actionStatus:d,actionLoading:y,onSaveLocal:K,onPublish:v,onImportToStage:void 0,onDeleteDraft:b,onUninstall:L})]})}function os({localSection:e,setLocalSection:n,installedKind:s,setInstalledKind:i,runtimeKind:r,setRuntimeKind:a,sourceFilter:o,setSourceFilter:c,modelProviderFilter:u,setModelProviderFilter:p,filter:g,setFilter:d,localPlaceholder:y,authoringHint:f,assetsLoading:M,filteredInstalledAssets:C,groupedModels:$,filteredMcps:w,selectedAsset:K,selectedAssetKey:v,selectedInstalled:b,authUser:P,detailActionStatus:L,detailActionLoading:j,onSelectAsset:I,onCloseAsset:z,onSaveLocal:U,onPublish:m,onDeleteDraft:x,onEditDraft:k,onUninstall:S,createNewPerformer:ue,createNewAct:me,createNewPerformerDraftEntry:pe,showInstalledAssets:Re,showModels:he,showMcps:fe,mcpDraftEntries:Ie,mcpCatalogDirty:Z,mcpCatalogStatus:De,mcpCatalogSaving:V,pendingMcpAuthName:Ee,updateMcpEntry:se,addMcpEntry:W,removeMcpEntry:re,saveMcpCatalog:ge,resetMcpCatalog:xe,connectMcpServer:je,disconnectMcpServer:ve,authenticateMcpServer:Le,clearMcpAuth:ye,showMcpRawConfig:be,setShowMcpRawConfig:ee,expandedMcpEntries:ze,setExpandedMcpEntries:Fe,expandedModelProviders:ae,setExpandedModelProviders:Ne,modelProviderTabs:Ue}){const Ke=[{key:"performer",label:"Performer",icon:t.jsx(vt,{size:10})},{key:"tal",label:"Tal",icon:t.jsx(Je,{size:10})},{key:"dance",label:"Dance",icon:t.jsx(de,{size:10})},{key:"act",label:"Act",icon:t.jsx(de,{size:10})}],Te=[{key:"models",label:"Models",icon:t.jsx(ft,{size:10})},{key:"mcps",label:"MCPs",icon:t.jsx(gt,{size:10})}],Oe=`No ${bt(s).toLowerCase()} assets found.`;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"scope-selector asset-scope-selector",children:[t.jsx("button",{className:`scope-btn ${e==="installed"?"active":""}`,onClick:()=>n("installed"),children:"Installed Assets"}),t.jsx("button",{className:`scope-btn ${e==="runtime"?"active":""}`,onClick:()=>n("runtime"),children:"Runtime"})]}),t.jsx("div",{className:"assets-tabs",children:(e==="installed"?Ke:Te).map(A=>{const He=e==="installed"?s===A.key:r===A.key;return t.jsxs("button",{className:`asset-tab ${He?"active":""}`,onClick:()=>e==="installed"?i(A.key):a(A.key),children:[A.icon,t.jsx("span",{children:A.label})]},A.key)})}),e==="installed"&&t.jsx("div",{className:"sub-scope-row",children:["all","global","stage","draft"].map(A=>t.jsx("button",{className:`sub-scope-tag ${o===A?"active":""}`,onClick:()=>c(A),children:A==="all"?"All":A==="global"?t.jsxs(t.Fragment,{children:[t.jsx(xt,{size:8,style:{verticalAlign:-1,marginRight:2}}),"Global"]}):A==="draft"?t.jsxs(t.Fragment,{children:[t.jsx(G,{size:8,style:{verticalAlign:-1,marginRight:2}}),"Draft"]}):t.jsxs(t.Fragment,{children:[t.jsx(Be,{size:8,style:{verticalAlign:-1,marginRight:2}}),"Workspace"]})},A))}),e==="installed"&&t.jsxs("div",{className:"asset-authoring-row",children:[s==="performer"&&t.jsxs("button",{className:"btn",onClick:ue,children:[t.jsx(G,{size:10})," New Performer"]}),s==="tal"&&t.jsxs("button",{className:"btn",onClick:()=>pe("tal"),children:[t.jsx(G,{size:10})," New Tal Draft"]}),s==="dance"&&t.jsxs("button",{className:"btn",onClick:()=>pe("dance"),children:[t.jsx(G,{size:10})," New Dance Draft"]}),s==="act"&&t.jsxs("button",{className:"btn",onClick:me,children:[t.jsx(G,{size:10})," New Act"]}),t.jsx("div",{className:"asset-authoring-row__note",children:Dn(s)})]}),t.jsx("div",{className:"explorer__header",children:t.jsxs("div",{className:"search-wrapper",children:[t.jsx(jt,{size:12,className:"icon-muted"}),t.jsx("input",{className:"text-input",value:g,onChange:A=>d(A.target.value),placeholder:y})]})}),f?t.jsx("div",{className:"asset-authoring-hint",children:f}):null,fe?t.jsx(Gn,{filteredMcps:w,mcpDraftEntries:Ie,mcpCatalogDirty:Z,mcpCatalogStatus:De,mcpCatalogSaving:V,pendingMcpAuthName:Ee,updateMcpEntry:se,addMcpEntry:W,removeMcpEntry:re,saveMcpCatalog:ge,resetMcpCatalog:xe,connectMcpServer:je,disconnectMcpServer:ve,authenticateMcpServer:Le,clearMcpAuth:ye,showMcpRawConfig:be,setShowMcpRawConfig:ee,expandedMcpEntries:ze,setExpandedMcpEntries:Fe}):null,he?t.jsx("div",{className:"sub-scope-row",children:t.jsx("select",{className:"select",value:u,onChange:A=>p(A.target.value),children:Ue.map(A=>t.jsx("option",{value:A.key,children:A.label},A.key))})}):null,t.jsx(cs,{showInstalledAssets:Re,showModels:he,showMcps:fe,assetsLoading:M,filteredInstalledAssets:C,filteredMcps:w,groupedModels:$,selectedAsset:K,selectedAssetKey:v,selectedInstalled:b,authUser:P,detailActionStatus:L,detailActionLoading:j,expandedModelProviders:ae,setExpandedModelProviders:Ne,installedEmptyMessage:Oe,onSelectAsset:I,onCloseAsset:z,onSaveLocal:U,onPublish:m,onDeleteDraft:x,onEditDraft:k,onUninstall:S})]})}function ds(e){const{registryQuery:n,setRegistryQuery:s,triggerSearch:i,registryLoading:r,registryResults:a,registryError:o,registryKind:c,setRegistryKind:u,registryGroups:p,installedUrns:g,selectedAsset:d,selectedAssetKey:y,selectedInstalled:f,authUser:M,detailActionStatus:C,detailActionLoading:$,onSelectAsset:w,onInstall:K,onCloseAsset:v,onSaveLocal:b,onPublish:P,onDeleteDraft:L}=e;return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"explorer__header",children:t.jsxs("div",{className:"search-wrapper",children:[t.jsx(Se,{size:12,className:"icon-muted"}),t.jsx("input",{className:"text-input",value:n,onChange:j=>s(j.target.value),placeholder:"name, author, slug, tag...",onKeyDown:j=>j.key==="Enter"&&i()}),t.jsx("button",{className:"registry-search-btn",onClick:i,disabled:r,children:r?"...":t.jsx(jt,{size:12})})]})}),t.jsx(us,{}),t.jsx("div",{className:"registry-filters",children:t.jsxs("select",{className:"select",value:c,onChange:j=>u(j.target.value),children:[t.jsx("option",{value:"all",children:"All Kinds"}),t.jsx("option",{value:"tal",children:"Tal"}),t.jsx("option",{value:"dance",children:"Dance"}),t.jsx("option",{value:"performer",children:"Performer"}),t.jsx("option",{value:"act",children:"Act"})]})}),c==="all"&&p.length>0&&t.jsx("div",{className:"registry-counts",children:p.map(j=>t.jsxs("span",{className:"registry-count-chip",children:[j.label," ",j.items.length]},j.kind))}),t.jsxs("div",{className:"asset-library-body",children:[t.jsx("div",{className:"assets-list",children:r?t.jsx("div",{className:"empty-state",children:"Searching registry..."}):a.length===0?t.jsx("div",{className:"empty-state",children:o?t.jsx("span",{style:{color:"var(--tal-color)"},children:(o==null?void 0:o.message)||"Search failed."}):n?"No results found.":"Search the DOT registry to discover and install assets."}):p.map(j=>t.jsxs("div",{className:"registry-group",children:[c==="all"&&t.jsxs("div",{className:"registry-group__header",children:[j.label," ",t.jsx("span",{children:j.items.length})]}),j.items.map((I,z)=>{const U=Q(I)||`${I.kind}:${I.author}:${I.name}:${z}`;return t.jsx(ls,{item:I,installed:g.has(Q(I)||""),selected:y===ce(I),onInstall:K,onSelect:w},U)})]},j.kind))}),t.jsx(At,{asset:d,installed:f,onClose:v,authUser:M,actionStatus:C,actionLoading:$,onSaveLocal:b,onPublish:P,onImportToStage:void 0,onDeleteDraft:L})]})]})}function us(){const[e,n]=h.useState(""),[s,i]=h.useState(null),[r,a]=h.useState(!1),o=yn(),c=async u=>{if(!(!e.trim()||o.isPending)){a(!1),i(null);try{const p=await o.mutateAsync({source:e.trim(),scope:u});n(""),i(`✔ Imported ${p.installed.length} skill(s) as Dance (${u==="global"?"Global":"Workspace"})`),setTimeout(()=>i(null),4e3)}catch(p){i(`✗ ${p instanceof Error?p.message:"Import failed"}`)}}};return t.jsxs("div",{className:"github-import-row",children:[t.jsxs("div",{className:"github-import-input",children:[t.jsx(fn,{size:11,className:"icon-muted"}),t.jsx("input",{className:"text-input",value:e,onChange:u=>n(u.target.value),onKeyDown:u=>u.key==="Enter"&&e.trim()&&a(!0),placeholder:"owner/repo or GitHub URL",disabled:o.isPending}),t.jsxs("div",{style:{position:"relative"},children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>a(!r),disabled:!e.trim()||o.isPending,children:o.isPending?t.jsx(ht,{size:10,className:"spin"}):"Import as Dance"}),r&&t.jsxs("div",{className:"install-scope-menu",children:[t.jsxs("button",{className:"install-scope-opt",onClick:()=>c("stage"),children:[t.jsx(Be,{size:11})," Workspace"]}),t.jsxs("button",{className:"install-scope-opt",onClick:()=>c("global"),children:[t.jsx(Se,{size:11})," Global"]})]})]})]}),s&&t.jsx("div",{className:`github-import-status ${s.startsWith("✗")?"error":"success"}`,children:s})]})}function ut({kind:e}){switch(e){case"tal":return t.jsx(Je,{size:12});case"dance":return t.jsx(de,{size:12});case"performer":return t.jsx(vt,{size:12});case"act":return t.jsx(de,{size:12});default:return null}}function ms({target:e,dependents:n,loading:s,actionName:i="Uninstall",onConfirm:r,onCancel:a}){const o=1+n.length,c=i==="Uninstall"?"Uninstalling":"Deleting";return mt.createPortal(t.jsx("div",{className:"modal-overlay",onClick:a,children:t.jsxs("div",{className:"uninstall-confirm-dialog",onClick:u=>u.stopPropagation(),children:[t.jsxs("div",{className:"uninstall-confirm-dialog__header",children:[t.jsx(gn,{size:16,style:{color:"var(--danger)"}}),t.jsxs("span",{children:[i," ",o," asset",o>1?"s":"","?"]}),t.jsx("button",{className:"icon-btn",onClick:a,style:{marginLeft:"auto"},children:t.jsx(We,{size:14})})]}),t.jsxs("div",{className:"uninstall-confirm-dialog__body",children:[t.jsxs("div",{className:"uninstall-confirm-dialog__target",children:[t.jsx(ut,{kind:e.kind}),t.jsx("span",{className:"uninstall-confirm-dialog__name",children:e.name}),t.jsx("span",{className:"uninstall-confirm-dialog__badge",children:e.source})]}),n.length>0&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"uninstall-confirm-dialog__warning",children:["The following assets depend on this and will also be ",i.toLowerCase(),"ed:"]}),t.jsx("ul",{className:"uninstall-confirm-dialog__list",children:n.map(u=>t.jsxs("li",{className:"uninstall-confirm-dialog__item",children:[t.jsx(ut,{kind:u.kind}),t.jsx("span",{className:"uninstall-confirm-dialog__name",children:u.name}),t.jsx("span",{className:"uninstall-confirm-dialog__badge",children:u.source}),t.jsx("span",{className:"uninstall-confirm-dialog__reason",children:u.reason})]},u.urn||u.draftId))})]}),t.jsxs("div",{className:"uninstall-confirm-dialog__note",children:["References to ",o>1?"these assets":"this asset"," in canvas performers and acts will also be removed."]})]}),t.jsxs("div",{className:"uninstall-confirm-dialog__actions",children:[t.jsx("button",{className:"btn",onClick:a,disabled:s,children:"Cancel"}),t.jsx("button",{className:"btn btn--danger",onClick:r,disabled:s,children:s?`${c}…`:`${i} ${o>1?"All":""}`})]})]})}),document.body)}function ps(e){return`${e}-${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function hs(e,n){const[s,i]=h.useState([]),[r,a]=h.useState([]),[o,c]=h.useState(null),[u,p]=h.useState(!1),[g,d]=h.useState(null),y=h.useRef(null),f=yt(),{data:M=[]}=bn(n);h.useEffect(()=>{n&&R.config.getProject().then(m=>{const x=dn(an(m==null?void 0:m.config));i(x),a(x),c(null)}).catch(m=>{console.error("Failed to load MCP catalog",m),c("Failed to load project MCP catalog.")})},[n,e]),h.useEffect(()=>{if(!g){y.current=null;return}const m=M.find(k=>k.name===g);if((m==null?void 0:m.status)==="connected"){y.current=null,d(null),c(`Authenticated and connected ${g}.`);return}if((m==null?void 0:m.status)==="failed"||(m==null?void 0:m.status)==="needs_client_registration"){y.current=null,d(null),c(m.error||`Authentication did not complete for ${g}.`);return}const x=window.setInterval(()=>{if(y.current&&Date.now()>y.current){window.clearInterval(x),y.current=null,d(null),c(`Timed out waiting for ${g} authentication.`);return}f.invalidateQueries({queryKey:[...X.mcpServers,e]})},2e3);return()=>window.clearInterval(x)},[M,g,f,e]);const C=h.useMemo(()=>JSON.stringify(s)!==JSON.stringify(r),[s,r]),$=(m,x)=>{i(k=>k.map(S=>S.key===m?x(S):S))},w=()=>{const m=ps("asset-mcp");i(x=>[...x,{key:m,name:"",enabled:!0,transport:"stdio",timeoutText:"",command:"",args:[],env:[],url:"",headers:[],oauthEnabled:!0,oauthClientId:"",oauthClientSecret:"",oauthScope:""}])},K=m=>{i(x=>x.filter(k=>k.key!==m))},v=async(m=!1)=>{await f.invalidateQueries({queryKey:[...X.mcpServers,e]}),m&&await f.invalidateQueries({queryKey:["runtime-tools",e]})},b=async(m,x)=>{var k;c(null);try{await m(),(k=x.onSuccess)==null||k.call(x),c(x.successMessage),await v(!!x.includeRuntimeTools)}catch(S){c(S instanceof Error?S.message:x.failureMessage)}};return{mcpDraftEntries:s,mcpCatalogDirty:C,mcpCatalogStatus:o,mcpCatalogSaving:u,pendingMcpAuthName:g,mcpServers:M,updateMcpEntry:$,addMcpEntry:w,removeMcpEntry:K,saveMcpCatalog:async()=>{p(!0),c(null);try{const m=s.find(x=>x.name.trim()&&x.transport==="stdio"&&!x.command.trim()||x.name.trim()&&x.transport==="http"&&!x.url.trim());if(m)throw new Error(`MCP '${m.name}' needs a ${m.transport==="http"?"URL":"command"} before saving.`);await R.config.update({mcp:pt(s)}),a(s),c("Saved project MCP catalog."),await f.invalidateQueries({queryKey:[...X.mcpServers,e]})}catch(m){c(m instanceof Error?m.message:"Failed to save project MCP catalog.")}finally{p(!1)}},resetMcpCatalog:()=>{i(r),c(null)},connectMcpServer:async m=>b(()=>R.mcp.connect(m),{successMessage:`Connected MCP server ${m}.`,failureMessage:`Failed to connect ${m}.`,includeRuntimeTools:!0}),disconnectMcpServer:async m=>{await b(()=>R.mcp.disconnect(m),{successMessage:`Disconnected MCP server ${m}.`,failureMessage:`Failed to disconnect ${m}.`,includeRuntimeTools:!0})},authenticateMcpServer:async m=>{const x=typeof window<"u"?window.open("about:blank","_blank"):null;c(null);try{const k=await R.mcp.authStart(m);let S=!1;try{x&&!x.closed?(x.location.href=k.authorizationUrl,S=!0):S=!!window.open(k.authorizationUrl,"_blank")}catch{S=!1}S||(x==null||x.close(),J(`Open the browser to finish authenticating ${m}.`,"warning",{title:"MCP auth started",actionLabel:"Open auth",onAction:()=>{window.open(k.authorizationUrl,"_blank")},dedupeKey:`mcp-auth:${m}`,durationMs:8e3})),y.current=Date.now()+18e4,d(m),c(`Complete authentication for ${m} in the browser.`),await f.invalidateQueries({queryKey:[...X.mcpServers,e]})}catch(k){x==null||x.close(),d(null),c(k instanceof Error?k.message:`Failed to start authentication for ${m}.`)}},clearMcpAuth:async m=>{await b(()=>R.mcp.clearAuth(m),{successMessage:`Cleared stored authentication for ${m}.`,failureMessage:`Failed to clear authentication for ${m}.`,onSuccess:()=>{g===m&&(d(null),y.current=null)}})}}}function fs(){const e=E(l=>l.workingDir),n=E(l=>l.performers),s=E(l=>l.drafts),i=E(l=>l.addPerformer),r=E(l=>l.createMarkdownEditor),a=E(l=>l.openDraftEditor),o=E(l=>l.selectPerformer),c=E(l=>l.setActiveChatPerformer),u=E(l=>l.addAct),[p,g]=h.useState(""),[d,y]=h.useState("local"),[f,M]=h.useState("installed"),[C,$]=h.useState("all"),[w,K]=h.useState("performer"),[v,b]=h.useState("models"),[P,L]=h.useState("all"),[j,I]=h.useState("all"),[z,U]=h.useState(""),[m,x]=h.useState(!1),[k,S]=h.useState(null),[ue,me]=h.useState({}),[pe,Re]=h.useState({}),[he,fe]=h.useState(!1),[Ie,Z]=h.useState(null),[De,V]=h.useState(null),[Ee,se]=h.useState(null),{data:W}=Nn(),re=yt(),ge=d==="local"&&f==="installed",xe=d==="local"&&f==="runtime"&&v==="models",je=d==="local"&&f==="runtime"&&v==="mcps",{data:ve=[],isLoading:Le}=_n(w,ge),{data:ye=[]}=kn(d==="registry"),{data:be=[]}=An(xe),{data:ee=[],isLoading:ze,error:Fe}=Cn(z,P,m),ae=hs(e,je),Ne=h.useMemo(()=>ae.mcpServers??[],[ae.mcpServers]),{mcpDraftEntries:Ue,mcpCatalogDirty:Ke,mcpCatalogStatus:Te,mcpCatalogSaving:Oe,pendingMcpAuthName:A,updateMcpEntry:He,addMcpEntry:Ct,removeMcpEntry:Mt,saveMcpCatalog:St,resetMcpCatalog:wt,connectMcpServer:Pt,disconnectMcpServer:$t,authenticateMcpServer:Rt,clearMcpAuth:It}=ae,tt=h.useMemo(()=>Tn(s,w),[s,w]),nt=h.useMemo(()=>[...tt,...ve],[tt,ve]),Dt=Mn();h.useEffect(()=>{S(null)},[d,f,w,v,P]),h.useEffect(()=>{Z(null)},[d,f,w]),h.useEffect(()=>{me({})},[p,j]);const qe=h.useMemo(()=>new Set(ye.map(l=>Q(l)).filter(Boolean)),[ye]),Et=()=>{z.trim()&&x(!0)},Lt=l=>{U(l),x(!1)},zt=async(l,_)=>{var O;const N=ee.find(D=>Q(D)===l);if((O=N==null?void 0:N.tags)!=null&&O.includes("skills.sh")&&N.kind==="dance"){const D=`${N.owner}@${N.name}`;return R.dot.addFromGitHub(D)}return Dt.mutateAsync({urn:l,scope:_})},Ft=l=>{r(l),Z(`Opened a new ${l} editor on the canvas.`)},Ut=()=>{const l=new Set(n.map(N=>N.id));i(`Performer ${n.filter(N=>N.scope==="shared").length+1}`,80,80);const _=E.getState().performers.find(N=>!l.has(N.id));_&&(o(_.id),c(_.id),Z(`Created ${_.name}. Configure and publish it from the inspector.`))},Kt=()=>{const _=`Act ${E.getState().acts.length+1}`;u(_),Z(`Created ${_}. Configure it from the inspector.`)},Ge=async l=>{await Promise.all([re.invalidateQueries({queryKey:X.assets(e)}),re.invalidateQueries({queryKey:X.assetInventory(e)}),re.invalidateQueries({queryKey:X.assetKind(e,l)})])},Tt=async(l,_)=>{if(!(!l||!Nt(l.kind)))try{se(_),V(null);const N=On(l),O=l.slug||ln(l.name);if(_==="save-local"){if(!(W!=null&&W.username))throw new Error("Run dot login first to save a local fork under your namespace.");const T=await R.dot.saveLocalAsset(l.kind,O,N,W.username);await Ge(l.kind),l.source==="draft"&&l.draftId&&(R.drafts.delete(l.kind,l.draftId).catch(()=>{}),E.setState(F=>{const q={...F.drafts};delete q[l.draftId];const H=rt(l.kind,l.draftId,F.performers,F.acts);return{drafts:q,...H}})),V(T.existed?`Updated local ${l.kind} asset at ${T.urn}.`:`Saved local ${l.kind} asset at ${T.urn}.`);return}const D=await R.dot.publishAsset(l.kind,O,N,Array.isArray(l.tags)?l.tags:[],!0);await Ge(l.kind),V(D.published?`Published ${D.urn}.`:`${D.urn} already exists in the registry.`)}catch(N){V(N instanceof Error?N.message:"Asset action failed.")}finally{se(null)}},[te,ie]=h.useState(null),[Ot,_e]=h.useState(!1),Ht=async l=>{if(!(!(l!=null&&l.kind)||!(l!=null&&l.urn)))try{const _=await R.dot.previewUninstall(l.kind,l.urn);ie({asset:l,actionName:"Uninstall",..._})}catch(_){J(_ instanceof Error?_.message:"Failed to check dependencies","error",{title:"Uninstall preview failed",dedupeKey:`uninstall-error:${l.urn}`})}},qt=async(l,_)=>{try{_e(!0);const N=await R.dot.uninstallAsset(l.kind,l.urn,_);E.setState(D=>{const T={};for(const F of N.deletedUrns){const q=F.split("/")[0],H=cn(q,F,D.performers,D.acts);H.performers&&(T.performers=H.performers),H.acts&&(T.acts=H.acts),H.workspaceDirty&&(T.workspaceDirty=!0)}return T}),await Ge(l.kind),S(null),ie(null);const O=_?"all related assets":`"${l.name||l.urn}"`;J(`Uninstalled ${O}`,"success",{title:"Asset uninstalled",dedupeKey:`uninstall:${l.urn}`})}catch(N){J(N instanceof Error?N.message:"Failed to uninstall asset","error",{title:"Uninstall failed",dedupeKey:`uninstall-error:${l.urn}`})}finally{_e(!1)}},Gt=()=>{if(!te)return;const l=te.dependents.length>0;te.actionName==="Delete"?Bt(te.asset,l):qt(te.asset,l)},Qt=()=>{ie(null)},Vt=async l=>{if(!(!(l!=null&&l.draftId)||!(l!=null&&l.kind)))try{const _=await R.drafts.previewDelete(l.kind,l.draftId);ie({asset:l,actionName:"Delete",..._})}catch(_){J(_ instanceof Error?_.message:"Failed to check dependencies","error",{title:"Delete preview failed",dedupeKey:`draft:delete-error:${l.draftId}`})}},Wt=l=>{l!=null&&l.draftId&&a(l.draftId)},Bt=async(l,_)=>{try{_e(!0);const N=await R.drafts.delete(l.kind,l.draftId,_);E.setState(D=>{const T={...D.drafts},F={drafts:T};for(const q of N.deletedIds)delete T[q];for(const q of N.deletedIds)for(const H of["tal","dance","performer","act"]){const le=rt(H,q,F.performers||D.performers,F.acts||D.acts);le.performers&&(F.performers=le.performers),le.acts&&(F.acts=le.acts),le.workspaceDirty&&(F.workspaceDirty=!0)}return F}),S(null),ie(null);const O=_?"all related drafts":`"${l.name||l.draftId}"`;J(`Deleted ${O}`,"success",{title:"Draft deleted",dedupeKey:`draft:delete:${l.draftId}`})}catch(N){J(N instanceof Error?N.message:"Failed to delete draft","error",{title:"Delete failed",dedupeKey:`draft:delete-error:${l.draftId}`})}finally{_e(!1)}},B=p.trim().toLowerCase(),Jt=h.useMemo(()=>$n(nt,C,B),[nt,B,C]),Xt=h.useMemo(()=>Kn(be,B,j),[j,be,B]),Yt=h.useMemo(()=>Ne.filter(l=>!B||Pn(l).includes(B)),[Ne,B]),Zt=h.useMemo(()=>Rn(ee),[ee]),st=k?ce(k):null;h.useEffect(()=>{V(null),se(null)},[st]);const en=h.useMemo(()=>{if(!k)return!1;if(k.source&&k.urn)return!0;const l=Q(k);return l?qe.has(l):!1},[qe,k]),tn=[{key:"all",label:"All"},{key:"anthropic",label:"Anthropic"},{key:"openai",label:"OpenAI"},{key:"google",label:"Google"},{key:"xai",label:"xAI/Grok"},{key:"other",label:"Other"}],nn=In(f,v);return{scope:d,setScope:y,localSection:f,setLocalSection:M,installedKind:w,setInstalledKind:K,runtimeKind:v,setRuntimeKind:b,sourceFilter:C,setSourceFilter:$,modelProviderFilter:j,setModelProviderFilter:I,filter:p,setFilter:g,localPlaceholder:nn,authoringHint:Ie,assetsLoading:Le,filteredInstalledAssets:Jt,groupedModels:Xt,filteredMcps:Yt,selectedAsset:k,setSelectedAsset:S,selectedAssetKey:st,selectedInstalled:en,authUser:W,detailActionStatus:De,detailActionLoading:Ee,createNewPerformer:Ut,createNewAct:Kt,createNewPerformerDraftEntry:Ft,showInstalledAssets:ge,showModels:xe,showMcps:je,mcpDraftEntries:Ue,mcpCatalogDirty:Ke,mcpCatalogStatus:Te,mcpCatalogSaving:Oe,pendingMcpAuthName:A,updateMcpEntry:He,addMcpEntry:Ct,removeMcpEntry:Mt,saveMcpCatalog:St,resetMcpCatalog:wt,connectMcpServer:Pt,disconnectMcpServer:$t,authenticateMcpServer:Rt,clearMcpAuth:It,showMcpRawConfig:he,setShowMcpRawConfig:fe,expandedMcpEntries:pe,setExpandedMcpEntries:Re,expandedModelProviders:ue,setExpandedModelProviders:me,modelProviderTabs:tn,registryQuery:z,registryLoading:ze,registryResults:ee,registryError:Fe,registryKind:P,setRegistryKind:L,registryGroups:Zt,installedUrns:qe,triggerSearch:Et,handleQueryChange:Lt,handleRegistryInstall:zt,handlePinnedAssetAction:Tt,handleDeleteDraft:Vt,handleEditDraft:Wt,handleUninstallAsset:Ht,uninstallPlan:te,uninstallLoading:Ot,confirmUninstall:Gt,cancelUninstall:Qt,setSearchEnabled:x}}function Cs({onClose:e}){const n=fs();return t.jsxs("div",{className:"assets-panel",children:[t.jsxs("div",{className:"drawer-header",children:[t.jsx("span",{className:"drawer-header__title",children:"Asset Library"}),e?t.jsx("button",{className:"icon-btn",onClick:e,title:"Close",children:t.jsx(We,{size:14})}):null]}),t.jsxs("div",{className:"scope-selector",children:[t.jsxs("button",{className:`scope-btn ${n.scope==="local"?"active":""}`,onClick:()=>n.setScope("local"),children:[t.jsx(xt,{size:10,style:{marginRight:3,verticalAlign:-1}}),"Local"]}),t.jsxs("button",{className:`scope-btn ${n.scope==="registry"?"active":""}`,onClick:()=>n.setScope("registry"),children:[t.jsx(Se,{size:10,style:{marginRight:3,verticalAlign:-1}}),"Registry"]})]}),n.scope==="local"?t.jsx(os,{scope:n.scope,localSection:n.localSection,setLocalSection:n.setLocalSection,installedKind:n.installedKind,setInstalledKind:n.setInstalledKind,runtimeKind:n.runtimeKind,setRuntimeKind:n.setRuntimeKind,sourceFilter:n.sourceFilter,setSourceFilter:n.setSourceFilter,modelProviderFilter:n.modelProviderFilter,setModelProviderFilter:n.setModelProviderFilter,filter:n.filter,setFilter:n.setFilter,localPlaceholder:n.localPlaceholder,authoringHint:n.authoringHint,assetsLoading:n.assetsLoading,filteredInstalledAssets:n.filteredInstalledAssets,groupedModels:n.groupedModels,filteredMcps:n.filteredMcps,selectedAsset:n.selectedAsset,selectedAssetKey:n.selectedAssetKey,selectedInstalled:n.selectedInstalled,authUser:n.authUser,detailActionStatus:n.detailActionStatus,detailActionLoading:n.detailActionLoading,onSelectAsset:n.setSelectedAsset,onCloseAsset:()=>n.setSelectedAsset(null),onSaveLocal:s=>n.handlePinnedAssetAction(s,"save-local"),onPublish:s=>n.handlePinnedAssetAction(s,"publish"),onDeleteDraft:n.handleDeleteDraft,onEditDraft:n.handleEditDraft,onUninstall:n.handleUninstallAsset,createNewPerformer:n.createNewPerformer,createNewAct:n.createNewAct,createNewPerformerDraftEntry:n.createNewPerformerDraftEntry,showInstalledAssets:n.showInstalledAssets,showModels:n.showModels,showMcps:n.showMcps,mcpDraftEntries:n.mcpDraftEntries,mcpCatalogDirty:n.mcpCatalogDirty,mcpCatalogStatus:n.mcpCatalogStatus,mcpCatalogSaving:n.mcpCatalogSaving,pendingMcpAuthName:n.pendingMcpAuthName,updateMcpEntry:n.updateMcpEntry,addMcpEntry:n.addMcpEntry,removeMcpEntry:n.removeMcpEntry,saveMcpCatalog:n.saveMcpCatalog,resetMcpCatalog:n.resetMcpCatalog,connectMcpServer:n.connectMcpServer,disconnectMcpServer:n.disconnectMcpServer,authenticateMcpServer:n.authenticateMcpServer,clearMcpAuth:n.clearMcpAuth,showMcpRawConfig:n.showMcpRawConfig,setShowMcpRawConfig:n.setShowMcpRawConfig,expandedMcpEntries:n.expandedMcpEntries,setExpandedMcpEntries:n.setExpandedMcpEntries,expandedModelProviders:n.expandedModelProviders,setExpandedModelProviders:n.setExpandedModelProviders,modelProviderTabs:n.modelProviderTabs}):t.jsx(ds,{registryQuery:n.registryQuery,setRegistryQuery:s=>n.handleQueryChange(s),triggerSearch:n.triggerSearch,registryLoading:n.registryLoading,registryResults:n.registryResults,registryError:n.registryError,registryKind:n.registryKind,setRegistryKind:s=>{n.setRegistryKind(s),n.setSearchEnabled(!1)},registryGroups:n.registryGroups,installedUrns:n.installedUrns,selectedAsset:n.selectedAsset,selectedAssetKey:n.selectedAssetKey,selectedInstalled:n.selectedInstalled,authUser:n.authUser,detailActionStatus:n.detailActionStatus,detailActionLoading:n.detailActionLoading,onSelectAsset:n.setSelectedAsset,onInstall:n.handleRegistryInstall,onCloseAsset:()=>n.setSelectedAsset(null),onSaveLocal:s=>n.handlePinnedAssetAction(s,"save-local"),onPublish:s=>n.handlePinnedAssetAction(s,"publish"),onDeleteDraft:n.handleDeleteDraft}),n.uninstallPlan&&t.jsx(ms,{target:n.uninstallPlan.target,dependents:n.uninstallPlan.dependents,loading:n.uninstallLoading,actionName:n.uninstallPlan.actionName,onConfirm:n.confirmUninstall,onCancel:n.cancelUninstall})]})}export{Cs as AssetLibrary,rs as DraggableAsset,is as DraggableMcp,as as DraggableModel,ls as RegistryResult};