pisper 0.6.20 → 0.6.21
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/package.json +5 -5
- package/web/.vite/manifest.json +550 -550
- package/web/assets/{AppDialog-BKTqwx46.js → AppDialog-CyOinq_c.js} +1 -1
- package/web/assets/{AppOverlays-DEYd3Zud.js → AppOverlays-tniCecGA.js} +1 -1
- package/web/assets/{AssetsPage-BsIG0e5H.js → AssetsPage-DYFCPNhU.js} +1 -1
- package/web/assets/{BoardPage-CgbOwsbF.js → BoardPage-Dp-FZv-N.js} +3 -3
- package/web/assets/{ChannelsPage-C9eEdxbz.js → ChannelsPage-vBRUJEhU.js} +1 -1
- package/web/assets/{ChatAppearancePage-CBnvknpv.js → ChatAppearancePage-DH4LSb0w.js} +1 -1
- package/web/assets/{ChatHistoryPage-Bq-_Qawn.js → ChatHistoryPage-ChspTm6r.js} +1 -1
- package/web/assets/ChatPage-DvU-p808.js +553 -0
- package/web/assets/{ConfigPage-D44C5I7w.js → ConfigPage-CFFaLkKD.js} +2 -2
- package/web/assets/{DesktopWindowControls-DGhN5dWj.js → DesktopWindowControls-Cz0mpg2c.js} +1 -1
- package/web/assets/{FeaturePage-B3PLRtEG.js → FeaturePage-DT_WfUIg.js} +1 -1
- package/web/assets/{FileAttachmentPreview-fSmyWf24.js → FileAttachmentPreview-yuCLHoKm.js} +1 -1
- package/web/assets/{FloatingWidgets-C1_4vp7k.js → FloatingWidgets-D-48zs1T.js} +1 -1
- package/web/assets/{FocusRuntimeControls-DraooZz_.js → FocusRuntimeControls-D61-BVTV.js} +1 -1
- package/web/assets/{GitDiffViewer-XzdYQWbX.js → GitDiffViewer-DWHHRnjQ.js} +1 -1
- package/web/assets/{ManageProjectsDialog-BlXjm1PQ.js → ManageProjectsDialog-B_0l-_Th.js} +1 -1
- package/web/assets/{MarkdownMessage-B-IixrQ3.js → MarkdownMessage-zaqhqJ44.js} +1 -1
- package/web/assets/{McpPage-D0Zmfgbq.js → McpPage-CuOr94Lo.js} +1 -1
- package/web/assets/{MemoryPage-DgZ7cL70.js → MemoryPage-CI_OOJh3.js} +1 -1
- package/web/assets/{MobileNavigation-BIt1CBum.js → MobileNavigation-CpOrDVyY.js} +1 -1
- package/web/assets/{MorePage-BZ4iZ1n_.js → MorePage-CP0ptgQR.js} +1 -1
- package/web/assets/{NewFolderDialog-W9wLUVXP.js → NewFolderDialog-wwAp2HUt.js} +1 -1
- package/web/assets/{PageHeader-DcCyaFp0.js → PageHeader-CbiN6zVm.js} +1 -1
- package/web/assets/{PhoneDrawer-B_eKy4tt.js → PhoneDrawer-DN3UBXYe.js} +1 -1
- package/web/assets/{PhoneMenuButton-CBT0H1Cn.js → PhoneMenuButton-BMgvbvez.js} +1 -1
- package/web/assets/{PhoneTopBar-Czpvw2ML.js → PhoneTopBar-DFtEfuO6.js} +1 -1
- package/web/assets/{PluginsPage-wk5WpJ7Z.js → PluginsPage-CPkH6yN9.js} +1 -1
- package/web/assets/{SafeModePrompt-Dtq5wVfV.js → SafeModePrompt-vZ-kg03s.js} +1 -1
- package/web/assets/{SchedulesPage-BtRe2Qht.js → SchedulesPage-BQBk-HJm.js} +1 -1
- package/web/assets/{SessionBrowserPane-D2Z-J6tl.js → SessionBrowserPane-CC0qsCP9.js} +2 -2
- package/web/assets/{SessionContextPanel-Cg8AW4l1.js → SessionContextPanel-CyPu1SIQ.js} +2 -2
- package/web/assets/{SessionHome-DIpyJQVn.js → SessionHome-C2xp5_yM.js} +1 -1
- package/web/assets/{SessionInspector-DdpBBhNr.js → SessionInspector-D362Va6Y.js} +1 -1
- package/web/assets/{SessionShell-ocBFDevg.js → SessionShell-BmsJM64n.js} +1 -1
- package/web/assets/{SettingsSidebar-CP5t-q0e.js → SettingsSidebar-B7qnN1dq.js} +1 -1
- package/web/assets/{ShortcutHelpDialog-BOcP90RU.js → ShortcutHelpDialog-BzWvhRT2.js} +1 -1
- package/web/assets/{ShortcutKeys-CBl2x5Yl.js → ShortcutKeys-Cg-wl3yb.js} +1 -1
- package/web/assets/{SidebarUpdateStatus-CqZx7khD.js → SidebarUpdateStatus-B-MIuH8f.js} +1 -1
- package/web/assets/{SkillsPage-BGyMMq-9.js → SkillsPage-BowfELnZ.js} +1 -1
- package/web/assets/{TaskProcessesPane-B43p2Dvr.js → TaskProcessesPane-DGikk1nH.js} +1 -1
- package/web/assets/{TaskTerminalView-BMjmp-4_.js → TaskTerminalView-BjR4vuZI.js} +1 -1
- package/web/assets/{TerminalPanel-CH2-Yc1F.js → TerminalPanel-ZXcyyLBu.js} +1 -1
- package/web/assets/{WebDesktopPet-Fy9xj1bh.js → WebDesktopPet-CrUcp9Ym.js} +1 -1
- package/web/assets/{WorkflowsPage-DvZsyJSV.js → WorkflowsPage-CTKpPFrC.js} +1 -1
- package/web/assets/{WorkspacePicker-LbBXFH77.js → WorkspacePicker-CROSQVzJ.js} +1 -1
- package/web/assets/{api-m-Yq8n0q.js → api-CIB7ZPX3.js} +1 -1
- package/web/assets/{app-update-DVn3toIR.js → app-update-B6njQMB7.js} +1 -1
- package/web/assets/{approval-confirm-Ch86qdyC.js → approval-confirm-D2B0tMFE.js} +1 -1
- package/web/assets/{board-projects-KHcPQYWz.js → board-projects-Ca61ZKPH.js} +1 -1
- package/web/assets/{bots-store-BMcWJ2Gm.js → bots-store-BG81qEJz.js} +1 -1
- package/web/assets/{chat-api-DgJdhfOP.js → chat-api-aEirz9it.js} +1 -1
- package/web/assets/{client-store-BkVlLM-4.js → client-store-BSqTT-c2.js} +1 -1
- package/web/assets/{config-search-BqYT_Xre.js → config-search-DdXAm7PX.js} +1 -1
- package/web/assets/{dialog-5MLAAE-f.js → dialog-D1TVm0d6.js} +1 -1
- package/web/assets/{events-B0F69Vd3.js → events-CrT7ie40.js} +1 -1
- package/web/assets/{folder-paths-CdOS1VLF.js → folder-paths-BuiyvlAk.js} +1 -1
- package/web/assets/{hosts-CoGHAtF9.js → hosts-CpFGDuNR.js} +1 -1
- package/web/assets/i18n-CXRjs9ow.js +1 -0
- package/web/assets/{index-DmohsuQg.js → index-DcTDwezs.js} +2 -2
- package/web/assets/{mount-app-Cr5Uq-cP.js → mount-app-DhHe93-u.js} +3 -3
- package/web/assets/{permission-rules-api-CAxfABVR.js → permission-rules-api-Ch3fRXTD.js} +1 -1
- package/web/assets/{pick-system-directory-ByTVOp-v.js → pick-system-directory-B8aZR2BS.js} +1 -1
- package/web/assets/{placements-CuVM9Xxs.js → placements-5hgUqGzE.js} +2 -2
- package/web/assets/{popover-DUWwlhPy.js → popover-BMTgTASl.js} +1 -1
- package/web/assets/{public-CWbnixwI.js → public-BTvrDX6E.js} +1 -1
- package/web/assets/{public-CGbDaxd0.js → public-BZlIDP6h.js} +1 -1
- package/web/assets/{public-B00uoqCB.js → public-DTq_JyXj.js} +2 -2
- package/web/assets/{public-components-DGfACSCk.js → public-components-DUa3En6P.js} +1 -1
- package/web/assets/public-diff-DEL93aov.js +1 -0
- package/web/assets/public-events-BiaqrDkZ.js +1 -0
- package/web/assets/{public-flags-BRenaSzJ.js → public-flags-DEs9Uj_y.js} +1 -1
- package/web/assets/{public-session-BeSwdD6a.js → public-session-CXzhUUNr.js} +1 -1
- package/web/assets/{public-sidebar-CAWnINZG.js → public-sidebar-CJVnP7HU.js} +1 -1
- package/web/assets/{runtime-capabilities-store-DWW9jolt.js → runtime-capabilities-store-DpEKnn1b.js} +1 -1
- package/web/assets/{safe-mode-instance-65Kg_IPn.js → safe-mode-instance-CVh0Lclx.js} +1 -1
- package/web/assets/safe-mode-sentinel-Bm4e075H.js +1 -0
- package/web/assets/{session-change-summary-api-CbVgbX2o.js → session-change-summary-api-sn-ejt4H.js} +1 -1
- package/web/assets/{session-home-LwsMdqJu.js → session-home-DBefA-JE.js} +1 -1
- package/web/assets/{session-organization-api-BmX-aNPa.js → session-organization-api-BFW_7Myv.js} +1 -1
- package/web/assets/{session-scope-Bz6CeMq0.js → session-scope-P-D-Ssd4.js} +1 -1
- package/web/assets/{session-tree-actions-BLL1s_Ws.js → session-tree-actions-DZ5-Z8_F.js} +1 -1
- package/web/assets/{session-tree-summary-BfRtAGwx.js → session-tree-summary-Dljblf8P.js} +1 -1
- package/web/assets/{shortcuts-Cgx6V2jI.js → shortcuts-DXHroTTi.js} +1 -1
- package/web/assets/{side-chat-context-Cm84nqzk.js → side-chat-context-6tf1Gx5C.js} +4 -4
- package/web/assets/{sidebar-C0AjfIUc.js → sidebar-PuiNlAmD.js} +1 -1
- package/web/assets/{sidebar-store-BhEocW8t.js → sidebar-store-CbyxBthc.js} +1 -1
- package/web/assets/{speech-session-BI_qH5Lw.js → speech-session-B3-i8f64.js} +1 -1
- package/web/assets/{startup-queries-Cevfi-_Z.js → startup-queries-CceboYee.js} +1 -1
- package/web/assets/{use-i18n-Cyg5th6Z.js → use-i18n-B2p84ZNR.js} +1 -1
- package/web/assets/{use-open-bot-HoswiH7t.js → use-open-bot-CgFlDm0x.js} +1 -1
- package/web/assets/{use-studio-actions-CGzcb2Fx.js → use-studio-actions-DM2CAaXR.js} +1 -1
- package/web/assets/{useCatalogProjects-hKlUioWa.js → useCatalogProjects-laY-U3Br.js} +1 -1
- package/web/assets/{useNewProjectPicker-C9X_vJdU.js → useNewProjectPicker-rhLvXi27.js} +2 -2
- package/web/assets/{useNow-BBVE-LCR.js → useNow-DYvbFah-.js} +1 -1
- package/web/assets/{usePhoneShell-CDP-O4Gc.js → usePhoneShell-BSkh5GND.js} +1 -1
- package/web/assets/{useSessionListQuery-BpWfS-tU.js → useSessionListQuery-CHbg2lM2.js} +1 -1
- package/web/assets/{useSessionRowActions-Dd5ulVpS.js → useSessionRowActions-CO4u1xCd.js} +1 -1
- package/web/assets/{useSidebarModel-uxFT2LRy.js → useSidebarModel-V_SZjKZH.js} +1 -1
- package/web/assets/{web-preview-Bo8YMR-t.js → web-preview-CR8GMArR.js} +1 -1
- package/web/assets/{web-preview-events-DIPJR6oR.js → web-preview-events-DUqovP-L.js} +1 -1
- package/web/assets/{workspace-order-store-DshLVZf8.js → workspace-order-store-CK1RETHt.js} +1 -1
- package/web/index.html +1 -1
- package/web/assets/ChatPage-Bwn6Qfok.js +0 -553
- package/web/assets/i18n-Du-JO3Qx.js +0 -1
- package/web/assets/public-diff-DIMQ2JTm.js +0 -1
- package/web/assets/public-events-CxK6EdoY.js +0 -1
- package/web/assets/safe-mode-sentinel-CIemi_6b.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{i as n,r}from"./vendor-react-DwNgTV1j.js";import{t as i}from"./use-i18n-B2p84ZNR.js";import{t as a}from"./createLucideIcon-Cd-3GVxJ.js";import{t as o}from"./check-2vYc6QaP.js";import{t as s}from"./triangle-alert-CE1q54ci.js";import{n as c,t as l}from"./button-CCcCN8tE.js";import{a as u,i as d,l as f,o as p,s as m,t as h}from"./dialog-D1TVm0d6.js";import{t as g}from"./input-CPw-zkYh.js";import{n as _,t as v}from"./alert-firawb0H.js";var y=a(`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`}]]),b=e(n(),1);function x(e){let t=window.__TAURI__?.core?.invoke??window.__TAURI_INTERNALS__?.invoke;return t?t(e):Promise.reject(Error(`native bridge unavailable`))}async function S(){return window.__PISPER_MOBILE_APP__?(await x(`mobile_state`)).mode:null}async function C(){if(window.__PISPER_MOBILE_PLATFORM__!==`android`)throw Error(`workspace_import_unsupported`);let e=await x(`mobile_state`);if(e.mode!==`local`||!e.onDevice?.running)throw Error(`workspace_import_requires_local_runtime`);let t=await x(`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}var w=t({WorkspacePicker:()=>E}),T=r();function E({open:e,initialPath:t=``,description:n,onOpenChange:r,onSelect:a,onCloseAutoFocus:x}){let{t:w}=i(),[E,D]=(0,b.useState)(t),[O,k]=(0,b.useState)(!1),[A,j]=(0,b.useState)(!1),[M,N]=(0,b.useState)(!1),[P,F]=(0,b.useState)(``),I=(0,b.useRef)(0),L=(0,b.useRef)(!1),R=O||A;(0,b.useEffect)(()=>{let n=++I.current;return L.current=!1,e&&(D(t),k(!1),j(!1),N(!1),F(``),window.__PISPER_MOBILE_PLATFORM__===`android`&&S().then(e=>{n===I.current&&N(e===`local`)},e=>{n===I.current&&F(e instanceof Error?e.message:String(e))})),()=>{I.current+=1}},[t,e]);let z=async()=>{if(L.current)return;L.current=!0;let e=I.current;j(!0),F(``);try{let t=await C();e===I.current&&t&&D(t)}catch(t){e===I.current&&F(t instanceof Error?t.message:String(t))}finally{e===I.current&&(L.current=!1,j(!1))}},B=async e=>{if(e.preventDefault(),L.current||!E.trim())return;L.current=!0;let t=I.current;k(!0),F(``);try{await a(E.trim()),t===I.current&&r(!1)}catch(e){t===I.current&&F(e instanceof Error?e.message:String(e))}finally{t===I.current&&(L.current=!1,k(!1))}};return(0,T.jsx)(h,{open:e,onOpenChange:e=>!L.current&&r(e),children:(0,T.jsxs)(d,{showCloseButton:!R,className:`sm:max-w-lg`,onCloseAutoFocus:x,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(f,{children:w(`common:workspacePicker.setWorkingDirectory`)}),(0,T.jsx)(u,{children:n||w(`common:workspacePicker.selectDirectoryDescription`)})]}),(0,T.jsxs)(`form`,{className:`flex min-w-0 flex-col gap-4`,onSubmit:e=>void B(e),children:[(0,T.jsxs)(`label`,{className:`flex min-w-0 flex-col gap-1.5 text-sm font-medium text-content`,children:[w(`common:workspacePicker.workingDirectoryPath`),(0,T.jsx)(g,{autoFocus:!0,className:`font-mono text-xs font-normal max-[650px]:h-11`,value:E,disabled:R,placeholder:w(`common:workspacePicker.enterAbsolutePath`),onChange:e=>D(e.target.value)})]}),M&&(0,T.jsxs)(l,{type:`button`,variant:`secondary`,className:`max-[650px]:h-11`,disabled:R,onClick:()=>void z(),children:[A?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(y,{}),w(A?`common:workspacePicker.importingFolder`:`common:workspacePicker.importFolderCopy`)]}),P&&(0,T.jsxs)(v,{variant:`destructive`,children:[(0,T.jsx)(s,{}),(0,T.jsx)(_,{className:`min-w-0 break-words`,children:P})]}),(0,T.jsxs)(p,{children:[(0,T.jsx)(l,{type:`button`,variant:`secondary`,size:`dialogAction`,disabled:R,onClick:()=>r(!1),children:w(`common:ui.cancel`)}),(0,T.jsxs)(l,{type:`submit`,size:`dialogAction`,disabled:R||!E.trim(),children:[O?(0,T.jsx)(c,{className:`text-current`}):(0,T.jsx)(o,{}),w(O?`common:workspacePicker.switching`:`common:workspacePicker.useThisFolder`)]})]})]})]})})}export{w as n,E as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mobile-runtime-recovery-tbTyacip.js","assets/rolldown-runtime-B0Z9INg1.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{h as e}from"./vendor-router-CSN_DGvx.js";import{c as t,d as n,l as r,u as i}from"./i18n-
|
|
2
|
+
import{h as e}from"./vendor-router-CSN_DGvx.js";import{c as t,d as n,l as r,u as i}from"./i18n-CXRjs9ow.js";import{i as a,n as o,r as s,t as c}from"./abort-signal-f4JsiYKX.js";var l=class extends Error{status;data;kind;constructor(e,t={}){super(e),this.name=`ApiError`,this.status=t.status,this.data=t.data,this.kind=t.kind}};function u(e){return new l(n(`common:api.invalidResponse`,r(t.language)?t.language:i()),{status:e,kind:`protocol`,data:{code:`INVALID_RESPONSE`}})}function d(e){if(e)try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?{...t,error:`error`in t&&typeof t.error==`string`?t.error:void 0}:{error:typeof t==`string`?t:e,body:t}}catch{return{error:e}}}async function f(e){let t=d(await e.text());return new l(t?.error||e.statusText||`HTTP ${e.status}`,{status:e.status,data:t,kind:`http`})}async function p(e){if(e.status===204)return;let t=await e.text();if(t)try{return JSON.parse(t)}catch{throw u(e.status)}}async function m(e,t){if(!e.ok)throw await f(e);if(!e.body)throw Error(`响应不包含可读取的数据流`);let n=e.body.getReader(),r=new TextDecoder,i=``,a=`message`,o=null,s=[],c=!1,l=()=>{if(!s.length)return a=`message`,!0;let e=JSON.parse(s.join(`
|
|
3
3
|
`)),n=t(a||`message`,e,{id:o})!==!1;return a=`message`,o=null,s=[],n},u=e=>{if(!e)return l();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(s.length&&!l())return!1;a=r}else n===`data`?s.push(r):n===`id`&&(o=r||null);return!0},d=(e=!1)=>{let t=0;for(let n=0;n<i.length;n+=1){let r=i.charCodeAt(n);if(r!==10&&r!==13)continue;if(r===13&&n+1>=i.length&&!e)break;let a=i.slice(t,n);if(r===13&&i.charCodeAt(n+1)===10&&(n+=1),t=n+1,!u(a))return i=i.slice(t),!1}if(i=i.slice(t),e&&i){let e=i;if(i=``,!u(e))return!1}return!e||l()};try{for(;!c;){let{value:e,done:t}=await n.read();if(i+=r.decode(e||new Uint8Array,{stream:!t}),!d(t)){c=!0;break}if(t)break}}catch(e){throw c=!0,e}finally{c&&await n.cancel().catch(()=>{}),n.releaseLock()}}async function h(t){if(typeof window>`u`||!window.__PISPER_MOBILE_APP__)return;let n=o(t,g);try{await a(e(()=>import(`./mobile-runtime-recovery-tbTyacip.js`).then(e=>e.t).then(async e=>{e.installMobileRuntimeForegroundRecovery(),await e.waitForMobileRuntimeReady()}),__vite__mapDeps([0,1])),n.signal)}finally{n.dispose()}}var g=3e4;function _(e,t){return e instanceof Error&&e.message?e.message:typeof e==`string`&&e?e:t}async function v(e,t,n){let{body:r,data:i,headers:a,signal:o,timeout:s=g,...c}=t,u=i===void 0?r:i,d=new Headers(a),p;u!==void 0&&(u instanceof Blob?(p=u,d.has(`Content-Type`)||d.set(`Content-Type`,u.type||`application/octet-stream`)):(p=typeof u==`string`?u:JSON.stringify(u),d.has(`Content-Type`)||d.set(`Content-Type`,`application/json`)));let m=new AbortController,v=!1,y=()=>m.abort(o?.reason);o?.aborted?y():o?.addEventListener(`abort`,y,{once:!0});let b=s>0?setTimeout(()=>{v=!0,m.abort(new DOMException(`Request timed out`,`TimeoutError`))},s):void 0;try{if(await h(m.signal),m.signal.aborted)throw m.signal.reason;let t=await fetch(e,{...c,body:p,headers:d,signal:m.signal});if(!t.ok)throw await f(t);return await n(t)}catch(e){throw e instanceof l?e:v?new l(`请求超时 (${s}ms)`,{kind:`timeout`}):o?.aborted?new l(_(o.reason,`请求已取消`),{kind:`cancelled`}):new l(_(e,`请求失败 (network)`),{kind:`network`})}finally{b!==void 0&&clearTimeout(b),o?.removeEventListener(`abort`,y)}}function y(e,t={}){let{parse:n,...r}=t;return v(e,r,async e=>{let t=await p(e);return n?n(t):t})}function b(e,t={}){return v(e,t,e=>e.text())}function x(e,t={}){return v(e,t,e=>e.blob())}async function S(e,t={}){return y(e,t)}var C=5,w=400,T=`SSE 流在终态事件前结束`;function E(e,t){return new Promise((n,r)=>{if(t?.aborted){r(c(t));return}let i=()=>{clearTimeout(a),t&&r(c(t))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}async function D({open:e,resume:t,onEvent:n,maxAttempts:r=C,baseDelayMs:i=w,signal:a}){let o=``,c=0,u=!1,d=null,f=async e=>{await m(e,(e,t,r)=>{if(r.id!=null){let e=Number(r.id);Number.isFinite(e)&&e>c&&(c=e)}let i=t;e===`run`&&typeof i?.runId==`string`&&(o=i.runId);try{let r=n(e,t);return(e===`done`||e===`error`||r===!1)&&(u=!0),r}catch(e){throw d=e,e}})},p=null;try{await f(await e())}catch(e){if(d)throw d;p=e}if(d)throw d;if(u)return;if(!o)throw p??Error(`流在建立运行前中断`);let h=0;for(;;){if(s(a),h+=1,h>r)throw p??Error(`流式连接中断且重挂失败`);await E(i*2**(h-1),a);let e=c;try{if(await f(await t(o,c)),d)throw d;if(!u)throw Error(T);return}catch(t){if(d)throw d;if(t instanceof l&&t.status===409)throw t;p=t,c>e&&(h=0)}}}function O(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{y as a,m as c,x as i,u as l,O as n,b as o,D as r,h as s,S as t,l as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
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-DcTDwezs.js";import{i as n}from"./vendor-react-DwNgTV1j.js";import{a as r,i,o as a}from"./vendor-state-GkUciC5H.js";import{t as o}from"./storage-8QW6lXuT.js";function s(e){let t=String(e||``).trim().replace(/^#/,``);return/^[0-9a-fA-F]{6}$/.test(t)?`#${t.toLowerCase()}`:null}function c(e){return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16)}}function l({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 u(e,t,n){return l({r:e.r+(t.r-e.r)*n,g:e.g+(t.g-e.g)*n,b:e.b+(t.b-e.b)*n})}var d={r:255,g:255,b:255},f={r:24,g:24,b:27};function p({r:e,g:t,b:n},r){return`rgba(${e}, ${t}, ${n}, ${r})`}function m(e){let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function h({r:e,g:t,b:n}){return .2126*m(e)+.7152*m(t)+.0722*m(n)}function g(e,t){let n=h(e),r=h(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function _(e){return g(e,d)>=4.5?`#ffffff`:g(e,f)>=4.5?`#18181b`:`#000000`}function v(e,t,n){let r=c(t);return u(e,g(r,d)>g(r,f)?d:f,n)}function y(e){for(let t=.22;t<=1;t+=.04){let n=u(e,f,t);if(g(c(n),d)>=4.5)return n}return`#18181b`}function b(e){for(let t=.46;t<=1;t+=.04){let n=u(e,d,t);if(g(c(n),f)>=4.5)return n}return`#fff`}function x(e){let t=c(e),n=_(t),r=v(t,n,.12),i=y(t),a=u(t,d,.93),o=u(t,d,.72),s=u(t,d,.22),l=b(t),f=c(s),m=_(f),h=v(f,m,.14);return`:root[data-accent='custom'] {
|
|
2
2
|
--star: ${e};
|
|
3
3
|
--star-hover: ${r};
|
|
4
4
|
--star-strong: ${i};
|
|
@@ -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{t as r}from"./use-i18n-
|
|
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-B2p84ZNR.js";import{t as i}from"./shield-alert-oZqX6MNu.js";import{t as a}from"./utils-C8uzG5AZ.js";import{t as o}from"./button-CCcCN8tE.js";import{t as s}from"./kbd-CAufZTkl.js";import{a as c,n as l,o as u,r as d,t as f}from"./sheet-BTaIEX4w.js";import{i as p,t as m}from"./card-presentation-1oph2b8P.js";import{a as h,i as g,l as _,o as v,s as y,t as b}from"./dialog-D1TVm0d6.js";import{t as x}from"./HoldToConfirmButton-BxdJ7icc.js";var S=e(t(),1),C=n();function w({target:e,phone:t,pending:n,error:w,onConfirm:T,onOpenChange:E}){let{t:D}=r(),O=!!e,[k,A]=(0,S.useState)(e);e&&e!==k&&A(e);let j=e??k,M=j?.approval??null,N=m(M),P=M?.severity===`critical`,F=D(P?`board:confirm.title`:`board:confirm.titleStandard`),I=M?P?p(M.reason)?D(`board:confirm.description`):D(`board:confirm.descriptionCritical`):D(`board:confirm.descriptionStandard`):D(`board:confirm.descriptionLoading`),L=e=>{e.defaultPrevented||e.key!==`Enter`||e.nativeEvent.isComposing||n||!M||e.target.closest(`[data-approval-cancel]`)||(e.preventDefault(),T())},R=e=>{let t=(e.currentTarget instanceof HTMLElement?e.currentTarget:null)?.querySelector(`[data-approval-hold]`);t&&(e.preventDefault(),t.focus())},z=j&&(0,C.jsxs)(`div`,{className:`grid min-w-0 gap-3 text-sm`,children:[(0,C.jsxs)(`dl`,{className:`grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1.5 text-xs`,children:[(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.session`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-medium text-content`,children:j.title}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.tool`)}),(0,C.jsx)(`dd`,{className:`min-w-0 truncate font-mono text-content`,children:M?.toolName||`—`}),(0,C.jsx)(`dt`,{className:`text-content-muted`,children:D(`board:confirm.cwd`)}),(0,C.jsx)(`dd`,{className:`min-w-0 font-mono wrap-anywhere text-content-secondary`,children:j.cwd||`—`})]}),M?.reason&&(0,C.jsxs)(`p`,{className:`flex min-w-0 items-start gap-2 rounded-sm border border-st-attn-border bg-st-attn-soft px-2.5 py-2 text-xs text-st-attn`,children:[(0,C.jsx)(i,{className:`mt-px size-3.5 flex-none`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`min-w-0 break-words`,children:M.reason})]}),M?(0,C.jsx)(`pre`,{"aria-label":D(`board:confirm.fullArgs`),className:`max-h-56 min-w-0 overflow-auto rounded-sm border border-well-stroke bg-well px-2.5 py-2 font-mono text-xs leading-5 whitespace-pre-wrap wrap-anywhere text-well-text`,children:N}):(0,C.jsx)(`p`,{role:`status`,className:`text-xs text-content-muted`,children:D(`board:confirm.loading`)}),w&&(0,C.jsx)(`p`,{role:`alert`,className:`text-xs text-st-fail`,children:w}),(0,C.jsx)(`p`,{id:`approval-hold-hint`,className:`flex items-center gap-1.5 text-xs text-content-muted`,children:t?D(`board:confirm.hintTouch`):(0,C.jsxs)(C.Fragment,{children:[D(`board:confirm.hint`),(0,C.jsx)(s,{children:`↵`})]})})]}),B=(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(o,{variant:`outline`,size:`dialogAction`,"data-approval-cancel":!0,className:a(t&&`min-h-11 flex-1`),onClick:()=>E(!1),children:D(`board:confirm.cancel`)}),(0,C.jsx)(x,{disabled:n||!M,onConfirm:T,enterPassesThrough:!0,"data-approval-hold":!0,"aria-describedby":`approval-hold-hint`,className:a(`min-h-9 px-4`,t&&`min-h-11 flex-1`),children:D(n?`board:confirm.approving`:`board:confirm.hold`)})]});return t?(0,C.jsx)(f,{open:O,onOpenChange:E,children:(0,C.jsxs)(l,{side:`bottom`,showCloseButton:!1,className:`max-h-[85dvh] gap-3 overflow-y-auto rounded-t-(--r-sheet) px-4 pt-2 pb-[calc(16px+var(--pisper-safe-area-bottom))]`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsx)(`span`,{"aria-hidden":`true`,className:`mx-auto h-1 w-9 flex-none rounded-full bg-stroke-strong`}),(0,C.jsxs)(c,{className:`p-0`,children:[(0,C.jsx)(u,{children:F}),(0,C.jsx)(d,{children:I})]}),z,(0,C.jsx)(`div`,{className:`flex gap-2`,children:B})]})}):(0,C.jsx)(b,{open:O,onOpenChange:E,children:(0,C.jsxs)(g,{size:`wide`,onKeyDown:L,onOpenAutoFocus:R,children:[(0,C.jsxs)(y,{children:[(0,C.jsx)(_,{children:F}),(0,C.jsx)(h,{children:I})]}),z,(0,C.jsx)(v,{children:B})]})})}export{w as ApprovalConfirm};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./workspace-order-store-
|
|
1
|
+
import{r as e}from"./workspace-order-store-CK1RETHt.js";import{s as t}from"./useSessionListQuery-CHbg2lM2.js";import{n}from"./session-workspaces-Csgpuzxd.js";import{o as r}from"./card-presentation-1oph2b8P.js";function i(t,n){let r=e(n,t.map(e=>e.key)).map(e=>({...e,count:0}));return[...t,...r]}function a(t,i,a){let o=[...t].sort((e,t)=>(Date.parse(t.modified||``)||0)-(Date.parse(e.modified||``)||0)),s=n(o).filter(e=>e.key!==`\0`&&e.cwd);return[...e(i,s.map(e=>e.key)),...s.slice(0,12)].map(e=>({key:e.key,cwd:e.cwd,label:a[e.key]||r(e.cwd)}))}function o(e,t){return a(e,[],{})[0]?.cwd||t[0]?.cwd||``}function s(e,a,o,s,c){let l=n(e).map(e=>({key:e.key,cwd:e.cwd,count:e.sessions.length}));return t(i(l,a).map(e=>{let t=e.cwd?r(e.cwd):c,n=e.key===`\0`?``:o[e.key]||``;return{...e,label:n||t,folderLabel:t,custom:!!n}}),s)}export{i,s as n,a as r,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{c as n}from"./i18n-Du-JO3Qx.js";import{o as r}from"./vendor-state-GkUciC5H.js";import{n as i}from"./startup-queries-Cevfi-_Z.js";import{a,l as o}from"./api-m-Yq8n0q.js";import{a as s,o as c}from"./BotAvatar-CNL-APwP.js";n.addResourceBundle(`zh-CN`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`新建 Bot`,"sidebar.showAll":`显示全部({count})`,"sidebar.showLess":`收起`,"activity.idle":`空闲`,"activity.paused":`已暂停`,"character.blob":`小圆`,"character.bean":`豆豆`,"character.robot":`机器人`,"character.cat":`小猫`,"character.owl":`猫头鹰`,"character.ghost":`小幽灵`,"character.cloud":`云朵`,"character.octo":`章鱼`,"character.bunny":`兔子`,"character.bear":`小熊`,"character.fox":`小狐`,"character.star":`星星`,"new.title":`新建 Bot`,"new.description":`起个名字就能开始。它负责什么可以现在写,也可以之后在对话里告诉它。`,"new.name":`名字`,"new.namePlaceholder":`例如:审查员`,"new.character":`角色`,"new.color":`颜色`,"new.colorOption":`颜色 {index}`,"new.pick":`选择…`,"new.cancel":`取消`,"new.create":`开始对话`,"new.creating":`正在创建…`,"page.disabledTitle":`Bots 还没打开`,"page.disabledDescription":`Bots 是实验功能,在设置 › 实验功能里打开后就能用。`,"page.openLabs":`去实验功能`,"page.loading":`正在读取…`,"page.notFound":`这个 Bot 不存在了`,"page.emptyTitle":`还没有 Bot`,"page.emptyDescription":`Bot 是常驻的同事:一个长期对话,你随时找它,聊天软件和定时任务也能找它。`,"details.instructions":`它负责什么`,"details.instructionsPlaceholder":`例如:你负责 pisper 仓库的 PR 审查;小问题直接改,其余只提建议;先跑 npm test 再下结论。`,"details.save":`保存`,"details.acceptsWork":`接收聊天与定时的消息`,"details.permission":`权限`,"details.modeApproval":`每一步都问我`,"details.modeWorkspace":`危险操作才问`,"details.modeFull":`完全访问`,"details.permissionHint":`它在这台电脑上自己改文件、跑命令,不限于起始目录。“危险操作才问”:只有命令守卫标出的危险命令、浏览器里的点击与填写、第三方插件才停下来问你。能在群聊里叫它时不能选完全访问。`,"computer.description":`它在这台电脑上读写代码、跑命令。可以换成另一台运行 pisper executor 的电脑。`,"computer.runsOn":`运行在`,"computer.local":`本机`,"activity.approval":`等你批准一个操作`,"activity.question":`有问题问你`,"details.tools":`可用工具`,"details.toolsAll":`全部工具`,"details.toolsReadOnly":`只读`,"details.toolsCustom":`自定义({count} 个)`,"details.toolsHint":`只读:能读代码、搜索,不能改文件、不能跑命令。范围外的工具在执行前就会被拦下。`,"computer.unnamed":`未命名的电脑`,"computer.online":`在线`,"computer.offline":`离线`,"computer.option":`{name}({state})`,"computer.folder":`起始目录`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`必须在这台电脑允许的目录里:{roots}`,"computer.switch":`换到这里`,"computer.listTitle":`电脑`,"computer.usedBy":`{names} 在用`,"computer.remove":`移除`,"computer.confirmRemove":`确定移除`,"computer.cancel":`取消`,"computer.add":`添加电脑`,"computer.addTitle":`添加一台电脑`,"computer.done":`完成`,"computer.code":`配对码`,"computer.codeHint":`10 分钟内有效,只能用一次`,"computer.remoteOff":`先打开远程访问,那台电脑才连得上这里。`,"computer.openRemote":`打开远程访问`,"computer.runThere":`在那台电脑上运行(把目录换成允许 Bot 读写的代码目录,可以写多个 --root):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`那台电脑只需要 Node.js,不需要模型密钥。`,"computer.copy":`复制命令`,"computer.copied":`已复制`,"computer.brainPlaceholder":`https://<这台电脑的远程访问地址>`,"triggers.chats":`可以叫它的聊天`,"triggers.chatsHint":`在这些聊天里发“/{name} 要做的事”或“@Pisper {name} 要做的事”就能叫它。聊天与人的 ID 在聊天里发 /whoami 查看。`,"triggers.p2p":`私聊`,"triggers.group":`群聊`,"triggers.peers":`聊天 {ids}`,"triggers.allPeers":`所有聊天`,"triggers.senders":`{ids} 能叫它`,"triggers.ownerOnly":`只有你能叫它`,"triggers.remove":`删除`,"triggers.platform":`渠道`,"triggers.peerIds":`聊天 ID`,"triggers.peerIdsPlaceholder":`聊天 ID,多个用逗号分开;不填表示所有聊天`,"triggers.senderIds":`谁能叫它`,"triggers.senderIdsPlaceholder":`谁能叫它(ID,逗号分开);不填只有你`,"triggers.senderIdsRequired":`谁能叫它(ID,逗号分开);群聊必须填写`,"triggers.cancel":`取消`,"triggers.add":`添加`,"triggers.addChat":`添加聊天`,"triggers.feishu":`飞书`,"triggers.weixin":`微信`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`定时让它做`,"triggers.scheduleEnabled":`启用这个定时`,"triggers.scheduleMessage":`要做的事`,"triggers.scheduleMessagePlaceholder":`例如:检查依赖有没有安全更新`,"triggers.frequency":`频率`,"triggers.daily":`每天`,"triggers.weekly":`每周`,"triggers.once":`一次`,"triggers.weekday":`星期`,"triggers.date":`日期`,"triggers.time":`时间`,"triggers.addSchedule":`添加定时`,"triggers.monday":`周一`,"triggers.tuesday":`周二`,"triggers.wednesday":`周三`,"triggers.thursday":`周四`,"triggers.friday":`周五`,"triggers.saturday":`周六`,"triggers.sunday":`周日`,"triggers.onceAt":`{date} {time} 一次`,"triggers.weeklyAt":`每{day} {time}`,"triggers.dailyAt":`每天 {time}`,"triggers.otherSchedule":`按定时任务页里的设置`,"new.shuffle":`换一个样子`,"new.chooseLook":`自己挑样子`,"new.duty":`它负责什么(可选)`,"new.dutyPlaceholder":`例如:审查 pisper 仓库的 PR;小问题直接改,其余只提建议。`,"new.folder":`起始目录`,"new.folderDefault":`不填就从默认工作目录开始`,"new.folderSummary":`从本机的默认工作目录开始干活。`,"new.changeFolder":`换个目录`,"settings.changeLook":`换个样子`,"settings.doneLook":`选好了`,"settings.computer":`电脑`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} 个聊天`,"settings.notSet":`未设置`,"settings.advanced":`高级`,"settings.advancedSummary":`权限:{permission} · 工具、暂停`,"activity.busy":`正在忙`,"settingsPage.backToChat":`和 {name} 聊天`,"settingsPage.title":`{name} 的设置`,"model.title":`模型`,"model.summary":`{model} · 思考:{thinking}`,"model.model":`模型`,"model.thinking":`思考`,"model.hint":`它的会话用这里的模型和思考等级,改了下一轮生效。档位跟着“设置 › 子代理”里的模型档位走。`,"model.tierFast":`快速档`,"model.tierStandard":`标准档`,"model.tierStrong":`强档`,"model.thinkingDefault":`模型默认`,"model.thinkingOff":`关闭`,"model.thinkingMinimal":`极轻`,"model.thinkingLow":`轻度`,"model.thinkingMedium":`标准`,"model.thinkingHigh":`深度`,"model.thinkingXhigh":`极深`,"activity.working":`{count} 件在做`,"activity.workingOn":`{count} 件在做 · 在做:{task}`,"memory.title":`记忆`,"memory.count":`{count} 条`,"memory.hint":`{name} 自己记得的事:你让它记住的、你纠正过的、做完一件活学到的。它派出去的子 agent 也会带上。每天空闲时它会整理一次。`,"memory.empty":`{name} 还没记住什么`,"memory.edit":`改这一条`,"memory.editLabel":`改这条记忆`,"memory.delete":`删掉这一条`,"memory.save":`保存`,"memory.cancel":`取消`,"memory.add":`记下`,"memory.addLabel":`加一条记忆`,"memory.addPlaceholder":`例如:发版前要在 iPhone 上点一遍首页`,"skills.title":`它学会的`,"skills.count":`{count} 个技能`,"skills.hint":`{name} 做完一件活会复盘:会反复做的事,它把做法写成自己的技能,之后派出去的子 agent 都带着;你纠正过的做法也会更新进去。`,"skills.empty":`{name} 还没学会什么`,"skills.loading":`正在读取…`,"skills.delete":`删掉这个技能`,"skills.schedule":`设成定时`,"skills.scheduleMessage":`照技能 {name} 做一遍`,"proactive.title":`主动`,"proactive.off":`关着`,"proactive.summaryCheck":`每 {count} 小时巡看`,"proactive.summaryBrief":`每天 {time} 简报`,"proactive.check":`空闲时自己巡看`,"proactive.every":`多久一次`,"proactive.everyHours":`每 {count} 小时`,"proactive.checkHint":`{name} 手上没活时,按它负责的东西只读看一遍(读文件、搜索,不改东西、不跑命令、不往外发消息),发现写成对话里的一条建议,你说“做吧”它才去做。`,"proactive.brief":`每天写一份简报`,"proactive.briefAt":`什么时候`,"proactive.briefHint":`过去一天做了什么、今天排了什么、有什么建议,写在它的对话里。`,"details.parallel":`同时做几件`,"details.parallelCount":`{count} 件`,"details.parallelHint":`它同时派出去干活的子 agent 最多几个,多的排队。`}),n.addResourceBundle(`en-US`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`New Bot`,"sidebar.showAll":`Show all ({count})`,"sidebar.showLess":`Show less`,"activity.idle":`Idle`,"activity.paused":`Paused`,"character.blob":`Blob`,"character.bean":`Bean`,"character.robot":`Robot`,"character.cat":`Cat`,"character.owl":`Owl`,"character.ghost":`Ghost`,"character.cloud":`Cloud`,"character.octo":`Octopus`,"character.bunny":`Bunny`,"character.bear":`Bear`,"character.fox":`Fox`,"character.star":`Star`,"new.title":`New Bot`,"new.description":`A name is all it needs. Say what it’s responsible for now, or tell it later in the chat.`,"new.name":`Name`,"new.namePlaceholder":`e.g. Reviewer`,"new.character":`Character`,"new.color":`Color`,"new.colorOption":`Color {index}`,"new.pick":`Choose…`,"new.cancel":`Cancel`,"new.create":`Start chatting`,"new.creating":`Creating…`,"page.disabledTitle":`Bots are turned off`,"page.disabledDescription":`Bots is a Labs feature. Turn it on in Settings › Labs.`,"page.openLabs":`Open Labs`,"page.loading":`Loading…`,"page.notFound":`This Bot no longer exists`,"page.emptyTitle":`No Bots yet`,"page.emptyDescription":`A Bot is a teammate that's always around: one long conversation you can pick up anytime, and chats and schedules can reach it too.`,"details.instructions":`What it’s responsible for`,"details.instructionsPlaceholder":`e.g. You review PRs in the pisper repo; fix small issues directly, otherwise only suggest; run npm test before concluding.`,"details.save":`Save`,"details.acceptsWork":`Take messages from chats and schedules`,"details.permission":`Permission`,"details.modeApproval":`Ask before every step`,"details.modeWorkspace":`Ask only if risky`,"details.modeFull":`Full access`,"details.permissionHint":`It edits files and runs commands on this computer on its own, not only in the starting folder. “Ask only if risky”: it stops to ask only for commands the guard flags as dangerous, clicks and typing in the browser, and third-party plugins. Bots you can call from a group chat can’t use full access.`,"computer.description":`It reads and writes code and runs commands on this computer. You can switch it to another computer running pisper executor.`,"computer.runsOn":`Runs on`,"computer.local":`This computer`,"activity.approval":`Waiting for your approval`,"activity.question":`Has a question for you`,"details.tools":`Tools`,"details.toolsAll":`All tools`,"details.toolsReadOnly":`Read only`,"details.toolsCustom":`Custom ({count})`,"details.toolsHint":`Read only: it can read and search code but not edit files or run commands. Tools outside the scope are blocked before they run.`,"computer.unnamed":`Unnamed computer`,"computer.online":`online`,"computer.offline":`offline`,"computer.option":`{name} ({state})`,"computer.folder":`Starting folder`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`Must be inside a folder this computer allows: {roots}`,"computer.switch":`Switch here`,"computer.listTitle":`Computers`,"computer.usedBy":`Used by {names}`,"computer.remove":`Remove`,"computer.confirmRemove":`Yes, remove`,"computer.cancel":`Cancel`,"computer.add":`Add a computer`,"computer.addTitle":`Add a computer`,"computer.done":`Done`,"computer.code":`Pairing code`,"computer.codeHint":`valid for 10 minutes, single use`,"computer.remoteOff":`Turn on remote access first so the other computer can reach this one.`,"computer.openRemote":`Open remote access`,"computer.runThere":`Run this on that computer (replace the folder with the code folder Bots may use; repeat --root for more):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`That computer only needs Node.js, no model keys.`,"computer.copy":`Copy commands`,"computer.copied":`Copied`,"computer.brainPlaceholder":`https://<remote-access-address-of-this-computer>`,"triggers.chats":`Chats that can call it`,"triggers.chatsHint":`In these chats, send “/{name} what to do” or “@Pisper {name} what to do”. Send /whoami in a chat to see its IDs.`,"triggers.p2p":`Direct`,"triggers.group":`Group`,"triggers.peers":`chats {ids}`,"triggers.allPeers":`all chats`,"triggers.senders":`{ids} can call it`,"triggers.ownerOnly":`only you can call it`,"triggers.remove":`Remove`,"triggers.platform":`Channel`,"triggers.peerIds":`Chat IDs`,"triggers.peerIdsPlaceholder":`Chat IDs, comma separated; empty means all chats`,"triggers.senderIds":`Who can call it`,"triggers.senderIdsPlaceholder":`Who can call it (IDs, comma separated); empty means only you`,"triggers.senderIdsRequired":`Who can call it (IDs, comma separated); required for groups`,"triggers.cancel":`Cancel`,"triggers.add":`Add`,"triggers.addChat":`Add a chat`,"triggers.feishu":`Feishu`,"triggers.weixin":`WeChat`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`On a schedule`,"triggers.scheduleEnabled":`Schedule on`,"triggers.scheduleMessage":`What to do`,"triggers.scheduleMessagePlaceholder":`e.g. Check dependencies for security updates`,"triggers.frequency":`Frequency`,"triggers.daily":`Daily`,"triggers.weekly":`Weekly`,"triggers.once":`Once`,"triggers.weekday":`Day`,"triggers.date":`Date`,"triggers.time":`Time`,"triggers.addSchedule":`Add a schedule`,"triggers.monday":`Monday`,"triggers.tuesday":`Tuesday`,"triggers.wednesday":`Wednesday`,"triggers.thursday":`Thursday`,"triggers.friday":`Friday`,"triggers.saturday":`Saturday`,"triggers.sunday":`Sunday`,"triggers.onceAt":`Once on {date} at {time}`,"triggers.weeklyAt":`Every {day} at {time}`,"triggers.dailyAt":`Daily at {time}`,"triggers.otherSchedule":`As set on the Schedules page`,"new.shuffle":`Try another look`,"new.chooseLook":`Pick a look`,"new.duty":`What it’s responsible for (optional)`,"new.dutyPlaceholder":`e.g. Review PRs in the pisper repo; fix small issues, otherwise only suggest.`,"new.folder":`Starting folder`,"new.folderDefault":`Leave empty to start in the default working folder`,"new.folderSummary":`Starts in the default working folder on this computer.`,"new.changeFolder":`Change folder`,"settings.changeLook":`Change look`,"settings.doneLook":`Done`,"settings.computer":`Computer`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} chats`,"settings.notSet":`Not set`,"settings.advanced":`Advanced`,"settings.advancedSummary":`Permission: {permission} · tools, pause`,"activity.busy":`Busy`,"settingsPage.backToChat":`Chat with {name}`,"settingsPage.title":`{name} settings`,"model.title":`Model`,"model.summary":`{model} · thinking: {thinking}`,"model.model":`Model`,"model.thinking":`Thinking`,"model.hint":`Its session uses this model and thinking level; changes apply from the next turn. Tiers follow the model tiers in Settings › Subagents.`,"model.tierFast":`Fast tier`,"model.tierStandard":`Standard tier`,"model.tierStrong":`Strong tier`,"model.thinkingDefault":`Model default`,"model.thinkingOff":`Off`,"model.thinkingMinimal":`Minimal`,"model.thinkingLow":`Low`,"model.thinkingMedium":`Medium`,"model.thinkingHigh":`High`,"model.thinkingXhigh":`Extra high`,"activity.working":`{count} in progress`,"activity.workingOn":`{count} in progress · now: {task}`,"memory.title":`Memory`,"memory.count":`{count} items`,"memory.hint":`What {name} remembers: what you asked it to remember, your corrections, and lessons from finished work. Sub-agents it hands work to get these too. It tidies them once a day when idle.`,"memory.empty":`{name} has not remembered anything yet`,"memory.edit":`Edit`,"memory.editLabel":`Edit this memory`,"memory.delete":`Delete`,"memory.save":`Save`,"memory.cancel":`Cancel`,"memory.add":`Add`,"memory.addLabel":`Add a memory`,"memory.addPlaceholder":`e.g. Check the home page on an iPhone before each release`,"skills.title":`What it learned`,"skills.count":`{count} skills`,"skills.hint":`{name} reviews each finished job: work it will do again gets written down as its own skill, and every sub-agent it hands work to carries its skills. Your corrections update them too.`,"skills.empty":`{name} has not learned anything yet`,"skills.loading":`Loading…`,"skills.delete":`Delete this skill`,"skills.schedule":`Put on a schedule`,"skills.scheduleMessage":`Do it once following skill {name}`,"proactive.title":`Proactive`,"proactive.off":`Off`,"proactive.summaryCheck":`Checks every {count} h`,"proactive.summaryBrief":`Daily brief at {time}`,"proactive.check":`Check on things when idle`,"proactive.every":`How often`,"proactive.everyHours":`Every {count} h`,"proactive.checkHint":`When {name} has nothing to do, it looks over what it is responsible for, read-only (reads and searches files; no edits, no commands, no outgoing messages). Findings become a suggestion in its conversation; it only starts work when you say so.`,"proactive.brief":`Write a daily brief`,"proactive.briefAt":`When`,"proactive.briefHint":`What was done in the last day, what is scheduled today and any suggestions, written in its conversation.`,"details.parallel":`Jobs at once`,"details.parallelCount":`{count}`,"details.parallelHint":`How many sub-agents it runs at the same time; the rest wait in line.`});var l=[`read`,`grep`,`find`,`ls`];function u(e){if(e===null)return`all`;let t=[...e].sort();return t.length===l.length&&[...l].sort().every((e,n)=>t[n]===e)?`read-only`:`custom`}function d(e,{expanded:t,currentId:n}){let r=e=>e.activity?.needsYou?0:e.activity?.status===`running`?1:2,i=e.map((e,t)=>({bot:e,index:t})).sort((e,t)=>r(e.bot)-r(t.bot)||e.index-t.index).map(e=>e.bot);if(t||i.length<=3)return{shown:i,hidden:0};let a=i.filter((e,t)=>t<3||n!==void 0&&e.id===n);return{shown:a,hidden:i.length-a.length}}function f(e){return e.activity?.needsYou?`need`:e.activity?.status===`running`?`running`:`idle`}function p(e,t){if(!t.enabled)return e(`bots:activity.paused`);let n=t.activity,r=n?.working?n.current?e(`bots:activity.workingOn`,{count:n.working,task:n.current}):e(`bots:activity.working`,{count:n.working}):``;return n?.waiting===`approval`?r?`${e(`bots:activity.approval`)} · ${r}`:e(`bots:activity.approval`):n?.waiting===`question`?r?`${e(`bots:activity.question`)} · ${r}`:e(`bots:activity.question`):r||(n?.status===`running`?e(`bots:activity.busy`):e(`bots:activity.idle`))}var m=e(t(),1),h=[`fast`,`standard`,`strong`],g=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],_=[1,3,6,12,24];function v(e){let t=e&&typeof e==`object`?e:{},n=_.find(e=>e===t.everyHours)??6;return{enabled:t.enabled===!0,everyHours:n,brief:t.brief===!0,briefAt:typeof t.briefAt==`string`&&/^\d{2}:\d{2}$/.test(t.briefAt)?t.briefAt:`09:00`}}var y=[`feishu`,`weixin`,`qq`,`telegram`];function b(e){return Array.isArray(e)?e.flatMap(e=>{let t=e&&typeof e==`object`?e:{};if(!y.includes(t.platform))return[];let n=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return[{platform:t.platform,chatType:t.chatType===`group`?`group`:`p2p`,peerIds:Array.isArray(t.peerIds)?n(t.peerIds):null,senderIds:n(t.senderIds)}]}):[]}function x(e){if(!e||typeof e!=`object`||Array.isArray(e))throw o();return e}function S(e,t=``){return typeof e==`string`?e:t}function C(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.waiting===`approval`||t.waiting===`question`?t.waiting:null,r=Number(t.working);return{status:t.status===`running`?`running`:`idle`,waiting:n,needsYou:t.needsYou===!0||n!==null,working:Number.isInteger(r)&&r>0?r:0,current:typeof t.current==`string`?t.current.slice(0,120):``}}function w(e){let t=x(e),n=x(t.avatar??{}),r=x(t.workspace??{});if(typeof t.id!=`string`||typeof t.name!=`string`)throw o();return{id:t.id,name:t.name,avatar:{character:s(n.character)?n.character:`blob`,color:c(n.color)?n.color:`blue`},enabled:t.enabled!==!1,instructions:S(t.instructions),executionMode:t.executionMode===`workspace-write`||t.executionMode===`full-access`?t.executionMode:`approval-required`,model:T(t.model),thinking:g.find(e=>e===t.thinking)??null,channels:b(t.channels),tools:Array.isArray(t.tools)?t.tools.filter(e=>typeof e==`string`):null,workspace:{environmentId:S(r.environmentId,`local`),cwd:S(r.cwd)},threadSessionId:S(t.threadSessionId),activity:C(t.activity),maxParallelAgents:Number.isInteger(t.maxParallelAgents)&&Number(t.maxParallelAgents)>=1&&Number(t.maxParallelAgents)<=6?Number(t.maxParallelAgents):3,proactive:v(t.proactive)}}function T(e){let t=x(e??{});return typeof t.ref==`string`&&t.ref.includes(`/`)?{ref:t.ref}:{tier:h.find(e=>e===t.tier)??`standard`}}async function E(){let e=x(await i(`config`));return(Array.isArray(e.providers)?e.providers:[]).flatMap(e=>{let t=x(e);if(typeof t.id!=`string`||!t.configured||t.enabled===!1)return[];let n=S(t.name,t.id);return(Array.isArray(t.models)?t.models:[]).flatMap(e=>{let r=x(e);return typeof r.id!=`string`||r.kind!==`chat`?[]:[{ref:`${t.id}/${r.id}`,name:S(r.name,r.id),providerName:n}]})})}function D(e,t){return n=>t(x(n)[e])}function O(e){return a(`/api/bots`,{signal:e,parse:e=>{let t=x(e).bots;if(!Array.isArray(t))throw o();return t.map(w)}})}function k(e){return a(`/api/bots`,{method:`POST`,data:e,parse:D(`bot`,w)})}function A(e,t){return a(`/api/bots/${encodeURIComponent(e)}`,{method:`PATCH`,data:t,parse:D(`bot`,w)})}function j(e){return a(`/api/bots/${encodeURIComponent(e)}/session`,{method:`POST`,data:{},parse:e=>{let t=x(e).sessionId;if(typeof t!=`string`||!t)throw o();return t}})}function M(e){let t=e&&typeof e==`object`?e:{};return{enabled:t.enabled===!0,endpoints:Array.isArray(t.endpoints)?t.endpoints.filter(e=>typeof e==`string`&&/^https:\/\//.test(e)):[],fingerprint:typeof t.fingerprint==`string`?t.fingerprint:null}}function N(e){let t=x(e);if(typeof t.id!=`string`||!t.id)throw o();let n=t.capabilities&&typeof t.capabilities==`object`?t.capabilities:{};return{id:t.id,kind:t.kind===`node`?`node`:`local`,name:S(t.name),online:t.online===!0,roots:Array.isArray(t.roots)?t.roots.filter(e=>typeof e==`string`):[],shell:n.shell===!0,usedBy:Array.isArray(t.usedBy)?t.usedBy.flatMap(e=>{let t=e&&typeof e==`object`?e:{};return typeof t.id==`string`&&typeof t.name==`string`?[{id:t.id,name:t.name}]:[]}):[],lastSeenAt:typeof t.lastSeenAt==`string`?t.lastSeenAt:null}}function P(e){return a(`/api/environments`,{signal:e,parse:e=>{let t=x(e);if(!Array.isArray(t.environments))throw o();return{environments:t.environments.map(N),remote:M(t.remote)}}})}function F(){return a(`/api/environments/pairing`,{method:`POST`,data:{},parse:e=>{let t=x(e),n=x(t.pairing);if(typeof n.code!=`string`)throw o();return{code:n.code,expiresAt:S(n.expiresAt),remote:M(t.remote)}}})}function I(e){return a(`/api/environments/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}function L(e,t){let n=x(e).tasks;if(!Array.isArray(n))throw o();return n.flatMap(e=>{let n=e&&typeof e==`object`?e:{};if(n.targetType!==`bot`||n.botId!==t||typeof n.id!=`string`)return[];let r=[`once`,`interval`,`daily`,`weekly`,`monthly`].includes(String(n.frequency))?n.frequency:`daily`;return[{id:n.id,enabled:n.enabled!==!1,botMessage:S(n.botMessage),frequency:r,time:S(n.time),date:S(n.date),dayOfWeek:Number(n.dayOfWeek)||0,nextRunAt:typeof n.nextRunAt==`string`?n.nextRunAt:null}]})}function R(e,t){return a(`/api/schedules`,{signal:t,parse:t=>L(t,e)})}function ee(e){return a(`/api/schedules`,{method:`POST`,data:{...e,targetType:`bot`,enabled:!0},parse:()=>void 0})}function z(e,t){return a(`/api/schedules/${encodeURIComponent(e)}`,{method:`PATCH`,data:{enabled:t},parse:()=>void 0})}function B(e){return a(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}var V=[`told`,`correction`,`review`,`proactive`,`manual`,`tidy`];function H(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.id!=`string`||typeof t.text!=`string`||!t.text?null:{id:t.id,text:t.text.slice(0,500),source:V.find(e=>e===t.source)??`told`,updatedAt:S(t.updatedAt)}}function U(e){let t=H(x(e).entry);if(!t)throw o();return t}function W(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory`,{signal:t,parse:e=>{let t=x(e).entries;return Array.isArray(t)?t.map(H).filter(e=>!!e):[]}})}function G(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory`,{method:`POST`,data:{text:t},parse:U})}function K(e,t,n){return a(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`PATCH`,data:{text:n},parse:U})}function q(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}function J(e){let t=x(e);return typeof t.name!=`string`||!t.name?null:{name:t.name.slice(0,64),description:S(t.description).slice(0,1024),updatedAt:S(t.updatedAt)}}function Y(e,t){return a(`/api/bots/${encodeURIComponent(e)}/skills`,{signal:t,parse:e=>{let t=x(e).skills;return Array.isArray(t)?t.map(J).filter(e=>!!e):[]}})}function X(e,t,n){return a(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{signal:n,parse:e=>{let t=x(x(e).skill),n=J(t);if(!n)throw Error(`Invalid skill response.`);return{...n,body:S(t.body).slice(0,2e4)}}})}function Z(e,t){return a(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}var Q=null,$=r()((e,t)=>({bots:[],loaded:!1,error:``,load:()=>(Q??=O().then(t=>e({bots:t,loaded:!0,error:``})).catch(t=>e({loaded:!0,error:t instanceof Error?t.message:String(t)})).finally(()=>{Q=null}),Q),upsert:n=>{let r=t().bots;e({bots:r.findIndex(e=>e.id===n.id)<0?[...r,n]:r.map(e=>e.id===n.id?{...n,activity:e.activity}:e)})}}));function te(e){let t=$(e=>e.load),n=$(e=>e.bots.some(e=>e.activity?.status===`running`));(0,m.useEffect)(()=>{if(!e)return;t();let r=window.setInterval(()=>{document.visibilityState===`visible`&&t()},n?3e3:1e4);return()=>window.clearInterval(r)},[e,n,t])}export{z as C,f as D,p as E,u as O,I as S,l as T,R as _,_ as a,P as b,k as c,q as d,B as f,E as g,W as h,y as i,d as k,ee as l,K as m,$ as n,g as o,Z as p,h as r,G as s,te as t,F as u,X as v,A as w,j as x,Y as y};
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{c as n}from"./i18n-CXRjs9ow.js";import{o as r}from"./vendor-state-GkUciC5H.js";import{n as i}from"./startup-queries-CceboYee.js";import{a,l as o}from"./api-CIB7ZPX3.js";import{a as s,o as c}from"./BotAvatar-CNL-APwP.js";n.addResourceBundle(`zh-CN`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`新建 Bot`,"sidebar.showAll":`显示全部({count})`,"sidebar.showLess":`收起`,"activity.idle":`空闲`,"activity.paused":`已暂停`,"character.blob":`小圆`,"character.bean":`豆豆`,"character.robot":`机器人`,"character.cat":`小猫`,"character.owl":`猫头鹰`,"character.ghost":`小幽灵`,"character.cloud":`云朵`,"character.octo":`章鱼`,"character.bunny":`兔子`,"character.bear":`小熊`,"character.fox":`小狐`,"character.star":`星星`,"new.title":`新建 Bot`,"new.description":`起个名字就能开始。它负责什么可以现在写,也可以之后在对话里告诉它。`,"new.name":`名字`,"new.namePlaceholder":`例如:审查员`,"new.character":`角色`,"new.color":`颜色`,"new.colorOption":`颜色 {index}`,"new.pick":`选择…`,"new.cancel":`取消`,"new.create":`开始对话`,"new.creating":`正在创建…`,"page.disabledTitle":`Bots 还没打开`,"page.disabledDescription":`Bots 是实验功能,在设置 › 实验功能里打开后就能用。`,"page.openLabs":`去实验功能`,"page.loading":`正在读取…`,"page.notFound":`这个 Bot 不存在了`,"page.emptyTitle":`还没有 Bot`,"page.emptyDescription":`Bot 是常驻的同事:一个长期对话,你随时找它,聊天软件和定时任务也能找它。`,"details.instructions":`它负责什么`,"details.instructionsPlaceholder":`例如:你负责 pisper 仓库的 PR 审查;小问题直接改,其余只提建议;先跑 npm test 再下结论。`,"details.save":`保存`,"details.acceptsWork":`接收聊天与定时的消息`,"details.permission":`权限`,"details.modeApproval":`每一步都问我`,"details.modeWorkspace":`危险操作才问`,"details.modeFull":`完全访问`,"details.permissionHint":`它在这台电脑上自己改文件、跑命令,不限于起始目录。“危险操作才问”:只有命令守卫标出的危险命令、浏览器里的点击与填写、第三方插件才停下来问你。能在群聊里叫它时不能选完全访问。`,"computer.description":`它在这台电脑上读写代码、跑命令。可以换成另一台运行 pisper executor 的电脑。`,"computer.runsOn":`运行在`,"computer.local":`本机`,"activity.approval":`等你批准一个操作`,"activity.question":`有问题问你`,"details.tools":`可用工具`,"details.toolsAll":`全部工具`,"details.toolsReadOnly":`只读`,"details.toolsCustom":`自定义({count} 个)`,"details.toolsHint":`只读:能读代码、搜索,不能改文件、不能跑命令。范围外的工具在执行前就会被拦下。`,"computer.unnamed":`未命名的电脑`,"computer.online":`在线`,"computer.offline":`离线`,"computer.option":`{name}({state})`,"computer.folder":`起始目录`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`必须在这台电脑允许的目录里:{roots}`,"computer.switch":`换到这里`,"computer.listTitle":`电脑`,"computer.usedBy":`{names} 在用`,"computer.remove":`移除`,"computer.confirmRemove":`确定移除`,"computer.cancel":`取消`,"computer.add":`添加电脑`,"computer.addTitle":`添加一台电脑`,"computer.done":`完成`,"computer.code":`配对码`,"computer.codeHint":`10 分钟内有效,只能用一次`,"computer.remoteOff":`先打开远程访问,那台电脑才连得上这里。`,"computer.openRemote":`打开远程访问`,"computer.runThere":`在那台电脑上运行(把目录换成允许 Bot 读写的代码目录,可以写多个 --root):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`那台电脑只需要 Node.js,不需要模型密钥。`,"computer.copy":`复制命令`,"computer.copied":`已复制`,"computer.brainPlaceholder":`https://<这台电脑的远程访问地址>`,"triggers.chats":`可以叫它的聊天`,"triggers.chatsHint":`在这些聊天里发“/{name} 要做的事”或“@Pisper {name} 要做的事”就能叫它。聊天与人的 ID 在聊天里发 /whoami 查看。`,"triggers.p2p":`私聊`,"triggers.group":`群聊`,"triggers.peers":`聊天 {ids}`,"triggers.allPeers":`所有聊天`,"triggers.senders":`{ids} 能叫它`,"triggers.ownerOnly":`只有你能叫它`,"triggers.remove":`删除`,"triggers.platform":`渠道`,"triggers.peerIds":`聊天 ID`,"triggers.peerIdsPlaceholder":`聊天 ID,多个用逗号分开;不填表示所有聊天`,"triggers.senderIds":`谁能叫它`,"triggers.senderIdsPlaceholder":`谁能叫它(ID,逗号分开);不填只有你`,"triggers.senderIdsRequired":`谁能叫它(ID,逗号分开);群聊必须填写`,"triggers.cancel":`取消`,"triggers.add":`添加`,"triggers.addChat":`添加聊天`,"triggers.feishu":`飞书`,"triggers.weixin":`微信`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`定时让它做`,"triggers.scheduleEnabled":`启用这个定时`,"triggers.scheduleMessage":`要做的事`,"triggers.scheduleMessagePlaceholder":`例如:检查依赖有没有安全更新`,"triggers.frequency":`频率`,"triggers.daily":`每天`,"triggers.weekly":`每周`,"triggers.once":`一次`,"triggers.weekday":`星期`,"triggers.date":`日期`,"triggers.time":`时间`,"triggers.addSchedule":`添加定时`,"triggers.monday":`周一`,"triggers.tuesday":`周二`,"triggers.wednesday":`周三`,"triggers.thursday":`周四`,"triggers.friday":`周五`,"triggers.saturday":`周六`,"triggers.sunday":`周日`,"triggers.onceAt":`{date} {time} 一次`,"triggers.weeklyAt":`每{day} {time}`,"triggers.dailyAt":`每天 {time}`,"triggers.otherSchedule":`按定时任务页里的设置`,"new.shuffle":`换一个样子`,"new.chooseLook":`自己挑样子`,"new.duty":`它负责什么(可选)`,"new.dutyPlaceholder":`例如:审查 pisper 仓库的 PR;小问题直接改,其余只提建议。`,"new.folder":`起始目录`,"new.folderDefault":`不填就从默认工作目录开始`,"new.folderSummary":`从本机的默认工作目录开始干活。`,"new.changeFolder":`换个目录`,"settings.changeLook":`换个样子`,"settings.doneLook":`选好了`,"settings.computer":`电脑`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} 个聊天`,"settings.notSet":`未设置`,"settings.advanced":`高级`,"settings.advancedSummary":`权限:{permission} · 工具、暂停`,"activity.busy":`正在忙`,"settingsPage.backToChat":`和 {name} 聊天`,"settingsPage.title":`{name} 的设置`,"model.title":`模型`,"model.summary":`{model} · 思考:{thinking}`,"model.model":`模型`,"model.thinking":`思考`,"model.hint":`它的会话用这里的模型和思考等级,改了下一轮生效。档位跟着“设置 › 子代理”里的模型档位走。`,"model.tierFast":`快速档`,"model.tierStandard":`标准档`,"model.tierStrong":`强档`,"model.thinkingDefault":`模型默认`,"model.thinkingOff":`关闭`,"model.thinkingMinimal":`极轻`,"model.thinkingLow":`轻度`,"model.thinkingMedium":`标准`,"model.thinkingHigh":`深度`,"model.thinkingXhigh":`极深`,"activity.working":`{count} 件在做`,"activity.workingOn":`{count} 件在做 · 在做:{task}`,"memory.title":`记忆`,"memory.count":`{count} 条`,"memory.hint":`{name} 自己记得的事:你让它记住的、你纠正过的、做完一件活学到的。它派出去的子 agent 也会带上。每天空闲时它会整理一次。`,"memory.empty":`{name} 还没记住什么`,"memory.edit":`改这一条`,"memory.editLabel":`改这条记忆`,"memory.delete":`删掉这一条`,"memory.save":`保存`,"memory.cancel":`取消`,"memory.add":`记下`,"memory.addLabel":`加一条记忆`,"memory.addPlaceholder":`例如:发版前要在 iPhone 上点一遍首页`,"skills.title":`它学会的`,"skills.count":`{count} 个技能`,"skills.hint":`{name} 做完一件活会复盘:会反复做的事,它把做法写成自己的技能,之后派出去的子 agent 都带着;你纠正过的做法也会更新进去。`,"skills.empty":`{name} 还没学会什么`,"skills.loading":`正在读取…`,"skills.delete":`删掉这个技能`,"skills.schedule":`设成定时`,"skills.scheduleMessage":`照技能 {name} 做一遍`,"proactive.title":`主动`,"proactive.off":`关着`,"proactive.summaryCheck":`每 {count} 小时巡看`,"proactive.summaryBrief":`每天 {time} 简报`,"proactive.check":`空闲时自己巡看`,"proactive.every":`多久一次`,"proactive.everyHours":`每 {count} 小时`,"proactive.checkHint":`{name} 手上没活时,按它负责的东西只读看一遍(读文件、搜索,不改东西、不跑命令、不往外发消息),发现写成对话里的一条建议,你说“做吧”它才去做。`,"proactive.brief":`每天写一份简报`,"proactive.briefAt":`什么时候`,"proactive.briefHint":`过去一天做了什么、今天排了什么、有什么建议,写在它的对话里。`,"details.parallel":`同时做几件`,"details.parallelCount":`{count} 件`,"details.parallelHint":`它同时派出去干活的子 agent 最多几个,多的排队。`}),n.addResourceBundle(`en-US`,`bots`,{"sidebar.title":`Bots`,"sidebar.newBot":`New Bot`,"sidebar.showAll":`Show all ({count})`,"sidebar.showLess":`Show less`,"activity.idle":`Idle`,"activity.paused":`Paused`,"character.blob":`Blob`,"character.bean":`Bean`,"character.robot":`Robot`,"character.cat":`Cat`,"character.owl":`Owl`,"character.ghost":`Ghost`,"character.cloud":`Cloud`,"character.octo":`Octopus`,"character.bunny":`Bunny`,"character.bear":`Bear`,"character.fox":`Fox`,"character.star":`Star`,"new.title":`New Bot`,"new.description":`A name is all it needs. Say what it’s responsible for now, or tell it later in the chat.`,"new.name":`Name`,"new.namePlaceholder":`e.g. Reviewer`,"new.character":`Character`,"new.color":`Color`,"new.colorOption":`Color {index}`,"new.pick":`Choose…`,"new.cancel":`Cancel`,"new.create":`Start chatting`,"new.creating":`Creating…`,"page.disabledTitle":`Bots are turned off`,"page.disabledDescription":`Bots is a Labs feature. Turn it on in Settings › Labs.`,"page.openLabs":`Open Labs`,"page.loading":`Loading…`,"page.notFound":`This Bot no longer exists`,"page.emptyTitle":`No Bots yet`,"page.emptyDescription":`A Bot is a teammate that's always around: one long conversation you can pick up anytime, and chats and schedules can reach it too.`,"details.instructions":`What it’s responsible for`,"details.instructionsPlaceholder":`e.g. You review PRs in the pisper repo; fix small issues directly, otherwise only suggest; run npm test before concluding.`,"details.save":`Save`,"details.acceptsWork":`Take messages from chats and schedules`,"details.permission":`Permission`,"details.modeApproval":`Ask before every step`,"details.modeWorkspace":`Ask only if risky`,"details.modeFull":`Full access`,"details.permissionHint":`It edits files and runs commands on this computer on its own, not only in the starting folder. “Ask only if risky”: it stops to ask only for commands the guard flags as dangerous, clicks and typing in the browser, and third-party plugins. Bots you can call from a group chat can’t use full access.`,"computer.description":`It reads and writes code and runs commands on this computer. You can switch it to another computer running pisper executor.`,"computer.runsOn":`Runs on`,"computer.local":`This computer`,"activity.approval":`Waiting for your approval`,"activity.question":`Has a question for you`,"details.tools":`Tools`,"details.toolsAll":`All tools`,"details.toolsReadOnly":`Read only`,"details.toolsCustom":`Custom ({count})`,"details.toolsHint":`Read only: it can read and search code but not edit files or run commands. Tools outside the scope are blocked before they run.`,"computer.unnamed":`Unnamed computer`,"computer.online":`online`,"computer.offline":`offline`,"computer.option":`{name} ({state})`,"computer.folder":`Starting folder`,"computer.folderPlaceholder":`/path/to/repo`,"computer.folderInRoots":`Must be inside a folder this computer allows: {roots}`,"computer.switch":`Switch here`,"computer.listTitle":`Computers`,"computer.usedBy":`Used by {names}`,"computer.remove":`Remove`,"computer.confirmRemove":`Yes, remove`,"computer.cancel":`Cancel`,"computer.add":`Add a computer`,"computer.addTitle":`Add a computer`,"computer.done":`Done`,"computer.code":`Pairing code`,"computer.codeHint":`valid for 10 minutes, single use`,"computer.remoteOff":`Turn on remote access first so the other computer can reach this one.`,"computer.openRemote":`Open remote access`,"computer.runThere":`Run this on that computer (replace the folder with the code folder Bots may use; repeat --root for more):`,"computer.rootPlaceholder":`~/code`,"computer.rootHint":`That computer only needs Node.js, no model keys.`,"computer.copy":`Copy commands`,"computer.copied":`Copied`,"computer.brainPlaceholder":`https://<remote-access-address-of-this-computer>`,"triggers.chats":`Chats that can call it`,"triggers.chatsHint":`In these chats, send “/{name} what to do” or “@Pisper {name} what to do”. Send /whoami in a chat to see its IDs.`,"triggers.p2p":`Direct`,"triggers.group":`Group`,"triggers.peers":`chats {ids}`,"triggers.allPeers":`all chats`,"triggers.senders":`{ids} can call it`,"triggers.ownerOnly":`only you can call it`,"triggers.remove":`Remove`,"triggers.platform":`Channel`,"triggers.peerIds":`Chat IDs`,"triggers.peerIdsPlaceholder":`Chat IDs, comma separated; empty means all chats`,"triggers.senderIds":`Who can call it`,"triggers.senderIdsPlaceholder":`Who can call it (IDs, comma separated); empty means only you`,"triggers.senderIdsRequired":`Who can call it (IDs, comma separated); required for groups`,"triggers.cancel":`Cancel`,"triggers.add":`Add`,"triggers.addChat":`Add a chat`,"triggers.feishu":`Feishu`,"triggers.weixin":`WeChat`,"triggers.qq":`QQ`,"triggers.telegram":`Telegram`,"triggers.schedules":`On a schedule`,"triggers.scheduleEnabled":`Schedule on`,"triggers.scheduleMessage":`What to do`,"triggers.scheduleMessagePlaceholder":`e.g. Check dependencies for security updates`,"triggers.frequency":`Frequency`,"triggers.daily":`Daily`,"triggers.weekly":`Weekly`,"triggers.once":`Once`,"triggers.weekday":`Day`,"triggers.date":`Date`,"triggers.time":`Time`,"triggers.addSchedule":`Add a schedule`,"triggers.monday":`Monday`,"triggers.tuesday":`Tuesday`,"triggers.wednesday":`Wednesday`,"triggers.thursday":`Thursday`,"triggers.friday":`Friday`,"triggers.saturday":`Saturday`,"triggers.sunday":`Sunday`,"triggers.onceAt":`Once on {date} at {time}`,"triggers.weeklyAt":`Every {day} at {time}`,"triggers.dailyAt":`Daily at {time}`,"triggers.otherSchedule":`As set on the Schedules page`,"new.shuffle":`Try another look`,"new.chooseLook":`Pick a look`,"new.duty":`What it’s responsible for (optional)`,"new.dutyPlaceholder":`e.g. Review PRs in the pisper repo; fix small issues, otherwise only suggest.`,"new.folder":`Starting folder`,"new.folderDefault":`Leave empty to start in the default working folder`,"new.folderSummary":`Starts in the default working folder on this computer.`,"new.changeFolder":`Change folder`,"settings.changeLook":`Change look`,"settings.doneLook":`Done`,"settings.computer":`Computer`,"settings.computerSummary":`{computer} · {folder}`,"settings.chatsCount":`{count} chats`,"settings.notSet":`Not set`,"settings.advanced":`Advanced`,"settings.advancedSummary":`Permission: {permission} · tools, pause`,"activity.busy":`Busy`,"settingsPage.backToChat":`Chat with {name}`,"settingsPage.title":`{name} settings`,"model.title":`Model`,"model.summary":`{model} · thinking: {thinking}`,"model.model":`Model`,"model.thinking":`Thinking`,"model.hint":`Its session uses this model and thinking level; changes apply from the next turn. Tiers follow the model tiers in Settings › Subagents.`,"model.tierFast":`Fast tier`,"model.tierStandard":`Standard tier`,"model.tierStrong":`Strong tier`,"model.thinkingDefault":`Model default`,"model.thinkingOff":`Off`,"model.thinkingMinimal":`Minimal`,"model.thinkingLow":`Low`,"model.thinkingMedium":`Medium`,"model.thinkingHigh":`High`,"model.thinkingXhigh":`Extra high`,"activity.working":`{count} in progress`,"activity.workingOn":`{count} in progress · now: {task}`,"memory.title":`Memory`,"memory.count":`{count} items`,"memory.hint":`What {name} remembers: what you asked it to remember, your corrections, and lessons from finished work. Sub-agents it hands work to get these too. It tidies them once a day when idle.`,"memory.empty":`{name} has not remembered anything yet`,"memory.edit":`Edit`,"memory.editLabel":`Edit this memory`,"memory.delete":`Delete`,"memory.save":`Save`,"memory.cancel":`Cancel`,"memory.add":`Add`,"memory.addLabel":`Add a memory`,"memory.addPlaceholder":`e.g. Check the home page on an iPhone before each release`,"skills.title":`What it learned`,"skills.count":`{count} skills`,"skills.hint":`{name} reviews each finished job: work it will do again gets written down as its own skill, and every sub-agent it hands work to carries its skills. Your corrections update them too.`,"skills.empty":`{name} has not learned anything yet`,"skills.loading":`Loading…`,"skills.delete":`Delete this skill`,"skills.schedule":`Put on a schedule`,"skills.scheduleMessage":`Do it once following skill {name}`,"proactive.title":`Proactive`,"proactive.off":`Off`,"proactive.summaryCheck":`Checks every {count} h`,"proactive.summaryBrief":`Daily brief at {time}`,"proactive.check":`Check on things when idle`,"proactive.every":`How often`,"proactive.everyHours":`Every {count} h`,"proactive.checkHint":`When {name} has nothing to do, it looks over what it is responsible for, read-only (reads and searches files; no edits, no commands, no outgoing messages). Findings become a suggestion in its conversation; it only starts work when you say so.`,"proactive.brief":`Write a daily brief`,"proactive.briefAt":`When`,"proactive.briefHint":`What was done in the last day, what is scheduled today and any suggestions, written in its conversation.`,"details.parallel":`Jobs at once`,"details.parallelCount":`{count}`,"details.parallelHint":`How many sub-agents it runs at the same time; the rest wait in line.`});var l=[`read`,`grep`,`find`,`ls`];function u(e){if(e===null)return`all`;let t=[...e].sort();return t.length===l.length&&[...l].sort().every((e,n)=>t[n]===e)?`read-only`:`custom`}function d(e,{expanded:t,currentId:n}){let r=e=>e.activity?.needsYou?0:e.activity?.status===`running`?1:2,i=e.map((e,t)=>({bot:e,index:t})).sort((e,t)=>r(e.bot)-r(t.bot)||e.index-t.index).map(e=>e.bot);if(t||i.length<=3)return{shown:i,hidden:0};let a=i.filter((e,t)=>t<3||n!==void 0&&e.id===n);return{shown:a,hidden:i.length-a.length}}function f(e){return e.activity?.needsYou?`need`:e.activity?.status===`running`?`running`:`idle`}function p(e,t){if(!t.enabled)return e(`bots:activity.paused`);let n=t.activity,r=n?.working?n.current?e(`bots:activity.workingOn`,{count:n.working,task:n.current}):e(`bots:activity.working`,{count:n.working}):``;return n?.waiting===`approval`?r?`${e(`bots:activity.approval`)} · ${r}`:e(`bots:activity.approval`):n?.waiting===`question`?r?`${e(`bots:activity.question`)} · ${r}`:e(`bots:activity.question`):r||(n?.status===`running`?e(`bots:activity.busy`):e(`bots:activity.idle`))}var m=e(t(),1),h=[`fast`,`standard`,`strong`],g=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],_=[1,3,6,12,24];function v(e){let t=e&&typeof e==`object`?e:{},n=_.find(e=>e===t.everyHours)??6;return{enabled:t.enabled===!0,everyHours:n,brief:t.brief===!0,briefAt:typeof t.briefAt==`string`&&/^\d{2}:\d{2}$/.test(t.briefAt)?t.briefAt:`09:00`}}var y=[`feishu`,`weixin`,`qq`,`telegram`];function b(e){return Array.isArray(e)?e.flatMap(e=>{let t=e&&typeof e==`object`?e:{};if(!y.includes(t.platform))return[];let n=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[];return[{platform:t.platform,chatType:t.chatType===`group`?`group`:`p2p`,peerIds:Array.isArray(t.peerIds)?n(t.peerIds):null,senderIds:n(t.senderIds)}]}):[]}function x(e){if(!e||typeof e!=`object`||Array.isArray(e))throw o();return e}function S(e,t=``){return typeof e==`string`?e:t}function C(e){if(!e||typeof e!=`object`)return null;let t=e,n=t.waiting===`approval`||t.waiting===`question`?t.waiting:null,r=Number(t.working);return{status:t.status===`running`?`running`:`idle`,waiting:n,needsYou:t.needsYou===!0||n!==null,working:Number.isInteger(r)&&r>0?r:0,current:typeof t.current==`string`?t.current.slice(0,120):``}}function w(e){let t=x(e),n=x(t.avatar??{}),r=x(t.workspace??{});if(typeof t.id!=`string`||typeof t.name!=`string`)throw o();return{id:t.id,name:t.name,avatar:{character:s(n.character)?n.character:`blob`,color:c(n.color)?n.color:`blue`},enabled:t.enabled!==!1,instructions:S(t.instructions),executionMode:t.executionMode===`workspace-write`||t.executionMode===`full-access`?t.executionMode:`approval-required`,model:T(t.model),thinking:g.find(e=>e===t.thinking)??null,channels:b(t.channels),tools:Array.isArray(t.tools)?t.tools.filter(e=>typeof e==`string`):null,workspace:{environmentId:S(r.environmentId,`local`),cwd:S(r.cwd)},threadSessionId:S(t.threadSessionId),activity:C(t.activity),maxParallelAgents:Number.isInteger(t.maxParallelAgents)&&Number(t.maxParallelAgents)>=1&&Number(t.maxParallelAgents)<=6?Number(t.maxParallelAgents):3,proactive:v(t.proactive)}}function T(e){let t=x(e??{});return typeof t.ref==`string`&&t.ref.includes(`/`)?{ref:t.ref}:{tier:h.find(e=>e===t.tier)??`standard`}}async function E(){let e=x(await i(`config`));return(Array.isArray(e.providers)?e.providers:[]).flatMap(e=>{let t=x(e);if(typeof t.id!=`string`||!t.configured||t.enabled===!1)return[];let n=S(t.name,t.id);return(Array.isArray(t.models)?t.models:[]).flatMap(e=>{let r=x(e);return typeof r.id!=`string`||r.kind!==`chat`?[]:[{ref:`${t.id}/${r.id}`,name:S(r.name,r.id),providerName:n}]})})}function D(e,t){return n=>t(x(n)[e])}function O(e){return a(`/api/bots`,{signal:e,parse:e=>{let t=x(e).bots;if(!Array.isArray(t))throw o();return t.map(w)}})}function k(e){return a(`/api/bots`,{method:`POST`,data:e,parse:D(`bot`,w)})}function A(e,t){return a(`/api/bots/${encodeURIComponent(e)}`,{method:`PATCH`,data:t,parse:D(`bot`,w)})}function j(e){return a(`/api/bots/${encodeURIComponent(e)}/session`,{method:`POST`,data:{},parse:e=>{let t=x(e).sessionId;if(typeof t!=`string`||!t)throw o();return t}})}function M(e){let t=e&&typeof e==`object`?e:{};return{enabled:t.enabled===!0,endpoints:Array.isArray(t.endpoints)?t.endpoints.filter(e=>typeof e==`string`&&/^https:\/\//.test(e)):[],fingerprint:typeof t.fingerprint==`string`?t.fingerprint:null}}function N(e){let t=x(e);if(typeof t.id!=`string`||!t.id)throw o();let n=t.capabilities&&typeof t.capabilities==`object`?t.capabilities:{};return{id:t.id,kind:t.kind===`node`?`node`:`local`,name:S(t.name),online:t.online===!0,roots:Array.isArray(t.roots)?t.roots.filter(e=>typeof e==`string`):[],shell:n.shell===!0,usedBy:Array.isArray(t.usedBy)?t.usedBy.flatMap(e=>{let t=e&&typeof e==`object`?e:{};return typeof t.id==`string`&&typeof t.name==`string`?[{id:t.id,name:t.name}]:[]}):[],lastSeenAt:typeof t.lastSeenAt==`string`?t.lastSeenAt:null}}function P(e){return a(`/api/environments`,{signal:e,parse:e=>{let t=x(e);if(!Array.isArray(t.environments))throw o();return{environments:t.environments.map(N),remote:M(t.remote)}}})}function F(){return a(`/api/environments/pairing`,{method:`POST`,data:{},parse:e=>{let t=x(e),n=x(t.pairing);if(typeof n.code!=`string`)throw o();return{code:n.code,expiresAt:S(n.expiresAt),remote:M(t.remote)}}})}function I(e){return a(`/api/environments/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}function L(e,t){let n=x(e).tasks;if(!Array.isArray(n))throw o();return n.flatMap(e=>{let n=e&&typeof e==`object`?e:{};if(n.targetType!==`bot`||n.botId!==t||typeof n.id!=`string`)return[];let r=[`once`,`interval`,`daily`,`weekly`,`monthly`].includes(String(n.frequency))?n.frequency:`daily`;return[{id:n.id,enabled:n.enabled!==!1,botMessage:S(n.botMessage),frequency:r,time:S(n.time),date:S(n.date),dayOfWeek:Number(n.dayOfWeek)||0,nextRunAt:typeof n.nextRunAt==`string`?n.nextRunAt:null}]})}function R(e,t){return a(`/api/schedules`,{signal:t,parse:t=>L(t,e)})}function ee(e){return a(`/api/schedules`,{method:`POST`,data:{...e,targetType:`bot`,enabled:!0},parse:()=>void 0})}function z(e,t){return a(`/api/schedules/${encodeURIComponent(e)}`,{method:`PATCH`,data:{enabled:t},parse:()=>void 0})}function B(e){return a(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`,parse:()=>void 0})}var V=[`told`,`correction`,`review`,`proactive`,`manual`,`tidy`];function H(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.id!=`string`||typeof t.text!=`string`||!t.text?null:{id:t.id,text:t.text.slice(0,500),source:V.find(e=>e===t.source)??`told`,updatedAt:S(t.updatedAt)}}function U(e){let t=H(x(e).entry);if(!t)throw o();return t}function W(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory`,{signal:t,parse:e=>{let t=x(e).entries;return Array.isArray(t)?t.map(H).filter(e=>!!e):[]}})}function G(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory`,{method:`POST`,data:{text:t},parse:U})}function K(e,t,n){return a(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`PATCH`,data:{text:n},parse:U})}function q(e,t){return a(`/api/bots/${encodeURIComponent(e)}/memory/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}function J(e){let t=x(e);return typeof t.name!=`string`||!t.name?null:{name:t.name.slice(0,64),description:S(t.description).slice(0,1024),updatedAt:S(t.updatedAt)}}function Y(e,t){return a(`/api/bots/${encodeURIComponent(e)}/skills`,{signal:t,parse:e=>{let t=x(e).skills;return Array.isArray(t)?t.map(J).filter(e=>!!e):[]}})}function X(e,t,n){return a(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{signal:n,parse:e=>{let t=x(x(e).skill),n=J(t);if(!n)throw Error(`Invalid skill response.`);return{...n,body:S(t.body).slice(0,2e4)}}})}function Z(e,t){return a(`/api/bots/${encodeURIComponent(e)}/skills/${encodeURIComponent(t)}`,{method:`DELETE`,parse:()=>void 0})}var Q=null,$=r()((e,t)=>({bots:[],loaded:!1,error:``,load:()=>(Q??=O().then(t=>e({bots:t,loaded:!0,error:``})).catch(t=>e({loaded:!0,error:t instanceof Error?t.message:String(t)})).finally(()=>{Q=null}),Q),upsert:n=>{let r=t().bots;e({bots:r.findIndex(e=>e.id===n.id)<0?[...r,n]:r.map(e=>e.id===n.id?{...n,activity:e.activity}:e)})}}));function te(e){let t=$(e=>e.load),n=$(e=>e.bots.some(e=>e.activity?.status===`running`));(0,m.useEffect)(()=>{if(!e)return;t();let r=window.setInterval(()=>{document.visibilityState===`visible`&&t()},n?3e3:1e4);return()=>window.clearInterval(r)},[e,n,t])}export{z as C,f as D,p as E,u as O,I as S,l as T,R as _,_ as a,P as b,k as c,q as d,B as f,E as g,W as h,y as i,d as k,ee as l,K as m,$ as n,g as o,Z as p,h as r,G as s,te as t,F as u,X as v,A as w,j as x,Y as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t}from"./startup-queries-
|
|
1
|
+
import{i as e,n as t}from"./startup-queries-CceboYee.js";import{a as n,c as r,i,r as a,s as o}from"./api-CIB7ZPX3.js";var s=e=>`/api/sessions/${encodeURIComponent(e)}`;async function c(t,r={}){let i=await n(t,r);return r.method&&r.method!==`GET`&&(/^\/api\/sessions(?:$|\/[^/]+(?:\/(?:derive|model|cwd|execution-mode|run-mode|thinking-level|goal|tree\/navigate))?$)/.test(t)&&e(`sessions`),t===`/api/settings/compaction`&&e(`config`)),i}var l={listSessions:({refresh:e=!0}={})=>t(`sessions`,e),searchSessionTreeLabels:(e,t=20,n)=>c(`/api/session-labels?${new URLSearchParams({query:e,limit:String(t)})}`,{signal:n}),listSessionTreeLabels:(e=500)=>c(`/api/session-labels?limit=${e}`),createSession:(e,t=``,n={})=>c(`/api/sessions`,{method:`POST`,data:{name:e,...n.projectless?{projectless:!0}:t?{cwd:t}:{}}}),deriveSession:(e,t,n)=>c(`${s(e)}/derive`,{method:`POST`,data:{boundaryEntryId:t,name:n}}),getSessionTree:e=>c(`${s(e)}/tree`),navigateSessionTree:(e,t,n)=>c(`${s(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:n},timeout:18e4}),navigateSessionTreeTarget:(e,t)=>c(`${s(e)}/tree/navigate`,{method:`POST`,data:{targetEntryId:t,summarize:!1,includeTree:!1},timeout:18e4}),previewFileRewind:(e,t)=>c(`${s(e)}/tree/${encodeURIComponent(t)}/file-rewind`),rewindFiles:(e,t)=>c(`${s(e)}/tree/${encodeURIComponent(t)}/file-rewind`,{method:`POST`,timeout:18e4}),setSessionTreeLabel:(e,t,n)=>c(`${s(e)}/tree/labels/${encodeURIComponent(t)}`,{method:`PUT`,data:{label:n}}),getSessionCommands:e=>c(`${s(e)}/commands`),getWorkspaceCommands:e=>c(`/api/commands?cwd=${encodeURIComponent(e)}`),getConfig:({refresh:e=!1}={})=>t(`config`,e),updateCompactionPreference:e=>c(`/api/settings/compaction`,{method:`PATCH`,data:{thresholdPercent:e}}),getLiveSession:(e,t={})=>c(`${s(e)}/live`,t),getMessages:(e,t)=>{let n=new URLSearchParams({limit:String(t.limit)});return t.before&&n.set(`before`,t.before),c(`${s(e)}/messages?${n}`)},openStream:async(e,t,{signal:n}={})=>{await a({open:async()=>(await o(),fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:n})),resume:async(e,t)=>(await o(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},askSideQuestion:async(e,t,{signal:n,onDelta:i}={})=>{await o();let a=await fetch(`${s(e)}/side-question`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({question:t}),signal:n}),c=null;if(await r(a,(e,t)=>{if(e===`delta`&&typeof t.text==`string`)i?.(t.text);else if(e===`error`)throw Error(String(t.message||``));else if(e===`done`)return c={text:typeof t.text==`string`?t.text:``,toolCallIgnored:t.toolCallIgnored===!0},!1}),!c)throw Error(`side question ended before completion`);return c},retryLastTurn:async(e,t,{signal:n}={})=>{await a({open:async()=>(await o(),fetch(`${s(e)}/retry`,{method:`POST`,signal:n})),resume:async(e,t)=>(await o(),fetch(`/api/runs/${encodeURIComponent(e)}/events?after=${t}`,{signal:n})),onEvent:t,signal:n})},queueInput:(e,t,n,r)=>c(`${s(e)}/input`,{method:`POST`,data:{message:t,attachments:n,behavior:r}}),sendQueuedInputNow:(e,t)=>c(`${s(e)}/input/${encodeURIComponent(t)}/send-now`,{method:`POST`,data:{}}),withdrawQueuedInput:(e,t)=>c(`${s(e)}/input/${encodeURIComponent(t)}`,{method:`DELETE`}),compactSession:e=>c(`${s(e)}/compact`,{method:`POST`,data:{},timeout:18e4}),getSessionWorkflowRuns:e=>c(`${s(e)}/workflow-runs`),resolveWorkflowApproval:(e,t,n)=>c(`/api/workflow-runs/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),stopWorkflowRun:e=>c(`/api/workflow-runs/${encodeURIComponent(e)}/stop`,{method:`POST`,data:{}}),abort:e=>c(`${s(e)}/abort`,{method:`POST`,data:{}}),resolveMobileOperation:(e,t,n)=>c(`${s(e)}/mobile-operations/${encodeURIComponent(t)}`,{method:`POST`,data:n}),pauseGoal:e=>c(`${s(e)}/goal`,{method:`PATCH`,data:{action:`pause`}}),setGoalBudget:(e,t)=>c(`${s(e)}/goal`,{method:`PATCH`,data:{action:`set-budget`,tokenBudget:t}}),getGitChanges:e=>c(`${s(e)}/git/changes`),commitGitChanges:(e,t)=>c(`${s(e)}/git/commit`,{method:`POST`,data:{message:t},timeout:6e4}),pushGitChanges:e=>c(`${s(e)}/git/push`,{method:`POST`,data:{},timeout:15e4}),revertGitChanges:e=>c(`${s(e)}/git/revert`,{method:`POST`,data:{},timeout:6e4}),getVcsChanges:(e,t={})=>c(`${s(e)}/vcs/changes`,t),getFileDiff:(e,t,n={})=>c(`${s(e)}/vcs/file-diff?path=${encodeURIComponent(t)}`,n),commitVcsChanges:(e,t)=>c(`${s(e)}/vcs/commit`,{method:`POST`,data:{message:t},timeout:15e4}),pushVcsChanges:e=>c(`${s(e)}/vcs/push`,{method:`POST`,data:{},timeout:15e4}),revertVcsChanges:e=>c(`${s(e)}/vcs/revert`,{method:`POST`,data:{},timeout:6e4}),getSessionFileChanges:(e,t={})=>c(`${s(e)}/file-changes`,t),getSessionFileChangeDiff:(e,t,n={})=>c(`${s(e)}/file-changes/diff?path=${encodeURIComponent(t)}`,n),revertSessionFileChanges:(e,t=``)=>c(`${s(e)}/file-changes/revert`,{method:`POST`,data:{path:t},timeout:6e4}),approveSessionFileChanges:(e,t=``)=>c(`${s(e)}/file-changes/approve`,{method:`POST`,data:{path:t}}),updateModel:(e,t,n)=>c(`${s(e)}/model`,{method:`PUT`,data:{provider:t,model:n}}),getThinkingLevel:e=>c(`${s(e)}/thinking-level`),setThinkingLevel:(e,t)=>c(`${s(e)}/thinking-level`,{method:`PUT`,data:{level:t}}),updateExecutionMode:(e,t)=>c(`${s(e)}/execution-mode`,{method:`PUT`,data:{mode:t}}),updateRunMode:(e,t)=>c(`${s(e)}/run-mode`,{method:`PUT`,data:{mode:t}}),resolveApproval:(e,t,n)=>c(`${s(e)}/approvals/${encodeURIComponent(t)}`,{method:`POST`,data:{approved:n}}),answerQuestion:(e,t,n)=>c(`${s(e)}/questions/${encodeURIComponent(t)}`,{method:`POST`,data:n}),enqueueSessionStart:(e,t)=>c(`${s(e)}/queue`,{method:`POST`,data:t}),startQueuedSession:e=>c(`${s(e)}/queue/start`,{method:`POST`,data:{}}),exportSessionMarkdown:(e,t)=>i(`${s(e)}/export?format=markdown&lang=${t===`en-US`?`en-US`:`zh-CN`}`,{timeout:6e4}),updateCwd:(e,t)=>c(`${s(e)}/cwd`,{method:`PUT`,data:{cwd:t}}),renameSession:(e,t)=>c(s(e),{method:`PATCH`,data:{name:t}})};export{l 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-CIB7ZPX3.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{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{d as n}from"./i18n-Du-JO3Qx.js";import{i as r,r as i,t as a}from"./runtime-capabilities-CHYOF_hE.js";var o=e(t(),1),s=`section`,c={models:`config:configPage.models`,notifications:`config:configPage.notifications`,interface:`config:configPage.interface`,shortcuts:`config:configPage.shortcuts`,"desktop-pet":`config:configPage.desktopPet`,updates:`config:configPage.appUpdates`,labs:`config:configPage.labs`,about:`config:configPage.about`,"remote-access":`config:configPage.remoteAccess`,"mobile-server":`config:configPage.mobileServer`},l=[{id:`sec-models`,section:`models`,card:s,titleKey:`config:configPage.models`,keywords:[`model`,`provider`,`llm`,`api`,`模型`,`供应商`,`大模型`]},{id:`sec-notifications`,section:`notifications`,card:s,titleKey:`config:configPage.notifications`,keywords:[`notification`,`push`,`alert`,`通知`,`推送`,`提醒`]},{id:`sec-interface`,section:`interface`,card:s,titleKey:`config:configPage.interface`,keywords:[`interface`,`theme`,`appearance`,`display`,`界面`,`主题`,`外观`,`显示`]},{id:`sec-shortcuts`,section:`shortcuts`,card:s,titleKey:`config:configPage.shortcuts`,keywords:[`keyboard`,`shortcut`,`hotkey`,`keybinding`,`voice`,`push to talk`,`快捷键`,`按键`,`键盘`,`语音`,`长按`]},{id:`sec-desktop-pet`,section:`desktop-pet`,card:s,titleKey:`config:configPage.desktopPet`,keywords:[`pet`,`petdex`,`宠物`,`桌宠`]},{id:`sec-updates`,section:`updates`,card:s,titleKey:`config:configPage.appUpdates`,keywords:[`update`,`upgrade`,`version`,`更新`,`升级`,`版本`]},{id:`sec-labs`,section:`labs`,card:s,titleKey:`config:configPage.labs`,keywords:[`labs`,`beta`,`experimental`,`preview`,`实验`,`测试版`,`尝鲜`,`内测`]},{id:`sec-about`,section:`about`,card:s,titleKey:`config:configPage.about`,keywords:[`about`,`info`,`license`,`关于`,`信息`,`许可`]},{id:`sec-remote-access`,section:`remote-access`,card:s,titleKey:`config:configPage.remoteAccess`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`sec-mobile-server`,section:`mobile-server`,card:s,titleKey:`config:configPage.mobileServer`,keywords:[`server`,`remote`,`network`,`服务器`,`远程`,`网络`]},{id:`models-current-model`,section:`models`,card:`models-current-model`,targetId:`models-connections`,titleKey:`config:configPage.currentChatModel`,keywords:[`model`,`provider`,`quick setup`,`模型`,`供应商`,`快速配置`,`对话模型`]},{id:`models-connections`,section:`models`,card:`models-connections`,titleKey:`config:configPage.manageConnections`,keywords:[`provider`,`connection`,`api key`,`import`,`连接`,`供应商`,`导入`,`密钥`]},{id:`models-runtime-policy`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:configPage.agentRuntimePolicy`,keywords:[`runtime`,`agent`,`policy`,`thinking`,`tools`,`运行策略`,`运行时`,`执行策略`,`思考强度`,`可用工具`]},{id:`models-fallback`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.fallbackModels`,keywords:[`fallback`,`backup`,`failover`,`quota`,`备用模型`,`备选`,`额度`,`切换模型`]},{id:`models-auxiliary`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.auxiliaryModel`,keywords:[`auxiliary`,`helper model`,`title`,`compaction`,`summary`,`辅助模型`,`标题`,`压缩`,`摘要`,`记忆`]},{id:`models-subagents`,section:`models`,card:`models-subagents`,targetId:`models-subagents`,titleKey:`config:subagents.title`,keywords:[`subagent`,`agent definition`,`tier`,`fast`,`strong`,`子代理`,`子 Agent`,`档位`,`便宜模型`,`.pisper/agents`]},{id:`models-permission-rules`,section:`models`,card:`models-permission-rules`,targetId:`models-permission-rules`,titleKey:`config:permissionRules.title`,keywords:[`permission`,`allow`,`deny`,`approval`,`rule`,`权限`,`审批`,`允许`,`禁止`,`规则`]},{id:`models-visual`,section:`models`,card:`models-visual`,targetId:`models-visual`,expandGroup:`models-advanced`,titleKey:`config:configPage.currentVisualModel`,keywords:[`image`,`video`,`visual`,`图片`,`图像`,`视频`,`视觉`,`生图`]},{id:`notifications-browser`,section:`notifications`,card:`notifications-browser`,titleKey:`config:notificationSettings.notification`,keywords:[`browser`,`system`,`push`,`浏览器通知`,`系统通知`,`推送`]},{id:`notifications-templates`,section:`notifications`,card:`notifications-templates`,titleKey:`config:notificationSettings.notificationTemplates`,keywords:[`template`,`模板`,`通知模板`]},{id:`interface-custom-ui`,section:`interface`,card:`interface-custom-ui`,titleKey:`navigation:shell.components`,sectionTitleKey:`custom-ui:moved.title`,keywords:[`custom ui`,`standalone widgets`,`component`,`native`,`manifest`,`独立组件`,`自定义组件`,`组件`]},{id:`interface-appearance`,section:`interface`,card:`interface-appearance`,titleKey:`config:interfaceSettings.appearance`,keywords:[`theme`,`dark`,`light`,`accent`,`主题`,`深色`,`浅色`,`强调色`,`外观`]},{id:`interface-style`,section:`interface`,card:`interface-style`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.interfaceStyle`,keywords:[`font`,`corner`,`radius`,`字体`,`字号`,`圆角`]},{id:`interface-motion`,section:`interface`,card:`interface-motion`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.displayAndMotion`,keywords:[`motion`,`density`,`animation`,`动效`,`动画`,`密度`,`显示`]},{id:`interface-language`,section:`interface`,card:`interface-language`,titleKey:`config:languageSettings.displayLanguage`,keywords:[`language`,`chinese`,`english`,`语言`,`中文`,`英文`,`英语`]},{id:`desktop-pet-settings`,section:`desktop-pet`,card:`desktop-pet-settings`,titleKey:`config:desktopPetSettings.title`,keywords:[`pet`,`宠物`,`桌宠`,`宠物设置`]},{id:`desktop-pet-install`,section:`desktop-pet`,card:`desktop-pet-install`,titleKey:`config:desktopPetSettings.installTitle`,keywords:[`petdex`,`install`,`宠物安装`,`添加宠物`]},{id:`desktop-pet-installed`,section:`desktop-pet`,card:`desktop-pet-installed`,titleKey:`config:desktopPetSettings.installedTitle`,keywords:[`installed`,`已安装`,`宠物列表`]},{id:`mobile-server-main`,section:`mobile-server`,card:`mobile-server-main`,titleKey:`config:mobileServer.title`,keywords:[`server`,`remote`,`服务器`,`远程`,`手机访问`]},{id:`mobile-server-local`,section:`mobile-server`,card:`mobile-server-local`,titleKey:`config:mobileServer.localTitle`,keywords:[`local`,`on-device`,`本机`,`本地运行`]},{id:`remote-workspaces`,section:`remote-access`,card:`remote-workspaces`,titleKey:`config:remoteWorkspace.title`,keywords:[`linux`,`remote workspace`,`服务器`,`远程工作区`]},{id:`remote-access-main`,section:`remote-access`,card:`remote-access-main`,titleKey:`config:remoteAccess.title`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`remote-access-pairing`,section:`remote-access`,card:`remote-access-pairing`,titleKey:`config:remoteAccess.pairing`,keywords:[`pairing`,`qr`,`配对`,`二维码`]},{id:`remote-access-devices`,section:`remote-access`,card:`remote-access-devices`,titleKey:`config:remoteAccess.devices`,keywords:[`device`,`paired`,`设备`,`已配对`,`授权`]},{id:`updates-main`,section:`updates`,card:`updates-main`,titleKey:`config:updateSettings.pisperAppUpdates`,keywords:[`update`,`version`,`channel`,`更新`,`版本`,`升级`,`渠道`]},{id:`updates-components`,section:`updates`,card:`updates-components`,titleKey:`config:updateSettings.appComponents`,keywords:[`component`,`runtime`,`sidecar`,`组件`,`运行时`]},{id:`updates-cli`,section:`updates`,card:`updates-cli`,titleKey:`config:cliSettings.title`,keywords:[`cli`,`terminal`,`command`,`命令行`,`终端`,`命令`]},{id:`about-project`,section:`about`,card:`about-project`,titleKey:`config:aboutSettings.projectInformation`,keywords:[`project`,`version`,`license`,`项目`,`版本`,`许可`]},{id:`about-support`,section:`about`,card:`about-support`,titleKey:`config:aboutSettings.supportPisper`,keywords:[`support`,`donate`,`sponsor`,`支持`,`捐赠`,`赞助`]}],u={provider:[`sec-models`,`models-current-model`,`models-connections`],供应商:[`sec-models`,`models-current-model`,`models-connections`],model:[`sec-models`,`models-current-model`,`models-connections`],模型:[`sec-models`,`models-current-model`,`models-connections`],theme:[`sec-interface`,`interface-appearance`],主题:[`sec-interface`,`interface-appearance`],interface:[`sec-interface`,`interface-appearance`],界面:[`sec-interface`,`interface-appearance`,`interface-language`],diy:[`interface-custom-ui`],components:[`interface-custom-ui`],widgets:[`interface-custom-ui`],组件:[`interface-custom-ui`],pet:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],宠物:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],update:[`sec-updates`,`updates-main`,`updates-components`],更新:[`sec-updates`,`updates-main`,`updates-components`],network:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],网络:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],remote:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],远程:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],notification:[`sec-notifications`,`notifications-browser`,`notifications-templates`],通知:[`sec-notifications`,`notifications-browser`,`notifications-templates`],language:[`interface-language`],语言:[`interface-language`]},d=12;function f(e){return[n(e.titleKey,`zh-CN`).toLowerCase(),n(e.titleKey,`en-US`).toLowerCase()]}function p(e,t,{capabilities:o=a,mobileApp:s}={}){let p=e.trim().toLowerCase();if(!p)return[];let m=new Set(u[p]||[]);for(let e of p.split(/\s+/))for(let t of u[e]||[])m.add(t);let h=[];for(let e of l){if(!i(o,e.section)||e.id===`models-visual`&&!r(o,`visualGeneration`)||s!==void 0&&(e.section===`mobile-server`&&!s||e.section===`remote-access`&&s)||typeof window<`u`&&(e.id===`remote-workspaces`&&!window.pisperDesktop?.remoteWorkspaces||e.id===`remote-access-main`&&window.__PISPER_REMOTE_WORKSPACE__))continue;let[t,n]=f(e),a=0;m.has(e.id)?a=100:t===p||n===p?a=90:t.startsWith(p)||n.startsWith(p)?a=80:t.includes(p)||n.includes(p)?a=65:(e.keywords||[]).some(e=>{let t=e.toLowerCase();return t.includes(p)?p.length>=2||/[\u4e00-\u9fff]/.test(p):/[\u4e00-\u9fff]/.test(t)&&t.includes(p)})&&(a=40),a>0&&h.push({entry:e,score:a})}h.sort((e,t)=>t.score-e.score);let g=new Set,_=[];for(let{entry:e}of h){let r={entry:e,title:n(e.titleKey,t),sectionTitle:n(e.sectionTitleKey||c[e.section],t)},i=`${e.section}|${r.title}`;if(!g.has(i)&&(g.add(i),_.push(r),_.length>=d))break}return _}var m=`pisper:config-card-highlight`,h=null,g=0,_=new Set;function v(){for(let e of _)e()}function y(e){return _.add(e),()=>{_.delete(e)}}function b(e,t,n={}){h={card:e,section:t,...n,targetId:n.targetId||e,navigationKey:++g},v(),window.dispatchEvent(new Event(m))}function x(e){let t=(0,o.useSyncExternalStore)(y,()=>h,()=>null);return(0,o.useEffect)(()=>{if(!t||t.section!==e)return;let n=0,r=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(h?.navigationKey!==t.navigationKey)return;let e=Array.from(document.querySelectorAll(`[data-config-target], [data-config-card]`)).find(e=>e.dataset.configTarget===t.targetId||e.dataset.configCard===t.targetId);if(!e||!e.getClientRects().length)return;let n=e.querySelector(`input:not([disabled]), button:not([disabled]), select:not([disabled]), [tabindex="0"]`)||e;!n.hasAttribute(`tabindex`)&&n===e&&(n.tabIndex=-1),n.focus({preventScroll:!0}),e.scrollIntoView({block:`center`}),i.disconnect(),h=null,v()})},i=new MutationObserver(r);return i.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`hidden`,`style`,`data-state`]}),r(),()=>{cancelAnimationFrame(n),i.disconnect()}},[t,e]),t?.section===e?t:null}export{x as i,b as n,p as r,s as t};
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{i as t}from"./vendor-react-DwNgTV1j.js";import{d as n}from"./i18n-CXRjs9ow.js";import{i as r,r as i,t as a}from"./runtime-capabilities-CHYOF_hE.js";var o=e(t(),1),s=`section`,c={models:`config:configPage.models`,notifications:`config:configPage.notifications`,interface:`config:configPage.interface`,shortcuts:`config:configPage.shortcuts`,"desktop-pet":`config:configPage.desktopPet`,updates:`config:configPage.appUpdates`,labs:`config:configPage.labs`,about:`config:configPage.about`,"remote-access":`config:configPage.remoteAccess`,"mobile-server":`config:configPage.mobileServer`},l=[{id:`sec-models`,section:`models`,card:s,titleKey:`config:configPage.models`,keywords:[`model`,`provider`,`llm`,`api`,`模型`,`供应商`,`大模型`]},{id:`sec-notifications`,section:`notifications`,card:s,titleKey:`config:configPage.notifications`,keywords:[`notification`,`push`,`alert`,`通知`,`推送`,`提醒`]},{id:`sec-interface`,section:`interface`,card:s,titleKey:`config:configPage.interface`,keywords:[`interface`,`theme`,`appearance`,`display`,`界面`,`主题`,`外观`,`显示`]},{id:`sec-shortcuts`,section:`shortcuts`,card:s,titleKey:`config:configPage.shortcuts`,keywords:[`keyboard`,`shortcut`,`hotkey`,`keybinding`,`voice`,`push to talk`,`快捷键`,`按键`,`键盘`,`语音`,`长按`]},{id:`sec-desktop-pet`,section:`desktop-pet`,card:s,titleKey:`config:configPage.desktopPet`,keywords:[`pet`,`petdex`,`宠物`,`桌宠`]},{id:`sec-updates`,section:`updates`,card:s,titleKey:`config:configPage.appUpdates`,keywords:[`update`,`upgrade`,`version`,`更新`,`升级`,`版本`]},{id:`sec-labs`,section:`labs`,card:s,titleKey:`config:configPage.labs`,keywords:[`labs`,`beta`,`experimental`,`preview`,`实验`,`测试版`,`尝鲜`,`内测`]},{id:`sec-about`,section:`about`,card:s,titleKey:`config:configPage.about`,keywords:[`about`,`info`,`license`,`关于`,`信息`,`许可`]},{id:`sec-remote-access`,section:`remote-access`,card:s,titleKey:`config:configPage.remoteAccess`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`sec-mobile-server`,section:`mobile-server`,card:s,titleKey:`config:configPage.mobileServer`,keywords:[`server`,`remote`,`network`,`服务器`,`远程`,`网络`]},{id:`models-current-model`,section:`models`,card:`models-current-model`,targetId:`models-connections`,titleKey:`config:configPage.currentChatModel`,keywords:[`model`,`provider`,`quick setup`,`模型`,`供应商`,`快速配置`,`对话模型`]},{id:`models-connections`,section:`models`,card:`models-connections`,titleKey:`config:configPage.manageConnections`,keywords:[`provider`,`connection`,`api key`,`import`,`连接`,`供应商`,`导入`,`密钥`]},{id:`models-runtime-policy`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:configPage.agentRuntimePolicy`,keywords:[`runtime`,`agent`,`policy`,`thinking`,`tools`,`运行策略`,`运行时`,`执行策略`,`思考强度`,`可用工具`]},{id:`models-fallback`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.fallbackModels`,keywords:[`fallback`,`backup`,`failover`,`quota`,`备用模型`,`备选`,`额度`,`切换模型`]},{id:`models-auxiliary`,section:`models`,card:`models-current-model`,targetId:`models-runtime-policy`,titleKey:`config:providerWorkbench.auxiliaryModel`,keywords:[`auxiliary`,`helper model`,`title`,`compaction`,`summary`,`辅助模型`,`标题`,`压缩`,`摘要`,`记忆`]},{id:`models-subagents`,section:`models`,card:`models-subagents`,targetId:`models-subagents`,titleKey:`config:subagents.title`,keywords:[`subagent`,`agent definition`,`tier`,`fast`,`strong`,`子代理`,`子 Agent`,`档位`,`便宜模型`,`.pisper/agents`]},{id:`models-permission-rules`,section:`models`,card:`models-permission-rules`,targetId:`models-permission-rules`,titleKey:`config:permissionRules.title`,keywords:[`permission`,`allow`,`deny`,`approval`,`rule`,`权限`,`审批`,`允许`,`禁止`,`规则`]},{id:`models-visual`,section:`models`,card:`models-visual`,targetId:`models-visual`,expandGroup:`models-advanced`,titleKey:`config:configPage.currentVisualModel`,keywords:[`image`,`video`,`visual`,`图片`,`图像`,`视频`,`视觉`,`生图`]},{id:`notifications-browser`,section:`notifications`,card:`notifications-browser`,titleKey:`config:notificationSettings.notification`,keywords:[`browser`,`system`,`push`,`浏览器通知`,`系统通知`,`推送`]},{id:`notifications-templates`,section:`notifications`,card:`notifications-templates`,titleKey:`config:notificationSettings.notificationTemplates`,keywords:[`template`,`模板`,`通知模板`]},{id:`interface-custom-ui`,section:`interface`,card:`interface-custom-ui`,titleKey:`navigation:shell.components`,sectionTitleKey:`custom-ui:moved.title`,keywords:[`custom ui`,`standalone widgets`,`component`,`native`,`manifest`,`独立组件`,`自定义组件`,`组件`]},{id:`interface-appearance`,section:`interface`,card:`interface-appearance`,titleKey:`config:interfaceSettings.appearance`,keywords:[`theme`,`dark`,`light`,`accent`,`主题`,`深色`,`浅色`,`强调色`,`外观`]},{id:`interface-style`,section:`interface`,card:`interface-style`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.interfaceStyle`,keywords:[`font`,`corner`,`radius`,`字体`,`字号`,`圆角`]},{id:`interface-motion`,section:`interface`,card:`interface-motion`,expandGroup:`interface-advanced`,titleKey:`config:interfaceSettings.displayAndMotion`,keywords:[`motion`,`density`,`animation`,`动效`,`动画`,`密度`,`显示`]},{id:`interface-language`,section:`interface`,card:`interface-language`,titleKey:`config:languageSettings.displayLanguage`,keywords:[`language`,`chinese`,`english`,`语言`,`中文`,`英文`,`英语`]},{id:`desktop-pet-settings`,section:`desktop-pet`,card:`desktop-pet-settings`,titleKey:`config:desktopPetSettings.title`,keywords:[`pet`,`宠物`,`桌宠`,`宠物设置`]},{id:`desktop-pet-install`,section:`desktop-pet`,card:`desktop-pet-install`,titleKey:`config:desktopPetSettings.installTitle`,keywords:[`petdex`,`install`,`宠物安装`,`添加宠物`]},{id:`desktop-pet-installed`,section:`desktop-pet`,card:`desktop-pet-installed`,titleKey:`config:desktopPetSettings.installedTitle`,keywords:[`installed`,`已安装`,`宠物列表`]},{id:`mobile-server-main`,section:`mobile-server`,card:`mobile-server-main`,titleKey:`config:mobileServer.title`,keywords:[`server`,`remote`,`服务器`,`远程`,`手机访问`]},{id:`mobile-server-local`,section:`mobile-server`,card:`mobile-server-local`,titleKey:`config:mobileServer.localTitle`,keywords:[`local`,`on-device`,`本机`,`本地运行`]},{id:`remote-workspaces`,section:`remote-access`,card:`remote-workspaces`,titleKey:`config:remoteWorkspace.title`,keywords:[`linux`,`remote workspace`,`服务器`,`远程工作区`]},{id:`remote-access-main`,section:`remote-access`,card:`remote-access-main`,titleKey:`config:remoteAccess.title`,keywords:[`remote`,`network`,`phone`,`远程`,`网络`,`手机`]},{id:`remote-access-pairing`,section:`remote-access`,card:`remote-access-pairing`,titleKey:`config:remoteAccess.pairing`,keywords:[`pairing`,`qr`,`配对`,`二维码`]},{id:`remote-access-devices`,section:`remote-access`,card:`remote-access-devices`,titleKey:`config:remoteAccess.devices`,keywords:[`device`,`paired`,`设备`,`已配对`,`授权`]},{id:`updates-main`,section:`updates`,card:`updates-main`,titleKey:`config:updateSettings.pisperAppUpdates`,keywords:[`update`,`version`,`channel`,`更新`,`版本`,`升级`,`渠道`]},{id:`updates-components`,section:`updates`,card:`updates-components`,titleKey:`config:updateSettings.appComponents`,keywords:[`component`,`runtime`,`sidecar`,`组件`,`运行时`]},{id:`updates-cli`,section:`updates`,card:`updates-cli`,titleKey:`config:cliSettings.title`,keywords:[`cli`,`terminal`,`command`,`命令行`,`终端`,`命令`]},{id:`about-project`,section:`about`,card:`about-project`,titleKey:`config:aboutSettings.projectInformation`,keywords:[`project`,`version`,`license`,`项目`,`版本`,`许可`]},{id:`about-support`,section:`about`,card:`about-support`,titleKey:`config:aboutSettings.supportPisper`,keywords:[`support`,`donate`,`sponsor`,`支持`,`捐赠`,`赞助`]}],u={provider:[`sec-models`,`models-current-model`,`models-connections`],供应商:[`sec-models`,`models-current-model`,`models-connections`],model:[`sec-models`,`models-current-model`,`models-connections`],模型:[`sec-models`,`models-current-model`,`models-connections`],theme:[`sec-interface`,`interface-appearance`],主题:[`sec-interface`,`interface-appearance`],interface:[`sec-interface`,`interface-appearance`],界面:[`sec-interface`,`interface-appearance`,`interface-language`],diy:[`interface-custom-ui`],components:[`interface-custom-ui`],widgets:[`interface-custom-ui`],组件:[`interface-custom-ui`],pet:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],宠物:[`sec-desktop-pet`,`desktop-pet-settings`,`desktop-pet-install`,`desktop-pet-installed`],update:[`sec-updates`,`updates-main`,`updates-components`],更新:[`sec-updates`,`updates-main`,`updates-components`],network:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],网络:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],remote:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],远程:[`sec-remote-access`,`sec-mobile-server`,`remote-access-main`],notification:[`sec-notifications`,`notifications-browser`,`notifications-templates`],通知:[`sec-notifications`,`notifications-browser`,`notifications-templates`],language:[`interface-language`],语言:[`interface-language`]},d=12;function f(e){return[n(e.titleKey,`zh-CN`).toLowerCase(),n(e.titleKey,`en-US`).toLowerCase()]}function p(e,t,{capabilities:o=a,mobileApp:s}={}){let p=e.trim().toLowerCase();if(!p)return[];let m=new Set(u[p]||[]);for(let e of p.split(/\s+/))for(let t of u[e]||[])m.add(t);let h=[];for(let e of l){if(!i(o,e.section)||e.id===`models-visual`&&!r(o,`visualGeneration`)||s!==void 0&&(e.section===`mobile-server`&&!s||e.section===`remote-access`&&s)||typeof window<`u`&&(e.id===`remote-workspaces`&&!window.pisperDesktop?.remoteWorkspaces||e.id===`remote-access-main`&&window.__PISPER_REMOTE_WORKSPACE__))continue;let[t,n]=f(e),a=0;m.has(e.id)?a=100:t===p||n===p?a=90:t.startsWith(p)||n.startsWith(p)?a=80:t.includes(p)||n.includes(p)?a=65:(e.keywords||[]).some(e=>{let t=e.toLowerCase();return t.includes(p)?p.length>=2||/[\u4e00-\u9fff]/.test(p):/[\u4e00-\u9fff]/.test(t)&&t.includes(p)})&&(a=40),a>0&&h.push({entry:e,score:a})}h.sort((e,t)=>t.score-e.score);let g=new Set,_=[];for(let{entry:e}of h){let r={entry:e,title:n(e.titleKey,t),sectionTitle:n(e.sectionTitleKey||c[e.section],t)},i=`${e.section}|${r.title}`;if(!g.has(i)&&(g.add(i),_.push(r),_.length>=d))break}return _}var m=`pisper:config-card-highlight`,h=null,g=0,_=new Set;function v(){for(let e of _)e()}function y(e){return _.add(e),()=>{_.delete(e)}}function b(e,t,n={}){h={card:e,section:t,...n,targetId:n.targetId||e,navigationKey:++g},v(),window.dispatchEvent(new Event(m))}function x(e){let t=(0,o.useSyncExternalStore)(y,()=>h,()=>null);return(0,o.useEffect)(()=>{if(!t||t.section!==e)return;let n=0,r=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(h?.navigationKey!==t.navigationKey)return;let e=Array.from(document.querySelectorAll(`[data-config-target], [data-config-card]`)).find(e=>e.dataset.configTarget===t.targetId||e.dataset.configCard===t.targetId);if(!e||!e.getClientRects().length)return;let n=e.querySelector(`input:not([disabled]), button:not([disabled]), select:not([disabled]), [tabindex="0"]`)||e;!n.hasAttribute(`tabindex`)&&n===e&&(n.tabIndex=-1),n.focus({preventScroll:!0}),e.scrollIntoView({block:`center`}),i.disconnect(),h=null,v()})},i=new MutationObserver(r);return i.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`hidden`,`style`,`data-state`]}),r(),()=>{cancelAnimationFrame(n),i.disconnect()}},[t,e]),t?.section===e?t:null}export{x as i,b as n,p as r,s 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{t as r}from"./use-i18n-
|
|
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-B2p84ZNR.js";import{t as i}from"./x-07u4-129.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./dist-BHkR6BLP.js";import{t as p}from"./utils-C8uzG5AZ.js";import{t as m}from"./button-CCcCN8tE.js";var h=e(t(),1),g=n(),_=h.createContext(!1),v=h.createContext(null);function y({busy:e=!1,open:t,defaultOpen:n=!1,onOpenChange:r,...i}){let[a,o]=h.useState(n);return(0,g.jsx)(_.Provider,{value:e,children:(0,g.jsx)(f,{"data-slot":`dialog`,open:t??a,onOpenChange:n=>{!n&&e||(t===void 0&&o(n),r?.(n))},...i})})}function b({...e}){return(0,g.jsx)(o,{"data-slot":`dialog-trigger`,...e})}function x({...e}){return(0,g.jsx)(l,{"data-slot":`dialog-portal`,...e})}function S({...e}){return(0,g.jsx)(c,{"data-slot":`dialog-close`,...e})}function C({className:e,...t}){return(0,g.jsx)(a,{"data-slot":`dialog-overlay`,className:p(`fixed inset-0 isolate z-50 bg-[var(--overlay-scrim)] duration-[var(--duration-fast,150ms)] data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,e),...t})}function w({className:e,overlayClassName:t,children:n,showCloseButton:a=!0,size:o=`default`,surface:s=`default`,scrollMode:l=`content`,ref:d,onEscapeKeyDown:f,onPointerDownOutside:y,onInteractOutside:b,...S}){let{t:w}=r(),T=h.useContext(_),[E,D]=h.useState(null),O=h.useCallback(e=>{if(D(e),typeof d==`function`)return d(e);d&&(d.current=e)},[d]);return(0,g.jsxs)(x,{children:[(0,g.jsx)(C,{className:t}),(0,g.jsx)(u,{...S,ref:O,"data-slot":`dialog-content`,"data-surface":s,"data-scroll-mode":l,"aria-busy":T||S[`aria-busy`]||void 0,onEscapeKeyDown:e=>{f?.(e),T&&e.preventDefault()},onPointerDownOutside:e=>{y?.(e),T&&e.preventDefault()},onInteractOutside:e=>{b?.(e),T&&e.preventDefault()},className:p(`fixed top-1/2 left-1/2 z-50 grid max-h-[calc(100vh-2rem)] supports-[height:100dvh]:max-h-[calc(100dvh-2rem)] w-full -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto overscroll-contain rounded-[var(--r-lg)] bg-popover p-4 text-sm text-popover-foreground shadow-float duration-[var(--duration-fast,150ms)] outline-none data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0`,o==="default"&&`max-w-[min(92vw,520px)]`,o===`compact`&&`max-w-[min(92vw,430px)]`,o===`wide`&&`max-w-[min(92vw,600px)]`,s===`confirmation`&&`border border-stroke`,l===`body`&&`flex flex-col overflow-hidden`,e),children:(0,g.jsxs)(v.Provider,{value:E,children:[n,a&&(0,g.jsx)(c,{"data-slot":`dialog-close`,asChild:!0,children:(0,g.jsxs)(m,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`,disabled:T,children:[(0,g.jsx)(i,{}),(0,g.jsx)(`span`,{className:`sr-only`,children:w(`common:ui.closeDialog`)})]})})]})})]})}function T({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-body`,className:p(`min-h-0 flex-1 overflow-y-auto overscroll-contain`,e),...t})}function E({className:e,...t}){return(0,g.jsx)(`div`,{"data-slot":`dialog-header`,className:p(`flex shrink-0 flex-col gap-2`,e),...t})}function D({className:e,showCloseButton:t=!1,children:n,...i}){let{t:a}=r();return(0,g.jsxs)(`div`,{"data-slot":`dialog-footer`,className:p(`-mx-4 -mb-4 flex shrink-0 flex-col-reverse gap-2 rounded-b-[var(--r-lg)] border-t border-stroke bg-surface-subtle px-4 py-3 sm:flex-row sm:justify-end`,e),...i,children:[n,t&&(0,g.jsx)(c,{asChild:!0,children:(0,g.jsx)(m,{variant:`outline`,size:`dialogAction`,children:a(`common:ui.closeDialog`)})})]})}function O({className:e,...t}){return(0,g.jsx)(d,{"data-slot":`dialog-title`,className:p(`font-heading text-[15px] leading-snug font-medium`,e),...t})}function k({className:e,...t}){return(0,g.jsx)(s,{"data-slot":`dialog-description`,className:p(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}export{k as a,v as c,w as i,O as l,T as n,D as o,S as r,E as s,y as t,b as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index-
|
|
1
|
+
import{t as e}from"./index-DcTDwezs.js";import{t}from"./storage-8QW6lXuT.js";var n=Object.freeze([`open`,`left`,`right`,`above`,`below`]);function r(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i(e,t=`open`,r=``){return!e||!n.includes(t)?null:{sessionId:e,disposition:t,...r?{targetEntryId:r}:{}}}function a(e){if(!e)return null;try{let t=typeof e==`string`?JSON.parse(e):e;return r(t)?i(typeof t.sessionId==`string`?t.sessionId:``,typeof t.disposition==`string`?t.disposition:`open`,typeof t.targetEntryId==`string`?t.targetEntryId:``):null}catch{return null}}var o=`pisper:task-view-will-change`,s=`pisper:session-navigation-will-change`,c=`pisper:session-selected`,l=`pisper:active-session-changed`,u=`pisper:sessions-updated`,d=`pisper:command-palette-requested`,f=`pisper:session-command`,p=`pisper:session-branch-changed`,m=`pisper:new-task-focus`;function h(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.sessionId==`string`&&typeof t.entryId==`string`?{sessionId:t.sessionId,entryId:t.entryId}:null}catch{return null}}var g=``;function _(e=``){g=typeof e==`string`?e.slice(0,200):``,window.dispatchEvent(new Event(d))}function v(){let e=g;return g=``,e}function y(e){window.dispatchEvent(new CustomEvent(f,{detail:e}))}var b=!1;function x(){b=!0,window.dispatchEvent(new Event(m))}function S(){let e=b;return b=!1,e}function C(n,r=`open`,a=``){let o=i(n,r,a);o&&(window.dispatchEvent(new Event(s)),e.setItem(t.activeSession,n),localStorage.setItem(t.sessionOpenRequest,JSON.stringify(o)),a?localStorage.setItem(t.sessionMessageTarget,JSON.stringify({sessionId:n,entryId:a})):localStorage.removeItem(t.sessionMessageTarget),window.dispatchEvent(new CustomEvent(c,{detail:o})))}function w(e){let n=h(localStorage.getItem(t.sessionMessageTarget));return n?.sessionId===e?n.entryId:``}function T(e,n){let r=h(localStorage.getItem(t.sessionMessageTarget));r?.sessionId===e&&r.entryId===n&&localStorage.removeItem(t.sessionMessageTarget)}function E(){let e=a(localStorage.getItem(t.sessionOpenRequest));return localStorage.removeItem(t.sessionOpenRequest),e}function D(){let e=a(localStorage.getItem(t.sessionOpenRequest));return e?{type:`open`,sessionId:e.sessionId}:null}function O(e,t=``){window.dispatchEvent(new CustomEvent(l,{detail:{id:e||``,model:t||``}}))}function k(e){window.dispatchEvent(e?new CustomEvent(u,{detail:e}):new Event(u))}function A(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}=t;return typeof n!=`string`||!n||typeof r!=`boolean`||typeof i!=`boolean`||typeof a!=`boolean`||typeof o!=`boolean`||s!==null&&s!==`approval`&&s!==`failure`?null:{id:n,pinned:r,archived:i,unread:a,needsAttention:o,attentionReason:s}}function j(e,t){let n=e=>{let n=A(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function M(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{id:n,name:r}=t;return typeof n==`string`&&n.length>0&&typeof r==`string`?{id:n,name:r}:null}function N(e,t){let n=e=>{let n=M(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function P(e){let t=`detail`in e?e.detail:null;if(!t||typeof t!=`object`)return null;let{deletedIds:n}=t;return!Array.isArray(n)||!n.length||!n.every(e=>typeof e==`string`&&e.length>0)?null:{deletedIds:[...new Set(n)]}}function F(e,t){let n=e=>{let n=P(e);n&&t(n)};return e.addEventListener(u,n),()=>e.removeEventListener(u,n)}function I(e){e&&window.dispatchEvent(new CustomEvent(p,{detail:{sessionId:e}}))}function L(e){let t=t=>{let n=`detail`in t?t.detail:null,r=n&&typeof n==`object`?n.sessionId:null;typeof r==`string`&&r&&e(r)};return window.addEventListener(p,t),()=>window.removeEventListener(p,t)}export{N as C,j as S,x as _,s as a,L as b,O as c,T as d,S as f,_ as g,D as h,f as i,I as l,w as m,d as n,c as o,E as p,m as r,o as s,l as t,k as u,y as v,v as w,F as x,C as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index-
|
|
1
|
+
import{t as e}from"./index-DcTDwezs.js";import{t}from"./storage-8QW6lXuT.js";import{n}from"./startup-queries-CceboYee.js";import{t as r}from"./api-CIB7ZPX3.js";import{n as i,t as a}from"./workspace-order-store-CK1RETHt.js";import{c as o,u as s}from"./events-CrT7ie40.js";import{l as c,o as l,t as u}from"./session-workspaces-Csgpuzxd.js";import{t as d}from"./pick-system-directory-B8aZR2BS.js";function f(e){return e.cwd?`${e.label} · ${e.cwd}`:e.label}async function p(){return(await n(`sessions`,!0)).sessions}function m(n,r,i){try{let a=e.getItem(t.activeSession)||``,s=l(a,n,r,i);if(s===null)return;s?e.setItem(t.activeSession,s):e.removeItem(t.activeSession),o(s)}catch{}}async function h(e,{t,notify:n,requestConfirm:a}){let o=f(e);try{let l=await p(),d=c(l,e.key);if(!d.length)return n(t(`navigation:appSidebar.projectNoChats`,{project:o}),`info`),`empty`;if(!await a({title:t(`navigation:appSidebar.deleteProject`),message:t(`navigation:appSidebar.deleteProjectConfirm`,{project:o,count:d.length}),confirmLabel:t(`navigation:appSidebar.deleteProjectAction`)}))return`cancelled`;let f=await u(d.map(e=>e.id),e=>r(`/api/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}));s(f.deletedIds.length?{deletedIds:f.deletedIds}:void 0);let h=new Set(f.deletedIds),g=null;try{g=await p()}catch{}if(m(g??l.filter(e=>!h.has(e.id)),h,g!==null),g===null)return n(t(`navigation:appSidebar.projectDeleteUnverified`,{project:o,deleted:f.deletedIds.length}),`error`),`unverified`;let _=c(g,e.key).length;return f.failedId!==null||_?(n(t(`navigation:appSidebar.projectDeletePartial`,{project:o,deleted:f.deletedIds.length,remaining:_}),`error`),`partial`):(e.cwd&&i.getState().unregisterProject(e.cwd),n(t(`navigation:appSidebar.projectDeleted`,{project:o})),`deleted`)}catch(e){return n(e instanceof Error?e.message:String(e),`error`),`failed`}}function g(e,{t,notify:n}){if(!e.cwd||e.key===`\0`)return!1;let r=i.getState().unregisterProject(e.cwd);return r&&n(t(`navigation:appSidebar.projectRemoved`,{project:f(e)})),r}function _(e,t,{t:n,notify:r}){try{return a.getState().setWorkspaceName(e.cwd,t),r(n(`navigation:appSidebar.projectNameUpdated`)),!0}catch{return r(n(`navigation:appSidebar.projectNameSaveFailed`),`error`),!1}}async function v(e,t,n,r){if(!e.cwd||e.key===`\0`)return!1;let{t:i,requestText:o}=n,s=(await o({title:i(`navigation:appSidebar.renameProject`),message:r.description,inputLabel:i(`navigation:appSidebar.projectName`),value:e.label,maxLength:120,confirmLabel:i(`chat:chatHistoryPage.save`)}))?.trim()||``;if(!s)return!1;let c=s===t?``:s;return c!==(a.getState().names[e.key]||``)&&_(e,c,n)}function y(e,t){return!e.cwd||!a.getState().names[e.key]?!1:_(e,``,t)}function b(e){return d(``,e(`common:workspacePicker.setWorkingDirectory`))}function x(e,t){return r(`/api/workspace-folders`,{method:`POST`,body:JSON.stringify({parent:e,name:t})})}function S(e){return e.includes(`\\`)&&!e.includes(`/`)?`\\`:`/`}function C(e){let t=e.trim().replace(/[\\/]+$/,``),n=Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`));if(n<0)return``;let r=t.slice(0,n);return r?/^[a-z]:$/i.test(r)?`${r}${t[n]}`:r:t[0]}function w(e,t){let n=e.trim();return n?/[\\/]$/.test(n)?`${n}${t}`:`${n}${S(n)}${t}`:t}export{b as a,y as c,h as i,C as n,g as o,x as r,v as s,w as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{u as t}from"./vendor-router-CSN_DGvx.js";import{t as n}from"./index-DmohsuQg.js";import{i as r,r as i}from"./vendor-react-DwNgTV1j.js";import{o as a,r as o}from"./routes-DIeaqWVc.js";import{t as s}from"./use-i18n-Cyg5th6Z.js";import{a as c,i as l,o as u}from"./vendor-state-GkUciC5H.js";import{r as d,t as f}from"./useQuery-DdcpUQhO.js";import{A as p,j as m,n as h,r as g,t as _}from"./session-scope-Bz6CeMq0.js";import{t as v}from"./createLucideIcon-Cd-3GVxJ.js";import{t as y}from"./ellipsis-CfGKfbq6.js";import{t as b}from"./grip-vertical-B__LYT0s.js";import{t as x}from"./plus-fQbSqB1n.js";import{t as S}from"./rotate-ccw-C0v8V77_.js";import{t as C}from"./settings-2-CXJjXJS9.js";import{t as w}from"./x-07u4-129.js";import{c as T,d as E,f as D,i as O,p as k,r as A,t as ee,u as te}from"./dropdown-menu-CFIFNaKO.js";import{i as ne,n as re,t as j}from"./popover-DUWwlhPy.js";import{t as M}from"./utils-C8uzG5AZ.js";import{t as N}from"./button-CCcCN8tE.js";import{A as P,D as ie,E as ae,I as oe,O as se,S as F,f as ce,i as I,t as L,u as R}from"./use-studio-actions-CGzcb2Fx.js";var le=v(`arrow-right-left`,[[`path`,{d:`m16 3 4 4-4 4`,key:`1x1c3m`}],[`path`,{d:`M20 7H4`,key:`zbl0bi`}],[`path`,{d:`m8 21-4-4 4-4`,key:`h9nckh`}],[`path`,{d:`M4 17h16`,key:`g4d7ey`}]]),ue=v(`square-arrow-out-up-right`,[[`path`,{d:`M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6`,key:`y09zxi`}],[`path`,{d:`m21 3-9 9`,key:`mpx6sq`}],[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}]]),z=e(r(),1),B=e=>Math.min(1,Math.max(0,e)),V=e=>Number.isFinite(e)?Math.max(0,e):0,H=8,U=12,de=160;function fe(e,t,n=0){let r=Math.max(0,V(e.width)-V(t.width)),i=Math.max(0,V(e.height)-V(t.height)),a=Math.max(0,i-de),o=Math.max(0,a-H),s=V(t.height)+U,c=s?Math.floor(o/s)+1:1,l=Math.max(0,Math.floor(n)),u=Math.floor(l/c),d=l%c,f=r-H-u*(V(t.width)+U),p=a-d*s;return{x:r?B(f/r):1,y:i?B(p/i):1}}function pe(e,t){return`${t?`mobile`:`desktop`}:${e}`}function W(e,t,n){return{x:B(e.x)*Math.max(0,V(t.width)-V(n.width)),y:B(e.y)*Math.max(0,V(t.height)-V(n.height))}}function G(e,t,n,r){let i=W(e,n,r),a=Math.max(0,V(n.width)-V(r.width)),o=Math.max(0,V(n.height)-V(r.height));return{x:B(a?(i.x+t.x)/a:e.x),y:B(o?(i.y+t.y)/o:e.y)}}function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function q(e){if(!Array.isArray(e))return[];let t=new Map;for(let n of e)!K(n)||typeof n.key!=`string`||!/^(desktop|mobile):[a-zA-Z0-9][a-zA-Z0-9._:-]{0,95}$/.test(n.key)||!K(n.position)||typeof n.position.x!=`number`||!Number.isFinite(n.position.x)||typeof n.position.y!=`number`||!Number.isFinite(n.position.y)||(t.delete(n.key),t.set(n.key,{x:B(n.position.x),y:B(n.position.y)}),t.size>128&&t.delete(t.keys().next().value??``));return[...t].map(([e,t])=>({key:e,position:t}))}function me(e,t,n){return q([...e.filter(e=>e.key!==t),{key:t,position:n}])}var he=l(()=>({getItem:e=>{try{return n.getItem(e)}catch{return null}},setItem:(e,t)=>{try{n.setItem(e,t)}catch{}},removeItem:e=>{try{n.removeItem(e)}catch{}}})),J=u()(c(e=>({positions:[],setPosition:(t,n)=>e(e=>({positions:me(e.positions,t,n)})),resetPosition:t=>e(e=>({positions:e.positions.filter(e=>e.key!==t)}))}),{name:`pisper-floating-placement`,version:1,storage:he,partialize:({positions:e})=>({positions:e}),merge:(e,t)=>({...t,positions:q(e&&typeof e==`object`&&`positions`in e?e.positions:void 0)})})),Y=i(),X={width:0,height:0},ge=/^(?:desktop|mobile):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Z=`flex items-center justify-center rounded-full bg-key text-content-muted shadow-key ring-1 ring-key-border hover:text-content`;function _e(e){let t=e.component.manifest,n=t&&se(t,`floating`)?.size||ae;return{width:n.w,height:n.h}}function ve({placed:e,boundaryRef:t,activeSessionId:n,notify:r,onClose:i,stackIndex:a}){let{t:o}=s(),{instance:c,component:l}=e,u=R(l,r),d=pe(c.instanceId,!1),f=J(e=>e.positions.find(e=>e.key===d)?.position),p=(0,z.useRef)(null),m=(0,z.useRef)(null),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)({bounds:X,widget:X}),y=f??fe(_.bounds,_.widget,a),x=(0,z.useId)(),C=_e(e),T=c.title||l.manifest?.name||l.name;(0,z.useEffect)(()=>{let e=t.current,n=p.current;if(!e||!n)return;let r=()=>{let t={bounds:{width:e.clientWidth,height:e.clientHeight},widget:{width:n.offsetWidth,height:n.offsetHeight}};v(e=>e.bounds.width===t.bounds.width&&e.bounds.height===t.bounds.height&&e.widget.width===t.widget.width&&e.widget.height===t.widget.height?e:t)},i=new ResizeObserver(()=>r());return r(),i.observe(e),i.observe(n),window.addEventListener(`resize`,r),()=>{i.disconnect(),window.removeEventListener(`resize`,r)}},[t]),(0,z.useEffect)(()=>(g(null),()=>{let e=m.current;m.current=null,e?.element.hasPointerCapture(e.pointerId)&&e.element.releasePointerCapture(e.pointerId)}),[d]);let E=(e,t)=>{let n=m.current;!n||n.pointerId!==e.pointerId||(m.current=null,t&&J.getState().setPosition(d,n.latest),g(null),n.element.hasPointerCapture(n.pointerId)&&n.element.releasePointerCapture(n.pointerId))},D=()=>J.getState().resetPosition(d),O=e=>{let t=e.shiftKey?32:12,n={ArrowLeft:{x:-t,y:0},ArrowRight:{x:t,y:0},ArrowUp:{x:0,y:-t},ArrowDown:{x:0,y:t}};if(e.key===`Home`){e.preventDefault(),D();return}let r=n[e.key];r&&(e.preventDefault(),J.getState().setPosition(d,G(y,r,_.bounds,_.widget)))},k=W(h??y,_.bounds,_.widget);return(0,Y.jsxs)(`div`,{ref:p,role:`group`,"aria-label":T,"data-floating-widget":c.instanceId,"data-floating-component":l.id,className:`pointer-events-auto absolute flex max-w-full flex-col px-6`,style:{left:k.x,top:k.y,width:C.width+48,maxHeight:`100%`,visibility:_.bounds.width>0?`visible`:`hidden`},children:[(0,Y.jsxs)(`div`,{className:`absolute top-1/2 left-0 z-10 flex -translate-y-1/2 flex-col items-center gap-1`,children:[(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.move`),"aria-describedby":x,title:o(`custom-ui:floating.moveHint`),className:M(Z,`h-6 w-5 touch-none`),style:{cursor:h?`grabbing`:`grab`},"data-floating-move":!0,onKeyDown:O,onPointerDown:e=>{e.button!==0||m.current||(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}),e.currentTarget.setPointerCapture(e.pointerId),m.current={pointerId:e.pointerId,element:e.currentTarget,x:e.clientX,y:e.clientY,initial:y,latest:y},g(y))},onPointerMove:e=>{let t=m.current;if(!t||t.pointerId!==e.pointerId)return;let n=G(t.initial,{x:e.clientX-t.x,y:e.clientY-t.y},_.bounds,_.widget);t.latest=n,g(n)},onPointerUp:e=>E(e,!0),onPointerCancel:e=>E(e,!1),onLostPointerCapture:e=>E(e,!1),children:(0,Y.jsx)(b,{className:`size-3`})}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.resetPosition`),title:o(`custom-ui:floating.resetPosition`),onClick:D,className:M(Z,`size-5`),children:(0,Y.jsx)(S,{className:`size-3`})}),(0,Y.jsx)(`span`,{id:x,className:`sr-only`,children:o(`custom-ui:floating.moveHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.close`),title:o(`custom-ui:floating.close`),"data-floating-close":!0,onClick:()=>i(c.instanceId),className:M(Z,`absolute top-1/2 right-0 z-10 size-5 -translate-y-1/2`),children:(0,Y.jsx)(w,{className:`size-3`})}),(0,Y.jsx)(`div`,{className:`flex min-h-0 flex-col overflow-hidden rounded-md border border-stroke bg-panel shadow-key`,style:{height:C.height},children:(0,Y.jsx)(P,{component:l,instance:{instanceId:c.instanceId,surface:`floating`,title:c.title,props:c.props},session:n?{id:n,title:``,cwd:``,status:`idle`}:void 0,notify:r,onRequestFix:u,className:`h-full`})})]})}function ye({placed:e,activeSessionId:t,notify:n,hidden:r=!1}){let{t:i}=s(),a=d(),o=(0,z.useRef)(null);(0,z.useEffect)(()=>{let e=J.getState();for(let t of e.positions)ge.test(t.key)||e.resetPosition(t.key)},[]);let c=e=>{p(e,{enabled:!1}).then(()=>a.invalidateQueries({queryKey:m.instances()}),()=>n(i(`custom-ui:floating.closeFailed`)))};return(0,Y.jsx)(`div`,{ref:o,className:`pointer-events-none fixed inset-x-2 top-12 bottom-2 z-40 overflow-hidden`,hidden:r,"data-floating-custom-ui":!0,children:e.map((e,r)=>(0,Y.jsx)(ve,{placed:e,boundaryRef:o,activeSessionId:t,notify:n,onClose:c,stackIndex:r},e.instance.instanceId))})}var be=[`session-panel`,`feature-page`,`floating`];function xe(e,t){let{instance:n,component:r}=e;return n.title||r.manifest?.i18n[t]?.name||r.name}function Q({placed:e,label:n,instances:r,notify:i}){let{t:o}=s(),c=t(),l=L(i),[u,d]=(0,z.useState)(!1),{instance:f,component:p}=e,m=async e=>{if(!u){d(!0);try{if(!await l.place(p,r,{surface:e,...f.title?{title:f.title}:{},props:f.props}))return;await l.unplace(f)&&i(o(`custom-ui:overview.moved`,{place:I(e,o)}))}finally{d(!1)}}};return(0,Y.jsxs)(ee,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,className:`flex-none`,disabled:u,"aria-label":o(`custom-ui:overview.menu`,{name:n}),title:o(`custom-ui:overview.menu`,{name:n}),"data-overview-component-menu":!0,children:(0,Y.jsx)(y,{"aria-hidden":`true`})})}),(0,Y.jsxs)(A,{align:`end`,className:`w-52`,children:[(0,Y.jsxs)(O,{onSelect:()=>c(a(p.id),{state:{componentInstanceId:f.instanceId}}),children:[(0,Y.jsx)(C,{"aria-hidden":`true`}),o(`custom-ui:overview.settings`)]}),(0,Y.jsxs)(O,{onSelect:()=>c(a(p.id)),children:[(0,Y.jsx)(ue,{"aria-hidden":`true`}),o(`custom-ui:tool.openInStudio`)]}),(0,Y.jsxs)(te,{children:[(0,Y.jsxs)(D,{"data-overview-component-move":!0,children:[(0,Y.jsx)(le,{"aria-hidden":`true`}),o(`custom-ui:overview.move`)]}),(0,Y.jsx)(E,{className:`w-48`,children:be.map(e=>{let t=F(p.manifest,e),n=r.some(t=>t.componentId===p.id&&t.surface===e&&t.enabled);return(0,Y.jsxs)(O,{disabled:!t||n,"data-overview-component-move-to":e,onSelect:()=>void m(e),children:[I(e,o),(0,Y.jsx)(`span`,{className:`ml-auto text-xs text-content-muted`,children:t?n?o(`custom-ui:studio.placed`):``:o(`custom-ui:studio.placeUndeclaredShort`)})]},e)})})]}),(0,Y.jsx)(T,{}),(0,Y.jsxs)(O,{"data-overview-component-remove":!0,onSelect:()=>{l.unplace(f).then(e=>{e&&i(o(`custom-ui:overview.removed`,{name:n}))})},children:[(0,Y.jsx)(w,{"aria-hidden":`true`}),o(`custom-ui:overview.remove`)]})]})]})}function Se({placed:e,instances:t,activeSessionId:n,notify:r,onOpenSession:i}){let{t:a,language:o}=s(),{instance:c,component:l}=e,u=c.size===`M`?`M`:`S`,d=xe(e,o),f=R(l,r);return(0,Y.jsxs)(`article`,{"aria-label":d,"data-overview-component":c.instanceId,"data-overview-component-id":l.id,"data-overview-component-size":u,className:`flex-none overflow-hidden rounded-[var(--r-lg)] bg-panel ring-1 ring-stroke`,children:[(0,Y.jsxs)(`header`,{className:`flex h-9 items-center gap-2 border-b border-stroke-soft pr-1 pl-3 pointer-coarse:h-12`,children:[(0,Y.jsx)(`h3`,{className:`min-w-0 flex-1 truncate text-[13px] leading-5 font-medium text-content`,children:d}),(0,Y.jsx)(`span`,{className:`flex-none rounded-xs border border-stroke px-1.5 text-[11px] leading-4 text-content-muted`,children:a(`custom-ui:overview.badge`)}),(0,Y.jsx)(Q,{placed:e,label:d,instances:t,notify:r})]}),(0,Y.jsx)(`div`,{"data-overview-component-body":!0,className:`overflow-hidden`,style:{height:ie[u].h},children:(0,Y.jsx)(P,{component:l,instance:{instanceId:c.instanceId,surface:`overview-card`,title:c.title,props:c.props,size:u},session:n?{id:n,title:``,cwd:``,status:`idle`}:void 0,notify:r,onOpenSession:i,onRequestFix:f,className:`h-full`})})]})}function $({className:e}){let{t:n}=s(),r=t();return(0,Y.jsxs)(`button`,{type:`button`,"data-overview-component-place":!0,onClick:()=>r(o.components),className:M(`flex h-9 w-full flex-none items-center justify-center gap-1.5 rounded-[var(--r-lg)] border border-dashed border-stroke-strong text-[12.5px] text-content-muted transition-colors duration-(--d-fast) hover:bg-surface-hover hover:text-content focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus pointer-coarse:h-11`,e),children:[(0,Y.jsx)(x,{className:`size-3.5`,"aria-hidden":`true`}),n(`custom-ui:overview.place`)]})}function Ce({placed:e,layout:t,activeSessionId:n,notify:r,onOpenSession:i}){let{t:a}=s(),o=f(g()).data?.instances??[],c=e.map(e=>(0,Y.jsx)(Se,{placed:e,instances:o,activeSessionId:n,notify:r,onOpenSession:i},e.instance.instanceId));return t===`popover`?(0,Y.jsxs)(j,{children:[(0,Y.jsx)(ne,{asChild:!0,children:(0,Y.jsx)(N,{variant:`outline`,"data-overview-components-trigger":!0,children:a(`custom-ui:overview.trigger`,{count:e.length})})}),(0,Y.jsxs)(re,{align:`end`,"aria-label":a(`custom-ui:overview.heading`),"data-overview-components":`popover`,className:`max-h-(--radix-popover-content-available-height) w-[344px] gap-3 overflow-y-auto p-3`,children:[c,(0,Y.jsx)($,{})]})]}):(0,Y.jsxs)(`div`,{"data-overview-components":t,className:M(`flex flex-col gap-3`,t===`phone`&&`mt-6`),children:[(0,Y.jsx)(`h2`,{className:`text-[13px] leading-5 font-medium text-content-secondary`,children:a(`custom-ui:overview.heading`)}),c,(0,Y.jsx)($,{})]})}function we({placed:e,sessionId:t,cwd:n,notify:r,onOpenSession:i}){let a=oe().find(e=>e.id===t),o=a?.title??``,s=a?.status??`idle`,c=(0,z.useMemo)(()=>({id:t,title:o,cwd:a?.cwd||n,status:s}),[n,t,s,a?.cwd,o]),{instance:l,component:u}=e,d=R(u,r);return(0,Y.jsx)(`div`,{"data-session-panel-component":l.instanceId,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,Y.jsx)(P,{component:u,instance:{instanceId:l.instanceId,surface:`session-panel`,title:l.title,props:l.props},session:c,notify:r,onOpenSession:i,onRequestFix:d,className:`h-full`},t)})}function Te(e,t){return e.manifest?.i18n[t]?.name||e.name}function Ee({cwd:e,notify:t,onAdded:n}){let{t:r,language:i}=s(),a=f(h()),o=f(g()),c=L(t),[l,u]=(0,z.useState)(null),d=o.data?.instances??[],p=(a.data?.components??[]).filter(e=>ce(e)&&F(e.manifest,`session-panel`)),m=async(e,t)=>{if(!l){u(e.id);try{let r=await c.place(e,d,{surface:`session-panel`,scope:t});r&&n(r.instance.instanceId)}finally{u(null)}}};return a.isPending||o.isPending?(0,Y.jsx)(`p`,{role:`status`,className:`text-content-muted`,children:r(`custom-ui:customUiPage.loading`)}):a.error||o.error?(0,Y.jsxs)(`div`,{className:`flex flex-col items-start gap-2`,children:[(0,Y.jsx)(`p`,{role:`alert`,className:`text-content-secondary`,children:r(`custom-ui:widget.catalogFailed`)}),(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,onClick:()=>{a.refetch(),o.refetch()},children:r(`custom-ui:widget.retry`)})]}):p.length?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,"data-session-component-add-menu":!0,children:[(0,Y.jsx)(`p`,{className:`text-content-secondary`,children:r(`custom-ui:sessionPanel.addHint`)}),(0,Y.jsx)(`ul`,{className:`m-0 flex list-none flex-col gap-1 p-0`,children:p.map(t=>{let a=Te(t,i),o=d.find(e=>e.componentId===t.id&&e.surface===`session-panel`),s=!!(o?.enabled&&_(o.scope,e));return(0,Y.jsxs)(`li`,{"data-session-component-candidate":t.id,className:`flex flex-col gap-1.5 rounded-sm px-1.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`truncate text-[13px] font-medium text-content`,children:a}),s&&o?(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`ghost`,className:`self-start`,onClick:()=>n(o.instanceId),children:r(`custom-ui:studio.placed`)}):(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,disabled:l!==null,"data-session-component-scope":`all`,onClick:()=>void m(t,{type:`all`}),children:r(`custom-ui:studio.scopeAll`)}),(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,disabled:l!==null||!e,"data-session-component-scope":`project`,onClick:()=>void m(t,{type:`project`,cwd:e}),children:r(`custom-ui:sessionPanel.thisProject`)})]})]},t.id)})})]}):(0,Y.jsx)(`p`,{className:`text-content-secondary`,children:r(`custom-ui:sessionPanel.empty`)})}export{P as ComponentHost,ye as FloatingComponents,Ce as OverviewComponents,Ee as SessionComponentAddMenu,we as SessionPanelComponent};
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{u as t}from"./vendor-router-CSN_DGvx.js";import{t as n}from"./index-DcTDwezs.js";import{i as r,r as i}from"./vendor-react-DwNgTV1j.js";import{o as a,r as o}from"./routes-DIeaqWVc.js";import{t as s}from"./use-i18n-B2p84ZNR.js";import{a as c,i as l,o as u}from"./vendor-state-GkUciC5H.js";import{r as d,t as f}from"./useQuery-DdcpUQhO.js";import{A as p,j as m,n as h,r as g,t as _}from"./session-scope-P-D-Ssd4.js";import{t as v}from"./createLucideIcon-Cd-3GVxJ.js";import{t as y}from"./ellipsis-CfGKfbq6.js";import{t as b}from"./grip-vertical-B__LYT0s.js";import{t as x}from"./plus-fQbSqB1n.js";import{t as S}from"./rotate-ccw-C0v8V77_.js";import{t as C}from"./settings-2-CXJjXJS9.js";import{t as w}from"./x-07u4-129.js";import{c as T,d as E,f as D,i as O,p as k,r as A,t as ee,u as te}from"./dropdown-menu-CFIFNaKO.js";import{i as ne,n as re,t as j}from"./popover-BMTgTASl.js";import{t as M}from"./utils-C8uzG5AZ.js";import{t as N}from"./button-CCcCN8tE.js";import{A as P,D as ie,E as ae,I as oe,O as se,S as F,f as ce,i as I,t as L,u as R}from"./use-studio-actions-DM2CAaXR.js";var le=v(`arrow-right-left`,[[`path`,{d:`m16 3 4 4-4 4`,key:`1x1c3m`}],[`path`,{d:`M20 7H4`,key:`zbl0bi`}],[`path`,{d:`m8 21-4-4 4-4`,key:`h9nckh`}],[`path`,{d:`M4 17h16`,key:`g4d7ey`}]]),ue=v(`square-arrow-out-up-right`,[[`path`,{d:`M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6`,key:`y09zxi`}],[`path`,{d:`m21 3-9 9`,key:`mpx6sq`}],[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}]]),z=e(r(),1),B=e=>Math.min(1,Math.max(0,e)),V=e=>Number.isFinite(e)?Math.max(0,e):0,H=8,U=12,de=160;function fe(e,t,n=0){let r=Math.max(0,V(e.width)-V(t.width)),i=Math.max(0,V(e.height)-V(t.height)),a=Math.max(0,i-de),o=Math.max(0,a-H),s=V(t.height)+U,c=s?Math.floor(o/s)+1:1,l=Math.max(0,Math.floor(n)),u=Math.floor(l/c),d=l%c,f=r-H-u*(V(t.width)+U),p=a-d*s;return{x:r?B(f/r):1,y:i?B(p/i):1}}function pe(e,t){return`${t?`mobile`:`desktop`}:${e}`}function W(e,t,n){return{x:B(e.x)*Math.max(0,V(t.width)-V(n.width)),y:B(e.y)*Math.max(0,V(t.height)-V(n.height))}}function G(e,t,n,r){let i=W(e,n,r),a=Math.max(0,V(n.width)-V(r.width)),o=Math.max(0,V(n.height)-V(r.height));return{x:B(a?(i.x+t.x)/a:e.x),y:B(o?(i.y+t.y)/o:e.y)}}function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function q(e){if(!Array.isArray(e))return[];let t=new Map;for(let n of e)!K(n)||typeof n.key!=`string`||!/^(desktop|mobile):[a-zA-Z0-9][a-zA-Z0-9._:-]{0,95}$/.test(n.key)||!K(n.position)||typeof n.position.x!=`number`||!Number.isFinite(n.position.x)||typeof n.position.y!=`number`||!Number.isFinite(n.position.y)||(t.delete(n.key),t.set(n.key,{x:B(n.position.x),y:B(n.position.y)}),t.size>128&&t.delete(t.keys().next().value??``));return[...t].map(([e,t])=>({key:e,position:t}))}function me(e,t,n){return q([...e.filter(e=>e.key!==t),{key:t,position:n}])}var he=l(()=>({getItem:e=>{try{return n.getItem(e)}catch{return null}},setItem:(e,t)=>{try{n.setItem(e,t)}catch{}},removeItem:e=>{try{n.removeItem(e)}catch{}}})),J=u()(c(e=>({positions:[],setPosition:(t,n)=>e(e=>({positions:me(e.positions,t,n)})),resetPosition:t=>e(e=>({positions:e.positions.filter(e=>e.key!==t)}))}),{name:`pisper-floating-placement`,version:1,storage:he,partialize:({positions:e})=>({positions:e}),merge:(e,t)=>({...t,positions:q(e&&typeof e==`object`&&`positions`in e?e.positions:void 0)})})),Y=i(),X={width:0,height:0},ge=/^(?:desktop|mobile):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Z=`flex items-center justify-center rounded-full bg-key text-content-muted shadow-key ring-1 ring-key-border hover:text-content`;function _e(e){let t=e.component.manifest,n=t&&se(t,`floating`)?.size||ae;return{width:n.w,height:n.h}}function ve({placed:e,boundaryRef:t,activeSessionId:n,notify:r,onClose:i,stackIndex:a}){let{t:o}=s(),{instance:c,component:l}=e,u=R(l,r),d=pe(c.instanceId,!1),f=J(e=>e.positions.find(e=>e.key===d)?.position),p=(0,z.useRef)(null),m=(0,z.useRef)(null),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)({bounds:X,widget:X}),y=f??fe(_.bounds,_.widget,a),x=(0,z.useId)(),C=_e(e),T=c.title||l.manifest?.name||l.name;(0,z.useEffect)(()=>{let e=t.current,n=p.current;if(!e||!n)return;let r=()=>{let t={bounds:{width:e.clientWidth,height:e.clientHeight},widget:{width:n.offsetWidth,height:n.offsetHeight}};v(e=>e.bounds.width===t.bounds.width&&e.bounds.height===t.bounds.height&&e.widget.width===t.widget.width&&e.widget.height===t.widget.height?e:t)},i=new ResizeObserver(()=>r());return r(),i.observe(e),i.observe(n),window.addEventListener(`resize`,r),()=>{i.disconnect(),window.removeEventListener(`resize`,r)}},[t]),(0,z.useEffect)(()=>(g(null),()=>{let e=m.current;m.current=null,e?.element.hasPointerCapture(e.pointerId)&&e.element.releasePointerCapture(e.pointerId)}),[d]);let E=(e,t)=>{let n=m.current;!n||n.pointerId!==e.pointerId||(m.current=null,t&&J.getState().setPosition(d,n.latest),g(null),n.element.hasPointerCapture(n.pointerId)&&n.element.releasePointerCapture(n.pointerId))},D=()=>J.getState().resetPosition(d),O=e=>{let t=e.shiftKey?32:12,n={ArrowLeft:{x:-t,y:0},ArrowRight:{x:t,y:0},ArrowUp:{x:0,y:-t},ArrowDown:{x:0,y:t}};if(e.key===`Home`){e.preventDefault(),D();return}let r=n[e.key];r&&(e.preventDefault(),J.getState().setPosition(d,G(y,r,_.bounds,_.widget)))},k=W(h??y,_.bounds,_.widget);return(0,Y.jsxs)(`div`,{ref:p,role:`group`,"aria-label":T,"data-floating-widget":c.instanceId,"data-floating-component":l.id,className:`pointer-events-auto absolute flex max-w-full flex-col px-6`,style:{left:k.x,top:k.y,width:C.width+48,maxHeight:`100%`,visibility:_.bounds.width>0?`visible`:`hidden`},children:[(0,Y.jsxs)(`div`,{className:`absolute top-1/2 left-0 z-10 flex -translate-y-1/2 flex-col items-center gap-1`,children:[(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.move`),"aria-describedby":x,title:o(`custom-ui:floating.moveHint`),className:M(Z,`h-6 w-5 touch-none`),style:{cursor:h?`grabbing`:`grab`},"data-floating-move":!0,onKeyDown:O,onPointerDown:e=>{e.button!==0||m.current||(e.preventDefault(),e.currentTarget.focus({preventScroll:!0}),e.currentTarget.setPointerCapture(e.pointerId),m.current={pointerId:e.pointerId,element:e.currentTarget,x:e.clientX,y:e.clientY,initial:y,latest:y},g(y))},onPointerMove:e=>{let t=m.current;if(!t||t.pointerId!==e.pointerId)return;let n=G(t.initial,{x:e.clientX-t.x,y:e.clientY-t.y},_.bounds,_.widget);t.latest=n,g(n)},onPointerUp:e=>E(e,!0),onPointerCancel:e=>E(e,!1),onLostPointerCapture:e=>E(e,!1),children:(0,Y.jsx)(b,{className:`size-3`})}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.resetPosition`),title:o(`custom-ui:floating.resetPosition`),onClick:D,className:M(Z,`size-5`),children:(0,Y.jsx)(S,{className:`size-3`})}),(0,Y.jsx)(`span`,{id:x,className:`sr-only`,children:o(`custom-ui:floating.moveHint`)})]}),(0,Y.jsx)(`button`,{type:`button`,"aria-label":o(`custom-ui:floating.close`),title:o(`custom-ui:floating.close`),"data-floating-close":!0,onClick:()=>i(c.instanceId),className:M(Z,`absolute top-1/2 right-0 z-10 size-5 -translate-y-1/2`),children:(0,Y.jsx)(w,{className:`size-3`})}),(0,Y.jsx)(`div`,{className:`flex min-h-0 flex-col overflow-hidden rounded-md border border-stroke bg-panel shadow-key`,style:{height:C.height},children:(0,Y.jsx)(P,{component:l,instance:{instanceId:c.instanceId,surface:`floating`,title:c.title,props:c.props},session:n?{id:n,title:``,cwd:``,status:`idle`}:void 0,notify:r,onRequestFix:u,className:`h-full`})})]})}function ye({placed:e,activeSessionId:t,notify:n,hidden:r=!1}){let{t:i}=s(),a=d(),o=(0,z.useRef)(null);(0,z.useEffect)(()=>{let e=J.getState();for(let t of e.positions)ge.test(t.key)||e.resetPosition(t.key)},[]);let c=e=>{p(e,{enabled:!1}).then(()=>a.invalidateQueries({queryKey:m.instances()}),()=>n(i(`custom-ui:floating.closeFailed`)))};return(0,Y.jsx)(`div`,{ref:o,className:`pointer-events-none fixed inset-x-2 top-12 bottom-2 z-40 overflow-hidden`,hidden:r,"data-floating-custom-ui":!0,children:e.map((e,r)=>(0,Y.jsx)(ve,{placed:e,boundaryRef:o,activeSessionId:t,notify:n,onClose:c,stackIndex:r},e.instance.instanceId))})}var be=[`session-panel`,`feature-page`,`floating`];function xe(e,t){let{instance:n,component:r}=e;return n.title||r.manifest?.i18n[t]?.name||r.name}function Q({placed:e,label:n,instances:r,notify:i}){let{t:o}=s(),c=t(),l=L(i),[u,d]=(0,z.useState)(!1),{instance:f,component:p}=e,m=async e=>{if(!u){d(!0);try{if(!await l.place(p,r,{surface:e,...f.title?{title:f.title}:{},props:f.props}))return;await l.unplace(f)&&i(o(`custom-ui:overview.moved`,{place:I(e,o)}))}finally{d(!1)}}};return(0,Y.jsxs)(ee,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,className:`flex-none`,disabled:u,"aria-label":o(`custom-ui:overview.menu`,{name:n}),title:o(`custom-ui:overview.menu`,{name:n}),"data-overview-component-menu":!0,children:(0,Y.jsx)(y,{"aria-hidden":`true`})})}),(0,Y.jsxs)(A,{align:`end`,className:`w-52`,children:[(0,Y.jsxs)(O,{onSelect:()=>c(a(p.id),{state:{componentInstanceId:f.instanceId}}),children:[(0,Y.jsx)(C,{"aria-hidden":`true`}),o(`custom-ui:overview.settings`)]}),(0,Y.jsxs)(O,{onSelect:()=>c(a(p.id)),children:[(0,Y.jsx)(ue,{"aria-hidden":`true`}),o(`custom-ui:tool.openInStudio`)]}),(0,Y.jsxs)(te,{children:[(0,Y.jsxs)(D,{"data-overview-component-move":!0,children:[(0,Y.jsx)(le,{"aria-hidden":`true`}),o(`custom-ui:overview.move`)]}),(0,Y.jsx)(E,{className:`w-48`,children:be.map(e=>{let t=F(p.manifest,e),n=r.some(t=>t.componentId===p.id&&t.surface===e&&t.enabled);return(0,Y.jsxs)(O,{disabled:!t||n,"data-overview-component-move-to":e,onSelect:()=>void m(e),children:[I(e,o),(0,Y.jsx)(`span`,{className:`ml-auto text-xs text-content-muted`,children:t?n?o(`custom-ui:studio.placed`):``:o(`custom-ui:studio.placeUndeclaredShort`)})]},e)})})]}),(0,Y.jsx)(T,{}),(0,Y.jsxs)(O,{"data-overview-component-remove":!0,onSelect:()=>{l.unplace(f).then(e=>{e&&i(o(`custom-ui:overview.removed`,{name:n}))})},children:[(0,Y.jsx)(w,{"aria-hidden":`true`}),o(`custom-ui:overview.remove`)]})]})]})}function Se({placed:e,instances:t,activeSessionId:n,notify:r,onOpenSession:i}){let{t:a,language:o}=s(),{instance:c,component:l}=e,u=c.size===`M`?`M`:`S`,d=xe(e,o),f=R(l,r);return(0,Y.jsxs)(`article`,{"aria-label":d,"data-overview-component":c.instanceId,"data-overview-component-id":l.id,"data-overview-component-size":u,className:`flex-none overflow-hidden rounded-[var(--r-lg)] bg-panel ring-1 ring-stroke`,children:[(0,Y.jsxs)(`header`,{className:`flex h-9 items-center gap-2 border-b border-stroke-soft pr-1 pl-3 pointer-coarse:h-12`,children:[(0,Y.jsx)(`h3`,{className:`min-w-0 flex-1 truncate text-[13px] leading-5 font-medium text-content`,children:d}),(0,Y.jsx)(`span`,{className:`flex-none rounded-xs border border-stroke px-1.5 text-[11px] leading-4 text-content-muted`,children:a(`custom-ui:overview.badge`)}),(0,Y.jsx)(Q,{placed:e,label:d,instances:t,notify:r})]}),(0,Y.jsx)(`div`,{"data-overview-component-body":!0,className:`overflow-hidden`,style:{height:ie[u].h},children:(0,Y.jsx)(P,{component:l,instance:{instanceId:c.instanceId,surface:`overview-card`,title:c.title,props:c.props,size:u},session:n?{id:n,title:``,cwd:``,status:`idle`}:void 0,notify:r,onOpenSession:i,onRequestFix:f,className:`h-full`})})]})}function $({className:e}){let{t:n}=s(),r=t();return(0,Y.jsxs)(`button`,{type:`button`,"data-overview-component-place":!0,onClick:()=>r(o.components),className:M(`flex h-9 w-full flex-none items-center justify-center gap-1.5 rounded-[var(--r-lg)] border border-dashed border-stroke-strong text-[12.5px] text-content-muted transition-colors duration-(--d-fast) hover:bg-surface-hover hover:text-content focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus pointer-coarse:h-11`,e),children:[(0,Y.jsx)(x,{className:`size-3.5`,"aria-hidden":`true`}),n(`custom-ui:overview.place`)]})}function Ce({placed:e,layout:t,activeSessionId:n,notify:r,onOpenSession:i}){let{t:a}=s(),o=f(g()).data?.instances??[],c=e.map(e=>(0,Y.jsx)(Se,{placed:e,instances:o,activeSessionId:n,notify:r,onOpenSession:i},e.instance.instanceId));return t===`popover`?(0,Y.jsxs)(j,{children:[(0,Y.jsx)(ne,{asChild:!0,children:(0,Y.jsx)(N,{variant:`outline`,"data-overview-components-trigger":!0,children:a(`custom-ui:overview.trigger`,{count:e.length})})}),(0,Y.jsxs)(re,{align:`end`,"aria-label":a(`custom-ui:overview.heading`),"data-overview-components":`popover`,className:`max-h-(--radix-popover-content-available-height) w-[344px] gap-3 overflow-y-auto p-3`,children:[c,(0,Y.jsx)($,{})]})]}):(0,Y.jsxs)(`div`,{"data-overview-components":t,className:M(`flex flex-col gap-3`,t===`phone`&&`mt-6`),children:[(0,Y.jsx)(`h2`,{className:`text-[13px] leading-5 font-medium text-content-secondary`,children:a(`custom-ui:overview.heading`)}),c,(0,Y.jsx)($,{})]})}function we({placed:e,sessionId:t,cwd:n,notify:r,onOpenSession:i}){let a=oe().find(e=>e.id===t),o=a?.title??``,s=a?.status??`idle`,c=(0,z.useMemo)(()=>({id:t,title:o,cwd:a?.cwd||n,status:s}),[n,t,s,a?.cwd,o]),{instance:l,component:u}=e,d=R(u,r);return(0,Y.jsx)(`div`,{"data-session-panel-component":l.instanceId,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,Y.jsx)(P,{component:u,instance:{instanceId:l.instanceId,surface:`session-panel`,title:l.title,props:l.props},session:c,notify:r,onOpenSession:i,onRequestFix:d,className:`h-full`},t)})}function Te(e,t){return e.manifest?.i18n[t]?.name||e.name}function Ee({cwd:e,notify:t,onAdded:n}){let{t:r,language:i}=s(),a=f(h()),o=f(g()),c=L(t),[l,u]=(0,z.useState)(null),d=o.data?.instances??[],p=(a.data?.components??[]).filter(e=>ce(e)&&F(e.manifest,`session-panel`)),m=async(e,t)=>{if(!l){u(e.id);try{let r=await c.place(e,d,{surface:`session-panel`,scope:t});r&&n(r.instance.instanceId)}finally{u(null)}}};return a.isPending||o.isPending?(0,Y.jsx)(`p`,{role:`status`,className:`text-content-muted`,children:r(`custom-ui:customUiPage.loading`)}):a.error||o.error?(0,Y.jsxs)(`div`,{className:`flex flex-col items-start gap-2`,children:[(0,Y.jsx)(`p`,{role:`alert`,className:`text-content-secondary`,children:r(`custom-ui:widget.catalogFailed`)}),(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,onClick:()=>{a.refetch(),o.refetch()},children:r(`custom-ui:widget.retry`)})]}):p.length?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,"data-session-component-add-menu":!0,children:[(0,Y.jsx)(`p`,{className:`text-content-secondary`,children:r(`custom-ui:sessionPanel.addHint`)}),(0,Y.jsx)(`ul`,{className:`m-0 flex list-none flex-col gap-1 p-0`,children:p.map(t=>{let a=Te(t,i),o=d.find(e=>e.componentId===t.id&&e.surface===`session-panel`),s=!!(o?.enabled&&_(o.scope,e));return(0,Y.jsxs)(`li`,{"data-session-component-candidate":t.id,className:`flex flex-col gap-1.5 rounded-sm px-1.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`truncate text-[13px] font-medium text-content`,children:a}),s&&o?(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`ghost`,className:`self-start`,onClick:()=>n(o.instanceId),children:r(`custom-ui:studio.placed`)}):(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,disabled:l!==null,"data-session-component-scope":`all`,onClick:()=>void m(t,{type:`all`}),children:r(`custom-ui:studio.scopeAll`)}),(0,Y.jsx)(N,{type:`button`,size:`sm`,variant:`secondary`,disabled:l!==null||!e,"data-session-component-scope":`project`,onClick:()=>void m(t,{type:`project`,cwd:e}),children:r(`custom-ui:sessionPanel.thisProject`)})]})]},t.id)})})]}):(0,Y.jsx)(`p`,{className:`text-content-secondary`,children:r(`custom-ui:sessionPanel.empty`)})}export{P as ComponentHost,ye as FloatingComponents,Ce as OverviewComponents,Ee as SessionComponentAddMenu,we as SessionPanelComponent};
|