pisper 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +0 -6
- package/README.md +0 -6
- package/bin/pisper.mjs +7 -15
- package/lib/install.mjs +9 -49
- package/lib/npm-platform.mjs +0 -12
- package/package.json +8 -9
- package/web/.vite/manifest.json +713 -737
- package/web/assets/AppDialog-BOGrPFbo.js +1 -0
- package/web/assets/{AppOverlays-CR5iJcP5.js → AppOverlays-D1vfPPIC.js} +1 -1
- package/web/assets/AppSelect-BCexz4Ty.js +1 -0
- package/web/assets/{AppShortcuts-BachmLQ3.js → AppShortcuts-Dd4gu7qz.js} +1 -1
- package/web/assets/{AssetsPage-BltehMID.js → AssetsPage-BPhPo5eU.js} +1 -1
- package/web/assets/ChannelsPage-Cu4v-GU2.js +1 -0
- package/web/assets/ChatAppearancePage-BLRQ7aH6.js +2 -0
- package/web/assets/ChatHistoryPage-BYqJFbY5.js +1 -0
- package/web/assets/ChatPage-tqAIj2Go.js +554 -0
- package/web/assets/ConfigPage-Z-BQwP2X.js +1 -0
- package/web/assets/{DecisionsPage-DOhLbIaD.js → DecisionsPage-Db6MIGD2.js} +1 -1
- package/web/assets/{DesktopWindowControls-KmgemDO8.js → DesktopWindowControls-CBYGv94u.js} +1 -1
- package/web/assets/{FloatingWidgets-Bs7ec6lW.js → FloatingWidgets-dzsQIxAO.js} +1 -1
- package/web/assets/{GitDiffViewer-xm2LnN9r.js → GitDiffViewer-m5aLB7Li.js} +1 -1
- package/web/assets/MarkdownMessage-CA9ODRKk.js +2 -0
- package/web/assets/McpPage-rerFxjYZ.js +1 -0
- package/web/assets/MemoryPage-cukfU824.js +1 -0
- package/web/assets/MobileContextScreen-W8V4H3Xv.js +2 -0
- package/web/assets/MobileNavigation-CEVgs1Ke.js +1 -0
- package/web/assets/MobileShellContext-D8qX-BlM.js +1 -0
- package/web/assets/{PageHeader-C_bfu8Ir.js → PageHeader-DIs9bESb.js} +1 -1
- package/web/assets/{PluginsPage-BPx5ERHL.js → PluginsPage-09Um3mY4.js} +1 -1
- package/web/assets/QueryClientProvider-CHJtxoX1.js +1 -0
- package/web/assets/{QuickPromptIdeas-Bs-udcSZ.js → QuickPromptIdeas-DGIL0nN7.js} +1 -1
- package/web/assets/SchedulesPage-C75QUeB5.js +1 -0
- package/web/assets/SessionContextPanel-oaKXyi7k.js +1 -0
- package/web/assets/{SessionFilesPane-BIRQ_hHi.js → SessionFilesPane-DPijesqH.js} +2 -2
- package/web/assets/{SidebarMoreTools-BDqt5VTG.js → SidebarMoreTools-D1nDS3i0.js} +1 -1
- package/web/assets/SidebarRecentSessions-a7z2ZvDv.js +2 -0
- package/web/assets/{SidebarSettingsButton-B4_vEBS5.js → SidebarSettingsButton-CRdV0Vft.js} +1 -1
- package/web/assets/{SidebarUpdateStatus-DD8f4Fxv.js → SidebarUpdateStatus-DgNJBwgT.js} +1 -1
- package/web/assets/SkillsPage-DLirgTyX.js +1 -0
- package/web/assets/TerminalPanel-CJPy4Qhs.js +18 -0
- package/web/assets/{ThemeToggleButton-CXXbLtcY.js → ThemeToggleButton-C5QA5Kf2.js} +1 -1
- package/web/assets/{WebDesktopPet-DWFspeZE.js → WebDesktopPet-DgyHLE9y.js} +1 -1
- package/web/assets/{WorkbenchSidebarToggle-AgjfcT29.js → WorkbenchSidebarToggle-CcO1Al5A.js} +1 -1
- package/web/assets/WorkflowsPage-DrKHzJvb.js +1 -0
- package/web/assets/WorkspacePicker-B3liZkwe.js +1 -0
- package/web/assets/{api-Dzobr-o_.js → api-YI8_cHpR.js} +1 -1
- package/web/assets/{app-primitives-BBXY6U2S.js → app-primitives-SxfoFmHc.js} +1 -1
- package/web/assets/app-update-Bg6w1SOW.js +32 -0
- package/web/assets/arrow-up-DST6-qVQ.js +1 -0
- package/web/assets/catalog-BPCnu3F8.js +1 -0
- package/web/assets/channels-messages-DgWnmzUo.js +1 -0
- package/web/assets/chat-api-CqF-FICX.js +1 -0
- package/web/assets/{client-store-DPMvgPNS.js → client-store-BP_3-plw.js} +1 -1
- package/web/assets/{component-api-Nwo2yGZI.js → component-api-CN9Tcn5p.js} +1 -1
- package/web/assets/config-search-DOIJENN1.js +1 -0
- package/web/assets/dist-B7rNRXig.js +1 -0
- package/web/assets/dist-C3P9WH0T.js +1 -0
- package/web/assets/dist-CXiO_DNx.js +1 -0
- package/web/assets/dist-D8Wfxh48.js +1 -0
- package/web/assets/{dropdown-menu-DmL4pJTo.js → dropdown-menu-pKRdLJUe.js} +1 -1
- package/web/assets/{events-Bwv6HmwM.js → events-KqdUtjsm.js} +1 -1
- package/web/assets/{floating-widgets-store-DIy4GSy4.js → floating-widgets-store-Pjm1AdvO.js} +2 -2
- package/web/assets/folder-DPM8D8cf.js +1 -0
- package/web/assets/house-BNrzTkx9.js +1 -0
- package/web/assets/{http-DphgzWtw.js → http-Be2GB6DH.js} +1 -1
- package/web/assets/i18n-8nTnthu6.js +1 -0
- package/web/assets/{index-iBrSU61i.js → index-AF29hfx9.js} +2 -2
- package/web/assets/index-BAmsg90v.css +2 -0
- package/web/assets/monitor-ORxecA9m.js +1 -0
- package/web/assets/mount-app-WW5hteuX.js +9 -0
- package/web/assets/panels-top-left-BlZftvhg.js +1 -0
- package/web/assets/pick-system-directory-BnIFt85A.js +1 -0
- package/web/assets/{popover-BBuzaBfd.js → popover-CQqAaq-c.js} +1 -1
- package/web/assets/public-c36e4881.js +1 -0
- package/web/assets/public-components-C4ndcOCF.js +1 -0
- package/web/assets/{runtime-capabilities-store-DaWPY5y-.js → runtime-capabilities-store-CiL3ZPEo.js} +1 -1
- package/web/assets/scale-D0LcHVmf.js +1 -0
- package/web/assets/{session-change-summary-api-DFgTzTci.js → session-change-summary-api--7cl4LDn.js} +1 -1
- package/web/assets/session-context-store-DJnHgWwb.js +1 -0
- package/web/assets/session-list-DkNhT87s.js +1 -0
- package/web/assets/settings-navigation-CI7Yt4Or.js +1 -0
- package/web/assets/{shortcuts-BO-h6OmP.js → shortcuts-C_Cph88H.js} +1 -1
- package/web/assets/side-chat-context-Dn8w9ut8.js +3 -0
- package/web/assets/{sidebar-CfWEKOIK.js → sidebar-C3YJQV72.js} +1 -1
- package/web/assets/{speech-session-DKjw0mV_.js → speech-session-CoUr4n9Q.js} +1 -1
- package/web/assets/{startup-queries-CAQZvUIR.js → startup-queries-ByepQfGF.js} +1 -1
- package/web/assets/tabs-B60r4YwO.js +1 -0
- package/web/assets/{ui-store-2wpnH8Kf.js → ui-store-BGs-dEVz.js} +1 -1
- package/web/assets/{use-i18n-BSZKFkMb.js → use-i18n-a84Zp9dV.js} +1 -1
- package/web/assets/{useCustomUiComponents-BH86kuaq.js → useCustomUiComponents-BaQ_fwbr.js} +1 -1
- package/web/assets/useQuery-D3P5wO_Z.js +1 -0
- package/web/assets/web-preview-B7L-G6kp.js +1 -0
- package/web/assets/web-preview-events-C4AW4-It.js +1 -0
- package/web/index.html +2 -2
- package/web/assets/AppSelect-D149YYg1.js +0 -1
- package/web/assets/ChannelsPage-Tuw_qicj.js +0 -1
- package/web/assets/ChatAppearancePage-DME3PgDr.js +0 -2
- package/web/assets/ChatDockView-DoGtrBpY.js +0 -2
- package/web/assets/ChatHistoryPage-DTXS6i3n.js +0 -1
- package/web/assets/ChatPage-ibc_7olm.js +0 -4
- package/web/assets/ConfigPage-CI6one5Y.js +0 -1
- package/web/assets/MarkdownMessage-H1336cMr.js +0 -2
- package/web/assets/McpPage-Ck-7aLuZ.js +0 -1
- package/web/assets/MemoryPage-BEdNJ3ot.js +0 -1
- package/web/assets/MobileContextScreen-Dasny2J9.js +0 -2
- package/web/assets/MobileThreePane-DEKMHPfN.js +0 -1
- package/web/assets/SchedulesPage-W4Mg7frl.js +0 -1
- package/web/assets/SessionContextPanel-lu9F9AJg.js +0 -1
- package/web/assets/SidebarRecentSessions-1G_huYu9.js +0 -1
- package/web/assets/SkillsPage-CpRRosmo.js +0 -1
- package/web/assets/TerminalPanel-DVKC4htc.js +0 -18
- package/web/assets/Threads-B8ij_QtI.js +0 -1
- package/web/assets/WorkflowsPage-bhQlHSzS.js +0 -1
- package/web/assets/app-update-DppJNspd.js +0 -32
- package/web/assets/arrow-right-DqLOhpA2.js +0 -1
- package/web/assets/catalog-D4eaIju4.js +0 -1
- package/web/assets/channels-messages-CeRKS_DE.js +0 -1
- package/web/assets/chat-api-DfnvubiW.js +0 -1
- package/web/assets/chevron-left-BAtyp3_6.js +0 -1
- package/web/assets/config-search-CwVhh2uc.js +0 -1
- package/web/assets/dist-DAs5KRGl.js +0 -1
- package/web/assets/dist-swnK7PHk.js +0 -1
- package/web/assets/i18n-7QvbQzOQ.js +0 -1
- package/web/assets/index-CdASiNlI.css +0 -2
- package/web/assets/local-path-reveal-DWhkyox-.js +0 -1
- package/web/assets/mobile-shell-layout-CMpTmYRX.js +0 -1
- package/web/assets/mount-app-n_05p6iW.js +0 -9
- package/web/assets/panel-left-C_lYsiIA.js +0 -1
- package/web/assets/panel-right-BSUtqUd8.js +0 -1
- package/web/assets/pick-system-directory-R1F5WyaB.js +0 -1
- package/web/assets/pin-Dc2zE4cS.js +0 -1
- package/web/assets/public-BcTP7F3I.js +0 -1
- package/web/assets/public-components-Ck5BYo6M.js +0 -1
- package/web/assets/session-list-CMaoK_ZX.js +0 -1
- package/web/assets/session-streaming-state-llCTupbI.js +0 -3
- package/web/assets/side-chat-context-Dr2QLUJA.js +0 -1
- package/web/assets/tabs-DQYVDdOp.js +0 -1
- package/web/assets/use-animation-visibility-_Xe7jeUy.js +0 -1
- package/web/assets/useQuery-DdcpUQhO.js +0 -1
- package/web/assets/vendor-dockview-Bf3Gg83W.js +0 -1
- package/web/assets/vendor-dockview-D5adAaCg.css +0 -1
- package/web/assets/web-preview-BPNd1LUd.js +0 -1
- package/web/assets/web-preview-CQbpHjt1.js +0 -1
- package/web/assets/web-preview-events-o845ErdA.js +0 -1
- package/web/assets/web-preview-panel-DVQxVfig.js +0 -552
- package/web/assets/workflow-Bg94dy8I.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor-react-DwNgTV1j.js";import{t}from"./use-i18n-
|
|
1
|
+
import{r as e}from"./vendor-react-DwNgTV1j.js";import{t}from"./use-i18n-a84Zp9dV.js";import{t as n}from"./utils-C8uzG5AZ.js";import{t as r}from"./createLucideIcon-Cd-3GVxJ.js";import{n as i,r as a,t as o}from"./sun-DBWBo3We.js";import{t as s}from"./button-CQA36izu.js";import{n as c}from"./ui-store-BGs-dEVz.js";var l=r(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),u=e(),d={system:a,scheduled:l,dark:i,light:o};function f({theme:e,onCycle:r,compact:i=!1,className:a}){let{t:o}=t(),l={system:o(`navigation:pageHeader.system`),scheduled:o(`navigation:pageHeader.scheduled`),dark:o(`navigation:pageHeader.dark`),light:o(`navigation:pageHeader.light`)},f=d[e],p={theme:l[e],next:l[c(e)]};return(0,u.jsx)(s,{variant:i?`ghost`:`outline`,size:`icon`,className:n(`[-webkit-app-region:no-drag]`,i&&`size-8 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground`,a),"data-testid":`theme-toggle`,title:o(`navigation:pageHeader.themeThemeClickToSwitch`,p),"aria-label":o(`navigation:pageHeader.themeThemeClickToSwitchThemes`,p),onClick:r,children:(0,u.jsx)(f,{className:`size-4`,"aria-hidden":`true`})})}export{f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./index-AF29hfx9.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-a84Zp9dV.js";import{t as a}from"./api-YI8_cHpR.js";var o=e(n(),1),s=r(),c=192,l=288,u=`pisper-web-desktop-pet-position`,d={idle:{row:0,frames:6,durationMs:1100},waving:{row:3,frames:4,durationMs:700},jumping:{row:4,frames:5,durationMs:840},failed:{row:5,frames:8,durationMs:1220},waiting:{row:6,frames:6,durationMs:1010},running:{row:7,frames:6,durationMs:820},review:{row:8,frames:6,durationMs:1030}};function f(e){return{x:Math.max(0,Math.min(window.innerWidth-c,e.x)),y:Math.max(0,Math.min(window.innerHeight-l,e.y))}}function p(){try{let e=JSON.parse(t.getItem(u)||`{}`);if(Number.isFinite(e?.x)&&Number.isFinite(e?.y))return f(e)}catch{}return f({x:window.innerWidth-c-20,y:window.innerHeight-l-20})}function m(e){return e&&e in d?e:`idle`}function h(){let{t:e}=i(),[n,r]=(0,o.useState)(null),[c,l]=(0,o.useState)(p),[h,g]=(0,o.useState)(null),_=(0,o.useRef)(null),v=(0,o.useRef)(void 0),y=(0,o.useCallback)(async()=>{try{r(await a(`/api/desktop-pet`))}catch{}},[]);if((0,o.useEffect)(()=>{if(window.pisperDesktop?.getPetStatus)return;let e,t=()=>{document.visibilityState===`visible`&&e===void 0&&(y(),e=window.setInterval(y,1200))},n=()=>{e!==void 0&&(window.clearInterval(e),e=void 0)},i=()=>{document.visibilityState===`visible`?t():n()},a=e=>{let t=e.detail;t?r(t):y()},o=()=>l(e=>f(e));return t(),document.addEventListener(`visibilitychange`,i),window.addEventListener(`pisper:desktop-pet-changed`,a),window.addEventListener(`resize`,o),()=>{n(),window.clearTimeout(v.current),document.removeEventListener(`visibilitychange`,i),window.removeEventListener(`pisper:desktop-pet-changed`,a),window.removeEventListener(`resize`,o)}},[y]),window.pisperDesktop?.getPetStatus||!n?.running||!n.spriteUrl)return null;let b=h||m(n.state),x=d[b],S={review:e(`config:desktopPetSettings.bubbleThinking`),running:e(`config:desktopPetSettings.bubbleWorking`),waiting:e(`config:desktopPetSettings.bubbleResponding`),waving:e(`config:desktopPetSettings.bubbleDone`),failed:e(`config:desktopPetSettings.bubbleFailed`),jumping:e(`config:desktopPetSettings.bubbleHello`)}[b]||``,C=e=>{let n=_.current;if(!(!n||n.id!==e.pointerId)){if(_.current=null,e.currentTarget.releasePointerCapture(e.pointerId),n.moved){t.setItem(u,JSON.stringify(c));return}g(`jumping`),window.clearTimeout(v.current),v.current=window.setTimeout(()=>g(null),900)}};return(0,s.jsxs)(`div`,{className:`web-desktop-pet max-[640px]:[transform:scale(0.75)] max-[640px]:origin-[bottom_right] fixed z-[70] w-[192px] h-[288px] cursor-grab [touch-action:none] select-none [filter:drop-shadow(0_12px_14px_rgb(15_23_42_/_0.16))] ${_.current?`dragging [.web-desktop-pet&]:cursor-grabbing`:``}`,style:{left:c.x,top:c.y,opacity:n.opacity??1},onPointerDown:e=>{if(e.button!==0)return;let t=e.currentTarget.getBoundingClientRect();_.current={id:e.pointerId,offsetX:e.clientX-t.left,offsetY:e.clientY-t.top,startX:e.clientX,startY:e.clientY,moved:!1},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{let t=_.current;!t||t.id!==e.pointerId||(Math.hypot(e.clientX-t.startX,e.clientY-t.startY)>4&&(t.moved=!0),l(f({x:e.clientX-t.offsetX,y:e.clientY-t.offsetY})))},onPointerUp:C,onPointerCancel:C,"aria-label":e(`config:desktopPetSettings.webPetLabel`,{name:n.selectedName||n.selectedSlug}),children:[(0,s.jsx)(`div`,{className:`web-desktop-pet-bubble motion-reduce:[transition:none] absolute z-[2] [left:50%] [bottom:210px] max-w-[180px] [padding:6px_10px] [transform:translateX(-50%)_translateY(4px)] [border:1px_solid_color-mix(in_srgb,_var(--stroke)_75%,_transparent)] rounded-[10px] bg-[color-mix(in_srgb,_var(--surface)_94%,_transparent)] shadow-[0_8px_24px_rgb(15_23_42_/_0.2)] text-[var(--text)] text-[11px] leading-[1.4] opacity-0 pointer-events-none text-center [transition:opacity_0.18s_ease,_transform_0.18s_ease] whitespace-nowrap ${S?`visible [.web-desktop-pet-bubble&]:opacity-100 [.web-desktop-pet-bubble&]:[transform:translateX(-50%)_translateY(0)]`:``}`,role:`status`,children:S}),(0,s.jsx)(`div`,{className:`absolute left-0 bottom-0 w-[192px] h-[208px] [contain:layout_paint] overflow-hidden`,role:`img`,children:(0,s.jsx)(`div`,{className:`web-desktop-pet-sprite [--pet-sprite-y:calc(var(--pet-row)_*_-208px)] [--pet-sprite-end-x:calc(var(--pet-frames)_*_-192px)] w-[192px] h-[208px] [background-image:var(--pet-sprite-url)] [background-repeat:no-repeat] [background-size:var(--pet-sheet-width,_1536px)_var(--pet-sheet-height,_1872px)] [image-rendering:pixelated] [transform:translateZ(0)] origin-[top_left] [will-change:background-position] [animation:web-pet-state_var(--pet-duration)_steps(var(--pet-frames))_infinite] motion-reduce:[animation:none]`,style:{"--pet-sprite-url":`url("${n.spriteUrl}")`,"--pet-sheet-width":`${n.sheetWidth||1536}px`,"--pet-sheet-height":`${n.sheetHeight||1872}px`,"--pet-row":x.row,"--pet-frames":x.frames,"--pet-duration":`${x.durationMs}ms`}})})]})}export{h as WebDesktopPet};
|
package/web/assets/{WorkbenchSidebarToggle-AgjfcT29.js → WorkbenchSidebarToggle-CcO1Al5A.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor-react-DwNgTV1j.js";import{t}from"./use-i18n-
|
|
1
|
+
import{r as e}from"./vendor-react-DwNgTV1j.js";import{t}from"./use-i18n-a84Zp9dV.js";import{t as n}from"./utils-C8uzG5AZ.js";import{t as r}from"./createLucideIcon-Cd-3GVxJ.js";import{a as i,i as a}from"./sidebar-C3YJQV72.js";var o=r(`panel-left-close`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m16 15-3-3 3-3`,key:`14y99z`}]]),s=r(`panel-left-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`m14 9 3 3-3 3`,key:`8010ee`}]]),c=e();function l({inSidebar:e=!1}){let{open:r,openMobile:l,isMobile:u,persistent:d}=i(),{t:f}=t(),p=u?l:r;if(d||!u&&!e)return null;let m=f(p?`navigation:appSidebar.collapseSidebar`:`navigation:appSidebar.expandSidebar`);return(0,c.jsxs)(a,{id:e&&p?`workbench-sidebar-collapse`:`workbench-sidebar-expand`,"aria-label":m,"aria-expanded":p,"aria-controls":`workbench-sidebar`,title:m,className:n(`h-8 shrink-0 rounded-lg border-sidebar-border hover:bg-sidebar-accent [-webkit-app-region:no-drag]`,e?p?`w-auto gap-1.5 px-2 text-xs`:`h-11 w-full`:`w-8`),children:[p?(0,c.jsx)(o,{"aria-hidden":`true`}):(0,c.jsx)(s,{"aria-hidden":`true`}),e&&p&&(0,c.jsx)(`span`,{children:f(`navigation:workbench.collapseSidebar`)})]})}export{l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{c as t,f as n,u as r}from"./vendor-router-CZg2bCPV.js";import{i,r as a}from"./vendor-react-DwNgTV1j.js";import{u as o}from"./i18n-8nTnthu6.js";import{t as s}from"./use-i18n-a84Zp9dV.js";import{n as c,r as l,t as u}from"./collapsible-C__hRcbA.js";import{t as d}from"./label-BzlNatZM.js";import{t as f}from"./AppSelect-BCexz4Ty.js";import{a as p,i as m,n as h,o as g,t as _}from"./popover-CQqAaq-c.js";import{i as v,n as y,r as b,t as x}from"./progress-C_G6VqQ_.js";import{t as S}from"./switch-Ci_hmu39.js";import{i as C,r as w,t as T}from"./tabs-B60r4YwO.js";import{t as E}from"./utils-C8uzG5AZ.js";import{t as D}from"./createLucideIcon-Cd-3GVxJ.js";import{t as O}from"./arrow-left-B8oVrQ2S.js";import{i as k,n as A,r as j,t as M}from"./zap-3wDb3GcJ.js";import{t as N}from"./arrow-up-DST6-qVQ.js";import{t as P}from"./bell-BjONAtgH.js";import{t as F}from"./bot-B3TaBp_T.js";import{t as ee}from"./check-2vYc6QaP.js";import{t as I}from"./chevron-down-CxtxIjiP.js";import{t as L}from"./chevron-right-C3t2Rckj.js";import{t as te}from"./circle-check-iEdCm3Pw.js";import{t as ne}from"./circle-x-Ba4QL7Ec.js";import{t as re}from"./code-xml-BrUXrBax.js";import{t as ie}from"./copy-DHmIFc52.js";import{t as R}from"./download-BCfIiuaL.js";import{t as ae}from"./file-code-corner-BnE1ljT0.js";import{t as oe}from"./file-Bllajneu.js";import{t as se}from"./grip-vertical-B__LYT0s.js";import{t as z}from"./image-BY_c3FYU.js";import{t as ce}from"./loader-circle-BOwQzHB-.js";import{t as le}from"./message-circle-D-XrK6Ft.js";import{t as ue}from"./paperclip-BCXrwYpb.js";import{t as B}from"./pencil-U08v_vV9.js";import{t as V}from"./play-DNDjDNGn.js";import{t as de}from"./plus-fQbSqB1n.js";import{t as H}from"./refresh-cw-TbWxTY4K.js";import{t as fe}from"./rocket-BgLSjoHY.js";import{t as pe}from"./search-D0mqDaf_.js";import{t as me}from"./send-Cj-W03w_.js";import{t as he}from"./server-BgNvmqwJ.js";import{t as ge}from"./settings-2-CXJjXJS9.js";import{t as _e}from"./square-bHHVTT3G.js";import{t as ve}from"./trash-2-CNrPOoPR.js";import{t as ye}from"./triangle-alert-CE1q54ci.js";import{t as be}from"./x-07u4-129.js";import{i as U,n as W,o as xe,t as Se}from"./http-Be2GB6DH.js";import{t as G}from"./api-YI8_cHpR.js";import{t as K}from"./button-CQA36izu.js";import{t as Ce}from"./useQuery-D3P5wO_Z.js";import{n as we}from"./QueryClientProvider-CHJtxoX1.js";import{n as Te,t as Ee}from"./alert-QoPGoIY6.js";import{a as De,c as Oe,i as ke,o as Ae,r as je,s as Me,t as Ne}from"./dialog-D-ER2p-D.js";import{t as q}from"./input-CvjGYteF.js";import{t as J}from"./field-3bN8nouy.js";import{r as Pe}from"./format-BRFKAYMT.js";import{n as Fe,r as Ie,t as Le}from"./card-BdUpL1KB.js";import{a as Re,r as ze}from"./app-primitives-SxfoFmHc.js";import{a as Be,i as Ve,n as He,r as Ue,t as We}from"./sheet--Om3LZxh.js";import{t as Ge}from"./usePagePrimaryAction-CWPC0C_f.js";import{n as Ke,r as qe,t as Je}from"./browser-notifications-DBS0oXqN.js";import{a as Ye,c as Xe,i as Ze,n as Qe,o as $e,r as et,s as tt,t as nt}from"./sprite-engine-catalog-D1HQWa1X.js";import{t as rt}from"./textarea-bYCRTyEt.js";import{a as it,c as at,d as ot,f as st,i as ct,l as lt,n as ut,o as dt,r as ft,s as pt,t as mt,u as ht}from"./vendor-xyflow-hxQFvEHK.js";import{n as gt,o as _t}from"./routes-C4kwUiVG.js";var vt=D(`file-up`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),yt=D(`film`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M3 7.5h4`,key:`zfgn84`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 16.5h4`,key:`1230mu`}],[`path`,{d:`M17 3v18`,key:`in4fa5`}],[`path`,{d:`M17 7.5h4`,key:`myr1c1`}],[`path`,{d:`M17 16.5h4`,key:`go4c1d`}]]),bt=D(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),xt=D(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Y=e(i(),1),St=Object.freeze([`media-input`,`media-background`,`media-inpaint`,`media-generate`,`media-frames`,`media-transform`,`media-preview`,`media-export`]);function Ct(e){return typeof e==`string`&&St.some(t=>t===e)}var X=a(),wt=({className:e,...t})=>(0,X.jsx)(ft,{className:E(`gap-px overflow-hidden rounded-md border bg-card p-1 shadow-none!`,`[&>button]:rounded-md [&>button]:border-none! [&>button]:bg-transparent! [&>button]:hover:bg-secondary!`,e),...t}),Tt=[`trigger`,`prompt`,`skill`,`file`,`mcp`,`notification`,`condition`,`parallel`,`approval`,...St];function Et({data:e,selected:t}){return(0,X.jsxs)(`div`,{className:E(`flow-node relative flex w-40 min-h-16 cursor-grab flex-col justify-center gap-1 rounded-xl border border-border bg-card px-3 py-2.5 text-left shadow-sm transition-shadow [&_small]:text-[11px] [&_small]:font-normal [&_small]:text-muted-foreground [&_strong]:text-[13px] [&_strong]:font-medium [&.active]:border-primary [&.active]:ring-2 [&.active]:ring-[var(--brand-blue-border)] [&.type-condition]:border-amber-500/40 [&.type-parallel]:border-violet-500/40 [&.type-approval]:border-emerald-500/40 [&.compact]:w-28 [&.compact]:min-h-10 [&.compact]:px-2 [&.compact]:py-1`,`type-${e.kind}`,t&&`active`,e.compact&&`compact`),children:[!e.compact&&e.kind!==`trigger`&&(0,X.jsx)(ct,{id:`input`,className:`flow-port after:absolute after:[content:''] after:inset-[-8px] absolute z-[3] w-[12px] h-[12px] [border:2px_solid_var(--solid)] rounded-[50%] bg-[var(--text)] [cursor:crosshair] input [.flow-port&]:top-[50%] [.flow-port&]:left-[-7px] [.flow-port&]:[transform:translateY(-50%)]`,type:`target`,position:st.Left,title:e.inputLabel,"aria-label":e.inputLabel}),!e.compact&&e.kind===`condition`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ct,{id:`true`,className:`flow-port after:absolute after:[content:''] after:inset-[-8px] absolute z-[3] w-[12px] h-[12px] [border:2px_solid_var(--solid)] rounded-[50%] bg-[var(--text)] [cursor:crosshair] output [.flow-port&]:top-[50%] [.flow-port&]:right-[-7px] [.flow-port&]:[transform:translateY(-50%)] condition-true`,type:`source`,position:st.Right,title:`true`,"aria-label":`true`}),(0,X.jsx)(ct,{id:`false`,className:`flow-port after:absolute after:[content:''] after:inset-[-8px] absolute z-[3] w-[12px] h-[12px] [border:2px_solid_var(--solid)] rounded-[50%] bg-[var(--text)] [cursor:crosshair] output [.flow-port&]:top-[50%] [.flow-port&]:right-[-7px] [.flow-port&]:[transform:translateY(-50%)] condition-false`,type:`source`,position:st.Bottom,title:`false`,"aria-label":`false`})]}):!e.compact&&(0,X.jsx)(ct,{id:`output`,className:`flow-port after:absolute after:[content:''] after:inset-[-8px] absolute z-[3] w-[12px] h-[12px] [border:2px_solid_var(--solid)] rounded-[50%] bg-[var(--text)] [cursor:crosshair] output [.flow-port&]:top-[50%] [.flow-port&]:right-[-7px] [.flow-port&]:[transform:translateY(-50%)]`,type:`source`,position:st.Right,title:e.outputLabel,"aria-label":e.outputLabel}),(0,X.jsx)(`small`,{children:e.typeLabel}),(0,X.jsx)(`strong`,{children:e.label})]})}var Dt={workflow:Et};function Ot(e){return typeof e==`string`&&Tt.includes(e)}function kt(e){return e.data.kind===`condition`?`var(--warning-strong)`:e.data.kind===`parallel`?`var(--workflow-violet)`:e.data.kind===`approval`?`var(--success)`:e.data.kind===`notification`?`var(--notification-border)`:`var(--star-strong)`}function At({nodes:e,edges:t,selectedNodeId:n,selectedEdgeId:r,hint:i,inputLabel:a,outputLabel:o,nodeTypeLabel:s,onAddNode:c,onConnect:l,onMoveNode:u,onSelectNode:d,onSelectEdge:f,onClearSelection:p,onDeleteNodes:m,onDeleteEdges:h}){let{screenToFlowPosition:g}=lt(),_=(0,Y.useMemo)(()=>e.map(e=>({id:e.id,type:`workflow`,position:{x:e.x,y:e.y},selected:e.id===n,data:{kind:e.kind,label:e.label,typeLabel:s(e.kind),inputLabel:a,outputLabel:o}})),[a,s,e,o,n]),v=(0,Y.useRef)(new Set),y=(0,Y.useRef)(new Map),b=(0,Y.useRef)(null),[x,S,C]=at(_);(0,Y.useEffect)(()=>{S(e=>{let t=new Map(e.map(e=>[e.id,e])),n=e.length!==_.length,r=_.map(e=>{let r=t.get(e.id);if(!r)return n=!0,e;let i=v.current.has(e.id)?r.position:e.position,a=r.data.kind===e.data.kind&&r.data.label===e.data.label&&r.data.typeLabel===e.data.typeLabel&&r.data.inputLabel===e.data.inputLabel&&r.data.outputLabel===e.data.outputLabel&&r.data.compact===e.data.compact;return i.x===r.position.x&&i.y===r.position.y&&r.selected===e.selected&&a?r:(n=!0,{...r,position:i,selected:e.selected,data:e.data})});return n?r:e})},[_,S]);let w=(0,Y.useCallback)(()=>{b.current=null,y.current.forEach((e,t)=>u(t,e)),y.current.clear()},[u]),T=(0,Y.useCallback)((e,t)=>{y.current.set(e,t),b.current??=requestAnimationFrame(w)},[w]);(0,Y.useEffect)(()=>()=>{b.current!==null&&cancelAnimationFrame(b.current)},[]);let E=(0,Y.useMemo)(()=>t.map(e=>({id:e.id,source:e.source,sourceHandle:e.sourcePort,target:e.target,targetHandle:e.targetPort,selected:e.id===r,markerEnd:{type:ot.ArrowClosed,width:16,height:16,color:`var(--canvas-edge)`},style:{stroke:`var(--canvas-edge)`,strokeWidth:2}})),[t,r]),D=(0,Y.useCallback)(e=>{!e.source||!e.target||l(e.source,e.target,e.sourceHandle||`output`)},[l]),O=(0,Y.useCallback)(e=>{e.preventDefault(),e.dataTransfer.dropEffect=`move`},[]),k=(0,Y.useCallback)(e=>{e.preventDefault();let t={};try{t=JSON.parse(e.dataTransfer.getData(`text/plain`)||`{}`)}catch{return}if(!Ot(t.kind))return;let n=g({x:e.clientX,y:e.clientY});c(t.kind,typeof t.label==`string`?t.label:s(t.kind),n)},[s,c,g]);return(0,X.jsxs)(`div`,{className:`workflow-react-flow absolute inset-0`,children:[(0,X.jsxs)(pt,{nodes:x,edges:E,nodeTypes:Dt,onNodesChange:C,connectionMode:ht.Strict,deleteKeyCode:[`Backspace`,`Delete`],fitView:!0,fitViewOptions:{padding:.18,minZoom:.6,maxZoom:1,nodes:x.length>8?x.slice(0,3).map(({id:e})=>({id:e})):void 0},minZoom:.15,maxZoom:1.8,snapToGrid:!0,snapGrid:[20,20],panOnDrag:!0,zoomOnDoubleClick:!1,onConnect:D,onNodeClick:(e,t)=>d(t.id),onEdgeClick:(e,t)=>f(t.id),onPaneClick:p,onNodeDragStart:(e,t)=>v.current.add(t.id),onNodeDrag:(e,t)=>T(t.id,t.position),onNodeDragStop:(e,t)=>{v.current.delete(t.id),y.current.delete(t.id),u(t.id,t.position)},onNodesDelete:e=>m(e.map(e=>e.id)),onEdgesDelete:e=>h(e.map(e=>e.id)),onDragOver:O,onDrop:k,children:[(0,X.jsx)(mt,{variant:ut.Dots,gap:20,size:1.2,color:`var(--canvas-grid)`}),(0,X.jsx)(it,{className:`workflow-react-flow-minimap !m-3 !h-24 !w-36 overflow-hidden rounded-lg border border-border !bg-card shadow-sm [&_svg]:h-full [&_svg]:w-full @max-[640px]/workflow:hidden`,nodeColor:kt,nodeStrokeWidth:3,pannable:!0,zoomable:!0}),(0,X.jsx)(wt,{position:`top-left`,showInteractive:!1})]}),(0,X.jsx)(`div`,{className:`pointer-events-none absolute bottom-3 left-3 z-[5] hidden max-w-[calc(100%-180px)] rounded-md bg-card px-2 py-1 text-[11px] leading-relaxed text-muted-foreground @min-[640px]/workflow:block`,children:i})]})}function jt(e){return(0,X.jsx)(dt,{children:(0,X.jsx)(At,{...e})})}function Mt(e){return new Map(e.map((e,t)=>[e.id,t]))}function Nt(e=[],t){return e.slice(1).map((n,r)=>{let i=e[r];return{id:t?.(r,i.id,n.id)||`edge-${r}-${i.id}-${n.id}`,source:i.id,sourcePort:`output`,target:n.id,targetPort:`input`}})}function Pt(e=[],t=[]){let n=e.filter(e=>e.enabled!==!1),r=new Set(n.map(e=>e.id)),i=t.filter(e=>r.has(e.source)&&r.has(e.target)),a=new Map(n.map(e=>[e.id,[]])),o=new Map(n.map(e=>[e.id,[]])),s=new Map(n.map(e=>[e.id,0])),c=Mt(n);for(let e of i)a.get(e.target)?.push(e),o.get(e.source)?.push(e),s.set(e.target,(s.get(e.target)||0)+1);let l=n.filter(e=>s.get(e.id)===0),u=[];for(;l.length;){l.sort((e,t)=>c.get(e.id)-c.get(t.id));let e=l.shift();u.push(e);for(let t of o.get(e.id)||[]){let e=(s.get(t.target)||0)-1;s.set(t.target,e),e===0&&l.push(n.find(e=>e.id===t.target))}}let d=n.filter(e=>(a.get(e.id)||[]).length===0),f=d.find(e=>e.kind===`trigger`)||d[0];return{nodes:n,edges:i,incoming:a,outgoing:o,order:u,roots:d,unconnected:n.filter(e=>e.id!==f?.id&&(a.get(e.id)||[]).length===0),invalidTriggerTargets:n.filter(e=>e.kind===`trigger`&&(a.get(e.id)||[]).length>0),hasCycle:u.length!==n.length}}function Ft(e,t,n,r,i=`output`){return Pt(e,[...t,{id:`__candidate__`,source:n,sourcePort:i,target:r,targetPort:`input`}]).hasCycle}var It={trigger:`触发器`,prompt:`任务`,skill:`Skill`,file:`文件`,mcp:`MCP`,notification:`通知`,condition:`判断`,parallel:`并行`,approval:`审批`,"media-input":`图片输入`,"media-inpaint":`区域修补`,"media-background":`去背景`,"media-generate":`动作生成`,"media-frames":`拆分帧`,"media-transform":`帧处理`,"media-preview":`动画预览`,"media-export":`图集输出`},Lt=[{kind:`trigger`,label:`手动触发`,Icon:M},{kind:`prompt`,label:`运行 Prompt`,Icon:F},{kind:`skill`,label:`调用 Skill`,Icon:v},{kind:`file`,label:`读写文件`,Icon:ae},{kind:`mcp`,label:`调用 MCP`,Icon:he},{kind:`condition`,label:`条件分支`,Icon:b},{kind:`parallel`,label:`并行汇合`,Icon:j},{kind:`approval`,label:`人工审批`,Icon:te},{kind:`notification`,label:`发送通知`,Icon:P},{kind:`media-inpaint`,label:`区域修补`,Icon:z},{kind:`media-input`,label:`图片输入`,Icon:z},{kind:`media-background`,label:`去背景`,Icon:z},{kind:`media-generate`,label:`动作生成`,Icon:z},{kind:`media-frames`,label:`拆分帧`,Icon:z},{kind:`media-transform`,label:`帧处理`,Icon:z},{kind:`media-preview`,label:`动画预览`,Icon:z},{kind:`media-export`,label:`图集输出`,Icon:z}];function Rt(e,t){return t(e===`media-inpaint`?`workflows:imageNodes.inpaint`:e===`media-input`?`workflows:imageNodes.input`:e===`media-background`?`workflows:imageNodes.background`:e===`media-generate`?`workflows:imageNodes.generate`:e===`media-frames`?`workflows:imageNodes.frames`:e===`media-transform`?`workflows:imageNodes.transform`:e===`media-preview`?`workflows:imageNodes.preview`:e===`media-export`?`workflows:imageNodes.export`:e===`trigger`?`workflows:workflowsPage.triggerNode`:e===`skill`?`workflows:workflowsPage.skillNode`:e===`file`?`workflows:workflowsPage.fileNode`:e===`mcp`?`workflows:workflowsPage.mcpNode`:e===`notification`?`workflows:workflowsPage.notificationNode`:e===`condition`?`workflows:workflowsPage.conditionNode`:e===`parallel`?`workflows:workflowsPage.parallelNode`:e===`approval`?`workflows:workflowsPage.approvalNode`:`workflows:workflowsPage.task`)}function zt(e,t){return Ct(e)?Rt(e,t):t(e===`trigger`?`workflows:workflowsPage.manualTrigger`:e===`skill`?`workflows:workflowsPage.callSkill`:e===`file`?`workflows:workflowsPage.readWriteFiles`:e===`mcp`?`workflows:workflowsPage.callMcp`:e===`condition`?`workflows:workflowsPage.conditionBranch`:e===`parallel`?`workflows:workflowsPage.parallelJoin`:e===`approval`?`workflows:workflowsPage.humanApproval`:e===`notification`?`workflows:workflowsPage.sendNotification`:`workflows:workflowsPage.runPrompt`)}function Bt(e,t){return t(e===`sprite`?`workflows:imageNodes.templateName`:e===`pr-fix`?`workflows:workflowsPage.prFix`:e===`research`?`workflows:workflowsPage.research`:e===`report`?`workflows:workflowsPage.dailyWeeklyReport`:e===`asset`?`workflows:workflowsPage.assetGeneration`:e===`release`?`workflows:workflowsPage.releasePreparation`:`workflows:workflowsPage.codeReview`)}function Vt(e,t){return t(e===`sprite`?`workflows:imageNodes.templateDescription`:e===`pr-fix`?`workflows:workflowsPage.prFixDescription`:e===`research`?`workflows:workflowsPage.researchDescription`:e===`report`?`workflows:workflowsPage.reportDescription`:e===`asset`?`workflows:workflowsPage.assetDescription`:e===`release`?`workflows:workflowsPage.releaseDescription`:`workflows:workflowsPage.codeReviewDescription`)}function Z(e,t,n,r,i,a,o={}){return{id:e,kind:t,label:n,prompt:r,x:i,y:a,model:null,executionMode:`full-access`,retries:0,timeoutMinutes:20,failurePolicy:`stop`,enabled:!0,outputFormat:`text`,skillName:``,requestedToolNames:[],condition:{source:`previous`,operator:`exists`,value:``},approval:{message:``,timeoutMinutes:60},notification:{title:``,content:``},notificationTargets:[],...Ct(t)?{image:et()}:{},...o}}function Ht(e){return Nt(e,()=>crypto.randomUUID())}function Ut(e){return[{id:`input-task`,name:`task`,label:e?e(`workflows:inputs.task`):`本次任务`,description:e?e(`workflows:inputs.taskHint`):`描述这次运行需要完成的目标。`,type:`text`,required:!0,defaultValue:``},{id:`input-materials`,name:`materials`,label:e?e(`workflows:inputs.materials`):`参考材料`,description:e?e(`workflows:inputs.materialsHint`):`填写文件路径、链接、代码片段或需要处理的内容。`,type:`text`,required:!1,defaultValue:``},{id:`input-constraints`,name:`constraints`,label:e?e(`workflows:inputs.constraints`):`约束与输出要求`,description:e?e(`workflows:inputs.constraintsHint`):`说明范围、格式、禁止操作及验收条件。`,type:`text`,required:!1,defaultValue:``}]}function Wt(e){return`${e}\n\n本次任务:{{inputs.task}}\n参考材料:{{inputs.materials}}\n约束与输出要求:{{inputs.constraints}}\n以本次运行输入限定任务范围,节点只规定处理方法;不要把节点示例或工作流名称当作本次任务。`}var Gt=[{id:`code-review`,name:`代码审查`,description:`读取 diff → 运行测试 → 生成 review`,Icon:re,nodes:[Z(`review-trigger`,`trigger`,`手动触发`,``,65,45),Z(`review-diff`,`file`,`读取 diff`,`读取当前工作区的 git diff,识别改动范围与高风险文件。`,235,45),Z(`review-test`,`prompt`,`运行检查`,`运行适合当前项目的测试与 lint,记录失败原因。`,405,45),Z(`review-report`,`prompt`,`生成 review`,`结合 diff 和验证结果,输出按严重度排序的代码审查结论。`,235,180),Z(`review-notify`,`notification`,`发送结果`,``,405,180)]},{id:`pr-fix`,name:`PR 修复`,description:`定位失败 → 修改代码 → 回归测试`,Icon:b,nodes:[Z(`fix-trigger`,`trigger`,`手动触发`,``,65,45),Z(`fix-find`,`prompt`,`定位失败`,`检查项目状态与失败信息,定位最可能的根因。`,235,45),Z(`fix-code`,`prompt`,`修改代码`,`修复已定位的问题,保留用户已有改动,不执行破坏性命令。`,405,45),Z(`fix-test`,`prompt`,`回归测试`,`运行针对性测试和构建,确认修复没有引入回归。`,235,180),Z(`fix-notify`,`notification`,`通知结果`,``,405,180)]},{id:`research`,name:`资料调研`,description:`搜索资料 → 提取引用 → 点亮星忆`,Icon:pe,nodes:[Z(`research-trigger`,`trigger`,`手动输入`,``,65,45),Z(`research-search`,`prompt`,`搜索资料`,`围绕工作流描述中的主题检索项目内资料与可用信息源。`,235,45),Z(`research-summary`,`prompt`,`整理引用`,`整理关键结论、证据、限制和下一步建议。`,405,45),Z(`research-memory`,`prompt`,`保存星忆`,`把适合长期保留的结论写入 Agent 记忆。`,320,180)]},{id:`report`,name:`日报周报`,description:`汇总会话 → 生成摘要 → 渠道通知`,Icon:oe,nodes:[Z(`report-trigger`,`trigger`,`手动触发`,``,65,45),Z(`report-collect`,`prompt`,`汇总进展`,`汇总当前项目近期完成事项、风险与待办。`,235,45),Z(`report-write`,`prompt`,`生成报告`,`将汇总内容整理为清晰的日报或周报。`,405,45),Z(`report-notify`,`notification`,`渠道通知`,``,320,180)]},{id:`asset`,name:`资产生成`,description:`生成图片 → 存入资产库 → 通知验收`,Icon:z,nodes:[Z(`asset-trigger`,`trigger`,`手动输入`,``,65,45),Z(`asset-generate`,`prompt`,`生成视觉资产`,`根据工作流描述生成需要的视觉资产,并保存生成文件。`,235,45),Z(`asset-check`,`prompt`,`检查产物`,`检查生成资产是否完整、可访问并符合需求。`,405,45),Z(`asset-notify`,`notification`,`通知验收`,``,320,180)]},{id:`release`,name:`发布准备`,description:`版本检查 → changelog → 创建发布单`,Icon:fe,nodes:[Z(`release-trigger`,`trigger`,`手动触发`,``,65,45),Z(`release-check`,`prompt`,`版本检查`,`检查工作区、测试、构建和版本信息是否满足发布要求。`,235,45),Z(`release-log`,`prompt`,`生成 changelog`,`根据近期提交和改动生成 changelog 与发布说明。`,405,45),Z(`release-report`,`prompt`,`发布清单`,`生成最终发布检查清单并标记阻塞项。`,320,180)]}].map(e=>({...e,inputs:Ut(),nodes:e.nodes.map(e=>[`prompt`,`file`,`skill`,`mcp`].includes(e.kind)?{...e,prompt:Wt(e.prompt)}:e)}));function Kt(){let e=[Z(`sprite-trigger`,`trigger`,`手动触发`,``,0,180),Z(`sprite-source`,`media-input`,`参考图片`,``,180,180)],t=[{id:`sprite-input`,source:`sprite-trigger`,target:`sprite-source`,sourcePort:`output`,targetPort:`input`}];return[{id:`idle`,label:`待机呼吸`,prompt:`Subtle breathing idle cycle. Preserve the reference style; the feet stay planted.`},{id:`walk`,label:`走路`,prompt:`Walking cycle: alternating foot contact, passing pose and opposite contact. Keep the character in place.`},{id:`run`,label:`跑步`,prompt:`Running cycle: contact, compression, passing and flight. Preserve proportions and keep the character in place.`},{id:`attack`,label:`攻击`,prompt:`Attack sequence: anticipation, wind-up, strike and recovery. Use only the equipment visible in the reference.`}].forEach((n,r)=>{let i=r*140,a=[Z(`${n.id}-generate`,`media-generate`,n.label,`${n.prompt}\n{{inputs.task}}`,380,i,{image:et({action:n.id,frameCount:4,directions:[...Qe]})}),Z(`${n.id}-background`,`media-background`,`色键去背景`,``,560,i),Z(`${n.id}-frames`,`media-frames`,`拆分连续帧`,``,740,i),Z(`${n.id}-align`,`media-transform`,`裁边与脚底对齐`,``,920,i)];e.push(...a);let o=[`sprite-source`,...a.map(e=>e.id),`sprite-preview`];for(let e=1;e<o.length;e++)t.push({id:`${n.id}-edge-${e}`,source:o[e-1],target:o[e],sourcePort:`output`,targetPort:`input`})}),e.push(Z(`sprite-preview`,`media-preview`,`动画预览`,``,1100,180),Z(`sprite-export`,`media-export`,`输出精灵图集`,``,1280,180)),t.push({id:`sprite-output`,source:`sprite-preview`,target:`sprite-export`,sourcePort:`output`,targetPort:`input`}),{id:`sprite`,name:`游戏精灵图生成`,description:`参考图 → 分方向动作 → 去背景 → 拆帧对齐 → 动画预览 → 图集`,Icon:z,nodes:e,edges:t,inputs:[{id:`sprite-reference`,name:`reference`,type:`image`,required:!0,label:`角色参考图`,description:`上传图片并保留原图风格。`,defaultValue:null},{id:`sprite-task`,name:`task`,type:`text`,required:!1,label:`角色与动作要求`,description:`本次运行的角色特征、动作及其他要求。`,defaultValue:``}]}}Gt.push(Kt());function qt(e){return e.nodes.reduce((e,t)=>e+(t.enabled&&t.kind===`media-generate`?et(t.image).directions.length:0),0)}function Jt(e=``,t){let n=[Z(crypto.randomUUID(),`trigger`,`手动触发`,``,65,45),Z(crypto.randomUUID(),`prompt`,`运行 Prompt`,Wt(`按本次输入完成任务,结合材料执行所需步骤,验证产物并报告结果。`),235,45)];return{id:``,name:`未命名工作流`,description:``,status:`draft`,revision:1,cwd:e,model:null,inputs:Ut(t),tags:[],visibility:`private`,notifications:[],nodes:n,edges:Ht(n)}}function Yt(e,t){if(e.kind===`media-generate`){if(e.image?.action===`idle`)return t(`workflows:imageNodes.idle`);if(e.image?.action===`walk`)return t(`workflows:imageNodes.walk`);if(e.image?.action===`run`)return t(`workflows:imageNodes.run`);if(e.image?.action===`attack`)return t(`workflows:imageNodes.attack`)}return zt(e.kind,t)}function Xt(e,t=``,n){let r=e.nodes.map(t=>({...structuredClone(t),...e.id===`sprite`&&n?{label:Yt(t,n)}:{},id:crypto.randomUUID()})),i=Gt.includes(e)?Ut(n):[],a=new Map(e.nodes.map((e,t)=>[e.id,r[t].id]));return{...Jt(t,n),name:n&&Gt.includes(e)?Bt(e.id,n):e.name,description:n&&Gt.includes(e)?Vt(e.id,n):e.description,inputs:e.inputs.map(t=>{let r=i.find(e=>e.name===t.name);return{...structuredClone(t),...r?{label:r.label,description:r.description}:{},...e.id===`sprite`&&t.name===`reference`&&n?{label:n(`workflows:imageNodes.reference`),description:n(`workflows:imageNodes.referenceHint`)}:{},id:crypto.randomUUID()}}),nodes:r,edges:e.edges?e.edges.map(e=>({...e,id:crypto.randomUUID(),source:a.get(e.source)??``,target:a.get(e.target)??``})):Ht(r)}}function Zt({nodeCount:e,t,onAddNode:n}){let[r,i]=(0,Y.useState)(!1),[a,o]=(0,Y.useState)(``),s=[{label:t(`workflows:editor.flowNodes`),match:e=>[`trigger`,`condition`,`parallel`,`approval`].includes(e)},{label:t(`workflows:editor.agentNodes`),match:e=>[`prompt`,`skill`,`file`,`mcp`,`notification`].includes(e)},{label:t(`workflows:editor.imageNodes`),match:Ct}],c=Lt.filter(({kind:e})=>zt(e,t).toLocaleLowerCase().includes(a.trim().toLocaleLowerCase()));return(0,X.jsxs)(_,{open:r,onOpenChange:i,children:[(0,X.jsx)(m,{asChild:!0,children:(0,X.jsxs)(K,{variant:`outline`,size:`sm`,children:[(0,X.jsx)(de,{}),t(`workflows:editor.addNode`)]})}),(0,X.jsxs)(h,{align:`end`,className:`w-72 max-w-[calc(100vw-2rem)] p-2`,"aria-label":t(`workflows:workflowsPage.nodeLibrary`),children:[(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(pe,{className:`pointer-events-none absolute left-2.5 top-2.5 size-4 text-muted-foreground`}),(0,X.jsx)(q,{value:a,onChange:e=>o(e.target.value),className:`pl-8`,placeholder:t(`workflows:editor.searchNodes`),"aria-label":t(`workflows:editor.searchNodes`)})]}),(0,X.jsxs)(`div`,{className:`node-library max-h-[min(420px,60vh)] overflow-y-auto overscroll-contain supports-[height:100dvh]:max-h-[min(420px,60dvh)]`,children:[s.map(r=>{let a=c.filter(({kind:e})=>r.match(e));return a.length===0?null:(0,X.jsxs)(`section`,{className:`py-1`,children:[(0,X.jsx)(`h3`,{className:`px-2 py-1.5 text-xs font-medium text-muted-foreground`,children:r.label}),a.map(({kind:r,Icon:a})=>(0,X.jsxs)(`button`,{type:`button`,draggable:!0,className:`flex min-h-9 w-full items-center gap-2 rounded-md px-2 text-left text-sm hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,onClick:()=>{n(r,zt(r,t),{x:160+e%4*180,y:100+Math.floor(e/4)*100}),i(!1)},onDragStart:e=>e.dataTransfer.setData(`text/plain`,JSON.stringify({kind:r,label:zt(r,t)})),onDragEnd:()=>i(!1),children:[(0,X.jsx)(a,{className:`size-4 shrink-0 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`flex-1`,children:zt(r,t)}),(0,X.jsx)(se,{className:`size-3.5 text-muted-foreground`,"aria-hidden":`true`})]},r))]},r.label)}),c.length===0&&(0,X.jsx)(`p`,{className:`p-3 text-xs text-muted-foreground`,children:t(`workflows:editor.noMatchingNodes`)})]})]})]})}function Qt({draft:e,selectedNodeId:t,selectedEdgeId:n,t:r,onAddNode:i,onConnect:a,onMoveNode:o,onSelectNode:s,onSelectEdge:c,onClearSelection:l,onDeleteNodes:u,onDeleteEdges:d}){return(0,X.jsx)(`section`,{className:`builder-canvas relative h-full min-h-0 min-w-0 overflow-hidden bg-[var(--canvas-bg)]`,"aria-label":r(`workflows:editor.canvas`),children:(0,X.jsx)(jt,{nodes:e.nodes,edges:e.edges,selectedNodeId:t,selectedEdgeId:n,hint:r(`workflows:workflowsPage.dragFromANodeOutputToTheTargetInputToConnectThem`),inputLabel:r(`workflows:workflowsPage.inputPort`),outputLabel:r(`workflows:workflowsPage.outputPort`),nodeTypeLabel:e=>Rt(e,r),onAddNode:i,onConnect:a,onMoveNode:o,onSelectNode:s,onSelectEdge:c,onClearSelection:l,onDeleteNodes:u,onDeleteEdges:d})})}function $t(e){if(e.size>134217728)throw new xe(`Workflow package exceeds 128 MiB`,{kind:`protocol`,data:{code:`workflow_bundle_too_large`}})}function en(e){return e instanceof xe&&e.data?.code===`workflow_bundle_too_large`}function tn(e,t){return Se(`/api/workflows/${encodeURIComponent(e)}/bundle`,{signal:t,timeout:12e4})}async function nn(e,t){return $t(e),W(`/api/workflows/import-bundle`,{method:`POST`,data:e,signal:t,timeout:12e4,parse:e=>{if(!e||typeof e!=`object`||!(`workflow`in e))throw U();let t=e.workflow;if(!t||typeof t!=`object`||!(`id`in t)||typeof t.id!=`string`)throw U()}})}var rn={workflows:[],runs:[],limits:{maxConcurrent:4,running:0},notificationTargets:{browser:{enabled:!1},feishu:{enabled:!1},weixin:{enabled:!1},qq:{enabled:!1},telegram:{enabled:!1}},models:[],skills:[],cwd:``};function Q(e){let t=e instanceof xe?e.data?.code:typeof e==`string`?e:e&&typeof e==`object`&&`code`in e?e.code:``;return t===`workflow_image_source_stale`?o(`workflows:imageNodes.sourceStale`):t===`workflow_image_source_required`?o(`workflows:imageNodes.sourceRequired`):t===`workflow_image_engine_missing`?o(`workflows:imageNodes.engineMissing`):t===`workflow_image_generation_failed`?o(`workflows:imageNodes.generationFailed`):t===`workflow_image_too_large`?o(`workflows:imageNodes.tooLarge`):t===`workflow_image_timeout`?o(`workflows:imageNodes.timeout`):typeof t==`string`&&t.startsWith(`workflow_image_`)?o(`workflows:imageNodes.invalidOutput`):e instanceof Error?e.message:String(e)}function an({notify:e,requestConfirm:t,query:n}){let{t:r}=s(),[i,a]=(0,Y.useState)(rn),[o,c]=(0,Y.useState)(`all`),[l,u]=(0,Y.useState)(!0),[d,f]=(0,Y.useState)(``),[p,m]=(0,Y.useState)(``),h=(0,Y.useRef)(null);(0,Y.useEffect)(()=>()=>h.current?.abort(),[]);let g=(0,Y.useCallback)(async()=>{try{a(await G(`/api/workflows`)),m(``)}catch(e){m(Q(e))}finally{u(!1)}},[]);(0,Y.useEffect)(()=>{g()},[g]),(0,Y.useEffect)(()=>{let e=window.setInterval(()=>{g()},i.limits.running?1500:8e3);return()=>window.clearInterval(e)},[i.limits.running,g]);let _=(0,Y.useCallback)(e=>i.runs.filter(t=>t.workflowId===e).sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt))[0],[i.runs]);return{data:i,filter:o,setFilter:c,loading:l,busyId:d,error:p,visibleWorkflows:(0,Y.useMemo)(()=>i.workflows.filter(e=>{let t=_(e.id);return`${e.name} ${e.description}`.toLowerCase().includes(n.toLowerCase())?o===`running`?t?.status===`running`:o===`failed`?t?.status===`failed`:o===`draft`?e.status===`draft`:o!==`presets`:!1}),[i.workflows,o,_,n]),latestRun:_,runWorkflow:(0,Y.useCallback)(async(t,n={})=>{f(t.id),m(``);try{return await G(`/api/workflows/${encodeURIComponent(t.id)}/run`,{method:`POST`,body:JSON.stringify({inputs:n})}),await g(),e(r(`workflows:workflowsPage.workflowStarted`)),!0}catch(t){let n=Q(t);return m(n),e(n,`error`),!1}finally{f(``)}},[g,e,r]),stopRun:(0,Y.useCallback)(async t=>{f(t.id),m(``);try{await G(`/api/workflow-runs/${encodeURIComponent(t.id)}/stop`,{method:`POST`,body:`{}`}),await g(),e(r(`workflows:workflowsPage.stoppingWorkflow`),`info`)}catch(t){let n=Q(t);m(n),e(n,`error`)}finally{f(``)}},[g,e,r]),retryRun:(0,Y.useCallback)(async t=>{f(t.id);try{await G(`/api/workflow-runs/${encodeURIComponent(t.id)}/retry`,{method:`POST`,body:`{}`}),await g(),e(r(`workflows:workflowsPage.workflowStarted`))}catch(t){let n=Q(t);m(n),e(n,`error`)}finally{f(``)}},[g,e,r]),resolveApproval:(0,Y.useCallback)(async(t,n,r)=>{f(n);try{await G(`/api/workflow-runs/${encodeURIComponent(t.id)}/approvals/${encodeURIComponent(n)}`,{method:`POST`,body:JSON.stringify({approved:r})}),await g()}catch(t){let n=Q(t);m(n),e(n,`error`)}finally{f(``)}},[g,e]),duplicateWorkflow:(0,Y.useCallback)(async t=>{f(t.id);try{await G(`/api/workflows/${encodeURIComponent(t.id)}/duplicate`,{method:`POST`,body:`{}`}),await g(),e(r(`workflows:workflowsPage.workflowDuplicated`))}catch(t){let n=Q(t);m(n),e(n,`error`)}finally{f(``)}},[g,e,r]),exportWorkflow:(0,Y.useCallback)(async t=>{if(h.current)return;let n=new AbortController;h.current=n,f(t.id);try{let e=await tn(t.id,n.signal);if(n.signal.aborted)return;let r=URL.createObjectURL(e),i=document.createElement(`a`);i.href=r,i.download=`${t.name.replace(/[\\/:*?"<>|]/g,`-`)}.pisper-workflow.zip`,i.click(),window.setTimeout(()=>URL.revokeObjectURL(r),1e3)}catch{n.signal.aborted||e(r(`workflows:workflowsPage.packageFailed`),`error`)}finally{h.current=null,n.signal.aborted||f(``)}},[e,r]),importWorkflow:(0,Y.useCallback)(async t=>{if(h.current)return;let n=new AbortController;h.current=n,f(`import`);try{if(await nn(t,n.signal),n.signal.aborted||(await g(),n.signal.aborted))return;e(r(`workflows:workflowsPage.workflowImported`))}catch(t){if(n.signal.aborted)return;let i=en(t)?r(`workflows:workflowsPage.packageTooLarge`):r(`workflows:workflowsPage.packageFailed`);m(i),e(i,`error`)}finally{h.current=null,n.signal.aborted||f(``)}},[g,e,r]),removeWorkflow:(0,Y.useCallback)(async n=>{if(await t?.({title:r(`workflows:workflowsPage.deleteWorkflow`),message:r(`workflows:workflowsPage.deleteWorkflowNameAndItsRunHistory`,{name:n.name}),confirmLabel:r(`workflows:workflowsPage.delete`),tone:`danger`})){f(n.id);try{await G(`/api/workflows/${encodeURIComponent(n.id)}`,{method:`DELETE`}),await g(),e(r(`workflows:workflowsPage.workflowDeleted`))}catch(t){let n=Q(t);m(n),e(n,`error`)}finally{f(``)}}},[g,e,t,r])}}function on(e){let t=Math.max(0,Math.round((Number(e)||0)/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function sn(e,t){return t(e===`running`?`workflows:workflowsPage.running`:e===`waiting_approval`?`workflows:workflowsPage.waitingApproval`:e===`completed`?`workflows:workflowsPage.completed`:e===`failed`?`workflows:workflowsPage.failed`:e===`cancelled`?`workflows:workflowsPage.stopped`:e===`interrupted`?`workflows:workflowsPage.interrupted`:`workflows:workflowsPage.draft`)}function cn({value:e,onChange:t,t:n}){return(0,X.jsx)(T,{value:e,onValueChange:e=>t(e),children:(0,X.jsxs)(w,{className:`[&_[data-slot='tabs-trigger']]:min-w-[56px] [&_[data-slot='tabs-trigger']]:flex-none [&_[data-slot='tabs-trigger']]:[padding-inline:12px] [&_[data-slot='tabs-trigger']]:text-[12px] [&_[data-slot='tabs-trigger']]:after:hidden w-fit max-w-full justify-start overflow-x-auto overflow-y-hidden [scrollbar-width:none]! [&::-webkit-scrollbar]:hidden`,children:[(0,X.jsx)(C,{value:`workflows`,children:n(`workflows:workflowsPage.workflows`)}),(0,X.jsx)(C,{value:`runs`,children:n(`workflows:workflowsPage.runHistory`)}),(0,X.jsx)(C,{value:`templates`,children:n(`workflows:workflowsPage.templates`)})]})})}function ln({workflows:e,runs:t,busyId:n,language:r,t:i,onRun:a,onEdit:o,onDuplicate:s,onExport:c,onImport:l,onDelete:u}){let d=(0,Y.useRef)(null),f=e=>t.filter(t=>t.workflowId===e).sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt))[0];return(0,X.jsx)(Le,{size:`sm`,className:`workflow-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] [border:1px_solid_var(--stroke)] rounded-[var(--r-xs)] bg-[var(--panel)] text-[var(--text)] shadow-[0_1px_2px_var(--sh-edge),0_14px_32px_-24px_var(--shadow)] workflow-assets-panel overflow-hidden gap-0 py-0`,children:(0,X.jsxs)(Fe,{className:`p-0`,children:[(0,X.jsxs)(`div`,{className:`workflow-table-head [&_>_div]:flex [&_>_div]:min-w-0 [&_>_div]:flex-col [&_>_div]:gap-[2px] [&_small]:text-[var(--text-muted)] [&_small]:text-[11px] flex min-h-[58px] items-center justify-between gap-[12px] [border-bottom:1px_solid_var(--stroke-soft)] [padding:10px_14px]`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(Ie,{className:`workflow-section-title [.selection-list_&]:mb-[8px] [.node-library_&]:mb-[8px] text-[var(--text-soft)] text-[13px] font-[700] leading-[1.4]`,children:i(`workflows:workflowsPage.workflows`)}),(0,X.jsx)(`small`,{children:i(`workflows:workflowsPage.countWorkflows`,{count:e.length})})]}),(0,X.jsxs)(K,{size:`sm`,variant:`outline`,onClick:()=>d.current?.click(),children:[(0,X.jsx)(vt,{"data-icon":`inline-start`}),i(`workflows:workflowsPage.import`)]}),(0,X.jsx)(`input`,{ref:d,className:`sr-only`,type:`file`,accept:`application/zip,.zip`,onChange:e=>{let t=e.target.files?.[0];e.currentTarget.value=``,t&&l(t)}})]}),e.length?(0,X.jsx)(`div`,{className:`flex flex-col`,children:e.map(e=>{let t=f(e.id),l=[`running`,`waiting_approval`].includes(t?.status||``);return(0,X.jsxs)(`div`,{className:`workflow-asset-row first:[border-top:0] max-[650px]:grid-cols-[minmax(0,1fr)_92px] max-[650px]:gap-[8px_12px] max-[650px]:[padding-block:10px] grid min-h-[62px] grid-cols-[minmax(220px,1fr)_110px_150px_auto] items-center gap-[14px] [border-top:1px_solid_var(--stroke-soft)] [padding:8px_12px_8px_14px]`,children:[(0,X.jsxs)(`button`,{className:`workflow-asset-main [&_strong]:overflow-hidden [&_strong]:text-ellipsis [&_strong]:whitespace-nowrap [&_small]:overflow-hidden [&_small]:text-ellipsis [&_small]:whitespace-nowrap [&_strong]:text-[13px] [&_small]:text-[var(--text-muted)] [&_small]:text-[11px] flex min-w-0 flex-col gap-[3px] border-0 bg-transparent text-[var(--text)] text-left cursor-pointer`,onClick:()=>o(e.id),children:[(0,X.jsx)(`strong`,{children:e.name}),(0,X.jsx)(`small`,{children:e.description||e.cwd})]}),(0,X.jsxs)(`span`,{className:`workflow-state [&_small]:overflow-hidden [&_small]:text-[var(--text-muted)] [&_small]:text-[10px] [&_small]:font-[400] [&_small]:text-ellipsis [&_small]:whitespace-nowrap [&.running]:text-[var(--warning-strong)] [&.waiting_approval]:text-[var(--warning-strong)] [&.completed]:text-[var(--success)] [&.published]:text-[var(--success)] [&.failed]:text-[var(--danger)] max-[650px]:[.workflow-asset-row_>_&:nth-of-type(2)]:[grid-column:1] flex min-w-0 flex-col gap-[2px] text-[var(--text-secondary)] text-[11px] font-[600] ${e.status}`,children:[e.status===`published`?i(`workflows:workflowsPage.published`):i(`workflows:workflowsPage.draft`),(0,X.jsxs)(`small`,{children:[`v`,e.revision]})]}),(0,X.jsxs)(`span`,{className:`workflow-state [&_small]:overflow-hidden [&_small]:text-[var(--text-muted)] [&_small]:text-[10px] [&_small]:font-[400] [&_small]:text-ellipsis [&_small]:whitespace-nowrap [&.running]:text-[var(--warning-strong)] [&.waiting_approval]:text-[var(--warning-strong)] [&.completed]:text-[var(--success)] [&.published]:text-[var(--success)] [&.failed]:text-[var(--danger)] max-[650px]:[.workflow-asset-row_>_&:nth-of-type(2)]:[grid-column:1] flex min-w-0 flex-col gap-[2px] text-[var(--text-secondary)] text-[11px] font-[600] ${t?.status||`idle`}`,children:[t?sn(t.status,i):i(`workflows:workflowsPage.neverRun`),(0,X.jsx)(`small`,{children:t?Pe(t.startedAt,r):e.visibility})]}),(0,X.jsxs)(`div`,{className:`workflow-row-actions max-[650px]:[grid-column:2] max-[650px]:[grid-row:1/3] max-[650px]:flex-wrap flex items-center justify-end gap-[3px]`,children:[(0,X.jsx)(K,{size:`icon-xs`,variant:l?`secondary`:`outline`,disabled:l||n===e.id,title:i(`workflows:workflowsPage.run`),"aria-label":`${i(`workflows:workflowsPage.run`)}: ${e.name}`,onClick:()=>a(e),children:n===e.id?(0,X.jsx)(H,{className:`animate-spin`}):(0,X.jsx)(V,{fill:`currentColor`})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,title:i(`workflows:workflowsPage.edit`),"aria-label":`${i(`workflows:workflowsPage.edit`)}: ${e.name}`,onClick:()=>o(e.id),children:(0,X.jsx)(B,{})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,title:i(`workflows:workflowsPage.duplicateWorkflow`),"aria-label":`${i(`workflows:workflowsPage.duplicateWorkflow`)}: ${e.name}`,onClick:()=>s(e),children:(0,X.jsx)(ie,{})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,title:i(`workflows:workflowsPage.export`),"aria-label":`${i(`workflows:workflowsPage.export`)}: ${e.name}`,onClick:()=>c(e),children:(0,X.jsx)(R,{})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,disabled:l,title:i(`workflows:workflowsPage.delete`),"aria-label":`${i(`workflows:workflowsPage.delete`)}: ${e.name}`,onClick:()=>u(e),children:(0,X.jsx)(ve,{})})]})]},e.id)})}):(0,X.jsx)(`div`,{className:`channel-route-empty [&_strong]:mt-[9px] [&_strong]:text-[var(--text)] [&_strong]:text-[12px] [&_span]:mt-[4px] [&_span]:text-[13px] [&.compact]:min-h-[110px] [.workflow-assets-panel_&]:min-h-[150px] [.workflow-assets-panel_&]:border-0 [.workflow-assets-panel_&]:bg-transparent grid min-h-[185px] place-content-center justify-items-center text-[var(--text-muted)] text-center compact`,children:(0,X.jsx)(`strong`,{children:i(`workflows:workflowsPage.noMatchingWorkflows`)})})]})})}function un({runs:e,busyId:t,language:n,t:r,onStop:i,onRetry:a,onApproval:o}){let[s,c]=(0,Y.useState)(e[0]?.id||``),l=[...e].sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt));return(0,X.jsxs)(`div`,{className:`flex flex-col gap-[8px]`,children:[l.map(e=>{let l=s===e.id,u=Math.round((Number(e.completedNodes)||0)/Math.max(1,Number(e.totalNodes)||1)*100);return(0,X.jsx)(Le,{size:`sm`,className:`workflow-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] [border:1px_solid_var(--stroke)] rounded-[var(--r-xs)] bg-[var(--panel)] text-[var(--text)] shadow-[0_1px_2px_var(--sh-edge),0_14px_32px_-24px_var(--shadow)] overflow-hidden gap-0 py-0`,children:(0,X.jsxs)(Fe,{className:`p-0`,children:[(0,X.jsxs)(`button`,{className:`workflow-run-summary hover:bg-[var(--surface-hover)] [&_>_span]:flex [&_>_span]:min-w-0 [&_>_span]:flex-col [&_>_span]:gap-[2px] [&_strong]:overflow-hidden [&_strong]:text-ellipsis [&_strong]:whitespace-nowrap [&_small]:overflow-hidden [&_small]:text-ellipsis [&_small]:whitespace-nowrap [&_strong]:text-[13px] [&_small]:text-[var(--text-muted)] [&_small]:text-[11px] [&_small]:[font-style:normal] [&_em]:text-[var(--text-muted)] [&_em]:text-[11px] [&_em]:[font-style:normal] [&_[data-slot='progress']]:h-[5px] max-[650px]:grid-cols-[18px_minmax(0,1fr)_54px] max-[650px]:gap-[8px] max-[650px]:[&_[data-slot='progress']]:[grid-column:2/4] grid w-full min-h-[58px] grid-cols-[18px_minmax(180px,1fr)_minmax(120px,240px)_70px] items-center gap-[12px] border-0 bg-transparent [padding:9px_14px] text-[var(--text)] text-left cursor-pointer`,onClick:()=>c(l?``:e.id),children:[l?(0,X.jsx)(I,{size:15}):(0,X.jsx)(L,{size:15}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:e.workflowName||e.workflowId}),(0,X.jsxs)(`small`,{children:[sn(e.status,r),` · `,Pe(e.startedAt,n),` · v`,e.workflowRevision||1]})]}),(0,X.jsx)(x,{value:e.status===`completed`?100:u}),(0,X.jsx)(`em`,{children:on(e.durationMs)})]}),l&&(0,X.jsxs)(`div`,{className:`workflow-run-detail max-[650px]:pl-[14px] flex flex-col gap-[10px] [border-top:1px_solid_var(--stroke-soft)] [padding:12px_14px_14px_44px]`,children:[(e.summary||e.error)&&(0,X.jsx)(`div`,{className:`workflow-run-result [&.failed]:border-[var(--danger)] [&.failed]:text-[var(--danger)] [border-left:2px_solid_var(--success)] [padding:4px_8px] text-[var(--text-secondary)] text-[12px] whitespace-pre-wrap ${e.error?`failed`:``}`,children:e.error?Q(e.error):e.summary}),(0,X.jsx)(`div`,{className:`flex flex-col`,children:(e.nodes||[]).map(n=>(0,X.jsxs)(`div`,{className:`workflow-run-node first:[border-top:0] [&_>_span:nth-child(2)]:flex [&_>_span:nth-child(2)]:min-w-0 [&_>_span:nth-child(2)]:flex-col [&_>_span:nth-child(2)]:gap-[2px] [&_strong]:text-[12px] [&_small]:text-[var(--text-muted)] [&_small]:text-[11px] [&_p]:text-[var(--text-muted)] [&_p]:text-[11px] [&_p]:mt-[3px] [&_p]:whitespace-pre-wrap max-[650px]:grid-cols-[18px_minmax(0,1fr)] max-[650px]:[&_>_div]:[grid-column:2] grid min-h-[46px] grid-cols-[20px_minmax(0,1fr)_auto] items-center gap-[8px] [border-top:1px_solid_var(--stroke-soft)] [padding:6px_0] ${n.status}`,children:[(0,X.jsx)(`span`,{className:`workflow-node-status [.workflow-run-node.completed_&]:text-[var(--success)] [.workflow-run-node.failed_&]:text-[var(--danger)] grid place-items-center text-[var(--text-muted)]`,children:n.status===`completed`?(0,X.jsx)(ee,{size:14}):n.status===`failed`?(0,X.jsx)(ne,{size:14}):n.status===`running`||n.status===`waiting_approval`?(0,X.jsx)(H,{className:n.status===`running`?`animate-spin`:``,size:14}):(0,X.jsx)(_e,{size:12})}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:n.label}),(0,X.jsxs)(`small`,{children:[sn(n.status,r),` · `,on(n.durationMs),` ·`,` `,r(`workflows:workflowsPage.countAttempts`,{count:n.attempts||0})]}),(n.error||n.summary)&&(0,X.jsx)(`p`,{children:n.error?Q(n.error):n.summary})]}),n.status===`waiting_approval`&&(0,X.jsxs)(`div`,{className:`workflow-approval-actions flex gap-[6px]`,children:[(0,X.jsxs)(K,{size:`xs`,disabled:t===n.id,onClick:()=>o(e,n.id,!0),children:[(0,X.jsx)(ee,{"data-icon":`inline-start`}),r(`workflows:workflowsPage.approve`)]}),(0,X.jsxs)(K,{size:`xs`,variant:`destructive`,disabled:t===n.id,onClick:()=>o(e,n.id,!1),children:[(0,X.jsx)(ne,{"data-icon":`inline-start`}),r(`workflows:workflowsPage.reject`)]})]})]},n.id))}),(0,X.jsx)(`div`,{className:`workflow-run-detail-actions flex gap-[6px]`,children:[`running`,`waiting_approval`].includes(e.status)?(0,X.jsxs)(K,{size:`sm`,variant:`destructive`,onClick:()=>i(e),children:[(0,X.jsx)(_e,{"data-icon":`inline-start`}),r(`workflows:workflowsPage.stop`)]}):[`failed`,`cancelled`,`interrupted`].includes(e.status)?(0,X.jsxs)(K,{size:`sm`,variant:`outline`,onClick:()=>a(e),children:[(0,X.jsx)(H,{"data-icon":`inline-start`}),r(`workflows:workflowsPage.retryRun`)]}):null})]})]})},e.id)}),!l.length&&(0,X.jsx)(ze,{size:`sm`,className:`workflow-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] [border:1px_solid_var(--stroke)] rounded-[var(--r-xs)] bg-[var(--panel)] text-[var(--text)] shadow-[0_1px_2px_var(--sh-edge),0_14px_32px_-24px_var(--shadow)]`,children:(0,X.jsx)(`strong`,{children:r(`workflows:workflowsPage.noRunHistory`)})})]})}function dn({t:e,onOpenTemplate:t}){return(0,X.jsx)(`div`,{className:`workflow-template-gallery [&_>_button]:grid [&_>_button]:min-h-[72px] [&_>_button]:grid-cols-[34px_minmax(0,1fr)_18px] [&_>_button]:items-center [&_>_button]:gap-[10px] [&_>_button]:[border:1px_solid_var(--stroke)] [&_>_button]:rounded-[var(--r-sm)] [&_>_button]:bg-[var(--panel)] [&_>_button]:p-[11px] [&_>_button]:text-[var(--text)] [&_>_button]:text-left [&_>_button]:cursor-pointer [&_>_button:hover]:border-[var(--accent-border)] [&_>_button:hover]:bg-[var(--surface-hover)] [&_button_>_span:nth-child(2)]:flex [&_button_>_span:nth-child(2)]:min-w-0 [&_button_>_span:nth-child(2)]:flex-col [&_button_>_span:nth-child(2)]:gap-[3px] [&_strong]:text-[13px] [&_small]:overflow-hidden [&_small]:text-[var(--text-muted)] [&_small]:text-[11px] [&_small]:text-ellipsis [&_small]:whitespace-nowrap max-[650px]:grid-cols-[1fr] grid grid-cols-[repeat(2,minmax(0,1fr))] gap-[8px]`,children:Gt.map(n=>{let r=n.Icon;return(0,X.jsxs)(`button`,{onClick:()=>t(n.id),children:[(0,X.jsx)(`span`,{className:`list-icon [.chat-resource-list_&]:grid [.chat-resource-list_&]:w-[28px] [.chat-resource-list_&]:h-[28px] [.chat-resource-list_&]:place-items-center [.chat-resource-list_&]:rounded-[var(--r-sm)] [.chat-resource-list_&]:bg-[var(--surface-subtle)] [.chat-resource-list_&]:text-[var(--star-strong)] [.session-workflow-summary_&]:grid [.session-workflow-summary_&]:w-[28px] [.session-workflow-summary_&]:h-[28px] [.session-workflow-summary_&]:place-items-center [.session-workflow-summary_&]:rounded-[var(--r-sm)] [.session-workflow-summary_&]:bg-[var(--surface-subtle)] [.session-workflow-summary_&]:text-[var(--star-strong)] grid w-[27px] h-[27px] place-items-center rounded-[var(--r-sm)] bg-[var(--accent-soft)] text-[var(--star-strong)] [.workflow-template-gallery_&]:grid [.workflow-template-gallery_&]:w-[32px] [.workflow-template-gallery_&]:h-[32px] [.workflow-template-gallery_&]:place-items-center [.workflow-template-gallery_&]:rounded-[var(--r-sm)] [.workflow-template-gallery_&]:bg-[var(--surface-subtle)] [.workflow-template-gallery_&]:text-[var(--star-strong)]`,children:(0,X.jsx)(r,{size:16})}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:Bt(n.id,e)}),(0,X.jsx)(`small`,{children:Vt(n.id,e)})]}),(0,X.jsx)(L,{size:15})]},n.id)})})}function fn({data:e,t}){let n=e.runs.filter(e=>e.status===`failed`).length,r=e.runs.filter(e=>e.status===`waiting_approval`).length,i=e.runs.filter(e=>e.status===`completed`),a=i.length?i.reduce((e,t)=>e+(t.durationMs||0),0)/i.length:0;return(0,X.jsxs)(`div`,{className:`workflow-operations-strip [&_>_span]:inline-flex [&_>_span]:[align-items:baseline] [&_>_span]:gap-[5px] [&_>_span]:text-[var(--text-muted)] [&_>_span]:text-[11px] [&_>_span]:whitespace-nowrap [&_strong]:text-[var(--text)] [&_strong]:text-[13px] [&_strong]:[font-variant-numeric:tabular-nums] max-[650px]:justify-between max-[650px]:gap-[6px] max-[650px]:overflow-x-auto max-[650px]:[&_>_span]:flex-col max-[650px]:[&_>_span]:gap-[0] flex min-w-0 items-center gap-[18px]`,children:[(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:e.limits.running}),t(`workflows:workflowsPage.running`)]}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:r}),t(`workflows:workflowsPage.waitingApproval`)]}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:n}),t(`workflows:workflowsPage.failed`)]}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:on(a)}),t(`workflows:workflowsPage.averageDuration`)]})]})}function pn({value:e=``,onValueChange:t,files:n=[],onFilesSelected:r,onRemoveFile:i,accept:a=`media`,allowFiles:o=!0,allowText:s=!0,multiple:c=!1,disabled:l=!1,label:u,placeholder:f,attachmentLabel:p,removeLabel:m,children:h,className:g,maxLength:_}){let v=(0,Y.useId)(),b=(0,Y.useRef)(null),x=a===`image`?`image/png,image/jpeg,image/webp`:a===`video`?`video/mp4,video/webm`:`image/png,image/jpeg,image/webp,video/mp4,video/webm`;return(0,X.jsxs)(`div`,{className:E(`flex min-w-0 flex-col gap-2`,g),children:[(0,X.jsx)(d,{htmlFor:s?`${v}-text`:`${v}-picker`,children:u}),(0,X.jsxs)(`div`,{className:`min-w-0 rounded-xl border bg-background focus-within:ring-2 focus-within:ring-ring/25`,onDragOver:e=>{o&&e.preventDefault()},onDrop:e=>{o&&(e.preventDefault(),!l&&e.dataTransfer.files.length&&r?.(Array.from(e.dataTransfer.files)))},children:[s&&(0,X.jsx)(rt,{id:`${v}-text`,value:e,onChange:e=>t?.(e.target.value),placeholder:f,disabled:l,maxLength:_,className:`min-h-28 resize-y border-0 bg-transparent shadow-none focus-visible:ring-0`}),n.length>0&&(0,X.jsx)(`ul`,{className:E(`grid min-w-0 gap-2 p-3`,n.length>1&&`sm:grid-cols-2`),children:n.map(e=>(0,X.jsxs)(`li`,{className:`relative min-w-0 rounded-lg border bg-muted/20 p-2`,children:[e.url&&e.mimeType.startsWith(`image/`)?(0,X.jsx)(`img`,{src:e.url,alt:e.name,className:`h-32 w-full rounded object-contain`}):e.url&&e.mimeType.startsWith(`video/`)?(0,X.jsx)(`video`,{src:e.url,controls:!0,preload:`metadata`,className:`h-32 w-full rounded object-contain`,"aria-label":e.name}):(0,X.jsx)(`div`,{className:`flex h-12 items-center justify-center text-muted-foreground`,children:e.mimeType.startsWith(`video/`)?(0,X.jsx)(A,{}):(0,X.jsx)(y,{})}),(0,X.jsx)(`p`,{className:`mt-2 truncate pr-8 text-xs`,title:e.name,children:e.name}),i&&(0,X.jsx)(K,{type:`button`,variant:`ghost`,size:`icon-sm`,disabled:l,className:`absolute right-1 bottom-1`,"aria-label":`${m} ${e.name}`,onClick:()=>i(e.id),children:(0,X.jsx)(be,{className:`size-3.5`})})]},e.id))}),o&&(0,X.jsxs)(`div`,{className:`p-2`,children:[(0,X.jsx)(`input`,{id:`${v}-picker`,ref:b,className:`sr-only`,type:`file`,accept:x,multiple:c,disabled:l,"aria-label":p,onChange:e=>{let t=Array.from(e.currentTarget.files??[]);e.currentTarget.value=``,t.length&&r?.(t)}}),(0,X.jsxs)(K,{type:`button`,variant:`ghost`,size:`sm`,disabled:l,onClick:()=>b.current?.click(),children:[(0,X.jsx)(ue,{className:`size-4`}),p]})]})]}),h]})}function mn(e){if(!e||typeof e!=`object`||!(`models`in e)||!Array.isArray(e.models))throw U();return e.models.map(e=>{if(!e||typeof e!=`object`||!(`id`in e)||typeof e.id!=`string`||!(`name`in e)||typeof e.name!=`string`||!(`providerId`in e)||typeof e.providerId!=`string`||!(`providerName`in e)||typeof e.providerName!=`string`||!e.id.startsWith(`${e.providerId}/`))throw U();return{id:e.id,name:e.name,providerId:e.providerId,providerName:e.providerName}})}function hn(e){if(!e||typeof e!=`object`||!(`started`in e)||e.started!==!0||!(`run`in e)||!e.run||typeof e.run!=`object`||!(`id`in e.run)||typeof e.run.id!=`string`||!(`workflowId`in e.run)||typeof e.run.workflowId!=`string`)throw U();return{started:!0,run:{id:e.run.id,workflowId:e.run.workflowId}}}var gn={runNode:(e,t,n,r)=>W(`/api/workflows/${encodeURIComponent(e)}/nodes/${encodeURIComponent(t)}/run`,{method:`POST`,data:{sourceRunId:n},signal:r,parse:hn}),models:e=>W(`/api/workflow-image-models`,{signal:e,parse:mn})},_n=[`workflows`,`sprite-engines`];function vn(e){try{return nt(e)}catch{throw U()}}var yn={catalog:e=>W(`/api/sprite-engines`,{signal:e,parse:vn}),download:(e,t)=>W(`/api/sprite-engines/${e}/download`,{method:`POST`,data:{},signal:t,parse:vn}),cancel:(e,t)=>W(`/api/sprite-engines/${e}/cancel`,{method:`POST`,data:{},signal:t,parse:vn}),remove:(e,t)=>W(`/api/sprite-engines/${e}`,{method:`DELETE`,signal:t,parse:vn})};function $({label:e,value:t,min:n,max:r,step:i=1,onChange:a}){return(0,X.jsxs)(J,{variant:`control`,children:[e,(0,X.jsx)(q,{type:`number`,value:t,min:n,max:r,step:i,onChange:e=>{if(!e.target.value)return;let t=e.target.valueAsNumber;Number.isFinite(t)&&a(Math.max(n,Math.min(r,t)))}})]})}function bn({t:e,id:t=`background`}){let n=we(),[r,i]=(0,Y.useState)(!1),[a,o]=(0,Y.useState)(!1),s=(0,Y.useRef)(null);(0,Y.useEffect)(()=>()=>s.current?.abort(),[]);let c=Ce({queryKey:_n,queryFn:({signal:e})=>yn.catalog(e),refetchInterval:e=>e.state.data?.engines.some(e=>e.status===`downloading`)?1e3:!1}),l=c.data?.engines.find(e=>e.id===t),u=async()=>{if(s.current)return;let e=new AbortController;s.current=e,o(!0),i(!1);try{n.setQueryData(_n,await yn.download(t,e.signal))}catch{e.signal.aborted||i(!0)}finally{e.signal.aborted||o(!1),s.current===e&&(s.current=null)}};return(0,X.jsxs)(`div`,{className:`space-y-2 rounded-lg border p-3 text-xs`,children:[(0,X.jsx)(`p`,{children:e(`workflows:imageNodes.modelHint`)}),(0,X.jsx)(`p`,{children:l?.status===`ready`?e(`workflows:imageNodes.engineReady`):l?.status===`downloading`?e(`workflows:imageNodes.engineDownloading`,{percent:Math.round(l.total?100*l.received/l.total:0)}):e(`workflows:imageNodes.engineMissing`)}),(r||c.isError||l?.status===`failed`)&&(0,X.jsx)(`p`,{role:`alert`,children:e(`workflows:imageNodes.engineFailed`)}),l?.status!==`ready`&&(0,X.jsxs)(K,{size:`sm`,variant:`outline`,disabled:a||l?.status===`downloading`,onClick:()=>void u(),children:[a||l?.status===`downloading`?(0,X.jsx)(ce,{className:`animate-spin`}):(0,X.jsx)(R,{}),e(`workflows:imageNodes.download`)]})]})}function xn({node:e,inputs:t,t:n,onChange:r}){let i=et(e.image),a=e=>r({image:{...i,...e}}),o=Ce({queryKey:[`workflows`,`image-models`],queryFn:({signal:e})=>gn.models(e),enabled:e.kind===`media-generate`}),[s,c]=(0,Y.useState)(0);(0,Y.useEffect)(()=>c(0),[e.id]);let l=i.transforms.find(e=>e.index===s)??{index:s,x:0,y:0,rotation:0,scale:1,opacity:1,durationMs:i.durationMs,enabled:!0},u=e=>a({transforms:[...i.transforms.filter(e=>e.index!==s),{...l,...e}]}),d=i.frameOrder,p=(e,t)=>{let n=[...d],r=e+t;r<0||r>=n.length||([n[e],n[r]]=[n[r],n[e]],a({frameOrder:n}))};return(0,X.jsxs)(`div`,{className:`my-3 space-y-3 border-y py-3`,children:[e.kind===`media-input`&&(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.inputField`),(0,X.jsxs)(f,{value:i.inputName,onChange:e=>a({inputName:e.target.value}),children:[!t.some(e=>e.type===`image`&&e.name===i.inputName)&&(0,X.jsx)(`option`,{value:i.inputName,children:n(`workflows:imageNodes.chooseInput`)}),t.filter(e=>e.type===`image`).map(e=>(0,X.jsx)(`option`,{value:e.name,children:e.label},e.id))]}),(0,X.jsx)(`small`,{children:n(`workflows:imageNodes.inputHint`)})]}),e.kind===`media-generate`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.imageModel`),(0,X.jsxs)(f,{value:e.model?`${e.model.provider}/${e.model.model}`:``,onChange:e=>{let t=o.data?.find(t=>t.id===e.target.value);r({model:t?{provider:t.providerId,model:t.id.slice(t.providerId.length+1)}:null})},children:[(0,X.jsx)(`option`,{value:``,children:n(`workflows:imageNodes.defaultImageModel`)}),o.data?.map(e=>(0,X.jsxs)(`option`,{value:e.id,children:[e.providerName,` / `,e.name]},e.id))]}),o.isError&&(0,X.jsx)(`small`,{role:`alert`,children:n(`workflows:imageNodes.modelsFailed`)})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.action`),(0,X.jsx)(q,{value:i.action,maxLength:160,onChange:e=>a({action:e.target.value})})]}),(0,X.jsx)(pn,{label:n(`workflows:imageNodes.prompt`),value:e.prompt,onValueChange:e=>r({prompt:e}),allowFiles:!1,maxLength:16e3,attachmentLabel:n(`workflows:inputs.chooseImage`),removeLabel:n(`workflows:inputs.removeMedia`)}),(0,X.jsx)($,{label:n(`workflows:imageNodes.frameCount`),value:i.frameCount,min:1,max:16,onChange:e=>a({frameCount:e})}),(0,X.jsxs)(`fieldset`,{className:`space-y-2`,children:[(0,X.jsx)(`legend`,{className:`text-sm`,children:n(`workflows:imageNodes.directions`)}),(0,X.jsx)(`div`,{className:`grid grid-cols-4 gap-1`,children:Qe.map(e=>(0,X.jsx)(K,{size:`sm`,variant:i.directions.includes(e)?`secondary`:`outline`,"aria-pressed":i.directions.includes(e),disabled:i.directions.length===1&&i.directions[0]===e,onClick:()=>a({directions:i.directions.includes(e)?i.directions.filter(t=>t!==e):Qe.filter(t=>i.directions.includes(t)||t===e)}),children:e},e))})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.generateHint`,{count:i.directions.length})})]}),e.kind===`media-background`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.method`),(0,X.jsxs)(f,{value:i.method,onChange:e=>a({method:e.target.value===`model`?`model`:`color`}),children:[(0,X.jsx)(`option`,{value:`color`,children:n(`workflows:imageNodes.colorKey`)}),(0,X.jsx)(`option`,{value:`model`,children:n(`workflows:imageNodes.localModel`)})]})]}),i.method===`model`?(0,X.jsx)(bn,{t:n}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(`p`,{className:`text-sm`,children:n(`workflows:imageNodes.colors`)}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.colorsHint`)}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i.colors.map((e,t)=>(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(`input`,{className:`h-8 w-10 cursor-pointer rounded border`,type:`color`,value:e,"aria-label":n(`workflows:imageNodes.colorAt`,{index:t+1}),onChange:e=>a({colors:i.colors.map((n,r)=>r===t?e.target.value:n)})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,"aria-label":n(`workflows:imageNodes.removeColor`),onClick:()=>a({colors:i.colors.filter((e,n)=>n!==t)}),children:(0,X.jsx)(ve,{})})]},t))}),(0,X.jsxs)(K,{size:`sm`,variant:`outline`,disabled:i.colors.length>=8,onClick:()=>a({colors:[...i.colors,`#00ff00`]}),children:[(0,X.jsx)(de,{}),n(`workflows:imageNodes.addColor`)]})]}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,X.jsx)($,{label:n(`workflows:imageNodes.tolerance`),value:i.tolerance,min:0,max:255,onChange:e=>a({tolerance:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.softness`),value:i.softness,min:0,max:64,onChange:e=>a({softness:e})})]}),(0,X.jsxs)(`label`,{className:`flex items-center justify-between gap-3 text-sm`,children:[n(`workflows:imageNodes.edgeConnected`),(0,X.jsx)(S,{checked:i.edgeConnected,onCheckedChange:e=>a({edgeConnected:e})})]})]})]}),e.kind===`media-inpaint`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.regionHint`)}),(0,X.jsx)(bn,{t:n,id:`inpaint`}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,X.jsx)($,{label:n(`workflows:imageNodes.regionX`),value:i.region.x,min:0,max:99,onChange:e=>a({region:{...i.region,x:e}})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.regionY`),value:i.region.y,min:0,max:99,onChange:e=>a({region:{...i.region,y:e}})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.regionWidth`),value:i.region.width,min:1,max:100,onChange:e=>a({region:{...i.region,width:e}})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.regionHeight`),value:i.region.height,min:1,max:100,onChange:e=>a({region:{...i.region,height:e}})})]})]}),e.kind===`media-frames`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.gridHint`)}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,X.jsx)($,{label:n(`workflows:imageNodes.columns`),value:i.columns,min:1,max:16,onChange:e=>a({columns:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.rows`),value:i.rows,min:1,max:16,onChange:e=>a({rows:e})})]}),(0,X.jsx)($,{label:n(`workflows:imageNodes.duration`),value:i.durationMs,min:16,max:1e4,onChange:e=>a({durationMs:e})})]}),e.kind===`media-transform`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`label`,{className:`flex items-center justify-between gap-3 text-sm`,children:[n(`workflows:imageNodes.trim`),(0,X.jsx)(S,{checked:i.trim,onCheckedChange:e=>a({trim:e})})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.align`),(0,X.jsxs)(f,{value:i.align,onChange:e=>a({align:e.target.value===`center`?`center`:e.target.value===`none`?`none`:`bottom-center`}),children:[(0,X.jsx)(`option`,{value:`bottom-center`,children:n(`workflows:imageNodes.bottomCenter`)}),(0,X.jsx)(`option`,{value:`center`,children:n(`workflows:imageNodes.center`)}),(0,X.jsx)(`option`,{value:`none`,children:n(`workflows:imageNodes.noAlign`)})]})]}),(0,X.jsx)($,{label:n(`workflows:imageNodes.maxFrameSize`),value:i.maxFrameSize,min:16,max:1024,onChange:e=>a({maxFrameSize:Math.round(e)})}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.maxFrameSizeHint`,{size:i.maxFrameSize})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.padding`),value:i.padding,min:0,max:64,onChange:e=>a({padding:e})}),(0,X.jsxs)(`details`,{className:`rounded-lg border p-3`,children:[(0,X.jsx)(`summary`,{className:`cursor-pointer text-sm`,children:n(`workflows:imageNodes.frameEdits`)}),(0,X.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,X.jsx)($,{label:n(`workflows:imageNodes.frameNumber`),value:s+1,min:1,max:512,onChange:e=>c(Math.round(e)-1)}),(0,X.jsxs)(`label`,{className:`flex justify-between text-sm`,children:[n(`workflows:imageNodes.frameEnabled`),(0,X.jsx)(S,{checked:l.enabled,onCheckedChange:e=>u({enabled:e})})]}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,X.jsx)($,{label:`X`,value:l.x,min:-4096,max:4096,onChange:e=>u({x:e})}),(0,X.jsx)($,{label:`Y`,value:l.y,min:-4096,max:4096,onChange:e=>u({y:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.rotation`),value:l.rotation,min:-360,max:360,onChange:e=>u({rotation:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.scale`),value:l.scale,min:.05,max:8,step:.05,onChange:e=>u({scale:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.opacity`),value:l.opacity,min:0,max:1,step:.05,onChange:e=>u({opacity:e})}),(0,X.jsx)($,{label:n(`workflows:imageNodes.duration`),value:l.durationMs,min:16,max:1e4,onChange:e=>u({durationMs:e})})]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.orderHint`)}),(0,X.jsx)(K,{size:`sm`,variant:`outline`,disabled:d.includes(s),onClick:()=>a({frameOrder:[...d,s]}),children:n(`workflows:imageNodes.addToOrder`)}),d.map((e,t)=>(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(`span`,{className:`mr-auto text-xs`,children:n(`workflows:imageNodes.frameAt`,{index:e+1})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,"aria-label":n(`workflows:imageNodes.earlier`),disabled:t===0,onClick:()=>p(t,-1),children:(0,X.jsx)(N,{})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,"aria-label":n(`workflows:imageNodes.later`),disabled:t===d.length-1,onClick:()=>p(t,1),children:(0,X.jsx)(g,{})}),(0,X.jsx)(K,{size:`icon-xs`,variant:`ghost`,"aria-label":n(`workflows:imageNodes.resetOrder`),onClick:()=>a({frameOrder:d.filter(t=>t!==e)}),children:(0,X.jsx)(ve,{})})]},e))]})]})]}),e.kind===`media-preview`&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:imageNodes.previewHint`)}),e.kind===`media-export`&&(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:imageNodes.filename`),(0,X.jsx)(q,{value:i.filename,maxLength:100,onChange:e=>a({filename:e.target.value})}),(0,X.jsx)(`small`,{children:n(`workflows:imageNodes.exportHint`)})]})]})}var Sn={upload:(e,t)=>W(`/api/workflow-media?name=${encodeURIComponent(e.name)}`,{method:`POST`,data:e,headers:{"Content-Type":e.type},signal:t,timeout:12e4,parse:e=>{try{return $e(e)}catch{throw U()}}}),preview:(e,t)=>Se(`/api/workflow-media/${encodeURIComponent(e)}/content`,{signal:t})};function Cn(e){try{return Ze(e)}catch{return null}}function wn(e){let[t,n]=(0,Y.useState)({id:``,image:null,error:!1}),r=e?.media.id;return(0,Y.useEffect)(()=>{if(n({id:r??``,image:null,error:!1}),!r)return;let e=new AbortController,t=``,i=null;return Sn.preview(r,e.signal).then(a=>{if(e.signal.aborted)return;t=URL.createObjectURL(a),i=new Image;let o=i;i.onload=()=>{e.signal.aborted||n({id:r,image:o,error:!1})},i.onerror=()=>{e.signal.aborted||n({id:r,image:null,error:!0})},i.src=t}).catch(()=>{e.signal.aborted||n({id:r,image:null,error:!0})}),()=>{e.abort(),i&&(i.onload=null,i.onerror=null,i.src=``),t&&URL.revokeObjectURL(t)}},[r]),t.id===r?t:{id:r??``,image:null,error:!1}}function Tn(e,t){return t(e===`workflow_image_source_stale`?`workflows:imageNodes.sourceStale`:e===`workflow_image_source_required`?`workflows:imageNodes.sourceRequired`:e===`workflow_image_engine_missing`?`workflows:imageNodes.engineMissing`:e===`workflow_image_decode_failed`?`workflows:imageNodes.decodeFailed`:e===`workflow_image_generation_failed`?`workflows:imageNodes.generationFailed`:e===`workflow_image_too_large`?`workflows:imageNodes.tooLarge`:e===`workflow_image_cancelled`?`workflows:imageNodes.cancelled`:e===`workflow_image_timeout`?`workflows:imageNodes.timeout`:`workflows:imageNodes.invalidOutput`)}function En({value:e,previousValue:t,error:n,t:r}){let i=(0,Y.useMemo)(()=>Cn(e),[e]),a=(0,Y.useMemo)(()=>Cn(t),[t]),[o,s]=(0,Y.useState)(``),[c,l]=(0,Y.useState)(``),[u,d]=(0,Y.useState)(0),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(!1),[C,w]=(0,Y.useState)(!1),T=(0,Y.useRef)(null),E=(0,Y.useRef)(null),D=[...new Set(i?.frames.map(e=>e.action).filter(Boolean)??[])],O=[...new Set(i?.frames.map(e=>e.direction).filter(Boolean)??[])],k=D.includes(o)?o:D[0]??``,A=O.includes(c)?c:O[0]??``,j=(0,Y.useMemo)(()=>i?.frames.filter(e=>(!k||e.action===k)&&(!A||e.direction===A))??[],[i,k,A]),M=Math.min(u,Math.max(0,j.length-1)),N=a?.frames.filter(e=>e.action===j[M]?.action&&e.direction===j[M]?.direction),P=N?.[M]??N?.[0]??a?.frames[0],F=wn(v?P:j[M]),ee=wn(g&&!v?j[(M+j.length-1)%j.length]:void 0),I=wn(g&&!v?j[(M+1)%j.length]:void 0);(0,Y.useEffect)(()=>{d(0),h(!1),y(!1)},[k,A,e]),(0,Y.useEffect)(()=>()=>T.current?.abort(),[]),(0,Y.useEffect)(()=>{if(!m||j.length<2)return;let e=window.setTimeout(()=>{document.hidden||d((M+1)%j.length)},j[M]?.durationMs??125),t=()=>{document.hidden&&h(!1)};return document.addEventListener(`visibilitychange`,t),()=>{window.clearTimeout(e),document.removeEventListener(`visibilitychange`,t)}},[m,j,M]),(0,Y.useEffect)(()=>{let e=E.current?.getContext(`2d`);if(!e)return;e.clearRect(0,0,512,384);let t=[ee.image,F.image,I.image].filter(e=>!!e),n=Math.min(1,512/Math.max(1,...t.map(e=>e.naturalWidth)),384/Math.max(1,...t.map(e=>e.naturalHeight)))*.9,r=(t,r)=>{if(!t)return;e.save(),e.imageSmoothingEnabled=!1,e.globalAlpha=r;let i=t.naturalWidth*n,a=t.naturalHeight*n;e.drawImage(t,(512-i)/2,384*.95-a,i,a),e.restore()};r(ee.image,.2),r(I.image,.15),r(F.image,1)},[F.image,ee.image,I.image]);let te=async e=>{if(!i||T.current)return;let t=new AbortController;T.current=t,w(!0),x(!1);let n=``;try{let r=e===`atlas`?i.atlas?.media:j[M]?.media,a=e===`json`?new Blob([JSON.stringify(i.atlas??i,null,2)],{type:`application/json`}):r?await Sn.preview(r.id,t.signal):null;if(!a||t.signal.aborted)return;n=URL.createObjectURL(a);let o=document.createElement(`a`);o.href=n,o.download=e===`json`?`animation.frames.json`:(r?.name??`animation.png`).replace(/[\\/:*?"<>|\p{Cc}]/gu,`_`),o.click()}catch{t.signal.aborted||x(!0)}finally{n&&URL.revokeObjectURL(n),t.signal.aborted||w(!1),T.current===t&&(T.current=null)}};return!i&&!n?(0,X.jsx)(`p`,{className:`my-3 text-xs text-muted-foreground`,children:r(`workflows:imageNodes.noResult`)}):(0,X.jsxs)(`section`,{className:`my-3 space-y-3 rounded-xl border p-3`,"aria-label":r(`workflows:imageNodes.result`),children:[(0,X.jsx)(`h3`,{className:`text-sm font-medium`,children:r(`workflows:imageNodes.result`)}),n&&(0,X.jsx)(`p`,{role:`alert`,className:`text-xs text-muted-foreground`,children:Tn(n,r)}),j.length>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[D.length>0&&(0,X.jsx)(f,{"aria-label":r(`workflows:imageNodes.action`),value:k,onChange:e=>s(e.target.value),children:D.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))}),O.length>0&&(0,X.jsx)(f,{"aria-label":r(`workflows:imageNodes.directions`),value:A,onChange:e=>l(e.target.value),children:O.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]}),(0,X.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border bg-[repeating-conic-gradient(#d4d4d8_0%_25%,#fafafa_0%_50%)] bg-size-[16px_16px] dark:bg-[repeating-conic-gradient(#27272a_0%_25%,#3f3f46_0%_50%)]`,children:[(0,X.jsx)(`canvas`,{width:512,height:384,ref:E,className:`w-full`,role:`img`,"aria-label":r(`workflows:imageNodes.frameAt`,{index:M+1})}),!F.image&&!F.error&&(0,X.jsx)(ce,{className:`absolute top-1/2 left-1/2 size-5 animate-spin`})]}),F.error&&(0,X.jsx)(`p`,{role:`alert`,className:`text-xs`,children:r(`workflows:inputs.previewFailed`)}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-center gap-1`,children:[(0,X.jsx)(K,{size:`icon-sm`,variant:`outline`,"aria-label":r(`workflows:imageNodes.previousFrame`),disabled:j.length<2,onClick:()=>{h(!1),d((M+j.length-1)%j.length)},children:(0,X.jsx)(p,{})}),(0,X.jsx)(K,{size:`icon-sm`,variant:`outline`,"aria-label":r(m?`workflows:imageNodes.pause`:`workflows:imageNodes.play`),disabled:j.length<2,onClick:()=>h(!m),children:m?(0,X.jsx)(xt,{}):(0,X.jsx)(V,{})}),(0,X.jsx)(K,{size:`icon-sm`,variant:`outline`,"aria-label":r(`workflows:imageNodes.nextFrame`),disabled:j.length<2,onClick:()=>{h(!1),d((M+1)%j.length)},children:(0,X.jsx)(L,{})}),(0,X.jsxs)(`span`,{className:`px-1 text-xs tabular-nums`,children:[M+1,` / `,j.length]})]}),(0,X.jsx)(`input`,{className:`w-full`,type:`range`,min:0,max:Math.max(0,j.length-1),value:M,"aria-label":r(`workflows:imageNodes.frameNumber`),onChange:e=>{h(!1),d(Number(e.target.value))}}),(0,X.jsxs)(`label`,{className:`flex items-center justify-between text-xs`,children:[r(`workflows:imageNodes.onionSkin`),(0,X.jsx)(S,{checked:g,onCheckedChange:_})]}),P&&(0,X.jsxs)(`label`,{className:`flex items-center justify-between text-xs`,children:[r(`workflows:imageNodes.showInput`),(0,X.jsx)(S,{checked:v,onCheckedChange:y})]}),(0,X.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,X.jsxs)(K,{size:`sm`,variant:`outline`,disabled:C,onClick:()=>void te(`frame`),children:[(0,X.jsx)(R,{}),r(`workflows:imageNodes.saveFrame`)]}),i?.atlas&&(0,X.jsxs)(K,{size:`sm`,variant:`outline`,disabled:C,onClick:()=>void te(`atlas`),children:[(0,X.jsx)(R,{}),`PNG`]}),(0,X.jsxs)(K,{size:`sm`,variant:`outline`,disabled:C,onClick:()=>void te(`json`),children:[(0,X.jsx)(R,{}),`JSON`]})]})]}),b&&(0,X.jsx)(`p`,{role:`alert`,className:`text-xs`,children:r(`workflows:imageNodes.downloadFailed`)})]})}function Dn(e){let t=Math.max(0,Math.round((Number(e)||0)/1e3));return t<60?`${t} 秒`:`${Math.floor(t/60)} 分 ${t%60} 秒`}function On({run:e,t}){return(0,X.jsxs)(Re,{role:`status`,children:[(0,X.jsx)(H,{className:`animate-spin`,size:16}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:t(`workflows:workflowsPage.workflowRunning`)}),(0,X.jsx)(`small`,{children:t(`workflows:workflowsPage.runningNodeCompletedTotalCompleted`,{node:e.currentNodeLabel||t(`workflows:workflowsPage.preparing`),completed:e.completedNodes,total:e.totalNodes})})]})]})}function kn({run:e,language:t,t:n}){return(0,X.jsx)(Le,{size:`sm`,className:`workflow-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] [border:1px_solid_var(--stroke)] rounded-[var(--r-xs)] bg-[var(--panel)] text-[var(--text)] shadow-[0_1px_2px_var(--sh-edge),0_14px_32px_-24px_var(--shadow)] gap-0 py-0`,children:(0,X.jsxs)(Fe,{className:`p-3.5`,children:[(0,X.jsx)(Ie,{className:`workflow-section-title [.selection-list_&]:mb-[8px] [.node-library_&]:mb-[8px] text-[var(--text-soft)] text-[13px] font-[700] leading-[1.4]`,children:n(`workflows:workflowsPage.latestRun`)}),e?(0,X.jsxs)(`div`,{className:`activity-row [&_span]:flex [&_span]:min-w-0 [&_span]:flex-col [&_span]:gap-[3px] [&_strong]:text-[13px] [&_small]:text-[var(--text-muted)] [&_small]:text-[13px] [&_span]:text-[var(--text)] [&.failed]:text-[var(--danger)] [&.running]:text-[var(--star-strong)] grid grid-cols-[auto_minmax(0,1fr)] items-center gap-[9px] [border-top:1px_solid_var(--stroke-soft)] [padding:9px_2px] text-[var(--success)] ${e.status}`,children:[e.status===`running`||e.status===`waiting_approval`?(0,X.jsx)(H,{className:`animate-spin`,size:15}):e.status===`completed`?(0,X.jsx)(te,{size:15}):(0,X.jsx)(ye,{size:15}),(0,X.jsxs)(`span`,{children:[(0,X.jsx)(`strong`,{children:e.status===`completed`?e.summary||n(`workflows:workflowsPage.workflowCompleted`):e.status===`waiting_approval`?n(`workflows:workflowsPage.waitingApproval`):e.status===`running`?e.currentNodeLabel||n(`workflows:workflowsPage.running`):e.error?Q(e.error):n(`workflows:workflowsPage.workflowFailed`)}),(0,X.jsxs)(`small`,{children:[Pe(e.startedAt,t),` · `,Dn(e.durationMs)]})]})]}):(0,X.jsx)(`p`,{className:`muted-copy m-[8px_0_14px] text-[var(--text-muted)] text-[12px] leading-[1.55]`,children:n(`workflows:workflowsPage.noRunHistory`)})]})})}function An({input:e,value:t,onChange:n,label:r,disabled:i=!1,onBusyChange:a}){let{t:o}=s(),[c,l]=(0,Y.useState)({id:``,url:``}),[u,d]=(0,Y.useState)(!1),[f,p]=(0,Y.useState)(``),m=(0,Y.useRef)(null),h=(0,Y.useRef)(!0),g=(0,Y.useRef)(a);g.current=a;let _=(0,Y.useRef)({onChange:n,id:e.id,type:e.type});_.current={onChange:n,id:e.id,type:e.type};let v=e.type,y=(()=>{try{return $e(t)}catch{return null}})(),b=y?.id;(0,Y.useEffect)(()=>(h.current=!0,d(!1),p(``),()=>{h.current=!1,m.current?.abort(),m.current=null,g.current?.(e.id,!1)}),[e.id,v]),(0,Y.useEffect)(()=>{if(l({id:``,url:``}),!b)return;let e=new AbortController,t=``;return Sn.preview(b,e.signal).then(n=>{e.signal.aborted||(t=URL.createObjectURL(n),l({id:b,url:t}))}).catch(()=>{e.signal.aborted||p(o(`workflows:inputs.previewFailed`))}),()=>{e.abort(),t&&URL.revokeObjectURL(t)}},[b,o]);let x=async(t,n)=>{if(!t.length||i||m.current||n!==`image`&&n!==`video`)return;if(t.length!==1){p(o(`workflows:inputs.oneFile`));return}let r=t[0];if(!(n===`image`?[`image/png`,`image/jpeg`,`image/webp`]:[`video/mp4`,`video/webm`]).includes(r.type)){p(o(`workflows:inputs.mediaType`));return}if(r.size>(n===`image`?8:64)*1024*1024){p(o(n===`image`?`workflows:inputs.imageLimit`:`workflows:inputs.videoLimit`));return}let a=new AbortController;m.current=a,d(!0),g.current?.(e.id,!0),p(``);try{let t=await Sn.upload(r,a.signal);h.current&&!a.signal.aborted&&m.current===a&&_.current.id===e.id&&_.current.type===n&&_.current.onChange(t)}catch{h.current&&!a.signal.aborted&&p(o(`workflows:inputs.uploadFailed`))}finally{m.current===a&&(m.current=null,h.current&&(d(!1),g.current?.(e.id,!1)))}};return(0,X.jsxs)(pn,{label:r,value:typeof t==`string`?t:``,onValueChange:n,files:y?[{...y,url:c.id===y.id?c.url:void 0}]:[],onFilesSelected:e=>void x(e,v),onRemoveFile:()=>n(``),accept:v===`image`?`image`:`video`,allowFiles:v===`image`||v===`video`,allowText:v!==`image`&&v!==`video`,disabled:i||u,maxLength:16e3,attachmentLabel:o(v===`image`?`workflows:inputs.chooseImage`:`workflows:inputs.chooseVideo`),removeLabel:o(`workflows:inputs.removeMedia`),children:[u&&(0,X.jsxs)(`p`,{role:`status`,className:`flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,X.jsx)(ce,{className:`size-3 animate-spin`}),o(`workflows:inputs.uploading`)]}),f&&(0,X.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:f})]})}function jn(e){return e===`number`||e===`boolean`||e===`text`||e===`image`||e===`video`?e:`string`}function Mn(e){if(e.type===`image`||e.type===`video`)try{return $e(e.defaultValue)}catch{return null}return e.type===`boolean`?e.defaultValue===!0||e.defaultValue===`true`:typeof e.defaultValue==`number`||typeof e.defaultValue==`string`?e.defaultValue:``}function Nn(e,t){if(!(e instanceof Ye))return t(`workflows:inputs.invalidDefinition`);let n=e.label||e.inputName;return e.code===`workflow_input_unsafe_name`?t(`workflows:inputs.invalidName`):e.code===`workflow_input_duplicate_name`?t(`workflows:inputs.duplicateName`,{name:n}):e.code===`workflow_input_required`?t(`workflows:inputs.requiredValue`,{name:n}):e.code===`workflow_input_type`?t(`workflows:inputs.invalidValue`,{name:n}):e.code===`workflow_input_too_long`?t(`workflows:inputs.valueTooLong`,{name:n}):e.code===`workflow_input_unknown`?t(`workflows:inputs.unknownInput`,{name:n}):t(`workflows:inputs.invalidDefinition`)}function Pn(e,t){try{return tt(e),``}catch(e){return Nn(e,t)}}function Fn(e,t,n){try{return Xe(e,t),``}catch(e){return Nn(e,n)}}function In(e,t){return Xe(e,t)}function Ln(e,t){return e.type===`text`?t(`workflows:inputs.longText`):e.type===`number`?t(`workflows:inputs.number`):e.type===`boolean`?t(`workflows:inputs.boolean`):e.type===`image`?t(`workflows:inputs.image`):e.type===`video`?t(`workflows:inputs.video`):t(`workflows:inputs.shortText`)}function Rn({inputs:e,onChange:t,t:n,onUploadBusy:r}){let i=(0,Y.useId)(),[a,o]=(0,Y.useState)(null),s=Pn(e,n),p=(n,r)=>t(e.map(e=>e.id===n?{...e,...r}:e));return(0,X.jsxs)(`section`,{className:`mt-4 min-w-0 space-y-3`,"aria-labelledby":`${i}-title`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,X.jsx)(`h3`,{id:`${i}-title`,className:`text-sm font-medium`,children:n(`workflows:workflowsPage.inputParameters`)}),(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,disabled:e.length>=30,onClick:()=>{let r=e.length+1;for(;e.some(e=>e.name===`input_${r}`);)r+=1;let i=crypto.randomUUID();t([...e,{id:i,name:`input_${r}`,label:n(`workflows:workflowsPage.newInput`),type:`string`,required:!1,defaultValue:``,description:``}]),o(i)},children:[(0,X.jsx)(de,{}),n(`workflows:workflowsPage.addInput`)]})]}),(0,X.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:n(`workflows:inputs.definitionHint`)}),s&&(0,X.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:s}),e.length===0&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`workflows:inputs.emptyDefinition`)}),e.map(s=>(0,X.jsxs)(u,{className:`min-w-0 rounded-lg border`,open:a===s.id,onOpenChange:e=>o(e?s.id:null),children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 p-3`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,X.jsx)(`p`,{className:`truncate text-sm font-medium`,children:s.label||s.name}),(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[Ln(s,n),` ·`,` `,s.required?n(`workflows:workflowsPage.required`):n(`workflows:inputs.optional`)]})]}),(0,X.jsx)(l,{asChild:!0,children:(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,"aria-label":n(`workflows:inputs.editNamedInput`,{name:s.label||s.name}),children:[(0,X.jsx)(B,{}),n(`workflows:inputs.editInput`)]})})]}),(0,X.jsxs)(c,{className:`space-y-3 border-t p-3`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(d,{htmlFor:`${i}-${s.id}-label`,className:`text-xs`,children:n(`workflows:inputs.label`)}),(0,X.jsx)(q,{id:`${i}-${s.id}-label`,value:s.label,maxLength:120,onChange:e=>p(s.id,{label:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(d,{id:`${i}-${s.id}-type`,className:`text-xs`,children:n(`workflows:workflowsPage.parameterType`)}),(0,X.jsxs)(f,{"aria-labelledby":`${i}-${s.id}-type`,value:s.type,onChange:e=>{let t=jn(e.target.value);p(s.id,{type:t,defaultValue:t!==`boolean`&&``})},children:[(0,X.jsx)(`option`,{value:`string`,children:n(`workflows:inputs.shortText`)}),(0,X.jsx)(`option`,{value:`text`,children:n(`workflows:inputs.longText`)}),(0,X.jsx)(`option`,{value:`number`,children:n(`workflows:inputs.number`)}),(0,X.jsx)(`option`,{value:`boolean`,children:n(`workflows:inputs.boolean`)}),(0,X.jsx)(`option`,{value:`image`,children:n(`workflows:inputs.image`)}),(0,X.jsx)(`option`,{value:`video`,children:n(`workflows:inputs.video`)})]})]}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(d,{htmlFor:`${i}-${s.id}-description`,className:`text-xs`,children:n(`workflows:inputs.description`)}),(0,X.jsx)(rt,{id:`${i}-${s.id}-description`,value:s.description,maxLength:300,rows:2,className:`min-h-14`,onChange:e=>p(s.id,{description:e.target.value})})]}),(0,X.jsxs)(`details`,{className:`group rounded-md border p-2`,children:[(0,X.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center justify-between gap-2 text-xs font-medium [&::-webkit-details-marker]:hidden`,children:[n(`workflows:inputs.advancedSettings`),(0,X.jsx)(I,{className:`size-3.5 transition-transform group-open:rotate-180`})]}),(0,X.jsxs)(`div`,{className:`space-y-3 pt-3`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(d,{htmlFor:`${i}-${s.id}-name`,className:`text-xs`,children:n(`workflows:workflowsPage.parameterName`)}),(0,X.jsx)(q,{id:`${i}-${s.id}-name`,value:s.name,maxLength:80,onChange:e=>p(s.id,{name:e.target.value})}),(0,X.jsx)(`code`,{className:`block break-all text-xs text-muted-foreground`,children:`{{inputs.`+s.name+`}}`})]}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[s.type!==`text`&&s.type!==`image`&&s.type!==`video`&&(0,X.jsx)(d,{htmlFor:`${i}-${s.id}-default`,className:`text-xs`,children:n(`workflows:inputs.defaultValue`)}),s.type===`boolean`?(0,X.jsx)(S,{id:`${i}-${s.id}-default`,checked:Mn(s)===!0,onCheckedChange:e=>p(s.id,{defaultValue:e})}):s.type===`text`||s.type===`image`||s.type===`video`?(0,X.jsx)(An,{input:s,value:s.defaultValue,label:n(`workflows:inputs.defaultValue`),onBusyChange:r,onChange:e=>p(s.id,{defaultValue:e})}):(0,X.jsx)(q,{id:`${i}-${s.id}-default`,type:s.type===`number`?`number`:`text`,value:String(Mn(s)),onChange:e=>p(s.id,{defaultValue:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(d,{htmlFor:`${i}-${s.id}-required`,className:`text-xs`,children:n(`workflows:workflowsPage.required`)}),(0,X.jsx)(S,{id:`${i}-${s.id}-required`,checked:s.required,onCheckedChange:e=>p(s.id,{required:e})})]})]})]}),(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,"aria-label":n(`workflows:inputs.deleteInput`,{name:s.label}),onClick:()=>{t(e.filter(e=>e.id!==s.id)),o(null)},children:[(0,X.jsx)(ve,{}),n(`workflows:inputs.removeInput`)]})]})]},s.id))]})}var zn={browser:{Icon:P},feishu:{Icon:F},weixin:{Icon:le},qq:{Icon:le},telegram:{Icon:me}},Bn=[`workspace-write`,`full-access`];function Vn(e,t){return t(e===`workspace-write`?`workflows:workflowsPage.workspaceWrite`:`workflows:workflowsPage.fullAccess`)}function Hn(e,t){return t(e===`workspace-write`?`workflows:workflowsPage.workspaceWriteHelp`:`workflows:workflowsPage.fullAccessHelp`)}function Un(e,t){return t(e===`feishu`?`workflows:workflowsPage.feishu`:e===`weixin`?`workflows:workflowsPage.weChat`:e===`qq`?`workflows:workflowsPage.qq`:e===`telegram`?`workflows:workflowsPage.telegram`:`workflows:workflowsPage.browserNotification`)}function Wn({draft:e,catalog:t,t:n,onUpdateDraft:r,onInputUploadBusy:i}){return(0,X.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.name`),(0,X.jsx)(q,{value:e.name,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.description`),(0,X.jsx)(rt,{value:e.description,onChange:e=>r({description:e.target.value})})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.workingDirectory`),(0,X.jsx)(q,{value:e.cwd,onChange:e=>r({cwd:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.visibility`),(0,X.jsxs)(f,{value:e.visibility,onChange:e=>r({visibility:e.target.value===`shared`?`shared`:`private`}),children:[(0,X.jsx)(`option`,{value:`private`,children:n(`workflows:workflowsPage.private`)}),(0,X.jsx)(`option`,{value:`shared`,children:n(`workflows:workflowsPage.shared`)})]})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.tags`),(0,X.jsx)(q,{value:e.tags.join(`, `),onChange:e=>r({tags:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.revision`),(0,X.jsx)(q,{value:`v${e.revision}`,disabled:!0})]})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.defaultModel`),(0,X.jsxs)(f,{value:e.model?`${e.model.provider}/${e.model.model}`:``,onChange:e=>{let n=t.models.find(t=>`${t.provider}/${t.model}`===e.target.value);r({model:n?{provider:n.provider,model:n.model}:null})},children:[(0,X.jsx)(`option`,{value:``,children:n(`workflows:workflowsPage.useSystemDefault`)}),t.models.map(e=>(0,X.jsx)(`option`,{value:`${e.provider}/${e.model}`,children:e.label},`${e.provider}/${e.model}`))]})]}),(0,X.jsx)(Rn,{inputs:e.inputs,t:n,onUploadBusy:i,onChange:e=>r({inputs:e})})]})}function Gn({node:e,catalog:t,t:n,systemNotificationPermission:r,onUpdateNode:i,onToggleNotification:a,onOpenChannels:o,onOpenSystemNotificationSettings:s}){let c=[`feishu`,`weixin`,`qq`,`telegram`].some(e=>t.notificationTargets[e]?.enabled),l=r==="default"||r===`granted`;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.notificationTitle`),(0,X.jsx)(q,{value:e.notification.title,onChange:t=>i({notification:{...e.notification,title:t.target.value}}),placeholder:`{{workflow.name}}`})]}),(0,X.jsxs)(J,{variant:`control`,children:[n(`workflows:workflowsPage.notificationContent`),(0,X.jsx)(rt,{value:e.notification.content,onChange:t=>i({notification:{...e.notification,content:t.target.value}}),placeholder:`{{inputs.name}} · {{previous.summary}}`})]}),(0,X.jsx)(`strong`,{className:`block [margin-top:12px] text-[var(--text-secondary)] text-[12px]`,children:n(`workflows:workflowsPage.notificationChannels`)}),!c&&(0,X.jsxs)(Ee,{className:`workflow-notification-alert [&_[data-slot='alert-description']]:flex [&_[data-slot='alert-description']]:items-center [&_[data-slot='alert-description']]:gap-[4px] [&_[data-slot='alert-description']]:text-[11px] [&_[data-slot='alert-description']]:leading-[1.4] [margin:10px_0_6px] [border-color:color-mix(in_srgb,var(--warning)_35%,var(--border))] bg-[color-mix(in_srgb,var(--warning)_7%,var(--card))] text-[var(--text-secondary)]`,children:[(0,X.jsx)(ye,{}),(0,X.jsxs)(Te,{children:[n(`workflows:workflowsPage.noExternalNotificationChannelsEnabled`),(0,X.jsx)(K,{type:`button`,variant:`link`,size:`sm`,onClick:o,children:n(`workflows:workflowsPage.openChannelSettings`)})]})]}),(r===`denied`||r===`unsupported`)&&(0,X.jsxs)(Ee,{className:`workflow-notification-alert [&_[data-slot='alert-description']]:flex [&_[data-slot='alert-description']]:items-center [&_[data-slot='alert-description']]:gap-[4px] [&_[data-slot='alert-description']]:text-[11px] [&_[data-slot='alert-description']]:leading-[1.4] [margin:10px_0_6px] [border-color:color-mix(in_srgb,var(--warning)_35%,var(--border))] bg-[color-mix(in_srgb,var(--warning)_7%,var(--card))] text-[var(--text-secondary)]`,children:[(0,X.jsx)(ye,{}),(0,X.jsxs)(Te,{children:[n(r===`unsupported`?`workflows:workflowsPage.systemNotificationsUnsupported`:`workflows:workflowsPage.systemNotificationPermissionRequired`),(0,X.jsx)(K,{type:`button`,variant:`link`,size:`sm`,onClick:s,children:n(`workflows:workflowsPage.openSystemNotificationSettings`)})]})]}),Object.entries(zn).map(([i,o])=>{let s=o.Icon,c=i===`browser`?l:!!t.notificationTargets[i]?.enabled;return(0,X.jsxs)(`div`,{className:`toggle-line [&_>_span]:flex [&_>_span]:items-center [&_>_span]:gap-[7px] [&_>_span]:text-[12px] flex min-h-[34px] items-center justify-between [border-top:1px_solid_var(--stroke-soft)]`,children:[(0,X.jsxs)(`span`,{children:[(0,X.jsx)(s,{size:15}),Un(i,n)]}),(0,X.jsx)(S,{checked:c&&(i!==`browser`||r===`granted`&&t.notificationTargets.browser.enabled)&&e.notificationTargets.includes(i),disabled:!c,"aria-label":Un(i,n),title:i===`browser`?c?t.notificationTargets.browser.enabled?n(`workflows:workflowsPage.systemNotificationsEnabled`):n(`workflows:workflowsPage.systemNotificationReady`):n(`workflows:workflowsPage.systemNotificationPermissionRequired`):n(c?`workflows:workflowsPage.notificationChannelEnabled`:`workflows:workflowsPage.notificationChannelNotEnabled`),onCheckedChange:()=>void a(i)})]},i)})]})}function Kn({edge:e,nodes:t,t:n,onDelete:r}){let i=new Map(t.map(e=>[e.id,e]));return(0,X.jsxs)(`section`,{className:`min-w-0 space-y-3`,children:[(0,X.jsxs)(`div`,{className:`workflow-edge-summary [&_strong]:overflow-hidden [&_strong]:text-ellipsis [&_strong]:whitespace-nowrap [&_span]:text-[var(--text-muted)] grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-[8px] [margin:10px_0]`,children:[(0,X.jsx)(`strong`,{children:i.get(e.source)?.label||n(`workflows:workflowsPage.unknownNode`)}),(0,X.jsx)(`span`,{children:`→`}),(0,X.jsx)(`strong`,{children:i.get(e.target)?.label||n(`workflows:workflowsPage.unknownNode`)})]}),(0,X.jsx)(`p`,{className:`muted-copy m-[8px_0_14px] text-[var(--text-muted)] text-[12px] leading-[1.55]`,children:n(`workflows:workflowsPage.pressDeleteOrBackspaceToRemoveThisConnection`)}),(0,X.jsxs)(K,{size:`sm`,variant:`destructive`,onClick:r,children:[(0,X.jsx)(ve,{"data-icon":`inline-start`}),n(`workflows:workflowsPage.deleteConnection`)]})]})}function qn({node:e,inputs:t,selectedEdge:n,catalog:r,t:i,onUpdateNode:a,systemNotificationPermission:o,onToggleNotification:s,onCopy:c,onDelete:l,onOpenChannels:u,onOpenSystemNotificationSettings:d}){let p=(0,Y.useRef)(null);return(0,X.jsx)(`section`,{className:`min-w-0 space-y-3`,children:e?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.nodeName`),(0,X.jsx)(q,{value:e.label,onChange:e=>a({label:e.target.value})})]}),[`prompt`,`skill`,`file`,`mcp`].includes(e.kind)&&(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.nodeModel`),(0,X.jsxs)(f,{value:e.model?`${e.model.provider}/${e.model.model}`:``,onChange:e=>{let t=r.models.find(t=>`${t.provider}/${t.model}`===e.target.value);a({model:t?{provider:t.provider,model:t.model}:null})},children:[(0,X.jsx)(`option`,{value:``,children:i(`workflows:workflowsPage.inheritWorkflowDefaultModel`)}),r.models.map(e=>(0,X.jsx)(`option`,{value:`${e.provider}/${e.model}`,children:e.label},`${e.provider}/${e.model}`))]})]}),e.kind===`trigger`&&(0,X.jsx)(`p`,{className:`rounded-lg bg-[var(--surface-subtle)] p-3 text-xs leading-relaxed text-muted-foreground`,children:i(`workflows:editor.manualTriggerHint`)}),e.kind===`parallel`&&(0,X.jsx)(`p`,{className:`rounded-lg bg-[var(--surface-subtle)] p-3 text-xs leading-relaxed text-muted-foreground`,children:i(`workflows:editor.parallelHint`)}),![`trigger`,`parallel`,`condition`,`approval`].includes(e.kind)&&(0,X.jsxs)(`details`,{className:`rounded-lg border p-3`,children:[(0,X.jsx)(`summary`,{className:`cursor-pointer text-xs font-medium`,children:i(`workflows:editor.executionSettings`)}),(0,X.jsxs)(`div`,{className:`grid gap-3 pt-3`,children:[(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.retryCount`),(0,X.jsx)(q,{type:`number`,min:`0`,max:`3`,value:e.retries,onChange:e=>a({retries:Number(e.target.value)})})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.timeoutMinutes`),(0,X.jsx)(q,{type:`number`,min:`1`,max:`240`,value:e.timeoutMinutes,onChange:e=>a({timeoutMinutes:Number(e.target.value)})})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.failureHandling`),(0,X.jsxs)(f,{value:e.failurePolicy,onChange:e=>a({failurePolicy:e.target.value===`skip`?`skip`:`stop`}),children:[(0,X.jsx)(`option`,{value:`stop`,children:i(`workflows:workflowsPage.stopImmediately`)}),(0,X.jsx)(`option`,{value:`skip`,children:i(`workflows:workflowsPage.skipThisNode`)})]})]})]})]}),Ct(e.kind)&&(0,X.jsx)(xn,{node:e,inputs:t,t:i,onChange:a}),[`prompt`,`skill`,`file`,`mcp`].includes(e.kind)&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.executionMode`),(0,X.jsx)(f,{value:e.executionMode,onChange:e=>a({executionMode:e.target.value}),children:Bn.map(e=>(0,X.jsx)(`option`,{value:e,children:Vn(e,i)},e))}),(0,X.jsx)(`small`,{children:Hn(e.executionMode,i)})]}),e.kind===`skill`&&(0,X.jsxs)(J,{variant:`control`,children:[`Skill`,(0,X.jsxs)(f,{value:e.skillName,onChange:e=>a({skillName:e.target.value}),children:[(0,X.jsx)(`option`,{value:``,children:i(`workflows:workflowsPage.chooseSkill`)}),r.skills.map(e=>(0,X.jsx)(`option`,{value:e.name,children:e.name},e.id))]})]}),e.kind===`mcp`&&(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.mcpToolNames`),(0,X.jsx)(q,{value:e.requestedToolNames.join(`, `),onChange:e=>a({requestedToolNames:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)}),placeholder:`server.tool_name`})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:inputs.nodeRules`),(0,X.jsx)(rt,{ref:p,value:e.prompt,onChange:e=>a({prompt:e.target.value}),placeholder:i(`workflows:workflowsPage.describeTheWorkTheAgentShouldCompleteInThisNode`)})]}),(0,X.jsxs)(`div`,{className:`space-y-2 py-2`,children:[(0,X.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:i(`workflows:inputs.nodeRulesHint`)}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:t.map(t=>(0,X.jsx)(K,{type:`button`,variant:`outline`,size:`xs`,title:i(`workflows:inputs.insertVariable`,{name:t.label}),onClick:()=>{let n=p.current,r=n?.selectionStart??e.prompt.length,i=n?.selectionEnd??r,o=`{{inputs.`+t.name+`}}`;a({prompt:e.prompt.slice(0,r)+o+e.prompt.slice(i)}),requestAnimationFrame(()=>{n?.focus(),n?.setSelectionRange(r+o.length,r+o.length)})},children:(0,X.jsx)(`code`,{children:`{{inputs.`+t.name+`}}`})},t.id))})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.outputFormat`),(0,X.jsxs)(f,{value:e.outputFormat,onChange:e=>a({outputFormat:e.target.value===`json`?`json`:`text`}),children:[(0,X.jsx)(`option`,{value:`text`,children:`Text`}),(0,X.jsx)(`option`,{value:`json`,children:`JSON`})]})]})]}),e.kind===`condition`&&(0,X.jsxs)(`div`,{className:`grid gap-3`,children:[(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.dataPath`),(0,X.jsx)(q,{value:e.condition.source,onChange:t=>a({condition:{...e.condition,source:t.target.value}}),placeholder:`inputs.approved`})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.operator`),(0,X.jsx)(f,{value:e.condition.operator,onChange:t=>a({condition:{...e.condition,operator:t.target.value}}),children:[`exists`,`not_exists`,`equals`,`not_equals`,`contains`,`greater_than`,`less_than`].map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.comparisonValue`),(0,X.jsx)(q,{value:String(e.condition.value??``),onChange:t=>a({condition:{...e.condition,value:t.target.value}})})]})]}),e.kind===`notification`&&(0,X.jsx)(Gn,{node:e,catalog:r,t:i,systemNotificationPermission:o,onUpdateNode:a,onToggleNotification:s,onOpenChannels:u,onOpenSystemNotificationSettings:d}),e.kind===`approval`&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.approvalMessage`),(0,X.jsx)(rt,{value:e.approval.message,onChange:t=>a({approval:{...e.approval,message:t.target.value}})})]}),(0,X.jsxs)(J,{variant:`control`,children:[i(`workflows:workflowsPage.approvalTimeout`),(0,X.jsx)(q,{type:`number`,min:`1`,max:`10080`,value:e.approval.timeoutMinutes,onChange:t=>a({approval:{...e.approval,timeoutMinutes:Number(t.target.value)}})})]})]}),(0,X.jsxs)(`div`,{className:`mt-[15px] flex gap-2 max-[650px]:flex-wrap`,children:[(0,X.jsxs)(K,{size:`sm`,variant:`secondary`,onClick:c,children:[(0,X.jsx)(ie,{"data-icon":`inline-start`}),i(`workflows:workflowsPage.duplicateNode`)]}),(0,X.jsxs)(K,{size:`sm`,variant:`destructive`,onClick:l,children:[(0,X.jsx)(ve,{"data-icon":`inline-start`}),i(`workflows:workflowsPage.deleteNode`)]})]})]}):(0,X.jsx)(`p`,{className:`muted-copy m-[8px_0_14px] text-[var(--text-muted)] text-[12px] leading-[1.55]`,children:i(n?`workflows:workflowsPage.aConnectionIsCurrentlySelected`:`workflows:workflowsPage.dragNodesFromTheLeftToStartBuildingTheWorkflow`)})})}function Jn({draft:e,catalog:t,selectedNode:n,selectedEdge:r,currentRun:i,language:a,t:o,onUpdateNode:s,systemNotificationPermission:c,onToggleNotification:l,onDeleteEdge:u,onCopyNode:d,onDeleteNode:f,onOpenChannels:p,onOpenSystemNotificationSettings:m,onRunImageNode:h,imageRunBusy:g=!1}){let _=e.edges.filter(e=>e.target===n?.id).map(e=>e.source),v=(i?[i]:[]).find(t=>t.workflowId===e.id&&(n?.kind===`media-input`?!!t.inputs:_.length>0&&_.every(e=>t.nodes?.some(t=>t.id===e&&t.status===`completed`&&t.output)))),y=i;return(0,X.jsxs)(`div`,{className:`detail-stack min-w-0 space-y-5`,children:[r&&(0,X.jsx)(Kn,{edge:r,nodes:e.nodes,t:o,onDelete:u}),!r&&(0,X.jsx)(qn,{node:n,inputs:e.inputs,selectedEdge:r,catalog:t,t:o,onUpdateNode:s,systemNotificationPermission:c,onToggleNotification:l,onCopy:d,onDelete:f,onOpenChannels:p,onOpenSystemNotificationSettings:m}),n&&Ct(n.kind)&&h&&(0,X.jsxs)(`div`,{className:`space-y-2 rounded-lg border p-3`,children:[(0,X.jsxs)(K,{className:`w-full`,variant:`outline`,disabled:!e.id||!v||g,onClick:()=>{v&&h(n.id,v.id)},children:[(0,X.jsx)(V,{}),o(`workflows:imageNodes.runNode`)]}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:o(`workflows:imageNodes.runNodeHint`)})]}),n&&Ct(n.kind)&&(0,X.jsx)(En,{value:y?.nodes?.find(e=>e.id===n.id)?.output,previousValue:v?.nodes?.find(t=>t.id===e.edges.find(e=>e.target===n.id)?.source)?.output,error:y?.nodes?.find(e=>e.id===n.id)?.error,t:o},n.id),e.id&&i&&(0,X.jsxs)(`details`,{className:`rounded-lg border p-3`,children:[(0,X.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium`,children:o(`workflows:workflowsPage.latestRun`)}),(0,X.jsx)(`div`,{className:`mt-3`,children:(0,X.jsx)(kn,{run:i,language:a,t:o})})]})]})}function Yn({workflowId:e,templateId:t,notify:n,onCreated:r}){let{t:i}=s(),[a,o]=(0,Y.useState)(rn),[c,l]=(0,Y.useState)(null),[u,d]=(0,Y.useState)(``),[f,p]=(0,Y.useState)(``),[m,h]=(0,Y.useState)(!0),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(``),b=(0,Y.useRef)(null),x=(0,Y.useRef)(new Set),[S,C]=(0,Y.useState)(!1),w=(0,Y.useRef)(null),T=(0,Y.useRef)(!0);(0,Y.useEffect)(()=>{let e=x.current;return T.current=!0,_(!1),C(!1),()=>{T.current=!1,w.current?.abort(),w.current=null,e.clear()}},[e,t]);let E=(0,Y.useCallback)((e,t)=>{t?x.current.add(e):x.current.delete(e),T.current&&C(x.current.size>0)},[]),D=!!window.pisperDesktop?.showNotification,[O,k]=(0,Y.useState)(()=>D?`checking`:Je()),A=(0,Y.useCallback)(async()=>{if(!D){k(Je());return}let e=window.pisperDesktop?.getNotificationStatus;if(!e){k(`granted`);return}try{let t=await e(),n=t?.permission;k(n==="default"||n===`denied`||n===`granted`||n===`checking`||n===`unsupported`?n:t?.supported===!1?`unsupported`:`granted`)}catch{k(`unsupported`)}},[D]),j=(0,Y.useCallback)(async n=>{try{let r=await G(`/api/workflows`,{signal:n});if(n.aborted)return;o(r);let a=e===`new`?null:r.workflows.find(t=>t.id===e),s=Gt.find(e=>e.id===t),c=a?structuredClone(a):s?Xt(s,r.cwd,i):Jt(r.cwd,i);l(c),d(e=>c.nodes.some(t=>t.id===e)?e:c.nodes[0]?.id||``),p(``),y(a||e===`new`?``:i(`workflows:workflowsPage.workflowNotFoundABlankEditorWasOpened`))}catch(e){n.aborted||y(Q(e))}finally{n.aborted||h(!1)}},[i,t,e]),M=(0,Y.useCallback)(()=>{b.current?.abort();let e=new AbortController;b.current=e,h(!0),y(``),j(e.signal)},[j]);(0,Y.useEffect)(()=>(M(),()=>b.current?.abort()),[M]),(0,Y.useEffect)(()=>{A();let e=()=>void A();return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[A]);let N=(0,Y.useMemo)(()=>a.runs.filter(e=>e.workflowId===c?.id).sort((e,t)=>Date.parse(t.startedAt)-Date.parse(e.startedAt))[0],[a.runs,c?.id]),P=N?.status===`running`||N?.status===`waiting_approval`;(0,Y.useEffect)(()=>{if(!P)return;let e=new AbortController,t=!1,n=window.setInterval(async()=>{if(!t){t=!0;try{let t=await G(`/api/workflows`,{signal:e.signal});e.signal.aborted||o(t)}catch{}finally{t=!1}}},1500);return()=>{e.abort(),window.clearInterval(n)}},[P,e]);let F=(0,Y.useMemo)(()=>c?.nodes.find(e=>e.id===u)||null,[c?.nodes,u]),ee=(0,Y.useMemo)(()=>c?.edges.find(e=>e.id===f)||null,[c?.edges,f]),I=(0,Y.useCallback)(e=>{l(t=>t&&{...t,...e})},[]),L=(0,Y.useCallback)(e=>{l(t=>t&&{...t,nodes:t.nodes.map(t=>t.id===u?{...t,...e}:t)})},[u]),te=(0,Y.useCallback)(e=>{d(e),p(``)},[]),ne=(0,Y.useCallback)(e=>{p(e),d(``)},[]),re=(0,Y.useCallback)(()=>{d(``),p(``)},[]),ie=(0,Y.useCallback)((e,t,r=`output`)=>{if(!c||e===t)return;let a=c.nodes.find(e=>e.id===t);if(!a||a.kind===`trigger`){n(i(`workflows:workflowsPage.aTriggerCannotHaveAnUpstreamConnection`),`error`);return}if(c.edges.some(n=>n.source===e&&n.target===t&&n.sourcePort===r)){n(i(`workflows:workflowsPage.thisConnectionAlreadyExists`),`info`);return}if(Ft(c.nodes,c.edges,e,t,r)){n(i(`workflows:workflowsPage.aWorkflowCannotContainCyclicConnections`),`error`);return}let o={id:crypto.randomUUID(),source:e,sourcePort:r,target:t,targetPort:`input`};l(e=>e&&{...e,edges:[...e.edges,o]}),p(o.id),d(``),n(i(`workflows:workflowsPage.connectionCreated`),`info`)},[c,n,i]),R=(0,Y.useCallback)(e=>{if(!e.length)return;let t=new Set(e);l(e=>e&&{...e,edges:e.edges.filter(e=>!t.has(e.id))}),p(``),n(i(`workflows:workflowsPage.connectionDeleted`),`info`)},[n,i]),ae=(0,Y.useCallback)(()=>{f&&R([f])},[R,f]),oe=(0,Y.useCallback)(e=>{if(!e.length)return;let t=new Set(e);l(e=>e&&{...e,nodes:e.nodes.filter(e=>!t.has(e.id)),edges:e.edges.filter(e=>!t.has(e.source)&&!t.has(e.target))}),re(),n(i(`workflows:workflowsPage.nodeDeleted`),`info`)},[re,n,i]),se=(0,Y.useCallback)((e,t,n)=>{let r=crypto.randomUUID();l(i=>i&&{...i,nodes:[...i.nodes,Z(r,e,t||It[e],``,n.x,n.y)]}),d(r),p(``)},[]),z=(0,Y.useCallback)((e,t)=>{l(n=>n&&{...n,nodes:n.nodes.map(n=>n.id===e&&(n.x!==t.x||n.y!==t.y)?{...n,x:t.x,y:t.y}:n)})},[]),ce=(0,Y.useCallback)(()=>{if(!F)return;let e=crypto.randomUUID();l(t=>t&&{...t,nodes:[...t.nodes,{...F,id:e,label:`${F.label} 副本`,x:F.x+25,y:F.y+25}]}),d(e),p(``),n(i(`workflows:workflowsPage.nodeDuplicated`),`info`)},[n,F,i]),le=(0,Y.useCallback)(()=>{F&&oe([F.id])},[oe,F]),ue=(0,Y.useCallback)(async e=>{if(!F||F.kind!==`notification`)return;let t=F.notificationTargets;if(e!==`browser`){if(t.includes(e)){L({notificationTargets:t.filter(t=>t!==e)});return}if(!a.notificationTargets[e]?.enabled)return;L({notificationTargets:[...t,e]});return}if(t.includes(e)&&a.notificationTargets.browser.enabled&&O===`granted`){L({notificationTargets:t.filter(t=>t!==e)});return}let r=O;if(D){await A();let e=await window.pisperDesktop?.getNotificationStatus?.();r=e?.permission||(e?.supported===!1?`unsupported`:`granted`)}else if(r=await qe(),k(r),r===`granted`)try{await Ke()}catch(e){n(Q(e),`error`);return}if(r!==`granted`){n(i(r===`unsupported`?`workflows:workflowsPage.systemNotificationsUnsupported`:`workflows:workflowsPage.systemNotificationPermissionRequired`),`error`);return}try{let r=await G(`/api/settings/notifications/browser`,{method:`PATCH`,body:JSON.stringify({enabled:!0})});o(e=>({...e,notificationTargets:{...e.notificationTargets,browser:{enabled:r.browser.enabled}}})),L({notificationTargets:t.includes(e)?t:[...t,e]}),n(i(`workflows:workflowsPage.systemNotificationsEnabled`))}catch(e){n(Q(e),`error`)}},[a.notificationTargets,D,n,A,F,O,i,L]),B=(0,Y.useCallback)(async(t=`draft`,s=!1)=>{if(!c||!T.current||w.current)return null;if(x.current.size)return n(i(`workflows:inputs.uploading`),`info`),null;let u=Pn(c.inputs,i);if(u)return y(u),n(u,`error`),null;_(!0),y(``);let d=new AbortController;w.current=d;try{let u=new Set(Object.entries(a.notificationTargets).filter(([e,t])=>t.enabled&&(e!==`browser`||O===`granted`||O===`checking`)).map(([e])=>e)),f={...c,status:t,notifications:c.notifications.filter(e=>u.has(e)),nodes:c.nodes.map(e=>({...e,notificationTargets:e.notificationTargets.filter(e=>u.has(e))}))},p=c.id?await G(`/api/workflows/${encodeURIComponent(c.id)}`,{method:`PATCH`,body:JSON.stringify(f),signal:d.signal}):await G(`/api/workflows`,{method:`POST`,body:JSON.stringify(f),signal:d.signal});return d.signal.throwIfAborted(),o(p.state),l(e=>e===c?structuredClone(p.workflow):e&&{...e,id:p.workflow.id,revision:p.workflow.revision}),e===`new`&&!s&&r(p.workflow.id,!1),s||n(i(t===`published`?`workflows:workflowsPage.workflowPublished`:`workflows:workflowsPage.workflowDraftSaved`)),p.workflow}catch(e){if(d.signal.aborted)return null;let t=Q(e);return y(t),n(t,`error`),null}finally{w.current===d&&(w.current=null,T.current&&_(!1))}},[a.notificationTargets,c,n,r,O,i,e]),V=(0,Y.useCallback)(async(t,a)=>{let s=await B(c?.status||`draft`,!0);if(!s||!T.current)return!1;if(x.current.size)return n(i(`workflows:inputs.uploading`),`info`),!1;let l=new AbortController;w.current=l,_(!0);try{a?await gn.runNode(s.id,a.nodeId,a.sourceRunId,l.signal):await G(`/api/workflows/${encodeURIComponent(s.id)}/run`,{method:`POST`,body:JSON.stringify({inputs:t}),signal:l.signal}),l.signal.throwIfAborted();let e=await G(`/api/workflows`,{signal:l.signal});return l.signal.throwIfAborted(),o(e),n(i(`workflows:workflowsPage.workflowStarted`)),!0}catch(e){if(l.signal.aborted)return!1;let t=Q(e);return y(t),n(t,`error`),!1}finally{w.current===l&&(w.current=null,T.current&&_(!1)),T.current&&!l.signal.aborted&&e===`new`&&r(s.id,!0)}},[c?.status,n,r,B,i,e]),de=(0,Y.useCallback)(e=>V(e),[V]),H=(0,Y.useCallback)((e,t)=>V(void 0,{nodeId:e,sourceRunId:t}),[V]),fe=(0,Y.useCallback)(async()=>{if(!T.current||w.current||!N||![`running`,`waiting_approval`].includes(N.status))return;let e=new AbortController;w.current=e,_(!0);try{await G(`/api/workflow-runs/${encodeURIComponent(N.id)}/stop`,{method:`POST`,body:`{}`,signal:e.signal}),e.signal.throwIfAborted();let t=await G(`/api/workflows`,{signal:e.signal});e.signal.throwIfAborted(),o(t),n(i(`workflows:workflowsPage.stoppingWorkflow`),`info`)}catch(t){if(e.signal.aborted)return;let r=Q(t);y(r),n(r,`error`)}finally{w.current===e&&(w.current=null,T.current&&_(!1))}},[N,n,i]),pe=(0,Y.useCallback)(()=>B(`published`),[B]);return{catalog:a,draft:c,selectedNode:F,selectedEdge:ee,selectedNodeId:u,selectedEdgeId:f,currentRun:N,loading:m,retryLoad:M,busy:g||S,inputUploadsPending:S,onInputUploadBusy:E,running:P,error:v,systemNotificationPermission:O,updateDraft:I,updateNode:L,addEdge:ie,removeEdges:R,removeSelectedEdge:ae,removeNodes:oe,addNode:se,moveNode:z,copyNode:ce,deleteNode:le,toggleNotification:ue,selectNode:te,selectEdge:ne,clearSelection:re,saveWorkflow:B,runWorkflow:de,runImageNode:H,stopWorkflow:fe,publishWorkflow:pe}}function Xn({workflow:e,onClose:t,onRun:n}){let{t:r}=s(),i=(0,Y.useId)(),a={id:`task`,name:`task`,label:r(`workflows:inputs.task`),description:r(`workflows:inputs.contextHint`),type:`text`,required:!1,defaultValue:``},o=e.inputs.length?e.inputs:[a],[c,l]=(0,Y.useState)(()=>Object.fromEntries(o.map(e=>[e.name,Mn(e)]))),[u,f]=(0,Y.useState)(!1),[p,m]=(0,Y.useState)(``),[h,g]=(0,Y.useState)([]),_=(0,Y.useRef)(new Set),v=(0,Y.useRef)(c);v.current=c;let y=(0,Y.useRef)(!0);(0,Y.useEffect)(()=>(y.current=!0,()=>{y.current=!1}),[]);let b=(e,t)=>{let n={...v.current,[e]:t};v.current=n,l(n)},x=(0,Y.useCallback)((e,t)=>{t?_.current.add(e):_.current.delete(e),y.current&&g([..._.current])},[]),C=(0,Y.useRef)(!1),w=async()=>{if(C.current||_.current.size)return;let e=v.current,i=Fn(o,e,r);if(i){m(i);return}C.current=!0,f(!0),m(``);try{let i=await n(In(o,e));if(!y.current)return;i?t():m(r(`workflows:inputs.startFailed`))}catch{y.current&&m(r(`workflows:inputs.startFailed`))}finally{C.current=!1,y.current&&f(!1)}};return(0,X.jsx)(Ne,{open:!0,onOpenChange:e=>{!e&&!C.current&&t()},children:(0,X.jsxs)(je,{className:`max-h-[85vh] overflow-y-auto supports-[height:100dvh]:max-h-[85dvh] sm:max-w-xl`,showCloseButton:!u,children:[(0,X.jsxs)(Ae,{children:[(0,X.jsx)(Me,{children:r(`workflows:inputs.runTitle`,{name:e.name})}),(0,X.jsx)(ke,{children:r(`workflows:inputs.runHint`)})]}),(0,X.jsxs)(`form`,{className:`space-y-4`,onSubmit:e=>{e.preventDefault(),w()},children:[qt(e)>0&&(0,X.jsx)(`p`,{className:`rounded-lg bg-muted p-3 text-sm`,children:r(`workflows:imageNodes.requestEstimate`,{count:qt(e)})}),o.map(e=>(0,X.jsxs)(`div`,{className:`space-y-1.5`,children:[e.type!==`text`&&e.type!==`image`&&e.type!==`video`&&(0,X.jsxs)(d,{htmlFor:`${i}-${e.id}`,className:`flex items-center gap-1`,children:[e.label,e.required&&(0,X.jsx)(`span`,{className:`text-destructive`,"aria-hidden":`true`,children:`*`})]}),e.type===`boolean`?(0,X.jsx)(S,{id:`${i}-${e.id}`,checked:c[e.name]===!0,disabled:u,onCheckedChange:t=>b(e.name,t)}):e.type===`text`||e.type===`image`||e.type===`video`?(0,X.jsx)(An,{input:e,value:c[e.name],disabled:u,label:`${e.label}${e.required?` *`:``}`,onBusyChange:x,onChange:t=>b(e.name,t)}):(0,X.jsx)(q,{id:`${i}-${e.id}`,type:e.type===`number`?`number`:`text`,step:e.type===`number`?`any`:void 0,value:String(c[e.name]??``),required:e.required,disabled:u,"aria-describedby":e.description?`${i}-${e.id}-description`:void 0,onChange:t=>b(e.name,t.target.value)}),e.description&&(0,X.jsx)(`p`,{id:`${i}-${e.id}-description`,className:`text-xs leading-relaxed text-muted-foreground`,children:e.description})]},e.id)),p&&(0,X.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:p}),(0,X.jsxs)(De,{children:[(0,X.jsx)(K,{type:`button`,variant:`outline`,disabled:u,onClick:()=>{C.current||t()},children:r(`workflows:sprite.cancel`)}),(0,X.jsxs)(K,{type:`submit`,disabled:u||h.length>0,children:[u?(0,X.jsx)(ce,{className:`animate-spin`}):(0,X.jsx)(V,{}),r(`workflows:workflowsPage.run`)]})]})]})]})})}function Zn({message:e}){return e?(0,X.jsxs)(Ee,{variant:`destructive`,children:[(0,X.jsx)(ye,{}),(0,X.jsx)(Te,{children:e})]}):null}function Qn({label:e}){return(0,X.jsxs)(ze,{size:`sm`,className:`workflow-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] [border:1px_solid_var(--stroke)] rounded-[var(--r-xs)] bg-[var(--panel)] text-[var(--text)] shadow-[0_1px_2px_var(--sh-edge),0_14px_32px_-24px_var(--shadow)] gap-2 py-4`,children:[(0,X.jsx)(H,{className:`animate-spin`,size:23}),(0,X.jsx)(`h2`,{children:e})]})}function $n({notify:e,requestConfirm:r,query:i=``}){let{t:a,language:o}=s(),c=t(),[l,u]=n(),d=l.get(`view`),f=d===`runs`||d===`templates`?d:`workflows`,p=()=>c(`${_t(`new`)}?template=sprite`),m=e=>u(t=>{let n=new URLSearchParams(t);return e===`workflows`?n.delete(`view`):n.set(`view`,e),n}),h=an({notify:e,requestConfirm:r,query:i}),[g,_]=(0,Y.useState)(null);return h.loading?(0,X.jsx)(Qn,{label:a(`workflows:workflowsPage.loadingWorkflows`)}):(0,X.jsxs)(`div`,{className:`workflows-page flex min-h-[100%] flex-col gap-[12px]`,children:[g&&(0,X.jsx)(Xn,{workflow:g,onClose:()=>_(null),onRun:e=>h.runWorkflow(g,e)}),(0,X.jsx)(Zn,{message:h.error}),(0,X.jsxs)(`div`,{className:`workflow-page-toolbar max-[650px]:items-stretch max-[650px]:flex-col max-[650px]:gap-[8px] flex min-w-0 items-center justify-between gap-[16px]`,children:[(0,X.jsx)(cn,{value:f,t:a,onChange:m}),(0,X.jsx)(fn,{data:h.data,t:a})]}),f===`workflows`&&(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4 rounded-2xl border bg-card p-5`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,X.jsx)(`span`,{className:`grid size-11 shrink-0 place-items-center rounded-xl bg-[var(--brand-blue-soft)] text-[var(--star-strong)]`,children:(0,X.jsx)(yt,{className:`size-5`})}),(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-medium`,children:a(`workflows:sprite.title`)}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:a(`workflows:sprite.description`)})]})]}),(0,X.jsxs)(K,{variant:`outline`,onClick:p,children:[a(`workflows:sprite.openStudio`),(0,X.jsx)(k,{className:`size-4`})]})]}),f===`workflows`?(0,X.jsx)(ln,{workflows:h.visibleWorkflows,runs:h.data.runs,busyId:h.busyId,language:o,t:a,onRun:_,onEdit:e=>c(_t(e)),onDuplicate:e=>void h.duplicateWorkflow(e),onExport:e=>void h.exportWorkflow(e),onImport:e=>void h.importWorkflow(e),onDelete:e=>void h.removeWorkflow(e)}):f===`runs`?(0,X.jsx)(un,{runs:h.data.runs,busyId:h.busyId,language:o,t:a,onStop:e=>void h.stopRun(e),onRetry:e=>void h.retryRun(e),onApproval:(e,t,n)=>void h.resolveApproval(e,t,n)}):(0,X.jsx)(dn,{t:a,onOpenTemplate:e=>c(`${_t(`new`)}?template=${encodeURIComponent(e)}`)})]})}function er({notify:e,registerPrimaryAction:i,registerWorkflowActions:a}){let{t:o,language:c}=s(),l=t(),{workflowId:u=`new`}=r(),[d]=n(),f=(0,Y.useCallback)(e=>{l(_t(e),{replace:!0})},[l]),p=Yn({workflowId:u,templateId:d.get(`template`),notify:e,onCreated:f}),{busy:m,publishWorkflow:h,runWorkflow:g,running:_,saveWorkflow:v,stopWorkflow:y}=p,[b,x]=(0,Y.useState)(!1),[S,C]=(0,Y.useState)(!1),[w,T]=(0,Y.useState)(!1),D=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{let e=D.current;if(!e)return;let t=()=>T(e.clientWidth>=1e3);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[p.loading]);let k=(0,Y.useCallback)(()=>{!m&&!_&&x(!0)},[m,_]);if(Ge(i,h),(0,Y.useEffect)(()=>a?.({save:()=>v(`draft`),run:_?y:k,busy:m||p.loading||!p.draft,running:_}),[m,p.draft,p.loading,a,k,_,v,y]),p.loading)return(0,X.jsx)(Qn,{label:o(`workflows:workflowsPage.loadingWorkflowEditor`)});if(!p.draft)return(0,X.jsxs)(ze,{size:`sm`,className:`gap-4 rounded-xl border bg-card p-6`,children:[(0,X.jsx)(ye,{className:`size-6 text-destructive`,"aria-hidden":`true`}),(0,X.jsx)(`h2`,{children:o(`workflows:workflowsPage.workflowEditorLoadFailed`)}),(0,X.jsx)(Zn,{message:p.error}),(0,X.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[(0,X.jsxs)(K,{onClick:p.retryLoad,children:[(0,X.jsx)(H,{className:`size-4`}),o(`workflows:workflowsPage.retryLoading`)]}),(0,X.jsx)(K,{variant:`outline`,onClick:()=>l(gt.workflows),children:o(`workflows:workflowsPage.backToWorkflows`)})]})]});let A=(0,X.jsx)(Jn,{draft:p.draft,catalog:p.catalog,selectedNode:p.selectedNode,selectedEdge:p.selectedEdge,currentRun:p.currentRun,onRunImageNode:(e,t)=>{p.runImageNode(e,t)},imageRunBusy:p.busy||p.running,language:c,t:o,systemNotificationPermission:p.systemNotificationPermission,onUpdateNode:p.updateNode,onToggleNotification:p.toggleNotification,onDeleteEdge:p.removeSelectedEdge,onCopyNode:p.copyNode,onDeleteNode:p.deleteNode,onOpenChannels:()=>l(gt.channels),onOpenSystemNotificationSettings:()=>{if(window.pisperDesktop?.openNotificationSettings){window.pisperDesktop.openNotificationSettings();return}l(`/config/notifications`)}}),j=p.selectedEdge?o(`workflows:workflowsPage.selectedConnection`):o(`workflows:editor.nodeProperties`);return(0,X.jsxs)(`div`,{ref:D,className:`workflow-editor-page @container/workflow flex min-w-0 flex-col gap-3`,children:[b&&(0,X.jsx)(Xn,{workflow:p.draft,onClose:()=>x(!1),onRun:g}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2 rounded-xl border bg-card p-2`,children:[(0,X.jsx)(`nav`,{"aria-label":o(`workflows:workflowsPage.editorNavigation`),children:(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>l(gt.workflows),children:[(0,X.jsx)(O,{}),o(`workflows:workflowsPage.backToWorkflows`)]})}),(0,X.jsx)(`div`,{className:`hidden h-5 w-px bg-border @min-[640px]/workflow:block`}),(0,X.jsx)(`p`,{className:`min-w-0 flex-1 truncate px-1 text-sm font-medium`,title:p.draft.name,children:p.draft.name}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 max-[480px]:w-full max-[480px]:justify-end`,children:[(0,X.jsx)(Zt,{nodeCount:p.draft.nodes.length,t:o,onAddNode:p.addNode}),(0,X.jsxs)(Ne,{children:[(0,X.jsx)(Oe,{asChild:!0,children:(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,children:[(0,X.jsx)(ge,{}),o(`workflows:workflowsPage.workflowSettings`)]})}),(0,X.jsxs)(je,{className:`sm:max-w-xl`,children:[(0,X.jsxs)(Ae,{children:[(0,X.jsx)(Me,{children:o(`workflows:workflowsPage.workflowSettings`)}),(0,X.jsx)(ke,{children:o(`workflows:editor.settingsDescription`)})]}),(0,X.jsx)(Wn,{draft:p.draft,catalog:p.catalog,t:o,onUpdateDraft:p.updateDraft,onInputUploadBusy:p.onInputUploadBusy})]})]}),!w&&(0,X.jsxs)(K,{variant:`ghost`,size:`sm`,onClick:()=>C(!0),children:[(0,X.jsx)(bt,{}),o(`workflows:editor.nodeProperties`)]})]})]}),(0,X.jsx)(Zn,{message:p.error}),p.running&&p.currentRun&&(0,X.jsx)(On,{run:p.currentRun,t:o}),(0,X.jsxs)(`div`,{className:E(`builder-layout grid h-[max(440px,calc(100vh-220px))] min-h-[440px] min-w-0 overflow-hidden rounded-xl border bg-card supports-[height:100dvh]:h-[max(440px,calc(100dvh-220px))]`,w?`grid-cols-[minmax(0,1fr)_320px]`:`grid-cols-1`),children:[(0,X.jsx)(Qt,{draft:p.draft,selectedNodeId:p.selectedNodeId,selectedEdgeId:p.selectedEdgeId,t:o,onAddNode:p.addNode,onConnect:p.addEdge,onMoveNode:p.moveNode,onSelectNode:e=>{p.selectNode(e),C(!0)},onSelectEdge:e=>{p.selectEdge(e),C(!0)},onClearSelection:p.clearSelection,onDeleteNodes:p.removeNodes,onDeleteEdges:p.removeEdges}),w&&(0,X.jsxs)(`aside`,{className:`flex min-h-0 min-w-0 flex-col border-l bg-card`,"aria-label":j,children:[(0,X.jsx)(`header`,{className:`border-b px-4 py-3`,children:(0,X.jsx)(`h2`,{className:`text-sm font-medium`,children:j})}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain p-4`,children:A})]})]}),!w&&(0,X.jsx)(We,{open:S,onOpenChange:C,children:(0,X.jsxs)(He,{className:`gap-0 data-[side=right]:w-[min(400px,100vw)] data-[side=right]:sm:max-w-[400px]`,children:[(0,X.jsxs)(Ve,{className:`border-b pr-12`,children:[(0,X.jsx)(Be,{children:j}),(0,X.jsx)(Ue,{className:`sr-only`,children:o(`workflows:editor.inspectorDescription`)})]}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain p-4`,children:A})]})})]})}export{er as WorkflowBuilder,$n as WorkflowsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{t as r}from"./use-i18n-a84Zp9dV.js";import{i}from"./dist-Cfh4kzCK.js";import{a,c as o,o as s,r as c,s as l,t as u}from"./dist-B_a0oV4U.js";import{t as d}from"./dist-C3P9WH0T.js";import{t as f}from"./dist-D8Wfxh48.js";import{t as p}from"./utils-C8uzG5AZ.js";import{t as m}from"./createLucideIcon-Cd-3GVxJ.js";import{t as h}from"./arrow-up-DST6-qVQ.js";import{t as g}from"./check-2vYc6QaP.js";import{t as _}from"./chevron-right-C3t2Rckj.js";import{t as v}from"./folder-DPM8D8cf.js";import{t as y}from"./house-BNrzTkx9.js";import{t as b}from"./loader-circle-BOwQzHB-.js";import{t as x}from"./refresh-cw-TbWxTY4K.js";import{t as S}from"./triangle-alert-CE1q54ci.js";import{t as C}from"./api-YI8_cHpR.js";import{t as w}from"./button-CQA36izu.js";import{n as T,t as E}from"./alert-QoPGoIY6.js";import{a as D,i as O,o as k,r as ee,s as te,t as ne}from"./dialog-D-ER2p-D.js";import{t as re}from"./input-CvjGYteF.js";var A=e(t(),1),j=n(),M=Object.defineProperty,N=(e,t)=>M(e,`name`,{value:t,configurable:!0});function P(e,t){return A.useReducer((e,n)=>t[e][n]??e,e)}N(P,`useStateMachine`);var F=`ScrollArea`,[I,ie]=l(F),[L,R]=I(F),z=A.forwardRef(N(function(e,t){let{__scopeScrollArea:n,type:r=`hover`,dir:a,scrollHideDelay:s=600,...c}=e,[l,u]=A.useState(null),[f,p]=A.useState(null),[m,h]=A.useState(null),[g,_]=A.useState(null),[v,y]=A.useState(null),[b,x]=A.useState(0),[S,C]=A.useState(0),[w,T]=A.useState(!1),[E,D]=A.useState(!1),O=i(t,u),k=d(a);return(0,j.jsx)(L,{scope:n,type:r,dir:k,scrollHideDelay:s,scrollArea:l,viewport:f,onViewportChange:p,content:m,onContentChange:h,scrollbarX:g,onScrollbarXChange:_,scrollbarXEnabled:w,onScrollbarXEnabledChange:T,scrollbarY:v,onScrollbarYChange:y,scrollbarYEnabled:E,onScrollbarYEnabledChange:D,onCornerWidthChange:x,onCornerHeightChange:C,children:(0,j.jsx)(o.div,{dir:k,...c,ref:O,style:{position:`relative`,"--radix-scroll-area-corner-width":b+`px`,"--radix-scroll-area-corner-height":S+`px`,...e.style}})})},`ScrollArea`)),B=`ScrollAreaViewport`,V=A.forwardRef(N(function(e,t){let{__scopeScrollArea:n,children:r,nonce:a,...s}=e,c=R(B,n),l=A.useRef(null),u=i(t,l,c.onViewportChange);return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(ae,{nonce:a}),(0,j.jsx)(o.div,{"data-radix-scroll-area-viewport":``,...s,ref:u,style:{overflowX:c.scrollbarXEnabled?`scroll`:`hidden`,overflowY:c.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,j.jsx)(`div`,{ref:c.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})},`ScrollAreaViewport`)),ae=A.memo(N(function({nonce:e}){return(0,j.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:e})},`ScrollAreaViewportStyle`),(e,t)=>e.nonce===t.nonce),H=`ScrollAreaScrollbar`,oe=A.forwardRef(N(function(e,t){let{forceMount:n,...r}=e,i=R(H,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return A.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,j.jsx)(se,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,j.jsx)(ce,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,j.jsx)(le,{...r,ref:t,forceMount:n}):i.type===`always`?(0,j.jsx)(U,{...r,ref:t,"data-state":`visible`}):null},`ScrollAreaScrollbar`)),se=A.forwardRef(N(function(e,t){let{forceMount:n,...r}=e,i=R(H,e.__scopeScrollArea),[a,o]=A.useState(!1);return A.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=N(()=>{window.clearTimeout(t),o(!0)},`handlePointerEnter`),r=N(()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)},`handlePointerLeave`);return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,j.jsx)(c,{present:n||a,children:(0,j.jsx)(le,{"data-state":a?`visible`:`hidden`,...r,ref:t})})},`ScrollAreaScrollbarHover`)),ce=A.forwardRef(N(function(e,t){let{forceMount:n,...r}=e,i=R(H,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=Z(()=>u(`SCROLL_END`),100),[l,u]=P(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return A.useEffect(()=>{if(l===`idle`){let e=window.setTimeout(()=>u(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[l,i.scrollHideDelay,u]),A.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=N(()=>{let r=e[t];n!==r&&(u(`SCROLL`),o()),n=r},`handleScroll`);return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,u,o]),(0,j.jsx)(c,{present:n||l!==`hidden`,children:(0,j.jsx)(U,{"data-state":l===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:s(e.onPointerEnter,()=>u(`POINTER_ENTER`)),onPointerLeave:s(e.onPointerLeave,()=>u(`POINTER_LEAVE`))})})},`ScrollAreaScrollbarScroll`)),le=A.forwardRef(N(function(e,t){let n=R(H,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=A.useState(!1),s=e.orientation===`horizontal`,l=Z(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return Q(n.viewport,l),Q(n.content,l),(0,j.jsx)(c,{present:r||a,children:(0,j.jsx)(U,{"data-state":a?`visible`:`hidden`,...i,ref:t})})},`ScrollAreaScrollbarAuto`)),U=A.forwardRef(N(function(e,t){let{orientation:n=`vertical`,...r}=e,i=R(H,e.__scopeScrollArea),a=A.useRef(null),o=A.useRef(0),[s,c]=A.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=K(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:N(e=>a.current=e,`onThumbChange`),onThumbPointerUp:N(()=>o.current=0,`onThumbPointerUp`),onThumbPointerDown:N(e=>o.current=e,`onThumbPointerDown`)};function d(e,t){return be(e,o.current,s,t)}return N(d,`getScrollPosition`),n===`horizontal`?(0,j.jsx)(ue,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=J(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,j.jsx)(de,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=J(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null},`ScrollAreaScrollbarVisible`)),ue=A.forwardRef(N(function(e,t){let{sizes:n,onSizesChange:r,...a}=e,o=R(H,e.__scopeScrollArea),[s,c]=A.useState(),l=A.useRef(null),u=i(t,l,o.onScrollbarXChange);return A.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,j.jsx)(me,{"data-orientation":`horizontal`,...a,ref:u,sizes:n,style:{bottom:0,left:o.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:o.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":q(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),X(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:G(s.paddingLeft),paddingEnd:G(s.paddingRight)}})}})},`ScrollAreaScrollbarX`)),de=A.forwardRef(N(function(e,t){let{sizes:n,onSizesChange:r,...a}=e,o=R(H,e.__scopeScrollArea),[s,c]=A.useState(),l=A.useRef(null),u=i(t,l,o.onScrollbarYChange);return A.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,j.jsx)(me,{"data-orientation":`vertical`,...a,ref:u,sizes:n,style:{top:0,right:o.dir===`ltr`?0:void 0,left:o.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":q(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),X(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:G(s.paddingTop),paddingEnd:G(s.paddingBottom)}})}})},`ScrollAreaScrollbarY`)),[fe,pe]=I(H),me=A.forwardRef(N(function(e,t){let{__scopeScrollArea:n,sizes:r,hasThumb:a,onThumbChange:c,onThumbPointerUp:l,onThumbPointerDown:d,onThumbPositionChange:f,onDragScroll:p,onWheelScroll:m,onResize:h,...g}=e,_=R(H,n),[v,y]=A.useState(null),b=i(t,y),x=A.useRef(null),S=A.useRef(``),C=_.viewport,w=r.content-r.viewport,T=u(m),E=u(f),D=Z(h,10);function O(e){if(x.current){let t=e.clientX-x.current.left,n=e.clientY-x.current.top;p({x:t,y:n})}}return N(O,`handleDragScroll`),A.useEffect(()=>{let e=N(e=>{let t=e.target;v?.contains(t)&&T(e,w)},`handleWheel`);return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[C,v,w,T]),A.useEffect(E,[r,E]),Q(v,D),Q(_.content,D),(0,j.jsx)(fe,{scope:n,scrollbar:v,hasThumb:a,onThumbChange:u(c),onThumbPointerUp:u(l),onThumbPositionChange:E,onThumbPointerDown:u(d),children:(0,j.jsx)(o.div,{...g,ref:b,style:{position:`absolute`,...g.style},onPointerDown:s(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),x.current=v.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,_.viewport&&(_.viewport.style.scrollBehavior=`auto`),O(e))}),onPointerMove:s(e.onPointerMove,O),onPointerUp:s(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,_.viewport&&(_.viewport.style.scrollBehavior=``),x.current=null})})})},`ScrollAreaScrollbarImpl`)),W=`ScrollAreaThumb`,he=A.forwardRef(N(function(e,t){let{forceMount:n,...r}=e,i=pe(W,e.__scopeScrollArea);return(0,j.jsx)(c,{present:n||i.hasThumb,children:(0,j.jsx)(ge,{ref:t,...r})})},`ScrollAreaThumb`)),ge=A.forwardRef(N(function(e,t){let{__scopeScrollArea:n,style:r,...a}=e,c=R(W,n),l=pe(W,n),{onThumbPositionChange:u}=l,d=i(t,l.onThumbChange),f=A.useRef(void 0),p=Z(()=>{f.current&&=(f.current(),void 0)},100);return A.useEffect(()=>{let e=c.viewport;if(e){let t=N(()=>{if(p(),!f.current){let t=xe(e,u);f.current=t,u()}},`handleScroll`);return u(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[c.viewport,p,u]),(0,j.jsx)(o.div,{"data-state":l.hasThumb?`visible`:`hidden`,...a,ref:d,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:s(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;l.onThumbPointerDown({x:n,y:r})}),onPointerUp:s(e.onPointerUp,l.onThumbPointerUp)})},`ScrollAreaThumbImpl`)),_e=`ScrollAreaCorner`,ve=A.forwardRef(N(function(e,t){let n=R(_e,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,j.jsx)(ye,{...e,ref:t}):null},`ScrollAreaCorner`)),ye=A.forwardRef(N(function(e,t){let{__scopeScrollArea:n,...r}=e,i=R(_e,n),[a,s]=A.useState(0),[c,l]=A.useState(0),u=!!(a&&c),{onCornerWidthChange:d,onCornerHeightChange:f}=i;return Q(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),l(e)}),Q(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),s(e)}),A.useEffect(()=>()=>{d(0),f(0)},[d,f]),u?(0,j.jsx)(o.div,{...r,ref:t,style:{width:a,height:c,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null},`ScrollAreaCornerImpl`));function G(e){return e?parseInt(e,10):0}N(G,`toInt`);function K(e,t){let n=e/t;return isNaN(n)?0:n}N(K,`getThumbRatio`);function q(e){let t=K(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}N(q,`getThumbSize`);function be(e,t,n,r=`ltr`){let i=q(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return Y([c,l],d)(e)}N(be,`getScrollPositionFromPointer`);function J(e,t,n=`ltr`){let r=q(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=n===`ltr`?[0,o]:[o*-1,0],l=f(e,c);return Y([0,o],[0,s])(l)}N(J,`getThumbOffsetFromScroll`);function Y(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}N(Y,`linearScale`);function X(e,t){return e>0&&e<t}N(X,`isScrollingWithinScrollbarBounds`);var xe=N((e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return N((function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)}),`loop`)(),()=>window.cancelAnimationFrame(r)},`addUnlinkedScrollListener`);function Z(e,t){let n=u(e),r=A.useRef(0);return A.useEffect(()=>()=>window.clearTimeout(r.current),[]),A.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}N(Z,`useDebounceCallback`);function Q(e,t){let n=u(t);a(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}N(Q,`useResizeObserver`);var Se=z,Ce=V,we=ve,Te=m(`folder-input`,[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]),Ee=m(`square-pen`,[[`path`,{d:`M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`,key:`1m0v6g`}],[`path`,{d:`M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z`,key:`ohrbg2`}]]);function De({className:e,children:t,...n}){return(0,j.jsxs)(Se,{"data-slot":`scroll-area`,className:p(`relative`,e),...n,children:[(0,j.jsx)(Ce,{"data-slot":`scroll-area-viewport`,className:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1`,children:t}),(0,j.jsx)(Oe,{}),(0,j.jsx)(we,{})]})}function Oe({className:e,orientation:t=`vertical`,...n}){return(0,j.jsx)(oe,{"data-slot":`scroll-area-scrollbar`,"data-orientation":t,orientation:t,className:p(`flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent`,e),...n,children:(0,j.jsx)(he,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}function $(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}async function ke(){return window.__PISPER_MOBILE_APP__?(await $(`mobile_state`)).mode:null}async function Ae(){if(window.__PISPER_MOBILE_PLATFORM__!==`android`)throw Error(`workspace_import_unsupported`);let e=await $(`mobile_state`);if(e.mode!==`local`||!e.onDevice?.running)throw Error(`workspace_import_requires_local_runtime`);let t=await $(`mobile_import_workspace_directory`);if(t.path===null)return null;if(typeof t.path!=`string`||!t.path.startsWith(`/`))throw Error(`workspace_import_invalid_path`);return t.path}function je({open:e,initialPath:t=``,description:n,onOpenChange:i,onSelect:a}){let{t:o}=r(),[s,c]=(0,A.useState)(t),[l,u]=(0,A.useState)(null),[d,f]=(0,A.useState)(!1),[p,m]=(0,A.useState)(!1),[M,N]=(0,A.useState)(!1),[P,F]=(0,A.useState)(!1),[I,ie]=(0,A.useState)(null),[L,R]=(0,A.useState)(``),z=(0,A.useRef)(0),B=(0,A.useRef)(0),V=M||P,ae=I===`local`&&window.__PISPER_MOBILE_PLATFORM__===`android`,H=(0,A.useCallback)(async e=>{let t=++z.current;m(!0),R(``);try{let n=await C(`/api/directories?path=${encodeURIComponent(e.trim())}`);if(t!==z.current)return;if(!n||typeof n.path!=`string`||!n.path.trim()||n.parent!=null&&(typeof n.parent!=`string`||!n.parent.trim())||!Array.isArray(n.directories)||n.directories.some(e=>!e||typeof e.name!=`string`||!e.name.trim()||typeof e.path!=`string`||!e.path.trim()))throw Error(o(`common:workspacePicker.invalidListing`));c(n.path),u(n),f(!1)}catch(e){if(t!==z.current)return;R(e instanceof Error?e.message:String(e))}finally{t===z.current&&m(!1)}},[o]);(0,A.useEffect)(()=>{let n=++B.current;return e&&(c(t),u(null),N(!1),F(!1),f(!1),ie(null),H(t),ke().then(e=>{n===B.current&&ie(e)}).catch(e=>{n===B.current&&R(e instanceof Error?e.message:String(e))})),()=>{z.current+=1,B.current+=1}},[H,t,e]);let oe=e=>{e.preventDefault(),!V&&!p&&H(s)},se=async()=>{let e=B.current;F(!0),R(``);try{let t=await Ae();e===B.current&&t&&await H(t)}catch(t){e===B.current&&R(t instanceof Error?t.message:String(t))}finally{e===B.current&&F(!1)}},ce=async()=>{if(!(!l||V||p||L||s!==l.path)){N(!0),R(``);try{await a(l.path),i(!1)}catch(e){R(e instanceof Error?e.message:String(e))}finally{N(!1)}}};return(0,j.jsx)(ne,{open:e,onOpenChange:e=>!V&&i(e),children:(0,j.jsxs)(ee,{showCloseButton:!V,className:`max-w-[calc(100vw-24px)]! gap-0 overflow-hidden p-0 sm:max-w-[620px]!`,children:[(0,j.jsxs)(k,{className:`border-b px-4 py-3 pr-12`,children:[(0,j.jsx)(te,{children:o(`common:workspacePicker.setWorkingDirectory`)}),(0,j.jsx)(O,{children:n||o(`common:workspacePicker.selectDirectoryDescription`)})]}),ae&&(0,j.jsx)(`div`,{className:`border-b px-4 py-3`,children:(0,j.jsxs)(w,{type:`button`,variant:`outline`,className:`h-auto min-h-10 w-full whitespace-normal`,disabled:V||p,onClick:()=>void se(),children:[P?(0,j.jsx)(b,{className:`animate-spin`}):(0,j.jsx)(Te,{}),o(P?`common:workspacePicker.importingFolder`:`common:workspacePicker.importFolderCopy`)]})}),(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 px-4 py-3`,children:[(0,j.jsx)(w,{type:`button`,variant:`outline`,size:`icon`,title:o(`common:workspacePicker.parentFolder`),"aria-label":o(`common:workspacePicker.parentFolder`),disabled:p||V||!l?.parent,onClick:()=>l?.parent&&void H(l.parent),children:(0,j.jsx)(h,{})}),(0,j.jsx)(w,{type:`button`,variant:`outline`,size:`icon`,title:o(`common:workspacePicker.defaultFolder`),"aria-label":o(`common:workspacePicker.defaultFolder`),disabled:p||V,onClick:()=>void H(``),children:(0,j.jsx)(y,{})}),(0,j.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,j.jsx)(`div`,{className:`truncate text-[11px] text-content-muted`,children:o(I===`remote`?`common:workspacePicker.serverFolder`:`common:workspacePicker.workingDirectoryPath`)}),(0,j.jsx)(`div`,{className:`truncate font-mono text-xs`,title:l?.path||``,children:l?.path||o(`common:workspacePicker.defaultFolder`)})]}),(0,j.jsx)(w,{type:`button`,variant:`ghost`,size:`icon`,title:o(`common:workspacePicker.enterPath`),"aria-label":o(`common:workspacePicker.enterPath`),"aria-expanded":d,disabled:V||p,onClick:()=>{c(l?.path||t),f(e=>!e)},children:(0,j.jsx)(Ee,{})}),(0,j.jsx)(w,{type:`button`,variant:`ghost`,size:`icon`,title:o(`common:workspacePicker.refreshFolder`),"aria-label":o(`common:workspacePicker.refreshFolder`),disabled:V||p,onClick:()=>void H(l?.path||t),children:p?(0,j.jsx)(b,{className:`animate-spin`}):(0,j.jsx)(x,{})})]}),d&&(0,j.jsxs)(`form`,{className:`flex min-w-0 items-center gap-2 px-4 pb-3`,onSubmit:oe,children:[(0,j.jsx)(re,{className:`min-w-0 flex-1 font-mono text-[12px]`,value:s,disabled:V||p,"aria-label":o(`common:workspacePicker.workingDirectoryPath`),placeholder:o(`common:workspacePicker.enterAbsolutePath`),onChange:e=>c(e.target.value)}),(0,j.jsxs)(w,{type:`submit`,variant:`secondary`,disabled:p||V||!s.trim(),children:[(0,j.jsx)(_,{}),o(`common:workspacePicker.go`)]})]}),(0,j.jsx)(De,{className:`h-[min(340px,40dvh)] border-y bg-muted/20`,children:(0,j.jsxs)(`div`,{className:`p-2`,children:[!p&&l?.directories.map(e=>(0,j.jsxs)(`button`,{type:`button`,className:`grid min-h-11 w-full grid-cols-[24px_minmax(0,1fr)_20px] items-center rounded-md px-2 py-2 text-left text-[13px] hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,title:e.path,disabled:V,onClick:()=>void H(e.path),children:[(0,j.jsx)(v,{className:`size-4 text-content-muted`}),(0,j.jsx)(`span`,{className:`truncate`,children:e.name}),(0,j.jsx)(_,{className:`size-4 text-content-muted`})]},e.path)),p&&(0,j.jsxs)(`div`,{role:`status`,className:`flex h-32 items-center justify-center gap-2 text-content-muted`,children:[(0,j.jsx)(b,{className:`size-4 animate-spin`}),(0,j.jsx)(`span`,{children:o(`common:workspacePicker.readingFolder`)})]}),!p&&!L&&l&&!l.directories.length&&(0,j.jsx)(`div`,{className:`flex h-32 items-center justify-center text-sm text-content-muted`,children:o(`common:workspacePicker.thisFolderHasNoSubfolders`)})]})}),L&&(0,j.jsxs)(E,{variant:`destructive`,className:`mx-4 mt-3 w-auto`,children:[(0,j.jsx)(S,{}),(0,j.jsx)(T,{className:`min-w-0 break-words`,children:L})]}),(0,j.jsxs)(D,{className:`m-0 border-t-0 bg-transparent px-4 py-3`,children:[(0,j.jsx)(w,{type:`button`,variant:`outline`,disabled:V,onClick:()=>i(!1),children:o(`common:ui.cancel`)}),(0,j.jsxs)(w,{type:`button`,variant:`secondary`,disabled:p||V||!l||!!L||s!==l.path,onClick:()=>void ce(),children:[M?(0,j.jsx)(b,{className:`animate-spin`}):(0,j.jsx)(g,{}),o(M?`common:workspacePicker.switching`:`common:workspacePicker.useThisFolder`)]})]})]})})}export{je as WorkspacePicker,De as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,n as t,o as n}from"./http-
|
|
1
|
+
import{a as e,n as t,o as n}from"./http-Be2GB6DH.js";async function r(e,n={}){return t(e,n)}async function i(t,n){if(!t.ok)throw await e(t);if(!t.body)throw Error(`响应不包含可读取的数据流`);let r=t.body.getReader(),i=new TextDecoder,a=``,o=`message`,s=null,c=[],l=!1,u=()=>{if(!c.length)return o=`message`,!0;let e=JSON.parse(c.join(`
|
|
2
2
|
`)),t=n(o||`message`,e,{id:s})!==!1;return o=`message`,s=null,c=[],t},d=e=>{if(!e)return u();if(e.startsWith(`:`))return!0;let t=e.indexOf(`:`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(r.startsWith(` `)&&(r=r.slice(1)),n===`event`){if(c.length&&!u())return!1;o=r}else n===`data`?c.push(r):n===`id`&&(s=r||null);return!0},f=(e=!1)=>{let t=0;for(let n=0;n<a.length;n+=1){let r=a.charCodeAt(n);if(r!==10&&r!==13)continue;if(r===13&&n+1>=a.length&&!e)break;let i=a.slice(t,n);if(r===13&&a.charCodeAt(n+1)===10&&(n+=1),t=n+1,!d(i))return a=a.slice(t),!1}if(a=a.slice(t),e&&a){let e=a;if(a=``,!d(e))return!1}return!e||u()};try{for(;!l;){let{value:e,done:t}=await r.read();if(a+=i.decode(e||new Uint8Array,{stream:!t}),!f(t)){l=!0;break}if(t)break}}catch(e){throw l=!0,e}finally{l&&await r.cancel().catch(()=>{}),r.releaseLock()}}var a=5,o=400,s=`SSE 流在终态事件前结束`;async function c({open:e,resume:t,onEvent:r,maxAttempts:c=a,baseDelayMs:l=o}){let u=``,d=0,f=!1,p=null,m=async e=>{await i(e,(e,t,n)=>{if(n.id!=null){let e=Number(n.id);Number.isFinite(e)&&e>d&&(d=e)}let i=t;e===`run`&&typeof i?.runId==`string`&&(u=i.runId);try{let n=r(e,t);return(e===`done`||e===`error`||n===!1)&&(f=!0),n}catch(e){throw p=e,e}})},h=null;try{await m(await e())}catch(e){if(p)throw p;h=e}if(p)throw p;if(f)return;if(!u)throw h??Error(`流在建立运行前中断`);let g=0;for(;;){if(g+=1,g>c)throw h??Error(`流式连接中断且重挂失败`);await new Promise(e=>setTimeout(e,l*2**(g-1)));let e=d;try{if(await m(await t(u,d)),p)throw p;if(!f)throw Error(s);return}catch(t){if(p)throw p;if(t instanceof n&&t.status===409)throw t;h=t,d>e&&(g=0)}}}function l(e,t){let n=String(e||``);if(!t)return n;let r=Math.max(0,Math.min(n.length,Number(t?.start)||0));return`${n.slice(0,r)}${String(t?.text||``)}`}export{c as i,l as n,i as r,r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{n as r,t as i}from"./switch-Ci_hmu39.js";import{i as a,r as o,t as s}from"./tabs-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t,r as n}from"./vendor-react-DwNgTV1j.js";import{n as r,t as i}from"./switch-Ci_hmu39.js";import{i as a,r as o,t as s}from"./tabs-B60r4YwO.js";import{t as c}from"./utils-C8uzG5AZ.js";import{r as l,t as u}from"./card-BdUpL1KB.js";var d=e(t(),1),f=n(),p={blue:`bg-brand-soft text-brand-strong`,green:`bg-success-soft text-success-strong`,red:`bg-danger-soft text-danger`,amber:`bg-warning-soft text-warning-strong`,gray:`bg-surface-muted text-content-muted`};function m({className:e,...t}){return(0,f.jsx)(u,{className:c(`app-card [&_h2]:text-[16px] [&_h2]:tracking-[-.02em] [.detail-stack_>_&]:[flex:0_0_auto] block min-w-0 gap-0 overflow-visible rounded-surface border border-border bg-card p-3.5 py-3.5 text-card-foreground shadow-surface ring-0 backdrop-blur-[14px]`,e),...t})}function h({className:e,...t}){return(0,f.jsx)(`div`,{"data-slot":`app-card-header`,className:c(`flex min-w-0 items-start justify-between gap-3 [&_h2]:text-base [&_h2]:tracking-[0] [&_h3]:text-sm [&_p]:mt-1 [&_p]:text-[12px] [&_p]:text-content-muted [&_span]:text-[12px] [&_span]:text-content-muted [&_a]:text-[12px] [&_a]:font-semibold [&_a]:text-content-soft [&_a]:no-underline hover:[&_a]:text-content`,e),...t})}function g({className:e,...t}){return(0,f.jsx)(m,{"data-slot":`app-empty-state`,className:c(`col-span-full grid min-h-[300px] place-content-center justify-items-center text-content-muted [&>svg:first-child:not(.animate-spin)]:box-content [&>svg:first-child:not(.animate-spin)]:rounded-full [&>svg:first-child:not(.animate-spin)]:border [&>svg:first-child:not(.animate-spin)]:border-[var(--stroke-soft)] [&>svg:first-child:not(.animate-spin)]:bg-[radial-gradient(circle_at_50%_38%,var(--surface-subtle),var(--panel)_72%)] [&>svg:first-child:not(.animate-spin)]:p-[26px] [&>svg:first-child:not(.animate-spin)]:text-[var(--text-tertiary)] [&>svg:first-child:not(.animate-spin)]:shadow-[inset_0_1px_0_var(--surface-highlight),0_10px_26px_-18px_var(--shadow)] [&_h2]:mt-[18px] [&_h2]:text-[15px] [&_h2]:text-content [&_p]:mt-[7px] [&_p]:max-w-[360px] [&_p]:text-center [&_p]:text-[13px] [&_p]:leading-[1.6]`,e),...t})}function _({className:e,...t}){return(0,f.jsx)(`div`,{role:`alert`,"data-slot":`app-error`,className:c(`my-2.5 flex items-start gap-1.5 rounded-[var(--r-xs)] bg-danger-soft p-[7px] text-[13px] leading-[1.4] text-danger`,e),...t})}function v({className:e,...t}){return(0,f.jsx)(`div`,{"data-slot":`app-notice`,className:c(`mt-3 flex gap-2 rounded-[var(--r-sm)] bg-[var(--accent-soft)] p-[9px] text-[var(--star-strong)] [&>span]:flex [&>span]:flex-col [&>span]:gap-[3px] [&_strong]:text-[13px] [&_small]:text-[13px] [&_small]:leading-[1.4] [&_small]:text-content-muted`,e),...t})}function y({title:e}){return(0,f.jsx)(l,{role:`heading`,"aria-level":3,className:`app-section-title [.selection-list_&]:mb-[8px] [.model-config-heading_&]:m-0 [.skill-scope-head_&]:mb-[2px] text-[13px] leading-5 font-semibold tracking-[0] text-content-soft`,children:e})}function b({children:e,tone:t=`blue`,className:n,...i}){return(0,f.jsx)(r,{variant:`secondary`,className:c(`status-badge [.cli-settings-heading_&]:[align-self:center] h-auto min-h-6 rounded-full border-0 px-2 text-[12px] leading-4 font-medium tracking-[0]`,p[t],n),...i,children:e})}function x({defaultOn:e=!1,value:t,onChange:n,ariaLabel:r,density:a=`default`,className:o,onClick:s,...l}){let[u,p]=(0,d.useState)(e);return(0,f.jsx)(i,{checked:t??u,onCheckedChange:e=>{t===void 0&&p(e),n?.(e)},"aria-label":r,className:c(`app-switch data-[size=default]:h-8 data-[size=default]:w-12 data-checked:bg-primary data-unchecked:bg-control-muted [&_[data-slot=switch-thumb]]:size-6`,a===`compact`&&`data-[size=default]:h-6 data-[size=default]:w-10 [&_[data-slot=switch-thumb]]:size-5`,o),onClick:e=>{e.stopPropagation(),s?.(e)},...l})}function S({options:e,value:t,onChange:n,compact:r=!1,className:i}){return(0,f.jsx)(s,{value:t,onValueChange:n,className:c(`block min-w-0`,i),children:(0,f.jsx)(o,{className:c(`segmented min-h-9 max-w-full justify-start gap-0.5 rounded-lg bg-surface-muted p-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,r&&`compact w-auto border border-border bg-transparent`),children:e.map(e=>(0,f.jsx)(a,{className:`h-8 min-w-14 flex-none rounded-md border-0 px-3 text-[13px] font-medium tracking-[0] text-content-muted data-active:bg-card data-active:text-content data-active:shadow-sm`,value:e,children:e},e))})})}export{v as a,S as c,_ as i,b as l,h as n,y as o,g as r,x as s,m as t};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
function e(e){let t=String(e||``).trim().replace(/^#/,``);return/^[0-9a-fA-F]{6}$/.test(t)?`#${t.toLowerCase()}`:null}function t(e){return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16)}}function n({r:e,g:t,b:n}){let r=e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,`0`);return`#${r(e)}${r(t)}${r(n)}`}function r(e,t,r){return n({r:e.r+(t.r-e.r)*r,g:e.g+(t.g-e.g)*r,b:e.b+(t.b-e.b)*r})}var i={r:255,g:255,b:255},a={r:24,g:24,b:27};function o({r:e,g:t,b:n},r){return`rgba(${e}, ${t}, ${n}, ${r})`}function s(e){let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function c({r:e,g:t,b:n}){return .2126*s(e)+.7152*s(t)+.0722*s(n)}function l(e,t){let n=c(e),r=c(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function u(e){return l(e,i)>=l(e,a)?`#fff`:`#18181b`}function d(e){for(let n=.22;n<=1;n+=.04){let o=r(e,a,n);if(l(t(o),i)>=4.5)return o}return`#18181b`}function f(e){for(let n=.46;n<=1;n+=.04){let o=r(e,i,n);if(l(t(o),a)>=4.5)return o}return`#fff`}function p(e){let n=t(e),s=r(n,a,.12),c=d(n),l=r(n,i,.93),p=r(n,i,.72),m=r(n,i,.22),h=r(n,i,.33),g=f(n),_=t(m),v=u(n),y=u(_);return`:root[data-accent='custom'] {
|
|
2
|
+
--star: ${e};
|
|
3
|
+
--star-hover: ${s};
|
|
4
|
+
--star-strong: ${c};
|
|
5
|
+
--star-soft: ${l};
|
|
6
|
+
--star-border: ${p};
|
|
7
|
+
--on-accent: ${v};
|
|
8
|
+
--brand-blue: ${e};
|
|
9
|
+
--brand-blue-hover: ${s};
|
|
10
|
+
--brand-blue-strong: ${c};
|
|
11
|
+
--brand-blue-soft: ${l};
|
|
12
|
+
--brand-blue-border: ${p};
|
|
13
|
+
--accent-ring: ${o(n,.16)};
|
|
14
|
+
--focus: ${e};
|
|
15
|
+
--focus-ring: ${o(n,.18)};
|
|
16
|
+
}
|
|
17
|
+
:root[data-theme='dark'][data-accent='custom'] {
|
|
18
|
+
--star: ${m};
|
|
19
|
+
--star-hover: ${h};
|
|
20
|
+
--star-strong: ${g};
|
|
21
|
+
--star-soft: ${o(_,.15)};
|
|
22
|
+
--star-border: ${o(_,.38)};
|
|
23
|
+
--on-accent: ${y};
|
|
24
|
+
--brand-blue: ${m};
|
|
25
|
+
--brand-blue-hover: ${h};
|
|
26
|
+
--brand-blue-strong: ${g};
|
|
27
|
+
--brand-blue-soft: ${o(_,.15)};
|
|
28
|
+
--brand-blue-border: ${o(_,.34)};
|
|
29
|
+
--accent-ring: ${o(_,.22)};
|
|
30
|
+
--focus: ${m};
|
|
31
|
+
--focus-ring: ${o(_,.26)};
|
|
32
|
+
}`}function m(){return window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke}function h(){return typeof window<`u`&&!!m()}function g(e,t){let n=m();return n?n(e,t):Promise.reject(Error(`Tauri IPC is unavailable.`))}async function _(){return g(`plugin:notification|is_permission_granted`)}async function v(){return g(`plugin:notification|request_permission`)}async function y(e,t){return g(`plugin:notification|notify`,{options:{title:e,body:t}})}var b=`https://github.com/ling-kong-ran/pisper/releases`,x=`release`;export{y as a,e as c,_ as i,b as n,v as o,h as r,p as s,x as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Cd-3GVxJ.js";var t=e(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./floating-widgets-store-Pjm1AdvO.js";import{i as e}from"./useCustomUiComponents-BaQ_fwbr.js";export{e as listCustomUiComponents};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={zh:{"channelsPage.feishu":`飞书`,"channelsPage.weChat":`微信`,"channelsPage.qq":`QQ`,"channelsPage.telegram":`Telegram`,"channelsPage.feishuAppBot":`飞书应用机器人`,"channelsPage.qqBot":`QQ 机器人`,"channelsPage.telegramBot":`Telegram 机器人`,"channelsPage.webSocketPersistentConnection":`WebSocket 长连接`,"channelsPage.tencentILinkPersistentConnection":`Tencent iLink 持续连接`,"channelsPage.qqPersistentConnection":`QQ 机器人持续连接`,"channelsPage.telegramPersistentConnection":`Telegram Bot 长轮询连接`,"channelsPage.feishuCapabilities":`私聊、群聊 @、图片和文件`,"channelsPage.weChatCapabilities":`个人微信私聊、图片和文件`,"channelsPage.qqCapabilities":`私聊、群聊、图片和文件`,"channelsPage.telegramCapabilities":`私聊、群聊、图片和文件`,"channelsPage.notConnected":`未连接`,"channelsPage.connecting":`连接中`,"channelsPage.online":`在线`,"channelsPage.reconnecting":`重连中`,"channelsPage.connectionFailed":`连接失败`,"channelsPage.requestingLoginQrCode":`正在申请登录二维码…`,"channelsPage.scanAndConfirmConnection":`请使用手机扫码并确认连接`,"channelsPage.scannedWaitingForConfirmation":`已扫码,正在等待确认…`,"channelsPage.enterPairingCode":`请输入手机上显示的数字配对码`,"channelsPage.confirmingAuthorization":`正在确认授权…`,"channelsPage.authorizationSucceededConnecting":`授权成功,正在建立持续连接…`,"channelsPage.channelConnected":`渠道已经连接`,"channelsPage.cancelled":`已取消`,"channelsPage.accessScope":`访问范围`,"channelsPage.approvalMode":`审批模式`,"channelsPage.approvalModeUpdated":`渠道审批模式已更新`,"channelsPage.approvalRequired":`每次操作都需审批`,"channelsPage.workspaceWrite":`工作区写入自动执行`,"channelsPage.fullAccess":`完全访问`,"channelsPage.executionMode":`执行模式`,"channelsPage.executionModeUpdated":`渠道执行模式已更新`,"channelsPage.planMode":`计划`,"channelsPage.goalMode":`目标`,"channelsPage.teamMode":`团队`,"channelsPage.accessScopeUpdated":`访问范围已更新`,"channelsPage.afterYouScanAndConfirmCredentialsAreSavedAndTheChannelStaysOnlineIncomingMessagesGoDirectlyToThe":`扫码确认后会自动保存凭据并保持在线,收到消息后直接交给指定模型和 {agent}。`,"channelsPage.cancel":`取消`,"channelsPage.cannotScanOpenTheSignInLink":`无法扫码?打开登录链接`,"channelsPage.channelChatReset":`渠道会话已重置`,"channelsPage.channelChats":`渠道会话`,"channelsPage.channelReplyModelUpdated":`渠道回复模型已更新`,"channelsPage.closeDialog":`关闭对话框`,"channelsPage.connectedTime":`已连接 {time}`,"channelsPage.connectNameByQRCode":`扫码连接{name}`,"channelsPage.configureName":`配置{name}`,"channelsPage.connect":`连接`,"channelsPage.enterBotCredentialsForName":`输入 {name} 的机器人凭据。`,"channelsPage.scanWithQQToCreateOfficialBot":`使用手机 QQ 扫描二维码,授权创建并绑定官方机器人。`,"channelsPage.officialSetupRequired":`先完成官方机器人创建`,"channelsPage.officialSetupInstructions":`打开官方页面创建机器人,然后将 App ID、App Secret 或 Bot Token 粘贴到下方;Pisper 不会读取页面中的敏感信息。`,"channelsPage.openOfficialSetup":`打开官方创建页面`,"channelsPage.openOfficialSetupQRCode":`官方机器人创建页面二维码`,"channelsPage.qqAppId":`QQ App ID`,"channelsPage.qqAppSecret":`QQ App Secret`,"channelsPage.qqCredentialsOrToken":`请填写 App ID,并填写 App Secret;已有访问 Token 时也可使用 Token。`,"channelsPage.botToken":`Bot Token`,"channelsPage.continueScanning":`继续扫码`,"channelsPage.continueConfiguration":`继续配置`,"channelsPage.configuringAgainWillReplaceTheCurrentNameConnectionContinue":`重新配置会替换当前{name}连接,是否继续?`,"channelsPage.retry":`重试`,"channelsPage.countLinked":`{count} 个已绑定`,"channelsPage.createTheBotAppThroughTheOfficialFeishuAuthorizationPage":`由飞书官方授权页创建机器人应用。`,"channelsPage.defaultModel":`默认模型`,"channelsPage.defaultWorkingDirectoryForNewChats":`新会话默认工作目录`,"channelsPage.defaultWorkingDirectorySaved":`默认工作目录已保存`,"channelsPage.disconnect":`解除连接`,"channelsPage.disconnectName":`解除{name}连接`,"channelsPage.eachContactOrChatMapsToAnIndependentAgentSession":`每个联系人或聊天独立映射 Agent 会话`,"channelsPage.enableThisChannel":`启用此渠道`,"channelsPage.enterTheNumberShownOnYourPhone":`输入手机显示的数字`,"channelsPage.establishingPersistentConnection":`正在建立持续连接`,"channelsPage.generateANewQRCode":`重新生成二维码`,"channelsPage.loadingChannels":`正在加载渠道`,"channelsPage.localCredentialsAndChatMappingsWillBeDeleted":`本地凭据和会话映射会被删除。`,"channelsPage.localSecurityBoundary":`本机安全边界`,"channelsPage.channelPaused":`渠道已暂停`,"channelsPage.channelEnabled":`渠道已启用`,"channelsPage.allWeChatUsersWhoMessageTheBot":`所有给机器人发消息的微信用户`,"channelsPage.allMembersInTheCurrentTenant":`当前租户所有成员`,"channelsPage.scanAgainToReconnect":`重新扫码绑定`,"channelsPage.nameConnectionQRCode":`{name}连接二维码`,"channelsPage.nameDisconnected":`{name}已解除连接`,"channelsPage.nameReconnected":`{name}已重新连接`,"channelsPage.nameSettings":`{name}设置`,"channelsPage.nameTwoWayConnectionEstablished":`{name}已建立双向连接`,"channelsPage.noMessages":`暂无消息`,"channelsPage.off":`关闭`,"channelsPage.onceConnectedMessagesFromFeishuOrWeixinWillArriveHereInPisper":`连接完成后,来自飞书或微信的消息会在这里抵达 Pisper。`,"channelsPage.onceConnectedMessagesFromSupportedChannelsWillArriveHereInPisper":`连接完成后,来自已接入渠道的消息会在这里抵达 Pisper。`,"channelsPage.allUsersWhoMessageTheBot":`所有给机器人发消息的用户`,"channelsPage.ownerOnlyAccessRespectsToolPermissionsAndExecutionMode":`默认仅允许扫码创建者使用;Agent 工具仍遵循已配置的工具权限和会话执行模式。渠道消息也支持 TUI 的 /dir、/mode、/run、/status、/stop、/new 命令。`,"channelsPage.pairingCodeSubmitted":`配对码已提交`,"channelsPage.persistentTwoWayConnection":`持续在线的双向连接`,"channelsPage.processing":`正在处理…`,"channelsPage.qrCodeExpiresTime":`二维码将在 {time}过期`,"channelsPage.qrCodeOwnerOnly":`仅扫码创建者`,"channelsPage.reconnect":`重连`,"channelsPage.reconnectName":`重新连接{name}`,"channelsPage.replyModel":`回复模型`,"channelsPage.reset":`重置`,"channelsPage.resetChannelChat":`重置渠道会话`,"channelsPage.resetChat":`重置会话`,"channelsPage.resetTheAppChatLinkedToScope":`重置“{scope}”绑定的 {app} 会话?`,"channelsPage.save":`保存`,"channelsPage.scanningAgainWillReplaceTheCurrentNameConnectionContinue":`重新扫码会替换当前{name}连接,是否继续?`,"channelsPage.signInToPersonalWeChatThroughTencentILinkBot":`由腾讯 iLink Bot 完成个人微信登录。`,"channelsPage.submitPairingCode":`提交配对码`,"channelsPage.tencentILinkContinuouslyPollsDirectMessagesAndSupportsTextAndMediaReplies":`腾讯 iLink 持续拉取私聊消息,并支持文字与媒体回复。`,"channelsPage.trueTwoWayMessagingNoNotificationWebhookRequired":`真正双向收发,不使用通知 Webhook`,"channelsPage.turnOffToDisconnectWhileKeepingSignInCredentials":`关闭后断开连接,但保留登录凭据`,"channelsPage.twoWay":`双向`,"channelsPage.twoWayCapability":`双向能力`,"channelsPage.useApplicationDefaultModel":`跟随应用默认模型`,"channelsPage.waitingForTheFirstReplyFromAfar":`等待远方的第一声回应`,"channelsPage.webSocketReceivesDirectMessagesAndGroupMentions":`WebSocket 接收私聊和群聊 @ 消息。`},en:{"channelsPage.feishu":`Feishu`,"channelsPage.weChat":`WeChat`,"channelsPage.qq":`QQ`,"channelsPage.telegram":`Telegram`,"channelsPage.feishuAppBot":`Feishu app bot`,"channelsPage.qqBot":`QQ bot`,"channelsPage.telegramBot":`Telegram bot`,"channelsPage.webSocketPersistentConnection":`Persistent WebSocket connection`,"channelsPage.tencentILinkPersistentConnection":`Persistent Tencent iLink connection`,"channelsPage.qqPersistentConnection":`Persistent QQ bot connection`,"channelsPage.telegramPersistentConnection":`Telegram Bot long-polling connection`,"channelsPage.feishuCapabilities":`Direct messages, group mentions, images, and files`,"channelsPage.weChatCapabilities":`Personal WeChat messages, images, and files`,"channelsPage.qqCapabilities":`Direct messages, group chats, images, and files`,"channelsPage.telegramCapabilities":`Direct messages, group chats, images, and files`,"channelsPage.notConnected":`Not connected`,"channelsPage.connecting":`Connecting`,"channelsPage.online":`Online`,"channelsPage.reconnecting":`Reconnecting`,"channelsPage.connectionFailed":`Connection failed`,"channelsPage.requestingLoginQrCode":`Requesting login QR code…`,"channelsPage.scanAndConfirmConnection":`Scan with your phone and confirm the connection`,"channelsPage.scannedWaitingForConfirmation":`Scanned; waiting for confirmation…`,"channelsPage.enterPairingCode":`Enter the numeric pairing code shown on your phone`,"channelsPage.confirmingAuthorization":`Confirming authorization…`,"channelsPage.authorizationSucceededConnecting":`Authorization succeeded; establishing connection…`,"channelsPage.channelConnected":`Channel connected`,"channelsPage.cancelled":`Cancelled`,"channelsPage.accessScope":`Access scope`,"channelsPage.approvalMode":`Approval mode`,"channelsPage.approvalModeUpdated":`Channel approval mode updated`,"channelsPage.approvalRequired":`Approve every operation`,"channelsPage.workspaceWrite":`Auto-run workspace writes`,"channelsPage.fullAccess":`Full access`,"channelsPage.executionMode":`Execution mode`,"channelsPage.executionModeUpdated":`Channel execution mode updated`,"channelsPage.planMode":`Plan`,"channelsPage.goalMode":`Goal`,"channelsPage.teamMode":`Team`,"channelsPage.accessScopeUpdated":`Access scope updated`,"channelsPage.afterYouScanAndConfirmCredentialsAreSavedAndTheChannelStaysOnlineIncomingMessagesGoDirectlyToThe":`After you scan and confirm, credentials are saved and the channel stays online. Incoming messages go directly to the selected model and {agent}.`,"channelsPage.cancel":`Cancel`,"channelsPage.cannotScanOpenTheSignInLink":`Cannot scan? Open the sign-in link`,"channelsPage.channelChatReset":`Channel chat reset`,"channelsPage.channelChats":`Channel chats`,"channelsPage.channelReplyModelUpdated":`Channel reply model updated`,"channelsPage.closeDialog":`Close dialog`,"channelsPage.connectedTime":`Connected {time}`,"channelsPage.connectNameByQRCode":`Connect {name} by QR code`,"channelsPage.configureName":`Configure {name}`,"channelsPage.connect":`Connect`,"channelsPage.enterBotCredentialsForName":`Enter the {name} bot credentials.`,"channelsPage.scanWithQQToCreateOfficialBot":`Scan with the QQ mobile app to authorize creation and binding of the official bot.`,"channelsPage.officialSetupRequired":`Create the official bot first`,"channelsPage.officialSetupInstructions":`Open the official page to create the bot, then paste the App ID, App Secret, or Bot Token below; Pisper never reads sensitive values from that page.`,"channelsPage.openOfficialSetup":`Open official setup page`,"channelsPage.openOfficialSetupQRCode":`QR code for the official bot setup page`,"channelsPage.qqAppId":`QQ App ID`,"channelsPage.qqAppSecret":`QQ App Secret`,"channelsPage.qqCredentialsOrToken":`Enter App ID and App Secret, or just a token.`,"channelsPage.botToken":`Bot token`,"channelsPage.continueScanning":`Continue scanning`,"channelsPage.continueConfiguration":`Continue configuration`,"channelsPage.configuringAgainWillReplaceTheCurrentNameConnectionContinue":`Configuring again will replace the current {name} connection. Continue?`,"channelsPage.retry":`Retry`,"channelsPage.countLinked":`{count} linked`,"channelsPage.createTheBotAppThroughTheOfficialFeishuAuthorizationPage":`Create the bot app through the official Feishu authorization page.`,"channelsPage.defaultModel":`Default model`,"channelsPage.defaultWorkingDirectoryForNewChats":`Default working directory for new chats`,"channelsPage.defaultWorkingDirectorySaved":`Default working directory saved`,"channelsPage.disconnect":`Disconnect`,"channelsPage.disconnectName":`Disconnect {name}`,"channelsPage.eachContactOrChatMapsToAnIndependentAgentSession":`Each contact or chat maps to an independent agent session`,"channelsPage.enableThisChannel":`Enable this channel`,"channelsPage.enterTheNumberShownOnYourPhone":`Enter the number shown on your phone`,"channelsPage.establishingPersistentConnection":`Establishing persistent connection`,"channelsPage.generateANewQRCode":`Generate a new QR code`,"channelsPage.loadingChannels":`Loading channels`,"channelsPage.localCredentialsAndChatMappingsWillBeDeleted":`Local credentials and chat mappings will be deleted.`,"channelsPage.localSecurityBoundary":`Local security boundary`,"channelsPage.channelPaused":`Channel paused`,"channelsPage.channelEnabled":`Channel enabled`,"channelsPage.allWeChatUsersWhoMessageTheBot":`All WeChat users who message the bot`,"channelsPage.allMembersInTheCurrentTenant":`All members in the current tenant`,"channelsPage.scanAgainToReconnect":`Scan again to reconnect`,"channelsPage.nameConnectionQRCode":`{name} connection QR code`,"channelsPage.nameDisconnected":`{name} disconnected`,"channelsPage.nameReconnected":`{name} reconnected`,"channelsPage.nameSettings":`{name} settings`,"channelsPage.nameTwoWayConnectionEstablished":`{name} two-way connection established`,"channelsPage.noMessages":`No messages`,"channelsPage.off":`Off`,"channelsPage.onceConnectedMessagesFromFeishuOrWeixinWillArriveHereInPisper":`Once connected, messages from Feishu or Weixin will arrive here in Pisper.`,"channelsPage.onceConnectedMessagesFromSupportedChannelsWillArriveHereInPisper":`Once connected, messages from supported channels will arrive here in Pisper.`,"channelsPage.allUsersWhoMessageTheBot":`All users who message the bot`,"channelsPage.ownerOnlyAccessRespectsToolPermissionsAndExecutionMode":`Only the person who scanned the QR code is allowed by default. Agent tools still follow the configured tool permissions and session execution mode. Channel messages also support the TUI commands /dir, /mode, /run, /status, /stop, and /new.`,"channelsPage.pairingCodeSubmitted":`Pairing code submitted`,"channelsPage.persistentTwoWayConnection":`Persistent two-way connection`,"channelsPage.processing":`Processing…`,"channelsPage.qrCodeExpiresTime":`QR code expires {time}`,"channelsPage.qrCodeOwnerOnly":`QR-code owner only`,"channelsPage.reconnect":`Reconnect`,"channelsPage.reconnectName":`Reconnect {name}`,"channelsPage.replyModel":`Reply model`,"channelsPage.reset":`Reset`,"channelsPage.resetChannelChat":`Reset channel chat`,"channelsPage.resetChat":`Reset chat`,"channelsPage.resetTheAppChatLinkedToScope":`Reset the {app} chat linked to “{scope}”?`,"channelsPage.save":`Save`,"channelsPage.scanningAgainWillReplaceTheCurrentNameConnectionContinue":`Scanning again will replace the current {name} connection. Continue?`,"channelsPage.signInToPersonalWeChatThroughTencentILinkBot":`Sign in to personal WeChat through Tencent iLink Bot.`,"channelsPage.submitPairingCode":`Submit pairing code`,"channelsPage.tencentILinkContinuouslyPollsDirectMessagesAndSupportsTextAndMediaReplies":`Tencent iLink continuously polls direct messages and supports text and media replies.`,"channelsPage.trueTwoWayMessagingNoNotificationWebhookRequired":`True two-way messaging; no notification webhook required`,"channelsPage.turnOffToDisconnectWhileKeepingSignInCredentials":`Turn off to disconnect while keeping sign-in credentials.`,"channelsPage.twoWay":`Two-way`,"channelsPage.twoWayCapability":`Two-way capability`,"channelsPage.useApplicationDefaultModel":`Use application default model`,"channelsPage.waitingForTheFirstReplyFromAfar":`Waiting for the first reply from afar`,"channelsPage.webSocketReceivesDirectMessagesAndGroupMentions":`WebSocket receives direct messages and group @ mentions.`}};export{e as channelsMessages};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t}from"./http-Be2GB6DH.js";import{i as n}from"./api-YI8_cHpR.js";import{r,t as i}from"./startup-queries-ByepQfGF.js";var a=e=>`/api/sessions/${encodeURIComponent(e)}`;async function o(t,n={}){let i=await e(t,n);return n.method&&n.method!==`GET`&&(/^\/api\/sessions(?:$|\/[^/]+(?:\/(?:derive|model|cwd|execution-mode|run-mode|thinking-level|goal|tree\/navigate))?$)/.test(t)&&r(`sessions`),t===`/api/settings/compaction`&&r(`config`)),i}var s={listSessions:({refresh:e=!0}={})=>i(`sessions`,e),searchSessionTreeLabels:(e,t=20)=>o(`/api/session-labels?${new URLSearchParams({query:e,limit:String(t)})}`),listSessionTreeLabels:(e=500)=>o(`/api/session-labels?limit=${e}`),createSession:(e,t=``)=>o(`/api/sessions`,{method:`POST`,data:{name:e,...t?{cwd:t}:{}}}),deriveSession:(e,t,n)=>o(`${a(e)}/derive`,{method:`POST`,data:{boundaryEntryId:t,name:n}}),getSessionTree:e=>o(`${a(e)}/tree`),navigateSessionTree:(e,t,n)=>o(`${a(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:n},timeout:18e4}),navigateSessionTreeTarget:(e,t)=>o(`${a(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:!1,includeTree:!1},timeout:18e4}),setSessionTreeLabel:(e,t,n)=>o(`${a(e)}/tree/labels/${encodeURIComponent(t)}`,{method:`PUT`,data:{label:n}}),getSessionCommands:e=>o(`${a(e)}/commands`),getConfig:({refresh:e=!1}={})=>i(`config`,e),updateCompactionPreference:e=>o(`/api/settings/compaction`,{method:`PATCH`,data:{thresholdPercent:e}}),getLiveSession:(e,t={})=>o(`${a(e)}/live`,t),getMessages:(e,t)=>{let n=new URLSearchParams({limit:String(t.limit)});return t.before&&n.set(`before`,t.before),o(`${a(e)}/messages?${n}`)},openStream:async(e,r)=>{await n({open:async()=>(await t(),fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})),resume:async(e,n)=>(await t(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${n}`)),onEvent:r})},retryLastTurn:async(e,r)=>{await n({open:async()=>(await t(),fetch(`${a(e)}/retry`,{method:`POST`})),resume:async(e,n)=>(await t(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${n}`)),onEvent:r})},queueInput:(e,t,n,r)=>o(`${a(e)}/input`,{method:`POST`,data:{message:t,attachments:n,behavior:r}}),withdrawQueuedInput:(e,t)=>o(`${a(e)}/input/${encodeURIComponent(t)}`,{method:`DELETE`}),compactSession:e=>o(`${a(e)}/compact`,{method:`POST`,data:{},timeout:18e4}),getSessionWorkflowRuns:e=>o(`${a(e)}/workflow-runs`),resolveWorkflowApproval:(e,t,n)=>o(`/api/workflow-runs/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),stopWorkflowRun:e=>o(`/api/workflow-runs/${encodeURIComponent(e)}/stop`,{method:`POST`,data:{}}),abort:e=>o(`${a(e)}/abort`,{method:`POST`,data:{}}),resolveMobileOperation:(e,t,n)=>o(`${a(e)}/mobile-operations/${encodeURIComponent(t)}`,{method:`POST`,data:n}),pauseGoal:e=>o(`${a(e)}/goal`,{method:`PATCH`,data:{action:`pause`}}),setGoalBudget:(e,t)=>o(`${a(e)}/goal`,{method:`PATCH`,data:{action:`set-budget`,tokenBudget:t}}),getGitChanges:e=>o(`${a(e)}/git/changes`),commitGitChanges:(e,t)=>o(`${a(e)}/git/commit`,{method:`POST`,data:{message:t},timeout:6e4}),pushGitChanges:e=>o(`${a(e)}/git/push`,{method:`POST`,data:{},timeout:15e4}),revertGitChanges:e=>o(`${a(e)}/git/revert`,{method:`POST`,data:{},timeout:6e4}),getVcsChanges:e=>o(`${a(e)}/vcs/changes`),getFileDiff:(e,t)=>o(`${a(e)}/vcs/file-diff?path=${encodeURIComponent(t)}`),commitVcsChanges:(e,t)=>o(`${a(e)}/vcs/commit`,{method:`POST`,data:{message:t},timeout:15e4}),pushVcsChanges:e=>o(`${a(e)}/vcs/push`,{method:`POST`,data:{},timeout:15e4}),revertVcsChanges:e=>o(`${a(e)}/vcs/revert`,{method:`POST`,data:{},timeout:6e4}),getSessionFileChanges:(e,t={})=>o(`${a(e)}/file-changes`,t),getSessionFileChangeDiff:(e,t)=>o(`${a(e)}/file-changes/diff?path=${encodeURIComponent(t)}`),revertSessionFileChanges:(e,t=``)=>o(`${a(e)}/file-changes/revert`,{method:`POST`,data:{path:t},timeout:6e4}),approveSessionFileChanges:(e,t=``)=>o(`${a(e)}/file-changes/approve`,{method:`POST`,data:{path:t}}),updateModel:(e,t,n)=>o(`${a(e)}/model`,{method:`PUT`,data:{provider:t,model:n}}),getThinkingLevel:e=>o(`${a(e)}/thinking-level`),setThinkingLevel:(e,t)=>o(`${a(e)}/thinking-level`,{method:`PUT`,data:{level:t}}),updateExecutionMode:(e,t)=>o(`${a(e)}/execution-mode`,{method:`PUT`,data:{mode:t}}),updateRunMode:(e,t)=>o(`${a(e)}/run-mode`,{method:`PUT`,data:{mode:t}}),resolveApproval:(e,t,n)=>o(`${a(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),updateCwd:(e,t)=>o(`${a(e)}/cwd`,{method:`PUT`,data:{cwd:t}}),renameSession:(e,t)=>o(a(e),{method:`PATCH`,data:{name:t}})};export{s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./vendor-state-GkUciC5H.js";import{t}from"./api-
|
|
1
|
+
import{o as e}from"./vendor-state-GkUciC5H.js";import{t}from"./api-YI8_cHpR.js";function n(){return typeof window<`u`&&window.__PISPER_MOBILE_APP__===!0}var r=null,i=!1,a=e()(e=>({client:n()?`mobile-app`:`web`,loaded:n(),load:({refresh:a=!0}={})=>r||(!a&&i?Promise.resolve():(r=(async()=>{let r=n();r&&e({client:`mobile-app`,loaded:!0});try{let n=await t(`/api/client-info`);e({client:r||n.client===`mobile-app`?`mobile-app`:`web`,loaded:!0})}catch{e({client:r?`mobile-app`:`web`,loaded:!0})}})().finally(()=>{i=!0,r=null}),r))}));function o(){return a(e=>e.client===`mobile-app`)}export{o as n,a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t,t as n}from"./http-
|
|
1
|
+
import{i as e,n as t,t as n}from"./http-Be2GB6DH.js";import{i as r,n as i,o as a,r as o,t as s}from"./sprite-engine-catalog-D1HQWa1X.js";function c(e=`workflow_image_invalid_edits`){return Object.assign(Error(e),{code:e,statusCode:400})}function l(e){if(!e||typeof e!=`object`||Array.isArray(e))throw c();return e}function u(e,t,n,r){if(e===void 0)return t;if(typeof e!=`number`||!Number.isFinite(e)||e<n||e>r)throw c();return e}function d(e){let t=l(e);if(!Array.isArray(t.frames)||t.frames.length<1||t.frames.length>512)throw c();let n=0;return{frames:t.frames.map(e=>{let t=l(e);if(!Number.isSafeInteger(t.sourceIndex)||typeof t.sourceIndex!=`number`||t.sourceIndex<0||t.sourceIndex>511)throw c();let r=t.eraseStrokes===void 0?[]:t.eraseStrokes;if(!Array.isArray(r)||r.length>64)throw c();let i=u(t.durationMs,125,16,1e4);if(!Number.isSafeInteger(i))throw c();return{sourceIndex:t.sourceIndex,x:u(t.x,0,-4096,4096),y:u(t.y,0,-4096,4096),rotation:u(t.rotation,0,-360,360),scale:u(t.scale,1,.05,8),opacity:u(t.opacity,1,0,1),durationMs:i,eraseStrokes:r.map(e=>{let t=l(e);if(!Array.isArray(t.points)||t.points.length<1||t.points.length>512||t.restore!==void 0&&typeof t.restore!=`boolean`)throw c();if(n+=t.points.length,n>2e4)throw c(`workflow_image_too_large`);let r=u(t.radius,NaN,.001,.25);if(!Number.isFinite(r))throw c();return{radius:r,restore:t.restore===!0,points:t.points.map(e=>{let t=l(e),n=u(t.x,NaN,0,1),r=u(t.y,NaN,0,1);if(!Number.isFinite(n)||!Number.isFinite(r))throw c();return{x:n,y:r}})}})}})}}var f=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,p=[`id`,`name`,`prompt`,`reference`,`originalReference`,`frameCount`,`directions`,`model`,`actions`],m=[`running`,`completed`,`failed`,`cancelled`,`interrupted`],h=class extends Error{constructor(e,t=400){super(e),this.code=e,this.statusCode=t}};function g(){throw new h(`game_assets_invalid`)}function _(e,t){return!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).some(e=>!t.includes(e))?g():e}function v(e,t,n=!1){return typeof e!=`string`||e.length>t||n&&!e.trim()?g():e.trim()}function y(e){return typeof e!=`string`||!f.test(e)?g():e}function b(e){return typeof e!=`string`||!Number.isFinite(Date.parse(e))||new Date(e).toISOString()!==e?g():e}function x(e,t,n){return typeof e!=`number`||!Number.isSafeInteger(e)||e<t||e>n?g():e}function S(e){if(e==null)return null;try{let t=a(e);return t.mimeType.startsWith(`image/`)?t:g()}catch{return g()}}function C(e){let t=_(e,p),n=t.directions??[...i],r=t.actions??[];if(!Array.isArray(n)||!n.length||n.length>8||n.some(e=>!i.some(t=>t===e))||new Set(n).size!==n.length||!Array.isArray(r)||r.length>8)return g();let a=x(t.frameCount===void 0?4:t.frameCount,1,16),o=r.map(e=>{let t=_(e,[`id`,`name`,`prompt`,`enabled`]);return typeof t.id!=`string`||!/^[A-Za-z0-9][A-Za-z0-9_-]{0,39}$/.test(t.id)||typeof t.enabled!=`boolean`?g():{id:t.id,name:v(t.name,100,!0),prompt:v(t.prompt??``,2e3),enabled:t.enabled}});if(new Set(o.map(e=>e.id)).size!==o.length||o.filter(e=>e.enabled).length*n.length*a>512)return g();let s=null;if(t.model!==null&&t.model!==void 0){let e=_(t.model,[`provider`,`model`]);s={provider:v(e.provider,200,!0),model:v(e.model,300,!0)}}return{...t.id===void 0?{}:{id:y(t.id)},name:v(t.name,100,!0),prompt:v(t.prompt??``,8e3),reference:S(t.reference),originalReference:S(t.originalReference),frameCount:a,directions:[...n],model:s,actions:o}}function w(e){let{createdAt:t,updatedAt:n,...r}=_(e,[...p,`createdAt`,`updatedAt`]);return{...C(r),id:y(r.id),createdAt:b(t),updatedAt:b(n)}}function T(e){let t=_(e,[`id`,`projectId`,`status`,`startedAt`,`finishedAt`,`completed`,`total`,`error`,`output`,`originalOutput`,`edits`,`revision`]);if(typeof t.status!=`string`||!m.includes(t.status)||t.error!==null&&(typeof t.error!=`string`||!/^(?:game_assets|workflow_image|workflow_media|sprite_engine)_[a-z_]{1,60}$/.test(t.error)))return g();let n=x(t.total,1,8),i=x(t.completed,0,n);if(t.status===`running`!=(t.finishedAt===null)||t.status===`completed`&&i!==n)return g();let a,o,s;try{if(a=r(t.output),o=r(t.originalOutput),t.edits!==void 0&&(s=d(t.edits),s.frames.some(e=>e.sourceIndex>=o.frames.length)||s.frames.length!==a.frames.length))return g()}catch{return g()}return{id:y(t.id),projectId:y(t.projectId),status:t.status,startedAt:b(t.startedAt),finishedAt:t.finishedAt===null?null:b(t.finishedAt),completed:i,total:n,error:t.error,output:a,originalOutput:o,revision:x(t.revision,0,2**53-1),...s?{edits:s}:{}}}function E(e){let t=_(e,[`projects`,`jobs`]);if(!Array.isArray(t.projects)||t.projects.length>100||!Array.isArray(t.jobs)||t.jobs.length>100)return g();let n=t.projects.map(w),r=t.jobs.map(T);return new Set(n.map(e=>e.id)).size!==n.length||new Set(r.map(e=>e.id)).size!==r.length||r.some(e=>!n.some(t=>t.id===e.projectId))?g():{projects:n,jobs:r}}function D(t){if(!t||typeof t!=`object`||Array.isArray(t))throw e();return t}function O(t){if(typeof t!=`string`||!/^[0-9a-f-]{36}$/i.test(t))throw e();return encodeURIComponent(t)}function k(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),window.setTimeout(()=>URL.revokeObjectURL(n),1e3)}function A(t){let n=D(t),r=E({projects:n.projects,jobs:n.jobs});if(!Array.isArray(n.models)||n.models.length>1e3)throw e();let i=n.models.map(t=>{let n=D(t);if(typeof n.id!=`string`||typeof n.name!=`string`||typeof n.providerId!=`string`||typeof n.providerName!=`string`||!n.id.startsWith(n.providerId+`/`))throw e();return{id:n.id,name:n.name,providerId:n.providerId,providerName:n.providerName}});return{...r,models:i,engines:s({engines:n.engines}).engines}}var j=e=>`/api/game-assets/media/${O(e)}/content`;async function M(r,i,c){if(c.throwIfAborted(),r===`gameAssets.list`)return t(`/api/game-assets`,{signal:c,parse:A});if(r===`gameAssets.save`){let e=C(i);return t(e.id?`/api/game-assets/projects/${O(e.id)}`:`/api/game-assets/projects`,{method:e.id?`PATCH`:`POST`,data:e,signal:c,parse:w})}if(r===`gameAssets.remove`)return t(`/api/game-assets/projects/${O(i.id)}`,{method:`DELETE`,signal:c});if(r===`gameAssets.run`||r===`gameAssets.stop`){let e=r===`gameAssets.run`?`/api/game-assets/projects/${O(i.id)}/run`:`/api/game-assets/jobs/${O(i.jobId)}/stop`;return t(e,{method:`POST`,data:{},signal:c,parse:e=>({job:T(D(e).job)})})}if(r===`gameAssets.editFrames`)return t(`/api/game-assets/jobs/${O(i.jobId)}/frames`,{method:`POST`,data:d(i.edits),signal:c,timeout:12e4,parse:T});if(r===`gameAssets.export`){let r=await t(`/api/game-assets/jobs/${O(i.jobId)}`,{signal:c,parse:T});if(!r.output.atlas)throw e();if(i.format===`png`){let e=await n(j(r.output.atlas.media.id),{signal:c});c.throwIfAborted(),k(e,`game-assets.png`)}else if(i.format===`json`)k(new Blob([JSON.stringify(r.output.atlas,null,2)],{type:`application/json`}),`game-assets.json`);else throw e();return null}if(r===`gameAssets.uploadImage`){if(!(i.buffer instanceof ArrayBuffer)||!i.buffer.byteLength||i.buffer.byteLength>8388608||![`image/png`,`image/jpeg`,`image/webp`].includes(String(i.mimeType))||typeof i.name!=`string`||i.name.length>200)throw e();return t(`/api/game-assets/media?name=${encodeURIComponent(i.name)}`,{method:`POST`,data:new Blob([i.buffer],{type:String(i.mimeType)}),signal:c,parse:a})}if(r===`gameAssets.image`){let t=await n(j(i.id),{signal:c});if(t.size>8388608||![`image/png`,`image/jpeg`,`image/webp`].includes(t.type))throw e();return{buffer:await t.arrayBuffer(),mimeType:t.type}}if(r===`gameAssets.process`){if(![`background`,`inpaint`].includes(String(i.operation)))throw e();return t(`/api/game-assets/process`,{method:`POST`,signal:c,timeout:12e4,data:{reference:a(i.reference),operation:i.operation,image:o(i.image)},parse:a})}if(r===`gameAssets.engine`){if(i.id!==`background`&&i.id!==`inpaint`||i.action!==`download`&&i.action!==`cancel`)throw e();return t(`/api/game-assets/engines/${i.id}/${i.action}`,{method:`POST`,data:{},signal:c,parse:s})}throw e()}export{M as handleGameAssetComponentRequest};
|