pikiclaw 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dashboard/dist/assets/AgentTab-DgZQcx5j.js +1 -0
- package/dashboard/dist/assets/{BrandIcon-B9y9j0jh.js → BrandIcon-CCre1PsF.js} +1 -1
- package/dashboard/dist/assets/{DirBrowser-D4Y8bm_k.js → DirBrowser-DzS3D1wP.js} +1 -1
- package/dashboard/dist/assets/{ExtensionsTab-DvPbSlc8.js → ExtensionsTab-BR3drtS8.js} +1 -1
- package/dashboard/dist/assets/{IMAccessTab-AL06xxWE.js → IMAccessTab-Ft9D3dGu.js} +1 -1
- package/dashboard/dist/assets/Input-CpXJSdfp.js +1 -0
- package/dashboard/dist/assets/Modal-CxnBIMNk.js +1 -0
- package/dashboard/dist/assets/Modals-Ba58-lNz.js +1 -0
- package/dashboard/dist/assets/{PermissionsTab-4L-PgQ1X.js → PermissionsTab-BqvsA3tM.js} +1 -1
- package/dashboard/dist/assets/Select-CisYqbJ2.js +1 -0
- package/dashboard/dist/assets/SessionPanel-BCDPQJcz.js +14 -0
- package/dashboard/dist/assets/{SystemTab-D_Q8vDMf.js → SystemTab-D2wkuS68.js} +1 -1
- package/dashboard/dist/assets/index-DoKVyVPH.css +1 -0
- package/dashboard/dist/assets/index-DsA79CzD.js +3 -0
- package/dashboard/dist/assets/index-iIFycaRv.js +3 -0
- package/dashboard/dist/assets/{markdown-Chkk3cWU.js → markdown-DMQUjobV.js} +1 -1
- package/dashboard/dist/assets/{react-vendor-C7Sl8SE7.js → react-vendor-DTcmqLiz.js} +1 -1
- package/dashboard/dist/assets/{router-Rwafsu7Y.js → router-emLofBBH.js} +1 -1
- package/dashboard/dist/assets/shared-B2_ptDBU.js +1 -0
- package/dashboard/dist/index.html +4 -4
- package/dist/{agent-auto-update.js → agent/auto-update.js} +154 -13
- package/dist/{driver-claude.js → agent/drivers/claude.js} +13 -11
- package/dist/{driver-codex.js → agent/drivers/codex.js} +5 -5
- package/dist/{driver-gemini.js → agent/drivers/gemini.js} +3 -3
- package/dist/agent/index.js +33 -0
- package/dist/{mcp-bridge.js → agent/mcp/bridge.js} +8 -8
- package/dist/{mcp-playwright-proxy.js → agent/mcp/playwright-proxy.js} +5 -2
- package/dist/{mcp-session-server.js → agent/mcp/session-server.js} +1 -1
- package/dist/{tools → agent/mcp/tools}/types.js +4 -1
- package/dist/{agent-npm.js → agent/npm.js} +11 -0
- package/dist/{code-agent.js → agent/session.js} +63 -783
- package/dist/{project-skills.js → agent/skills.js} +3 -0
- package/dist/agent/stream.js +435 -0
- package/dist/agent/types.js +13 -0
- package/dist/agent/utils.js +366 -0
- package/dist/{bot.js → bot/bot.js} +27 -370
- package/dist/{bot-command-ui.js → bot/command-ui.js} +4 -1
- package/dist/{bot-commands.js → bot/commands.js} +6 -6
- package/dist/bot/host.js +192 -0
- package/dist/{human-loop-codex.js → bot/human-loop-codex.js} +3 -0
- package/dist/{human-loop.js → bot/human-loop.js} +3 -0
- package/dist/{bot-menu.js → bot/menu.js} +3 -0
- package/dist/{bot-orchestration.js → bot/orchestration.js} +5 -2
- package/dist/{bot-render-shared.js → bot/render-shared.js} +2 -2
- package/dist/{session-hub.js → bot/session-hub.js} +3 -3
- package/dist/{session-status.js → bot/session-status.js} +3 -0
- package/dist/{bot-streaming.js → bot/streaming.js} +3 -0
- package/dist/browser-profile.js +4 -1
- package/dist/{bot-feishu.js → channels/feishu/bot.js} +16 -16
- package/dist/{channel-feishu.js → channels/feishu/channel.js} +4 -4
- package/dist/{feishu-markdown.js → channels/feishu/markdown.js} +6 -25
- package/dist/{bot-feishu-render.js → channels/feishu/render.js} +8 -8
- package/dist/{channel-states.js → channels/states.js} +3 -0
- package/dist/{bot-telegram.js → channels/telegram/bot.js} +17 -17
- package/dist/{channel-telegram.js → channels/telegram/channel.js} +3 -3
- package/dist/{bot-telegram-directory.js → channels/telegram/directory.js} +5 -2
- package/dist/{bot-telegram-live-preview.js → channels/telegram/live-preview.js} +5 -2
- package/dist/{bot-telegram-render.js → channels/telegram/render.js} +6 -3
- package/dist/{weixin-api.js → channels/weixin/api.js} +4 -1
- package/dist/{bot-weixin.js → channels/weixin/bot.js} +9 -6
- package/dist/{channel-weixin.js → channels/weixin/channel.js} +6 -3
- package/dist/{cli-channels.js → cli/channels.js} +3 -0
- package/dist/{cli.js → cli/main.js} +14 -14
- package/dist/{onboarding.js → cli/onboarding.js} +4 -1
- package/dist/{run.js → cli/run.js} +5 -5
- package/dist/{setup-wizard.js → cli/setup-wizard.js} +5 -2
- package/dist/{runtime-config.js → core/config/runtime-config.js} +4 -1
- package/dist/{user-config.js → core/config/user-config.js} +4 -1
- package/dist/{config-validation.js → core/config/validation.js} +7 -4
- package/dist/{logging.js → core/logging.js} +3 -0
- package/dist/{process-control.js → core/process-control.js} +3 -0
- package/dist/core/utils.js +178 -0
- package/dist/{version.js → core/version.js} +4 -1
- package/dist/{dashboard-platform.js → dashboard/platform.js} +2 -2
- package/dist/{routes → dashboard/routes}/agents.js +58 -9
- package/dist/{routes → dashboard/routes}/config.js +12 -15
- package/dist/{routes → dashboard/routes}/sessions.js +14 -11
- package/dist/{runtime.js → dashboard/runtime.js} +8 -8
- package/dist/{server.js → dashboard/server.js} +3 -7
- package/dist/dashboard/session-control.js +72 -0
- package/package.json +3 -3
- package/dashboard/dist/assets/AgentTab-DarwJ-6D.js +0 -1
- package/dashboard/dist/assets/Modals-CSIL3K6j.js +0 -1
- package/dashboard/dist/assets/SessionPanel-DTILWbVA.js +0 -14
- package/dashboard/dist/assets/SessionsTab-BzDzSqml.js +0 -3
- package/dashboard/dist/assets/index-BxuA85oI.js +0 -3
- package/dashboard/dist/assets/index-NO1v_zlB.css +0 -1
- package/dashboard/dist/assets/shared-rdDL3t6R.js +0 -1
- package/dist/session-control.js +0 -36
- /package/dist/{agent-driver.js → agent/driver.js} +0 -0
- /package/dist/{tools → agent/mcp/tools}/desktop.js +0 -0
- /package/dist/{tools → agent/mcp/tools}/workspace.js +0 -0
- /package/dist/{channel-base.js → channels/base.js} +0 -0
- /package/dist/{constants.js → core/constants.js} +0 -0
package/README.md
CHANGED
|
@@ -140,6 +140,10 @@ npx pikiclaw@latest --doctor # check environment only
|
|
|
140
140
|
- Claude Code, Codex CLI, and Gemini CLI via unified driver registry
|
|
141
141
|
- Model listing, session management, and usage tracking through a single interface
|
|
142
142
|
|
|
143
|
+
### Dashboard as Agent Console
|
|
144
|
+
|
|
145
|
+
The web dashboard integrates Claude Code's core interactive experience — full conversation history with tool-use activity, thinking traces, plan progress, streaming output, image attachments, and an input composer — so you can drive any agent session directly from the browser, no IM required.
|
|
146
|
+
|
|
143
147
|
### Runtime
|
|
144
148
|
|
|
145
149
|
- Streaming preview with continuous message updates
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as o,j as e}from"./react-vendor-DTcmqLiz.js";import{u as W,b as fe,a as y,g as L,B as E,E as ue,S as K,e as X,c as me}from"./index-DsA79CzD.js";import{B as xe}from"./BrandIcon-CCre1PsF.js";import{L as B}from"./Input-CpXJSdfp.js";import{S as z}from"./Select-CisYqbJ2.js";import{M as pe,a as ge}from"./Modal-CxnBIMNk.js";import{S as Y}from"./shared-B2_ptDBU.js";import"./router-emLofBBH.js";const he=["claude","codex","gemini"];function ve(t){return t==="zh-CN"?{defaultsTitle:"新会话默认值",defaultsHint:"新会话会默认采用这里的智能体、模型和推理强度。",defaultsEditTitle:"编辑新会话默认值",defaultsEditHint:"在弹窗中选择默认智能体、模型和推理强度,保存后对新会话生效。",defaultsSaved:"新会话默认值已保存",editDefaults:"修改默认值",agentsTitle:"可用智能体",defaultAgent:"默认智能体",defaultModel:"默认模型",defaultEffort:"推理强度",status:"状态",model:"模型",models:"模型",version:"版本",defaultBadge:"默认",installed:"已安装",notInstalled:"未安装",noModel:"暂无可选模型",currentModelPrefix:"当前模型",availableModelsSuffix:"个可选",availableModels:"可用模型",recommendedFor:"建议场景",currentConfig:"当前配置",effort:"推理强度",readyHint:"已安装,可直接作为新会话执行智能体。",installHint:"尚未安装,需要先完成本地 CLI 安装。",noVersion:"版本未知",moreModels:s=>`+${s}`,install:"安装",installing:"安装中...",noEffort:"不支持调整",loadFailed:"无法加载智能体状态",latestVersion:"最新版本",updateAvailable:"有新版本可用",updateSkipped:"自动更新已跳过",updateFailed:"自动更新失败",update:"手动升级",updating:"升级中...",checkUpdate:"检查更新",checking:"检查中...",upToDate:"已是最新"}:{defaultsTitle:"New Session Defaults",defaultsHint:"New sessions use this agent, model, and effort by default.",defaultsEditTitle:"Edit New Session Defaults",defaultsEditHint:"Choose the default agent, model, and effort in the modal, then save them for new sessions.",defaultsSaved:"New session defaults saved",editDefaults:"Edit Defaults",agentsTitle:"Available Agents",defaultAgent:"Default Agent",defaultModel:"Default Model",defaultEffort:"Effort",status:"Status",model:"Model",models:"Models",version:"Version",defaultBadge:"Default",installed:"Installed",notInstalled:"Not installed",noModel:"No selectable models",currentModelPrefix:"Current model",availableModelsSuffix:"available",availableModels:"Available models",recommendedFor:"Recommended for",currentConfig:"Current config",effort:"Effort",readyHint:"Installed and ready for new sessions.",installHint:"Not installed locally yet.",noVersion:"Version unavailable",moreModels:s=>`+${s}`,install:"Install",installing:"Installing...",noEffort:"Not supported",loadFailed:"Failed to load agent status",latestVersion:"Latest",updateAvailable:"Update available",updateSkipped:"Auto-update skipped",updateFailed:"Auto-update failed",update:"Update",updating:"Updating...",checkUpdate:"Check update",checking:"Checking...",upToDate:"Up to date"}}function be(t,s){const n=t.filter(r=>r.installed);return(n.length?n:t).map(r=>({value:r.agent,label:`${L(r.agent).label} · ${r.installed?r.version||s.installed:s.notInstalled}`}))}function je(t){if(!t)return[];const s=t.models.map(n=>({value:n.id,label:n.alias?`${n.alias} · ${n.id}`:n.id}));return t.selectedModel&&!s.some(n=>n.value===t.selectedModel)&&s.unshift({value:t.selectedModel,label:t.selectedModel}),s}function Ne(t){return t?ue[t.agent].map(s=>({value:s,label:s})):[]}function Me(t,s){if(!t.models.length)return s.noModel;const n=t.selectedModel?t.models.find(r=>r.id===t.selectedModel):t.models[0],d=n?.alias||n?.id||s.noModel;return`${s.currentModelPrefix}: ${d} · ${t.models.length} ${s.availableModelsSuffix}`}function ee(t){return t?t.alias||t.id:"—"}function te(t,s){if(!t.models.length)return s.noModel;const n=t.selectedModel?t.models.find(d=>d.id===t.selectedModel):t.models[0];return ee(n)}function ke(t,s=4){const n=new Set;return t.models.map(r=>({key:r.id,label:ee(r)})).filter(r=>n.has(r.key)?!1:(n.add(r.key),!0)).slice(0,s)}function D(t,s){t({defaultAgent:s.defaultAgent,agents:s.agents})}function Z(t,s){return{agent:t?.agent||s,model:t?.selectedModel||"",effort:t?.selectedEffort||""}}function P({label:t,value:s,hint:n,loading:d=!1}){return e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt px-3.5 py-2.5",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:t}),e.jsxs("div",{className:"mt-1 flex items-center gap-2 text-[13px] font-semibold text-fg-2",children:[d&&e.jsx(K,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:s})]}),n&&e.jsx("div",{className:"mt-0.5 text-[10px] leading-relaxed text-fg-5",children:n})]})}function Ee({agent:t,copy:s,t:n,installing:d,onInstall:r,updatingAgent:j,checkingAgent:F,onUpdate:T,onCheckUpdate:I,loading:c=!1}){const x=L(t.agent),H=Me(t,s),A=te(t,s),U=x.advantageKey?n(x.advantageKey):"—",g=ke(t),h=Math.max(0,t.models.length-g.length),i=t.selectedEffort||s.noEffort,M=t.version||s.noVersion,w=c?n("status.loading"):t.installed?s.installed:s.notInstalled,u=c?"muted":t.installed?"ok":"warn",v=c?n("status.loading"):t.installed?s.readyHint:s.installHint,k=c?n("status.loading"):A,p=c?n("status.loading"):i,G=c?n("status.loading"):U,V=c?n("status.loading"):H;return e.jsx("div",{className:"glass rounded-md border border-edge px-4 py-3 shadow-[0_1px_0_rgba(255,255,255,0.02),0_4px_12px_rgba(15,23,42,0.05)]",children:e.jsxs("div",{className:"grid gap-x-5 gap-y-3 xl:grid-cols-[220px_130px_220px_minmax(0,1fr)_auto] xl:items-start",children:[e.jsx("div",{className:"min-w-0",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border border-edge bg-panel-alt",children:e.jsx(xe,{brand:t.agent,size:22})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"text-[15px] font-semibold text-fg",children:x.label}),t.isDefault&&e.jsx(X,{variant:"accent",children:s.defaultBadge})]}),e.jsxs("div",{className:"mt-1 text-[12px] leading-relaxed text-fg-5",children:[s.version,": ",M,t.latestVersion&&t.updateAvailable&&e.jsxs("span",{className:"ml-1.5 text-amber-400",children:["→ ",t.latestVersion]}),t.latestVersion&&!t.updateAvailable&&t.installed&&e.jsx("span",{className:"ml-1.5 text-emerald-400",children:"✓"})]})]})]})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.status}),e.jsx("div",{className:"mt-1.5",children:e.jsxs(X,{variant:u,children:[c&&e.jsx(K,{className:"h-3 w-3"}),w]})}),e.jsx("div",{className:"mt-1.5 text-[12px] leading-relaxed text-fg-5",children:v})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.currentConfig}),e.jsxs("div",{className:"mt-1.5 space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:s.model}),e.jsx("span",{className:"min-w-0 break-words text-fg-2",children:k})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:s.effort}),e.jsx("span",{className:"text-fg-2",children:p})]})]})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.recommendedFor}),e.jsx("div",{className:"mt-1.5 text-[13px] leading-relaxed text-fg-3",children:G}),e.jsx("div",{className:"mt-2.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.availableModels}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[!c&&g.length>0?g.map(S=>e.jsx("span",{className:"inline-flex h-6 max-w-full items-center rounded-md border border-edge bg-panel-alt px-2 text-[11px] text-fg-3",title:S.key,children:e.jsx("span",{className:"truncate",children:S.label})},S.key)):e.jsx("span",{className:"text-[12px] text-fg-5",children:c?n("status.loading"):s.noModel}),!c&&h>0&&e.jsx("span",{className:"inline-flex h-6 items-center rounded-md border border-edge bg-panel-alt px-2 text-[11px] text-fg-5",children:s.moreModels(h)})]}),e.jsx("div",{className:"mt-1.5 text-[12px] leading-relaxed text-fg-5",children:V})]}),e.jsxs("div",{className:me("flex flex-col items-start gap-1.5 xl:items-end",t.installed&&"xl:self-start"),children:[c&&e.jsxs("div",{className:"inline-flex h-7 items-center gap-2 rounded-md border border-edge bg-transparent px-2.5 text-[11px] text-fg-5",children:[e.jsx(K,{className:"h-3 w-3"}),n("status.loading")]}),!c&&!t.installed&&e.jsx(E,{variant:"outline",size:"sm",disabled:d,onClick:()=>r(t),children:d?s.installing:s.install}),!c&&t.installed&&t.updateAvailable&&e.jsx(E,{variant:"primary",size:"sm",disabled:j,onClick:()=>T(t),children:j?s.updating:s.update}),!c&&t.installed&&!t.updateAvailable&&e.jsx(E,{variant:"ghost",size:"sm",disabled:F,onClick:()=>I(t),children:F?s.checking:s.checkUpdate}),!c&&t.installed&&t.updateAvailable&&t.updateStatus==="skipped"&&t.updateDetail&&e.jsxs("div",{className:"text-[11px] leading-relaxed text-amber-400",children:[s.updateSkipped,": ",t.updateDetail]}),!c&&t.installed&&t.updateStatus==="failed"&&t.updateDetail&&e.jsxs("div",{className:"text-[11px] leading-relaxed text-red-400",children:[s.updateFailed,": ",t.updateDetail]})]})]})})}function Ie(){const t=W(a=>a.locale),s=W(a=>a.toast),n=o.useMemo(()=>fe(t),[t]),d=ve(t),[r,j]=o.useState(null),[F,T]=o.useState(!0),[I,c]=o.useState(null),[x,H]=o.useState(!1),[A,U]=o.useState(null),[g,h]=o.useState(!1),[i,M]=o.useState({agent:"codex",model:"",effort:""}),w=o.useRef(!1),u=o.useCallback(async()=>{w.current||T(!0);try{const a=await y.getAgentStatus();return D(j,a),c(null),w.current=!0,a}catch(a){const l=a instanceof Error?a.message:d.loadFailed;return c(l),w.current||s(l,!1),null}finally{T(!1)}},[d.loadFailed,s]);o.useEffect(()=>{u()},[u]);const v=o.useMemo(()=>{const a=r?.agents||[],l=new Map(a.map(f=>[f.agent,f]));return he.map(f=>{const C=l.get(f);if(C)return C;const b=L(f);return{agent:f,label:b.label,installed:!1,version:void 0,installCommand:void 0,selectedModel:null,selectedEffort:null,isDefault:r?.defaultAgent===f,models:[],usage:null}})},[r]),k=r?.defaultAgent||"codex",p=v.find(a=>a.agent===k)||null,V=v.filter(a=>a.installed).length>0,S=be(v,d),m=v.find(a=>a.agent===i.agent)||null,O=je(m),_=Ne(m),q=o.useCallback(async a=>{H(!0);try{const l=await y.updateRuntimeAgent(a);if(!l.ok)throw new Error(l.error||n("config.applyFailed"));return D(j,l),l}catch(l){const f=l instanceof Error?l.message:n("config.applyFailed");return s(f,!1),u(),null}finally{H(!1)}},[u,n,s]);o.useEffect(()=>{g&&M(Z(p,k))},[k,p,g]),o.useEffect(()=>{if(!g||!m)return;const a=m.selectedModel||"",l=!i.model||O.some(b=>b.value===i.model),f=m.selectedEffort||"",C=!i.effort||_.some(b=>b.value===i.effort);l&&C||M(b=>({...b,model:l?b.model:a,effort:C?b.effort:f}))},[g,i.effort,i.model,m,_,O]);const se=o.useCallback(a=>{const l=v.find(f=>f.agent===a);l?.installed&&M(Z(l,l.agent))},[v]),le=o.useCallback(async()=>{if(!m?.installed)return;const a={};if(i.agent!==k&&(a.defaultAgent=i.agent),i.model&&i.model!==(m.selectedModel||"")&&(a.agent=i.agent,a.model=i.model),i.effort&&i.effort!==(m.selectedEffort||"")&&(a.agent=i.agent,a.effort=i.effort),Object.keys(a).length===0){h(!1);return}await q(a)&&(s(d.defaultsSaved),h(!1))},[d.defaultsSaved,k,i.agent,i.effort,i.model,m,s,q]),ae=o.useCallback(async a=>{if(!A){U(a.agent);try{const l=await y.installAgent(a.agent);if(!l.ok)throw new Error(l.error||n("config.agentInstallFailed"));D(j,l),s(n("config.agentInstalled"))}catch(l){const f=l instanceof Error?l.message:n("config.agentInstallFailed");s(f,!1),u()}finally{U(l=>l===a.agent?null:l)}}},[A,u,n,s]),[$,J]=o.useState(null),[R,Q]=o.useState(null),ne=o.useCallback(async a=>{if(!$){J(a.agent);try{const l=await y.updateAgent(a.agent);if(!l.ok)throw new Error(l.error||n("config.agentInstallFailed"));D(j,l),s(d.upToDate)}catch(l){const f=l instanceof Error?l.message:d.updateFailed;s(f,!1),u()}finally{J(l=>l===a.agent?null:l)}}},[d.updateFailed,d.upToDate,u,n,s,$]),de=o.useCallback(async a=>{if(!R){Q(a.agent);try{const l=await y.checkAgentUpdate(a.agent);if(!l.ok)throw new Error(l.error||d.loadFailed);D(j,l)}catch(l){const f=l instanceof Error?l.message:d.loadFailed;s(f,!1),u()}finally{Q(l=>l===a.agent?null:l)}}},[R,d.loadFailed,u,s]),N=F&&!r,ie=N?n("status.loading"):p?L(p.agent).label:d.notInstalled,re=N?n("status.loading"):p?.installed?d.installed:d.notInstalled,oe=N?n("status.loading"):p?te(p,d):d.noModel,ce=N?n("status.loading"):p?.selectedEffort||d.noEffort;return e.jsxs("div",{className:"animate-in space-y-4",children:[e.jsx("section",{className:"space-y-3",children:e.jsxs(Y,{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:d.defaultsTitle}),e.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:d.defaultsHint})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(E,{variant:"secondary",onClick:()=>h(!0),disabled:x||!V,children:d.editDefaults})})]}),e.jsxs("div",{className:"grid gap-2.5 lg:grid-cols-3",children:[e.jsx(P,{label:d.defaultAgent,value:ie,hint:re,loading:N}),e.jsx(P,{label:d.defaultModel,value:oe,loading:N}),e.jsx(P,{label:d.defaultEffort,value:ce,loading:N})]})]})}),e.jsxs("section",{className:"space-y-3",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-fg-5",children:d.agentsTitle}),e.jsx("div",{className:"space-y-3",children:v.map(a=>e.jsx(Ee,{agent:a,copy:d,t:n,installing:A===a.agent,loading:N,onInstall:ae,updatingAgent:$===a.agent,checkingAgent:R===a.agent,onUpdate:ne,onCheckUpdate:de},a.agent))})]}),I&&e.jsx(Y,{className:"border-amber-500/20 bg-amber-500/5",children:e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[13px] text-fg-2",children:I}),e.jsx(E,{variant:"outline",size:"sm",onClick:()=>{u()},children:n("sessions.retry")})]})}),e.jsxs(pe,{open:g,onClose:()=>h(!1),children:[e.jsx(ge,{title:d.defaultsEditTitle,description:d.defaultsEditHint,onClose:()=>h(!1)}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(B,{children:d.defaultAgent}),e.jsx(z,{value:i.agent,options:S,onChange:se,disabled:x||!V,placeholder:d.notInstalled})]}),e.jsxs("div",{children:[e.jsx(B,{children:d.defaultModel}),e.jsx(z,{value:i.model,options:O,onChange:a=>M(l=>({...l,model:a})),disabled:x||!m?.installed||O.length===0,placeholder:d.noModel})]}),e.jsxs("div",{children:[e.jsx(B,{children:d.defaultEffort}),e.jsx(z,{value:i.effort,options:_,onChange:a=>M(l=>({...l,effort:a})),disabled:x||!m?.installed||_.length===0,placeholder:d.noEffort})]})]}),e.jsxs("div",{className:"mt-6 flex justify-end gap-2",children:[e.jsx(E,{variant:"ghost",onClick:()=>h(!1),children:n("modal.cancel")}),e.jsx(E,{variant:"primary",disabled:x||!m?.installed,onClick:()=>{le()},children:n(x?"config.validating":"modal.save")})]})]})]})}export{Ie as AgentTab,Ie as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as t}from"./react-vendor-
|
|
1
|
+
import{j as t}from"./react-vendor-DTcmqLiz.js";import{c as s}from"./index-DsA79CzD.js";const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAF+0lEQVRYha2XbXBUZxXHf+e5u4SkCZjg0NIWnQLJLgRF5UWnL75MP9gMjqPT2eyC0qlMiYxOUAR206LOyhiSTVscp52O0xamWgu7WTp0qLUz6kht6Qed1L7M5GUTsAoDTRSIJJos2b33+GFfWMJuNqmcT/c595z/+d3nOc+9zxXKWE9Li7tm0fjyqmT6H0t/Fp8sFz9XM+UCauouH8Rx+ifmWWdP7Q0sLRbT98g3lySC/mcSQd+GGwrQt2vzx1G2ZEa6KJ3S1mJxlpOKIDyEmEM3FGCk5vw5YCw3FmFbb9hXfV2gcm/26vINBfhS+LU0qgcKXB9xT1hbr6kdDhtgcYaDxHSNwVBg92Ao0DMY8n97zgAAZnK8U2AoX1D0++rzWfkC44k6wAVghP7C3EQo8Iiijyq61oEDiV2bPjojwKk234pEsPnh/lDgzpyv/olXrwi6qyDsjsQy2ZQXmJdefPWWvp0v3uZ/CLQ9NxZINpxJj84IYDvmOUT2G/T1DD0CUB/pflnhd1eT5Mcnwl90Adi23JzPl9TbAEN7fF9AeapQW5AOicftGQFEOJ+9tEDbB9v8x99r21wLYBlnJ5AGUKhfklz8QEbY3J71nVnZceziUPAbtzvGxAB3wdPH6yPRx6cXvw4gbbm/B5zIO5SvVKjdMxAMrKvviPcpHMyLqvyoN+ybh7AUwIi+M9TaVOGI/SJwc4Fsf6rS2SqgxQBkukPDYTM40RdCZB/Z5gKmEGmzjStq2alBoDqbvF2hEWgF9oEuAvlugdx/Deaz9ZEjvcWKFwXIWaLNv14cDqmwugDvFRVOi8qOrOMdhT6BzQhvoNxzjbjItxo6o8+VqjEjAMBQa1OFXbXwh4KGuLqmDleXToHzwG1FpLs9kah/uvf98IPz08nkSuZbp+vDL4zNCJAHaQt82lH9JfCJ2cQrTFjq8hiZGrfVtQGcDQhrFNYAywELuFw15SwRgN6dvrrahcnkreGXJ0pCtDZVOFULwsCerEBJExhVGAY8FH/Z2cBvPJHY1ySx13cbaXMaqACSwCVRLqlhVNBRVTOm4lxCOSdqPkB0FdA2m5kosGGEHpC3UP2z6uRJb9fx8SwsJEL+nwBNwEKgWqBSoXaORQqtH+VNhDdErJMNnYf/ViqwbBNO3lRbVZFSS9yyIG1jucRuVuGnM6TZZL4d/wS9KEgawIH/gF5EzAWBvzecto9KPG7PqgkBTu0NLHVs7VBlcxnwS8ALgtyp6Kco3S9/OF850lQWYCD41RpMZUiUH5BZmgkRDqmyVaCqeJYeS1dqwJq4UoG56S5w7hb4PMp6YH426LJR1+qSAOrzWYPLZCvIPuAWAIHXxGGXY3geWAV6DOTrJRR+r5q8P9dskNtJ1etBVl4R19FPdh4eLQowEPR5RKxfgebOeGMqGvLMX/V0YrK/W+B+4ATCYZRnEJ5E+Q5gFM4AFwQ+I8hbLks2Ltt/ZKTUg163Rwfamrcj5q/54spvLZes9nZ2/yIx0b8jW/wCLmeLOLoCAEdeAjmYnaWPGXga9Jiia1O28+bAbt8dswJQEFF5IrO2chGVBzxdsY0r2qNnBx5uvkuELkAFedDTHj+nIl4AIzJsjL2XTAOisB+XtqryKLBcLHNyKLSpsSyAgKrKJoRtbksaPV3R5yFz7BaHOOBGOdAQib6SRV4L4KQZqe+I/wvYmZWqE1ue8nbFggjbgDoH/VOxY3vZXdDT0uKuqR37I+jdIH9JV9r3NIbjU717fLe4jPkASDVEYhW5730i2PwqIvdlZkK3eCPdv06E/GuAbmCBJxJbUnIGill13b8fyxRnRG070BiOTwG4MeuyszBSeNiw3KZFYDTzdPLzU7u3LPZEYu+qTq5Tlev+K2YESAQD94rKjqzgl72Pxd/P3VNLsgAyXJizoj161kG3Z4d1aZP6HIC36/i4tyt6dE4AasQNDIhxNnoisXevvZndJcLw9DxvpLsb5XGE9yzD2ZlqzPpVPN0SIf854FaUZz1dsW0fVqdsD5Q05Qhgg7z+oTX+Xyv2pzNX+x+eTlGviPgh3AAAAABJRU5ErkJggg==",g="/assets/codex-DYadqqp0.png",r="/assets/feishu-C4OMrjCW.ico",a="/assets/gemini-BYkEpiWr.svg",n="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16px'%20height='16px'%20viewBox='0%200%2016%2016'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3clinearGradient%20x1='50%25'%20y1='0%25'%20x2='50%25'%20y2='100%25'%20id='linearGradient-1'%3e%3cstop%20stop-color='%2338AEEB'%20offset='0%25'%3e%3c/stop%3e%3cstop%20stop-color='%23279AD1'%20offset='100%25'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='Artboard'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3ccircle%20id='Oval'%20fill='url(%23linearGradient-1)'%20cx='8'%20cy='8'%20r='8'%3e%3c/circle%3e%3cpath%20d='M3.17026167,7.83635602%20C5.78750201,6.74265999%207.53273882,6.02162863%208.40597211,5.67326193%20C10.8992306,4.67860423%2011.2454541,4.53439191%2011.5831299,4.52864956%20C11.6573986,4.52743168%2011.8385417,4.55776042%2011.9798438,4.67645833%20C12.1211458,4.79515625%2012.1635786,4.87206678%2012.1755371,4.93908691%20C12.1874957,5.00610705%2012.1862759,5.21456762%2012.1744385,5.3338623%20C12.0393279,6.69547283%2011.5259342,9.83829771%2011.2285121,11.3633248%20C11.1026617,12.008621%2010.8548582,12.2249854%2010.6149558,12.2461596%20C10.0935924,12.2921758%209.69769267,11.9156852%209.19272668,11.5981993%20C8.40255458,11.1013965%208.13911734,10.9180161%207.3721185,10.4332283%20C6.48571864,9.87297217%206.85080034,9.6784879%207.35595703,9.17524981%20C7.48815894,9.04355001%209.67825076,7.04590073%209.71077046,6.86250183%20C9.7391276,6.70257812%209.7494847,6.68189389%209.67664063,6.60973958%20C9.60379655,6.53758527%209.51674192,6.54658941%209.46083149,6.55876051%20C9.38158015,6.57601267%208.17521836,7.33962686%205.84174612,8.84960308%20C5.48344358,9.08558775%205.15890428,9.20056741%204.86812819,9.19454205%20C4.54757089,9.18789957%203.93094724,9.02070014%203.47255094,8.87778221%20C2.91030922,8.70248755%202.46345069,8.609808%202.50236203,8.31210343%20C2.52262946,8.15704047%202.74526267,7.998458%203.17026167,7.83635602%20Z'%20id='Path-3'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e",d="data:image/svg+xml,%3csvg%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='128'%20height='128'%20rx='28'%20fill='%2307C160'/%3e%3cpath%20d='M42%2033c-16.569%200-30%2011.64-30%2026%200%208.084%204.283%2015.306%2011.008%2020.073L18%2095l20.832-8.102A37.33%2037.33%200%200%200%2042%2087c16.569%200%2030-11.64%2030-26S58.569%2033%2042%2033Z'%20fill='%23fff'/%3e%3cpath%20d='M85%2048c-13.807%200-25%209.402-25%2021%200%2011.598%2011.193%2021%2025%2021%202.545%200%205-.319%207.29-.91L109%2095l-4.772-12.27C109.078%2079.05%20112%2074.232%20112%2069c0-11.598-12.193-21-27-21Z'%20fill='%23fff'%20opacity='.95'/%3e%3ccircle%20cx='33'%20cy='56'%20r='4.5'%20fill='%2307C160'/%3e%3ccircle%20cx='50'%20cy='56'%20r='4.5'%20fill='%2307C160'/%3e%3ccircle%20cx='77'%20cy='66'%20r='4'%20fill='%2307C160'/%3e%3ccircle%20cx='92'%20cy='66'%20r='4'%20fill='%2307C160'/%3e%3c/svg%3e",w="/assets/playwright-BldPFZgC.ico",h="/assets/appium-Ra-JU1qL.png",x="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M23.15%202.587L18.21.21a1.494%201.494%200%200%200-1.705.29l-9.46%208.63-4.12-3.128a.999.999%200%200%200-1.276.057L.327%207.261A1%201%200%200%200%20.326%208.74L3.899%2012%20.326%2015.26a1%201%200%200%200%20.001%201.479L1.65%2017.94a.999.999%200%200%200%201.276.057l4.12-3.128%209.46%208.63a1.492%201.492%200%200%200%201.704.29l4.942-2.377A1.5%201.5%200%200%200%2024%2020.06V3.939a1.5%201.5%200%200%200-.85-1.352zm-5.146%2014.861L10.826%2012l7.178-5.448v10.896z'%20fill='%23007ACC'/%3e%3c/svg%3e",f="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%2319191C'/%3e%3cpath%20d='M7%205l10%207-4.5%201.5L15.5%2019l-2.2.8-3-5.5L7%2017z'%20fill='%23fff'/%3e%3c/svg%3e",A="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%230BA48A'/%3e%3cpath%20d='M8%2018l2-12h2.5l-1.2%205h4.2L10%2018H8zm3.5-3.5l3-7.5'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/svg%3e",v="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%234A90D9'/%3e%3crect%20x='5'%20y='5'%20width='14'%20height='12'%20rx='1.5'%20fill='%236DB3F2'/%3e%3crect%20x='5'%20y='5'%20width='14'%20height='3.5'%20rx='1.5'%20fill='%233D7ABF'/%3e%3ccircle%20cx='8.5'%20cy='6.8'%20r='.8'%20fill='%23FF5F57'/%3e%3ccircle%20cx='11'%20cy='6.8'%20r='.8'%20fill='%23FEBC2E'/%3e%3ccircle%20cx='13.5'%20cy='6.8'%20r='.8'%20fill='%2328C840'/%3e%3crect%20x='7'%20y='10.5'%20width='10'%20height='1'%20rx='.5'%20fill='%23fff'%20opacity='.7'/%3e%3crect%20x='7'%20y='13'%20width='7'%20height='1'%20rx='.5'%20fill='%23fff'%20opacity='.5'/%3e%3c/svg%3e",L={claude:o,codex:g,gemini:a,telegram:n,feishu:r,weixin:d,playwright:w,appium:h,vscode:x,cursor:f,windsurf:A,finder:v};function C({brand:i,size:e=18,className:l}){const c=L[i];return c?t.jsx("img",{src:c,alt:"","aria-hidden":"true",draggable:!1,className:s("shrink-0 object-contain select-none",l),style:{width:e,height:e}}):null}export{C as B};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r,j as e}from"./react-vendor-
|
|
1
|
+
import{r,j as e}from"./react-vendor-DTcmqLiz.js";import{a as I,e as P,S as z}from"./index-DsA79CzD.js";function W({initialPath:x,maxHeight:j=420,minHeight:N=200,onSelect:p,compact:l,t:o}){const[y,k]=r.useState(""),[h,m]=r.useState(""),[g,w]=r.useState([]),[i,S]=r.useState(""),[C,$]=r.useState(!1),[D,B]=r.useState([]),[E,c]=r.useState(!1),[u,d]=r.useState(""),a=r.useCallback(async t=>{c(!0),d("");try{const s=await I.lsDir(t);if(!s.ok){d(s.error||o("modal.cannotRead")),c(!1);return}k(s.path),m(s.path),w(s.dirs),S(s.parent),$(s.isGit);const G=s.path.split("/").filter(Boolean);let v="";B(G.map(b=>(v+="/"+b,{label:b,path:v}))),p?.(s.path,s.isGit)}catch{d(o("modal.loadFailed"))}finally{c(!1)}},[o,p]);r.useEffect(()=>{x!==void 0&&a(x||void 0)},[]);const n=l?"text-[11px]":"text-xs",f=l?"py-[5px]":"py-[7px]";return e.jsxs("div",{children:[e.jsxs("div",{className:`flex items-center gap-1 ${l?"text-[10px]":"text-[11px]"} font-mono text-fg-4 mb-2 flex-wrap`,children:[e.jsx("span",{className:"cursor-pointer hover:text-fg-2 transition-colors",onClick:()=>a("/"),children:"~"}),D.map((t,s)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-fg-6",children:"/"}),e.jsx("span",{className:"cursor-pointer hover:text-fg-2 transition-colors",onClick:()=>a(t.path),children:t.label})]},s)),C&&e.jsx(P,{variant:"accent",className:"ml-1 !text-[9px] !py-0 !px-1.5",children:"git"})]}),e.jsxs("div",{className:"relative",children:[!l&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 z-10 h-5 rounded-t-lg",style:{background:"linear-gradient(to bottom, var(--th-panel-alt), rgba(0, 0, 0, 0))"}}),e.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-10 h-5 rounded-b-lg",style:{background:"linear-gradient(to top, var(--th-panel-alt), rgba(0, 0, 0, 0))"}})]}),e.jsx("div",{className:"border border-edge rounded-lg overflow-y-auto overscroll-contain scroll-smooth bg-panel-alt",style:{maxHeight:j,minHeight:N,scrollbarGutter:"stable"},children:E?e.jsx("div",{className:`${n} text-fg-5 p-4 text-center flex items-center justify-center gap-2`,children:e.jsx(z,{className:"h-3 w-3 text-fg-5"})}):u?e.jsx("div",{className:`${n} text-red-500/70 p-4`,children:u}):e.jsxs(e.Fragment,{children:[i&&i!==y&&e.jsxs("div",{className:`flex items-center gap-2 px-3 ${f} cursor-pointer hover:bg-panel transition-colors border-b border-edge`,onClick:()=>a(i),children:[e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",className:"text-fg-5 shrink-0",children:e.jsx("polyline",{points:"15 18 9 12 15 6"})}),e.jsx("span",{className:`${n} text-fg-4`,children:".."})]}),g.length===0&&!i&&e.jsx("div",{className:`${n} text-fg-5 p-4 text-center`,children:o("modal.emptyDir")}),g.map(t=>e.jsxs("div",{className:`flex items-center gap-2 px-3 ${f} cursor-pointer hover:bg-panel transition-colors`,onClick:()=>a(t.path),children:[e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:t.name===".git"?"var(--th-primary)":"currentColor",strokeWidth:"1.8",className:"text-fg-5 shrink-0",children:e.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})}),e.jsx("span",{className:`${n} text-fg-3`,children:t.name})]},t.path))]})})]}),e.jsx("div",{className:"mt-2",children:e.jsx("input",{className:`w-full rounded-lg border border-edge bg-inset px-2.5 py-1.5 ${n} font-mono text-fg outline-none placeholder:text-fg-5 focus:border-edge-h transition-colors`,placeholder:o("modal.manualInput"),value:h,onChange:t=>m(t.target.value),onKeyDown:t=>{t.key==="Enter"&&a(h)}})})]})}export{W as D};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as m,j as s}from"./react-vendor-
|
|
1
|
+
import{r as m,j as s}from"./react-vendor-DTcmqLiz.js";import{u as p,b as B,a as R,B as g,e as w,S as N}from"./index-DsA79CzD.js";import{B as S}from"./BrandIcon-CCre1PsF.js";import{a as k,b as C,c as b,d as y}from"./shared-B2_ptDBU.js";import"./router-emLofBBH.js";function t(a,e,n){return a==="zh-CN"?e:n}function _(a,e,n){const r=a?.browser;return r?r.enabled?r.status==="chrome_missing"?{label:t(e,"Chrome 未安装","Chrome missing"),variant:"err"}:r.status==="needs_setup"?{label:t(e,"需要配置","Needs setup"),variant:"warn"}:r.running?{label:t(e,"浏览器已打开","Browser open"),variant:"ok"}:r.status==="ready"?{label:t(e,"已就绪","Available"),variant:"ok"}:{label:t(e,"需要检查","Needs attention"),variant:"warn"}:{label:t(e,"已关闭","Disabled"),variant:"muted"}:{label:n("status.loading"),variant:"muted"}}function E(a,e,n){const r=a?.desktop;return r?r.installed?r.running?{label:t(e,"运行中","Running"),variant:"ok"}:r.enabled?{label:t(e,"已启用","Enabled"),variant:"accent"}:{label:t(e,"已关闭","Disabled"),variant:"muted"}:{label:t(e,"未安装","Not installed"),variant:"muted"}:{label:n("status.loading"),variant:"muted"}}function V(a,e){const n=t(e,"配置文件","Profile"),r=t(e,"运行方式","Mode"),o=t(e,"Chrome","Chrome"),l=a?.profileCreated?t(e,"已创建","Created"):t(e,"待创建","Not created"),d=a?.enabled?a.headlessMode==="headed"?t(e,"可见窗口","Visible window"):t(e,"后台运行","Headless"):t(e,"已关闭","Disabled"),u=a?.chromeInstalled?t(e,"已安装","Installed"):t(e,"未安装","Not installed");return[{label:n,value:l},{label:r,value:d},{label:o,value:u}]}function z(a,e){const n=t(e,"连接地址","Address"),r=t(e,"驱动","Driver"),o=t(e,"服务状态","Service"),l=a?.appiumUrl||"http://127.0.0.1:4723",d=t(e,"Appium Mac2","Appium Mac2"),u=a?a.running?t(e,"运行中","Running"):a.enabled?t(e,"已启用","Enabled"):t(e,"已关闭","Disabled"):t(e,"加载中","Loading");return[{label:n,value:l},{label:r,value:d},{label:o,value:u}]}function L(a,e){return a?a.enabled?a.running?t(e,"独立浏览器已打开,可继续补充登录态。","The managed browser is open and ready for login."):a.status==="ready"?t(e,"已就绪,可在后续会话中直接使用。","Ready for upcoming sessions."):a.status==="chrome_missing"?t(e,"本机未检测到 Chrome。","Chrome was not detected on this machine."):a.detail||t(e,"需要先完成一次浏览器配置。","Setup is required before browser automation can be used."):t(e,"当前不会向 Agent 会话注入 browser MCP。","Browser MCP will not be injected into agent sessions."):t(e,"正在读取浏览器状态。","Loading browser status.")}function T(a,e){return a?a.installed?a.running?t(e,"桌面自动化服务已启动。","The desktop automation service is running."):a.enabled?t(e,"已启用,可在后续会话中直接调用。","Enabled and ready for upcoming sessions."):t(e,"当前不会向 Agent 会话注入桌面自动化能力。","Desktop automation will not be injected into agent sessions."):t(e,"需要先安装 Appium Mac2 驱动。","Appium Mac2 must be installed first."):t(e,"正在读取桌面自动化状态。","Loading desktop automation status.")}function U({onOpenBrowserSetup:a,onOpenDesktopSetup:e}){const n=p(i=>i.locale),r=p(i=>i.toast),o=p(i=>i.state),l=m.useMemo(()=>B(n),[n]),[d,u]=m.useState(null),[M,h]=m.useState(!1),f=m.useCallback(async()=>{h(!0);try{u(await R.getBrowser())}catch(i){r(i instanceof Error?i.message:l("config.applyFailed"),!1)}finally{h(!1)}},[l,r]);m.useEffect(()=>{f()},[f,o]);const c=d?.browser,x=d?.desktop,v=_(d,n,l),j=E(d,n,l),D=V(c,n),A=z(x,n);return s.jsxs("div",{className:"animate-in space-y-3",children:[s.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx("div",{className:"text-[13px] leading-relaxed text-fg-4",children:l("ext.hint")})}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>{f()},disabled:M,children:l("perm.guideRefresh")})]}),s.jsxs(k,{className:"xl:grid-cols-[minmax(0,235px)_minmax(240px,0.95fr)_minmax(0,1.1fr)_auto]",children:[s.jsx(C,{icon:s.jsx(S,{brand:"playwright",size:22}),title:l("ext.browser"),subtitle:l("ext.browserDesc")}),s.jsxs(b,{label:t(n,"状态","Status"),children:[s.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:s.jsxs(w,{variant:v.variant,children:[!d&&s.jsx(N,{}),v.label]})}),s.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:L(c,n)})]}),s.jsx(b,{label:t(n,"当前配置","Current config"),children:s.jsx("div",{className:"space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:D.map(i=>s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:i.label}),s.jsx("span",{className:"min-w-0 break-words",children:i.value})]},i.label))})}),s.jsx(y,{children:s.jsx(g,{variant:c?.enabled?"outline":"primary",size:"sm",onClick:a,children:c?.enabled?t(n,"管理","Manage"):l("ext.setup")})})]}),s.jsxs(k,{className:"xl:grid-cols-[minmax(0,235px)_minmax(240px,0.95fr)_minmax(0,1.1fr)_auto]",children:[s.jsx(C,{icon:s.jsx(S,{brand:"appium",size:22}),title:l("ext.desktop"),subtitle:l("ext.desktopDesc")}),s.jsxs(b,{label:t(n,"状态","Status"),children:[s.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:s.jsxs(w,{variant:j.variant,children:[!d&&s.jsx(N,{}),j.label]})}),s.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:T(x,n)})]}),s.jsx(b,{label:t(n,"当前配置","Current config"),children:s.jsx("div",{className:"space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:A.map(i=>s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:i.label}),s.jsx("span",{className:/^https?:\/\//.test(i.value)?"min-w-0 break-words font-mono text-[12px]":"min-w-0 break-words",children:i.value})]},i.label))})}),s.jsx(y,{children:s.jsx(g,{variant:x?.enabled?"outline":"primary",size:"sm",onClick:e,children:x?.enabled?t(n,"管理","Manage"):l("ext.setup")})})]})]})}export{U as ExtensionsTab};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as S,j as i}from"./react-vendor-
|
|
1
|
+
import{r as S,j as i}from"./react-vendor-DTcmqLiz.js";import{u as p,k as y,e as v,S as C,B as D}from"./index-DsA79CzD.js";import{B as A}from"./BrandIcon-CCre1PsF.js";import{a as j,b as V,c as w,d as N}from"./shared-B2_ptDBU.js";import"./router-emLofBBH.js";function L(t){return t==="zh-CN"?{status:"状态",summary:"接入摘要",loading:"加载中",chats:"个 chat",notConnected:"未接入",configuring:"配置中",connected:"已接入",failed:"配置异常",configure:"去配置",continueSetup:"继续配置",viewSettings:"查看设置",noWeixin:"尚未登录微信账号",noTelegram:"未配置 Bot Token",noFeishu:"未配置 App ID 与应用凭证",pendingValidation:"凭证已保存,等待验证。",connectedReady:"机器人已可正常接收消息。",validationFailed:"校验失败,请检查凭证或网络。",accountLinked:"已绑定账号",tokenSaved:"Token 已保存",appCredentialsSaved:"应用凭证已保存",allowedChats:"允许",notConnectedDetail:"尚未配置账号与接入凭证。"}:{status:"Status",summary:"Summary",loading:"Loading",chats:"chats",notConnected:"Not connected",configuring:"Configuring",connected:"Connected",failed:"Needs attention",configure:"Configure",continueSetup:"Continue setup",viewSettings:"View settings",noWeixin:"Weixin account not connected yet",noTelegram:"Bot token not configured",noFeishu:"App ID and credentials not configured",pendingValidation:"Credentials are saved and waiting for validation.",connectedReady:"This channel can receive messages.",validationFailed:"Validation failed. Check credentials or network.",accountLinked:"Account linked",tokenSaved:"Token saved",appCredentialsSaved:"Credentials saved",allowedChats:"Allows",notConnectedDetail:"Account and access credentials have not been configured yet."}}function g(t,e=4,a=4){const s=t.trim();return s?s.length<=e+a+3?s:`${s.slice(0,e)}...${s.slice(-a)}`:""}function B(t){return String(t||"").split(/[\n,;]/).map(e=>e.trim()).filter(Boolean).length}function u(t,e){return String(t?.[e]||"").trim()}function R(t,e){if(!t)return e;try{return new URL(t).host||t}catch{return t}}function h(t,e,a){if(t==="weixin"){const n=u(e,"weixinAccountId"),l=u(e,"weixinBaseUrl");return n?l?`${g(n)} · ${R(l,l)}`:`${a.accountLinked} ${g(n)}`:a.noWeixin}if(t==="telegram"){const n=u(e,"telegramBotToken"),l=B(u(e,"telegramAllowedChatIds"));return n?l>0?`${a.tokenSaved} · ${a.allowedChats} ${l} ${a.chats}`:a.tokenSaved:a.noTelegram}const s=u(e,"feishuAppId"),o=u(e,"feishuAppSecret");return!s||!o?a.noFeishu:`App ID ${g(s)} · ${a.appCredentialsSaved}`}function f(t,e){return!t||!t.configured?{statusLabel:e.notConnected,statusVariant:"muted",statusDescription:t?.detail||e.notConnectedDetail,actionLabel:e.configure}:t.ready?{statusLabel:e.connected,statusVariant:"ok",statusDescription:t.detail||e.connectedReady,actionLabel:e.viewSettings}:y(t)?{statusLabel:e.configuring,statusVariant:"accent",statusDescription:t.detail||e.pendingValidation,actionLabel:e.continueSetup}:{statusLabel:e.failed,statusVariant:"warn",statusDescription:t.detail||e.validationFailed,actionLabel:e.continueSetup}}function $({meta:t,locale:e}){const a=L(e);return i.jsxs(j,{children:[i.jsx(V,{icon:i.jsx(A,{brand:t.key,size:22}),title:t.title,subtitle:t.subtitle}),i.jsxs(w,{label:a.status,children:[i.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:i.jsxs(v,{variant:t.statusVariant,children:[t.loading&&i.jsx(C,{className:"h-3 w-3"}),t.statusLabel]})}),i.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3 xl:truncate xl:whitespace-nowrap",title:t.statusDescription,children:t.statusDescription})]}),i.jsx(w,{label:t.summaryLabel,children:i.jsx("div",{className:"break-words text-[13px] leading-relaxed text-fg-3",children:t.summary})}),i.jsx(N,{children:i.jsxs(D,{variant:t.channel?.ready?"outline":"primary",size:"sm",onClick:t.onAction,disabled:t.actionDisabled,children:[t.loading&&i.jsx(C,{className:"h-3 w-3"}),t.actionLabel]})})]})}function M({onOpenWeixin:t,onOpenTelegram:e,onOpenFeishu:a}){const s=p(r=>r.state),o=p(r=>r.locale),n=L(o),l=!s,d=s?.setupState?.channels||[],m=s?.config||{},k=S.useMemo(()=>{const r=d.find(c=>c.channel==="weixin")||null,b=d.find(c=>c.channel==="telegram")||null,x=d.find(c=>c.channel==="feishu")||null;return l?[{key:"weixin",title:"Weixin",subtitle:o==="zh-CN"?"二维码登录与账号接入":"QR login and account routing",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:t},{key:"telegram",title:"Telegram",subtitle:o==="zh-CN"?"Bot Token 与 chat allowlist":"Bot token and chat allowlist",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:e},{key:"feishu",title:"Feishu",subtitle:o==="zh-CN"?"应用凭证与机器人身份":"App credentials and bot identity",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:a}]:[{key:"weixin",title:"Weixin",subtitle:o==="zh-CN"?"二维码登录与账号接入":"QR login and account routing",channel:r,summary:h("weixin",m,n),summaryLabel:n.summary,...f(r,n),actionDisabled:!1,onAction:t},{key:"telegram",title:"Telegram",subtitle:o==="zh-CN"?"Bot Token 与 chat allowlist":"Bot token and chat allowlist",channel:b,summary:h("telegram",m,n),summaryLabel:n.summary,...f(b,n),actionDisabled:!1,onAction:e},{key:"feishu",title:"Feishu",subtitle:o==="zh-CN"?"应用凭证与机器人身份":"App credentials and bot identity",channel:x,summary:h("feishu",m,n),summaryLabel:n.summary,...f(x,n),actionDisabled:!1,onAction:a}]},[d,m,n,l,o,a,e,t]);return i.jsx("div",{className:"animate-in space-y-3",children:k.map(r=>i.jsx($,{meta:r,locale:o},r.key))})}export{M as IMAccessTab};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as t}from"./react-vendor-DTcmqLiz.js";import{c as r}from"./index-DsA79CzD.js";function a({className:o,...e}){return t.jsx("input",{className:r("flex h-8 w-full rounded-md border border-edge bg-inset px-2.5 py-1.5 text-[13px] text-fg shadow-sm","transition-[border-color,box-shadow,background] duration-200 outline-none","placeholder:text-fg-5","focus:border-edge-h focus:shadow-[0_0_0_4px_var(--th-glow-a)]",o),...e})}function d({children:o,className:e}){return t.jsx("label",{className:r("mb-2 block text-sm font-medium text-fg-3",e),children:o})}export{a as I,d as L};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as o,j as e}from"./react-vendor-DTcmqLiz.js";import{c as d,B as c}from"./index-DsA79CzD.js";function h({open:t,onClose:a,wide:r,panelStyle:i,children:n}){return o.useEffect(()=>{if(!t)return;const s=l=>{l.key==="Escape"&&a()};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[t,a]),t?e.jsxs("div",{className:"fixed inset-0 z-100 flex items-center justify-center p-4",children:[e.jsx("div",{className:"absolute inset-0 backdrop-blur-[10px] backdrop-saturate-125",style:{background:"linear-gradient(180deg, color-mix(in oklab, var(--th-overlay) 68%, transparent), color-mix(in oklab, var(--th-overlay) 92%, transparent))"},onClick:a}),e.jsx("div",{className:"pointer-events-none absolute inset-0",style:{background:"radial-gradient(circle at center, color-mix(in oklab, white 12%, transparent), transparent 38%)"}}),e.jsx("div",{className:d("glass-strong relative max-h-[min(88vh,860px)] w-full overflow-hidden rounded-[24px] border border-edge-h shadow-[0_32px_96px_rgba(2,6,23,0.28),0_8px_24px_rgba(15,23,42,0.08)] animate-scale",r?"max-w-[720px]":"max-w-[480px]"),style:{...i,background:"linear-gradient(180deg, color-mix(in oklab, var(--th-modal-bg) 90%, white 10%), color-mix(in oklab, var(--th-modal-bg) 97%, white 3%))"},children:e.jsx("div",{className:"max-h-[inherit] overflow-y-auto p-6",children:n})})]}):null}function v({title:t,description:a,onClose:r}){return e.jsxs("div",{className:"mb-5 flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:t}),a&&e.jsx("div",{className:"mt-1 text-sm leading-relaxed text-fg-4",children:a})]}),e.jsx(c,{variant:"ghost",size:"icon",onClick:r,className:"-mr-1 -mt-1 h-8 w-8 shrink-0",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})}export{h as M,v as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as a,j as e}from"./react-vendor-DTcmqLiz.js";import{u as j,b as U,B as I,a as C,e as K}from"./index-DsA79CzD.js";import{L as M,I as R}from"./Input-CpXJSdfp.js";import{M as A,a as L}from"./Modal-CxnBIMNk.js";import{D as X}from"./DirBrowser-DzS3D1wP.js";import"./router-emLofBBH.js";const P="https://ilinkai.weixin.qq.com";function Q(d){return d instanceof Error&&(d.name==="AbortError"||/aborted/i.test(d.message))}function H(d,h){return d instanceof Error&&/timed out/i.test(d.message)?h("modal.requestTimeout"):h("modal.networkError")}function ae({open:d,onClose:h}){const S=j(n=>n.state),c=j(n=>n.toast),B=j(n=>n.reloadUntil),t=j(n=>n.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(""),[g,b]=a.useState(""),[y,w]=a.useState(!1),[k,l]=a.useState(!1),[x,i]=a.useState(null),o=a.useRef(null),F=a.useRef(S);F.current=S,a.useEffect(()=>{d?(v(F.current?.config.telegramBotToken||""),b(F.current?.config.telegramAllowedChatIds||""),w(!1),i(null)):(o.current?.abort(),o.current=null,l(!1))},[d]),a.useEffect(()=>()=>{o.current?.abort(),o.current=null},[]);const m=async()=>{if(!u.trim()){c(s("modal.inputToken"),!1);return}o.current?.abort();const n=new AbortController;o.current=n,l(!0),i(null);let f=!1;try{const N=await C.validateTelegramConfig(u.trim(),g.trim(),{signal:n.signal,timeoutMs:12e3});if(!N.ok){i({ok:!1,text:"✗ "+(N.error||s("modal.validationFailed"))});return}const r=N.normalizedAllowedChatIds??g.trim();i({ok:!0,text:"✓ @"+(N.bot?.username||"bot")+(N.bot?.displayName?" ("+N.bot.displayName+")":"")});const p=new Set((S?.setupState?.channels||[]).filter(D=>(D.ready||D.configured)&&D.channel!=="telegram").map(D=>D.channel));if(p.add("telegram"),await C.saveConfig({telegramBotToken:u.trim(),telegramAllowedChatIds:r,channels:[...p]}),!await B(D=>{const q=D.setupState?.channels?.find(z=>z.channel==="telegram");return D.config.telegramBotToken===u.trim()&&(D.config.telegramAllowedChatIds||"")===r&&!!q?.ready},{attempts:10,intervalMs:350})){i({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1);return}c(s("modal.tgSaved")),f=!0}catch(N){if(Q(N))return;const r=H(N,s);i({ok:!1,text:"✗ "+r}),c(r,!1)}finally{o.current===n&&(o.current=null),l(!1),f&&h()}},T=()=>{o.current?.abort(),o.current=null,h()};return e.jsxs(A,{open:d,onClose:T,children:[e.jsx(L,{title:s("modal.configureTelegram"),onClose:T}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(M,{children:s("modal.botToken")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(R,{type:y?"text":"password",className:"flex-1 font-mono text-xs",placeholder:s("modal.pasteToken"),value:u,onChange:n=>v(n.target.value)}),e.jsx(I,{variant:"ghost",size:"sm",className:"!w-[34px] !p-0",onClick:()=>w(!y),children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[e.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]})})]})]}),x&&e.jsx("div",{className:"text-xs",style:{color:x.ok?"var(--th-ok)":"var(--th-err)"},children:x.text}),e.jsxs("div",{children:[e.jsxs(M,{children:[s("modal.allowedIds")," ",e.jsxs("span",{className:"text-fg-5",children:["(",s("modal.optional"),")"]})]}),e.jsx(R,{className:"font-mono text-xs",placeholder:s("modal.commaSep"),value:g,onChange:n=>b(n.target.value)})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:T,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:k,onClick:m,children:s(k?"modal.validating":"modal.validateSave")})]})]})}function le({open:d,onClose:h}){const S=j(m=>m.state),c=j(m=>m.toast),B=j(m=>m.reloadUntil),t=j(m=>m.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(""),[g,b]=a.useState(""),[y,w]=a.useState(!1),[k,l]=a.useState(null),x=a.useRef(null),i=a.useRef(S);i.current=S,a.useEffect(()=>{d?(v(i.current?.config.feishuAppId||""),b(i.current?.config.feishuAppSecret||""),l(null)):(x.current?.abort(),x.current=null,w(!1))},[d]),a.useEffect(()=>()=>{x.current?.abort(),x.current=null},[]);const o=async()=>{if(!u.trim()){c(s("modal.inputAppId"),!1);return}x.current?.abort();const m=new AbortController;x.current=m,w(!0),l(null);let T=!1;try{const n=await C.validateFeishuConfig(u.trim(),g.trim(),{signal:m.signal,timeoutMs:2e4});if(!n.ok){l({ok:!1,text:"✗ "+(n.error||s("modal.validationFailed"))});return}l({ok:!0,text:"✓ "+(n.app?.displayName||n.app?.appId||u.trim())});const f=new Set((S?.setupState?.channels||[]).filter(r=>(r.ready||r.configured)&&r.channel!=="feishu").map(r=>r.channel));if(f.add("feishu"),await C.saveConfig({feishuAppId:u.trim(),feishuAppSecret:g.trim(),channels:[...f]}),!await B(r=>{const p=r.setupState?.channels?.find(W=>W.channel==="feishu");return r.config.feishuAppId===u.trim()&&r.config.feishuAppSecret===g.trim()&&!!p?.ready},{attempts:10,intervalMs:350})){l({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1);return}c(s("modal.feishuSaved")),T=!0}catch(n){if(Q(n))return;const f=H(n,s);l({ok:!1,text:"✗ "+f}),c(f,!1)}finally{x.current===m&&(x.current=null),w(!1),T&&h()}},F=()=>{x.current?.abort(),x.current=null,h()};return e.jsxs(A,{open:d,onClose:F,children:[e.jsx(L,{title:s("modal.configureFeishu"),onClose:F}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(M,{children:s("modal.appId")}),e.jsx(R,{className:"font-mono text-xs",placeholder:s("modal.feishuPlaceholder"),value:u,onChange:m=>v(m.target.value)})]}),e.jsxs("div",{children:[e.jsx(M,{children:s("modal.appSecret")}),e.jsx(R,{type:"password",className:"font-mono text-xs",placeholder:s("modal.appSecret"),value:g,onChange:m=>b(m.target.value)})]}),k&&e.jsx("div",{className:"text-xs",style:{color:k.ok?"var(--th-ok)":"var(--th-err)"},children:k.text})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:F,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:y,onClick:o,children:s(y?"modal.validating":"modal.validateSave")})]})]})}function re({open:d,onClose:h}){const S=j(f=>f.state),c=j(f=>f.toast),B=j(f=>f.reloadUntil),t=j(f=>f.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(P),[g,b]=a.useState(!1),[y,w]=a.useState(""),[k,l]=a.useState(""),[x,i]=a.useState(null),o=a.useRef(null),F=a.useRef(S);F.current=S,a.useEffect(()=>{d?(v(F.current?.config.weixinBaseUrl||P),b(!1),w(""),l(""),i(null)):(o.current?.abort(),o.current=null,b(!1))},[d]),a.useEffect(()=>()=>{o.current?.abort(),o.current=null},[]);const m=()=>{o.current?.abort(),o.current=null,h()},T=a.useCallback(async(f,N,r)=>{for(;!f.signal.aborted;){const p=await C.waitWeixinLogin(N,r,{signal:f.signal,timeoutMs:45e3});if(!p.ok&&!p.connected)return i({ok:!1,text:"✗ "+(p.error||p.message||s("modal.validationFailed"))}),!1;if(p.qrcodeUrl&&w(p.qrcodeUrl),p.status==="scaned"?i({ok:!0,text:s("modal.weixinScanned")}):p.status==="expired"?i({ok:!0,text:s("modal.weixinQrRefreshed")}):p.connected||i({ok:!0,text:s("modal.weixinWaitingScan")}),!p.connected)continue;i({ok:!0,text:s("modal.weixinLoginSuccess")});const W=p.baseUrl||r,D=p.botToken||"",q=p.accountId||"",z=await C.validateWeixinConfig(W,D,q,{signal:f.signal,timeoutMs:12e3});if(!z.ok)return i({ok:!1,text:"✗ "+(z.error||s("modal.validationFailed"))}),!1;const _=z.normalizedBaseUrl||W,G=new Set((F.current?.setupState?.channels||[]).filter(E=>(E.ready||E.configured)&&E.channel!=="weixin").map(E=>E.channel));return G.add("weixin"),await C.saveConfig({weixinBaseUrl:_,weixinBotToken:D,weixinAccountId:q,channels:[...G]}),await B(E=>{const O=E.setupState?.channels?.find(V=>V.channel==="weixin");return E.config.weixinBaseUrl===_&&E.config.weixinBotToken===D&&E.config.weixinAccountId===q&&!!O?.ready},{attempts:12,intervalMs:350})?(c(s("modal.weixinSaved")),!0):(i({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1),!1)}return!1},[B,s,c]),n=async()=>{if(!u.trim()){c(s("modal.inputWeixinBaseUrl"),!1);return}o.current?.abort();const f=new AbortController;o.current=f,b(!0),w(""),l(""),i(null);let N=!1;try{const r=await C.startWeixinLogin(u.trim(),{signal:f.signal,timeoutMs:12e3});if(!r.ok||!r.qrcodeUrl){i({ok:!1,text:"✗ "+(r.error||r.message||s("modal.validationFailed"))});return}w(r.qrcodeUrl),l(r.sessionKey),i({ok:!0,text:s("modal.weixinWaitingScan")}),N=await T(f,r.sessionKey,u.trim())}catch(r){if(Q(r))return;const p=H(r,s);i({ok:!1,text:"✗ "+p}),c(p,!1)}finally{o.current===f&&(o.current=null),b(!1),N&&h()}};return e.jsxs(A,{open:d,onClose:m,children:[e.jsx(L,{title:s("modal.configureWeixin"),onClose:m}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"text-xs leading-relaxed text-fg-4",children:s("modal.weixinScanHint")}),e.jsxs("div",{children:[e.jsx(M,{children:s("modal.weixinBaseUrl")}),e.jsx(R,{className:"font-mono text-xs",value:u,onChange:f=>v(f.target.value),placeholder:P}),e.jsx("div",{className:"mt-1 text-[11px] text-fg-5",children:s("modal.weixinDefaultBaseUrlHint")})]}),y&&e.jsxs("div",{className:"rounded-xl border border-edge bg-panel-alt p-4",children:[e.jsx("img",{src:y,alt:s("modal.weixinQrAlt"),className:"mx-auto h-56 w-56 rounded-lg bg-white p-3 object-contain"}),k&&e.jsx("div",{className:"mt-2 truncate text-center font-mono text-[10px] text-fg-5",children:k})]}),x&&e.jsx("div",{className:"text-xs",style:{color:x.ok?"var(--th-ok)":"var(--th-err)"},children:x.text})]}),e.jsxs("div",{className:"mt-6 flex justify-end gap-2",children:[e.jsx(I,{variant:"ghost",onClick:m,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:g,onClick:n,children:s(g?y?"modal.validating":"modal.weixinGeneratingQr":y?"modal.weixinRetry":"modal.weixinGenerateQr")})]})]})}function ne({open:d,onClose:h}){const S=j(l=>l.state),c=j(l=>l.toast),B=j(l=>l.reload),t=j(l=>l.locale),s=a.useMemo(()=>U(t),[t]),u=S?.bot?.workdir||S?.runtimeWorkdir||"",[v,g]=a.useState(""),[b,y]=a.useState(0);a.useEffect(()=>{d&&(g(u),y(l=>l+1))},[d,u]);const w=a.useCallback(l=>{g(l)},[]),k=async()=>{const l=v.trim();if(!l){c(s("modal.selectDirFirst"),!1);return}try{const x=await C.switchWorkdir(l);x.ok?(c(s("modal.switchedTo")+x.workdir),h(),setTimeout(B,300)):c(x.error||s("modal.switchFailed"),!1)}catch{c(s("modal.switchFailed"),!1)}};return e.jsxs(A,{open:d,onClose:h,panelStyle:{width:"min(500px, calc(100vw - 2rem))",maxWidth:"min(500px, calc(100vw - 2rem))"},children:[e.jsx(L,{title:s("modal.switchWorkdir"),onClose:h}),e.jsx(X,{initialPath:u,onSelect:w,t:s},b),e.jsxs("div",{className:"flex justify-end gap-2 mt-4",children:[e.jsx(I,{variant:"ghost",onClick:h,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",onClick:k,children:s("modal.selectDir")})]})]})}function oe({open:d,onClose:h,onSaved:S}){const c=j(r=>r.toast),B=j(r=>r.locale),t=a.useMemo(()=>U(B),[B]),[s,u]=a.useState(null),[v,g]=a.useState(!1),[b,y]=a.useState(!1),[w,k]=a.useState(null);a.useEffect(()=>{d&&(g(!1),k(null),C.getBrowser().then(r=>{u(r),y(!!r.browser.enabled)}).catch(()=>u(null)))},[d]);const l=s?.browser,x=!!l?.enabled,i=!!l&&x!==b,o=l?.profileDir||"",F=t("ext.profileDir"),m=o,T=!!l?.chromeInstalled&&!!l?.profileCreated,n=s?l?.enabled?T?t("ext.browserReady"):l?.chromeInstalled?t("ext.chromeInstalled"):t("ext.needsSetup"):t("ext.disabled"):t("status.loading"),f=s&&l?.enabled?T?"ok":l?.chromeInstalled?"warn":"err":"muted",N=async()=>{g(!0),k(null);try{await C.saveConfig({browserEnabled:b});const r=await C.getBrowser();u(r),S?.()}catch{k({ok:!1,text:"✗ "+t("ext.browserModeSaveFailed")}),c(t("ext.browserModeSaveFailed"),!1),g(!1);return}if(!b){k({ok:!0,text:"✓ "+t("ext.browserDisabledSaved")}),c(t("ext.browserDisabledSaved")),g(!1);return}try{const r=await C.setupBrowser();if(!r.ok){k({ok:!1,text:"✗ "+(r.error||t("ext.browserLaunchFailed"))}),c(r.error||t("ext.browserLaunchFailed"),!1);return}u(p=>p?{...p,browser:r.browser}:{browser:r.browser,desktop:{enabled:!1,installed:!1,running:!1,appiumUrl:""}}),k({ok:!0,text:"✓ "+t("ext.browserEnabledLaunched")}),c(t("ext.browserEnabledLaunched")),S?.()}catch{k({ok:!1,text:"✗ "+t("ext.browserLaunchFailed")}),c(t("ext.browserLaunchFailed"),!1)}finally{g(!1)}};return e.jsxs(A,{open:d,onClose:h,children:[e.jsx(L,{title:t("ext.setupBrowser"),description:t("ext.setupBrowserDesc"),onClose:h}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(K,{variant:f,children:n}),l&&e.jsxs(e.Fragment,{children:[e.jsx(K,{variant:x?"accent":"muted",children:t(x?"ext.enabled":"ext.disabled")}),i&&e.jsx(K,{variant:"warn",children:t("ext.pendingModeChange")}),l.running&&e.jsxs(K,{variant:"accent",children:[t("ext.browserOpen"),l.pid?` · PID ${l.pid}`:""]})]})]}),e.jsxs("div",{className:"mt-3",children:[e.jsx(M,{children:F}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(R,{className:"font-mono text-xs flex-1",value:m||"—",readOnly:!0,onClick:r=>r.target.select()}),e.jsx(I,{variant:"outline",size:"sm",disabled:!m,onClick:()=>{m&&(navigator.clipboard.writeText(m),c(t("ext.step2Copied")))},children:t("ext.copyPath")})]})]}),e.jsx("div",{className:"mt-3 text-xs text-fg-5",children:t(b?"ext.profileModeDesc":"ext.browserDescDisabled")}),l?.detail&&e.jsx("div",{className:"mt-2 text-xs text-fg-5",children:l.detail}),w&&e.jsx("div",{className:"mt-3 text-xs",style:{color:w.ok?"var(--th-ok)":"var(--th-err)"},children:w.text})]}),e.jsx("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:e.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[e.jsx("input",{type:"checkbox",checked:b,onChange:r=>y(r.target.checked),className:"mt-0.5 h-4 w-4 rounded border border-edge bg-inset"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.browserEnableToggle")}),e.jsx("div",{className:"text-xs text-fg-4",children:t("ext.browserEnableToggleDesc")})]})]})}),e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t(b?"ext.step2Title":"ext.browserDisabledStepTitle")}),e.jsx("div",{className:"text-xs text-fg-4",children:t(b?"ext.step2Desc":"ext.browserDisabledHint")})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:h,children:t("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:v,onClick:N,children:t(v?"ext.launching":b?"ext.enableAndLaunchBrowser":"ext.saveBrowserDisabled")})]})]})}function ie({open:d,onClose:h,onSaved:S}){const c=j(n=>n.toast),B=j(n=>n.locale),t=a.useMemo(()=>U(B),[B]),[s,u]=a.useState(!1),[v,g]=a.useState(!1),[b,y]=a.useState(!1),[w,k]=a.useState(!1),[l,x]=a.useState(!1),[i,o]=a.useState(null);a.useEffect(()=>{d&&(u(!1),k(!1),x(!1),o(null),C.getBrowser().then(n=>{g(n.desktop.installed),y(n.desktop.enabled)}).catch(()=>{}))},[d]);const F=async()=>{u(!0),o(null);try{const n=await C.desktopInstall();n.ok?(g(!0),o({ok:!0,text:"✓ "+t("ext.desktopInstalled")}),c(t("ext.desktopInstalled"))):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{u(!1)}},m=async()=>{k(!0),o(null);try{const n=await C.desktopToggle(!0);n.ok?(y(!0),o({ok:!0,text:"✓ "+t("ext.desktopStarted")}),c(t("ext.desktopStarted")),S?.()):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{k(!1)}},T=async()=>{x(!0),o(null);try{const n=await C.desktopToggle(!1);n.ok?(y(!1),o({ok:!0,text:"✓ "+t("ext.desktopStopped")}),c(t("ext.desktopStopped")),S?.()):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{x(!1)}};return e.jsxs(A,{open:d,onClose:h,children:[e.jsx(L,{title:t("ext.setupDesktop"),description:t("ext.setupDesktopDesc"),onClose:h}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.desktopStep1Title")}),e.jsx("div",{className:"text-xs text-fg-4 mb-3",children:t("ext.desktopStep1Desc")}),i&&!v&&e.jsx("div",{className:"mb-2 text-xs",style:{color:i.ok?"var(--th-ok)":"var(--th-err)"},children:i.text}),e.jsx(I,{variant:v?"ghost":"outline",size:"sm",disabled:s||v,onClick:F,children:t(s?"ext.desktopInstalling":v?"ext.desktopStep1Done":"ext.desktopStep1Action")})]}),e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.desktopStep2Title")}),e.jsx("div",{className:"text-xs text-fg-4 mb-3",children:t("ext.desktopStep2Desc")}),i&&v&&e.jsx("div",{className:"mb-2 text-xs",style:{color:i.ok?"var(--th-ok)":"var(--th-err)"},children:i.text}),e.jsx("div",{className:"flex items-center gap-2",children:b?e.jsx(I,{variant:"outline",size:"sm",disabled:l,onClick:T,children:t(l?"ext.desktopStopping":"ext.disable")}):e.jsx(I,{variant:"primary",size:"sm",disabled:!v||w,onClick:m,children:t(w?"ext.desktopStarting":"ext.desktopStep2Action")})})]})]}),e.jsx("div",{className:"flex justify-end gap-2 mt-6",children:e.jsx(I,{variant:"ghost",onClick:h,children:t("modal.cancel")})})]})}export{oe as BrowserSetupModal,ie as DesktopSetupModal,le as FeishuModal,ae as TelegramModal,re as WeixinModal,ne as WorkdirModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,j as e}from"./react-vendor-
|
|
1
|
+
import{r as l,j as e}from"./react-vendor-DTcmqLiz.js";import{u,b as R,a as D,B as f,e as N}from"./index-DsA79CzD.js";import{a as L,b as O,c as j,d as z}from"./shared-B2_ptDBU.js";import"./router-emLofBBH.js";const E=[{key:"accessibility",labelKey:"perm.accessibility",reasonZh:"允许控制桌面应用、点击和输入。",reasonEn:"Allows controlling desktop apps with clicks and typing.",guidePathKey:"perm.pathAccessibility",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"12",cy:"5",r:"1.8"}),e.jsx("path",{d:"M12 7.7v10.2"}),e.jsx("path",{d:"M8.4 10h7.2"}),e.jsx("path",{d:"M9.6 19.2 12 15.1l2.4 4.1"})]})},{key:"screenRecording",labelKey:"perm.screenRecording",reasonZh:"允许读取屏幕内容,用于截图和界面分析。",reasonEn:"Allows reading the screen for screenshots and UI inspection.",guidePathKey:"perm.pathScreenRecording",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"4",y:"5.5",width:"11.5",height:"10",rx:"2.4"}),e.jsx("path",{d:"m17.5 8.4 2.7-1.5v7.2l-2.7-1.5"}),e.jsx("circle",{cx:"9.75",cy:"10.5",r:"1.1",fill:"currentColor",stroke:"none"})]})},{key:"fullDiskAccess",labelKey:"perm.fullDiskAccess",reasonZh:"允许访问桌面、下载等受保护目录。",reasonEn:"Allows access to protected folders like Desktop and Downloads.",guidePathKey:"perm.pathFullDiskAccess",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"6.2",y:"10.1",width:"11.6",height:"8.6",rx:"2.6"}),e.jsx("path",{d:"M9 10V7.8a3 3 0 1 1 6 0V10"}),e.jsx("circle",{cx:"12",cy:"13.5",r:"0.9",fill:"currentColor",stroke:"none"}),e.jsx("path",{d:"M12 14.6v1.8"})]})}];function K(o){return o==="zh-CN"?{introWithHost:"请在 macOS 中为 {hostApp} 开启以下权限。",intro:"请在 macOS 中开启以下权限。",status:"状态",summary:"系统位置",loading:"检查中",needsGrant:"需要授权",granted:"已授权",authorize:"授权",openSettings:"前往设置",refreshState:"刷新状态",checking:"检查中...",hostGranted:"{hostApp} 已可直接使用此权限。",hostGrantedFallback:"当前宿主应用已可直接使用此权限。",needsGrantDetail:"尚未授权,可通过右侧按钮发起系统授权。",needsSettingsDetail:"需要在系统设置中手动开启此权限。"}:{introWithHost:"Grant the following permissions to {hostApp} in macOS.",intro:"Grant the following permissions in macOS.",status:"Status",summary:"System path",loading:"Checking",needsGrant:"Needs access",granted:"Granted",authorize:"Authorize",openSettings:"Open settings",refreshState:"Refresh status",checking:"Checking...",hostGranted:"{hostApp} can use this permission now.",hostGrantedFallback:"The current host app can use this permission now.",needsGrantDetail:"Access has not been granted yet. Use the button on the right to trigger the macOS prompt.",needsSettingsDetail:"This permission needs to be enabled manually in System Settings."}}function B(){const o=u(t=>t.state),d=u(t=>t.locale),h=u(t=>t.reload),i=u(t=>t.toast),a=l.useMemo(()=>R(d),[d]),s=K(d),g=o?.permissions||{},p=o?.hostApp||null,c=!o,[m,x]=l.useState(null),b=l.useMemo(()=>E.map(t=>({...t,permission:g[t.key]})),[g]),S=l.useCallback(async t=>{if(!m){x(t);try{const n=await D.requestPermission(t);if(!n.ok){i(n.error||a("perm.requestFailed"),!1);return}n.action==="already_granted"?i(a("perm.alreadyGranted")):n.action==="prompted"?i(a("perm.promptOpened")):i(a("perm.settingsOpened")),await h()}catch(n){i(n instanceof Error?n.message:a("perm.requestFailed"),!1)}finally{x(n=>n===t?null:n)}}},[h,m,a,i]),k=l.useCallback(async()=>{await h()},[h]);return e.jsxs("div",{className:"animate-in space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("div",{className:"min-w-0 flex-1",children:e.jsx("div",{className:"text-[13px] leading-relaxed text-fg-4",children:p?s.introWithHost.replace("{hostApp}",p):s.intro})}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>{k()},children:s.refreshState})]}),b.map(t=>{const n=t.permission,r=!!n?.granted,y=!!n&&n.checkable,w=c?s.loading:n&&r?s.granted:s.needsGrant,v=c?"muted":r?"ok":"warn",A=c?s.loading:r?p?s.hostGranted.replace("{hostApp}",p):s.hostGrantedFallback:y?s.needsGrantDetail:s.needsSettingsDetail,G=c?s.checking:r?s.refreshState:y?s.authorize:s.openSettings,C=r?k:()=>{S(t.key)};return e.jsxs(L,{children:[e.jsx(O,{icon:t.icon,title:a(t.labelKey),subtitle:d==="zh-CN"?t.reasonZh:t.reasonEn}),e.jsxs(j,{label:s.status,children:[e.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:e.jsx(N,{variant:v,children:w})}),e.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:A})]}),e.jsx(j,{label:s.summary,children:e.jsx("div",{className:"break-words text-[13px] leading-relaxed text-fg-3",children:a(t.guidePathKey)})}),e.jsx(z,{children:e.jsx(f,{variant:r?"outline":"primary",size:"sm",disabled:c||!!m,onClick:C,children:m===t.key?s.checking:G})})]},t.key)})]})}export{B as PermissionsTab};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as s,j as e,b as H}from"./react-vendor-DTcmqLiz.js";import{c}from"./index-DsA79CzD.js";function _(u,x){return!!(u&&x instanceof Node&&u.contains(x))}function M({value:u,options:x,onChange:y,className:w,placeholder:a="—",disabled:h=!1,readOnly:p=!1}){const f=x.find(n=>n.value===u),m=p||x.length<=1,[i,g]=s.useState(!1),[t,l]=s.useState(null),o=s.useRef(null),j=s.useRef(null);if(s.useEffect(()=>{if(!i)return;const n=d=>{_(o.current,d.target)||_(j.current,d.target)||g(!1)},r=d=>{d.key==="Escape"&&g(!1)};return document.addEventListener("mousedown",n),document.addEventListener("keydown",r),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("keydown",r)}},[i]),s.useLayoutEffect(()=>{if(!i)return;const n=()=>{const r=o.current;if(!r)return;const d=r.getBoundingClientRect(),k=window.innerHeight-d.bottom-12,E=d.top-12,N=k<220&&E>k,L=Math.max(140,Math.min(260,N?E:k));l({left:d.left,top:N?Math.max(12,d.top-L-8):d.bottom+8,width:d.width,maxHeight:L})};return n(),window.addEventListener("resize",n),window.addEventListener("scroll",n,!0),()=>{window.removeEventListener("resize",n),window.removeEventListener("scroll",n,!0)}},[i]),m)return e.jsx("div",{className:c("flex h-8 w-full items-center rounded-md border border-edge bg-panel-alt px-2.5 text-[13px] text-fg-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.72),0_1px_2px_rgba(15,23,42,0.05)]",h&&"cursor-not-allowed opacity-50",w),children:e.jsx("span",{className:c("truncate",!f&&"text-fg-5"),children:f?.label||a})});const v=n=>{h||(y(n),g(!1))},b=i&&t?H.createPortal(e.jsx("div",{ref:j,role:"listbox",className:"fixed z-[220] overflow-hidden rounded-xl border border-edge-h bg-[var(--th-dropdown)] p-1.5 shadow-[0_24px_64px_rgba(2,6,23,0.22)] backdrop-blur-xl",style:{left:t.left,top:t.top,width:t.width},children:e.jsx("div",{className:"overflow-y-auto",style:{maxHeight:t.maxHeight},children:x.map(n=>{const r=n.value===u;return e.jsxs("button",{type:"button",role:"option","aria-selected":r,onClick:()=>v(n.value),className:c("flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-[13px] transition-colors duration-200",r?"bg-panel text-fg shadow-[inset_0_1px_0_rgba(255,255,255,0.03)]":"text-fg-3 hover:bg-panel-alt hover:text-fg-2"),children:[e.jsx("span",{className:"min-w-0 flex-1 truncate",children:n.label}),r&&e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"shrink-0 text-fg-4",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})})]},n.value)})})}),document.body):null;return e.jsxs("div",{ref:o,className:c("relative",w),children:[e.jsxs("button",{type:"button",disabled:h,"aria-haspopup":"listbox","aria-expanded":i,onClick:()=>g(n=>!n),className:c("flex h-8 w-full items-center rounded-md border border-edge bg-inset px-2.5 pr-8 text-left text-[13px] text-fg shadow-[inset_0_1px_0_rgba(255,255,255,0.72),0_1px_2px_rgba(15,23,42,0.05)]","transition-[border-color,box-shadow,background] duration-200 outline-none","hover:border-edge-h hover:bg-panel","focus-visible:border-edge-h focus-visible:shadow-[0_0_0_4px_var(--th-glow-a)]","disabled:cursor-not-allowed disabled:opacity-50",i&&"border-edge-h bg-panel shadow-[0_0_0_4px_var(--th-glow-a)]"),children:[e.jsx("span",{className:c("min-w-0 flex-1 truncate",!f&&"text-fg-5"),children:f?.label||a}),e.jsx("span",{className:c("pointer-events-none absolute inset-y-0 right-3 flex items-center text-fg-4 transition-transform duration-200",i&&"rotate-180"),children:e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})})]}),b]})}function B({value:u,options:x,onChange:y,renderIcon:w}){const[a,h]=s.useState(!1),[p,f]=s.useState(null),m=s.useRef(null),i=s.useRef(null);s.useEffect(()=>{if(!a)return;const t=o=>{_(m.current,o.target)||_(i.current,o.target)||h(!1)},l=o=>{o.key==="Escape"&&h(!1)};return document.addEventListener("mousedown",t),document.addEventListener("keydown",l),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("keydown",l)}},[a]),s.useLayoutEffect(()=>{if(!a)return;const t=()=>{const l=m.current;if(!l)return;const o=l.getBoundingClientRect(),v=window.innerHeight-o.bottom-12,b=o.top-12,n=v<220&&b>v,r=Math.max(140,Math.min(260,n?b:v));f({left:o.left,top:n?Math.max(12,o.top-r-8):o.bottom+8,width:Math.max(o.width,160),maxHeight:r})};return t(),window.addEventListener("resize",t),window.addEventListener("scroll",t,!0),()=>{window.removeEventListener("resize",t),window.removeEventListener("scroll",t,!0)}},[a]);const g=a&&p?H.createPortal(e.jsx("div",{ref:i,role:"listbox",className:"fixed z-[220] overflow-hidden rounded-xl border border-edge-h bg-[var(--th-dropdown)] p-1.5 shadow-[0_24px_64px_rgba(2,6,23,0.22)] backdrop-blur-xl",style:{left:p.left,top:p.top,width:p.width},children:e.jsx("div",{className:"overflow-y-auto",style:{maxHeight:p.maxHeight},children:x.map(t=>{const l=t.value===u;return e.jsxs("button",{type:"button",role:"option","aria-selected":l,onClick:()=>{y(t.value),h(!1)},className:c("flex w-full items-center gap-2.5 rounded-lg px-2.5 py-2 text-left text-[13px] transition-colors duration-200",l?"bg-panel text-fg shadow-[inset_0_1px_0_rgba(255,255,255,0.03)]":"text-fg-3 hover:bg-panel-alt hover:text-fg-2"),children:[w(t.value),e.jsx("span",{className:"min-w-0 flex-1 truncate",children:t.label}),l&&e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"shrink-0 text-fg-4",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})})]},t.value)})})}),document.body):null;return e.jsxs("div",{ref:m,className:"relative shrink-0",children:[e.jsxs("button",{type:"button","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>h(t=>!t),className:c("inline-flex items-center gap-1.5 rounded-lg border border-edge bg-inset px-2 py-1.5","transition-[border-color,box-shadow,background] duration-200 outline-none","hover:border-edge-h hover:bg-panel","focus-visible:border-edge-h focus-visible:shadow-[0_0_0_4px_var(--th-glow-a)]",a&&"border-edge-h bg-panel shadow-[0_0_0_4px_var(--th-glow-a)]"),children:[w(u),e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:c("text-fg-5 transition-transform duration-200",a&&"rotate-180"),children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),g]})}export{B as I,M as S};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import{j as e,r,b as Re}from"./react-vendor-DTcmqLiz.js";import{c as z,C as Ke,S as ve,u as Ve,a as Q,g as Ee,E as We,b as lt,s as ot,d as De}from"./index-DsA79CzD.js";import{h as ue,P as Ge,C as ye,l as at,p as it}from"./index-iIFycaRv.js";import{B as we}from"./BrandIcon-CCre1PsF.js";import{M as ke,r as Ne}from"./markdown-DMQUjobV.js";import"./router-emLofBBH.js";import"./Select-CisYqbJ2.js";import"./Modal-CxnBIMNk.js";import"./DirBrowser-DzS3D1wP.js";function ct({text:t}){const[n,l]=r.useState(!1),a=()=>{navigator.clipboard.writeText(t).then(()=>{l(!0),setTimeout(()=>l(!1),2e3)}).catch(()=>{})};return e.jsx("button",{onClick:a,className:"flex items-center text-fg-5/50 hover:text-fg-3 transition-colors",children:n?e.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"#34d399",strokeWidth:"2",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})}function dt(t){const n=/^[.~/].*\.\w+$/.test(t)||/^[a-z][\w-]*\//.test(t),l=/^(npm |npx |git |python|pip |yarn |pnpm |cargo |go |make )/.test(t);return n?"bg-blue-500/8 border-blue-400/12 text-blue-300/90":l?"bg-amber-500/8 border-amber-400/10 text-amber-300/80":"bg-[rgba(255,255,255,0.06)] border-edge/20 text-fg-3"}const Se={h1:({children:t})=>e.jsx("h2",{className:"text-[16px] font-bold text-fg mt-4 mb-2",children:t}),h2:({children:t})=>e.jsx("h3",{className:"text-[14.5px] font-semibold text-fg mt-4 mb-1.5",children:t}),h3:({children:t})=>e.jsx("h4",{className:"text-[13.5px] font-semibold text-fg mt-3 mb-1",children:t}),p:({children:t})=>e.jsx("p",{className:"my-1.5 whitespace-pre-wrap break-words",children:t}),strong:({children:t})=>e.jsx("strong",{className:"font-semibold text-fg",children:t}),em:({children:t})=>e.jsx("em",{className:"italic text-fg-3",children:t}),a:({href:t,children:n})=>e.jsx("span",{className:"text-blue-400 underline underline-offset-2 decoration-blue-400/30 cursor-pointer",children:n}),ul:({children:t})=>e.jsx("ul",{className:"space-y-1 my-2 ml-1",children:t}),ol:({children:t})=>e.jsx("ol",{className:"space-y-1 my-2 ml-1 list-decimal list-inside",children:t}),li:({children:t})=>e.jsxs("li",{className:"flex gap-2 items-start",children:[e.jsx("span",{className:"shrink-0 mt-[10px] w-[5px] h-[5px] rounded-full bg-fg-5/40"}),e.jsx("span",{className:"flex-1",children:t})]}),blockquote:({children:t})=>e.jsx("blockquote",{className:"border-l-2 border-fg-5/30 pl-3 my-2 text-fg-4 italic",children:t}),hr:()=>e.jsx("hr",{className:"border-edge/30 my-4"}),code:({className:t,children:n,...l})=>{const a=String(n).replace(/\n$/,""),d=/language-(\w+)/.exec(t||"");if(!d&&!t)return e.jsx("code",{className:z("px-1.5 py-[1px] rounded text-[12px] font-mono border",dt(a)),children:a});const u=d?.[1]||"";return e.jsxs("div",{className:"rounded-lg overflow-hidden border border-edge/30 bg-[rgba(0,0,0,0.25)] my-3 not-prose",children:[e.jsxs("div",{className:"flex items-center justify-between px-3.5 py-1.5 border-b border-edge/15 bg-[rgba(0,0,0,0.12)]",children:[e.jsx("span",{className:"text-[10px] font-mono text-fg-5/50",children:u||"text"}),e.jsx(ct,{text:a})]}),e.jsx("pre",{className:"px-3.5 py-3 text-[12px] leading-[1.65] text-fg-3 font-mono whitespace-pre-wrap break-words overflow-x-auto",children:e.jsx("code",{children:a})})]})},pre:({children:t})=>e.jsx(e.Fragment,{children:t}),table:({children:t})=>e.jsx("div",{className:"my-3 overflow-x-auto rounded-lg border border-edge/30",children:e.jsx("table",{className:"w-full text-[12.5px]",children:t})}),thead:({children:t})=>e.jsx("thead",{className:"bg-[rgba(0,0,0,0.1)]",children:t}),th:({children:t})=>e.jsx("th",{className:"px-3 py-1.5 text-left font-semibold text-fg-3 border-b border-edge/30",children:t}),td:({children:t})=>e.jsx("td",{className:"px-3 py-1.5 text-fg-4 border-t border-edge/12",children:t}),tr:({children:t})=>e.jsx("tr",{className:"even:bg-[rgba(255,255,255,0.015)]",children:t})};function Fe(t){const n=t.richMessages?.length?t.richMessages:t.messages?.map(c=>({role:c.role,text:c.text,blocks:[{type:"text",content:c.text}]}))||[],l=xt(n),a=Math.max(t.window?.totalTurns??t.totalTurns??l.length,l.length),d=t.window?.endTurn??a,u=t.window?.startTurn??Math.max(0,d-l.length);return{turns:l,startTurn:u,endTurn:d,totalTurns:a,hasOlder:t.window?.hasOlder??u>0}}function ut(t,n){const l=Math.max(0,t.startTurn-n.startTurn);return{turns:[...n.turns.slice(0,l),...t.turns],startTurn:n.startTurn,endTurn:t.endTurn,totalTurns:Math.max(t.totalTurns,n.totalTurns),hasOlder:n.hasOlder}}function ft(t,n){if(n.startTurn<=t.startTurn)return n;const l=Math.max(0,n.startTurn-t.startTurn);return{turns:[...t.turns.slice(0,l),...n.turns],startTurn:t.startTurn,endTurn:n.endTurn,totalTurns:n.totalTurns,hasOlder:t.startTurn>0}}function pt(t,n){const l=[t.text,n.text].filter(Boolean);return{role:t.role,text:l.join(`
|
|
2
|
+
|
|
3
|
+
`),blocks:[...t.blocks,...n.blocks]}}function xt(t){const n=[];let l={user:null,assistant:null};for(const a of t)a.role==="user"?((l.user||l.assistant)&&(n.push(l),l={user:null,assistant:null}),l.user=a):l.assistant?l.assistant=pt(l.assistant,a):l.assistant=a;return(l.user||l.assistant)&&n.push(l),n}function gt(t){return t.length>800?!0:["continued from a previous","summary below covers","earlier portion of the conversation","Summary:","Key Technical Concepts"].some(l=>t.includes(l))}function Xe(t,n){const l=t.split(`
|
|
4
|
+
`).filter(a=>a.trim());return l.length<=n?l.join(`
|
|
5
|
+
`):l.slice(-n).join(`
|
|
6
|
+
`)}function ht(t){return{id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,file:t,previewUrl:URL.createObjectURL(t)}}function $e(t){for(const n of t)URL.revokeObjectURL(n.previewUrl)}function mt(t){if(!Number.isFinite(t)||t<=0)return"0 B";if(t<1024)return`${t} B`;const n=t/1024;if(n<1024)return`${n.toFixed(n>=100?0:1)} KB`;const l=n/1024;return`${l.toFixed(l>=100?0:1)} MB`}async function bt(t){if(typeof ClipboardItem>"u"||!navigator.clipboard?.write)return!1;try{return await navigator.clipboard.write([new ClipboardItem({[t.type||"image/png"]:t})]),!0}catch{return!1}}function jt(t){const n=t.indexOf(":");if(n<=0)return null;const l=t.slice(0,n).trim(),a=t.slice(n+1).trim();return!l||!a?null:{agent:l,sessionId:a}}function vt({message:t,t:n}){const{activityBlocks:l,thinkingBlocks:a,processNotes:d,planBlocks:u,outputBlocks:c}=yt(t.blocks),o=[...u].reverse().find(j=>ue(j.plan));return e.jsxs("div",{className:"space-y-3",children:[(l.length>0||d.length>0)&&e.jsx(wt,{blocks:l,notes:d,t:n}),o?.plan&&e.jsx(Ge,{plan:o.plan,phase:"done",t:n,className:"max-w-[760px]"}),a.length>0&&e.jsx(Nt,{blocks:a,t:n}),c.length>0&&e.jsx(Ct,{blocks:c})]})}function yt(t){const n=t.filter(o=>o.type==="plan"||o.type==="tool_use"||o.type==="tool_result"||o.type==="image"||!!o.content.trim()),l=n.some(o=>o.type==="text"&&!!o.phase);if(!n.some(o=>o.type!=="text"&&o.type!=="image")&&!l)return{activityBlocks:[],thinkingBlocks:[],processNotes:[],planBlocks:[],outputBlocks:n};if(l)return{activityBlocks:n.filter(o=>o.type==="tool_use"||o.type==="tool_result"),thinkingBlocks:n.filter(o=>o.type==="thinking"),processNotes:n.filter(o=>o.type==="text"&&o.phase==="commentary"),planBlocks:n.filter(o=>o.type==="plan"&&ue(o.plan)),outputBlocks:n.filter(o=>o.type==="image"||o.type==="text"&&o.phase!=="commentary")};let d=n.length;for(;d>0&&(n[d-1].type==="text"||n[d-1].type==="image");)d--;const u=d<n.length?n.slice(0,d):n,c=d<n.length?n.slice(d):[];return{activityBlocks:u.filter(o=>o.type==="tool_use"||o.type==="tool_result"),thinkingBlocks:u.filter(o=>o.type==="thinking"),planBlocks:u.filter(o=>o.type==="plan"&&ue(o.plan)),processNotes:u.filter(o=>o.type==="text"),outputBlocks:[...c,...u.filter(o=>o.type==="image")]}}function wt({blocks:t,notes:n,t:l}){const[a,d]=r.useState(!1),u=t.filter(g=>g.type==="tool_use").map(g=>g.toolName||"tool").filter((g,v,k)=>k.indexOf(g)===v),c=t.length+n.length,o=n.map(g=>g.content.split(`
|
|
7
|
+
`).find(Boolean)?.trim()||"").find(Boolean)||"",j=u.length>0?u.join(" · "):o;return e.jsx(ye,{open:a,onToggle:()=>d(g=>!g),dot:{color:"bg-cyan-400/60"},label:l("hub.activity"),preview:e.jsx("span",{className:"text-[11.5px] font-mono text-fg-4 truncate",children:j}),badge:c>0?e.jsx(Ke,{children:c}):void 0,children:e.jsxs("div",{className:"px-3.5 py-2.5 space-y-0.5",children:[t.map((g,v)=>e.jsx(kt,{block:g},v)),n.length>0&&e.jsx("div",{className:"mt-2 space-y-1.5",children:n.map((g,v)=>e.jsx("div",{className:"rounded-md border border-edge bg-inset px-3 py-2 session-md text-[12px] leading-[1.7] text-fg-4",children:e.jsx(ke,{remarkPlugins:[Ne],components:Se,children:g.content})},`note-${v}`))})]})})}function kt({block:t}){const[n,l]=r.useState(!1),a=t.type==="tool_use";return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>t.content&&l(d=>!d),className:z("flex items-center gap-2 py-[3px] w-full text-left group rounded-sm transition-colors",t.content&&"hover:bg-panel-h/30"),children:[e.jsx("span",{className:z("h-1.5 w-1.5 rounded-full shrink-0",a?"bg-fg-5/40":"bg-ok/40")}),e.jsx("span",{className:"text-[11px] font-mono text-fg-5/60 group-hover:text-fg-3 transition-colors truncate",children:a?t.toolName||"tool":"result"})]}),n&&t.content&&e.jsx("pre",{className:"ml-3 mt-1 mb-2 p-3 rounded-md bg-inset border border-edge text-[11px] leading-[1.6] text-fg-4 font-mono whitespace-pre-wrap break-words max-h-[240px] overflow-y-auto",children:t.content.length>3e3?t.content.slice(0,3e3)+`
|
|
8
|
+
…`:t.content})]})}function Nt({blocks:t,t:n}){const[l,a]=r.useState(!1),d=r.useRef(null),u=t.map(o=>o.content).filter(Boolean).join(`
|
|
9
|
+
|
|
10
|
+
`).trim();if(!u)return null;const c=Xe(u,3);return e.jsx(ye,{open:l,onToggle:()=>a(o=>!o),dot:{color:"bg-violet-400/50"},label:n("hub.thinking"),collapsedContent:c?e.jsx("div",{className:"px-3.5 pb-2.5 -mt-0.5 text-[12px] text-fg-4 leading-[1.65] whitespace-pre-wrap break-words line-clamp-3",children:c}):void 0,children:e.jsx(St,{scrollRef:d,text:u})})}function St({scrollRef:t,text:n}){return r.useLayoutEffect(()=>{const l=t.current;l&&(l.scrollTop=l.scrollHeight)},[t]),e.jsx("div",{ref:t,className:"px-3.5 py-3 text-[12px] text-fg-4 leading-[1.7] whitespace-pre-wrap break-words max-h-[320px] overflow-y-auto",children:n})}function Ct({blocks:t}){const n=t.filter(c=>c.type==="text"),l=t.filter(c=>c.type==="image"),a=n.map(c=>c.content).filter(Boolean).join(`
|
|
11
|
+
|
|
12
|
+
`),[d,u]=r.useState(null);return!a.trim()&&l.length===0?null:e.jsxs(e.Fragment,{children:[a.trim()&&e.jsx("div",{className:"session-md text-[13.5px] leading-[1.75] text-fg-2",children:e.jsx(ke,{remarkPlugins:[Ne],components:Se,children:a})}),l.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:l.map((c,o)=>e.jsx("img",{src:c.content,className:"max-w-[400px] max-h-[300px] rounded-md border border-fg-6/50 object-contain cursor-zoom-in hover:opacity-90 transition-opacity",onClick:()=>u(c.content)},o))}),d&&e.jsx(Qe,{src:d,onClose:()=>u(null)})]})}const Tt=r.memo(function({turn:n,agent:l,meta:a,t:d,onResend:u,onEdit:c}){const o=n.user&&!n.assistant&>(n.user.text);return e.jsxs("div",{className:"session-turn",children:[n.user&&!o&&e.jsx(Je,{text:n.user.text,blocks:n.user.blocks,t:d,onResend:u,onEdit:c}),o&&n.user&&e.jsx("div",{className:"mb-4 px-4 py-3 rounded-lg bg-[rgba(255,255,255,0.02)] border border-edge/20 text-[12.5px] leading-[1.7] text-fg-4",children:e.jsx(ke,{remarkPlugins:[Ne],components:Se,children:n.user.text})}),n.assistant&&e.jsx(Oe,{agent:l,meta:a}),n.assistant&&e.jsx("div",{className:"mb-6",children:e.jsx(vt,{message:n.assistant,t:d})})]})});function Qe({src:t,onClose:n}){return r.useEffect(()=>{const l=a=>{a.key==="Escape"&&n()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[n]),Re.createPortal(e.jsx("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm cursor-zoom-out",onClick:n,children:e.jsx("img",{src:t,className:"max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl",onClick:l=>l.stopPropagation()})}),document.body)}function Je({text:t,blocks:n,t:l,onResend:a,onEdit:d}){const[u,c]=r.useState(!1),[o,j]=r.useState(!1),[g,v]=r.useState(null),k=!!(a||d),b=n?.filter(E=>E.type==="image")||[],w=()=>{navigator.clipboard.writeText(t).then(()=>{j(!0),setTimeout(()=>j(!1),1500)}).catch(()=>{})};return e.jsxs("div",{className:"flex flex-col items-end mb-5 group/bubble",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),children:[e.jsxs("div",{className:"max-w-[72%] rounded-md border border-fg-6 bg-panel px-4 py-3 text-[13.5px] leading-[1.72] text-fg shadow-sm",children:[t&&e.jsx("div",{className:"whitespace-pre-wrap break-words",children:t}),b.length>0&&e.jsx("div",{className:z("flex flex-wrap gap-2",t&&"mt-2"),children:b.map((E,T)=>e.jsx("img",{src:E.content,className:"max-w-[280px] max-h-[200px] rounded border border-fg-6/50 object-cover cursor-zoom-in hover:opacity-90 transition-opacity",onClick:()=>v(E.content)},T))})]}),g&&e.jsx(Qe,{src:g,onClose:()=>v(null)}),k&&e.jsxs("div",{className:z("flex items-center gap-1 mt-1.5 mr-1 transition-all duration-200",u?"opacity-100 translate-y-0":"opacity-0 -translate-y-1 pointer-events-none"),children:[e.jsx(Be,{label:l(o?"hub.copied":"hub.copy"),onClick:w,children:o?e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#34d399",strokeWidth:"2",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})}),a&&e.jsx(Be,{label:l("hub.rerun"),onClick:()=>a(t),children:e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("polyline",{points:"23 4 23 10 17 10"}),e.jsx("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})}),d&&e.jsx(Be,{label:l("hub.edit"),onClick:()=>d(t),children:e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})})]})]})}function Be({label:t,onClick:n,children:l}){return e.jsx("button",{onClick:n,title:t,className:"flex items-center justify-center w-7 h-7 rounded border border-fg-6 bg-panel text-fg-4 shadow-sm hover:text-fg-2 hover:border-edge-h hover:bg-panel-h transition-colors",children:l})}function Oe({agent:t,meta:n}){return e.jsxs("div",{className:"flex items-center gap-3 my-4",children:[e.jsx("div",{className:"flex-1 h-px bg-edge/60"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] text-fg-5",children:[e.jsx(we,{brand:t,size:12}),e.jsx("span",{style:{color:n.color,opacity:.6},className:"font-medium",children:n.label})]}),e.jsx("div",{className:"flex-1 h-px bg-edge/60"})]})}function Lt({stream:t,t:n}){const l=ue(t.plan),[a,d]=r.useState(!1),[u,c]=r.useState(!1),o=r.useRef(null),j=r.useRef(null),g=!!t.text||!!t.activity||!!t.thinking,v=r.useMemo(()=>(t.activity||"").split(`
|
|
13
|
+
`).filter(Boolean),[t.activity]),k=v[v.length-1]||"";return r.useLayoutEffect(()=>{const b=o.current;b&&a&&(b.scrollTop=b.scrollHeight)},[a,t.activity]),r.useLayoutEffect(()=>{const b=j.current;b&&u&&(b.scrollTop=b.scrollHeight)},[u,t.thinking]),e.jsxs("div",{className:"space-y-3 animate-in",children:[l&&e.jsx(Ge,{plan:t.plan,phase:t.phase,t:n,className:"mb-1 max-w-[760px]"}),v.length>0&&e.jsx(ye,{open:a,onToggle:()=>d(b=>!b),dot:{color:"bg-cyan-400/60",pulse:!0},label:n("hub.activity"),preview:e.jsx("span",{className:"text-[12px] text-fg-4 truncate",children:k}),badge:v.length>1?e.jsx(Ke,{children:v.length}):void 0,children:e.jsx("div",{ref:o,className:"px-3.5 py-2.5 space-y-0.5 max-h-[240px] overflow-y-auto",children:v.map((b,w)=>e.jsxs("div",{className:"flex items-center gap-1.5 py-[2px]",children:[e.jsx("span",{className:"w-1 h-1 rounded-full shrink-0 bg-fg-5/30"}),e.jsx("span",{className:"text-[11px] font-mono text-fg-5/60 truncate",children:b})]},w))})}),t.thinking&&e.jsx(ye,{open:u,onToggle:()=>c(b=>!b),dot:{color:"bg-violet-400/50",pulse:!0},label:n("hub.thinking"),collapsedContent:e.jsx("div",{className:"px-3.5 pb-2.5 -mt-0.5 text-[12px] text-fg-4 leading-[1.65] whitespace-pre-wrap break-words line-clamp-3",children:Xe(t.thinking,3)}),children:e.jsx("div",{ref:j,className:"px-3.5 py-3 text-[12px] text-fg-4 leading-[1.7] whitespace-pre-wrap break-words max-h-[280px] overflow-y-auto",children:t.thinking})}),t.text&&e.jsxs("div",{className:"session-md text-[13.5px] leading-[1.75] text-fg-2",children:[e.jsx(ke,{remarkPlugins:[Ne],components:Se,children:t.text}),t.phase==="streaming"&&e.jsx("span",{className:"inline-block w-[2px] h-[16px] bg-fg-3 animate-pulse ml-0.5 align-text-bottom"})]}),!l&&!g&&e.jsxs("div",{className:"flex items-center gap-2.5 py-1",children:[e.jsx(ve,{className:"h-3.5 w-3.5 text-fg-5"}),e.jsx("span",{className:"text-[12px] text-fg-5",children:n("status.running")})]})]})}const Bt=r.memo(function({session:n,workdir:l,onStreamQueued:a,onSendStart:d,onSessionChange:u,t:c,streamPhase:o,streamTaskId:j,onRecall:g,onSteer:v,editDraft:k,onEditDraftConsumed:b}){const[w,E]=r.useState(""),[T,P]=r.useState(!1),[O,A]=r.useState(null),[L,J]=r.useState([]),[$,fe]=r.useState(n.agent||""),[V,Y]=r.useState(n.model||""),[S,te]=r.useState(""),[N,Z]=r.useState([]),[pe,G]=r.useState(null),[W,R]=r.useState(null),[D,H]=r.useState(null),[U,q]=r.useState(null),[y,C]=r.useState("closed"),[_,ne]=r.useState(null),K=r.useRef(null),B=r.useRef(null),ee=r.useRef(null),X=r.useRef(null),xe=r.useRef([]),ge=Ve(s=>s.reload),se=r.useCallback(()=>{Q.getAgentStatus().then(s=>J(s.agents||[])).catch(()=>{})},[]);r.useEffect(()=>{se()},[se]),r.useEffect(()=>{xe.current=N},[N]),r.useEffect(()=>()=>$e(xe.current),[]),r.useEffect(()=>{if(!L.length)return;const s=$||n.agent||L.find(f=>f.isDefault)?.agent||L.find(f=>f.installed)?.agent||L[0]?.agent||"",p=L.find(f=>f.agent===s)||null;if(s&&!$&&fe(s),!V){const f=s===n.agent?n.model||p?.selectedModel||"":p?.selectedModel||"";f&&Y(f)}if(!S&&s&&s!=="gemini"){const f=p?.selectedEffort||"";f&&te(f)}},[L,$,S,V,n.agent,n.model]),r.useEffect(()=>{k!=null&&(E(k),b?.(),requestAnimationFrame(()=>{const s=K.current;s&&(s.focus(),s.setSelectionRange(k.length,k.length))}))},[k,b]),r.useEffect(()=>{if(y==="closed")return;const s=p=>{const f=p.target;X.current?.contains(f)||document.getElementById("cascade-portal")?.contains(f)||(C("closed"),R(null),H(null),q(null))};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[y]),r.useLayoutEffect(()=>{if(y==="closed"||!X.current){ne(null);return}const s=X.current.getBoundingClientRect();ne({left:s.left,bottom:window.innerHeight-s.top+8})},[y]),r.useEffect(()=>{O&&o!=="queued"&&o!==null&&A(null)},[o,O]),r.useEffect(()=>{const s=K.current;s&&(s.style.height="auto",s.style.height=Math.min(s.scrollHeight,200)+"px")},[w]);const re=r.useCallback(s=>{const p=Array.from(s||[]).filter(f=>f.type.startsWith("image/"));p.length&&Z(f=>[...f,...p.map(ht)])},[]),le=r.useCallback(()=>{G(null),Z(s=>($e(s),[]))},[]),i=r.useCallback(s=>{Z(p=>{const f=p.find(M=>M.id===s);return f&&URL.revokeObjectURL(f.previewUrl),p.filter(M=>M.id!==s)}),G(p=>p===s?null:p)},[]),x=r.useCallback(()=>{const s=w.trim(),p=N.map(F=>F.file);if(!s&&p.length===0||T)return;const f=$||n.agent||"";if(!f)return;const M=V.trim()||null,ce=f==="gemini"?null:S.trim()||null,st=f===n.agent?n.sessionId:"";P(!0),E("");const rt=p.length?p.map(F=>URL.createObjectURL(F)):void 0;le(),d(s,rt),a(),Q.sendSessionMessage(l,f,st,s,{attachments:p,model:M,effort:ce}).then(F=>{if(F.taskId&&A(F.taskId),!F.ok)return;const de=typeof F.sessionKey=="string"?jt(F.sessionKey):null;de&&(de.agent!==n.agent||de.sessionId!==n.sessionId)&&de&&u?.({...de,workdir:l})}).catch(()=>{}).finally(()=>P(!1))},[le,N,w,d,u,a,$,S,V,T,n.agent,n.sessionId,l]),m=j||O,I=r.useCallback(()=>{const s=j||O;s&&(g?.(s),A(null))},[j,O,g]),oe=r.useCallback(()=>{const s=j||O;s&&(v?.(s),A(null))},[j,O,v]),he=s=>{s.key==="Enter"&&!s.shiftKey&&(s.preventDefault(),x())},Ce=r.useCallback(s=>{const p=Array.from(s.clipboardData?.items||[]).filter(f=>f.kind==="file"&&f.type.startsWith("image/")).map(f=>f.getAsFile()).filter(f=>!!f);p.length&&(s.preventDefault(),re(p))},[re]),h=$||n.agent||L.find(s=>s.isDefault)?.agent||"",ae=L.find(s=>s.agent===h)||null,ie=W||h,Pe=(L.find(s=>s.agent===ie)||ae)?.models||[],be=V||h===n.agent&&n.model||""||ae?.selectedModel||"",Ae=h==="gemini"?"":S||ae?.selectedEffort||"",Ye=We[ie]||[],Ze=pe&&N.find(s=>s.id===pe)||null,He=(!!w.trim()||N.length>0)&&!T&&!!h,Te=()=>{R(null),H(null),q(null)},Ue=r.useCallback(async(s,p,f)=>{const M={defaultAgent:s};p&&(M.agent=s,M.model=p),f&&s!=="gemini"&&(M.agent=s,M.effort=f);try{const ce=await Q.updateRuntimeAgent(M);ce.ok&&ce.agents&&J(ce.agents),await ge()}catch{}},[ge]),_e=r.useCallback((s,p,f)=>{fe(s),Y(p),te(s==="gemini"?"":f||""),Te(),C("closed"),Ue(s,p,f)},[Ue]),et=()=>{y==="closed"?(Te(),se(),C("agent")):(Te(),C("closed"))},ze=W||h,tt=Ee(ze),je=D??be,Le=U??Ae,nt=[tt.label,je?je.length>18?je.slice(0,18)+"…":je:null,Le?Le.charAt(0).toUpperCase()+Le.slice(1):null].filter(Boolean).join(" / ");return e.jsxs("div",{className:"shrink-0",ref:ee,children:[(o==="queued"||!!O&&!o)&&e.jsxs("div",{className:"flex items-center gap-2 px-5 py-2 border-t border-edge/40 bg-warn/[0.04]",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-warn animate-pulse"}),e.jsx("span",{className:"text-[11px] text-warn font-medium",children:c("hub.queued")}),e.jsxs("div",{className:"ml-auto flex gap-1",children:[e.jsx("button",{onClick:I,disabled:!m,className:"px-2.5 py-1 rounded-md text-[11px] font-medium text-fg-4 hover:text-err hover:bg-err/10 transition-colors disabled:opacity-30 disabled:pointer-events-none",children:c("hub.recall")}),e.jsx("button",{onClick:oe,disabled:!m,className:"px-2.5 py-1 rounded-md text-[11px] font-medium text-fg-4 hover:text-blue-400 hover:bg-blue-400/10 transition-colors disabled:opacity-30 disabled:pointer-events-none",children:c("hub.steer")})]})]}),e.jsx("div",{className:"max-w-[680px] mx-auto px-5 pb-4 pt-2",children:e.jsxs("div",{className:"relative rounded-xl border border-edge/40 bg-panel shadow-sm transition-[border-color,box-shadow] duration-200 focus-within:border-fg-5/40 focus-within:shadow-md",children:[e.jsx("input",{ref:B,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:s=>{re(s.target.files),s.target.value=""}}),N.length>0&&e.jsx("div",{className:"px-3 pt-3",children:e.jsx("div",{className:"flex gap-2 overflow-x-auto pb-1",children:N.map(s=>e.jsxs("div",{className:"relative shrink-0",children:[e.jsxs("button",{type:"button",onClick:()=>G(s.id),title:c("hub.previewImage"),className:"group relative h-[72px] w-[72px] overflow-hidden rounded-lg border border-edge/30 bg-panel-alt/30",children:[e.jsx("img",{src:s.previewUrl,alt:s.file.name,className:"h-full w-full object-cover transition-transform duration-200 group-hover:scale-[1.03]"}),e.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/60 via-black/10 to-transparent px-1.5 pb-1 pt-3 text-left",children:e.jsx("div",{className:"truncate text-[8px] font-medium text-white/90 leading-tight",children:s.file.name})})]}),e.jsx("button",{type:"button",onClick:p=>{p.stopPropagation(),i(s.id)},title:c("hub.removeImage"),className:"absolute -right-1 -top-1 flex h-5 w-5 items-center justify-center rounded-full border border-white/10 bg-black/65 text-white/75 transition-colors hover:bg-black/80 hover:text-white",children:e.jsxs("svg",{width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})})]},s.id))})}),e.jsx("textarea",{ref:K,value:w,onChange:s=>E(s.target.value),onPaste:Ce,onKeyDown:he,placeholder:c("hub.inputPlaceholder"),rows:1,className:"w-full resize-none bg-transparent px-4 pt-3 pb-1 text-[13.5px] text-fg outline-none placeholder:text-fg-5/25 leading-[1.6]",style:{maxHeight:200,overflow:w.split(`
|
|
14
|
+
`).length>6?"auto":"hidden"}}),e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 pb-2 pt-1",children:[e.jsx("button",{type:"button",onClick:()=>B.current?.click(),title:c("hub.addImages"),className:"flex h-7 w-7 items-center justify-center rounded-lg text-fg-5/50 transition-colors hover:bg-panel-h/60 hover:text-fg-3",children:e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.1",strokeLinecap:"round",children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"M5 12h14"})]})}),e.jsxs("button",{ref:X,onClick:et,className:z("flex items-center gap-1.5 h-[28px] px-2.5 rounded-lg text-[11px] font-medium transition-all duration-200 select-none",y!=="closed"?"bg-panel-h border border-edge-h text-fg-3":"text-fg-5/60 hover:text-fg-4 hover:bg-panel-h/50 border border-transparent"),children:[e.jsx(we,{brand:ze,size:12}),e.jsx("span",{className:"max-w-[200px] truncate",children:nt}),e.jsx("svg",{width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:z("text-fg-5/30 transition-transform duration-200",y!=="closed"&&"rotate-180"),children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),y!=="closed"&&_&&Re.createPortal(e.jsxs("div",{id:"cascade-portal",className:"fixed z-[200] w-[220px] rounded-xl border border-edge/40 bg-[var(--th-dropdown)] backdrop-blur-xl shadow-lg overflow-hidden animate-in",style:{left:_.left,bottom:_.bottom},children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 pt-2.5 pb-1.5 border-b border-edge/20",children:[y!=="agent"&&e.jsx("button",{onClick:()=>C(y==="effort"?"model":"agent"),className:"p-0.5 rounded text-fg-5/50 hover:text-fg-3 transition-colors",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:e.jsx("polyline",{points:"15 18 9 12 15 6"})})}),e.jsx("span",{className:"text-[10px] font-semibold text-fg-5 uppercase tracking-wider",children:c(y==="agent"?"hub.selectAgent":y==="model"?"hub.selectModel":"hub.selectEffort")}),e.jsx("div",{className:"ml-auto flex items-center gap-0.5",children:["agent","model","effort"].map((s,p)=>e.jsx("span",{className:z("w-1.5 h-1.5 rounded-full transition-colors",y===s?"bg-primary":p<["agent","model","effort"].indexOf(y)?"bg-primary/40":"bg-fg-5/15")},s))})]}),e.jsxs("div",{className:"max-h-[200px] overflow-y-auto py-1",children:[y==="agent"&&L.filter(s=>s.installed).map(s=>{const p=Ee(s.agent);return e.jsxs(Ie,{selected:s.agent===(W||h),onClick:()=>{R(s.agent),H(s.selectedModel||""),q(s.selectedEffort||""),C("model")},children:[e.jsx(we,{brand:s.agent,size:14}),e.jsx("span",{style:{color:p.color},children:p.label})]},s.agent)}),y==="model"&&e.jsxs(e.Fragment,{children:[Pe.map(s=>e.jsx(Ie,{selected:s.id===(D??be)||s.alias===(D??be),onClick:()=>{const p=W||h;if(H(s.id),We[p]?.length){C("effort");return}_e(p,s.id,null)},children:e.jsx("span",{className:"font-mono text-[11px]",children:s.alias||s.id})},s.id)),Pe.length===0&&e.jsx("div",{className:"px-3 py-3 text-[11px] text-fg-5 text-center",children:c("config.noModel")})]}),y==="effort"&&Ye.map(s=>e.jsx(Ie,{selected:s===(U||Ae),onClick:()=>{q(s),_e(W||h,D??be,s)},children:s.charAt(0).toUpperCase()+s.slice(1)},s))]})]}),document.body),e.jsx("div",{className:"flex-1"}),e.jsx("button",{onClick:x,disabled:!He,className:z("flex items-center justify-center w-[30px] h-[30px] rounded-lg transition-all duration-200",He?"bg-primary text-primary-fg hover:brightness-110 shadow-sm":"bg-fg/6 text-fg-5/20"),children:T?e.jsx(ve,{className:"h-3.5 w-3.5"}):e.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"5"}),e.jsx("polyline",{points:"5 12 12 5 19 12"})]})})]})]})}),e.jsx(It,{attachment:Ze,onClose:()=>G(null),onRemove:i,t:c})]})});function It({attachment:t,onClose:n,onRemove:l,t:a}){const[d,u]=r.useState(!1);return r.useEffect(()=>{u(!1)},[t?.id]),r.useEffect(()=>{if(!t)return;const c=o=>{o.key==="Escape"&&n()};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[t,n]),t?Re.createPortal(e.jsx("div",{className:"fixed inset-0 z-[220] flex items-center justify-center bg-black/72 px-4 py-6 backdrop-blur-sm",onClick:n,children:e.jsxs("div",{className:"w-full max-w-[1024px]",onClick:c=>c.stopPropagation(),children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2 text-[11px] text-white/72",children:[e.jsx("span",{className:"truncate font-medium text-white/90",children:t.file.name}),e.jsx("span",{children:mt(t.file.size)}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[e.jsx("button",{type:"button",onClick:async()=>{await bt(t.file)&&(u(!0),window.setTimeout(()=>u(!1),1600))},className:"rounded-lg border border-white/12 bg-white/10 px-3 py-1.5 text-[11px] font-medium text-white/88 transition-colors hover:bg-white/14",children:a(d?"hub.copied":"hub.copyImage")}),e.jsx("button",{type:"button",onClick:()=>l(t.id),className:"rounded-lg border border-white/12 bg-white/10 px-3 py-1.5 text-[11px] font-medium text-white/88 transition-colors hover:bg-white/14",children:a("hub.removeImage")}),e.jsx("button",{type:"button",onClick:n,className:"flex h-9 w-9 items-center justify-center rounded-full border border-white/12 bg-white/10 text-white/88 transition-colors hover:bg-white/14",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})})]})]}),e.jsx("div",{className:"overflow-hidden rounded-[24px] border border-white/10 bg-black/35 shadow-[0_20px_70px_rgba(0,0,0,0.45)]",children:e.jsx("img",{src:t.previewUrl,alt:t.file.name,className:"max-h-[80vh] w-full object-contain"})})]})}),document.body):null}function Ie({selected:t,onClick:n,children:l}){return e.jsxs("button",{onClick:n,className:z("flex items-center gap-2 w-full px-3 py-2 text-[12px] text-left transition-colors",t?"text-fg bg-panel-h font-medium":"text-fg-3 hover:bg-panel-alt/50 hover:text-fg-2"),children:[l,t&&e.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:"ml-auto text-ok",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}),!t&&e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"ml-auto text-fg-5/20",children:e.jsx("polyline",{points:"9 6 15 12 9 18"})})]})}const Me=12,qe=160,Mt=96,Dt=r.memo(function({session:n,workdir:l,active:a=!0,onSessionChange:d}){const u=Ve(i=>i.locale),c=r.useMemo(()=>lt(u),[u]),o=Ee(n.agent||""),j=ot(n),[g,v]=r.useState(null),[k,b]=r.useState(!0),[w,E]=r.useState(!1),[T,P]=r.useState(null),[O,A]=r.useState(!1),[L,J]=r.useState(null),[$,fe]=r.useState(0),[V,Y]=r.useState(null),[S,te]=r.useState(null),[N,Z]=r.useState([]),[pe,G]=r.useState(null),W=r.useRef([]),R=r.useRef(null),D=r.useRef(null),H=r.useRef(!0),U=r.useRef(!1),q=r.useRef(!1),y=r.useRef(!1),C=r.useRef(!1),_=r.useCallback(()=>{te(null),Z(i=>{for(const x of i)URL.revokeObjectURL(x);return[]}),W.current=[]},[]),ne=r.useCallback((i,x)=>{for(const I of W.current)URL.revokeObjectURL(I);te(i||null);const m=x||[];Z(m),W.current=m},[]),K=r.useCallback(async(i,x={})=>{try{const m=await at({workdir:l,agent:n.agent||"",sessionId:n.sessionId,rich:!0,turnOffset:i.turnOffset,turnLimit:i.turnLimit,lastNTurns:i.lastNTurns},{force:x.force});return m.ok?Fe(m):null}catch{return null}},[l,n.agent,n.sessionId]),B=r.useCallback(async({keepOlder:i,force:x=!1})=>{if(q.current)return!1;q.current=!0;try{const m=await K({turnOffset:0,turnLimit:Me},{force:x});return m?(v(I=>!I||!i?m:ft(I,m)),!0):!1}finally{q.current=!1}},[K]),ee=r.useCallback(async()=>{if(!g?.hasOlder||y.current)return;const i=R.current;i&&(D.current={scrollHeight:i.scrollHeight,scrollTop:i.scrollTop}),y.current=!0,E(!0);try{const x=await K({turnOffset:Math.max(0,g.totalTurns-g.startTurn),turnLimit:Me});x?v(m=>m?ut(m,x):x):D.current=null}finally{y.current=!1,E(!1)}},[K,g]),X=r.useCallback(()=>{C.current=!0,fe(i=>i+1)},[]),xe=r.useCallback(async i=>{try{await Q.recallSessionMessage(i),_(),Y(null)}catch{}},[_]),ge=r.useCallback(async i=>{try{await Q.steerSession(i)}catch{}},[]);r.useEffect(()=>{let i=!1;const x=it({workdir:l,agent:n.agent||"",sessionId:n.sessionId,rich:!0,turnOffset:0,turnLimit:Me},{allowStale:!0});return b(!0),v(x?.ok?Fe(x):null),P(null),A(!1),J(null),H.current=!0,U.current=!0,x?.ok&&b(!1),B({keepOlder:!1,force:!!x?.ok}).finally(()=>{i||b(!1)}),()=>{i=!0}},[B,n.agent,n.sessionId,l]),r.useEffect(()=>{a&&B({keepOlder:!0,force:!0})},[a,B]),r.useEffect(()=>{if(!a)return;let i=!0,x=null,m=null;const I=()=>{m&&(clearInterval(m),m=null)},oe=()=>{m||(m=setInterval(()=>{he()},800))},he=async()=>{if(i)try{const Ce=await Q.getSessionStreamState(n.agent||"",n.sessionId);if(!i)return;const h=Ce.state,ae=h?.phase??null,ie=De(j,C.current,ae,x);if(!h){x==="streaming"?(A(!1),H.current&&(U.current=!0),B({keepOlder:!0,force:!0}).then(me=>{me&&(_(),P(null))})):x==="done"&&(_(),P(null)),(x==="queued"||x==="streaming"||x==="done")&&(C.current=!1),Y(null),J(null),x=null,ie?oe():I();return}J(h.phase),Y(h.phase==="queued"&&h.taskId||null),h.phase==="streaming"?(P({phase:"streaming",text:h.text||"",thinking:h.thinking||"",activity:h.activity,plan:h.plan??null}),A(!0),H.current&&(U.current=!0)):h.phase==="queued"?(P(null),A(!1)):h.phase==="done"&&(P(ue(h.plan)||h.text||h.thinking||h.activity?{phase:"done",text:h.text||"",thinking:h.thinking||"",activity:h.activity||"",plan:h.plan??null}:null),A(!1),x!=="done"&&(H.current&&(U.current=!0),B({keepOlder:!0,force:!0}).then(me=>{me&&(_(),P(null))})),C.current=!1),ie?oe():I(),x=h.phase}catch{}};return De(j,C.current,null,null)&&oe(),he(),()=>{i=!1,I()}},[a,j,B,n.agent,n.sessionId,$]),r.useEffect(()=>{if(!a||j!=="running"||O)return;const i=setInterval(()=>{B({keepOlder:!0,force:!0})},3e3);return()=>clearInterval(i)},[a,j,B,O]),r.useLayoutEffect(()=>{const i=D.current,x=R.current;!i||!x||(D.current=null,x.scrollTop=i.scrollTop+(x.scrollHeight-i.scrollHeight))},[g?.turns.length]),r.useLayoutEffect(()=>{if(!U.current)return;const i=R.current;i&&(U.current=!1,i.scrollTop=i.scrollHeight)},[g?.turns.length,T]),r.useLayoutEffect(()=>{if(!S)return;const i=R.current;i&&(i.scrollTop=i.scrollHeight)},[S]),r.useEffect(()=>{if(!g?.hasOlder||k||w)return;const i=R.current;i&&i.scrollHeight<=i.clientHeight+qe&&ee()},[g?.hasOlder,g?.turns.length,ee,k,w]);const se=r.useCallback(()=>{const i=R.current;if(!i)return;const x=i.scrollHeight-i.scrollTop-i.clientHeight;H.current=x<=Mt,i.scrollTop<=qe&&ee()},[ee]),re=n.title||n.lastQuestion?.slice(0,80)||n.sessionId.slice(0,16),le=g?.turns||[];return e.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[e.jsxs("div",{className:"shrink-0 flex items-center gap-2.5 px-5 h-10 border-b border-edge/50 bg-panel/40 backdrop-blur-md z-10",children:[e.jsx(we,{brand:n.agent||"",size:14}),e.jsx("span",{className:"flex-1 min-w-0 text-[13px] font-medium text-fg truncate",children:re}),n.model&&e.jsx("span",{className:"text-[10px] font-mono text-fg-5 px-1.5 py-0.5 rounded bg-panel-alt/40",children:n.model}),j==="running"&&e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-[5px] w-[5px] rounded-full bg-ok animate-pulse"}),e.jsx("span",{className:"text-[10px] text-ok font-medium",children:c("status.running")})]})]}),e.jsx("div",{ref:R,onScroll:se,className:"flex-1 overflow-y-auto overscroll-contain",children:k?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(ve,{className:"h-5 w-5 text-fg-4"})}):le.length===0&&!S&&!N.length&&!T?e.jsx("div",{className:"py-20 text-center text-[13px] text-fg-5",children:c("hub.noMessages")}):e.jsxs("div",{className:"max-w-[900px] mx-auto px-6 py-6 space-y-0",children:[(g?.hasOlder||w)&&e.jsxs("div",{className:"mb-4 flex items-center justify-center gap-2 text-[11px] text-fg-5",children:[w?e.jsx(ve,{className:"h-3 w-3 text-fg-5"}):e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-fg-5/35"}),e.jsx("span",{children:c(w?"hub.loadingOlderTurns":"hub.loadOlderTurnsHint")})]}),le.map((i,x)=>e.jsx(Tt,{turn:i,agent:n.agent||"",meta:o,t:c,onResend:m=>{U.current=!0,ne(m),Q.sendSessionMessage(l,n.agent||"",n.sessionId,m).then(I=>{I.ok&&X()}).catch(()=>{_()})},onEdit:m=>G(m)},`${g?.startTurn||0}:${x}`)),(S||N.length>0)&&e.jsxs("div",{className:"session-turn",children:[e.jsx(Je,{text:S||"",blocks:N.map(i=>({type:"image",content:i})),t:c}),!T&&e.jsxs("div",{className:"flex items-center gap-1.5 justify-end mt-1 mb-5 mr-1",children:[e.jsxs("span",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"absolute h-full w-full rounded-full bg-fg-4/30 animate-ping"}),e.jsx("span",{className:"relative h-2 w-2 rounded-full bg-fg-4/50"})]}),e.jsx("span",{className:"text-[11px] text-fg-5",children:c("hub.sending")})]})]}),T&&e.jsxs("div",{className:"mb-6",children:[!S&&!N.length&&e.jsx(Oe,{agent:n.agent||"",meta:o}),(S||N.length>0)&&e.jsx(Oe,{agent:n.agent||"",meta:o}),e.jsx(Lt,{stream:T,t:c})]}),e.jsx("div",{className:"h-4"})]})}),e.jsx(Bt,{session:n,workdir:l,onStreamQueued:X,onSendStart:ne,onSessionChange:d,t:c,streamPhase:L,streamTaskId:V,onRecall:xe,onSteer:ge,editDraft:pe,onEditDraftConsumed:()=>G(null)})]})});export{Dt as SessionPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as s,r as j}from"./react-vendor-
|
|
1
|
+
import{j as s,r as j}from"./react-vendor-DTcmqLiz.js";import{l as f,c as d,m as b,u as g,b as w,B as k}from"./index-DsA79CzD.js";import{S as u}from"./shared-B2_ptDBU.js";import"./router-emLofBBH.js";function h(e){switch(e){case"ok":return"text-emerald-200";case"warn":return"text-amber-200";case"err":return"text-red-200";default:return"text-fg-2"}}function P(e){return e>=85?"bg-red-500 shadow-[0_0_8px_var(--th-err-glow)]":e>=65?"bg-amber-500 shadow-[0_0_8px_var(--th-warn-glow)]":"bg-primary shadow-[0_0_8px_var(--th-glow-a)]"}function m(e){return Number.isFinite(e??NaN)?Math.max(0,Math.min(100,Number(e))):null}function y(e){return Number.isFinite(e??NaN)?Number(e).toFixed(2):null}function $(e){return e?[e.hostName||"—",e.platform,e.arch].filter(Boolean).join(" · "):""}function S(e,t){if(!e)return[];const a=e.totalMem||0,i=e.memoryUsed||a-(e.freeMem||0),r=m(e.memoryPercent||(a>0?i/a*100:0)),n=m(e.cpuUsage?.usedPercent),l=e.loadAverage||null,o=y(l?.one),v=y(l?.five),N=y(l?.fifteen),x=m(l?l.one/Math.max(e.cpuCount||1,1)*100:null),p=[{key:"cpu",label:t("sessions.cpu"),value:n!=null?`${n.toFixed(0)}%`:`${e.cpuCount} cores`,detail:[`${e.cpuCount} cores`,e.cpuModel||""].filter(Boolean),tone:n!=null&&n>=85?"warn":"ok",progressPercent:n},...o&&v&&N?[{key:"cpu-load",label:t("system.cpuLoad"),value:`1m ${o}`,detail:[`5m ${v}`,`15m ${N}`],tone:x!=null&&x>=85?"warn":"muted",progressPercent:x}]:[],{key:"memory",label:t("sessions.memory"),value:`${b(i)} / ${b(a)}`,detail:r!=null?`${r.toFixed(0)}%`:void 0,tone:r!=null&&r>=85?"warn":"ok",progressPercent:r}];if(e.disk){const c=m(parseFloat(String(e.disk.percent).replace("%","")));p.push({key:"disk",label:t("sessions.disk"),value:`${e.disk.used} / ${e.disk.total}`,detail:e.disk.percent,tone:c!=null&&c>=85?"warn":"muted",progressPercent:c})}else if(e.battery){const c=m(parseFloat(String(e.battery.percent).replace("%","")));p.push({key:"battery",label:t("sessions.battery"),value:e.battery.percent,detail:e.battery.state,tone:c!=null&&c<=20?"warn":"muted",progressPercent:c})}return p}function F({items:e,loading:t,compact:a,className:i}){if(t){const r=a?2:4;return s.jsx("div",{className:d("grid gap-3 sm:grid-cols-2 xl:grid-cols-3",i),children:Array.from({length:r},(n,l)=>s.jsxs(u,{className:"space-y-3 !p-4",children:[s.jsx(f,{className:"h-3 w-14"}),s.jsx(f,{className:"h-5 w-24"}),s.jsx(f,{className:"h-2 w-full"})]},l))})}return s.jsx("div",{className:d("grid gap-3 sm:grid-cols-2 xl:grid-cols-3",i),children:e.map(r=>s.jsxs(u,{className:d("space-y-2.5 !p-4",a&&"!p-3.5"),children:[s.jsx("div",{className:"text-[10px] uppercase tracking-[0.14em] text-fg-5",children:r.label}),s.jsx("div",{className:d("text-[13px] font-medium leading-snug",h(r.tone),r.mono&&"font-mono text-[12px]"),children:r.value}),Array.isArray(r.detail)?s.jsx("div",{className:"space-y-1 text-[10px] leading-relaxed text-fg-5",children:r.detail.map(n=>s.jsx("div",{children:n},n))}):r.detail?s.jsx("div",{className:"text-[10px] leading-relaxed text-fg-5",children:r.detail}):null,r.progressPercent!=null&&s.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-panel",children:s.jsx("div",{className:d("h-1 rounded-full transition-all duration-500",P(r.progressPercent)),style:{width:`${r.progressPercent.toFixed(0)}%`}})})]},r.key))})}function B({onOpenWorkdir:e}){const t=g(o=>o.state),a=g(o=>o.host),i=g(o=>o.locale),r=j.useMemo(()=>w(i),[i]),n=t?.bot?.workdir||t?.runtimeWorkdir||t?.config.workdir||"",l=$(a);return s.jsxs("div",{className:"animate-in space-y-3",children:[s.jsx(u,{className:"space-y-3",children:s.jsxs("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:r("config.workdir")}),s.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:r("config.workspaceHint")}),s.jsx("div",{className:"mt-2.5 break-words font-mono text-[12px] leading-relaxed text-fg-2",children:n||r("sidebar.notSet")})]}),s.jsx(k,{variant:"outline",size:"sm",onClick:e,children:r("sidebar.switchDir")})]})}),s.jsxs(u,{className:"space-y-3",children:[s.jsxs("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:r("app.systemInfo")}),s.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:l||r("status.loading")})]}),s.jsxs("div",{className:"text-[12px] leading-relaxed text-fg-5",children:[t?.version?`Pikiclaw v${t.version}`:"Pikiclaw",t?.nodeVersion?` · Node ${t.nodeVersion}`:""]})]}),s.jsx(F,{items:S(a,r),loading:!a})]})]})}export{B as SystemTab};
|