From bdcb5c6c149be90c980b4e89491f4e62bb62f365 Mon Sep 17 00:00:00 2001 From: baiyanyun Date: Sun, 7 Jun 2026 02:05:12 +0800 Subject: [PATCH] feat(client): show digital sync credential gaps --- .../src/lib/qimingclawAdapter.ts | 1 + .../src/pages/digital/CommandDeck.tsx | 6 ++++++ .../{index-BKHFgVhX.js => index-gtzF6MAO.js} | 2 +- .../public/sgrobot-digital/index.html | 2 +- .../services/digitalEmployee/syncService.ts | 17 ++++++++++++++++- ...igital-employee-frontend-integration-plan.md | 2 +- 6 files changed, 26 insertions(+), 4 deletions(-) rename qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/{index-BKHFgVhX.js => index-gtzF6MAO.js} (93%) diff --git a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts index 7bf33653..2c7616e6 100644 --- a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts +++ b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts @@ -57,6 +57,7 @@ interface QimingclawSyncStatus { syncing: boolean; enabled: boolean; endpoint: string | null; + missingCredentials?: string[]; pending: number; failed: number; lastSyncAt: string | null; diff --git a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/pages/digital/CommandDeck.tsx b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/pages/digital/CommandDeck.tsx index a8a13cd8..b93c75ab 100644 --- a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/pages/digital/CommandDeck.tsx +++ b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/pages/digital/CommandDeck.tsx @@ -57,6 +57,7 @@ interface ManagementSyncStatus { syncing: boolean; enabled: boolean; endpoint: string | null; + missingCredentials?: string[]; pending: number; failed: number; lastSyncAt: string | null; @@ -448,6 +449,7 @@ function summarizeSyncError(value?: string | null): string { function syncStatusTone(status: ManagementSyncStatus | null): 'info' | 'success' | 'warning' | 'danger' { if (!status) return 'info'; if (!status.enabled || !status.endpoint) return 'warning'; + if ((status.missingCredentials?.length ?? 0) > 0) return 'warning'; if (status.failed > 0 || status.lastSyncError) return 'danger'; if (status.syncing || status.pending > 0) return 'warning'; return status.lastSyncAt ? 'success' : 'info'; @@ -457,6 +459,7 @@ function syncStatusLabel(status: ManagementSyncStatus | null): string { if (!status) return '未连接'; if (!status.enabled) return '已停用'; if (!status.endpoint) return '未配置'; + if ((status.missingCredentials?.length ?? 0) > 0) return '缺少凭据'; if (status.syncing) return '同步中'; if (status.failed > 0 || status.lastSyncError) return '同步异常'; if (status.pending > 0) return '待同步'; @@ -467,6 +470,9 @@ function syncStatusSummary(status: ManagementSyncStatus | null): string { if (!status) return '当前环境未连接 qimingclaw 同步桥。'; if (!status.enabled) return '管理端同步已停用。'; if (!status.endpoint) return '管理端同步地址未配置。'; + if ((status.missingCredentials?.length ?? 0) > 0) { + return `管理端同步凭据未完整:${status.missingCredentials?.join('、')}`; + } const error = summarizeSyncError(status.lastSyncError); if (status.failed > 0 || error) { const retrySummary = status.failureSummary diff --git a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-BKHFgVhX.js b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-gtzF6MAO.js similarity index 93% rename from qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-BKHFgVhX.js rename to qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-gtzF6MAO.js index 1b79f06d..383f52a6 100644 --- a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-BKHFgVhX.js +++ b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-gtzF6MAO.js @@ -117,5 +117,5 @@ Please change the parent to {u(m);try{localStorage.setItem(ng,m)}catch{}},[]),f=Fr[s];return r.jsx(ag.Provider,{value:{role:s,profile:f,setRole:o},children:r.jsx("div",{style:f.cssVars,"data-role":s,children:l})})}function z_(){const l=v.useContext(ag);if(!l)throw new Error("useRole must be used within RoleProvider");return l}function Eo({className:l=""}){return r.jsx("div",{className:`de-gem ${l}`,"aria-hidden":"true"})}function M_(){return r.jsxs("div",{className:"de-stage","aria-hidden":"true",children:[r.jsx("div",{className:"de-stage-glow"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-1"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-2"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-3"})]})}function R_({avatarSrc:l,altText:s="数字员工",statusLabel:u}){return r.jsxs("div",{className:"de-avatar-container","aria-hidden":"true",children:[r.jsxs("div",{className:"de-avatar-glass-space",children:[r.jsxs("div",{className:"de-avatar-roof",children:[r.jsx("div",{className:"de-avatar-roof-face"}),r.jsx("div",{className:"de-avatar-roof-glow"})]}),r.jsx("div",{className:"de-avatar-glass-left"}),r.jsx("div",{className:"de-avatar-glass-right"}),r.jsx(Eo,{className:"de-gem-1"}),r.jsx(Eo,{className:"de-gem-2"}),r.jsx(Eo,{className:"de-gem-3"})]}),u&&r.jsx("div",{className:"de-avatar-state-label",children:u}),r.jsx("img",{src:l,alt:s,className:"de-avatar-img"}),r.jsx(M_,{})]})}const O_=".",lg=(()=>{var s;return((s=window.__QIMINGCLAW_DIGITAL_API_BASE__)==null?void 0:s.replace(/\/+$/,""))??""})(),ig=()=>"",sg="zeroclaw_token";function L_(){try{return localStorage.getItem(sg)}catch{return null}}function U_(){try{localStorage.removeItem(sg)}catch{}}const rg="qimingclaw:digital-employee-adapter-state",H_="18:00",B_=[{skill_id:"qimingclaw-acp-session",name:"ACP 会话执行",version:"1.0.0",enabled:!0,description:"通过 qimingclaw 的 ACP 引擎创建会话、执行任务并跟踪结果。",category:"执行",capability_level:"core"},{skill_id:"qimingclaw-mcp-tools",name:"MCP 工具编排",version:"1.0.0",enabled:!0,description:"读取已配置 MCP 服务与工具,作为数字员工的工具能力池。",category:"工具",capability_level:"core"},{skill_id:"qimingclaw-computer-control",name:"客户端电脑控制",version:"1.0.0",enabled:!0,description:"承接 /computer/chat 执行入口,面向远程任务和本地自动化操作。",category:"桌面",capability_level:"specialized"},{skill_id:"qimingclaw-artifact-report",name:"产物与日报整理",version:"1.0.0",enabled:!0,description:"把执行记录、关键产物和异常汇总成数字员工日报。",category:"汇报",capability_level:"standard"}],Rn=[{plan_id:"qimingclaw-client-readiness",title:"客户端运行状态巡检",objective:"确认 qimingclaw 客户端、Agent、MCP 和远程接入能力是否处于可执行状态。",status:"running",created_at:en(9,0),steps:[{step_id:"agent-status",title:"检查 Agent 引擎状态",depends_on:[],preferred_skills:["qimingclaw-acp-session"],tasks:[{task_id:"task-agent-status",title:"读取 Agent 服务状态",status:"running"}]},{step_id:"mcp-status",title:"检查 MCP 工具能力",depends_on:["agent-status"],preferred_skills:["qimingclaw-mcp-tools"],tasks:[{task_id:"task-mcp-status",title:"同步 MCP 工具列表",status:"pending"}]}]},{plan_id:"qimingclaw-remote-task-ingress",title:"远程任务接入准备",objective:"检查 lanproxy、computer server 和文件服务,为后端下发数字员工任务做准备。",status:"pending",created_at:en(9,30),steps:[{step_id:"computer-server",title:"确认 /computer/chat 执行入口",depends_on:[],preferred_skills:["qimingclaw-computer-control"],tasks:[{task_id:"task-computer-server",title:"检查电脑控制服务",status:"pending"}]},{step_id:"file-artifact",title:"准备产物回传目录",depends_on:["computer-server"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-file-artifact",title:"整理执行产物通道",status:"pending"}]}]},{plan_id:"qimingclaw-daily-report",title:"数字员工日报生成",objective:"汇总今日执行记录、服务状态和待介入事项,生成面向业务的日报。",status:"pending",created_at:en(17,30),steps:[{step_id:"collect-events",title:"汇总运行事件",depends_on:[],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-collect-events",title:"整理今日运行明细",status:"pending"}]},{step_id:"write-report",title:"生成日报摘要",depends_on:["collect-events"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-write-report",title:"生成数字员工日报",status:"pending"}]}]}],Wr={"qimingclaw-client-readiness":{expression:"0 9 * * *",nextRun:en(9,0),scheduleText:"已定时 09:00 执行"},"qimingclaw-remote-task-ingress":{expression:"30 9 * * *",nextRun:en(9,30),scheduleText:"已定时 09:30 执行"},"qimingclaw-daily-report":{expression:"0 18 * * *",nextRun:en(18,0),scheduleText:"已定时 18:00 执行"}};function q_(){return window.__QIMINGCLAW_EMBEDDED_DIGITAL__===!0}async function $_(l,s={}){if(!q_())return;const u=new URL(l,window.location.origin),o=(s.method||"GET").toUpperCase(),f=u.pathname;if(o==="GET"&&f==="/api/digital-employee/workday")return dg(u.searchParams.get("date")||ld(),await os());if(o==="POST"&&f==="/api/digital-employee/workday/actions")return a0(ip(s.body),await os());if(o==="GET"&&f==="/api/scheduler/jobs")return{jobs:V_()};if(o==="GET"&&f==="/api/debug/plans")return{plans:I_(u.searchParams.get("q"),await os())};if(o==="GET"&&f==="/api/debug/tasks"){const m=u.searchParams.get("plan_id");return W_(m,await os())}if(o==="GET"&&f.startsWith("/api/debug/plan/")&&f.endsWith("/flow"))return n0(decodeURIComponent(f.split("/")[4]||""),await os());if(o==="POST"&&f.startsWith("/api/debug/plan/")&&f.endsWith("/dispatch"))return l0(decodeURIComponent(f.split("/")[4]||""));if(o==="GET"&&f.startsWith("/api/plan/")&&f.endsWith("/messages"))return{messages:i0(decodeURIComponent(f.split("/")[3]||""))};if(o==="GET"&&f==="/api/skill")return{skills:B_};if(o==="POST"&&f.startsWith("/api/skill/")&&f.endsWith("/enabled")){const m=decodeURIComponent(f.split("/")[3]||""),p=ip(s.body);return{ok:!0,skill_id:m,enabled:p.enabled??!0}}}function wo(){return{selectedDutyIdsByDate:{},confirmedDates:{},reportScheduleTime:H_,reportGeneratedAtByDate:{},profile:{name:"飞天数字员工",company:"qimingclaw 客户端",position:"客户端任务执行员",currentStatus:"working"}}}function nd(){try{const l=window.localStorage.getItem(rg);return l?{...wo(),...JSON.parse(l)}:wo()}catch{return wo()}}function cg(l){window.localStorage.setItem(rg,JSON.stringify(l))}async function os(){var l,s,u,o,f,m;try{const p=await((u=(s=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:s.getSnapshot)==null?void 0:u.call(s))??null;if(!p)return null;const j=await((m=(f=(o=window.QimingClawBridge)==null?void 0:o.digital)==null?void 0:f.getSyncStatus)==null?void 0:m.call(f).catch(()=>null))??null;return{...p,sync:j}}catch{return null}}function ip(l){return typeof l!="string"||!l.trim()?{}:JSON.parse(l)}function ld(){const l=new Date;return[l.getFullYear(),String(l.getMonth()+1).padStart(2,"0"),String(l.getDate()).padStart(2,"0")].join("-")}function en(l,s){const u=new Date;return u.setHours(l,s,0,0),u.toISOString()}function No(l){return l.split("-").join("/")}function Y_(l,s){return new Set(l.selectedDutyIdsByDate[s]??[])}function G_(l){return["completed","succeeded","success"].includes(l)?"success":["running","active"].includes(l)?"running":["failed","error"].includes(l)?"danger":"waiting"}function ds(l,s){var u;return((u=l==null?void 0:l.services[s])==null?void 0:u.running)===!0}function fs(l,s){var u;return(u=l==null?void 0:l.services[s])==null?void 0:u.error}function Q_(l,s){return s?l.plan_id==="qimingclaw-client-readiness"?ds(s,"agent")&&ds(s,"mcp")?"running":fs(s,"agent")||fs(s,"mcp")?"failed":"pending":l.plan_id==="qimingclaw-remote-task-ingress"?ds(s,"computerServer")||ds(s,"lanproxy")||ds(s,"fileServer")?"running":fs(s,"computerServer")||fs(s,"lanproxy")||fs(s,"fileServer")?"failed":"pending":l.status:l.status}function Mn(l,s,u){const o=l==null?void 0:l.services[s];if(!o)return`${u}:未连接`;if(o.running){const f=o.port?`(端口 ${o.port})`:"";return`${u}:运行中${f}`}return`${u}:未运行${o.error?`,${o.error}`:""}`}function qo(l){const s=l==null?void 0:l.sync;return s?s.enabled?s.endpoint?s.syncing?`管理端同步:同步中,待同步 ${s.pending} 条`:s.failed>0?`管理端同步:${s.failed} 条失败,待同步 ${s.pending} 条`:s.pending>0?`管理端同步:待同步 ${s.pending} 条`:s.lastSyncAt?`管理端同步:已同步,最近 ${s.lastSyncAt}`:"管理端同步:等待本地数据":"管理端同步:未配置地址":"管理端同步:已停用":"管理端同步:未连接"}function X_(l){return String(l||"").replace(/\s+/g," ").trim()}function K_(l){const s=X_(l.error),u=s.length>120?`${s.slice(0,120)}...`:s,o=l.dueForRetry?"等待补偿":l.nextRetryAt?`下次重试 ${l.nextRetryAt}`:"等待重试";return`${l.entityType}/${l.operation} ${l.id} 重试 ${l.attempts} 次,${o}${u?`,${u}`:""}`}function nc(l,s){return{...l,status:Q_(l,s)}}function Z_(l){return l==="running"?"执行中":l==="completed"||l==="succeeded"?"已完成":l==="failed"?"异常":"待执行"}function V_(){return Rn.map(l=>{var u;const s=Wr[l.plan_id]??Wr["qimingclaw-client-readiness"];return{id:`schedule-${l.plan_id}`,name:l.title,expression:s.expression,command:`digital-employee:${l.plan_id}`,prompt:l.objective??null,job_type:"plan_template",schedule:{expression:s.expression,template_id:l.plan_id},enabled:!0,delivery:{mode:"plan_template",template_id:l.plan_id},template_id:l.plan_id,trigger_kind:"scheduled",step_count:((u=l.steps)==null?void 0:u.length)??0,skill_ids:[...new Set((l.steps??[]).flatMap(o=>o.preferred_skills??[]))],delete_after_run:!1,created_at:l.created_at,next_run:s.nextRun,last_run:l.status==="running"?en(9,5):null,last_status:l.status==="running"?"running":null,last_output:null}})}function J_(l,s,u){const o=Y_(l,s);return Rn.map(f=>{const m=nc(f,u),p=Wr[m.plan_id]??Wr["qimingclaw-client-readiness"];return{id:m.plan_id,title:m.title,summary:m.objective??"等待 qimingclaw 执行链路补充任务说明。",implemented:!0,selectable:!0,selected:o.has(m.plan_id),status:m.status,status_label:Z_(m.status),status_tone:G_(m.status),schedule_text:p.scheduleText,result_text:ug(m,u),conversation_id:m.plan_id}})}function ug(l,s){return l.plan_id==="qimingclaw-client-readiness"?[Mn(s,"agent","Agent"),Mn(s,"mcp","MCP"),`活跃会话:${(s==null?void 0:s.sessions.active)??0}`].join(";"):l.plan_id==="qimingclaw-remote-task-ingress"?[Mn(s,"computerServer","Computer Server"),Mn(s,"lanproxy","Lanproxy"),Mn(s,"fileServer","File Server")].join(";"):l.status==="running"?"正在同步客户端运行状态":"等待任务执行"}function og(l,s=null){return Rn.filter(u=>!l||u.plan_id===l).map(u=>nc(u,s)).flatMap(u=>(u.steps??[]).flatMap(o=>(o.tasks??[]).map(f=>{var m;return{task_id:f.task_id,title:f.title,status:u.status==="running"&&f.status==="pending"?"running":f.status,plan_id:u.plan_id,step_id:o.step_id,assigned_skill_id:((m=o.preferred_skills)==null?void 0:m[0])??"",description:`${u.title} · ${o.title}`,created_at:u.created_at,updated_at:u.status==="running"?new Date().toISOString():u.created_at,started_at:f.status==="running"?en(9,5):null,finished_at:f.status==="completed"?en(9,10):null}})))}function F_(l){return l.filter(s=>s.status==="running"||s.status==="completed").map((s,u)=>({run_id:`qimingclaw-run-${u+1}`,task_id:s.task_id,plan_id:s.plan_id,skill_id:s.assigned_skill_id,attempt_no:1,lifecycle:s.status==="running"?"Running":"Succeeded",created_at:s.started_at??s.created_at,completed_at:s.finished_at,events:[{event_id:`${s.task_id}-event-start`,kind:"RunStarted",occurred_at:s.started_at??s.created_at,message:`${s.title} 已进入 qimingclaw 执行链路`}]}))}function W_(l,s=null){const u=og(l,s);return{tasks:u,runs:F_(u),total:u.length,truncated:!1}}function I_(l,s=null){const u=(l??"").trim().toLowerCase(),o=Rn.map(f=>nc(f,s));return u?o.filter(f=>f.title.toLowerCase().includes(u)||f.plan_id.toLowerCase().includes(u)||(f.objective??"").toLowerCase().includes(u)):o}function P_(l,s,u){if(!s)return[{id:"event-await-confirmation",time:"待确认",plan_title:"任务设置",task_title:"等待确认今日任务",step_title:"选择职责",detail:"请先确认今天要执行的任务,确认后数字员工会开始执行。",status:"pending",status_label:"待确认",status_tone:"waiting",updated_at:new Date().toISOString(),conversation_id:null}];const f=l.filter(p=>p.selected).map(p=>({id:`event-${p.id}`,time:p.status==="running"?"实时":"待执行",plan_title:p.title,task_title:p.title,step_title:p.status==="running"?"同步 qimingclaw 服务状态":"等待调度",detail:p.status==="running"?`${p.result_text}。快照时间:${(u==null?void 0:u.generatedAt)??"未连接 bridge"}`:"任务已确认,将在后续阶段接入 ACP/MCP 真实执行事件。",status:p.status==="running"?"running":"pending",status_label:p.status==="running"?"执行中":"待执行",status_tone:p.status==="running"?"running":"waiting",updated_at:new Date().toISOString(),conversation_id:p.conversation_id})),m=u==null?void 0:u.sync;if(m&&(m.pending>0||m.failed>0||m.lastSyncAt)){const p=(m.recentFailures||[]).slice(0,3).map(K_).join(";");f.push({id:"event-management-sync",time:m.syncing?"实时":"同步",plan_title:"管理端联动",task_title:"同步数字员工本地状态",step_title:m.failed>0?"同步补偿":"outbox 推送",detail:[qo(u),m.lastSyncError?`错误:${m.lastSyncError}`:"",p?`最近失败:${p}`:""].filter(Boolean).join("。"),status:m.failed>0?"failed":m.syncing||m.pending>0?"running":"completed",status_label:m.failed>0?"异常":m.syncing||m.pending>0?"同步中":"已同步",status_tone:m.failed>0?"danger":m.syncing||m.pending>0?"running":"success",updated_at:m.lastSyncAt??new Date().toISOString(),conversation_id:"qimingclaw-management-sync"})}return f}function e0(l,s){return l.filter(u=>u.selected).map(u=>{const o=s.filter(p=>p.conversation_id===u.conversation_id),f=o.filter(p=>p.status==="running").length,m=o.filter(p=>p.status==="completed").length;return{id:u.id,plan_id:u.id,title:u.title,description:u.summary,selected:u.selected,total_count:Math.max(o.length,1),success_count:m,failure_count:0,running_count:f,waiting_count:f>0?0:1,latest_status_label:f>0?"执行中":"待执行",latest_status_tone:f>0?"running":"waiting",business_summary:u.result_text,ai_summary:"当前由 qimingclaw adapter 生成,后续接入真实执行日志。"}})}function t0(l){return l.map(s=>({id:`run-detail-${s.id}`,time:s.time,task_name:s.task_title,step_name:s.step_title,operation_name:s.plan_title,status_label:s.status_label,status_tone:s.status_tone,business_detail:s.detail,raw_detail:s.detail,updated_at:s.updated_at,conversation_id:s.conversation_id}))}function dg(l,s){const u=nd(),o=u.confirmedDates[l]??null,f=!!o,m=J_(u,l,s),p=P_(m,f,s),j=e0(m,p),g=u.reportGeneratedAtByDate[l]??null,y=m.filter(N=>N.selected).length,w=p.filter(N=>N.status==="running").length,_=s==null?void 0:s.sync;return{source:"live",date:l,employee:{name:u.profile.name,title:"数字员工",major:"qimingclaw 客户端任务执行",company:u.profile.company,position:u.profile.position,current_status:u.profile.currentStatus,current_status_label:u.profile.currentStatus==="resting"?"休息中":"工作中",motto:"承接客户端任务,调度 ACP 与 MCP 能力完成执行。"},workday:{confirmed:f,confirmed_at:o,current_status:u.profile.currentStatus,current_status_label:u.profile.currentStatus==="resting"?"休息中":"工作中",status_label:f?"运行中":"待确认",status_tone:f?"running":"waiting",summary:f?`当前日期 ${No(l)} 已确认 ${y} 项任务。`:`当前日期 ${No(l)} 待确认今日任务。`,bubble_text:f?"我已接入 qimingclaw 客户端执行链路,正在等待真实 Run/Event 数据接入。":"请先确认今天要执行的任务,我会把它们映射到 qimingclaw 执行链路。"},overview:{title:"今日执行",status_label:f?"真实数据":"待确认",status_tone:f?"success":"waiting",metrics:[{label:"已选任务",value:String(y)},{label:"运行记录",value:String(p.length)},{label:"执行中",value:String(w)},{label:"待同步",value:String((_==null?void 0:_.pending)??0)},{label:"同步异常",value:String((_==null?void 0:_.failed)??0)}]},duties:m,events:p,execution_summaries:j,run_details:t0(p),decisions:[],delivery:{headline:f?"qimingclaw 执行链路已接入":"等待确认任务设置",summary:"当前阶段已将数字员工页面切换到 qimingclaw adapter,并开始读取客户端服务状态。",lines:["已吸收 sgRobot 数字员工 UI 和核心展示模型。","已建立 qimingclaw workday/plans/tasks/skills API adapter。",Mn(s,"agent","Agent"),Mn(s,"mcp","MCP"),Mn(s,"computerServer","Computer Server"),qo(s),`活跃会话:${(s==null?void 0:s.sessions.active)??0} / ${(s==null?void 0:s.sessions.total)??0}`],artifacts:[{name:"数字员工运行摘要",status:g?"ready":"pending"}]},daily_report:{date:l,title:`${No(l)} 飞天数字员工日报`,report_schedule_time:u.reportScheduleTime,status:g?"ready":"not_generated",generated_at:g,generated_by:g?"ai":"fallback",model:"qimingclaw-adapter",source:"qimingclaw",summary:g?`今日已完成数字员工页面到 qimingclaw adapter 的接入,并读取了 qimingclaw 服务状态。${qo(s)}。`:"日报将在生成后汇总任务选择、运行明细和后续接入建议。",totals:{task_count:y,execution_count:p.length,success_count:0,failure_count:0,running_count:w},task_sections:j,detail_lines:p.map(N=>`${N.time} ${N.task_title}:${N.detail}`),pdf_available:!1,pdf_url:null}}}function a0(l,s){const u=nd(),o=l.date||ld();return l.action==="confirm_workday"&&(u.selectedDutyIdsByDate[o]=l.duty_ids??[],u.confirmedDates[o]=new Date().toISOString()),l.action==="update_profile"&&(u.profile={name:l.name||u.profile.name,company:l.company||u.profile.company,position:l.position||u.profile.position,currentStatus:l.current_status||u.profile.currentStatus}),l.action==="update_report_schedule"&&(u.reportScheduleTime=l.report_schedule_time||u.reportScheduleTime),l.action==="generate_daily_report"&&(l.duty_ids&&(u.selectedDutyIdsByDate[o]=l.duty_ids),l.report_schedule_time&&(u.reportScheduleTime=l.report_schedule_time),u.reportGeneratedAtByDate[o]=new Date().toISOString()),cg(u),dg(o,s)}function n0(l,s=null){const u=nc(Rn.find(f=>f.plan_id===l)??Rn[0],s),o=new Date().toISOString();return{plan_id:u.plan_id,plan_title:u.title,plan_status:u.status,plan_objective:u.objective,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:u.title,sub_label:u.objective,timestamp:u.created_at,color:"#38bdf8",source_type:"plan"},{seq:2,lane:"qimingclaw",label:"接入客户端能力",sub_label:"ACP / MCP / computer server adapter",timestamp:o,color:"#22c55e",source_type:"adapter"},{seq:3,lane:"execution",label:u.status==="running"?"已读取 qimingclaw 服务状态":"等待调度",sub_label:ug(u,s),timestamp:o,color:"#f59e0b",source_type:"run"}],events:[{event_id:`${u.plan_id}-adapter-event`,kind:"qimingclaw_adapter",occurred_at:o,message:"数字员工页面已通过 qimingclaw adapter 获取数据。"}]}}function l0(l){const s=nd(),u=ld(),o=new Set(s.selectedDutyIdsByDate[u]??[]);return o.add(l),s.selectedDutyIdsByDate[u]=[...o],s.confirmedDates[u]=s.confirmedDates[u]??new Date().toISOString(),cg(s),{ok:!0,plan_id:l,source_plan_id:l,dispatched_tasks:og(l).map(f=>({task_id:f.task_id,title:f.title,status:f.status==="pending"?"running":f.status}))}}function i0(l){const s=Rn.find(u=>u.plan_id===l)??Rn[0];return[{role:"user",content:`执行数字员工任务:${s.title}`,created_at:s.created_at},{role:"assistant",content:`已接入 qimingclaw adapter。目标:${s.objective??s.title}`,created_at:new Date().toISOString()}]}const s0=9e3,fg=2e4;class r0 extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function oa(l,s={}){const u=await $_(l,s);if(u!==void 0)return u;const{timeoutMs:o=s0,...f}=s,m=L_(),p=new Headers(f.headers),j=new AbortController;let g=!1;const y=window.setTimeout(()=>{g=!0,j.abort()},o),w=f.signal,_=()=>j.abort();w&&(w.aborted?j.abort():w.addEventListener("abort",_,{once:!0})),m&&p.set("Authorization",`Bearer ${m}`),f.body&&typeof f.body=="string"&&!p.has("Content-Type")&&p.set("Content-Type","application/json");let N;try{N=await fetch(`${ig()}${lg}${l}`,{...f,headers:p,signal:j.signal})}catch(q){throw q instanceof DOMException&&q.name==="AbortError"&&g?new Error(`API request timed out after ${o/1e3}s: ${l}`):q}finally{window.clearTimeout(y),w==null||w.removeEventListener("abort",_)}if(N.status===401)throw U_(),window.dispatchEvent(new Event("zeroclaw-unauthorized")),new r0;if(!N.ok){const q=await N.text().catch(()=>"");let M=q||N.statusText;if(q)try{const $=JSON.parse(q);typeof $.message=="string"&&$.message.trim()?M=$.message.trim():typeof $.error=="string"&&$.error.trim()&&(M=$.error.trim())}catch{M=q}throw new Error(`API ${N.status}: ${M}`)}if(N.status!==204)return N.json()}function c0(l,s){if(l!==null&&typeof l=="object"&&!Array.isArray(l)&&s in l){const u=l[s];if(u!==void 0)return u}return l}function u0(){return oa("/api/scheduler/jobs").then(l=>c0(l,"jobs"))}function sp(l){return oa(`/api/plan/${encodeURIComponent(l)}/messages`).then(s=>({messages:s.messages||[]}))}function mg(l){return oa("/api/governance/command",{method:"POST",body:JSON.stringify(l)})}function Qr(l){const s=l?`?date=${encodeURIComponent(l)}`:"";return oa(`/api/digital-employee/workday${s}`,{timeoutMs:fg})}function ai(l){return oa("/api/digital-employee/workday/actions",{method:"POST",body:JSON.stringify(l)})}function hg(l){return`${ig()}${lg}/api/digital-employee/reports/${encodeURIComponent(l)}/pdf`}function o0(l){return oa(`/api/debug/plan/${encodeURIComponent(l)}/dispatch`,{method:"POST",timeoutMs:fg})}function d0(){return oa("/api/debug/plans?limit=80").then(l=>l.plans??[])}function rp(l,s=50){const u=new URLSearchParams({limit:String(s),q:l});return oa(`/api/debug/plans?${u}`).then(o=>o.plans??[])}function f0(l){const s=new URLSearchParams({limit:"50",plan_id:l});return oa(`/api/debug/tasks?${s}`).then(u=>({tasks:u.tasks??[],runs:u.runs??[],total:u.total,truncated:u.truncated}))}function m0(l){return oa(`/api/debug/plan/${encodeURIComponent(l)}/flow`)}function h0(){return oa("/api/skill").then(l=>l.skills??[])}function p0(l,s){return oa(`/api/skill/${encodeURIComponent(l)}/enabled`,{method:"POST",body:JSON.stringify({enabled:s})})}const g0=O_,y0=`${g0}/digital-assets`,cl=`${y0}/avatars`,v0="Asia/Shanghai",b0=["skill","browser","call","redial","evidence","decision","reporting"],_0=[{id:"all",label:"全部"},{id:"running",label:"执行中"},{id:"success",label:"已完成"},{id:"danger",label:"异常"}],pg="sgrobot:digital-workday-guide-dismissed-date",x0=80,cp=300,S0=[{title:"确认日期",body:"先确认今天的值班日期,避免把昨天或明天的任务混在一起。"},{title:"选择任务",body:"从岗位职责里勾选今天要执行的任务,未接入能力保持待扩展。"},{title:"任务执行",body:"点击任务执行后,数字员工开始按已选任务推进工作。"},{title:"查看过程",body:"右侧滚动显示运行明细,任务中心可继续查看明细。"}],j0={skill:{id:"skill",label:"查看Skill",shortLabel:"技能",phase:"查看Skill与计划",src:`${cl}/states/employee-idle.png`,bubble:"我正在查看可用Skill、任务计划和今天要勾选的执行内容。"},browser:{id:"browser",label:"操作浏览器",shortLabel:"浏览器",phase:"操作浏览器执行",src:`${cl}/states/employee-browser.png`,bubble:"我正在打开页面、读取信息、填写表单,并把执行过程同步到右侧。"},call:{id:"call",label:"电话外呼",shortLabel:"外呼",phase:"电话外呼与重拨",src:`${cl}/states/employee-running.png`,bubble:"我正在按工单名单外呼现场人员,记录接通、未接通和后续重拨。"},redial:{id:"redial",label:"重拨跟进",shortLabel:"重拨",phase:"未接通人员重拨",src:`${cl}/states/employee-redial.png`,bubble:"我正在跟进未接通人员,按间隔重拨并更新每个人的通知状态。"},evidence:{id:"evidence",label:"数据核验",shortLabel:"核验",phase:"核验执行证据",src:`${cl}/states/employee-evidence.png`,bubble:"我正在核验页面数据、执行证据和任务结果,确认交付内容可信。"},decision:{id:"decision",label:"等待决策",shortLabel:"决策",phase:"等待人工确认",src:`${cl}/states/employee-decision.png`,bubble:"我已完成前置处理,现在需要人工确认后再继续推进。"},reporting:{id:"reporting",label:"汇报成果",shortLabel:"汇报",phase:"汇报今日成果",src:`${cl}/states/employee-reporting.png`,bubble:"我正在整理运行明细和日报,方便你直接查看成果和异常。"}};function $o(){const l=new Date;return[l.getFullYear(),String(l.getMonth()+1).padStart(2,"0"),String(l.getDate()).padStart(2,"0")].join("-")}function E0(l){return(l||$o()).split("-").join("/")}function Br(l){return l==="success"?"de-badge-success":l==="danger"?"de-badge-danger":l==="warning"||l==="running"?"de-badge-warning":"de-badge-info"}function w0(l,s){const u=["de-template-card-row","de-duty-card","de-duty-card--compact"];return l.implemented||u.push("de-duty-card--disabled"),s&&u.push("de-duty-card--selected"),l.statusTone==="running"&&u.push("de-duty-card--running"),u.join(" ")}function Ca(l){return String(l||"").replace(/\s+/g," ").trim()}function N0(l){if(!l)return"";if(l.expression)return l.expression;if(typeof l.schedule=="string")return l.schedule;if(l.schedule&&typeof l.schedule=="object"){const s=l.schedule,u=s.expr??s.expression??s.cron;if(typeof u=="string")return u}return""}function T0(l){const s=N0(l);if(!s)return"未定时";const u=s.trim().split(/\s+/),o=u[0]??"",f=u[1]??"";return u.length>=2&&/^\d+$/.test(o)&&/^\d+$/.test(f)?`已定时 ${f.padStart(2,"0")}:${o.padStart(2,"0")} 执行`:`调度注册 ${s}`}function Ir(l,s){if(!l||typeof l!="object")return"";const u=l;for(const o of s){const f=u[o];if(typeof f=="string"&&f.trim())return f.trim()}return""}function ti(l){const s=Ca(l.template_id);if(s)return s;const u=Ir(l.delivery,["template_id","plan_template_id","templateId"]);if(u)return u;const o=Ir(l.schedule,["template_id","plan_template_id","templateId"]);return o||l.id.replace(/^schedule-/,"")}function C0(l,s,u){return l.has(s)||u?!0:Array.from(l).some(o=>ys(o,s))}function ys(l,s){return l.startsWith(`${s}-`)?/^-\d{8,}$/.test(l.slice(s.length)):!1}function k0(l,s,u){if(l.id===s||l.conversation_id===s||ys(l.id,s)||l.conversation_id&&ys(l.conversation_id,s))return!0;const o=Ca(u).toLowerCase();return!!(o&&Ca(l.title).toLowerCase()===o)}function gg(l,s,u){const o=u.filter(f=>k0(f,l,s));return o.find(f=>f.selected)??o.find(f=>f.id===l||f.conversation_id===l)??o[0]??null}function A0(l,s){var u;return((u=gg(l.id,l.title,s))==null?void 0:u.id)??l.id}function D0(l){return typeof l.step_count=="number"&&Number.isFinite(l.step_count)?l.step_count:Array.isArray(l.skill_ids)?l.skill_ids.length:0}function z0(l){const s=Ca(l.trigger_kind||Ir(l.schedule,["kind"])).toLowerCase();return s==="cron"?"定时任务":s==="webhook"?"触发任务":"手动任务"}function M0(l,s,u){const o=ti(l),f=gg(o,l.name,s),m=D0(l),p=Array.isArray(l.skill_ids)?l.skill_ids.length:m,j=(f==null?void 0:f.status)??l.last_status??(l.enabled?"plan_template":"disabled"),g=(f==null?void 0:f.status_label)??(l.enabled?z0(l):"已停用"),y=(f==null?void 0:f.status_tone)??(l.enabled?"info":"waiting");return{id:o,planId:o,title:Ca(l.name)||o,summary:Ca(l.prompt)||`任务:${o}`,implemented:l.enabled,selectable:!0,selected:u,status:j,statusLabel:g,statusTone:y,scheduleText:(f==null?void 0:f.schedule_text)??T0(l),resultText:(f==null?void 0:f.result_text)??`${m} 个步骤,${p} 个Skill`,conversationId:(f==null?void 0:f.conversation_id)??o,stepCount:m,taskCount:p,schedulerJob:l,source:"plan_template"}}function qr(l){return l.implemented}function $r(l){return l.implemented?"":"当前任务未接入执行能力。"}function R0(l,s){const u=`${l.conversation_id??""} ${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`;return u.includes(s.id)||u.includes(s.title)}function O0(l,s){const u=s.filter(g=>R0(g,l)),o=u.filter(ic).length,f=u.filter(sc).length,m=u.filter(lc).length,p=Math.max(u.length-o-f-m,0),j=u.length>0?u[u.length-1]:void 0;return{id:l.id,plan_id:l.planId,title:l.title,description:l.summary,selected:!0,total_count:u.length,success_count:o,failure_count:f,running_count:m,waiting_count:p,latest_status_label:(j==null?void 0:j.status_label)??l.statusLabel,latest_status_tone:(j==null?void 0:j.status_tone)??l.statusTone,business_summary:u.length>0?`${l.title} 今日执行 ${u.length} 次,成功 ${o} 次,失败 ${f} 次。`:`${l.title} 尚未产生执行记录。`,ai_summary:u.length>0?`${l.title} 今日执行 ${u.length} 次,成功 ${o} 次,失败 ${f} 次。`:`${l.title} 尚未产生执行记录。`}}function L0(l,s){const u=l.plan_id??"";return l.id===s.id||u===s.planId||ys(l.id,s.id)||ys(u,s.planId)?!0:Ca(l.title).toLowerCase()===Ca(s.title).toLowerCase()}function U0(l){return{id:l.id,time:l.time,task_name:l.plan_title,step_name:l.step_title,operation_name:l.task_title,status_label:l.status_label,status_tone:l.status_tone,business_detail:Xr(l),raw_detail:l.detail,updated_at:l.updated_at,conversation_id:l.conversation_id}}function up(l){const[s="9",u="0"]=l.split(":"),o=Math.min(Math.max(Number(s)||9,0),23);return`${Math.min(Math.max(Number(u)||0,0),59)} ${o} * * *`}function op(l){return l.status_label||l.status||"已同步"}function si(l){return String(l||"").replace(/\s+/g," ").trim()}function yg(l){const u=`${l.plan_title} ${l.step_title??""}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);return u!=null&&u[1]&&u[2]?`${u[1].padStart(2,"0")}:${u[2]}`:si(l.time)||"即时触发"}function ri(l){const s=si(l);if(!s)return"";const u=new Date(s);if(Number.isNaN(u.getTime()))return"";const o=new Intl.DateTimeFormat("zh-CN",{timeZone:v0,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(u),f=m=>{var p;return((p=o.find(j=>j.type===m))==null?void 0:p.value)??""};return`${f("month")}/${f("day")} ${f("hour")}:${f("minute")}`}function id(l){const s=si(l);return s?s.length>140?`${s.slice(0,140)}...`:s:""}function H0(l){return l?!l.enabled||!l.endpoint?"warning":l.failed>0||l.lastSyncError?"danger":l.syncing||l.pending>0?"warning":l.lastSyncAt?"success":"info":"info"}function B0(l){return l?l.enabled?l.endpoint?l.syncing?"同步中":l.failed>0||l.lastSyncError?"同步异常":l.pending>0?"待同步":l.lastSyncAt?"已同步":"等待数据":"未配置":"已停用":"未连接"}function q0(l){if(!l)return"当前环境未连接 qimingclaw 同步桥。";if(!l.enabled)return"管理端同步已停用。";if(!l.endpoint)return"管理端同步地址未配置。";const s=id(l.lastSyncError);if(l.failed>0||s){const u=l.failureSummary?[l.failureSummary.dueForRetry>0?`${l.failureSummary.dueForRetry} 条可重试`:"",l.failureSummary.backoff>0?`${l.failureSummary.backoff} 条退避中`:"",$0(l.failureSummary)].filter(Boolean).join(","):"";return[l.failed>0?`${l.failed} 条失败`:"",l.pending>0?`${l.pending} 条待同步`:"",u,s?`失败原因:${s}`:""].filter(Boolean).join(",")}return l.syncing?`正在同步,待同步 ${l.pending} 条。`:l.pending>0?`仍有 ${l.pending} 条待同步记录。`:l.lastSyncAt?`最近同步:${ri(l.lastSyncAt)||l.lastSyncAt}`:"等待本地 outbox 数据。"}function hs(l){return{plan:"Plan",task:"Task",run:"Run",event:"Event",artifact:"Artifact",approval:"Approval"}[l]||l||"Entity"}function $0(l){const s=l.byEntityType.slice(0,3).map(u=>`${hs(u.entityType)} ${u.count}`).join(" / ");return s?`类型:${s}`:""}function Y0(l){const s=id(l.error);return[`${hs(l.entityType)} / ${l.operation}`,`重试 ${l.attempts} 次`,l.dueForRetry?"等待补偿":`下次 ${vg(l)}`,s].filter(Boolean).join(" · ")}function dp(l){return ri(l.lastAttemptAt||l.updatedAt||l.createdAt)||"未尝试"}function vg(l){return l.dueForRetry?"可重试":ri(l.nextRetryAt)||"待计算"}function G0(l){return l==="synced"?"已同步":l==="failed"?"失败":l||"未知"}function Q0(l){return l==="synced"?"success":l==="failed"?"danger":"info"}async function X0(){var s;const l=(s=window.QimingClawBridge)==null?void 0:s.digital;if(!(l!=null&&l.getSyncStatus))return null;try{return await l.getSyncStatus()}catch{return null}}function bg(l){const s=ri(l.updated_at);return s||si(l.time)||"待同步"}function K0(l){return ri(l.updated_at)||si(l.time)||"--:--"}function Xr(l){const s=si(l.detail).replace(/^触发来源[::]\s*$/u,"").replace(/触发来源[::]\s*(?=。|,|,|;|;|$)/u,"").trim();return s?/^runner unavailable/i.test(s)?"执行链路异常,点击查看详情。":s.length>72?`${s.slice(0,72)}...`:s:ic(l)?"真实事件已完成,结果详情未回传。":lc(l)?"真实事件执行中,等待结果回传。":sc(l)?"执行异常,点击查看详情。":"结果详情待同步。"}function fp(l){return`计划时间 ${yg(l)} · 执行时间 ${bg(l)}`}function Z0(l,s){return s==="all"?!0:s==="running"?lc(l):s==="success"?ic(l):sc(l)}function V0(l){return new Set(l.duties.filter(s=>s.selected).map(s=>s.id))}function mp(l){return["pending","requested"].includes(String(l||"").toLowerCase())}function hp(l){if(!(l instanceof Element))return!1;if(l.closest('button, a, input, select, textarea, [role="tab"]'))return!0;const s=l.closest('[role="button"]');return!!(s&&!s.classList.contains("de-workday-execution--clickable"))}function J0(l,s){return l.length<=4?l:l.slice(s).concat(l.slice(0,s)).slice(0,4)}function lc(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("running")||s.includes("execut")||s.includes("progress")}function ic(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("success")||s.includes("complete")||s.includes("done")}function sc(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("danger")||s.includes("fail")||s.includes("error")||s.includes("异常")}function F0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["外呼","电话","拨打","接通","未接通","重拨","人员"].some(u=>s.includes(u))}function W0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["重拨","未接通","再拨","回拨","retry","callback"].some(u=>s.includes(u))}function I0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["核验","校验","证据","汇总","报告","结果","交付","看板","同步"].some(u=>s.includes(u))}function P0(){if(typeof window>"u")return null;const l=new URLSearchParams(window.location.search).get("visual");return b0.includes(l)?l:null}function ex(l){return W0(l)?"redial":F0(l)?"call":I0(l)?"evidence":"browser"}function tx(l){return l.currentEvent?ex(l.currentEvent):!l.confirmed&&l.eventsCount===0?"skill":l.pendingDecisionCount>0?"decision":l.eventsCount>0?"browser":"skill"}const pp="真实审批链路待接入";function ax(){if(typeof window>"u")return null;try{return window.sessionStorage.getItem(pg)}catch{return null}}function nx(l){if(!(typeof window>"u"))try{window.sessionStorage.setItem(pg,l)}catch{}}function lx({onNavigate:l}){var Qn,Pt,jl;const[s,u]=v.useState($o()),[o,f]=v.useState(null),[m,p]=v.useState([]),[j,g]=v.useState(new Set),[y,w]=v.useState(!0),[_,N]=v.useState(null),[q,M]=v.useState(null),[$,H]=v.useState(null),[Q,I]=v.useState(null),[F,ne]=v.useState(!1),[ie,me]=v.useState("selected"),[Z,ee]=v.useState(0),[Ce,st]=v.useState(!1),[Ke,oe]=v.useState(!1),[X,se]=v.useState(!1),[B,A]=v.useState(null),[Y,te]=v.useState("all"),[de,ve]=v.useState(!1),[S,R]=v.useState(null),[K,W]=v.useState(null),[re,pe]=v.useState("09:00"),[Ne,Fe]=v.useState(!1),[G,V]=v.useState(!1),[be,Re]=v.useState(null),[We,rt]=v.useState({name:"",company:"",position:"",currentStatus:"working"}),[Et,Oe]=v.useState("18:00"),[vt,Wt]=v.useState(!1),[at,It]=v.useState(()=>ax()),[nt,xs]=v.useState(null),Te=v.useRef(!1),mt=v.useRef(!1);v.useEffect(()=>(Te.current=!0,()=>{Te.current=!1}),[]);const va=v.useCallback(async()=>{let b=null,J=null;const ue=()=>{if(mt.current||!J)return;const Ze=(b==null?void 0:b.source)==="live"?V0(b):new Set,gt=J.map(Ot=>ti(Ot)).filter(Ot=>C0(Ze,Ot)),Ha=gt.length>0?gt:J.slice(0,3).map(Ot=>ti(Ot));g(new Set(Ha))},Ge=Qr(s).then(Ze=>{Te.current&&(b=Ze,f(Ze),H(null),ue())}).catch(Ze=>{Te.current&&H(Ze instanceof Error?Ze.message:"数字员工首页数据同步失败")}),pt=u0().then(Ze=>{Te.current&&(J=Ze.filter(gt=>gt.job_type==="plan_template"||Ir(gt.delivery,["mode"])==="plan_template"),p(J),I(null),ue())}).catch(Ze=>{Te.current&&I(Ze instanceof Error?Ze.message:"任务加载失败")}),Xn=X0().then(Ze=>{Te.current&&xs(Ze)});await Promise.allSettled([Ge,pt,Xn]),Te.current&&w(!1)},[s]);v.useEffect(()=>{w(!0),va()},[va]),v.useEffect(()=>{const b=o!=null&&o.workday.confirmed?8e3:3e4,J=window.setInterval(()=>{va()},b);return()=>window.clearInterval(J)},[va,o==null?void 0:o.workday.confirmed]),v.useEffect(()=>{if(Ce||Ke||X||B!==null)return;const J=window.setInterval(()=>{ee(ue=>{const Ge=(o==null?void 0:o.source)==="live"?o.events.length:0;return Ge>0?(ue+1)%Ge:0})},3200);return()=>window.clearInterval(J)},[X,Ke,Ce,B,o==null?void 0:o.events.length,o==null?void 0:o.source]);const ba=(o==null?void 0:o.source)==="live",Ln=v.useMemo(()=>ba?(o==null?void 0:o.duties)??[]:[],[ba,o==null?void 0:o.duties]),Mt=v.useMemo(()=>m.slice().sort((b,J)=>{const ue=ti(b),Ge=ti(J),pt=j.has(ue)?1:0,Xn=j.has(Ge)?1:0;if(pt!==Xn)return Xn-pt;const Ze=new Date(b.next_run||"").getTime(),gt=new Date(J.next_run||"").getTime(),Ha=Number.isFinite(Ze),Ot=Number.isFinite(gt);return Ha!==Ot?Ha?-1:1:Ha&&Ot&&Ze!==gt?Ze-gt:Ca(b.name).localeCompare(Ca(J.name),"zh-CN")}).map(b=>{const J=ti(b);return M0(b,Ln,j.has(J))}),[Ln,m,j]),Ct=v.useMemo(()=>Mt.filter(b=>j.has(b.id)),[Mt,j]),Un=v.useMemo(()=>Ct.map(b=>A0(b,Ln)),[Ln,Ct]),Aa=Mt,Hn=Mt.filter(b=>!j.has(b.id)),Da=ie==="selected"?Ct:ie==="pending"?Hn:Aa,$e=ba?(o==null?void 0:o.events)??[]:[],_a=J0($e,Z),wt=$e,an=(ba?(o==null?void 0:o.decisions)??[]:[]).filter(b=>mp(b.status)),uc=Ce||Ke||X||B!==null,ui=v.useMemo(()=>$e.filter(b=>Z0(b,Y)),[$e,Y]),ml=ui.slice(0,cp),hl=$e.filter(lc),pl=$e.filter(ic),za=$e.filter(sc),Rt=_a[0]??hl[0]??null,ze=o==null?void 0:o.employee,Ee=o==null?void 0:o.workday,gl=o==null?void 0:o.delivery,he=ba?o==null?void 0:o.daily_report:void 0,nn=ba?(Qn=o==null?void 0:o.run_details)!=null&&Qn.length?o.run_details:$e.map(U0):[],oi=nn.slice(0,x0),Ss=ba?(o==null?void 0:o.execution_summaries)??[]:[],Ma=Ct.map(b=>Ss.find(J=>L0(J,b))??O0(b,$e)),ln=E0(s),di=ie==="all"?"全部任务":ie==="pending"?"待选择任务":"今日已选任务",fi=ie==="all"?`总任务 ${Aa.length} 项,不代表当天都会执行。`:ie==="pending"?`当前日期 ${ln} 还有 ${Hn.length} 项未选择。`:`当前日期 ${ln} 已选择 ${Ct.length} 项任务。`,kt=(he==null?void 0:he.status)==="ready"?he.totals:null,js=(kt==null?void 0:kt.task_count)??Ma.length,xa=(kt==null?void 0:kt.execution_count)??Ma.reduce((b,J)=>b+J.total_count,0),ht=(kt==null?void 0:kt.success_count)??Ma.reduce((b,J)=>b+J.success_count,0),Nt=(kt==null?void 0:kt.failure_count)??Ma.reduce((b,J)=>b+J.failure_count,0),Sa=he?[he.summary,...he.detail_lines??[]].filter(b=>!!(b&&b.trim())):[],yl=(he==null?void 0:he.status)==="ready"&&Sa.length>0,Es=(Ee==null?void 0:Ee.current_status)??(ze==null?void 0:ze.current_status)??"working",oc=(Ee==null?void 0:Ee.current_status_label)??(ze==null?void 0:ze.current_status_label)??(Es==="resting"?"休息中":"工作中"),vl=Es==="resting",sn=(o==null?void 0:o.source)==="demo",Bn=sn?"演示兜底":"真实数据",Ra=sn?"de-badge-warning":"de-badge-success",Oa=H0(nt),qn=B0(nt),La=q0(nt),ct=id(nt==null?void 0:nt.lastSyncError),mi=(nt==null?void 0:nt.recentFailures)??[],ws=tx({confirmed:!!(Ee!=null&&Ee.confirmed),currentEvent:Rt,pendingDecisionCount:an.length,eventsCount:$e.length}),ja=P0(),Yn=j0[ja??ws],Ns=ja||Rt||an.length>0?Yn.bubble:(Ee==null?void 0:Ee.bubble_text)??Yn.bubble,Ts=Aa.length>0?`已加载 ${Aa.length} 项任务,当前选择 ${Ct.length} 项;右侧展示真实执行状态、运行明细和日报。`:(Ee==null?void 0:Ee.summary)??"等待同步当天任务计划。",dc=(Rt==null?void 0:Rt.task_title)??(Ee!=null&&Ee.confirmed?"等待下一条执行事件":"等待确认任务设置"),bl=Rt?`${Rt.plan_title}:${Xr(Rt)}(${fp(Rt)})`:"任务执行后会显示正在处理的任务、步骤或汇总动作。",_l=an[0]?`等待人工确认:${an[0].title}`:Ee!=null&&Ee.confirmed?(gl==null?void 0:gl.lines[0])??"继续按计划轮询新工单,并把结果同步到运行明细。":"请先确认今天要执行的任务,确认后数字员工会开始执行。",da=!!(o&&!(Ee!=null&&Ee.confirmed));v.useEffect(()=>{if(!(y||!o)&&o.workday.confirmed){Wt(!1);return}},[at,y,s,o]),v.useEffect(()=>{ze&&rt({name:ze.name||"",company:ze.company||"",position:ze.position||ze.major||"",currentStatus:ze.current_status||(Ee==null?void 0:Ee.current_status)||"working"})},[ze,Ee==null?void 0:Ee.current_status]),v.useEffect(()=>{Oe((he==null?void 0:he.report_schedule_time)||"18:00")},[he==null?void 0:he.report_schedule_time]),v.useEffect(()=>{V(!1)},[s]);const At=v.useCallback(b=>{!b.selectable||!b.implemented||(g(J=>{const ue=new Set(J);return ue.has(b.id)?ue.delete(b.id):ue.add(b.id),ue}),mt.current=!0,ne(!0),M(null))},[]),hi=v.useCallback(async()=>{if(j.size===0){H("请至少选择一项今天要执行的任务。");return}if(vl){H("当前状态为休息中,请切换为工作中后再执行任务。");return}N("confirm_workday"),H(null),M(null);try{const b=await ai({action:"confirm_workday",date:s,duty_ids:Un});if(!Te.current)return;f(b),g(new Set(j)),mt.current=!0,ne(!1),Wt(!1),M("任务设置已确认,数字员工开始按任务执行。")}catch(b){Te.current&&H(b instanceof Error?b.message:"确认任务设置失败")}finally{Te.current&&N(null)}},[vl,s,j,Un]),Cs=v.useCallback(async()=>{var b;N("flush_management_sync"),H(null),M(null);try{const J=(b=window.QimingClawBridge)==null?void 0:b.digital;if(!(J!=null&&J.flushSync)){M("当前环境未连接 qimingclaw 同步桥。");return}const ue=await J.flushSync();if(!Te.current)return;xs(ue);const Ge=await Qr(s);if(!Te.current)return;f(Ge);const pt=ue.failed>0?`同步完成,仍有 ${ue.failed} 条失败记录。`:ue.pending>0?`同步完成,仍有 ${ue.pending} 条待同步记录。`:"管理端同步完成。";M(pt)}catch(J){Te.current&&H(J instanceof Error?J.message:"同步管理端失败")}finally{Te.current&&N(null)}},[s]),pi=v.useCallback(()=>{g(new Set),mt.current=!0,ne(!0),M("已一键取消当前选择,重新选择后点击任务执行生效。"),H(null)},[]),ks=v.useCallback(async()=>{N("update_profile"),H(null),M(null);try{const b=await ai({action:"update_profile",date:s,name:We.name,company:We.company,position:We.position,current_status:We.currentStatus});if(!Te.current)return;f(b),Fe(!1),M("数字员工特性设置已保存。")}catch(b){Te.current&&H(b instanceof Error?b.message:"保存特性设置失败")}finally{Te.current&&N(null)}},[We,s]),xl=v.useCallback(async()=>{N("update_report_schedule"),H(null),M(null);try{const b=await ai({action:"update_report_schedule",date:s,report_schedule_time:Et});if(!Te.current)return;f(b),M(`日报生成时间已设置为 ${Et}。`)}catch(b){Te.current&&H(b instanceof Error?b.message:"设置日报时间失败")}finally{Te.current&&N(null)}},[Et,s]),fc=v.useCallback(async()=>{var b,J;N("generate_daily_report"),H(null),M(null);try{const ue=await ai({action:"generate_daily_report",date:s,duty_ids:Un,report_schedule_time:Et});if(!Te.current)return;const Ge=((b=ue.daily_report)==null?void 0:b.status)==="ready"?ue:await Qr(s);if(!Te.current)return;f(Ge),M("日报已生成,可下载 PDF。"),((J=Ge.daily_report)==null?void 0:J.status)==="ready"&&V(!0)}catch(ue){Te.current&&H(ue instanceof Error?ue.message:"生成日报失败")}finally{Te.current&&N(null)}},[Et,s,j,Un]),Dt=v.useCallback(()=>{window.open(hg(s),"_blank","noopener,noreferrer")},[s]),gi=v.useCallback(async(b,J)=>{var ue;N(`${b.id}:${J}`),H(null),M(null);try{if(!Te.current)return;const Ge=((ue=b.actions.find(pt=>pt.id===J))==null?void 0:ue.label)??J;M(`待实现:已触发“${Ge}”演示效果,${pp},未改动后端审批或执行状态。`)}catch(Ge){Te.current&&H(Ge instanceof Error?Ge.message:"处理决策失败")}finally{Te.current&&N(null)}},[]),Gn=v.useCallback(b=>{l({tab:"missions",date:s,missionId:b.conversationId||b.id})},[l,s]),yi=v.useCallback(async b=>{const J=up(re),ue=Date.now(),Ge=`digital-home-${b.planId}-${re.replace(":","")}`;N(`schedule:${b.id}`),H(null),M(null);try{const pt=await mg({command_kind:"create_schedule",context_refs:{plan_id:b.planId,schedule_id:Ge},payload:{source:"digital-home",plan_id:b.planId,name:`定时执行:${b.title}`,description:`按首页任务管理定时任务:${b.title}`,prompt:`请按计划执行:${b.title}。${b.summary}`,cron_expr:J,schedule:J},correlation_id:`digital-home-create-schedule-${b.planId}-${ue}`,idempotency_key:`digital-home-create-schedule-${b.planId}-${re}-${ue}`});if(!pt.accepted)throw new Error(pt.message||`调度命令未被接受:${pt.command_id||"create_schedule"}`);R(null),M(`已提交定时:${b.title},${re} 按 cron 计划执行。`),await va()}catch(pt){Te.current&&H(pt instanceof Error?pt.message:"定时执行失败")}finally{Te.current&&N(null)}},[va,re]),rn=v.useCallback(async b=>{var J;if(!qr(b)){H($r(b)),M(null);return}N(`execute:${b.id}`),H(null),M(null);try{const ue=await o0(b.planId);if(ue.ok!==!0)throw new Error(ue.error||"执行接口未接受请求");const Ge=((J=ue.dispatched_tasks)==null?void 0:J.length)??0;W(null),M(`已触发执行:${b.title},已派发 ${Ge} 个步骤。`),await va()}catch(ue){Te.current&&H(ue instanceof Error?ue.message:"执行失败")}finally{Te.current&&N(null)}},[va]),Sl=v.useCallback(()=>{Wt(!1),It(s),nx(s)},[s]),vi=v.useCallback((b,J)=>{const ue=j.has(b.id),Ge=$r(b);return r.jsxs("div",{className:`${w0(b,ue)} ${J==="guide"?"de-duty-card--guide":""}`,title:b.summary,children:[r.jsxs("label",{className:"de-task-manager-duty-check",children:[r.jsx("input",{type:"checkbox",checked:ue,disabled:!b.selectable||!b.implemented,onChange:()=>At(b)}),r.jsx("span",{children:ue?"已选":b.implemented?"未选":"待扩展"})]}),r.jsxs("div",{className:"de-template-card-main",children:[r.jsxs("div",{className:"de-template-card-head",children:[r.jsx("span",{className:"de-template-card-name",children:b.title}),r.jsx("span",{className:`de-badge ${Br(b.statusTone)}`,children:b.implemented?b.statusLabel:"待扩展"})]}),r.jsx("p",{className:"de-template-card-desc",children:b.summary}),r.jsxs("div",{className:"de-template-card-meta",children:[r.jsx("span",{children:b.scheduleText}),r.jsx("span",{children:b.resultText})]}),r.jsxs("div",{className:"de-duty-card-foot",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented,onClick:()=>Gn(b),children:"进入处理"}),r.jsxs("div",{className:"de-duty-card-actions",children:[r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||_===`schedule:${b.id}`,onClick:()=>R(b),children:[r.jsx(np,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"定时"})]}),r.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||_===`execute:${b.id}`,title:Ge||"立即执行此任务",onClick:()=>W(b),children:[r.jsx(ap,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"执行"})]})]}),!b.implemented&&r.jsx("span",{className:"de-duty-selected-mark",children:"待扩展"})]})]})]},`${J}-${b.id}`)},[_,Gn,j,At]),cn=v.useCallback(b=>{A(b),oe(!0)},[]),bi=v.useCallback(()=>{A(null),oe(!1)},[]),_i=v.useCallback(()=>{se(!1),oe(!1)},[]),Ua=v.useCallback(()=>{se(!0),oe(!0)},[]),xi=v.useCallback(b=>{hp(b.target)||Ua()},[Ua]),mc=v.useCallback(b=>{b.key!=="Enter"&&b.key!==" "||hp(b.target)||(b.preventDefault(),Ua())},[Ua]),hc=v.useCallback(b=>{A(null),se(!1),oe(!1),l({tab:"missions",date:s,missionId:b.conversation_id||b.id})},[l,s]);return r.jsxs("div",{className:"de-dashboard de-dashboard--compact",style:{position:"relative",height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[r.jsx("div",{className:"de-connection-layer","aria-hidden":"true",children:r.jsxs("svg",{className:"de-connection-svg",viewBox:"0 0 1200 800",preserveAspectRatio:"none",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"connGrad1",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[r.jsx("stop",{offset:"0%",stopColor:"rgba(79,172,254,0.25)"}),r.jsx("stop",{offset:"100%",stopColor:"rgba(0,242,254,0.1)"})]}),r.jsx("filter",{id:"connGlow",children:r.jsx("feGaussianBlur",{stdDeviation:"3"})})]}),r.jsx("path",{d:"M 80 180 Q 420 400, 580 350",stroke:"url(#connGrad1)",strokeWidth:"1.5",fill:"none",filter:"url(#connGlow)"}),r.jsx("path",{d:"M 120 620 Q 380 400, 560 380",stroke:"url(#connGrad1)",strokeWidth:"1.2",fill:"none",filter:"url(#connGlow)"}),r.jsx("path",{d:"M 640 360 Q 780 200, 1100 160",stroke:"url(#connGrad1)",strokeWidth:"1.3",fill:"none",filter:"url(#connGlow)"})]})}),r.jsxs("div",{className:"de-dashboard-content",children:[r.jsxs("div",{className:"de-dashboard-left",children:[r.jsxs("div",{className:"de-card de-person-card de-person-card--compact",children:[r.jsxs("div",{className:"de-card-title-bar",children:[r.jsx("span",{className:"de-card-title-bar-text",children:"数字员工"}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Fe(!0),children:"特性设置"})]}),r.jsx("div",{className:"de-card-body",children:r.jsxs("div",{className:"de-info-grid",children:[r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"姓名"}),r.jsx("span",{children:(ze==null?void 0:ze.name)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"单位"}),r.jsx("span",{children:(ze==null?void 0:ze.company)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"岗位"}),r.jsx("span",{children:(ze==null?void 0:ze.position)??(ze==null?void 0:ze.major)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"当前状态"}),r.jsx("span",{className:vl?"de-status-resting":"de-status-working",children:oc})]})]})})]}),r.jsxs("div",{className:"de-card de-template-manager-card",children:[r.jsx("div",{className:"de-card-title-bar",children:r.jsx("span",{className:"de-card-title-bar-text",children:"任务设置"})}),r.jsxs("div",{className:"de-card-body de-template-manager-body",children:[r.jsxs("div",{className:"de-workday-toolbar",children:[r.jsxs("label",{children:[r.jsx("span",{children:"日期"}),r.jsx("input",{type:"date",value:s,onChange:b=>{mt.current=!1,ne(!1),M(null),u(b.target.value||$o())}})]}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:y,onClick:()=>ve(!0),children:"任务设置"}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:y||_==="flush_management_sync",onClick:Cs,title:"立即同步数字员工本地状态到管理端",children:[r.jsx(C_,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:_==="flush_management_sync"?"同步中...":"同步管理端"})]})]}),r.jsxs("div",{className:`de-management-sync-strip de-management-sync-strip--${Oa}`,title:ct||La,children:[r.jsx("span",{className:`de-badge ${Br(Oa)}`,children:qn}),r.jsx("span",{children:La})]}),mi.length>0&&r.jsx("div",{className:"de-management-sync-failures","aria-label":"同步失败明细",children:mi.map(b=>r.jsxs("button",{type:"button",className:"de-management-sync-failure",title:b.error||b.id,onClick:()=>Re(b),children:[r.jsx("span",{children:dp(b)}),r.jsx("strong",{children:hs(b.entityType)}),r.jsx("em",{children:b.id}),r.jsx("small",{children:Y0(b)})]},b.id))}),(q||$||Q||(o==null?void 0:o.demo_reason))&&r.jsx("div",{className:`de-schedule-result ${$?"de-schedule-result--error":"de-schedule-result--success"}`,style:{marginBottom:10},children:$||q||Q||(o==null?void 0:o.demo_reason)}),F&&!q&&!$&&r.jsx("div",{className:"de-schedule-result de-schedule-result--success",style:{marginBottom:10},children:"当前选择尚未确认,自动刷新不会覆盖你的勾选。"}),r.jsxs("div",{className:"de-template-overview",children:[r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--total ${ie==="all"?"active":""}`,onClick:()=>me("all"),children:[r.jsx("span",{className:"de-template-overview-label",children:"总任务"}),r.jsx("span",{className:"de-template-overview-value",children:Aa.length})]}),r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--scheduled ${ie==="selected"?"active":""}`,onClick:()=>me("selected"),children:[r.jsx("span",{className:"de-template-overview-label",children:"已选择"}),r.jsx("span",{className:"de-template-overview-value",children:Ct.length})]}),r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--runnable ${ie==="pending"?"active":""}`,onClick:()=>me("pending"),children:[r.jsx("span",{className:"de-template-overview-label",children:"待选择"}),r.jsx("span",{className:"de-template-overview-value",children:Hn.length})]})]}),r.jsxs("div",{className:"de-task-date-context",children:[r.jsxs("span",{children:["当前日期 ",ln]}),r.jsx("em",{children:fi}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:pi,disabled:Ct.length===0,children:"一键取消"})]}),r.jsxs("div",{className:"de-task-manager-preview de-task-manager-preview-scroll de-template-task-list",children:[r.jsxs("div",{className:"de-task-manager-preview-head",children:[r.jsx("span",{children:ln}),r.jsxs("strong",{children:[di," ",Da.length]})]}),y?r.jsx("div",{className:"de-loading-skeleton",style:{height:96}}):Mt.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会再展示硬编码任务。"}):Da.length===0?r.jsx("p",{className:"de-empty-text",children:"当前筛选下暂无任务,点击总任务查看全部内容。"}):Da.map(b=>r.jsxs("div",{className:`de-task-manager-preview-row ${j.has(b.id)?"is-selected":""}`,title:b.summary,children:[r.jsxs("button",{type:"button",className:"de-template-task-main",onClick:()=>Gn(b),children:[r.jsx("strong",{children:b.title}),r.jsx("span",{children:b.resultText})]}),r.jsxs("div",{className:"de-template-item-actions",children:[r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||_===`schedule:${b.id}`,onClick:()=>R(b),children:[r.jsx(np,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"定时"})]}),r.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||_===`execute:${b.id}`,title:$r(b)||"立即执行此任务",onClick:()=>W(b),children:[r.jsx(ap,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"执行"})]})]})]},b.id))]})]})]})]}),r.jsxs("div",{className:"de-dashboard-center",style:{justifyContent:"center",padding:"0 0 16px",overflow:"visible"},children:[r.jsx("div",{className:"de-avatar-wrapper",style:{minHeight:470,maxWidth:560,transform:"translateY(-6px)",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:r.jsx(R_,{avatarSrc:Yn.src,altText:`数字员工-${Yn.label}`,statusLabel:Yn.label})}),r.jsxs("div",{className:"de-speech-bubble de-speech-bubble--employee",style:{top:"38%",left:"29%",right:"auto",transform:"translateX(-50%)",width:268,padding:"10px 12px",zIndex:16},children:[r.jsx("span",{className:"de-speech-label",children:"数字员工播报"}),r.jsx("p",{className:"de-speech-text",children:Ns}),r.jsxs("button",{type:"button",className:"de-speech-workflow de-execution-detail-trigger",onClick:Ua,title:"打开运行明细",children:[r.jsx("span",{children:"当前动作"}),r.jsx("strong",{children:dc}),r.jsx("small",{children:bl}),r.jsx("span",{children:"下一步"}),r.jsx("small",{children:_l})]})]})]}),r.jsx("div",{className:"de-dashboard-right",children:r.jsxs("div",{className:"de-right-panels",children:[r.jsxs("div",{className:"de-workbench de-workday-execution de-workday-execution--clickable",role:"button",tabIndex:0,"aria-label":"打开运行明细",title:"打开运行明细",onClick:xi,onKeyDown:mc,children:[r.jsxs("div",{className:"de-card-title-bar de-workbench-head de-workbench-head--bar",children:[r.jsx("div",{className:"de-workbench-title-row",children:r.jsx("h3",{children:"今日执行"})}),r.jsx("span",{className:`de-badge ${Ra}`,children:Bn})]}),r.jsxs("div",{className:"de-workday-execution-body","aria-live":"polite",children:[r.jsxs("div",{className:"de-execution-status-strip",children:[r.jsxs("span",{children:[r.jsx("em",{children:"已选任务"}),r.jsx("strong",{children:Ct.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"运行记录"}),r.jsx("strong",{children:wt.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"已完成"}),r.jsx("strong",{children:pl.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"异常"}),r.jsx("strong",{children:za.length})]})]}),r.jsx("div",{className:"de-task-summary-scroll",children:r.jsx("div",{className:"de-task-summary-grid","aria-label":"任务执行汇总",children:Ma.length===0?r.jsx("p",{className:"de-empty-text",children:"左侧选择任务后,这里会按任务生成执行次数和成功情况。"}):Ma.map(b=>r.jsxs("button",{type:"button",className:`de-task-summary-card de-live-feed-row--${b.latest_status_tone||"info"}`,onClick:()=>Gn(Ct.find(J=>J.id===b.id)??Ct[0]),title:[b.description,b.ai_summary||b.business_summary].filter(Boolean).join(` + */const k_=On("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),Fr={finance:{id:"finance",labelKey:"console.role.finance",density:"compact",tone:"strict",contentPriority:["audit","sources","exactNumbers"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:3e4,cssVars:{"--role-accent":"#2563eb","--role-accent-soft":"rgba(37,99,235,0.12)","--role-surface-tint":"rgba(248,250,252,0.78)","--role-border":"rgba(37,99,235,0.22)","--role-focus-ring":"#1d4ed8"}},engineering:{id:"engineering",labelKey:"console.role.engineering",density:"compact",tone:"technical",contentPriority:["alarms","timestamps","reliability"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:15e3,cssVars:{"--role-accent":"#0f766e","--role-accent-soft":"rgba(15,118,110,0.12)","--role-surface-tint":"rgba(240,253,250,0.72)","--role-border":"rgba(15,118,110,0.24)","--role-focus-ring":"#0f766e"}},executive:{id:"executive",labelKey:"console.role.executive",density:"presentation",tone:"executive",contentPriority:["kpi","approvals","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!0},staleDataThresholdMs:6e4,cssVars:{"--role-accent":"#334155","--role-accent-soft":"rgba(51,65,85,0.10)","--role-surface-tint":"rgba(248,250,252,0.82)","--role-border":"rgba(51,65,85,0.20)","--role-focus-ring":"#475569"}},hr:{id:"hr",labelKey:"console.role.hr",density:"balanced",tone:"warm-professional",contentPriority:["queues","timestamps","approvals"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#7c3aed","--role-accent-soft":"rgba(124,58,237,0.10)","--role-surface-tint":"rgba(250,245,255,0.72)","--role-border":"rgba(124,58,237,0.20)","--role-focus-ring":"#6d28d9"}},sales:{id:"sales",labelKey:"console.role.sales",density:"balanced",tone:"warm-professional",contentPriority:["pipeline","sources","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#b45309","--role-accent-soft":"rgba(180,83,9,0.10)","--role-surface-tint":"rgba(255,251,235,0.70)","--role-border":"rgba(180,83,9,0.20)","--role-focus-ring":"#92400e"}}},ag=v.createContext(null),ng="sgrobot-console-role";function A_(){try{const l=localStorage.getItem(ng);if(l&&l in Fr)return l}catch{}return"sales"}function D_({children:l}){const[s,u]=v.useState(A_),o=v.useCallback(m=>{u(m);try{localStorage.setItem(ng,m)}catch{}},[]),f=Fr[s];return r.jsx(ag.Provider,{value:{role:s,profile:f,setRole:o},children:r.jsx("div",{style:f.cssVars,"data-role":s,children:l})})}function z_(){const l=v.useContext(ag);if(!l)throw new Error("useRole must be used within RoleProvider");return l}function Eo({className:l=""}){return r.jsx("div",{className:`de-gem ${l}`,"aria-hidden":"true"})}function M_(){return r.jsxs("div",{className:"de-stage","aria-hidden":"true",children:[r.jsx("div",{className:"de-stage-glow"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-1"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-2"}),r.jsx("div",{className:"de-stage-layer de-stage-layer-3"})]})}function R_({avatarSrc:l,altText:s="数字员工",statusLabel:u}){return r.jsxs("div",{className:"de-avatar-container","aria-hidden":"true",children:[r.jsxs("div",{className:"de-avatar-glass-space",children:[r.jsxs("div",{className:"de-avatar-roof",children:[r.jsx("div",{className:"de-avatar-roof-face"}),r.jsx("div",{className:"de-avatar-roof-glow"})]}),r.jsx("div",{className:"de-avatar-glass-left"}),r.jsx("div",{className:"de-avatar-glass-right"}),r.jsx(Eo,{className:"de-gem-1"}),r.jsx(Eo,{className:"de-gem-2"}),r.jsx(Eo,{className:"de-gem-3"})]}),u&&r.jsx("div",{className:"de-avatar-state-label",children:u}),r.jsx("img",{src:l,alt:s,className:"de-avatar-img"}),r.jsx(M_,{})]})}const O_=".",lg=(()=>{var s;return((s=window.__QIMINGCLAW_DIGITAL_API_BASE__)==null?void 0:s.replace(/\/+$/,""))??""})(),ig=()=>"",sg="zeroclaw_token";function L_(){try{return localStorage.getItem(sg)}catch{return null}}function U_(){try{localStorage.removeItem(sg)}catch{}}const rg="qimingclaw:digital-employee-adapter-state",H_="18:00",B_=[{skill_id:"qimingclaw-acp-session",name:"ACP 会话执行",version:"1.0.0",enabled:!0,description:"通过 qimingclaw 的 ACP 引擎创建会话、执行任务并跟踪结果。",category:"执行",capability_level:"core"},{skill_id:"qimingclaw-mcp-tools",name:"MCP 工具编排",version:"1.0.0",enabled:!0,description:"读取已配置 MCP 服务与工具,作为数字员工的工具能力池。",category:"工具",capability_level:"core"},{skill_id:"qimingclaw-computer-control",name:"客户端电脑控制",version:"1.0.0",enabled:!0,description:"承接 /computer/chat 执行入口,面向远程任务和本地自动化操作。",category:"桌面",capability_level:"specialized"},{skill_id:"qimingclaw-artifact-report",name:"产物与日报整理",version:"1.0.0",enabled:!0,description:"把执行记录、关键产物和异常汇总成数字员工日报。",category:"汇报",capability_level:"standard"}],Rn=[{plan_id:"qimingclaw-client-readiness",title:"客户端运行状态巡检",objective:"确认 qimingclaw 客户端、Agent、MCP 和远程接入能力是否处于可执行状态。",status:"running",created_at:en(9,0),steps:[{step_id:"agent-status",title:"检查 Agent 引擎状态",depends_on:[],preferred_skills:["qimingclaw-acp-session"],tasks:[{task_id:"task-agent-status",title:"读取 Agent 服务状态",status:"running"}]},{step_id:"mcp-status",title:"检查 MCP 工具能力",depends_on:["agent-status"],preferred_skills:["qimingclaw-mcp-tools"],tasks:[{task_id:"task-mcp-status",title:"同步 MCP 工具列表",status:"pending"}]}]},{plan_id:"qimingclaw-remote-task-ingress",title:"远程任务接入准备",objective:"检查 lanproxy、computer server 和文件服务,为后端下发数字员工任务做准备。",status:"pending",created_at:en(9,30),steps:[{step_id:"computer-server",title:"确认 /computer/chat 执行入口",depends_on:[],preferred_skills:["qimingclaw-computer-control"],tasks:[{task_id:"task-computer-server",title:"检查电脑控制服务",status:"pending"}]},{step_id:"file-artifact",title:"准备产物回传目录",depends_on:["computer-server"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-file-artifact",title:"整理执行产物通道",status:"pending"}]}]},{plan_id:"qimingclaw-daily-report",title:"数字员工日报生成",objective:"汇总今日执行记录、服务状态和待介入事项,生成面向业务的日报。",status:"pending",created_at:en(17,30),steps:[{step_id:"collect-events",title:"汇总运行事件",depends_on:[],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-collect-events",title:"整理今日运行明细",status:"pending"}]},{step_id:"write-report",title:"生成日报摘要",depends_on:["collect-events"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-write-report",title:"生成数字员工日报",status:"pending"}]}]}],Wr={"qimingclaw-client-readiness":{expression:"0 9 * * *",nextRun:en(9,0),scheduleText:"已定时 09:00 执行"},"qimingclaw-remote-task-ingress":{expression:"30 9 * * *",nextRun:en(9,30),scheduleText:"已定时 09:30 执行"},"qimingclaw-daily-report":{expression:"0 18 * * *",nextRun:en(18,0),scheduleText:"已定时 18:00 执行"}};function q_(){return window.__QIMINGCLAW_EMBEDDED_DIGITAL__===!0}async function $_(l,s={}){if(!q_())return;const u=new URL(l,window.location.origin),o=(s.method||"GET").toUpperCase(),f=u.pathname;if(o==="GET"&&f==="/api/digital-employee/workday")return dg(u.searchParams.get("date")||ld(),await os());if(o==="POST"&&f==="/api/digital-employee/workday/actions")return a0(ip(s.body),await os());if(o==="GET"&&f==="/api/scheduler/jobs")return{jobs:V_()};if(o==="GET"&&f==="/api/debug/plans")return{plans:I_(u.searchParams.get("q"),await os())};if(o==="GET"&&f==="/api/debug/tasks"){const m=u.searchParams.get("plan_id");return W_(m,await os())}if(o==="GET"&&f.startsWith("/api/debug/plan/")&&f.endsWith("/flow"))return n0(decodeURIComponent(f.split("/")[4]||""),await os());if(o==="POST"&&f.startsWith("/api/debug/plan/")&&f.endsWith("/dispatch"))return l0(decodeURIComponent(f.split("/")[4]||""));if(o==="GET"&&f.startsWith("/api/plan/")&&f.endsWith("/messages"))return{messages:i0(decodeURIComponent(f.split("/")[3]||""))};if(o==="GET"&&f==="/api/skill")return{skills:B_};if(o==="POST"&&f.startsWith("/api/skill/")&&f.endsWith("/enabled")){const m=decodeURIComponent(f.split("/")[3]||""),p=ip(s.body);return{ok:!0,skill_id:m,enabled:p.enabled??!0}}}function wo(){return{selectedDutyIdsByDate:{},confirmedDates:{},reportScheduleTime:H_,reportGeneratedAtByDate:{},profile:{name:"飞天数字员工",company:"qimingclaw 客户端",position:"客户端任务执行员",currentStatus:"working"}}}function nd(){try{const l=window.localStorage.getItem(rg);return l?{...wo(),...JSON.parse(l)}:wo()}catch{return wo()}}function cg(l){window.localStorage.setItem(rg,JSON.stringify(l))}async function os(){var l,s,u,o,f,m;try{const p=await((u=(s=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:s.getSnapshot)==null?void 0:u.call(s))??null;if(!p)return null;const j=await((m=(f=(o=window.QimingClawBridge)==null?void 0:o.digital)==null?void 0:f.getSyncStatus)==null?void 0:m.call(f).catch(()=>null))??null;return{...p,sync:j}}catch{return null}}function ip(l){return typeof l!="string"||!l.trim()?{}:JSON.parse(l)}function ld(){const l=new Date;return[l.getFullYear(),String(l.getMonth()+1).padStart(2,"0"),String(l.getDate()).padStart(2,"0")].join("-")}function en(l,s){const u=new Date;return u.setHours(l,s,0,0),u.toISOString()}function No(l){return l.split("-").join("/")}function Y_(l,s){return new Set(l.selectedDutyIdsByDate[s]??[])}function G_(l){return["completed","succeeded","success"].includes(l)?"success":["running","active"].includes(l)?"running":["failed","error"].includes(l)?"danger":"waiting"}function ds(l,s){var u;return((u=l==null?void 0:l.services[s])==null?void 0:u.running)===!0}function fs(l,s){var u;return(u=l==null?void 0:l.services[s])==null?void 0:u.error}function Q_(l,s){return s?l.plan_id==="qimingclaw-client-readiness"?ds(s,"agent")&&ds(s,"mcp")?"running":fs(s,"agent")||fs(s,"mcp")?"failed":"pending":l.plan_id==="qimingclaw-remote-task-ingress"?ds(s,"computerServer")||ds(s,"lanproxy")||ds(s,"fileServer")?"running":fs(s,"computerServer")||fs(s,"lanproxy")||fs(s,"fileServer")?"failed":"pending":l.status:l.status}function Mn(l,s,u){const o=l==null?void 0:l.services[s];if(!o)return`${u}:未连接`;if(o.running){const f=o.port?`(端口 ${o.port})`:"";return`${u}:运行中${f}`}return`${u}:未运行${o.error?`,${o.error}`:""}`}function qo(l){const s=l==null?void 0:l.sync;return s?s.enabled?s.endpoint?s.syncing?`管理端同步:同步中,待同步 ${s.pending} 条`:s.failed>0?`管理端同步:${s.failed} 条失败,待同步 ${s.pending} 条`:s.pending>0?`管理端同步:待同步 ${s.pending} 条`:s.lastSyncAt?`管理端同步:已同步,最近 ${s.lastSyncAt}`:"管理端同步:等待本地数据":"管理端同步:未配置地址":"管理端同步:已停用":"管理端同步:未连接"}function X_(l){return String(l||"").replace(/\s+/g," ").trim()}function K_(l){const s=X_(l.error),u=s.length>120?`${s.slice(0,120)}...`:s,o=l.dueForRetry?"等待补偿":l.nextRetryAt?`下次重试 ${l.nextRetryAt}`:"等待重试";return`${l.entityType}/${l.operation} ${l.id} 重试 ${l.attempts} 次,${o}${u?`,${u}`:""}`}function nc(l,s){return{...l,status:Q_(l,s)}}function Z_(l){return l==="running"?"执行中":l==="completed"||l==="succeeded"?"已完成":l==="failed"?"异常":"待执行"}function V_(){return Rn.map(l=>{var u;const s=Wr[l.plan_id]??Wr["qimingclaw-client-readiness"];return{id:`schedule-${l.plan_id}`,name:l.title,expression:s.expression,command:`digital-employee:${l.plan_id}`,prompt:l.objective??null,job_type:"plan_template",schedule:{expression:s.expression,template_id:l.plan_id},enabled:!0,delivery:{mode:"plan_template",template_id:l.plan_id},template_id:l.plan_id,trigger_kind:"scheduled",step_count:((u=l.steps)==null?void 0:u.length)??0,skill_ids:[...new Set((l.steps??[]).flatMap(o=>o.preferred_skills??[]))],delete_after_run:!1,created_at:l.created_at,next_run:s.nextRun,last_run:l.status==="running"?en(9,5):null,last_status:l.status==="running"?"running":null,last_output:null}})}function J_(l,s,u){const o=Y_(l,s);return Rn.map(f=>{const m=nc(f,u),p=Wr[m.plan_id]??Wr["qimingclaw-client-readiness"];return{id:m.plan_id,title:m.title,summary:m.objective??"等待 qimingclaw 执行链路补充任务说明。",implemented:!0,selectable:!0,selected:o.has(m.plan_id),status:m.status,status_label:Z_(m.status),status_tone:G_(m.status),schedule_text:p.scheduleText,result_text:ug(m,u),conversation_id:m.plan_id}})}function ug(l,s){return l.plan_id==="qimingclaw-client-readiness"?[Mn(s,"agent","Agent"),Mn(s,"mcp","MCP"),`活跃会话:${(s==null?void 0:s.sessions.active)??0}`].join(";"):l.plan_id==="qimingclaw-remote-task-ingress"?[Mn(s,"computerServer","Computer Server"),Mn(s,"lanproxy","Lanproxy"),Mn(s,"fileServer","File Server")].join(";"):l.status==="running"?"正在同步客户端运行状态":"等待任务执行"}function og(l,s=null){return Rn.filter(u=>!l||u.plan_id===l).map(u=>nc(u,s)).flatMap(u=>(u.steps??[]).flatMap(o=>(o.tasks??[]).map(f=>{var m;return{task_id:f.task_id,title:f.title,status:u.status==="running"&&f.status==="pending"?"running":f.status,plan_id:u.plan_id,step_id:o.step_id,assigned_skill_id:((m=o.preferred_skills)==null?void 0:m[0])??"",description:`${u.title} · ${o.title}`,created_at:u.created_at,updated_at:u.status==="running"?new Date().toISOString():u.created_at,started_at:f.status==="running"?en(9,5):null,finished_at:f.status==="completed"?en(9,10):null}})))}function F_(l){return l.filter(s=>s.status==="running"||s.status==="completed").map((s,u)=>({run_id:`qimingclaw-run-${u+1}`,task_id:s.task_id,plan_id:s.plan_id,skill_id:s.assigned_skill_id,attempt_no:1,lifecycle:s.status==="running"?"Running":"Succeeded",created_at:s.started_at??s.created_at,completed_at:s.finished_at,events:[{event_id:`${s.task_id}-event-start`,kind:"RunStarted",occurred_at:s.started_at??s.created_at,message:`${s.title} 已进入 qimingclaw 执行链路`}]}))}function W_(l,s=null){const u=og(l,s);return{tasks:u,runs:F_(u),total:u.length,truncated:!1}}function I_(l,s=null){const u=(l??"").trim().toLowerCase(),o=Rn.map(f=>nc(f,s));return u?o.filter(f=>f.title.toLowerCase().includes(u)||f.plan_id.toLowerCase().includes(u)||(f.objective??"").toLowerCase().includes(u)):o}function P_(l,s,u){if(!s)return[{id:"event-await-confirmation",time:"待确认",plan_title:"任务设置",task_title:"等待确认今日任务",step_title:"选择职责",detail:"请先确认今天要执行的任务,确认后数字员工会开始执行。",status:"pending",status_label:"待确认",status_tone:"waiting",updated_at:new Date().toISOString(),conversation_id:null}];const f=l.filter(p=>p.selected).map(p=>({id:`event-${p.id}`,time:p.status==="running"?"实时":"待执行",plan_title:p.title,task_title:p.title,step_title:p.status==="running"?"同步 qimingclaw 服务状态":"等待调度",detail:p.status==="running"?`${p.result_text}。快照时间:${(u==null?void 0:u.generatedAt)??"未连接 bridge"}`:"任务已确认,将在后续阶段接入 ACP/MCP 真实执行事件。",status:p.status==="running"?"running":"pending",status_label:p.status==="running"?"执行中":"待执行",status_tone:p.status==="running"?"running":"waiting",updated_at:new Date().toISOString(),conversation_id:p.conversation_id})),m=u==null?void 0:u.sync;if(m&&(m.pending>0||m.failed>0||m.lastSyncAt)){const p=(m.recentFailures||[]).slice(0,3).map(K_).join(";");f.push({id:"event-management-sync",time:m.syncing?"实时":"同步",plan_title:"管理端联动",task_title:"同步数字员工本地状态",step_title:m.failed>0?"同步补偿":"outbox 推送",detail:[qo(u),m.lastSyncError?`错误:${m.lastSyncError}`:"",p?`最近失败:${p}`:""].filter(Boolean).join("。"),status:m.failed>0?"failed":m.syncing||m.pending>0?"running":"completed",status_label:m.failed>0?"异常":m.syncing||m.pending>0?"同步中":"已同步",status_tone:m.failed>0?"danger":m.syncing||m.pending>0?"running":"success",updated_at:m.lastSyncAt??new Date().toISOString(),conversation_id:"qimingclaw-management-sync"})}return f}function e0(l,s){return l.filter(u=>u.selected).map(u=>{const o=s.filter(p=>p.conversation_id===u.conversation_id),f=o.filter(p=>p.status==="running").length,m=o.filter(p=>p.status==="completed").length;return{id:u.id,plan_id:u.id,title:u.title,description:u.summary,selected:u.selected,total_count:Math.max(o.length,1),success_count:m,failure_count:0,running_count:f,waiting_count:f>0?0:1,latest_status_label:f>0?"执行中":"待执行",latest_status_tone:f>0?"running":"waiting",business_summary:u.result_text,ai_summary:"当前由 qimingclaw adapter 生成,后续接入真实执行日志。"}})}function t0(l){return l.map(s=>({id:`run-detail-${s.id}`,time:s.time,task_name:s.task_title,step_name:s.step_title,operation_name:s.plan_title,status_label:s.status_label,status_tone:s.status_tone,business_detail:s.detail,raw_detail:s.detail,updated_at:s.updated_at,conversation_id:s.conversation_id}))}function dg(l,s){const u=nd(),o=u.confirmedDates[l]??null,f=!!o,m=J_(u,l,s),p=P_(m,f,s),j=e0(m,p),g=u.reportGeneratedAtByDate[l]??null,y=m.filter(N=>N.selected).length,w=p.filter(N=>N.status==="running").length,_=s==null?void 0:s.sync;return{source:"live",date:l,employee:{name:u.profile.name,title:"数字员工",major:"qimingclaw 客户端任务执行",company:u.profile.company,position:u.profile.position,current_status:u.profile.currentStatus,current_status_label:u.profile.currentStatus==="resting"?"休息中":"工作中",motto:"承接客户端任务,调度 ACP 与 MCP 能力完成执行。"},workday:{confirmed:f,confirmed_at:o,current_status:u.profile.currentStatus,current_status_label:u.profile.currentStatus==="resting"?"休息中":"工作中",status_label:f?"运行中":"待确认",status_tone:f?"running":"waiting",summary:f?`当前日期 ${No(l)} 已确认 ${y} 项任务。`:`当前日期 ${No(l)} 待确认今日任务。`,bubble_text:f?"我已接入 qimingclaw 客户端执行链路,正在等待真实 Run/Event 数据接入。":"请先确认今天要执行的任务,我会把它们映射到 qimingclaw 执行链路。"},overview:{title:"今日执行",status_label:f?"真实数据":"待确认",status_tone:f?"success":"waiting",metrics:[{label:"已选任务",value:String(y)},{label:"运行记录",value:String(p.length)},{label:"执行中",value:String(w)},{label:"待同步",value:String((_==null?void 0:_.pending)??0)},{label:"同步异常",value:String((_==null?void 0:_.failed)??0)}]},duties:m,events:p,execution_summaries:j,run_details:t0(p),decisions:[],delivery:{headline:f?"qimingclaw 执行链路已接入":"等待确认任务设置",summary:"当前阶段已将数字员工页面切换到 qimingclaw adapter,并开始读取客户端服务状态。",lines:["已吸收 sgRobot 数字员工 UI 和核心展示模型。","已建立 qimingclaw workday/plans/tasks/skills API adapter。",Mn(s,"agent","Agent"),Mn(s,"mcp","MCP"),Mn(s,"computerServer","Computer Server"),qo(s),`活跃会话:${(s==null?void 0:s.sessions.active)??0} / ${(s==null?void 0:s.sessions.total)??0}`],artifacts:[{name:"数字员工运行摘要",status:g?"ready":"pending"}]},daily_report:{date:l,title:`${No(l)} 飞天数字员工日报`,report_schedule_time:u.reportScheduleTime,status:g?"ready":"not_generated",generated_at:g,generated_by:g?"ai":"fallback",model:"qimingclaw-adapter",source:"qimingclaw",summary:g?`今日已完成数字员工页面到 qimingclaw adapter 的接入,并读取了 qimingclaw 服务状态。${qo(s)}。`:"日报将在生成后汇总任务选择、运行明细和后续接入建议。",totals:{task_count:y,execution_count:p.length,success_count:0,failure_count:0,running_count:w},task_sections:j,detail_lines:p.map(N=>`${N.time} ${N.task_title}:${N.detail}`),pdf_available:!1,pdf_url:null}}}function a0(l,s){const u=nd(),o=l.date||ld();return l.action==="confirm_workday"&&(u.selectedDutyIdsByDate[o]=l.duty_ids??[],u.confirmedDates[o]=new Date().toISOString()),l.action==="update_profile"&&(u.profile={name:l.name||u.profile.name,company:l.company||u.profile.company,position:l.position||u.profile.position,currentStatus:l.current_status||u.profile.currentStatus}),l.action==="update_report_schedule"&&(u.reportScheduleTime=l.report_schedule_time||u.reportScheduleTime),l.action==="generate_daily_report"&&(l.duty_ids&&(u.selectedDutyIdsByDate[o]=l.duty_ids),l.report_schedule_time&&(u.reportScheduleTime=l.report_schedule_time),u.reportGeneratedAtByDate[o]=new Date().toISOString()),cg(u),dg(o,s)}function n0(l,s=null){const u=nc(Rn.find(f=>f.plan_id===l)??Rn[0],s),o=new Date().toISOString();return{plan_id:u.plan_id,plan_title:u.title,plan_status:u.status,plan_objective:u.objective,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:u.title,sub_label:u.objective,timestamp:u.created_at,color:"#38bdf8",source_type:"plan"},{seq:2,lane:"qimingclaw",label:"接入客户端能力",sub_label:"ACP / MCP / computer server adapter",timestamp:o,color:"#22c55e",source_type:"adapter"},{seq:3,lane:"execution",label:u.status==="running"?"已读取 qimingclaw 服务状态":"等待调度",sub_label:ug(u,s),timestamp:o,color:"#f59e0b",source_type:"run"}],events:[{event_id:`${u.plan_id}-adapter-event`,kind:"qimingclaw_adapter",occurred_at:o,message:"数字员工页面已通过 qimingclaw adapter 获取数据。"}]}}function l0(l){const s=nd(),u=ld(),o=new Set(s.selectedDutyIdsByDate[u]??[]);return o.add(l),s.selectedDutyIdsByDate[u]=[...o],s.confirmedDates[u]=s.confirmedDates[u]??new Date().toISOString(),cg(s),{ok:!0,plan_id:l,source_plan_id:l,dispatched_tasks:og(l).map(f=>({task_id:f.task_id,title:f.title,status:f.status==="pending"?"running":f.status}))}}function i0(l){const s=Rn.find(u=>u.plan_id===l)??Rn[0];return[{role:"user",content:`执行数字员工任务:${s.title}`,created_at:s.created_at},{role:"assistant",content:`已接入 qimingclaw adapter。目标:${s.objective??s.title}`,created_at:new Date().toISOString()}]}const s0=9e3,fg=2e4;class r0 extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function oa(l,s={}){const u=await $_(l,s);if(u!==void 0)return u;const{timeoutMs:o=s0,...f}=s,m=L_(),p=new Headers(f.headers),j=new AbortController;let g=!1;const y=window.setTimeout(()=>{g=!0,j.abort()},o),w=f.signal,_=()=>j.abort();w&&(w.aborted?j.abort():w.addEventListener("abort",_,{once:!0})),m&&p.set("Authorization",`Bearer ${m}`),f.body&&typeof f.body=="string"&&!p.has("Content-Type")&&p.set("Content-Type","application/json");let N;try{N=await fetch(`${ig()}${lg}${l}`,{...f,headers:p,signal:j.signal})}catch(q){throw q instanceof DOMException&&q.name==="AbortError"&&g?new Error(`API request timed out after ${o/1e3}s: ${l}`):q}finally{window.clearTimeout(y),w==null||w.removeEventListener("abort",_)}if(N.status===401)throw U_(),window.dispatchEvent(new Event("zeroclaw-unauthorized")),new r0;if(!N.ok){const q=await N.text().catch(()=>"");let M=q||N.statusText;if(q)try{const $=JSON.parse(q);typeof $.message=="string"&&$.message.trim()?M=$.message.trim():typeof $.error=="string"&&$.error.trim()&&(M=$.error.trim())}catch{M=q}throw new Error(`API ${N.status}: ${M}`)}if(N.status!==204)return N.json()}function c0(l,s){if(l!==null&&typeof l=="object"&&!Array.isArray(l)&&s in l){const u=l[s];if(u!==void 0)return u}return l}function u0(){return oa("/api/scheduler/jobs").then(l=>c0(l,"jobs"))}function sp(l){return oa(`/api/plan/${encodeURIComponent(l)}/messages`).then(s=>({messages:s.messages||[]}))}function mg(l){return oa("/api/governance/command",{method:"POST",body:JSON.stringify(l)})}function Qr(l){const s=l?`?date=${encodeURIComponent(l)}`:"";return oa(`/api/digital-employee/workday${s}`,{timeoutMs:fg})}function ai(l){return oa("/api/digital-employee/workday/actions",{method:"POST",body:JSON.stringify(l)})}function hg(l){return`${ig()}${lg}/api/digital-employee/reports/${encodeURIComponent(l)}/pdf`}function o0(l){return oa(`/api/debug/plan/${encodeURIComponent(l)}/dispatch`,{method:"POST",timeoutMs:fg})}function d0(){return oa("/api/debug/plans?limit=80").then(l=>l.plans??[])}function rp(l,s=50){const u=new URLSearchParams({limit:String(s),q:l});return oa(`/api/debug/plans?${u}`).then(o=>o.plans??[])}function f0(l){const s=new URLSearchParams({limit:"50",plan_id:l});return oa(`/api/debug/tasks?${s}`).then(u=>({tasks:u.tasks??[],runs:u.runs??[],total:u.total,truncated:u.truncated}))}function m0(l){return oa(`/api/debug/plan/${encodeURIComponent(l)}/flow`)}function h0(){return oa("/api/skill").then(l=>l.skills??[])}function p0(l,s){return oa(`/api/skill/${encodeURIComponent(l)}/enabled`,{method:"POST",body:JSON.stringify({enabled:s})})}const g0=O_,y0=`${g0}/digital-assets`,cl=`${y0}/avatars`,v0="Asia/Shanghai",b0=["skill","browser","call","redial","evidence","decision","reporting"],_0=[{id:"all",label:"全部"},{id:"running",label:"执行中"},{id:"success",label:"已完成"},{id:"danger",label:"异常"}],pg="sgrobot:digital-workday-guide-dismissed-date",x0=80,cp=300,S0=[{title:"确认日期",body:"先确认今天的值班日期,避免把昨天或明天的任务混在一起。"},{title:"选择任务",body:"从岗位职责里勾选今天要执行的任务,未接入能力保持待扩展。"},{title:"任务执行",body:"点击任务执行后,数字员工开始按已选任务推进工作。"},{title:"查看过程",body:"右侧滚动显示运行明细,任务中心可继续查看明细。"}],j0={skill:{id:"skill",label:"查看Skill",shortLabel:"技能",phase:"查看Skill与计划",src:`${cl}/states/employee-idle.png`,bubble:"我正在查看可用Skill、任务计划和今天要勾选的执行内容。"},browser:{id:"browser",label:"操作浏览器",shortLabel:"浏览器",phase:"操作浏览器执行",src:`${cl}/states/employee-browser.png`,bubble:"我正在打开页面、读取信息、填写表单,并把执行过程同步到右侧。"},call:{id:"call",label:"电话外呼",shortLabel:"外呼",phase:"电话外呼与重拨",src:`${cl}/states/employee-running.png`,bubble:"我正在按工单名单外呼现场人员,记录接通、未接通和后续重拨。"},redial:{id:"redial",label:"重拨跟进",shortLabel:"重拨",phase:"未接通人员重拨",src:`${cl}/states/employee-redial.png`,bubble:"我正在跟进未接通人员,按间隔重拨并更新每个人的通知状态。"},evidence:{id:"evidence",label:"数据核验",shortLabel:"核验",phase:"核验执行证据",src:`${cl}/states/employee-evidence.png`,bubble:"我正在核验页面数据、执行证据和任务结果,确认交付内容可信。"},decision:{id:"decision",label:"等待决策",shortLabel:"决策",phase:"等待人工确认",src:`${cl}/states/employee-decision.png`,bubble:"我已完成前置处理,现在需要人工确认后再继续推进。"},reporting:{id:"reporting",label:"汇报成果",shortLabel:"汇报",phase:"汇报今日成果",src:`${cl}/states/employee-reporting.png`,bubble:"我正在整理运行明细和日报,方便你直接查看成果和异常。"}};function $o(){const l=new Date;return[l.getFullYear(),String(l.getMonth()+1).padStart(2,"0"),String(l.getDate()).padStart(2,"0")].join("-")}function E0(l){return(l||$o()).split("-").join("/")}function Br(l){return l==="success"?"de-badge-success":l==="danger"?"de-badge-danger":l==="warning"||l==="running"?"de-badge-warning":"de-badge-info"}function w0(l,s){const u=["de-template-card-row","de-duty-card","de-duty-card--compact"];return l.implemented||u.push("de-duty-card--disabled"),s&&u.push("de-duty-card--selected"),l.statusTone==="running"&&u.push("de-duty-card--running"),u.join(" ")}function Ca(l){return String(l||"").replace(/\s+/g," ").trim()}function N0(l){if(!l)return"";if(l.expression)return l.expression;if(typeof l.schedule=="string")return l.schedule;if(l.schedule&&typeof l.schedule=="object"){const s=l.schedule,u=s.expr??s.expression??s.cron;if(typeof u=="string")return u}return""}function T0(l){const s=N0(l);if(!s)return"未定时";const u=s.trim().split(/\s+/),o=u[0]??"",f=u[1]??"";return u.length>=2&&/^\d+$/.test(o)&&/^\d+$/.test(f)?`已定时 ${f.padStart(2,"0")}:${o.padStart(2,"0")} 执行`:`调度注册 ${s}`}function Ir(l,s){if(!l||typeof l!="object")return"";const u=l;for(const o of s){const f=u[o];if(typeof f=="string"&&f.trim())return f.trim()}return""}function ti(l){const s=Ca(l.template_id);if(s)return s;const u=Ir(l.delivery,["template_id","plan_template_id","templateId"]);if(u)return u;const o=Ir(l.schedule,["template_id","plan_template_id","templateId"]);return o||l.id.replace(/^schedule-/,"")}function C0(l,s,u){return l.has(s)||u?!0:Array.from(l).some(o=>ys(o,s))}function ys(l,s){return l.startsWith(`${s}-`)?/^-\d{8,}$/.test(l.slice(s.length)):!1}function k0(l,s,u){if(l.id===s||l.conversation_id===s||ys(l.id,s)||l.conversation_id&&ys(l.conversation_id,s))return!0;const o=Ca(u).toLowerCase();return!!(o&&Ca(l.title).toLowerCase()===o)}function gg(l,s,u){const o=u.filter(f=>k0(f,l,s));return o.find(f=>f.selected)??o.find(f=>f.id===l||f.conversation_id===l)??o[0]??null}function A0(l,s){var u;return((u=gg(l.id,l.title,s))==null?void 0:u.id)??l.id}function D0(l){return typeof l.step_count=="number"&&Number.isFinite(l.step_count)?l.step_count:Array.isArray(l.skill_ids)?l.skill_ids.length:0}function z0(l){const s=Ca(l.trigger_kind||Ir(l.schedule,["kind"])).toLowerCase();return s==="cron"?"定时任务":s==="webhook"?"触发任务":"手动任务"}function M0(l,s,u){const o=ti(l),f=gg(o,l.name,s),m=D0(l),p=Array.isArray(l.skill_ids)?l.skill_ids.length:m,j=(f==null?void 0:f.status)??l.last_status??(l.enabled?"plan_template":"disabled"),g=(f==null?void 0:f.status_label)??(l.enabled?z0(l):"已停用"),y=(f==null?void 0:f.status_tone)??(l.enabled?"info":"waiting");return{id:o,planId:o,title:Ca(l.name)||o,summary:Ca(l.prompt)||`任务:${o}`,implemented:l.enabled,selectable:!0,selected:u,status:j,statusLabel:g,statusTone:y,scheduleText:(f==null?void 0:f.schedule_text)??T0(l),resultText:(f==null?void 0:f.result_text)??`${m} 个步骤,${p} 个Skill`,conversationId:(f==null?void 0:f.conversation_id)??o,stepCount:m,taskCount:p,schedulerJob:l,source:"plan_template"}}function qr(l){return l.implemented}function $r(l){return l.implemented?"":"当前任务未接入执行能力。"}function R0(l,s){const u=`${l.conversation_id??""} ${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`;return u.includes(s.id)||u.includes(s.title)}function O0(l,s){const u=s.filter(g=>R0(g,l)),o=u.filter(ic).length,f=u.filter(sc).length,m=u.filter(lc).length,p=Math.max(u.length-o-f-m,0),j=u.length>0?u[u.length-1]:void 0;return{id:l.id,plan_id:l.planId,title:l.title,description:l.summary,selected:!0,total_count:u.length,success_count:o,failure_count:f,running_count:m,waiting_count:p,latest_status_label:(j==null?void 0:j.status_label)??l.statusLabel,latest_status_tone:(j==null?void 0:j.status_tone)??l.statusTone,business_summary:u.length>0?`${l.title} 今日执行 ${u.length} 次,成功 ${o} 次,失败 ${f} 次。`:`${l.title} 尚未产生执行记录。`,ai_summary:u.length>0?`${l.title} 今日执行 ${u.length} 次,成功 ${o} 次,失败 ${f} 次。`:`${l.title} 尚未产生执行记录。`}}function L0(l,s){const u=l.plan_id??"";return l.id===s.id||u===s.planId||ys(l.id,s.id)||ys(u,s.planId)?!0:Ca(l.title).toLowerCase()===Ca(s.title).toLowerCase()}function U0(l){return{id:l.id,time:l.time,task_name:l.plan_title,step_name:l.step_title,operation_name:l.task_title,status_label:l.status_label,status_tone:l.status_tone,business_detail:Xr(l),raw_detail:l.detail,updated_at:l.updated_at,conversation_id:l.conversation_id}}function up(l){const[s="9",u="0"]=l.split(":"),o=Math.min(Math.max(Number(s)||9,0),23);return`${Math.min(Math.max(Number(u)||0,0),59)} ${o} * * *`}function op(l){return l.status_label||l.status||"已同步"}function si(l){return String(l||"").replace(/\s+/g," ").trim()}function yg(l){const u=`${l.plan_title} ${l.step_title??""}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);return u!=null&&u[1]&&u[2]?`${u[1].padStart(2,"0")}:${u[2]}`:si(l.time)||"即时触发"}function ri(l){const s=si(l);if(!s)return"";const u=new Date(s);if(Number.isNaN(u.getTime()))return"";const o=new Intl.DateTimeFormat("zh-CN",{timeZone:v0,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(u),f=m=>{var p;return((p=o.find(j=>j.type===m))==null?void 0:p.value)??""};return`${f("month")}/${f("day")} ${f("hour")}:${f("minute")}`}function id(l){const s=si(l);return s?s.length>140?`${s.slice(0,140)}...`:s:""}function H0(l){var s;return l?!l.enabled||!l.endpoint||(((s=l.missingCredentials)==null?void 0:s.length)??0)>0?"warning":l.failed>0||l.lastSyncError?"danger":l.syncing||l.pending>0?"warning":l.lastSyncAt?"success":"info":"info"}function B0(l){var s;return l?l.enabled?l.endpoint?(((s=l.missingCredentials)==null?void 0:s.length)??0)>0?"缺少凭据":l.syncing?"同步中":l.failed>0||l.lastSyncError?"同步异常":l.pending>0?"待同步":l.lastSyncAt?"已同步":"等待数据":"未配置":"已停用":"未连接"}function q0(l){var u,o;if(!l)return"当前环境未连接 qimingclaw 同步桥。";if(!l.enabled)return"管理端同步已停用。";if(!l.endpoint)return"管理端同步地址未配置。";if((((u=l.missingCredentials)==null?void 0:u.length)??0)>0)return`管理端同步凭据未完整:${(o=l.missingCredentials)==null?void 0:o.join("、")}`;const s=id(l.lastSyncError);if(l.failed>0||s){const f=l.failureSummary?[l.failureSummary.dueForRetry>0?`${l.failureSummary.dueForRetry} 条可重试`:"",l.failureSummary.backoff>0?`${l.failureSummary.backoff} 条退避中`:"",$0(l.failureSummary)].filter(Boolean).join(","):"";return[l.failed>0?`${l.failed} 条失败`:"",l.pending>0?`${l.pending} 条待同步`:"",f,s?`失败原因:${s}`:""].filter(Boolean).join(",")}return l.syncing?`正在同步,待同步 ${l.pending} 条。`:l.pending>0?`仍有 ${l.pending} 条待同步记录。`:l.lastSyncAt?`最近同步:${ri(l.lastSyncAt)||l.lastSyncAt}`:"等待本地 outbox 数据。"}function hs(l){return{plan:"Plan",task:"Task",run:"Run",event:"Event",artifact:"Artifact",approval:"Approval"}[l]||l||"Entity"}function $0(l){const s=l.byEntityType.slice(0,3).map(u=>`${hs(u.entityType)} ${u.count}`).join(" / ");return s?`类型:${s}`:""}function Y0(l){const s=id(l.error);return[`${hs(l.entityType)} / ${l.operation}`,`重试 ${l.attempts} 次`,l.dueForRetry?"等待补偿":`下次 ${vg(l)}`,s].filter(Boolean).join(" · ")}function dp(l){return ri(l.lastAttemptAt||l.updatedAt||l.createdAt)||"未尝试"}function vg(l){return l.dueForRetry?"可重试":ri(l.nextRetryAt)||"待计算"}function G0(l){return l==="synced"?"已同步":l==="failed"?"失败":l||"未知"}function Q0(l){return l==="synced"?"success":l==="failed"?"danger":"info"}async function X0(){var s;const l=(s=window.QimingClawBridge)==null?void 0:s.digital;if(!(l!=null&&l.getSyncStatus))return null;try{return await l.getSyncStatus()}catch{return null}}function bg(l){const s=ri(l.updated_at);return s||si(l.time)||"待同步"}function K0(l){return ri(l.updated_at)||si(l.time)||"--:--"}function Xr(l){const s=si(l.detail).replace(/^触发来源[::]\s*$/u,"").replace(/触发来源[::]\s*(?=。|,|,|;|;|$)/u,"").trim();return s?/^runner unavailable/i.test(s)?"执行链路异常,点击查看详情。":s.length>72?`${s.slice(0,72)}...`:s:ic(l)?"真实事件已完成,结果详情未回传。":lc(l)?"真实事件执行中,等待结果回传。":sc(l)?"执行异常,点击查看详情。":"结果详情待同步。"}function fp(l){return`计划时间 ${yg(l)} · 执行时间 ${bg(l)}`}function Z0(l,s){return s==="all"?!0:s==="running"?lc(l):s==="success"?ic(l):sc(l)}function V0(l){return new Set(l.duties.filter(s=>s.selected).map(s=>s.id))}function mp(l){return["pending","requested"].includes(String(l||"").toLowerCase())}function hp(l){if(!(l instanceof Element))return!1;if(l.closest('button, a, input, select, textarea, [role="tab"]'))return!0;const s=l.closest('[role="button"]');return!!(s&&!s.classList.contains("de-workday-execution--clickable"))}function J0(l,s){return l.length<=4?l:l.slice(s).concat(l.slice(0,s)).slice(0,4)}function lc(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("running")||s.includes("execut")||s.includes("progress")}function ic(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("success")||s.includes("complete")||s.includes("done")}function sc(l){const s=`${l.status} ${l.status_tone}`.toLowerCase();return s.includes("danger")||s.includes("fail")||s.includes("error")||s.includes("异常")}function F0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["外呼","电话","拨打","接通","未接通","重拨","人员"].some(u=>s.includes(u))}function W0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["重拨","未接通","再拨","回拨","retry","callback"].some(u=>s.includes(u))}function I0(l){const s=`${l.plan_title} ${l.task_title} ${l.step_title??""} ${l.detail}`.toLowerCase();return["核验","校验","证据","汇总","报告","结果","交付","看板","同步"].some(u=>s.includes(u))}function P0(){if(typeof window>"u")return null;const l=new URLSearchParams(window.location.search).get("visual");return b0.includes(l)?l:null}function ex(l){return W0(l)?"redial":F0(l)?"call":I0(l)?"evidence":"browser"}function tx(l){return l.currentEvent?ex(l.currentEvent):!l.confirmed&&l.eventsCount===0?"skill":l.pendingDecisionCount>0?"decision":l.eventsCount>0?"browser":"skill"}const pp="真实审批链路待接入";function ax(){if(typeof window>"u")return null;try{return window.sessionStorage.getItem(pg)}catch{return null}}function nx(l){if(!(typeof window>"u"))try{window.sessionStorage.setItem(pg,l)}catch{}}function lx({onNavigate:l}){var Qn,Pt,jl;const[s,u]=v.useState($o()),[o,f]=v.useState(null),[m,p]=v.useState([]),[j,g]=v.useState(new Set),[y,w]=v.useState(!0),[_,N]=v.useState(null),[q,M]=v.useState(null),[$,H]=v.useState(null),[Q,I]=v.useState(null),[F,ne]=v.useState(!1),[ie,me]=v.useState("selected"),[Z,ee]=v.useState(0),[Ce,st]=v.useState(!1),[Ke,oe]=v.useState(!1),[X,se]=v.useState(!1),[B,A]=v.useState(null),[Y,te]=v.useState("all"),[de,ve]=v.useState(!1),[S,R]=v.useState(null),[K,W]=v.useState(null),[re,pe]=v.useState("09:00"),[Ne,Fe]=v.useState(!1),[G,V]=v.useState(!1),[be,Re]=v.useState(null),[We,rt]=v.useState({name:"",company:"",position:"",currentStatus:"working"}),[Et,Oe]=v.useState("18:00"),[vt,Wt]=v.useState(!1),[at,It]=v.useState(()=>ax()),[nt,xs]=v.useState(null),Te=v.useRef(!1),mt=v.useRef(!1);v.useEffect(()=>(Te.current=!0,()=>{Te.current=!1}),[]);const va=v.useCallback(async()=>{let b=null,J=null;const ue=()=>{if(mt.current||!J)return;const Ze=(b==null?void 0:b.source)==="live"?V0(b):new Set,gt=J.map(Ot=>ti(Ot)).filter(Ot=>C0(Ze,Ot)),Ha=gt.length>0?gt:J.slice(0,3).map(Ot=>ti(Ot));g(new Set(Ha))},Ge=Qr(s).then(Ze=>{Te.current&&(b=Ze,f(Ze),H(null),ue())}).catch(Ze=>{Te.current&&H(Ze instanceof Error?Ze.message:"数字员工首页数据同步失败")}),pt=u0().then(Ze=>{Te.current&&(J=Ze.filter(gt=>gt.job_type==="plan_template"||Ir(gt.delivery,["mode"])==="plan_template"),p(J),I(null),ue())}).catch(Ze=>{Te.current&&I(Ze instanceof Error?Ze.message:"任务加载失败")}),Xn=X0().then(Ze=>{Te.current&&xs(Ze)});await Promise.allSettled([Ge,pt,Xn]),Te.current&&w(!1)},[s]);v.useEffect(()=>{w(!0),va()},[va]),v.useEffect(()=>{const b=o!=null&&o.workday.confirmed?8e3:3e4,J=window.setInterval(()=>{va()},b);return()=>window.clearInterval(J)},[va,o==null?void 0:o.workday.confirmed]),v.useEffect(()=>{if(Ce||Ke||X||B!==null)return;const J=window.setInterval(()=>{ee(ue=>{const Ge=(o==null?void 0:o.source)==="live"?o.events.length:0;return Ge>0?(ue+1)%Ge:0})},3200);return()=>window.clearInterval(J)},[X,Ke,Ce,B,o==null?void 0:o.events.length,o==null?void 0:o.source]);const ba=(o==null?void 0:o.source)==="live",Ln=v.useMemo(()=>ba?(o==null?void 0:o.duties)??[]:[],[ba,o==null?void 0:o.duties]),Mt=v.useMemo(()=>m.slice().sort((b,J)=>{const ue=ti(b),Ge=ti(J),pt=j.has(ue)?1:0,Xn=j.has(Ge)?1:0;if(pt!==Xn)return Xn-pt;const Ze=new Date(b.next_run||"").getTime(),gt=new Date(J.next_run||"").getTime(),Ha=Number.isFinite(Ze),Ot=Number.isFinite(gt);return Ha!==Ot?Ha?-1:1:Ha&&Ot&&Ze!==gt?Ze-gt:Ca(b.name).localeCompare(Ca(J.name),"zh-CN")}).map(b=>{const J=ti(b);return M0(b,Ln,j.has(J))}),[Ln,m,j]),Ct=v.useMemo(()=>Mt.filter(b=>j.has(b.id)),[Mt,j]),Un=v.useMemo(()=>Ct.map(b=>A0(b,Ln)),[Ln,Ct]),Aa=Mt,Hn=Mt.filter(b=>!j.has(b.id)),Da=ie==="selected"?Ct:ie==="pending"?Hn:Aa,$e=ba?(o==null?void 0:o.events)??[]:[],_a=J0($e,Z),wt=$e,an=(ba?(o==null?void 0:o.decisions)??[]:[]).filter(b=>mp(b.status)),uc=Ce||Ke||X||B!==null,ui=v.useMemo(()=>$e.filter(b=>Z0(b,Y)),[$e,Y]),ml=ui.slice(0,cp),hl=$e.filter(lc),pl=$e.filter(ic),za=$e.filter(sc),Rt=_a[0]??hl[0]??null,ze=o==null?void 0:o.employee,Ee=o==null?void 0:o.workday,gl=o==null?void 0:o.delivery,he=ba?o==null?void 0:o.daily_report:void 0,nn=ba?(Qn=o==null?void 0:o.run_details)!=null&&Qn.length?o.run_details:$e.map(U0):[],oi=nn.slice(0,x0),Ss=ba?(o==null?void 0:o.execution_summaries)??[]:[],Ma=Ct.map(b=>Ss.find(J=>L0(J,b))??O0(b,$e)),ln=E0(s),di=ie==="all"?"全部任务":ie==="pending"?"待选择任务":"今日已选任务",fi=ie==="all"?`总任务 ${Aa.length} 项,不代表当天都会执行。`:ie==="pending"?`当前日期 ${ln} 还有 ${Hn.length} 项未选择。`:`当前日期 ${ln} 已选择 ${Ct.length} 项任务。`,kt=(he==null?void 0:he.status)==="ready"?he.totals:null,js=(kt==null?void 0:kt.task_count)??Ma.length,xa=(kt==null?void 0:kt.execution_count)??Ma.reduce((b,J)=>b+J.total_count,0),ht=(kt==null?void 0:kt.success_count)??Ma.reduce((b,J)=>b+J.success_count,0),Nt=(kt==null?void 0:kt.failure_count)??Ma.reduce((b,J)=>b+J.failure_count,0),Sa=he?[he.summary,...he.detail_lines??[]].filter(b=>!!(b&&b.trim())):[],yl=(he==null?void 0:he.status)==="ready"&&Sa.length>0,Es=(Ee==null?void 0:Ee.current_status)??(ze==null?void 0:ze.current_status)??"working",oc=(Ee==null?void 0:Ee.current_status_label)??(ze==null?void 0:ze.current_status_label)??(Es==="resting"?"休息中":"工作中"),vl=Es==="resting",sn=(o==null?void 0:o.source)==="demo",Bn=sn?"演示兜底":"真实数据",Ra=sn?"de-badge-warning":"de-badge-success",Oa=H0(nt),qn=B0(nt),La=q0(nt),ct=id(nt==null?void 0:nt.lastSyncError),mi=(nt==null?void 0:nt.recentFailures)??[],ws=tx({confirmed:!!(Ee!=null&&Ee.confirmed),currentEvent:Rt,pendingDecisionCount:an.length,eventsCount:$e.length}),ja=P0(),Yn=j0[ja??ws],Ns=ja||Rt||an.length>0?Yn.bubble:(Ee==null?void 0:Ee.bubble_text)??Yn.bubble,Ts=Aa.length>0?`已加载 ${Aa.length} 项任务,当前选择 ${Ct.length} 项;右侧展示真实执行状态、运行明细和日报。`:(Ee==null?void 0:Ee.summary)??"等待同步当天任务计划。",dc=(Rt==null?void 0:Rt.task_title)??(Ee!=null&&Ee.confirmed?"等待下一条执行事件":"等待确认任务设置"),bl=Rt?`${Rt.plan_title}:${Xr(Rt)}(${fp(Rt)})`:"任务执行后会显示正在处理的任务、步骤或汇总动作。",_l=an[0]?`等待人工确认:${an[0].title}`:Ee!=null&&Ee.confirmed?(gl==null?void 0:gl.lines[0])??"继续按计划轮询新工单,并把结果同步到运行明细。":"请先确认今天要执行的任务,确认后数字员工会开始执行。",da=!!(o&&!(Ee!=null&&Ee.confirmed));v.useEffect(()=>{if(!(y||!o)&&o.workday.confirmed){Wt(!1);return}},[at,y,s,o]),v.useEffect(()=>{ze&&rt({name:ze.name||"",company:ze.company||"",position:ze.position||ze.major||"",currentStatus:ze.current_status||(Ee==null?void 0:Ee.current_status)||"working"})},[ze,Ee==null?void 0:Ee.current_status]),v.useEffect(()=>{Oe((he==null?void 0:he.report_schedule_time)||"18:00")},[he==null?void 0:he.report_schedule_time]),v.useEffect(()=>{V(!1)},[s]);const At=v.useCallback(b=>{!b.selectable||!b.implemented||(g(J=>{const ue=new Set(J);return ue.has(b.id)?ue.delete(b.id):ue.add(b.id),ue}),mt.current=!0,ne(!0),M(null))},[]),hi=v.useCallback(async()=>{if(j.size===0){H("请至少选择一项今天要执行的任务。");return}if(vl){H("当前状态为休息中,请切换为工作中后再执行任务。");return}N("confirm_workday"),H(null),M(null);try{const b=await ai({action:"confirm_workday",date:s,duty_ids:Un});if(!Te.current)return;f(b),g(new Set(j)),mt.current=!0,ne(!1),Wt(!1),M("任务设置已确认,数字员工开始按任务执行。")}catch(b){Te.current&&H(b instanceof Error?b.message:"确认任务设置失败")}finally{Te.current&&N(null)}},[vl,s,j,Un]),Cs=v.useCallback(async()=>{var b;N("flush_management_sync"),H(null),M(null);try{const J=(b=window.QimingClawBridge)==null?void 0:b.digital;if(!(J!=null&&J.flushSync)){M("当前环境未连接 qimingclaw 同步桥。");return}const ue=await J.flushSync();if(!Te.current)return;xs(ue);const Ge=await Qr(s);if(!Te.current)return;f(Ge);const pt=ue.failed>0?`同步完成,仍有 ${ue.failed} 条失败记录。`:ue.pending>0?`同步完成,仍有 ${ue.pending} 条待同步记录。`:"管理端同步完成。";M(pt)}catch(J){Te.current&&H(J instanceof Error?J.message:"同步管理端失败")}finally{Te.current&&N(null)}},[s]),pi=v.useCallback(()=>{g(new Set),mt.current=!0,ne(!0),M("已一键取消当前选择,重新选择后点击任务执行生效。"),H(null)},[]),ks=v.useCallback(async()=>{N("update_profile"),H(null),M(null);try{const b=await ai({action:"update_profile",date:s,name:We.name,company:We.company,position:We.position,current_status:We.currentStatus});if(!Te.current)return;f(b),Fe(!1),M("数字员工特性设置已保存。")}catch(b){Te.current&&H(b instanceof Error?b.message:"保存特性设置失败")}finally{Te.current&&N(null)}},[We,s]),xl=v.useCallback(async()=>{N("update_report_schedule"),H(null),M(null);try{const b=await ai({action:"update_report_schedule",date:s,report_schedule_time:Et});if(!Te.current)return;f(b),M(`日报生成时间已设置为 ${Et}。`)}catch(b){Te.current&&H(b instanceof Error?b.message:"设置日报时间失败")}finally{Te.current&&N(null)}},[Et,s]),fc=v.useCallback(async()=>{var b,J;N("generate_daily_report"),H(null),M(null);try{const ue=await ai({action:"generate_daily_report",date:s,duty_ids:Un,report_schedule_time:Et});if(!Te.current)return;const Ge=((b=ue.daily_report)==null?void 0:b.status)==="ready"?ue:await Qr(s);if(!Te.current)return;f(Ge),M("日报已生成,可下载 PDF。"),((J=Ge.daily_report)==null?void 0:J.status)==="ready"&&V(!0)}catch(ue){Te.current&&H(ue instanceof Error?ue.message:"生成日报失败")}finally{Te.current&&N(null)}},[Et,s,j,Un]),Dt=v.useCallback(()=>{window.open(hg(s),"_blank","noopener,noreferrer")},[s]),gi=v.useCallback(async(b,J)=>{var ue;N(`${b.id}:${J}`),H(null),M(null);try{if(!Te.current)return;const Ge=((ue=b.actions.find(pt=>pt.id===J))==null?void 0:ue.label)??J;M(`待实现:已触发“${Ge}”演示效果,${pp},未改动后端审批或执行状态。`)}catch(Ge){Te.current&&H(Ge instanceof Error?Ge.message:"处理决策失败")}finally{Te.current&&N(null)}},[]),Gn=v.useCallback(b=>{l({tab:"missions",date:s,missionId:b.conversationId||b.id})},[l,s]),yi=v.useCallback(async b=>{const J=up(re),ue=Date.now(),Ge=`digital-home-${b.planId}-${re.replace(":","")}`;N(`schedule:${b.id}`),H(null),M(null);try{const pt=await mg({command_kind:"create_schedule",context_refs:{plan_id:b.planId,schedule_id:Ge},payload:{source:"digital-home",plan_id:b.planId,name:`定时执行:${b.title}`,description:`按首页任务管理定时任务:${b.title}`,prompt:`请按计划执行:${b.title}。${b.summary}`,cron_expr:J,schedule:J},correlation_id:`digital-home-create-schedule-${b.planId}-${ue}`,idempotency_key:`digital-home-create-schedule-${b.planId}-${re}-${ue}`});if(!pt.accepted)throw new Error(pt.message||`调度命令未被接受:${pt.command_id||"create_schedule"}`);R(null),M(`已提交定时:${b.title},${re} 按 cron 计划执行。`),await va()}catch(pt){Te.current&&H(pt instanceof Error?pt.message:"定时执行失败")}finally{Te.current&&N(null)}},[va,re]),rn=v.useCallback(async b=>{var J;if(!qr(b)){H($r(b)),M(null);return}N(`execute:${b.id}`),H(null),M(null);try{const ue=await o0(b.planId);if(ue.ok!==!0)throw new Error(ue.error||"执行接口未接受请求");const Ge=((J=ue.dispatched_tasks)==null?void 0:J.length)??0;W(null),M(`已触发执行:${b.title},已派发 ${Ge} 个步骤。`),await va()}catch(ue){Te.current&&H(ue instanceof Error?ue.message:"执行失败")}finally{Te.current&&N(null)}},[va]),Sl=v.useCallback(()=>{Wt(!1),It(s),nx(s)},[s]),vi=v.useCallback((b,J)=>{const ue=j.has(b.id),Ge=$r(b);return r.jsxs("div",{className:`${w0(b,ue)} ${J==="guide"?"de-duty-card--guide":""}`,title:b.summary,children:[r.jsxs("label",{className:"de-task-manager-duty-check",children:[r.jsx("input",{type:"checkbox",checked:ue,disabled:!b.selectable||!b.implemented,onChange:()=>At(b)}),r.jsx("span",{children:ue?"已选":b.implemented?"未选":"待扩展"})]}),r.jsxs("div",{className:"de-template-card-main",children:[r.jsxs("div",{className:"de-template-card-head",children:[r.jsx("span",{className:"de-template-card-name",children:b.title}),r.jsx("span",{className:`de-badge ${Br(b.statusTone)}`,children:b.implemented?b.statusLabel:"待扩展"})]}),r.jsx("p",{className:"de-template-card-desc",children:b.summary}),r.jsxs("div",{className:"de-template-card-meta",children:[r.jsx("span",{children:b.scheduleText}),r.jsx("span",{children:b.resultText})]}),r.jsxs("div",{className:"de-duty-card-foot",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented,onClick:()=>Gn(b),children:"进入处理"}),r.jsxs("div",{className:"de-duty-card-actions",children:[r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||_===`schedule:${b.id}`,onClick:()=>R(b),children:[r.jsx(np,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"定时"})]}),r.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||_===`execute:${b.id}`,title:Ge||"立即执行此任务",onClick:()=>W(b),children:[r.jsx(ap,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"执行"})]})]}),!b.implemented&&r.jsx("span",{className:"de-duty-selected-mark",children:"待扩展"})]})]})]},`${J}-${b.id}`)},[_,Gn,j,At]),cn=v.useCallback(b=>{A(b),oe(!0)},[]),bi=v.useCallback(()=>{A(null),oe(!1)},[]),_i=v.useCallback(()=>{se(!1),oe(!1)},[]),Ua=v.useCallback(()=>{se(!0),oe(!0)},[]),xi=v.useCallback(b=>{hp(b.target)||Ua()},[Ua]),mc=v.useCallback(b=>{b.key!=="Enter"&&b.key!==" "||hp(b.target)||(b.preventDefault(),Ua())},[Ua]),hc=v.useCallback(b=>{A(null),se(!1),oe(!1),l({tab:"missions",date:s,missionId:b.conversation_id||b.id})},[l,s]);return r.jsxs("div",{className:"de-dashboard de-dashboard--compact",style:{position:"relative",height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[r.jsx("div",{className:"de-connection-layer","aria-hidden":"true",children:r.jsxs("svg",{className:"de-connection-svg",viewBox:"0 0 1200 800",preserveAspectRatio:"none",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"connGrad1",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[r.jsx("stop",{offset:"0%",stopColor:"rgba(79,172,254,0.25)"}),r.jsx("stop",{offset:"100%",stopColor:"rgba(0,242,254,0.1)"})]}),r.jsx("filter",{id:"connGlow",children:r.jsx("feGaussianBlur",{stdDeviation:"3"})})]}),r.jsx("path",{d:"M 80 180 Q 420 400, 580 350",stroke:"url(#connGrad1)",strokeWidth:"1.5",fill:"none",filter:"url(#connGlow)"}),r.jsx("path",{d:"M 120 620 Q 380 400, 560 380",stroke:"url(#connGrad1)",strokeWidth:"1.2",fill:"none",filter:"url(#connGlow)"}),r.jsx("path",{d:"M 640 360 Q 780 200, 1100 160",stroke:"url(#connGrad1)",strokeWidth:"1.3",fill:"none",filter:"url(#connGlow)"})]})}),r.jsxs("div",{className:"de-dashboard-content",children:[r.jsxs("div",{className:"de-dashboard-left",children:[r.jsxs("div",{className:"de-card de-person-card de-person-card--compact",children:[r.jsxs("div",{className:"de-card-title-bar",children:[r.jsx("span",{className:"de-card-title-bar-text",children:"数字员工"}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Fe(!0),children:"特性设置"})]}),r.jsx("div",{className:"de-card-body",children:r.jsxs("div",{className:"de-info-grid",children:[r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"姓名"}),r.jsx("span",{children:(ze==null?void 0:ze.name)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"单位"}),r.jsx("span",{children:(ze==null?void 0:ze.company)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"岗位"}),r.jsx("span",{children:(ze==null?void 0:ze.position)??(ze==null?void 0:ze.major)??"同步中"})]}),r.jsxs("div",{className:"de-info-item",children:[r.jsx("label",{children:"当前状态"}),r.jsx("span",{className:vl?"de-status-resting":"de-status-working",children:oc})]})]})})]}),r.jsxs("div",{className:"de-card de-template-manager-card",children:[r.jsx("div",{className:"de-card-title-bar",children:r.jsx("span",{className:"de-card-title-bar-text",children:"任务设置"})}),r.jsxs("div",{className:"de-card-body de-template-manager-body",children:[r.jsxs("div",{className:"de-workday-toolbar",children:[r.jsxs("label",{children:[r.jsx("span",{children:"日期"}),r.jsx("input",{type:"date",value:s,onChange:b=>{mt.current=!1,ne(!1),M(null),u(b.target.value||$o())}})]}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:y,onClick:()=>ve(!0),children:"任务设置"}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:y||_==="flush_management_sync",onClick:Cs,title:"立即同步数字员工本地状态到管理端",children:[r.jsx(C_,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:_==="flush_management_sync"?"同步中...":"同步管理端"})]})]}),r.jsxs("div",{className:`de-management-sync-strip de-management-sync-strip--${Oa}`,title:ct||La,children:[r.jsx("span",{className:`de-badge ${Br(Oa)}`,children:qn}),r.jsx("span",{children:La})]}),mi.length>0&&r.jsx("div",{className:"de-management-sync-failures","aria-label":"同步失败明细",children:mi.map(b=>r.jsxs("button",{type:"button",className:"de-management-sync-failure",title:b.error||b.id,onClick:()=>Re(b),children:[r.jsx("span",{children:dp(b)}),r.jsx("strong",{children:hs(b.entityType)}),r.jsx("em",{children:b.id}),r.jsx("small",{children:Y0(b)})]},b.id))}),(q||$||Q||(o==null?void 0:o.demo_reason))&&r.jsx("div",{className:`de-schedule-result ${$?"de-schedule-result--error":"de-schedule-result--success"}`,style:{marginBottom:10},children:$||q||Q||(o==null?void 0:o.demo_reason)}),F&&!q&&!$&&r.jsx("div",{className:"de-schedule-result de-schedule-result--success",style:{marginBottom:10},children:"当前选择尚未确认,自动刷新不会覆盖你的勾选。"}),r.jsxs("div",{className:"de-template-overview",children:[r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--total ${ie==="all"?"active":""}`,onClick:()=>me("all"),children:[r.jsx("span",{className:"de-template-overview-label",children:"总任务"}),r.jsx("span",{className:"de-template-overview-value",children:Aa.length})]}),r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--scheduled ${ie==="selected"?"active":""}`,onClick:()=>me("selected"),children:[r.jsx("span",{className:"de-template-overview-label",children:"已选择"}),r.jsx("span",{className:"de-template-overview-value",children:Ct.length})]}),r.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--runnable ${ie==="pending"?"active":""}`,onClick:()=>me("pending"),children:[r.jsx("span",{className:"de-template-overview-label",children:"待选择"}),r.jsx("span",{className:"de-template-overview-value",children:Hn.length})]})]}),r.jsxs("div",{className:"de-task-date-context",children:[r.jsxs("span",{children:["当前日期 ",ln]}),r.jsx("em",{children:fi}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:pi,disabled:Ct.length===0,children:"一键取消"})]}),r.jsxs("div",{className:"de-task-manager-preview de-task-manager-preview-scroll de-template-task-list",children:[r.jsxs("div",{className:"de-task-manager-preview-head",children:[r.jsx("span",{children:ln}),r.jsxs("strong",{children:[di," ",Da.length]})]}),y?r.jsx("div",{className:"de-loading-skeleton",style:{height:96}}):Mt.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会再展示硬编码任务。"}):Da.length===0?r.jsx("p",{className:"de-empty-text",children:"当前筛选下暂无任务,点击总任务查看全部内容。"}):Da.map(b=>r.jsxs("div",{className:`de-task-manager-preview-row ${j.has(b.id)?"is-selected":""}`,title:b.summary,children:[r.jsxs("button",{type:"button",className:"de-template-task-main",onClick:()=>Gn(b),children:[r.jsx("strong",{children:b.title}),r.jsx("span",{children:b.resultText})]}),r.jsxs("div",{className:"de-template-item-actions",children:[r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||_===`schedule:${b.id}`,onClick:()=>R(b),children:[r.jsx(np,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"定时"})]}),r.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||_===`execute:${b.id}`,title:$r(b)||"立即执行此任务",onClick:()=>W(b),children:[r.jsx(ap,{size:13,"aria-hidden":"true"}),r.jsx("span",{children:"执行"})]})]})]},b.id))]})]})]})]}),r.jsxs("div",{className:"de-dashboard-center",style:{justifyContent:"center",padding:"0 0 16px",overflow:"visible"},children:[r.jsx("div",{className:"de-avatar-wrapper",style:{minHeight:470,maxWidth:560,transform:"translateY(-6px)",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:r.jsx(R_,{avatarSrc:Yn.src,altText:`数字员工-${Yn.label}`,statusLabel:Yn.label})}),r.jsxs("div",{className:"de-speech-bubble de-speech-bubble--employee",style:{top:"38%",left:"29%",right:"auto",transform:"translateX(-50%)",width:268,padding:"10px 12px",zIndex:16},children:[r.jsx("span",{className:"de-speech-label",children:"数字员工播报"}),r.jsx("p",{className:"de-speech-text",children:Ns}),r.jsxs("button",{type:"button",className:"de-speech-workflow de-execution-detail-trigger",onClick:Ua,title:"打开运行明细",children:[r.jsx("span",{children:"当前动作"}),r.jsx("strong",{children:dc}),r.jsx("small",{children:bl}),r.jsx("span",{children:"下一步"}),r.jsx("small",{children:_l})]})]})]}),r.jsx("div",{className:"de-dashboard-right",children:r.jsxs("div",{className:"de-right-panels",children:[r.jsxs("div",{className:"de-workbench de-workday-execution de-workday-execution--clickable",role:"button",tabIndex:0,"aria-label":"打开运行明细",title:"打开运行明细",onClick:xi,onKeyDown:mc,children:[r.jsxs("div",{className:"de-card-title-bar de-workbench-head de-workbench-head--bar",children:[r.jsx("div",{className:"de-workbench-title-row",children:r.jsx("h3",{children:"今日执行"})}),r.jsx("span",{className:`de-badge ${Ra}`,children:Bn})]}),r.jsxs("div",{className:"de-workday-execution-body","aria-live":"polite",children:[r.jsxs("div",{className:"de-execution-status-strip",children:[r.jsxs("span",{children:[r.jsx("em",{children:"已选任务"}),r.jsx("strong",{children:Ct.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"运行记录"}),r.jsx("strong",{children:wt.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"已完成"}),r.jsx("strong",{children:pl.length})]}),r.jsxs("span",{children:[r.jsx("em",{children:"异常"}),r.jsx("strong",{children:za.length})]})]}),r.jsx("div",{className:"de-task-summary-scroll",children:r.jsx("div",{className:"de-task-summary-grid","aria-label":"任务执行汇总",children:Ma.length===0?r.jsx("p",{className:"de-empty-text",children:"左侧选择任务后,这里会按任务生成执行次数和成功情况。"}):Ma.map(b=>r.jsxs("button",{type:"button",className:`de-task-summary-card de-live-feed-row--${b.latest_status_tone||"info"}`,onClick:()=>Gn(Ct.find(J=>J.id===b.id)??Ct[0]),title:[b.description,b.ai_summary||b.business_summary].filter(Boolean).join(` `),children:[r.jsx("span",{className:"de-task-summary-title",children:b.title}),r.jsx("span",{className:`de-badge ${Br(b.latest_status_tone)}`,children:b.latest_status_label}),r.jsxs("div",{className:"de-task-summary-counts",children:[r.jsxs("span",{children:[r.jsx("em",{children:"执行"}),r.jsx("strong",{children:b.total_count})]}),r.jsxs("span",{children:[r.jsx("em",{children:"成功"}),r.jsx("strong",{children:b.success_count})]}),r.jsxs("span",{children:[r.jsx("em",{children:"失败"}),r.jsx("strong",{children:b.failure_count})]})]})]},b.id))})}),r.jsxs("div",{className:"de-stage-feed-tools",children:[r.jsxs("span",{children:["展示 ",wt.length," / 共 ",$e.length," 条",uc?" · 已暂停":" · 自动滚动"]}),r.jsxs("div",{children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>st(b=>!b),children:Ce?"继续滚动":"暂停滚动"}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Ua,children:"查看全部记录"})]})]}),r.jsxs("div",{className:"de-run-detail-panel",children:[r.jsxs("div",{className:"de-run-detail-head",children:[r.jsx("span",{children:"运行明细"}),r.jsxs("small",{children:["展示 ",oi.length," / 共 ",nn.length," 条"]})]}),r.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"运行明细",children:[r.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[r.jsx("span",{children:"时间"}),r.jsx("span",{children:"任务名称"}),r.jsx("span",{children:"步骤名称"}),r.jsx("span",{children:"执行状态"}),r.jsx("span",{children:"结果"})]}),oi.length===0?r.jsx("p",{className:"de-empty-text",children:"任务执行后,这里会滚动显示每个步骤的时间、任务、步骤和结果。"}):oi.map(b=>r.jsxs("button",{type:"button",className:`de-run-detail-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{const J=$e.find(ue=>ue.id===b.id);J&&cn(J)},title:b.business_detail,children:[r.jsx("span",{children:K0(b)}),r.jsx("strong",{children:b.task_name}),r.jsx("span",{children:b.step_name||b.operation_name||"执行步骤"}),r.jsx("span",{children:r.jsx("i",{className:`de-badge ${Br(b.status_tone)}`,children:b.status_label})}),r.jsx("em",{children:b.business_detail})]},b.id))]})]})]})]}),r.jsxs("div",{className:"de-report-summary",children:[r.jsxs("div",{className:"de-card-title-bar de-report-summary-head de-report-summary-head--bar",children:[r.jsx("div",{className:"de-report-summary-title-row",children:r.jsx("h3",{children:"日报生成"})}),r.jsx("span",{className:`de-report-badge ${(he==null?void 0:he.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}`,children:(he==null?void 0:he.status)==="ready"?"已生成":"待生成"})]}),r.jsxs("div",{className:"de-report-summary-body",children:[r.jsxs("div",{className:"de-report-schedule-row",children:[r.jsxs("label",{children:[r.jsx("span",{children:"生成时间"}),r.jsx("input",{type:"time",value:Et,onChange:b=>Oe(b.target.value||"18:00")})]}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_==="update_report_schedule",onClick:()=>{xl()},children:"设置时间"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="generate_daily_report",onClick:()=>{fc()},children:_==="generate_daily_report"?"生成中...":"生成日报"}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-preview-btn",disabled:!yl,onClick:()=>V(!0),title:yl?"预览日报文字内容":"生成日报后可预览文字内容",children:[r.jsx(lp,{size:14,"aria-hidden":"true"}),"预览日报"]}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(he!=null&&he.pdf_available),onClick:Dt,title:he!=null&&he.pdf_available?"下载日报 PDF":"生成日报后可下载日报 PDF",children:[r.jsx(Bo,{size:14,"aria-hidden":"true"}),"下载日报"]})]}),r.jsxs("div",{className:"de-report-meta",children:[r.jsx("p",{children:(he==null?void 0:he.summary)??"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),((he==null?void 0:he.detail_lines)??[]).slice(0,3).map(b=>r.jsx("p",{children:b},b))]})]})]})]})})]}),G&&he&&r.jsx("div",{className:"de-task-manager-modal-overlay de-report-preview-overlay",role:"presentation",onClick:()=>V(!1),children:r.jsxs("div",{className:"de-report-preview-modal",role:"dialog","aria-modal":"true","aria-label":"日报预览",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"DAILY REPORT"}),r.jsx("h3",{children:he.title||"数字员工日报"}),r.jsxs("p",{children:[ln," 生成时间 ",he.report_schedule_time,",来源:",he.generated_by==="ai"?"AI 生成":"规则兜底"]})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>V(!1),children:"×"})]}),r.jsxs("div",{className:"de-report-preview-summary",children:[r.jsxs("div",{children:[r.jsx("span",{children:"任务总数"}),r.jsx("strong",{children:js})]}),r.jsxs("div",{children:[r.jsx("span",{children:"执行次数"}),r.jsx("strong",{children:xa})]}),r.jsxs("div",{children:[r.jsx("span",{children:"成功次数"}),r.jsx("strong",{children:ht})]}),r.jsxs("div",{children:[r.jsx("span",{children:"失败次数"}),r.jsx("strong",{children:Nt})]})]}),r.jsx("div",{className:"de-report-preview-content",children:Sa.length===0?r.jsx("p",{className:"de-empty-text",children:"当前日报暂无可预览文字。"}):Sa.map((b,J)=>r.jsx("p",{children:b},`${J}-${b}`))}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>V(!1),children:"关闭"}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!he.pdf_available,onClick:Dt,children:[r.jsx(Bo,{size:14,"aria-hidden":"true"}),"下载日报"]})]})]})}),Ne&&r.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>Fe(!1),children:r.jsxs("div",{className:"de-profile-settings-modal",role:"dialog","aria-modal":"true","aria-label":"数字员工特性设置",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"PROFILE"}),r.jsx("h3",{children:"特性设置"}),r.jsx("p",{children:"维护数字员工在首页展示的姓名、单位、岗位和当前状态。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Fe(!1),children:"×"})]}),r.jsxs("div",{className:"de-profile-settings-grid",children:[r.jsxs("label",{children:[r.jsx("span",{children:"姓名"}),r.jsx("input",{value:We.name,onChange:b=>rt(J=>({...J,name:b.target.value}))})]}),r.jsxs("label",{children:[r.jsx("span",{children:"单位"}),r.jsx("input",{value:We.company,onChange:b=>rt(J=>({...J,company:b.target.value}))})]}),r.jsxs("label",{children:[r.jsx("span",{children:"岗位"}),r.jsx("input",{value:We.position,onChange:b=>rt(J=>({...J,position:b.target.value}))})]}),r.jsxs("div",{className:"de-profile-status-toggle",children:[r.jsx("span",{children:"当前状态"}),r.jsxs("div",{children:[r.jsx("button",{type:"button",className:We.currentStatus==="working"?"active":"",onClick:()=>rt(b=>({...b,currentStatus:"working"})),children:"工作中"}),r.jsx("button",{type:"button",className:We.currentStatus==="resting"?"active":"",onClick:()=>rt(b=>({...b,currentStatus:"resting"})),children:"休息中"})]})]})]}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Fe(!1),children:"取消"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="update_profile",onClick:()=>{ks()},children:_==="update_profile"?"保存中...":"保存设置"})]})]})}),be&&r.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>Re(null),children:r.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"同步失败详情",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"SYNC FAILURE"}),r.jsx("h3",{children:"同步失败详情"}),r.jsxs("p",{children:[hs(be.entityType)," / ",be.operation]})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Re(null),children:"×"})]}),r.jsxs("div",{className:"de-event-detail-grid",children:[r.jsxs("div",{children:[r.jsx("span",{children:"Outbox"}),r.jsx("strong",{children:be.id})]}),r.jsxs("div",{children:[r.jsx("span",{children:"实体"}),r.jsx("strong",{children:be.entityId})]}),r.jsxs("div",{children:[r.jsx("span",{children:"类型"}),r.jsx("strong",{children:hs(be.entityType)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"操作"}),r.jsx("strong",{children:be.operation})]}),r.jsxs("div",{children:[r.jsx("span",{children:"重试"}),r.jsxs("strong",{children:[be.attempts," 次"]})]}),r.jsxs("div",{children:[r.jsx("span",{children:"上次尝试"}),r.jsx("strong",{children:dp(be)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"下次重试"}),r.jsx("strong",{children:vg(be)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"状态"}),r.jsx("strong",{children:be.dueForRetry?"等待补偿":"退避中"})]})]}),r.jsxs("div",{className:"de-event-detail-result",children:[r.jsx("span",{children:"失败原因"}),r.jsx("p",{children:be.error||"暂无错误详情。"})]}),(((Pt=be.attemptHistory)==null?void 0:Pt.length)??0)>0&&r.jsxs("div",{className:"de-sync-attempt-history",children:[r.jsx("span",{children:"重试历史"}),r.jsx("div",{className:"de-sync-attempt-list",children:(jl=be.attemptHistory)==null?void 0:jl.map(b=>r.jsxs("div",{className:`de-sync-attempt-row de-sync-attempt-row--${Q0(b.status)}`,children:[r.jsxs("div",{children:[r.jsxs("strong",{children:["第 ",b.attemptNo," 次"]}),r.jsx("em",{children:G0(b.status)}),r.jsx("span",{children:ri(b.finishedAt)||b.finishedAt})]}),b.error&&r.jsx("small",{children:b.error})]},`${b.attemptNo}-${b.finishedAt}`))})]}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Re(null),children:"关闭"}),be.managementRecordUrl&&r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>window.open(be.managementRecordUrl||"","_blank","noopener,noreferrer"),children:[r.jsx(lp,{size:14}),"查看管理端记录"]}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="flush_management_sync",onClick:()=>{Cs().then(()=>Re(null))},children:_==="flush_management_sync"?"同步中...":"立即重试"})]})]})}),B&&r.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:bi,children:r.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"执行记录详情",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION DETAIL"}),r.jsx("h3",{children:"执行记录详情"}),r.jsx("p",{children:"这条记录已被锁定,滚动不会把它刷掉。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:bi,children:"×"})]}),r.jsxs("div",{className:"de-event-detail-grid",children:[r.jsxs("div",{children:[r.jsx("span",{children:"业务"}),r.jsx("strong",{children:B.plan_title})]}),r.jsxs("div",{children:[r.jsx("span",{children:"操作"}),r.jsx("strong",{children:B.task_title})]}),r.jsxs("div",{children:[r.jsx("span",{children:"状态"}),r.jsx("strong",{children:op(B)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"计划时间"}),r.jsx("strong",{children:yg(B)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"执行时间"}),r.jsx("strong",{children:bg(B)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"数据来源"}),r.jsx("strong",{children:Bn})]})]}),r.jsxs("div",{className:"de-event-detail-result",children:[r.jsx("span",{children:"操作结果"}),r.jsx("p",{children:Xr(B)})]}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:bi,children:"关闭"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>hc(B),children:"打开任务中心详情"})]})]})}),X&&r.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:_i,children:r.jsxs("div",{className:"de-event-history-modal",role:"dialog","aria-modal":"true","aria-label":"全部执行记录",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION HISTORY"}),r.jsx("h3",{children:"运行明细"}),r.jsxs("p",{children:["当前日期共 ",$e.length," 条记录,本窗口展示最新 ",Math.min(ui.length,cp)," 条。"]})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:_i,children:"×"})]}),r.jsx("div",{className:"de-event-history-toolbar",children:_0.map(b=>r.jsx("button",{type:"button",className:`de-filter-chip ${Y===b.id?"active":""}`,onClick:()=>te(b.id),children:b.label},b.id))}),r.jsx("div",{className:"de-event-history-list",children:ui.length===0?r.jsx("p",{className:"de-empty-text",children:"当前筛选下没有执行记录。"}):ml.map(b=>r.jsxs("button",{type:"button",className:`de-event-history-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{A(b),se(!1),oe(!0)},children:[r.jsxs("span",{children:[r.jsx("em",{children:"业务"}),r.jsx("strong",{children:b.plan_title})]}),r.jsxs("span",{children:[r.jsx("em",{children:"操作"}),r.jsx("strong",{children:b.task_title})]}),r.jsxs("span",{children:[r.jsx("em",{children:"状态"}),r.jsx("strong",{children:op(b)})]}),r.jsxs("span",{children:[r.jsx("em",{children:"操作结果"}),r.jsx("strong",{children:Xr(b)}),r.jsx("small",{children:fp(b)})]})]},b.id))})]})}),S&&r.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>R(null),children:r.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"定时任务",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN SCHEDULE"}),r.jsx("h3",{children:"定时任务"}),r.jsx("p",{children:"定时会把任务注册到后端调度链路,每天按设置时间自动派发。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>R(null),children:"×"})]}),r.jsxs("div",{className:"de-plan-action-body",children:[r.jsxs("div",{className:"de-event-detail-result",children:[r.jsx("span",{children:"任务"}),r.jsx("p",{children:S.title})]}),r.jsxs("label",{className:"de-plan-action-field",children:[r.jsx("span",{children:"每日定时时间"}),r.jsx("input",{type:"time",value:re,onChange:b=>pe(b.target.value||"09:00")})]}),r.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[r.jsxs("div",{children:[r.jsx("span",{children:"调度注册"}),r.jsx("strong",{children:up(re)})]}),r.jsxs("div",{children:[r.jsx("span",{children:"任务步骤"}),r.jsxs("strong",{children:[S.stepCount," 步"]})]}),r.jsxs("div",{children:[r.jsx("span",{children:"执行步骤"}),r.jsxs("strong",{children:[S.taskCount," 项"]})]})]}),r.jsx("div",{className:"de-schedule-result de-schedule-result--success",children:"这里不是本地假定时;提交后如果后端调度链路不可用,会直接显示真实失败原因。"})]}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>R(null),children:"取消"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_===`schedule:${S.id}`,onClick:()=>{yi(S)},children:_===`schedule:${S.id}`?"注册中...":"确认定时"})]})]})}),K&&r.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>W(null),children:r.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"执行任务",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN EXECUTION"}),r.jsx("h3",{children:"执行任务"}),r.jsx("p",{children:"确认后立即创建并派发任务步骤,不需要先进入任务中心设置。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>W(null),children:"×"})]}),r.jsxs("div",{className:"de-plan-action-body",children:[r.jsxs("div",{className:"de-event-detail-result",children:[r.jsx("span",{children:"任务"}),r.jsx("p",{children:K.title})]}),r.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[r.jsxs("div",{children:[r.jsx("span",{children:"当前状态"}),r.jsx("strong",{children:K.statusLabel})]}),r.jsxs("div",{children:[r.jsx("span",{children:"任务步骤"}),r.jsxs("strong",{children:[K.stepCount," 步"]})]}),r.jsxs("div",{children:[r.jsx("span",{children:"执行步骤"}),r.jsxs("strong",{children:[K.taskCount," 项"]})]})]}),r.jsx("div",{className:`de-schedule-result ${qr(K)?"de-schedule-result--success":"de-schedule-result--pending"}`,children:qr(K)?"确认后立即调用后端派发接口,按任务步骤进入真实执行链路。":$r(K)})]}),r.jsxs("div",{className:"de-event-modal-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>W(null),children:"取消"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_===`execute:${K.id}`||!qr(K),onClick:()=>{rn(K)},children:_===`execute:${K.id}`?"触发中...":"确认执行"})]})]})}),vt&&da&&r.jsx("div",{className:"de-task-manager-modal-overlay de-workday-guide-overlay",role:"presentation",onClick:Sl,children:r.jsxs("div",{className:"de-task-manager-modal de-workday-guide-modal",role:"dialog","aria-modal":"true","aria-label":"开始今天的任务",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head de-workday-guide-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"WORKDAY START"}),r.jsx("h3",{children:"开始今天的任务"}),r.jsx("p",{children:"像值班员早上交接一样,先确认日期和执行内容,再让数字员工开始接单、外呼、汇总和汇报。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:Sl,children:"×"})]}),r.jsx("div",{className:"de-workday-guide-steps","aria-label":"开工引导步骤",children:S0.map((b,J)=>r.jsxs("div",{className:"de-workday-guide-step",children:[r.jsx("span",{children:J+1}),r.jsx("strong",{children:b.title}),r.jsx("p",{children:b.body})]},b.title))}),r.jsxs("div",{className:"de-workday-guide-body",children:[r.jsxs("section",{className:"de-task-manager-column de-workday-guide-column",children:[r.jsxs("div",{className:"de-task-manager-section-head",children:[r.jsxs("div",{children:[r.jsx("strong",{children:"选择今天要执行的任务"}),r.jsxs("span",{children:[Ct.length," 项已选,",Aa.length," 项总任务,",Hn.length," 项待选择"]})]}),r.jsx("span",{className:`de-badge ${Ra}`,children:Bn})]}),r.jsx("div",{className:"de-workday-guide-duty-list",children:y?r.jsx("div",{className:"de-loading-skeleton",style:{height:220}}):Mt.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不再展示硬编码任务。请先在任务中心创建或同步。"}):Mt.map(b=>vi(b,"guide"))})]}),r.jsxs("aside",{className:"de-workday-guide-side",children:[r.jsxs("div",{className:"de-workday-guide-summary",children:[r.jsx("span",{children:"日期"}),r.jsx("strong",{children:s}),r.jsx("p",{children:Ts})]}),r.jsxs("div",{className:"de-workday-guide-summary",children:[r.jsx("span",{children:"确认后会发生什么"}),r.jsx("strong",{children:"右侧进入执行滚动"}),r.jsx("p",{children:"首页会展示当前动作、下一步、操作状态和操作结果;需要人工决策时会在右侧停下来提示。"})]}),($||F||(o==null?void 0:o.demo_reason))&&r.jsx("div",{className:`de-schedule-result ${$?"de-schedule-result--error":"de-schedule-result--success"}`,children:$||(F?"已调整任务勾选,点击确认后生效。":o==null?void 0:o.demo_reason)}),r.jsxs("div",{className:"de-workday-guide-actions",children:[r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Sl,children:"稍后设置"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="confirm_workday"||y,onClick:()=>{hi()},children:_==="confirm_workday"?"确认中...":"确认并开始任务"})]})]})]})]})}),de&&r.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>ve(!1),children:r.jsxs("div",{className:"de-task-manager-modal",role:"dialog","aria-modal":"true","aria-label":"任务设置",onClick:b=>b.stopPropagation(),children:[r.jsxs("div",{className:"de-task-manager-modal-head",children:[r.jsxs("div",{children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"TASK MANAGER"}),r.jsx("h3",{children:"任务设置"}),r.jsx("p",{children:"像员工早上确认工作一样,勾选今天要执行的内容,必要时进入详情或处理待决策事项。"})]}),r.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>ve(!1),children:"×"})]}),r.jsxs("div",{className:"de-task-manager-modal-body",children:[r.jsxs("section",{className:"de-task-manager-column de-task-manager-column--duties",children:[r.jsxs("div",{className:"de-task-manager-section-head",children:[r.jsxs("div",{children:[r.jsx("strong",{children:"任务设置清单"}),r.jsxs("span",{children:[Ct.length," 项已选,",Aa.length," 项总任务,",Hn.length," 项待选择"]})]}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="confirm_workday"||y,onClick:()=>{hi()},children:_==="confirm_workday"?"确认中...":Ee!=null&&Ee.confirmed?"重新任务执行":"确认并开始任务"})]}),r.jsx("div",{className:"de-task-manager-duty-list",children:y?r.jsx("div",{className:"de-loading-skeleton",style:{height:180}}):Mt.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会显示硬编码任务。可进入任务中心创建。"}):Mt.map(b=>vi(b,"manager"))})]}),r.jsxs("aside",{className:"de-task-manager-column de-task-manager-column--actions",children:[r.jsx("div",{className:"de-task-manager-section-head",children:r.jsxs("div",{children:[r.jsx("strong",{children:"待解决事项"}),r.jsx("span",{children:an.length>0?`${an.length} 项需要人处理`:"暂无阻塞事项"})]})}),r.jsx("div",{className:"de-task-manager-decision-list",children:((o==null?void 0:o.decisions)??[]).length===0?r.jsx("p",{className:"de-empty-text",children:"没有需要你确认的事项。"}):((o==null?void 0:o.decisions)??[]).map(b=>r.jsxs("div",{className:"de-task-manager-decision-card",children:[r.jsxs("div",{className:"de-log-entry-meta",children:[r.jsx("strong",{children:b.title}),r.jsx("span",{children:b.status_label})]}),r.jsx("p",{children:b.scenario}),r.jsxs("div",{className:"de-decision-chain-note",children:[r.jsx("span",{className:"de-badge de-badge-warning",children:"待实现"}),r.jsx("span",{children:pp})]}),r.jsxs("div",{className:"de-workbench-actions",children:[b.actions.map(J=>r.jsx("button",{type:"button",className:J.tone==="primary"?"de-workbench-action-accent":"",disabled:_===`${b.id}:${J.id}`||!mp(b.status),onClick:()=>{gi(b,J.id)},children:_===`${b.id}:${J.id}`?"处理中...":J.label},J.id)),r.jsx("button",{type:"button",onClick:()=>l({tab:"missions",date:s,missionId:b.id}),children:"查看上下文"})]})]},b.id))})]})]})]})})]})}function vs({children:l,className:s="",style:u}){return r.jsx("div",{className:`de-card ${s}`,style:u,children:l})}function rc({title:l,children:s}){return r.jsxs("div",{className:"de-card-title-bar",children:[r.jsx("span",{className:"de-card-title-bar-text",children:l}),s]})}const ix={info:"de-badge-info",success:"de-badge-success",warning:"de-badge-warning",danger:"de-badge-danger"};function Yo({variant:l,label:s}){return r.jsx("span",{className:`de-badge ${ix[l]}`,children:s})}function gp(l){return Array.isArray(l)?l:[]}function Pe(l,s=""){return typeof l=="string"?l:typeof l=="number"?String(l):s}function ci(l){return/[\u4e00-\u9fff]/.test(l)}const yp={queued:"排队中",ready:"就绪",idle:"待执行",pending:"待处理",pending_authorization:"待授权",waiting_input:"待输入",draft:"草稿",reviewing:"审核中",approved:"已批准",preparing:"准备中",running:"执行中",active:"运行中",blocked:"已阻塞",succeeded:"已完成",success:"成功",finished:"已完成",complete:"已完成",completed:"已完成",failed:"失败",error:"错误",cancelled:"已取消",canceled:"已取消",aborted:"已终止",rejected:"已拒绝",deferred:"已暂缓",dispatched:"已下发",scheduled:"已设置定时",enabled:"已启用",disabled:"已停用",paused:"已暂停",unknown:"未知"},vp={plan:"计划",task:"任务",task_running:"处理中",task_done:"任务完成",run:"执行开始",run_done:"执行完成",skill_tool:"技能调用",artifact:"产物",task_summary:"结果",entered_session:"会话",start:"目标",RunStarted:"开始调用",RequestDispatched:"请求已发出",ResponseReceived:"收到返回",RunSkipped:"本次跳过",RunCompleted:"执行完成",waiting_for_authorization:"等待授权",pending_authorization:"等待授权",authorization_approved:"授权通过",authorization_rejected:"授权拒绝",authorization_deferred:"稍后处理",failed:"执行失败",completed:"执行完成"};function Yt(l,s="未知"){const u=Pe(l).trim();if(!u)return s;const o=yp[u]??yp[u.toLowerCase()];return o||(ci(u)?u:s)}function sx(l){const s=Pe(l).trim();return s?vp[s]??vp[s.toLowerCase()]??(ci(s)?s:"事件"):"事件"}function _g(l,s="暂无事件内容"){const u=Pe(l).trim();if(!u)return s;if(ci(u))return u;const o=Yt(u,"");if(o)return o;const f=u.match(/^(Succeeded|Failed|Running|Completed)\s*\(attempt\s*#(\d+)\)$/i);return f?`${Yt(f[1])}(第 ${f[2]} 次)`:/request failed/i.test(u)?"请求失败":/backend unavailable/i.test(u)?"后端服务不可达":/not found/i.test(u)?"未找到对应资源":s}function ms(l,s="未命名内容"){const u=Pe(l).trim();if(!u||/unnamed/i.test(u))return s;if(ci(u))return u;const o=Yt(u,"");if(o)return o;const f=xg(u);return f||u}function Go(l){return["succeeded","success","finished","complete","completed"].includes(l.toLowerCase())}function Qo(l){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(l.toLowerCase())}function rx(l,s){const u=Pe(l).trim().toLowerCase();return s.length===0?u||"pending":s.some(o=>Qo(o.status))?"failed":s.some(o=>["running","active","leased"].includes(o.status.toLowerCase()))?"running":s.some(o=>["queued","ready","pending"].includes(o.status.toLowerCase()))?"queued":s.every(o=>Go(o.status))?"succeeded":u||"pending"}function cx(l,s){const u=Pe(l,"unknown").trim().toLowerCase();return Go(u)||Qo(u)?u:s.some(o=>Qo(o.status))?"failed":s.some(o=>["running","active","queued","leased"].includes(o.status.toLowerCase()))?"running":s.length>0&&s.every(o=>Go(o.status))?"succeeded":u||"unknown"}function bp(l){return l?l.map(s=>{const u=Pe(s.plan_id),f=gp(s.steps).map(p=>{const g=gp(p.tasks).map(y=>({id:Pe(y.task_id),title:ms(y.title,"子任务"),description:Pe(y.description),status:Pe(y.status,"pending"),assignedSkillId:y.assigned_skill_id?Pe(y.assigned_skill_id):null,startedAt:y.started_at?Pe(y.started_at):null,finishedAt:y.finished_at?Pe(y.finished_at):null}));return{id:Pe(p.step_id),title:ms(p.title,"任务步骤"),description:Pe(p.description),status:rx(p.status,g),preferredSkills:Array.isArray(p.preferred_skills)?p.preferred_skills:[],tasks:g}}),m=[];for(const p of f)for(const j of p.tasks)m.push(j.id);return{id:u,title:ms(s.title,"未命名任务"),objective:ms(s.objective||s.description,"暂无任务说明"),status:cx(s.status,f),createdAt:s.created_at?Pe(s.created_at):null,updatedAt:s.updated_at?Pe(s.updated_at):null,steps:f,sourceIds:{planId:u||void 0,taskIds:m}}}):[]}const To={"decision-analyzer":"决策分析","git-log-collector":"Git 日志采集","number-generator":"数据生成","office-export-xlsx":"Excel 导出","task-tracker":"任务跟踪","weekly-report-writer":"周报撰写","zhihu-hotlist-detail":"知乎热榜明细","zhihu-hotlist":"知乎热榜","tq-lineloss-report":"台区线损报表","archive-workorder-grid-push-monitor":"归档工单推送监控","available-balance-below-zero-monitor":"可用余额监控","command-center-fee-control-monitor":"费用管控监控","sgcc-todo-crawler":"SGCC 待办爬取","appointment-workorder-monitor":"约时工单监控","fault-location-monitor":"故障定位监控","fudian-failure-monitor":"复电失败监控","important-service-expiry-monitor":"服务到期预警","by-95598-customer-satisfaction-report":"95598 满意率日报","by-daily-report-statistics":"日报统计","by-fire-fault-monthly-report":"火警故障月报","by-risk-control-next-day-plan-report":"风控次日计划","by-risk-control-week-plan-report":"风控周计划","by-supervision-workorder-detail-report":"督办工单明细","age-file-encryption":"文件加解密","anonymous-file-upload":"匿名文件上传","browser-automation-agent":"浏览器自动化","bulk-github-star":"批量仓库标星","changelog-generator":"更新日志生成","code-reviewer":"代码审查","commit-automation":"自动提交","crypto-trading-signal":"交易信号分析","csv-to-json":"CSV 转 JSON","data-analysis":"数据分析","deep-research":"深度调研","dependency-updater":"依赖更新","deploy-automation":"自动部署","dns-lookup":"DNS 查询","document-generator":"文档生成","email-automation":"邮件自动化","file-converter":"文件格式转换","git-history-analyzer":"Git 历史分析","github-issue-manager":"Issue 管理","image-optimizer":"图片优化","json-schema-validator":"JSON Schema 校验","log-analyzer":"日志分析","markdown-to-pdf":"Markdown 转 PDF","meeting-summarizer":"会议纪要","news-aggregator":"新闻聚合","pdf-extractor":"PDF 提取","performance-profiler":"性能分析","pr-review-bot":"PR 审查","release-notes-generator":"发布说明生成","screenshot-automation":"截图自动化","search-engine-scraper":"搜索引擎抓取","sentiment-analysis":"情感分析","shell-command-runner":"命令执行","slack-notification":"Slack 通知","spreadsheet-generator":"电子表格生成","text-summarizer":"文本摘要","torrent-search":"资源搜索","translate-text":"文本翻译","web-scraper":"网页抓取","website-monitor":"网站监控","whitepaper-analyzer":"白皮书分析","xml-to-json":"XML 转 JSON"};function xg(l){if(To[l])return To[l];for(const[s,u]of Object.entries(To))if(l.includes(s)||s.includes(l))return u;return null}function _p(l,s){const u=xg(l);return u||(ci(s)?s:"自动化技能")}const xp={"decision-analyzer":"数字化","git-log-collector":"数字化","number-generator":"数字化","office-export-xlsx":"办公","task-tracker":"办公","weekly-report-writer":"报表","zhihu-hotlist-detail":"数字化","zhihu-hotlist":"数字化","tq-lineloss-report":"报表","archive-workorder-grid-push-monitor":"监控巡检","available-balance-below-zero-monitor":"监控巡检","command-center-fee-control-monitor":"监控巡检","sgcc-todo-crawler":"监控巡检","appointment-workorder-monitor":"监控巡检","fault-location-monitor":"监控巡检","fudian-failure-monitor":"监控巡检","important-service-expiry-monitor":"监控巡检","by-95598-customer-satisfaction-report":"报表","by-daily-report-statistics":"报表","by-fire-fault-monthly-report":"报表","by-risk-control-next-day-plan-report":"报表","by-risk-control-week-plan-report":"报表","by-supervision-workorder-detail-report":"报表","age-file-encryption":"数字化","anonymous-file-upload":"通信","browser-automation-agent":"数字化","bulk-github-star":"发展","changelog-generator":"发展","chat-logger":"通信","check-crypto-address-balance":"财务","city-distance":"发展","city-tourism-website-builder":"营销","crawl-websites-at-scale":"数字化","csv-data-summarizer":"财务","d3js-data-visualization":"数字化","database-query-and-export":"数字化","file-tracker":"综合","free-geocoding-and-maps":"发展","free-translation-api":"综合","free-weather-data":"综合","generate-asset-price-chart":"财务","generate-qr-code-natively":"数字化","get-crypto-price":"财务","git-worktree-cli":"发展","github-stats":"发展","html-to-markdown":"数字化","image-compressor":"综合","json-to-csv":"数字化","llm-council":"数字化","markdown-table-generator":"综合","multi-format-converter":"综合","npm-package-info":"发展","pdf-generator":"综合","random-number-generator":"综合","readability-score":"综合","rss-feed-reader":"通信","sql-formatter":"数字化","text-diff":"综合","torrent-search":"通信","unit-converter":"综合","url-shortener":"通信","youtube-transcript":"通信","zip-extractor":"综合"};function ux(l){return xp[l]?xp[l]:"综合"}function ox(l,s,u){const o=Pe(s).trim();return o&&ci(o)?o:l.includes("monitor")?`${u}能力,用于按排班自动巡检并提示异常。`:l.includes("report")?`${u}能力,用于自动生成和整理业务报表。`:`${u}能力,可由数字员工按需执行或定时处理。`}function dx(l){return l?l.map(s=>{const u=Pe(s.skill_id,Pe(s.id));return{id:u,name:_p(u,Pe(s.name,u)),version:s.version?Pe(s.version):null,enabled:!!s.enabled,description:ox(u,s.description,_p(u,Pe(s.name,u))),category:ux(u),capabilityLevel:"standard",source:"skill-api"}}):[]}function cc(l){return l.replace(/[^a-zA-Z0-9_-]/g,"_")}function fx(l){switch(l){case"succeeded":case"completed":return"success";case"failed":case"error":return"danger";case"running":case"active":return"info";default:return"warning"}}function mx(l){return["draft","reviewing","approved"].includes(l.toLowerCase())}function hx(l){const s=`${l.id} ${l.title} ${l.objective}`.toLowerCase();return s.includes("month")||s.includes("monthly")||s.includes("月")?"月度任务":s.includes("week")||s.includes("weekly")||s.includes("周")?"周任务":s.includes("临时")||s.includes("adhoc")||s.includes("hotlist")||s.includes("monitor")?"临时任务":"日常任务"}function ol(l){return["succeeded","success","finished","complete","completed"].includes(l.toLowerCase())}function Sg(l){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(l.toLowerCase())}function px(l){const s=l.steps.length;if(s===0)return Yt(l.status);const u=l.steps.filter(p=>ol(p.status)).length,o=l.steps.filter(p=>Sg(p.status)).length,f=l.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,m=[`已完成 ${u}/${s}`];return o>0&&m.push(`失败 ${o}`),f>0&&o===0&&m.push(`处理中 ${f}`),m.join(",")}function gx(l){const s=l.steps.find(f=>Sg(f.status));if(s)return`执行失败:${s.title}`;const u=l.steps.find(f=>["running","active"].includes(f.status.toLowerCase()));if(u)return`正在处理:${u.title}`;const o=l.steps.find(f=>!ol(f.status));return o?`准备处理:${o.title}`:ol(l.status)?"本轮任务已完成,等待你查看结果":l.status.toLowerCase()==="failed"?"执行遇到异常,等待你检查后重新执行":"等待你委托数字员工开始处理"}function yx(l,s){const u=l.status.toLowerCase();return u==="failed"||u==="error"?"查看详情后重新执行本任务":["running","active"].includes(u)?"等待完成或查看过程":ol(u)?"查看产物,必要时重新执行":s?"确认目标后点击委托执行":"查看详情确认当前状态"}function vx(l){const s=`${l.title} ${l.objective}`.toLowerCase();return s.includes("excel")||s.includes("xlsx")||s.includes("导出")||s.includes("报表")?"导出报表":s.includes("brief")||s.includes("简报")||s.includes("日程")?"工作简报":s.includes("snapshot")||s.includes("快照")||s.includes("热榜")?"结果快照":ol(l.status)?"查看完成结果":"完成后生成"}function jg(l){if(!l)return"";const s=new Date(l);return Number.isNaN(s.getTime())?"":[s.getFullYear(),String(s.getMonth()+1).padStart(2,"0"),String(s.getDate()).padStart(2,"0")].join("-")}function Eg(){return jg(new Date().toISOString())}function bx(l){if(!l)return"时间未记录";const s=new Date(l);return Number.isNaN(s.getTime())?"时间未记录":s.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",hour12:!1})}function _x(l){if(!l)return"";const s=new Date(l);return Number.isNaN(s.getTime())?"":s.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1})}function xx(l){const s=`${l.title} ${l.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!s)return null;const u=Number(s[1]),o=Number(s[2]);return!Number.isInteger(u)||!Number.isInteger(o)||u>23||o>59?null:`${String(u).padStart(2,"0")}:${String(o).padStart(2,"0")}`}function Sx(l){return l.steps.flatMap(s=>s.tasks.flatMap(u=>[u.startedAt,u.finishedAt])).filter(s=>!!s)}function jx(l,s){return Sx(l).filter(o=>jg(o)===s).sort((o,f)=>f.localeCompare(o))[0]??null}function Ex(l,s){const u=jx(l,s);if(u)return`实际执行 ${bx(u)}`;const o=s===Eg()?"今日未执行":"当日未执行";return`计划执行 ${xx(l)||"待确认"};${o}`}function wx({mission:l,onSelect:s,onRun:u,onRestart:o,dateFilter:f,selected:m,focusLabel:p,running:j}){const g=mx(l.status),y=ol(l.status)||l.steps.some(N=>ol(N.status)),w=f||Eg(),_=_x(l.updatedAt||l.createdAt);return r.jsxs("div",{id:`mission-card-${cc(l.id)}`,className:`de-mission-card ${m?"de-mission-card--selected":""}`,onClick:()=>s(l),onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),s(l))},role:"button",tabIndex:0,children:[r.jsxs("div",{className:"de-mission-card-header",children:[r.jsx("span",{className:"de-mission-card-title",children:l.title}),r.jsxs("div",{className:"de-mission-card-badges",children:[p&&r.jsx("span",{className:"de-mission-card-focus-chip",children:p}),r.jsx(Yo,{variant:fx(l.status),label:Yt(l.status)})]})]}),l.objective&&r.jsxs("p",{className:"de-mission-card-desc",children:["业务目标:",l.objective]}),r.jsxs("div",{className:"de-mission-card-meta",children:[r.jsxs("span",{children:["周期:",hx(l)]}),r.jsxs("span",{children:["当前进度:",px(l)]}),_&&r.jsxs("span",{children:["同步于 ",_]})]}),r.jsx("div",{className:"de-mission-card-meta",children:r.jsx("span",{children:gx(l)})}),r.jsxs("div",{className:"de-mission-card-meta",children:[r.jsxs("span",{children:["下一步:",yx(l,g)]}),r.jsxs("span",{children:["产物入口:",vx(l)]})]}),r.jsxs("div",{className:"de-mission-card-actions",children:[r.jsxs("span",{className:"de-mission-card-time",children:[Ex(l,w),y?";重新执行可能覆盖本任务结果":""]}),r.jsx("button",{type:"button",className:"de-btn-restart",disabled:j,onClick:N=>{N.stopPropagation(),j||o==null||o(l)},title:y?"重新执行本任务,可能覆盖已有结果":"重新执行本任务",children:"重新执行本任务"}),r.jsx("button",{type:"button",className:"de-btn-run",disabled:!g||j,onClick:N=>{N.stopPropagation(),g&&!j&&(u==null||u(l))},children:j?"执行中...":g?"委托执行":Yt(l.status)})]})]})}function ke(l,s){const u=new Date;return u.setHours(l,s,0,0),u.toISOString()}function Ie(l,s,u,o,f,m,p){return{id:`${l}-${s}-task`,title:u,status:o,assignedSkillId:f,startedAt:m,finishedAt:p}}function ca(l,s,u,o,f,m){return{id:l,title:s,objective:u,status:o,createdAt:ke(8,0),updatedAt:f,steps:m,sourceIds:{planId:l,taskIds:m.flatMap(p=>p.tasks.map(j=>j.id))}}}const Nx=[{id:"whitecollar-day-browser-portal-check",name:"工作台巡检",version:"1.0.0",enabled:!0,description:"检查工作台首页、待办数量和重点入口是否可用。",category:"办公",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-browser-inbox-triage",name:"收件箱分拣",version:"1.0.0",enabled:!0,description:"读取邮件和通知列表,按紧急程度整理待办。",category:"通信",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-calendar-brief",name:"日程简报",version:"1.0.0",enabled:!0,description:"生成当日会议、回访和报表节点的时间提醒。",category:"办公",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-browser-crm-followup",name:"客户跟进",version:"1.0.0",enabled:!0,description:"读取客户跟进页面,形成回访摘要和下一步建议。",category:"营销",capabilityLevel:"specialized",source:"skill-api"},{id:"whitecollar-day-browser-expense-approval",name:"费用审批核对",version:"1.0.0",enabled:!0,description:"检查待审批费用单,筛出异常和超限项。",category:"财务",capabilityLevel:"specialized",source:"skill-api"},{id:"whitecollar-day-sales-snapshot",name:"经营快照",version:"1.0.0",enabled:!0,description:"汇总客户、项目和当日经营看板。",category:"报表",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-report-export",name:"报表导出",version:"1.0.0",enabled:!0,description:"整理并导出面向领导汇报的简版报表。",category:"报表",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-browser-knowledge-check",name:"知识库核查",version:"1.0.0",enabled:!0,description:"检索知识库资料,确认制度和模板是否最新。",category:"数字化",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-task-board-sync",name:"任务看板同步",version:"1.0.0",enabled:!0,description:"把今日处理结果同步到任务看板和协同清单。",category:"办公",capabilityLevel:"standard",source:"skill-api"},{id:"whitecollar-day-browser-day-close",name:"日终收口",version:"1.0.0",enabled:!0,description:"汇总今日动作、风险和明日重点。",category:"办公",capabilityLevel:"specialized",source:"skill-api"}],Tx=[ca("whitecollar-day","白领一天端到端验收","模拟业务人员一天内通过数字员工完成网页采集、客户回访、资料整理和日报输出。","active",ke(10,35),[{id:"contact",title:"读取供应商联系人",status:"completed",preferredSkills:["whitecollar-day-legacy-contact"],tasks:[Ie("whitecollar-day","contact","整理联系人名单","completed","whitecollar-day-legacy-contact",ke(8,30),ke(8,33))]},{id:"news",title:"读取行业动态",status:"completed",preferredSkills:["whitecollar-day-legacy-news"],tasks:[Ie("whitecollar-day","news","整理行业动态摘要","completed","whitecollar-day-legacy-news",ke(8,35),ke(8,41))]},{id:"form",title:"预填客户回访登记",status:"completed",preferredSkills:["whitecollar-day-legacy-form"],tasks:[Ie("whitecollar-day","form","填充回访登记表","completed","whitecollar-day-legacy-form",ke(8,45),ke(8,51))]},{id:"compare",title:"比对设备方案",status:"running",preferredSkills:["whitecollar-day-legacy-compare"],tasks:[Ie("whitecollar-day","compare","生成方案差异结论","running","whitecollar-day-legacy-compare",ke(10,28),null)]},{id:"todos",title:"读取待办系统",status:"pending",preferredSkills:["whitecollar-day-legacy-todos"],tasks:[Ie("whitecollar-day","todos","汇总个人待办","pending","whitecollar-day-legacy-todos",null,null)]},{id:"customers",title:"读取客户清单",status:"pending",preferredSkills:["whitecollar-day-legacy-customers"],tasks:[Ie("whitecollar-day","customers","提取重点客户","pending","whitecollar-day-legacy-customers",null,null)]},{id:"download",title:"识别最新资料下载链接",status:"pending",preferredSkills:["whitecollar-day-legacy-download"],tasks:[Ie("whitecollar-day","download","识别最新制度材料","pending","whitecollar-day-legacy-download",null,null)]},{id:"email",title:"生成客户跟进邮件",status:"pending",preferredSkills:["whitecollar-day-legacy-email"],tasks:[Ie("whitecollar-day","email","生成回访邮件草稿","pending","whitecollar-day-legacy-email",null,null)]},{id:"daily-report",title:"生成工作日报",status:"pending",preferredSkills:["whitecollar-day-legacy-daily-report"],tasks:[Ie("whitecollar-day","daily-report","生成工作日报","pending","whitecollar-day-legacy-daily-report",null,null)]},{id:"tomorrow-plan",title:"生成明日计划",status:"pending",preferredSkills:["whitecollar-day-legacy-tomorrow-plan"],tasks:[Ie("whitecollar-day","tomorrow-plan","整理明日计划","pending","whitecollar-day-legacy-tomorrow-plan",null,null)]}]),ca("whitecollar-day-0830-browser-portal-check","白领一天 08:30 工作台巡检","巡检工作台首页、待办数量和关键入口状态。","completed",ke(8,34),[{id:"browser-portal-check",title:"浏览器工作台巡检",status:"completed",preferredSkills:["whitecollar-day-browser-portal-check"],tasks:[Ie("whitecollar-day-0830-browser-portal-check","browser-portal-check","检查门户首页与入口","completed","whitecollar-day-browser-portal-check",ke(8,30),ke(8,34))]}]),ca("whitecollar-day-0900-browser-inbox-triage","白领一天 09:00 收件箱分拣","识别高优先级通知并形成今日待办。","completed",ke(9,6),[{id:"browser-inbox-triage",title:"浏览器收件箱分拣",status:"completed",preferredSkills:["whitecollar-day-browser-inbox-triage"],tasks:[Ie("whitecollar-day-0900-browser-inbox-triage","browser-inbox-triage","分拣通知与邮件","completed","whitecollar-day-browser-inbox-triage",ke(9,0),ke(9,6))]}]),ca("whitecollar-day-0930-calendar-brief","白领一天 09:30 日程简报","整理会议、回访与汇报节点,形成上午排程。","completed",ke(9,32),[{id:"calendar-brief",title:"生成日程简报",status:"completed",preferredSkills:["whitecollar-day-calendar-brief"],tasks:[Ie("whitecollar-day-0930-calendar-brief","calendar-brief","整理今日日程","completed","whitecollar-day-calendar-brief",ke(9,30),ke(9,32))]}]),ca("whitecollar-day-1030-browser-crm-followup","白领一天 10:30 客户跟进","汇总重点客户情况,生成下一步回访建议。","running",ke(10,35),[{id:"browser-crm-followup",title:"浏览器客户跟进",status:"running",preferredSkills:["whitecollar-day-browser-crm-followup"],tasks:[Ie("whitecollar-day-1030-browser-crm-followup","browser-crm-followup","提取客户回访摘要","running","whitecollar-day-browser-crm-followup",ke(10,30),null)]}]),ca("whitecollar-day-1130-browser-expense-approval","白领一天 11:30 费用审批核对","检查待审批单据并输出异常说明。","approved",ke(11,20),[{id:"browser-expense-approval",title:"浏览器费用审批核对",status:"pending",preferredSkills:["whitecollar-day-browser-expense-approval"],tasks:[Ie("whitecollar-day-1130-browser-expense-approval","browser-expense-approval","核对费用审批单","pending","whitecollar-day-browser-expense-approval",null,null)]}]),ca("whitecollar-day-1330-sales-snapshot","白领一天 13:30 经营快照","汇总客户、项目和经营看板,形成午后快照。","draft",ke(13,20),[{id:"sales-snapshot",title:"生成经营快照",status:"pending",preferredSkills:["whitecollar-day-sales-snapshot"],tasks:[Ie("whitecollar-day-1330-sales-snapshot","sales-snapshot","整理经营快照","pending","whitecollar-day-sales-snapshot",null,null)]}]),ca("whitecollar-day-1430-report-export","白领一天 14:30 报表导出","导出领导汇报所需的简版统计报表。","draft",ke(14,10),[{id:"report-export",title:"导出汇报报表",status:"pending",preferredSkills:["whitecollar-day-report-export"],tasks:[Ie("whitecollar-day-1430-report-export","report-export","导出统计报表","pending","whitecollar-day-report-export",null,null)]}]),ca("whitecollar-day-1530-browser-knowledge-check","白领一天 15:30 知识库核查","核查制度、模板与常见问题资料是否最新。","draft",ke(15,15),[{id:"browser-knowledge-check",title:"浏览器知识库核查",status:"pending",preferredSkills:["whitecollar-day-browser-knowledge-check"],tasks:[Ie("whitecollar-day-1530-browser-knowledge-check","browser-knowledge-check","核查知识库资料","pending","whitecollar-day-browser-knowledge-check",null,null)]}]),ca("whitecollar-day-1630-task-board-sync","白领一天 16:30 任务看板同步","把今日处理结果同步到看板和协同清单。","draft",ke(16,10),[{id:"task-board-sync",title:"同步任务看板",status:"pending",preferredSkills:["whitecollar-day-task-board-sync"],tasks:[Ie("whitecollar-day-1630-task-board-sync","task-board-sync","同步任务状态","pending","whitecollar-day-task-board-sync",null,null)]}]),ca("whitecollar-day-1730-browser-day-close","白领一天 17:30 日终收口","汇总今日成果、风险和明日重点,形成日终总结。","draft",ke(17,10),[{id:"task-board-sync",title:"同步任务看板",status:"pending",preferredSkills:["whitecollar-day-task-board-sync"],tasks:[Ie("whitecollar-day-1730-browser-day-close","task-board-sync","同步看板结果","pending","whitecollar-day-task-board-sync",null,null)]},{id:"browser-day-close",title:"浏览器日终收口",status:"pending",preferredSkills:["whitecollar-day-browser-day-close"],tasks:[Ie("whitecollar-day-1730-browser-day-close","browser-day-close","整理日终收口","pending","whitecollar-day-browser-day-close",null,null)]}]),ca("zhihu-hotlist-monitor","知乎热榜采集","通过计划模板调用知乎热榜采集技能,导出表格文件并生成当天热点摘要。","approved",ke(10,12),[{id:"collect-zhihu",title:"采集知乎热榜",status:"pending",preferredSkills:["zhihu-hotlist"],tasks:[Ie("zhihu-hotlist-monitor","collect-zhihu","采集知乎热榜","pending","zhihu-hotlist",null,null)]},{id:"export-xlsx",title:"导出表格文件",status:"pending",preferredSkills:["office-export-xlsx"],tasks:[Ie("zhihu-hotlist-monitor","export-xlsx","导出热榜表格","pending","office-export-xlsx",null,null)]}])];function Cx(l){return{...l,steps:l.steps.map(s=>({...s,preferredSkills:[...s.preferredSkills],tasks:s.tasks.map(u=>({...u}))})),sourceIds:{planId:l.sourceIds.planId,taskIds:[...l.sourceIds.taskIds]}}}function ni(){return Tx.map(Cx)}function Sp(){return Nx.map(l=>({...l}))}function kx(l){return l.flatMap(s=>s.steps.flatMap(u=>u.tasks.map(o=>({task_id:o.id,title:o.title,status:o.status,plan_id:s.id,step_id:u.id,assigned_skill_id:o.assignedSkillId||"",description:`${s.title} · ${u.title}`,created_at:s.createdAt||ke(8,0),updated_at:s.updatedAt||s.createdAt||ke(8,0),started_at:o.startedAt,finished_at:o.finishedAt}))))}function Ax(l){return l.filter(s=>["completed","running"].includes(s.status)).map((s,u)=>({run_id:`demo-run-${u+1}`,task_id:s.task_id,plan_id:s.plan_id,attempt_no:1,lifecycle:s.status==="running"?"Running":"Succeeded",created_at:s.started_at||s.created_at,completed_at:s.finished_at}))}function Dx(l){const s=l.steps.find(o=>o.status==="running")||l.steps.find(o=>o.status==="pending")||l.steps[0],u=[{event_id:`${l.id}-event-1`,kind:"entered_session",occurred_at:l.createdAt||ke(8,0),message:`已接收场景:${l.title}`},{event_id:`${l.id}-event-2`,kind:"start",occurred_at:l.updatedAt||l.createdAt||ke(8,0),message:`当前目标:${l.objective}`}];return s&&u.push({event_id:`${l.id}-event-3`,kind:l.status==="completed"?"completed":l.status==="approved"||l.status==="draft"?"pending_authorization":"RunStarted",occurred_at:l.updatedAt||l.createdAt||ke(8,0),message:`${s.title}`}),l.status==="completed"&&u.push({event_id:`${l.id}-event-4`,kind:"RunCompleted",occurred_at:l.updatedAt||l.createdAt||ke(8,0),message:"已完成本场景执行并回写结果。"}),u}function Co(l){const s=l.steps.filter(f=>f.status==="completed").length,u=l.steps.find(f=>f.status==="running"),o=l.status==="completed"?`当前已完成全部 ${l.steps.length} 个步骤,结果已整理完毕。`:u?`当前正在处理“${u.title}”,已完成 ${s} 个步骤。`:"当前场景已准备就绪,可直接发起执行。";return[{role:"user",content:`请执行场景:${l.title}`},{role:"assistant",content:`已接收。业务目标:${l.objective}`},{role:"assistant",content:o}]}function ko(l,s){return l.map(u=>u.id!==s?u:{...u,status:"running",updatedAt:new Date().toISOString(),steps:u.steps.map((o,f)=>({...o,status:f===0?"running":o.status==="completed"?"completed":"pending",tasks:o.tasks.map(m=>({...m,status:f===0?"running":m.status==="completed"?"completed":"pending",startedAt:f===0?new Date().toISOString():m.startedAt,finishedAt:f===0?null:m.finishedAt}))}))})}function Ao(l,s){return l.map(u=>u.id!==s?u:{...u,status:"completed",updatedAt:new Date().toISOString(),steps:u.steps.map(o=>({...o,status:"completed",tasks:o.tasks.map(f=>({...f,status:"completed",startedAt:f.startedAt||new Date().toISOString(),finishedAt:new Date().toISOString()}))}))})}function jp(l){switch(l){case"succeeded":case"completed":case"Succeeded":return"success";case"failed":return"danger";case"Failed":return"danger";case"running":case"active":case"Running":return"info";default:return"warning"}}function zn(l){return l?new Date(l).toLocaleString("zh-CN",{hour12:!1}):"未记录"}function Ep(l){const s=`${l.id} ${l.title} ${l.objective}`.toLowerCase();return s.includes("month")||s.includes("monthly")||s.includes("月")?"月度任务":s.includes("week")||s.includes("weekly")||s.includes("周")?"周任务":s.includes("临时")||s.includes("adhoc")||s.includes("hotlist")||s.includes("monitor")?"临时任务":"日常任务"}function zx(l){return["succeeded","success","finished","complete","completed"].includes(l.toLowerCase())}function ps(l){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(l.toLowerCase())}function wp(l){const s=l.steps.length;if(s===0)return Yt(l.status);const u=l.steps.filter(p=>zx(p.status)).length,o=l.steps.filter(p=>ps(p.status)).length,f=l.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,m=[`已完成 ${u}/${s}`];return o>0&&m.push(`失败 ${o}`),f>0&&o===0&&m.push(`处理中 ${f}`),m.join(",")}function Np(l){return l.replace(/^启动计划:/,"接收委托:").replace(/^准备步骤:/,"准备工作:").replace(/^创建任务:/,"安排工作:").replace(/^任务失败:/,"工作失败:").replace(/^开始处理:/,"开始处理:").replace(/^完成任务:/,"完成工作:").replace(/^调用技能:/,"数字员工处理:").replace(/^执行开始:/,"开始执行:").replace(/^执行完成:/,"执行完成:").replace(/^执行失败:/,"执行失败:").replace(/,将使用[^,。]+/,"").replace(/,分配给[^,。]+/,"")}function Kr(l){return/失败|failed|error|timeout|unavailable/i.test(l)}function Tp(l,s=""){return Kr(s)?"失败":l==="artifact"?"产物":l==="task_summary"?"结果":l==="task_running"||l==="run"?"处理中":l==="task_done"||l==="run_done"?"完成":"过程"}function Mx(l){return l==="user"?"用户":l==="assistant"?"数字员工":l==="system"?"系统":"消息"}function Do(l){return ms(l||"",l||"自动化技能")}function Rx(l,s,u){const o=s==="true"?"成功":"失败";return l.includes("zhihu-hotlist")&&l.includes("extract_hotlist")?`调用技能:知乎热榜采集,结果:${o},耗时 ${u}ms`:l.includes("office-export-xlsx")&&l.includes("export_xlsx")?`调用技能:Excel 导出,结果:${o},耗时 ${u}ms`:`调用技能:${l},结果:${o},耗时 ${u}ms`}function zo(l){return typeof l=="string"?l:""}function Pr(l){return l.occurred_at||""}function Cp(l){return l.filter(s=>!!s).sort((s,u)=>s.localeCompare(u))[0]||null}function Ox(l){var u;const s=new Map;for(const o of l){const f=((u=o.message.split(",结果:")[0])==null?void 0:u.split(",状态:")[0])||o.message,m=s.get(f);(!m||Pr(o).localeCompare(Pr(m))>0)&&s.set(f,o)}return Array.from(s.values())}function Lx(l){return l&&typeof l=="object"&&!Array.isArray(l)?l:null}function kp(l){return l.replace(/\\\\/g,"\\")}function Ux(l,s,u,o,f){const m=[],p=(g,y,w,_)=>{w.trim()&&m.push({event_id:_,kind:g,occurred_at:y??null,message:w})},j=(g,y,w,_)=>{let N=!1;try{const H=Lx(JSON.parse(g));if(H){const Q=typeof H.label=="string"?H.label.trim():"",I=H.value;Q&&I!==void 0&&I!==null&&p("task_summary",y,`${Q}:${String(I)}`,`metric-${w}-${_}`);const F=typeof H.output_path=="string"?H.output_path.trim():"";F&&(N=!0,p("artifact",y,`产物生成:${kp(F)}`,`artifact-${w}-${_}`))}}catch{}const q=g.match(/"row_count"\s*:\s*(\d+)/);q!=null&&q[1]&&p("task_summary",y,`数据处理完成:共 ${q[1]} 条记录`,`rows-${w}-${_}`);const M=g.match(/"output_path"\s*:\s*"([^"]+\.(?:xlsx|xls|csv|json|html|pdf|png|jpg|jpeg|txt))"/i),$=M==null?void 0:M[1];$&&!N&&p("artifact",y,`产物生成:${kp($)}`,`artifact-regex-${w}-${_}`)};if(p("plan",l.createdAt||l.updatedAt,`启动计划:${l.title},目标:${l.objective}`,`plan-${l.id}`),s.length===0)for(const g of l.steps){const y=g.preferredSkills.map(Do).join("、")||"自动化技能";p("task",l.updatedAt||l.createdAt,`准备步骤:${g.title},将使用 ${y}`,`step-${g.id}`)}for(const g of s){const y=Do(g.assigned_skill_id),w=u.filter(q=>q.task_id===g.task_id),_=Cp(w.map(q=>q.created_at)),N=Cp([g.created_at,g.started_at,_]);if(p("task",N,`创建任务:${g.title||"子任务"},分配给 ${y}`,`task-create-${g.task_id}`),g.started_at&&p("task_running",g.started_at,`开始处理:${g.title||"子任务"}`,`task-start-${g.task_id}`),g.finished_at){const q=ps(g.status)?"任务失败":"完成任务",M=ps(g.status)&&g.error_message?`,原因:${g.error_message}`:"";p("task_done",g.finished_at,`${q}:${g.title||"子任务"},状态:${Yt(g.status)}${M}`,`task-finish-${g.task_id}`)}}for(const g of u){const y=s.find(q=>q.task_id===g.task_id),w=(y==null?void 0:y.title)||"任务执行",_=Do(g.skill_id||(y==null?void 0:y.assigned_skill_id));if(o.some(q=>(q.content||"").includes(`[Task ${g.task_id}] tool_call`))||p("skill_tool",g.created_at,`调用技能:${_},处理:${w}`,`run-skill-${g.run_id}`),p("run",g.created_at,`执行开始:${w},第 ${g.attempt_no||1} 次`,`run-start-${g.run_id}`),g.completed_at){const q=ps(g.lifecycle)?"执行失败":"执行完成";p("run_done",g.completed_at,`${q}:${w},结果:${Yt(g.lifecycle)}`,`run-done-${g.run_id}`)}for(const[q,M]of(g.events||[]).entries())j(zo(M.message),M.occurred_at||g.completed_at||g.created_at,`run-${g.run_id}-${M.event_id||q}`,g.skill_id||(y==null?void 0:y.assigned_skill_id)||"run");for(const[q,M]of(g.artifacts||[]).entries()){const $=zo(M.uri),H=zo(M.name)||$;($||H)&&p("artifact",g.completed_at||g.created_at,`产物生成:${H}${$&&$!==H?`(${$})`:""}`,`run-artifact-${g.run_id}-${q}`)}}for(const g of o){const y=g.content||"",w=y.match(/\[Task ([^\]]+)\] tool_call name=([^\s]+) success=(true|false) elapsed_ms=(\d+) args=(.*?) output=(.*)$/s);if(w){const N=w[1]||"",q=w[2]||"",M=w[3]||"false",$=w[4]||"0",H=w[6]||"";p("skill_tool",g.created_at,Rx(q,M,$),`tool-${N}-${g.created_at}-${q}`),j(H,g.created_at,`message-${g.created_at}`,q);continue}const _=y.match(/共采集到\s*\**\s*(\d+)\s*条/);if(_!=null&&_[1]){p("task_summary",g.created_at,`采集完成:获得 ${_[1]} 条知乎热榜数据`,`summary-hotlist-${g.created_at}`);continue}y.includes("[Task ")&&y.includes("Excel")&&p("task_summary",g.created_at,"导出完成:Excel 文件已生成",`summary-excel-${g.created_at}`)}if(m.length<=1)for(const g of f||[])p(g.kind,g.occurred_at,_g(g.message,g.message),g.event_id);return m.sort((g,y)=>(g.occurred_at||"").localeCompare(y.occurred_at||"")).slice(-40)}function Hx({mission:l,onClose:s}){const[u,o]=v.useState([]),[f,m]=v.useState([]),[p,j]=v.useState(null),[g,y]=v.useState(!0),[w,_]=v.useState([]),[N,q]=v.useState(!1),[M,$]=v.useState(!1),[H,Q]=v.useState(!1),[I,F]=v.useState(null),ne=l.sourceIds.planId||l.id;v.useEffect(()=>{let X=!1;const se=()=>{y(!0),Promise.allSettled([f0(ne),m0(ne),sp(ne)]).then(([A,Y,te])=>{var R;if(X)return;const de=ni().find(K=>K.id===ne),ve=de?kx([de]):[],S=ve.length>0?Ax(ve):[];A.status==="fulfilled"?(o(A.value.tasks&&A.value.tasks.length>0?A.value.tasks:ve),m(A.value.runs&&A.value.runs.length>0?A.value.runs:S)):(o(ve),m(S)),Y.status==="fulfilled"&&((R=Y.value)!=null&&R.events)&&Y.value.events.length>0?j(Y.value):j(de?{events:Dx(de)}:null),te.status==="fulfilled"&&te.value.messages.length>0?_(te.value.messages):_(de?Co(de):[])}).finally(()=>{X||y(!1)})};se();const B=window.setInterval(se,3e3);return()=>{X=!0,window.clearInterval(B)}},[ne]),v.useEffect(()=>{_([]),q(!1),$(!1),F(null)},[ne]);const ie=async()=>{if(!H){q(!0),Q(!0),F(null);try{const X=await sp(ne);if(X.messages&&X.messages.length>0)_(X.messages);else{const se=ni().find(B=>B.id===ne);_(se?Co(se):[])}}catch(X){const se=ni().find(B=>B.id===ne);se?(_(Co(se)),F(null)):(_([]),F(X instanceof Error?X.message:"读取会话失败"))}finally{Q(!1)}}},me=v.useMemo(()=>{const X=new Map;for(const se of f){const B=X.get(se.task_id)||[];B.push(se),X.set(se.task_id,B)}for(const se of X.values())se.sort((B,A)=>(A.created_at||"").localeCompare(B.created_at||""));return X},[f]),Z=v.useMemo(()=>Ux(l,u,f,w,p==null?void 0:p.events),[p==null?void 0:p.events,l,f,w,u]),ee=v.useMemo(()=>Z.filter(X=>X.kind!=="skill_tool").slice(-12),[Z]),Ce=v.useMemo(()=>{const X=Z.filter(Y=>["artifact","task_summary"].includes(Y.kind)),se=Z.filter(Y=>Y.kind==="task_done"),B=Ox(Z.filter(Y=>Y.kind==="run_done")),A=se.length>0?se:B;return[...X,...A].sort((Y,te)=>Pr(Y).localeCompare(Pr(te))).slice(-6)},[Z]),st=v.useMemo(()=>Z.reduce((X,se)=>se.occurred_at&&(!X||se.occurred_at.localeCompare(X)>0)?se.occurred_at:X,null),[Z]),Ke=l.updatedAt||st,oe=()=>{const X=!M;$(X),X&&!N&&ie()};return r.jsxs("div",{className:"de-drawer",role:"dialog","aria-label":l.title,children:[r.jsxs("div",{className:"de-drawer-head",children:[r.jsxs("div",{className:"de-drawer-title-group",children:[r.jsx("span",{className:"de-drawer-eyebrow",children:"委托详情"}),r.jsx("h3",{children:l.title})]}),r.jsx("button",{className:"de-btn-secondary",onClick:s,"aria-label":"关闭",children:"✕"})]}),r.jsxs("div",{className:"de-drawer-status-line",children:[r.jsx(Yo,{variant:jp(l.status),label:Yt(l.status)}),r.jsx("span",{className:"de-drawer-meta",children:Ep(l)}),r.jsx("span",{className:"de-drawer-meta",children:wp(l)})]}),r.jsxs("div",{className:"de-drawer-timeline",children:[r.jsxs("section",{className:"de-detail-section",children:[r.jsx("div",{className:"de-detail-section-head",children:r.jsx("h4",{children:"委托概览"})}),r.jsxs("div",{className:"de-detail-kv",children:[r.jsx("span",{children:"业务目标"}),r.jsx("strong",{children:l.objective||"未填写"}),r.jsx("span",{children:"周期"}),r.jsx("strong",{children:Ep(l)}),r.jsx("span",{children:"当前进度"}),r.jsx("strong",{children:wp(l)}),r.jsx("span",{children:"启动时间"}),r.jsx("strong",{children:zn(l.createdAt)}),r.jsx("span",{children:"状态"}),r.jsx("strong",{children:Yt(l.status)}),r.jsx("span",{children:"更新时间"}),r.jsx("strong",{children:zn(Ke)})]})]}),r.jsxs("section",{className:"de-detail-section de-execution-chain",children:[r.jsxs("div",{className:"de-detail-section-head",children:[r.jsx("h4",{children:"业务过程"}),r.jsxs("span",{className:"de-chain-plan-id",children:["最近更新:",zn(Ke||l.createdAt)]})]}),g&&ee.length===0?r.jsx("p",{className:"de-empty-text",children:"正在读取业务过程..."}):ee.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无业务过程。重新执行本任务后会显示处理进展。"}):r.jsx("div",{className:"de-chain-list",children:ee.map(X=>r.jsxs("div",{className:`de-chain-row de-chain-row--${X.kind} ${Kr(X.message)?"de-chain-row--danger":""}`,children:[r.jsx("strong",{children:Tp(X.kind,X.message)}),r.jsx("span",{children:Np(X.message)}),r.jsx("time",{children:zn(X.occurred_at)})]},`chain-${X.event_id}`))})]}),r.jsxs("section",{className:"de-detail-section",children:[r.jsx("h4",{children:"结果与产物"}),Ce.length>0?r.jsx("div",{className:"de-event-list",children:[...Ce].reverse().map(X=>r.jsxs("div",{className:`de-event-row ${Kr(X.message)?"de-event-row--danger":""}`,children:[r.jsx("strong",{children:Tp(X.kind,X.message)}),r.jsx("span",{children:Np(X.message)}),r.jsx("time",{children:zn(X.occurred_at)})]},`result-${X.event_id}`))}):r.jsx("p",{className:"de-empty-text",children:"任务完成后,这里会显示结果摘要和产物入口。"})]}),r.jsxs("section",{className:"de-detail-section",children:[r.jsx("h4",{children:"步骤进展"}),g?r.jsx("p",{className:"de-empty-text",children:"正在读取执行情况..."}):null,l.steps.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无步骤进展"}):l.steps.map((X,se)=>r.jsxs("div",{className:"de-step-node",children:[r.jsx("div",{className:`de-step-dot de-step-dot--${X.status}`}),se0?r.jsx("div",{className:"de-event-list",children:Z.slice(-20).reverse().map(X=>r.jsxs("div",{className:`de-event-row ${Kr(X.message)?"de-event-row--danger":""}`,children:[r.jsx("strong",{children:sx(X.kind)}),r.jsx("span",{children:X.message}),r.jsx("time",{children:zn(X.occurred_at)})]},X.event_id))}):r.jsx("p",{className:"de-empty-text",children:"暂无事件日志"})]}),r.jsxs("section",{className:"de-detail-section",children:[r.jsxs("div",{className:"de-detail-section-head",children:[r.jsx("h4",{children:"会话记录"}),r.jsx("button",{className:"de-btn-secondary de-btn-sm",onClick:ie,disabled:H,children:"刷新"})]}),I?r.jsxs("p",{className:"de-empty-text",children:["会话读取失败:",I]}):H?r.jsx("p",{className:"de-empty-text",children:"正在读取会话..."}):w.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无会话消息。"}):r.jsx("div",{className:"de-session-message-list",children:w.map((X,se)=>r.jsxs("div",{className:`de-session-message de-session-message--${X.role==="user"?"user":"agent"}`,children:[r.jsx("div",{className:"de-session-message-role",children:Mx(X.role)}),r.jsx("p",{children:_g(X.content,X.content)})]},`${X.role}-${se}`))})]}),r.jsxs("section",{className:"de-detail-section",children:[r.jsx("h4",{children:"任务与执行记录"}),u.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无原始任务记录"}):u.map(X=>{const se=me.get(X.task_id)||[],B=se[0];return r.jsxs("div",{className:"de-task-run-card",children:[r.jsxs("div",{className:"de-task-run-head",children:[r.jsx("span",{children:X.title||"子任务"}),r.jsx(Yo,{variant:jp(X.status),label:Yt(X.status)})]}),r.jsxs("div",{className:"de-task-run-meta",children:[r.jsxs("span",{children:["skill_id:",X.assigned_skill_id||"未分配"]}),r.jsxs("span",{children:["开始:",zn(X.started_at)]}),r.jsxs("span",{children:["结束:",zn(X.finished_at)]})]}),r.jsxs("div",{className:"de-task-run-meta",children:[r.jsxs("span",{children:["task_id:",X.task_id]}),r.jsxs("span",{children:["执行记录:",se.length," 次"]}),B?r.jsxs("span",{children:["最近结果:",Yt(B.lifecycle)]}):null]}),ps(X.status)&&X.error_message?r.jsxs("div",{className:"de-task-run-error",children:[r.jsx("strong",{children:"失败原因:"}),X.error_message]}):null]},X.task_id)})]})]}):r.jsx("p",{className:"de-empty-text",children:"默认隐藏排障信息;需要排障时可展开。"})]})]})]})}const Ap={zh:{"nav.dashboard":"仪表盘","nav.plans":"计划","nav.execution":"执行","nav.governance":"治理","nav.scheduler":"调度器","nav.skills":"技能","nav.agent":"智能体","nav.tools":"工具","nav.cron":"Cron 任务","nav.integrations":"集成","nav.memory":"记忆","nav.config":"配置","nav.cost":"成本追踪","nav.logs":"日志","nav.devtools":"工具","nav.swimlane":"泳道","nav.doctor":"诊断","nav.canvas":"画布","planb.nav.chat":"对话","planb.nav.browser":"AI浏览器","planb.nav.monitor":"运行监测","planb.nav.dashboard":"仪表盘","planb.nav.settings":"设置","planb.nav.more":"更多工具","planb.layout.switch_to_wide":"切换到宽屏模式","planb.layout.switch_to_compact":"切换到紧凑模式","planb.layout.pop_out":"弹出独立窗口","planb.browser.title":"AI浏览器","planb.browser.subtitle":"启动 SuperRPA 浏览器自动化","planb.browser.launch":"启动浏览器","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"活跃会话","planb.browser.no_sessions":"没有活跃的浏览器会话,在上方输入 URL 启动。","planb.browser.status_launching":"启动中","planb.browser.status_running":"运行中","planb.browser.status_idle":"空闲","planb.browser.status_error":"错误","planb.browser.status_stopped":"已停止","planb.browser.launch_error":"启动浏览器失败","planb.browser.close_error":"关闭会话失败","planb.browser.backend_not_configured":"SuperRPA 未配置,请设置 SGCLAW_SUPERRPA_PATH 环境变量。","planb.chat.welcome":"今天我能帮你什么?","planb.chat.placeholder":"问点什么...","planb.chat.sessions":"对话历史","planb.chat.new_chat":"新对话","planb.chat.no_sessions":"暂无对话历史","planb.chat.untitled":"未命名对话","planb.chat.thought":"思考","planb.chat.chip_browse":"浏览网页","planb.chat.chip_code":"写代码","planb.chat.chip_analyze":"分析数据","planb.chat.chip_plan":"帮我规划","planb.chat.regenerate":"重新生成","planb.settings.quick":"快速设置","planb.settings.advanced":"高级配置","planb.settings.quick_hint":"快速设置功能即将推出。现在请使用高级配置编辑器修改 TOML 配置。","planb.settings.open_advanced":"打开高级配置","dashboard.title":"仪表盘","dashboard.provider":"提供商","dashboard.model":"模型","dashboard.uptime":"运行时间","dashboard.temperature":"温度","dashboard.gateway_port":"网关端口","dashboard.memory_backend":"记忆后端","dashboard.paired":"已配对","dashboard.channels":"频道","dashboard.health":"健康状态","dashboard.status":"状态","dashboard.overview":"概览","dashboard.system_info":"系统信息","dashboard.quick_actions":"快速操作","agent.title":"智能体对话","agent.send":"发送","agent.placeholder":"输入消息...","agent.start_conversation":"发送消息开始对话","agent.type_message":"输入消息...","agent.connecting":"连接中...","agent.connected":"已连接","agent.disconnected":"已断开","agent.reconnecting":"重新连接中...","agent.thinking":"思考中...","agent.tool_call":"工具调用","agent.tool_result":"工具结果","agent.connection_error":"连接错误,正在尝试重连...","agent.tool_call_prefix":"[工具调用]","agent.tool_result_prefix":"[工具结果]","agent.error_prefix":"[错误]","agent.unknown_error":"未知错误","agent.send_error":"发送消息失败,请重试。","agent.copy_message":"复制消息","agent.connected_status":"已连接","agent.disconnected_status":"已断开","tools.title":"可用工具","tools.name":"名称","tools.description":"描述","tools.parameters":"参数","tools.search":"搜索工具...","tools.empty":"暂无可用工具。","tools.count":"工具总数","tools.agent_tools":"智能体工具箱","tools.cli_tools":"CLI 工具箱","tools.parameter_schema":"参数结构","tools.path":"路径","tools.version":"版本","tools.category":"类别","tools.load_error":"加载工具失败","cron.title":"定时任务","cron.scheduled_tasks":"定时任务","cron.add":"添加任务","cron.add_job":"添加任务","cron.add_modal_title":"添加 Cron 任务","cron.delete":"删除","cron.enable":"启用","cron.disable":"禁用","cron.name":"名称","cron.name_optional":"名称(可选)","cron.command":"命令","cron.command_required":"命令","cron.schedule":"计划","cron.schedule_required":"计划","cron.next_run":"下次执行","cron.last_run":"上次执行","cron.last_status":"上次状态","cron.enabled":"已启用","cron.enabled_status":"启用","cron.disabled_status":"禁用","cron.empty":"暂无定时任务。","cron.confirm_delete":"确定要删除此任务吗?","cron.load_error":"加载定时任务失败","cron.validation_error":"计划和命令是必需的。","cron.add_error":"添加任务失败","cron.delete_error":"删除任务失败","cron.cancel":"取消","cron.adding":"添加中...","cron.id":"ID","cron.actions":"操作","cron.loading_run_history":"加载运行历史...","cron.load_run_history_error":"加载运行历史失败","cron.no_runs":"暂无运行记录。","cron.recent_runs":"最近运行","cron.yes":"是","cron.no":"否","cron.edit":"编辑","cron.edit_modal_title":"编辑 Cron 任务","cron.edit_error":"更新任务失败","cron.saving":"保存中...","cron.save":"保存","integrations.title":"集成","integrations.available":"可用","integrations.active":"活跃","integrations.coming_soon":"即将推出","integrations.category":"类别","integrations.status":"状态","integrations.search":"搜索集成...","integrations.empty":"未找到集成。","integrations.activate":"激活","integrations.deactivate":"停用","integrations.load_error":"加载集成失败","integrations.status_active":"活跃","integrations.status_available":"可用","integrations.status_coming_soon":"即将推出","memory.title":"记忆存储","memory.memory_title":"记忆","memory.search":"搜索记忆...","memory.search_placeholder":"搜索记忆条目...","memory.add":"存储记忆","memory.add_memory":"添加记忆","memory.add_modal_title":"添加记忆","memory.delete":"删除","memory.key":"键","memory.key_required":"键","memory.content":"内容","memory.content_required":"内容","memory.category":"类别","memory.category_optional":"类别(可选)","memory.timestamp":"时间戳","memory.session":"会话","memory.score":"分数","memory.empty":"未找到记忆条目。","memory.confirm_delete":"确定要删除此记忆条目吗?","memory.all_categories":"所有类别","memory.search_button":"搜索","memory.load_error":"加载记忆失败","memory.saving":"保存中...","memory.validation_error":"键和内容是必需的。","memory.store_error":"保存记忆失败","memory.delete_error":"删除记忆失败","memory.delete_confirm":"删除?","memory.yes":"是","memory.no":"否","memory.cancel":"取消","config.title":"配置","config.save":"保存","config.saving":"保存中...","config.reset":"重置","config.saved":"配置保存成功。","config.error":"配置保存失败。","config.loading":"加载配置中...","config.editor_placeholder":"TOML 配置...","config.configuration_title":"配置","config.sensitive_title":"敏感字段已隐藏","config.sensitive_hint":"API 密钥、令牌和密码已隐藏以保护安全。要更新已隐藏的字段,请将整个隐藏值替换为您的新值。","config.save_success":"配置保存成功。","config.save_error":"保存配置失败","config.toml_label":"TOML 配置","config.lines":"行","cost.title":"成本追踪","cost.session":"会话成本","cost.daily":"每日成本","cost.monthly":"每月成本","cost.total_tokens":"总 Tokens","cost.request_count":"请求数","cost.by_model":"按模型统计","cost.model":"模型","cost.tokens":"Token","cost.requests":"请求","cost.usd":"成本(美元)","cost.load_error":"加载成本数据失败","cost.session_cost":"会话成本","cost.daily_cost":"每日成本","cost.monthly_cost":"每月成本","cost.total_requests":"总请求数","cost.token_statistics":"Token 统计","cost.avg_tokens_per_request":"平均 Token / 请求","cost.cost_per_1k_tokens":"每 1K Token 成本","cost.model_breakdown":"模型细分","cost.no_model_data":"没有模型数据可用。","cost.cost":"成本","cost.share":"占比","logs.title":"实时日志","logs.live_logs":"实时日志","logs.clear":"清除","logs.pause":"暂停","logs.resume":"继续","logs.filter":"筛选日志...","logs.filter_label":"筛选","logs.empty":"暂无日志条目。","logs.connected":"已连接","logs.disconnected":"已断开","logs.events":"事件","logs.jump_to_bottom":"跳转到底部","logs.paused_hint":"日志流已暂停。","logs.waiting_hint":"等待事件...","doctor.title":"系统诊断","doctor.diagnostics_title":"系统诊断","doctor.run":"运行诊断","doctor.run_diagnostics":"运行诊断","doctor.running":"正在运行诊断...","doctor.running_btn":"运行中...","doctor.running_desc":"正在运行诊断...","doctor.running_hint":"这可能需要几秒钟。","doctor.ok":"正常","doctor.warn":"警告","doctor.error":"错误","doctor.severity":"严重程度","doctor.category":"类别","doctor.message":"消息","doctor.empty":"尚未运行诊断。","doctor.summary":"诊断摘要","doctor.issues_found":"发现问题","doctor.warnings_summary":"警告","doctor.all_clear":"一切正常","doctor.system_diagnostics":"系统诊断","doctor.empty_hint":'点击"运行诊断"检查您的 ZeroClaw 安装。',"auth.pair":"配对设备","auth.pairing_code":"配对码","auth.pair_button":"配对","auth.logout":"退出","auth.pairing_success":"配对成功!","auth.pairing_failed":"配对失败,请重试。","auth.enter_code":"请输入配对码以连接到智能体。","common.loading":"加载中...","common.error":"发生错误。","common.retry":"重试","common.cancel":"取消","common.confirm":"确认","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.close":"关闭","common.yes":"是","common.no":"否","common.search":"搜索...","common.no_data":"暂无数据。","common.refresh":"刷新","common.back":"返回","common.actions":"操作","common.name":"名称","common.description":"描述","common.status":"状态","common.created":"创建时间","common.updated":"更新时间","health.title":"系统健康","health.component":"组件","health.status":"状态","health.last_ok":"上次正常","health.last_error":"上次错误","health.restart_count":"重启次数","health.pid":"进程 ID","health.uptime":"运行时间","health.updated_at":"最后更新","dashboard.provider_model":"提供商 / 模型","dashboard.since_last_restart":"自上次重启","dashboard.paired_yes":"是","dashboard.paired_no":"否","dashboard.cost_overview":"成本概览","dashboard.active_channels":"活跃频道","dashboard.filter_active":"活跃","dashboard.filter_all":"全部","dashboard.no_active_channels":"没有活跃频道","dashboard.component_health":"组件健康","dashboard.load_error":"加载仪表盘失败","dashboard.session_label":"会话","dashboard.daily_label":"每日","dashboard.monthly_label":"每月","dashboard.total_tokens_label":"总 Tokens","dashboard.requests_label":"请求","dashboard.no_channels":"未配置频道","dashboard.active":"活跃","dashboard.inactive":"非活跃","dashboard.no_components":"没有组件报告","dashboard.restarts":"重启次数","dashboard.tab_overview":"概览","dashboard.tab_sessions":"会话","dashboard.tab_channels":"频道","dashboard.sessions_title":"活跃会话","dashboard.no_sessions":"没有活跃会话","dashboard.session_id":"会话 ID","dashboard.session_channel":"频道","dashboard.session_started":"开始时间","dashboard.session_last_activity":"最近活动","dashboard.session_status":"状态","dashboard.session_messages":"消息数","dashboard.session_details":"会话详情","dashboard.session_history":"查看历史","dashboard.channels_title":"频道状态","dashboard.no_channels_detail":"没有频道详情","dashboard.channel_type":"类型","dashboard.channel_messages":"消息数","dashboard.channel_last_message":"最近消息","dashboard.channel_config":"配置摘要","dashboard.channel_enabled":"已启用","dashboard.channel_disabled":"已禁用","dashboard.loading_sessions":"加载会话中...","dashboard.loading_channels":"加载频道中...","dashboard.load_sessions_error":"加载会话失败","dashboard.load_channels_error":"加载频道失败","dashboard.never":"从未","settings.title":"设置","settings.tab.appearance":"外观","settings.tab.typography":"排版","settings.appearance":"外观设置","settings.typography":"字体设置","settings.fontUi":"界面字体","settings.fontMono":"代码字体","settings.fontSize":"界面字号","settings.fontMonoSize":"代码字号","settings.preview":"预览","settings.previewText":"界面字体预览文本","settings.fontNote":"字体设置需要刷新页面后生效","settings.language":"界面语言","theme.mode":"主题模式","theme.accent":"强调色","theme.system":"跟随系统","theme.dark":"深色","theme.light":"浅色","theme.oled":"纯黑","console.nav.commandDeck":"指挥舱","console.nav.missionCenter":"任务中心","console.nav.skillLibrary":"技能库","console.nav.dailyReport":"日报","console.nav.settings":"设置","console.role.finance":"财务","console.role.engineering":"工程","console.role.executive":"管理","console.role.hr":"人事","console.role.sales":"销售","console.state.loading":"加载中...","console.state.empty":"暂无数据","console.state.backendDown":"后端服务不可达","console.state.partialData":"部分数据源加载失败","console.state.stale":"数据已过期","console.state.unauthorized":"未授权","console.action.refresh":"刷新","console.action.approve":"批准","console.action.reject":"驳回","console.action.retry":"重试","console.action.create":"新建任务","console.skill.capabilityLevel":"能力等级","console.skill.enable":"启用","console.skill.disable":"停用","console.skill.core":"核心","console.skill.standard":"标准","console.skill.specialized":"专业","console.skill.experimental":"实验","console.report.dailyTitle":"日报","console.report.sourceLinks":"数据来源","console.report.noEvents":"当日无执行记录"},en:{"nav.dashboard":"Dashboard","nav.plans":"Plans","nav.execution":"Execution","nav.governance":"Governance","nav.scheduler":"Scheduler","nav.skills":"Skills","nav.agent":"Agent","nav.tools":"Tools","nav.cron":"Cron Jobs","nav.integrations":"Integrations","nav.memory":"Memory","nav.config":"Configuration","nav.cost":"Cost Tracker","nav.logs":"Logs","nav.devtools":"Tools","nav.swimlane":"Swimlane","nav.doctor":"Doctor","nav.canvas":"Canvas","planb.nav.chat":"Chat","planb.nav.browser":"AI Browser","planb.nav.dashboard":"Dashboard","planb.nav.settings":"Settings","planb.nav.more":"More Tools","planb.layout.switch_to_wide":"Switch to Desktop","planb.layout.switch_to_compact":"Switch to Compact","planb.layout.pop_out":"Pop Out Window","planb.browser.title":"AI Browser","planb.browser.subtitle":"Launch SuperRPA browser automation","planb.browser.launch":"Launch Browser","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Active Sessions","planb.browser.no_sessions":"No active browser sessions. Launch one above.","planb.browser.status_launching":"Launching","planb.browser.status_running":"Running","planb.browser.status_idle":"Idle","planb.browser.status_error":"Error","planb.browser.status_stopped":"Stopped","planb.browser.launch_error":"Failed to launch browser","planb.browser.close_error":"Failed to close session","planb.browser.backend_not_configured":"SuperRPA is not configured. Set SGCLAW_SUPERRPA_PATH environment variable.","planb.chat.welcome":"How can I help you today?","planb.chat.placeholder":"Ask anything...","planb.chat.sessions":"Chat History","planb.chat.new_chat":"New Chat","planb.chat.no_sessions":"No chat history","planb.chat.untitled":"Untitled","planb.chat.thought":"Thought","planb.chat.chip_browse":"Browse Web","planb.chat.chip_code":"Write Code","planb.chat.chip_analyze":"Analyze Data","planb.chat.chip_plan":"Plan Project","planb.chat.regenerate":"Regenerate","planb.settings.quick":"Quick Settings","planb.settings.advanced":"Advanced","planb.settings.quick_hint":"Quick settings are coming soon. Use the advanced editor to modify TOML configuration for now.","planb.settings.open_advanced":"Open Advanced Editor","dashboard.title":"Dashboard","dashboard.provider":"Provider","dashboard.model":"Model","dashboard.uptime":"Uptime","dashboard.temperature":"Temperature","dashboard.gateway_port":"Gateway Port","dashboard.memory_backend":"Memory Backend","dashboard.paired":"Paired","dashboard.channels":"Channels","dashboard.health":"Health","dashboard.status":"Status","dashboard.overview":"Overview","dashboard.system_info":"System Information","dashboard.quick_actions":"Quick Actions","agent.title":"Agent Chat","agent.send":"Send","agent.placeholder":"Type a message...","agent.start_conversation":"Send a message to start the conversation","agent.type_message":"Type a message...","agent.connecting":"Connecting...","agent.connected":"Connected","agent.disconnected":"Disconnected","agent.reconnecting":"Reconnecting...","agent.thinking":"Thinking...","agent.tool_call":"Tool Call","agent.tool_result":"Tool Result","agent.connection_error":"Connection error. Attempting to reconnect...","agent.tool_call_prefix":"[Tool Call]","agent.tool_result_prefix":"[Tool Result]","agent.error_prefix":"[Error]","agent.unknown_error":"Unknown error","agent.send_error":"Failed to send message. Please try again.","agent.copy_message":"Copy message","agent.connected_status":"Connected","agent.disconnected_status":"Disconnected","tools.title":"Available Tools","tools.name":"Name","tools.description":"Description","tools.parameters":"Parameters","tools.search":"Search tools...","tools.empty":"No tools available.","tools.count":"Total tools","tools.agent_tools":"Agent Tools","tools.cli_tools":"CLI Tools","tools.parameter_schema":"Parameter Schema","tools.path":"Path","tools.version":"Version","tools.category":"Category","tools.load_error":"Failed to load tools","cron.title":"Scheduled Jobs","cron.scheduled_tasks":"Scheduled Tasks","cron.add":"Add Job","cron.add_job":"Add Job","cron.add_modal_title":"Add Cron Job","cron.delete":"Delete","cron.enable":"Enable","cron.disable":"Disable","cron.name":"Name","cron.name_optional":"Name (optional)","cron.command":"Command","cron.command_required":"Command","cron.schedule":"Schedule","cron.schedule_required":"Schedule","cron.next_run":"Next Run","cron.last_run":"Last Run","cron.last_status":"Last Status","cron.enabled":"Enabled","cron.enabled_status":"Enabled","cron.disabled_status":"Disabled","cron.empty":"No scheduled jobs.","cron.confirm_delete":"Are you sure you want to delete this job?","cron.load_error":"Failed to load cron jobs","cron.validation_error":"Schedule and command are required.","cron.add_error":"Failed to add job","cron.delete_error":"Failed to delete job","cron.cancel":"Cancel","cron.adding":"Adding...","cron.id":"ID","cron.actions":"Actions","cron.loading_run_history":"Loading run history...","cron.load_run_history_error":"Failed to load run history","cron.no_runs":"No runs recorded yet.","cron.recent_runs":"Recent Runs","cron.yes":"Yes","cron.no":"No","cron.edit":"Edit","cron.edit_modal_title":"Edit Cron Job","cron.edit_error":"Failed to update job","cron.saving":"Saving...","cron.save":"Save","integrations.title":"Integrations","integrations.available":"Available","integrations.active":"Active","integrations.coming_soon":"Coming Soon","integrations.category":"Category","integrations.status":"Status","integrations.search":"Search integrations...","integrations.empty":"No integrations found.","integrations.activate":"Activate","integrations.deactivate":"Deactivate","integrations.load_error":"Failed to load integrations","integrations.status_active":"Active","integrations.status_available":"Available","integrations.status_coming_soon":"Coming Soon","memory.title":"Memory Store","memory.memory_title":"Memory","memory.search":"Search memory...","memory.search_placeholder":"Search memory entries...","memory.add":"Store Memory","memory.add_memory":"Add Memory","memory.add_modal_title":"Add Memory","memory.delete":"Delete","memory.key":"Key","memory.key_required":"Key","memory.content":"Content","memory.content_required":"Content","memory.category":"Category","memory.category_optional":"Category (optional)","memory.timestamp":"Timestamp","memory.session":"Session","memory.score":"Score","memory.empty":"No memory entries found.","memory.confirm_delete":"Are you sure you want to delete this memory entry?","memory.all_categories":"All Categories","memory.search_button":"Search","memory.load_error":"Failed to load memory","memory.saving":"Saving...","memory.validation_error":"Key and content are required.","memory.store_error":"Failed to store memory","memory.delete_error":"Failed to delete memory","memory.delete_confirm":"Delete?","memory.yes":"Yes","memory.no":"No","memory.cancel":"Cancel","config.title":"Configuration","config.save":"Save","config.saving":"Saving...","config.reset":"Reset","config.saved":"Configuration saved successfully.","config.error":"Failed to save configuration.","config.loading":"Loading configuration...","config.editor_placeholder":"TOML configuration...","config.configuration_title":"Configuration","config.sensitive_title":"Sensitive fields are masked","config.sensitive_hint":"API keys, tokens, and passwords are hidden for security. To update a masked field, replace the entire masked value with your new value.","config.save_success":"Configuration saved successfully.","config.save_error":"Failed to save configuration","config.toml_label":"TOML Configuration","config.lines":"lines","cost.title":"Cost Tracker","cost.session":"Session Cost","cost.daily":"Daily Cost","cost.monthly":"Monthly Cost","cost.total_tokens":"Total Tokens","cost.request_count":"Requests","cost.by_model":"Cost by Model","cost.model":"Model","cost.tokens":"Tokens","cost.requests":"Requests","cost.usd":"Cost (USD)","cost.load_error":"Failed to load cost data","cost.session_cost":"Session Cost","cost.daily_cost":"Daily Cost","cost.monthly_cost":"Monthly Cost","cost.total_requests":"Total Requests","cost.token_statistics":"Token Statistics","cost.avg_tokens_per_request":"Avg Tokens / Request","cost.cost_per_1k_tokens":"Cost per 1K Tokens","cost.model_breakdown":"Model Breakdown","cost.no_model_data":"No model data available.","cost.cost":"Cost","cost.share":"Share","logs.title":"Live Logs","logs.live_logs":"Live Logs","logs.clear":"Clear","logs.pause":"Pause","logs.resume":"Resume","logs.filter":"Filter logs...","logs.filter_label":"Filter","logs.empty":"No log entries.","logs.connected":"Connected","logs.disconnected":"Disconnected","logs.events":"events","logs.jump_to_bottom":"Jump to bottom","logs.paused_hint":"Log streaming is paused.","logs.waiting_hint":"Waiting for events...","doctor.title":"System Diagnostics","doctor.diagnostics_title":"Diagnostics","doctor.run":"Run Diagnostics","doctor.run_diagnostics":"Run Diagnostics","doctor.running":"Running diagnostics...","doctor.running_btn":"Running...","doctor.running_desc":"Running diagnostics...","doctor.running_hint":"This may take a few seconds.","doctor.ok":"OK","doctor.warn":"Warning","doctor.error":"Error","doctor.severity":"Severity","doctor.category":"Category","doctor.message":"Message","doctor.empty":"No diagnostics have been run yet.","doctor.summary":"Diagnostic Summary","doctor.issues_found":"Issues Found","doctor.warnings_summary":"Warnings","doctor.all_clear":"All Clear","doctor.system_diagnostics":"System Diagnostics","doctor.empty_hint":'Click "Run Diagnostics" to check your ZeroClaw installation.',"auth.pair":"Pair Device","auth.pairing_code":"Pairing Code","auth.pair_button":"Pair","auth.logout":"Logout","auth.pairing_success":"Pairing successful!","auth.pairing_failed":"Pairing failed. Please try again.","auth.enter_code":"Enter your pairing code to connect to the agent.","common.loading":"Loading...","common.error":"An error occurred.","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.close":"Close","common.yes":"Yes","common.no":"No","common.search":"Search...","common.no_data":"No data available.","common.refresh":"Refresh","common.back":"Back","common.actions":"Actions","common.name":"Name","common.description":"Description","common.status":"Status","common.created":"Created","common.updated":"Updated","health.title":"System Health","health.component":"Component","health.status":"Status","health.last_ok":"Last OK","health.last_error":"Last Error","health.restart_count":"Restarts","health.pid":"Process ID","health.uptime":"Uptime","health.updated_at":"Last Updated","dashboard.provider_model":"Provider / Model","dashboard.since_last_restart":"Since last restart","dashboard.paired_yes":"Yes","dashboard.paired_no":"No","dashboard.cost_overview":"Cost Overview","dashboard.active_channels":"Active Channels","dashboard.filter_active":"Active","dashboard.filter_all":"All","dashboard.no_active_channels":"No active channels","dashboard.component_health":"Component Health","dashboard.load_error":"Failed to load dashboard","dashboard.session_label":"Session","dashboard.daily_label":"Daily","dashboard.monthly_label":"Monthly","dashboard.total_tokens_label":"Total Tokens","dashboard.requests_label":"Requests","dashboard.no_channels":"No channels configured","dashboard.active":"Active","dashboard.inactive":"Inactive","dashboard.no_components":"No components reporting","dashboard.restarts":"Restarts","dashboard.tab_overview":"Overview","dashboard.tab_sessions":"Sessions","dashboard.tab_channels":"Channels","dashboard.sessions_title":"Active Sessions","dashboard.no_sessions":"No active sessions","dashboard.session_id":"Session ID","dashboard.session_channel":"Channel","dashboard.session_started":"Started","dashboard.session_last_activity":"Last Activity","dashboard.session_status":"Status","dashboard.session_messages":"Messages","dashboard.session_details":"Session Details","dashboard.session_history":"View History","dashboard.channels_title":"Channel Status","dashboard.no_channels_detail":"No channel details available","dashboard.channel_type":"Type","dashboard.channel_messages":"Messages","dashboard.channel_last_message":"Last Message","dashboard.channel_config":"Configuration","dashboard.channel_enabled":"Enabled","dashboard.channel_disabled":"Disabled","dashboard.loading_sessions":"Loading sessions...","dashboard.loading_channels":"Loading channels...","dashboard.load_sessions_error":"Failed to load sessions","dashboard.load_channels_error":"Failed to load channels","dashboard.never":"Never","settings.title":"Settings","settings.tab.appearance":"Appearance","settings.tab.typography":"Typography","settings.appearance":"Appearance","settings.typography":"Typography","settings.fontUi":"UI Font","settings.fontMono":"Code Font","settings.fontSize":"UI Font Size","settings.fontMonoSize":"Code Font Size","settings.preview":"Preview","settings.previewText":"The quick brown fox jumps over the lazy dog.","settings.fontNote":"Font changes apply on page reload.","settings.language":"Language","theme.mode":"Theme Mode","theme.accent":"Accent Color","theme.system":"System","theme.dark":"Dark","theme.light":"Light","theme.oled":"OLED Black","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"},tr:{"nav.dashboard":"Kontrol Paneli","nav.plans":"Planlar","nav.execution":"Yürütme","nav.governance":"Yönetişim","nav.scheduler":"Zamanlayıcı","nav.skills":"Beceriler","nav.agent":"Ajan","nav.tools":"Araçlar","nav.cron":"Cron Görevleri","nav.integrations":"Entegrasyonlar","nav.memory":"Hafıza","nav.config":"Yapılandırma","nav.cost":"Maliyet Takibi","nav.logs":"Kayıtlar","nav.devtools":"Araçlar","nav.swimlane":"Yüzme Şeridi","nav.doctor":"Doktor","nav.canvas":"Tuval","planb.nav.chat":"Sohbet","planb.nav.browser":"AI Tarayıcı","planb.nav.dashboard":"Kontrol Paneli","planb.nav.settings":"Ayarlar","planb.nav.more":"Daha Fazla","planb.layout.switch_to_wide":"Masaüstüne Geç","planb.layout.switch_to_compact":"Kompakta Geç","planb.layout.pop_out":"Pencereyi Ayır","planb.browser.title":"AI Tarayıcı","planb.browser.subtitle":"SuperRPA tarayıcı otomasyonunu başlat","planb.browser.launch":"Tarayıcıyı Başlat","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Aktif Oturumlar","planb.browser.no_sessions":"Aktif tarayıcı oturumu yok.","planb.browser.status_launching":"Başlatılıyor","planb.browser.status_running":"Çalışıyor","planb.browser.status_idle":"Boşta","planb.browser.status_error":"Hata","planb.browser.status_stopped":"Durduruldu","planb.browser.launch_error":"Tarayıcı başlatılamadı","planb.browser.close_error":"Oturum kapatılamadı","planb.browser.backend_not_configured":"SuperRPA yapılandırılmamış.","planb.chat.welcome":"Bugün size nasıl yardımcı olabilirim?","planb.chat.placeholder":"Bir şey sor...","planb.chat.sessions":"Sohbet Geçmişi","planb.chat.new_chat":"Yeni Sohbet","planb.chat.no_sessions":"Sohbet geçmişi yok","planb.chat.untitled":"Başlıksız","planb.chat.thought":"Düşünce","planb.chat.chip_browse":"Webde Gezin","planb.chat.chip_code":"Kod Yaz","planb.chat.chip_analyze":"Veri Analizi","planb.chat.chip_plan":"Proje Planla","planb.chat.regenerate":"Yeniden Oluştur","planb.settings.quick":"Hızlı Ayarlar","planb.settings.advanced":"Gelişmiş","planb.settings.quick_hint":"Hızlı ayarlar yakında gelecek. Şimdilik gelişmiş düzenleyiciyi kullanın.","planb.settings.open_advanced":"Gelişmiş Düzenleyiciyi Aç","dashboard.title":"Kontrol Paneli","dashboard.provider":"Sağlayıcı","dashboard.model":"Model","dashboard.uptime":"Çalışma Süresi","dashboard.temperature":"Sıcaklık","dashboard.gateway_port":"Ağ Geçidi Portu","dashboard.locale":"Dil","dashboard.memory_backend":"Hafıza Motoru","dashboard.paired":"Eşleştirilmiş","dashboard.channels":"Kanallar","dashboard.health":"Sağlık","dashboard.status":"Durum","dashboard.overview":"Genel Bakış","dashboard.system_info":"Sistem Bilgisi","dashboard.quick_actions":"Hızlı İşlemler","dashboard.provider_model":"Sağlayıcı / Model","dashboard.since_last_restart":"Son Yeniden Başlatmadan Beri","dashboard.paired_yes":"Evet","dashboard.paired_no":"Hayır","dashboard.cost_overview":"Maliyet Genel Bakışı","dashboard.active_channels":"Aktif Kanallar","dashboard.filter_active":"Aktif","dashboard.filter_all":"Tümü","dashboard.no_active_channels":"Aktif kanal yok","dashboard.component_health":"Bileşen Sağlığı","dashboard.load_error":"Kontrol paneli yüklenemedi","dashboard.session_label":"Oturum","dashboard.daily_label":"Günlük","dashboard.monthly_label":"Aylık","dashboard.total_tokens_label":"Toplam Token","dashboard.requests_label":"İstekler","dashboard.no_channels":"Kanal yapılandırılmamış","dashboard.active":"Aktif","dashboard.inactive":"Aktif Değil","dashboard.no_components":"Bileşen raporlamıyor","dashboard.restarts":"Yeniden Başlatmalar","dashboard.tab_overview":"Genel Bakış","dashboard.tab_sessions":"Oturumlar","dashboard.tab_channels":"Kanallar","dashboard.sessions_title":"Aktif Oturumlar","dashboard.no_sessions":"Aktif oturum yok","dashboard.session_id":"Oturum Kimliği","dashboard.session_channel":"Kanal","dashboard.session_started":"Başlangıç","dashboard.session_last_activity":"Son Etkinlik","dashboard.session_status":"Durum","dashboard.session_messages":"Mesajlar","dashboard.session_details":"Oturum Ayrıntıları","dashboard.session_history":"Geçmişi Görüntüle","dashboard.channels_title":"Kanal Durumu","dashboard.no_channels_detail":"Kanal ayrıntısı yok","dashboard.channel_type":"Tür","dashboard.channel_messages":"Mesajlar","dashboard.channel_last_message":"Son Mesaj","dashboard.channel_config":"Yapılandırma","dashboard.channel_enabled":"Etkin","dashboard.channel_disabled":"Devre Dışı","dashboard.loading_sessions":"Oturumlar yükleniyor...","dashboard.loading_channels":"Kanallar yükleniyor...","dashboard.load_sessions_error":"Oturumlar yüklenemedi","dashboard.load_channels_error":"Kanallar yüklenemedi","dashboard.never":"Hiç","agent.title":"Ajan Sohbeti","agent.send":"Gönder","agent.placeholder":"Bir mesaj yazın...","agent.start_conversation":"Sohbeti başlatmak için mesaj gönderin","agent.type_message":"Bir mesaj yazın...","agent.connecting":"Bağlanıyor...","agent.connected":"Bağlandı","agent.disconnected":"Bağlantı kesildi","agent.reconnecting":"Yeniden bağlanıyor...","agent.thinking":"Düşünüyor...","agent.tool_call":"Araç Çağrısı","agent.tool_result":"Araç Sonucu","agent.connection_error":"Bağlantı hatası. Yeniden bağlanmaya çalışılıyor...","agent.tool_call_prefix":"[Araç Çağrısı]","agent.tool_result_prefix":"[Araç Sonucu]","agent.error_prefix":"[Hata]","agent.unknown_error":"Bilinmeyen hata","agent.send_error":"Mesaj gönderilemedi. Lütfen tekrar deneyin.","agent.copy_message":"Mesajı kopyala","agent.connected_status":"Bağlandı","agent.disconnected_status":"Bağlantı kesildi","tools.title":"Mevcut Araçlar","tools.name":"Ad","tools.description":"Açıklama","tools.parameters":"Parametreler","tools.search":"Araç ara...","tools.empty":"Araç bulunamadı.","tools.count":"Toplam araç","tools.agent_tools":"Ajan Araçları","tools.cli_tools":"CLI Araçları","tools.parameter_schema":"Parametre Şeması","tools.path":"Yol","tools.version":"Sürüm","tools.category":"Kategori","tools.load_error":"Araçlar yüklenemedi","cron.title":"Zamanlanmış Görevler","cron.scheduled_tasks":"Zamanlanmış Görevler","cron.add":"Görev Ekle","cron.add_job":"Görev Ekle","cron.add_modal_title":"Cron Görevi Ekle","cron.delete":"Sil","cron.enable":"Etkinleştir","cron.disable":"Devre Dışı Bırak","cron.name":"Ad","cron.name_optional":"Ad (isteğe bağlı)","cron.command":"Komut","cron.command_required":"Komut","cron.schedule":"Zamanlama","cron.schedule_required":"Zamanlama","cron.next_run":"Sonraki Çalıştırma","cron.last_run":"Son Çalıştırma","cron.last_status":"Son Durum","cron.enabled":"Etkin","cron.enabled_status":"Etkin","cron.disabled_status":"Devre Dışı","cron.empty":"Zamanlanmış görev bulunamadı.","cron.confirm_delete":"Bu görevi silmek istediğinizden emin misiniz?","cron.load_error":"Cron görevleri yüklenemedi","cron.validation_error":"Zamanlama ve komut gereklidir.","cron.add_error":"Görev eklenemedi","cron.delete_error":"Görev silinemedi","cron.cancel":"İptal","cron.adding":"Ekleniyor...","cron.id":"ID","cron.actions":"İşlemler","cron.loading_run_history":"Çalıştırma geçmişi yükleniyor...","cron.load_run_history_error":"Çalıştırma geçmişi yüklenemedi","cron.no_runs":"Henüz çalıştırma kaydı yok.","cron.recent_runs":"Son Çalıştırmalar","cron.yes":"Evet","cron.no":"Hayır","cron.edit":"Düzenle","cron.edit_modal_title":"Cron Görevini Düzenle","cron.edit_error":"Görev güncellenemedi","cron.saving":"Kaydediliyor...","cron.save":"Kaydet","integrations.title":"Entegrasyonlar","integrations.available":"Mevcut","integrations.active":"Aktif","integrations.coming_soon":"Yakında","integrations.category":"Kategori","integrations.status":"Durum","integrations.search":"Entegrasyon ara...","integrations.empty":"Entegrasyon bulunamadı.","integrations.activate":"Etkinleştir","integrations.deactivate":"Devre Dışı Bırak","integrations.load_error":"Entegrasyonlar yüklenemedi","integrations.all":"Tümü","integrations.status_active":"Aktif","integrations.status_available":"Mevcut","integrations.status_coming_soon":"Yakında","memory.title":"Hafıza Deposu","memory.memory_title":"Hafıza","memory.search":"Hafıza ara...","memory.search_placeholder":"Hafıza girişleri ara...","memory.add":"Hafıza Ekle","memory.add_memory":"Hafıza Ekle","memory.add_modal_title":"Hafıza Ekle","memory.delete":"Sil","memory.key":"Anahtar","memory.key_required":"Anahtar","memory.content":"İçerik","memory.content_required":"İçerik","memory.category":"Kategori","memory.category_optional":"Kategori (isteğe bağlı)","memory.timestamp":"Zaman Damgası","memory.session":"Oturum","memory.score":"Puan","memory.empty":"Hafıza girişi bulunamadı.","memory.confirm_delete":"Bu hafıza girişini silmek istediğinizden emin misiniz?","memory.all_categories":"Tüm Kategoriler","memory.search_button":"Ara","memory.load_error":"Hafıza yüklenemedi","memory.saving":"Kaydediliyor...","memory.validation_error":"Anahtar ve içerik gereklidir.","memory.store_error":"Hafıza kaydedilemedi","memory.delete_error":"Hafıza silinemedi","memory.delete_confirm":"Sil?","memory.yes":"Evet","memory.no":"Hayır","memory.cancel":"İptal","config.title":"Yapılandırma","config.save":"Kaydet","config.saving":"Kaydediliyor...","config.reset":"Sıfırla","config.saved":"Yapılandırma başarıyla kaydedildi.","config.error":"Yapılandırma kaydedilemedi.","config.loading":"Yapılandırma yükleniyor...","config.editor_placeholder":"TOML yapılandırması...","config.configuration_title":"Yapılandırma","config.sensitive_title":"Hassas alanlar gizlendi","config.sensitive_hint":"API anahtarları, belirteçler ve parolalar güvenlik için gizlendi. Maskeli bir alanı güncellemek için, tüm maskeli değeri yeni değerinizle değiştirin.","config.save_success":"Yapılandırma başarıyla kaydedildi.","config.save_error":"Yapılandırma kaydedilemedi","config.toml_label":"TOML Yapılandırması","config.lines":"satır","cost.title":"Maliyet Takibi","cost.session":"Oturum Maliyeti","cost.daily":"Günlük Maliyet","cost.monthly":"Aylık Maliyet","cost.total_tokens":"Toplam Token","cost.request_count":"İstek Sayısı","cost.by_model":"Modele Göre Maliyet","cost.model":"Model","cost.tokens":"Token","cost.requests":"İstekler","cost.usd":"Maliyet (USD)","cost.load_error":"Maliyet verileri yüklenemedi","cost.session_cost":"Oturum Maliyeti","cost.daily_cost":"Günlük Maliyet","cost.monthly_cost":"Aylık Maliyet","cost.total_requests":"Toplam İstek","cost.token_statistics":"Token İstatistikleri","cost.avg_tokens_per_request":"Ortalama Token / İstek","cost.cost_per_1k_tokens":"1K Token Başına Maliyet","cost.model_breakdown":"Model Detayı","cost.no_model_data":"Model verisi mevcut değil.","cost.cost":"Maliyet","cost.share":"Pay","logs.title":"Canlı Kayıtlar","logs.live_logs":"Canlı Kayıtlar","logs.clear":"Temizle","logs.pause":"Duraklat","logs.resume":"Devam Et","logs.filter":"Kayıtları filtrele...","logs.filter_label":"Filtre","logs.empty":"Kayıt girişi bulunamadı.","logs.connected":"Bağlandı","logs.disconnected":"Bağlantı kesildi","logs.events":"olay","logs.jump_to_bottom":"En alta atla","logs.paused_hint":"Kayıt akışı duraklatıldı.","logs.waiting_hint":"Olay bekleniyor...","doctor.title":"Sistem Tanıları","doctor.diagnostics_title":"Tanılar","doctor.run":"Tanı Çalıştır","doctor.run_diagnostics":"Tanı Çalıştır","doctor.running":"Tanı çalıştırılıyor...","doctor.running_btn":"Çalıştırılıyor...","doctor.running_desc":"Tanı çalıştırılıyor...","doctor.running_hint":"Bu birkaç saniye sürebilir.","doctor.ok":"Tamam","doctor.warn":"Uyarı","doctor.error":"Hata","doctor.severity":"Şiddet","doctor.category":"Kategori","doctor.message":"Mesaj","doctor.empty":"Henüz tanı çalıştırılmadı.","doctor.summary":"Tanı Özeti","doctor.issues_found":"Sorunlar Bulundu","doctor.warnings_summary":"Uyarılar","doctor.all_clear":"Her Şey Yolunda","doctor.system_diagnostics":"Sistem Tanıları","doctor.empty_hint":'ZeroClaw kurulumunuzu kontrol etmek için "Tanı Çalıştır" düğmesine tıklayın.',"auth.pair":"Cihaz Eşleştir","auth.pairing_code":"Eşleştirme Kodu","auth.pair_button":"Eşleştir","auth.logout":"Çıkış Yap","auth.pairing_success":"Eşleştirme başarılı!","auth.pairing_failed":"Eşleştirme başarısız. Lütfen tekrar deneyin.","auth.enter_code":"Akıllı birine bağlanmak için eşleştirme kodunuzu girin.","common.loading":"Yükleniyor...","common.error":"Bir hata oluştu.","common.retry":"Tekrar Dene","common.cancel":"İptal","common.confirm":"Onayla","common.save":"Kaydet","common.delete":"Sil","common.edit":"Düzenle","common.close":"Kapat","common.yes":"Evet","common.no":"Hayır","common.search":"Ara...","common.no_data":"Veri mevcut değil.","common.refresh":"Yenile","common.back":"Geri","common.actions":"İşlemler","common.name":"Ad","common.description":"Açıklama","common.status":"Durum","common.created":"Oluşturulma","common.updated":"Güncellenme","health.title":"Sistem Sağlığı","health.component":"Bileşen","health.status":"Durum","health.last_ok":"Son Başarılı","health.last_error":"Son Hata","health.restart_count":"Yeniden Başlatmalar","health.pid":"İşlem Kimliği","health.uptime":"Çalışma Süresi","health.updated_at":"Son Güncelleme","settings.title":"Ayarlar","settings.tab.appearance":"Görünüm","settings.tab.typography":"Tipografi","settings.appearance":"Görünüm","settings.typography":"Tipografi","settings.fontUi":"Arayüz Yazı Tipi","settings.fontMono":"Kod Yazı Tipi","settings.fontSize":"Arayüz Boyutu","settings.fontMonoSize":"Kod Boyutu","settings.preview":"Önizleme","settings.previewText":"Tembel köpek üzerinde hızlı kahverengi tilki zıplar.","settings.fontNote":"Yazı tipi değişiklikleri sayfa yeniden yüklendikten sonra geçerli olur.","settings.language":"Dil","theme.mode":"Tema Modu","theme.accent":"Vurgu Rengi","theme.system":"Sistem","theme.dark":"Koyu","theme.light":"Açık","theme.oled":"OLED Siyah","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"}};let Bx="zh";function Xo(l){var s;return((s=Ap[Bx])==null?void 0:s[l])??Ap.en[l]??l}const Zr=["whitecollar-day","whitecollar-day-0830-browser-portal-check","whitecollar-day-0900-browser-inbox-triage","whitecollar-day-0930-calendar-brief","whitecollar-day-1030-browser-crm-followup","whitecollar-day-1130-browser-expense-approval","whitecollar-day-1330-sales-snapshot","whitecollar-day-1430-report-export","whitecollar-day-1530-browser-knowledge-check","whitecollar-day-1630-task-board-sync","whitecollar-day-1730-browser-day-close","zhihu-hotlist-monitor"],qx=[{key:"all",label:"全部委托"},{key:"daily",label:"日常任务"},{key:"weekly",label:"周任务"},{key:"monthly",label:"月度任务"},{key:"adhoc",label:"临时任务"}];function Ko(l){const s=typeof l.updated_at=="string"?l.updated_at:typeof l.created_at=="string"?l.created_at:"",u=s?new Date(s).getTime():0;return Number.isFinite(u)?u:0}function dl(l){if(!l)return"";const s=new Date(l);return Number.isNaN(s.getTime())?"":[s.getFullYear(),String(s.getMonth()+1).padStart(2,"0"),String(s.getDate()).padStart(2,"0")].join("-")}function ul(){return dl(new Date().toISOString())}function Dp(l,s){const u=l?new Date(`${l}T12:00:00`):new Date;return Number.isNaN(u.getTime())?ul():(u.setDate(u.getDate()+s),dl(u.toISOString()))}function sd(l){const s=`${l.title} ${l.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!s)return null;const u=Number(s[1]),o=Number(s[2]);return!Number.isInteger(u)||!Number.isInteger(o)||u>23||o>59?null:{text:`${String(u).padStart(2,"0")}:${String(o).padStart(2,"0")}`,minutes:u*60+o}}function rd(l){return l.steps.flatMap(s=>s.tasks.flatMap(u=>[u.startedAt,u.finishedAt])).filter(s=>!!s)}function $x(l,s){return rd(l).map(dl).filter(Boolean).includes(s)||sd(l)?!0:[l.updatedAt,l.createdAt].map(dl).includes(s)}function Yx(l){return sd(l)&&`${l.title}`.trim().toLowerCase()||l.id}function Gx(l,s){return rd(l).some(u=>dl(u)===s)}function zp(l,s){const u=Gx(l,s)?1e4:0,o=Zr.includes(l.id)?1e3:0,f=[l.updatedAt,l.createdAt].map(dl).includes(s)?100:0;return u+o+f+Ko({updated_at:l.updatedAt||"",created_at:l.createdAt||""})/1e13}function Qx(l,s){const u=new Map;for(const o of l){const f=Yx(o),m=u.get(f);(!m||zp(o,s)>zp(m,s))&&u.set(f,o)}return Array.from(u.values())}function Mp(l,s){const u=sd(l);if(u)return u.minutes;const o=rd(l).filter(f=>dl(f)===s).sort();if(o[0]){const f=new Date(o[0]);return f.getHours()*60+f.getMinutes()}return 1440}function Xx(l){const s=`${l.id} ${l.title} ${l.objective}`.toLowerCase();return s.includes("month")||s.includes("monthly")||s.includes("月")?"monthly":s.includes("week")||s.includes("weekly")||s.includes("周")?"weekly":s.includes("临时")||s.includes("adhoc")||s.includes("hotlist")||s.includes("monitor")?"adhoc":"daily"}async function wg(l,s,u={}){const o=Date.now(),f=await mg({command_kind:l,context_refs:s,payload:{source:"digital-mission-center",...u},correlation_id:`mission-${l}-${o}`,idempotency_key:`mission-${l}-${Object.values(s).join("-")||"new"}-${o}`});if(!f.accepted)throw new Error(f.message||`command 未被接受:${f.command_id||l}`);return f}async function pa(l,s,u={}){return wg(s,{plan_id:l},u)}async function Rp(l){const s=l.sourceIds.planId;if(!s)return null;const u=l.status.toLowerCase();if(u==="draft")await pa(s,"submit_plan",{requested_action:"mission_dispatch"}),await pa(s,"approve_plan",{requested_action:"mission_dispatch"});else if(u==="reviewing")await pa(s,"approve_plan",{requested_action:"mission_dispatch"});else if(!["approved","active","running"].includes(u))return await pa(s,"amend_plan",{requested_action:"reopen_for_execution",summary:"数字员工任务中心请求重新执行任务"}),null;return await pa(s,"activate_plan",{requested_action:"mission_dispatch"}),s}function Kx(l){const s=l.steps.map((u,o)=>{const f=new Set;u.preferredSkills.forEach(p=>{p.trim()&&f.add(p)}),u.tasks.forEach(p=>{var j;(j=p.assignedSkillId)!=null&&j.trim()&&f.add(p.assignedSkillId)});const m=[u.description,...u.tasks.map(p=>p.description),u.title,l.objective,l.title].find(p=>typeof p=="string"&&p.trim());return{title:u.title||`${l.title} 第 ${o+1} 步`,description:m||u.title||l.objective||l.title,skills:Array.from(f),depends_on:o===0?[]:[`step-${o}`]}}).filter(u=>u.skills.length>0);if(s.length===0)throw new Error("当前任务没有可复用的 skill,不能创建真实重新执行计划。");return s}function Ng(l){return`${l.replace(/(\s*重新执行)+$/u,"").trim()||l} 重新执行`}async function Zx(l){var f,m;const s=await wg("create_plan",{session_id:"digital-mission-center",plan_id:l.sourceIds.planId||l.id},{requested_action:"mission_restart",title:Ng(l.title),description:l.objective||l.title,steps:Kx(l),original_plan_id:l.sourceIds.planId||l.id}),u=typeof((f=s.result)==null?void 0:f.plan_id)=="string"?s.result.plan_id:"";if(!u)throw new Error("重新执行计划已提交,但后端没有返回 plan_id。");const o=typeof((m=s.result)==null?void 0:m.status)=="string"?s.result.status.toLowerCase():"";return o==="draft"?(await pa(u,"submit_plan",{requested_action:"mission_restart"}),await pa(u,"approve_plan",{requested_action:"mission_restart"}),await pa(u,"activate_plan",{requested_action:"mission_restart"})):o==="reviewing"?(await pa(u,"approve_plan",{requested_action:"mission_restart"}),await pa(u,"activate_plan",{requested_action:"mission_restart"})):o==="approved"&&await pa(u,"activate_plan",{requested_action:"mission_restart"}),u}function Vx({focusMissionId:l,focusTaskId:s,focusDate:u}){const o=u||ul(),[f,m]=v.useState([]),[p,j]=v.useState(null),[g,y]=v.useState(!0),[w,_]=v.useState(!1),[N,q]=v.useState("all"),[M,$]=v.useState(()=>o),[H,Q]=v.useState(!1),[I,F]=v.useState(null),[ne,ie]=v.useState(!1),[me,Z]=v.useState(!1),[ee,Ce]=v.useState(null),[st,Ke]=v.useState(null),[oe,X]=v.useState(null),se=v.useRef(null),B=v.useRef(!1);v.useEffect(()=>(B.current=!0,()=>{B.current=!1}),[]);const A=v.useCallback(async()=>{y(!0),_(!1);try{const G=await d0();if(!B.current)return[];const V=new Map,be=Oe=>{const vt=typeof Oe.plan_id=="string"?Oe.plan_id:"";vt&&!V.has(vt)&&V.set(vt,Oe)};(Array.isArray(G)?G:[]).forEach(be);const Re=Zr.filter(Oe=>!V.has(Oe));if(Re.length>0){const Oe=await Promise.allSettled(Re.map(async vt=>({id:vt,plans:await rp(vt,20)})));for(const vt of Oe)if(vt.status==="fulfilled"){const Wt=vt.value.plans.find(at=>at.plan_id===vt.value.id);Wt&&be(Wt)}}const We=Zr.map(Oe=>V.get(Oe)).filter(Oe=>!!Oe),Et=[...[...V.entries()].filter(([Oe])=>!Zr.includes(Oe)).map(([,Oe])=>Oe).sort((Oe,vt)=>Ko(vt)-Ko(Oe)),...We];if(Et.length>0){const Oe=new Set(Et.map(at=>typeof at.plan_id=="string"?at.plan_id:"")),vt=ni().filter(at=>!Oe.has(at.id)).map(at=>({plan_id:at.id,title:at.title,objective:at.objective,status:at.status,created_at:at.createdAt||new Date().toISOString(),updated_at:at.updatedAt||at.createdAt||new Date().toISOString(),steps:at.steps.map(It=>({step_id:It.id,title:It.title,description:It.description,status:It.status,preferred_skills:It.preferredSkills,tasks:It.tasks.map(nt=>({task_id:nt.id,title:nt.title,description:nt.description,status:nt.status,assigned_skill_id:nt.assignedSkillId,started_at:nt.startedAt,finished_at:nt.finishedAt}))}))})),Wt=bp([...Et,...vt]);return Z(!1),m(Wt),Wt}else{const Oe=ni();return Z(!0),m(Oe),Oe}}catch(G){if(!B.current)return[];console.error("[MissionCenter] fetch failed:",G);const V=ni();return Z(!0),m(V),_(!1),V}finally{B.current&&y(!1)}},[]);v.useEffect(()=>{A()},[A]),v.useEffect(()=>{$(u||ul()),Q(!1)},[u]);const Y=v.useCallback(G=>{j(G),Ke(G.id),window.setTimeout(()=>{var V;(V=se.current)==null||V.scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})},40)},[]),te=v.useCallback(G=>{Y(G),X({kind:"selected",missionId:G.id,title:G.title,planId:G.sourceIds.planId})},[Y]);v.useEffect(()=>{if(!l&&!s)return;const G=f.find(V=>V.id===l||V.sourceIds.planId===l||(s?V.sourceIds.taskIds.includes(s):!1));G&&(q("all"),te(G),window.setTimeout(()=>{var V;(V=document.getElementById(`mission-card-${cc(G.id)}`))==null||V.scrollIntoView({block:"center",behavior:"smooth"})},80))},[l,s,f,te]);const de=v.useCallback(async G=>{if(F(G.id),_(!1),Ce(null),me||!G.sourceIds.planId){m(V=>ko(V,G.id)),j(V=>(V==null?void 0:V.id)!==G.id?V:ko([V],G.id)[0]??V),window.setTimeout(()=>{B.current&&(m(V=>Ao(V,G.id)),j(V=>(V==null?void 0:V.id)!==G.id?V:Ao([V],G.id)[0]??V),F(null))},1200);return}try{const V=await Rp(G),be=await A();if(q("all"),V){const Re=be.find(We=>We.id===V||We.sourceIds.planId===V);if(Re)Y(Re),X({kind:"dispatched",missionId:Re.id,title:Re.title,planId:V});else{const We=await rp(V,5),rt=bp(We).find(Et=>Et.id===V);rt?(Y(rt),X({kind:"dispatched",missionId:rt.id,title:rt.title,planId:V})):j(null)}}else j(Re=>(Re==null?void 0:Re.id)===G.id?null:Re)}catch(V){console.error("[MissionCenter] dispatch failed:",V),_(!1),Ce(V instanceof Error?V.message:"任务委托失败")}finally{F(null)}},[me,A,Y]),ve=v.useCallback(async G=>{if(F(G.id),_(!1),Ce(null),me||!G.sourceIds.planId){await de(G);return}try{const V=await Zx(G),be=await A();q("all");const Re=be.find(We=>We.id===V||We.sourceIds.planId===V);Re?(Y(Re),X({kind:"created",missionId:Re.id,title:Re.title,planId:V})):(Ke(V),X({kind:"created",missionId:V,title:Ng(G.title),planId:V}))}catch(V){console.error("[MissionCenter] restart failed:",V),_(!1),Ce(V instanceof Error?V.message:"重新执行失败")}finally{F(null)}},[me,A,Y,de]),S=M||ul(),R=Qx(H?f:f.filter(G=>$x(G,S)),S),K=R.filter(G=>G.sourceIds.planId&&["draft","reviewing","approved"].includes(G.status.toLowerCase())),W=v.useCallback(async()=>{if(K.length!==0){if(ie(!0),_(!1),me){let G=0;for(const V of K.slice(0,4))window.setTimeout(()=>{B.current&&(F(V.id),m(be=>ko(be,V.id)))},G),G+=400,window.setTimeout(()=>{B.current&&m(be=>Ao(be,V.id))},G+900);window.setTimeout(()=>{B.current&&(F(null),ie(!1))},G+1200);return}try{for(const G of K)F(G.id),await Rp(G);await A(),j(null)}catch(G){console.error("[MissionCenter] batch dispatch failed:",G),_(!1),Ce(G instanceof Error?G.message:"批量委托失败")}finally{F(null),ie(!1)}}},[me,A,K]),pe=(N==="all"?R:R.filter(G=>Xx(G)===N)).map((G,V)=>({mission:G,index:V})).sort((G,V)=>{const be=Re=>(Re.id===st?2:0)+(Re.id===(p==null?void 0:p.id)?1:0);return be(V.mission)-be(G.mission)||Mp(G.mission,S)-Mp(V.mission,S)||G.index-V.index}).map(({mission:G})=>G),Ne=(oe==null?void 0:oe.kind)==="created"?"刚创建重新执行任务":(oe==null?void 0:oe.kind)==="dispatched"?"刚委托执行任务":"当前查看任务",Fe=G=>G.id!==st?null:(oe==null?void 0:oe.missionId)===G.id&&oe.kind==="created"?"刚创建":(oe==null?void 0:oe.missionId)===G.id&&oe.kind==="dispatched"?"刚委托":"当前查看";return r.jsx("div",{className:"de-mission-center-page",children:r.jsxs("div",{className:"de-mission-center-layout",children:[r.jsx("div",{className:"de-mc-list",children:r.jsxs(vs,{children:[r.jsxs(rc,{title:"任务委托",children:[r.jsx("button",{onClick:W,className:"de-btn-primary de-btn-sm",disabled:ne||K.length===0,children:ne?"委托中...":`委托可执行任务(${K.length})`}),r.jsx("button",{onClick:A,className:"de-btn-secondary de-btn-sm",children:Xo("console.action.refresh")})]}),r.jsxs("div",{className:"de-card-body",children:[me&&r.jsx("div",{className:"de-schedule-result de-schedule-result--success",style:{marginBottom:12},children:"当前展示为客户演示场景。真实任务未加载时,页面会自动使用“一天工作流”示例数据。"}),ee&&r.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:ee}),oe&&r.jsxs("div",{className:"de-mission-focus-notice",children:[r.jsx("strong",{children:Ne}),r.jsx("span",{children:oe.title}),oe.planId&&r.jsx("code",{children:oe.planId})]}),r.jsxs("div",{className:"de-date-filter-row",children:[r.jsxs("label",{className:"de-date-filter-field",children:[r.jsx("span",{children:"选择日期"}),r.jsx("input",{type:"date",value:S,onChange:G=>{Q(!1),$(G.target.value||ul())}})]}),r.jsxs("div",{className:"de-date-filter-actions","aria-label":"日期切换",children:[r.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{Q(!1),$(Dp(S,-1))},children:"前一天"}),r.jsx("button",{type:"button",className:"de-filter-chip active",onClick:()=>{Q(!1),$(ul())},children:"今天"}),r.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{Q(!1),$(Dp(S,1))},children:"后一天"})]}),r.jsx("span",{className:"de-date-filter-summary",children:H?`全部 ${R.length} 项任务`:`${R.length} 项任务`})]}),r.jsx("div",{className:"de-filter-row",children:qx.map(G=>r.jsx("button",{className:`de-filter-chip ${N===G.key?"active":""}`,onClick:()=>q(G.key),children:G.label},G.key))}),g?r.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):w?r.jsx("p",{className:"de-empty-text",children:Xo("console.state.backendDown")}):pe.length===0?r.jsxs("div",{className:"de-mission-empty-panel",children:[r.jsx("strong",{children:"当前日期暂无任务"}),r.jsx("p",{children:"这个日期没有匹配到任务记录,演示时可以切回演示日期,或临时查看全部任务。"}),r.jsxs("div",{className:"de-mission-empty-actions",children:[r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>{Q(!0),q("all")},children:"查看全部任务"}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{Q(!1),$(u||ul())},children:"返回演示日期"})]})]}):r.jsx("div",{className:"de-mc-card-list",children:pe.map(G=>r.jsx(wx,{mission:G,selected:(p==null?void 0:p.id)===G.id,focusLabel:Fe(G),dateFilter:S,running:I===G.id,onSelect:te,onRun:de,onRestart:ve},G.id))})]})]})}),r.jsx("div",{className:"de-mc-detail",ref:se,children:p?r.jsx(Hx,{mission:p,onClose:()=>j(null)}):r.jsx(vs,{children:r.jsx("div",{className:"de-card-body",children:r.jsxs("div",{className:"de-mission-empty-panel de-mission-empty-panel--detail",children:[r.jsx("strong",{children:"选择一个任务后,右侧会显示执行步骤、运行记录和交付结果。"}),r.jsx("p",{children:"后天演示建议先从左侧选择“自动外呼现场人员”或“接收约时工单”,让领导看到数字员工不是静态页面,而是在按流程接活、执行、反馈。"})]})})})})]})})}const Jx=[{value:"all",label:"全部任务"},{value:"daily",label:"日常任务"},{value:"weekly",label:"周任务"},{value:"monthly",label:"月度任务"},{value:"adhoc",label:"临时任务"}],Fx={daily:"日常",weekly:"周",monthly:"月度",adhoc:"临时"};function Tg(l){const s=`${l.id} ${l.name} ${l.description} ${l.category}`.toLowerCase();return/weekly|week|周/.test(s)?"weekly":/monthly|month|月报|月度/.test(s)?"monthly":/monitor|crawler|巡检|监控|待办|日程|日报|日终|收件箱|工作台|客户跟进/.test(s)?"daily":"adhoc"}function Mo(l){const s=`${l.id} ${l.name} ${l.description} ${l.category}`.toLowerCase();return l.capabilityLevel==="specialized"||l.capabilityLevel==="experimental"||/加密|深度|分析|自动化|部署|代码|审查|调研|批量|converter|crypto|github|deploy|review|research/.test(s)}function Wx(l){const s=`${l.id} ${l.name} ${l.description} ${l.category}`.toLowerCase();return/日报|周报|报表|待办|日程|巡检|客户|知识库|经营|费用|收件箱|工作台/.test(s)}function Ix(l){const s=l.name,u=`${l.id} ${l.name} ${l.description} ${l.category}`.toLowerCase();return/report|报表|日报|周报|月报|汇报/.test(u)?`自动整理${s}材料,减少手工汇总和重复填报。`:/monitor|巡检|监控|预警/.test(u)?`按约定频率完成${s},及时提示异常和遗漏。`:/todo|待办|task|看板|日程/.test(u)?`帮你梳理${s},把后续处理事项集中呈现。`:/客户|crm|回访|满意/.test(u)?"汇总客户相关信息,形成可直接跟进的处理建议。":/知识|文档|制度|模板/.test(u)?"查找和核对资料内容,减少人工翻找和版本确认。":l.description}function Px(l,s,u){return l.enabled?"已学习":l.enabled?u?"需确认后学习":s?"建议学习":"可学习":"暂不使用"}function eS({skill:l,recommended:s=!1,advanced:u=!1,selected:o=!1,updating:f=!1,onSelect:m,onToggle:p}){const j=Tg(l),g=Px(l,s,u);return r.jsxs("div",{id:`skill-card-${cc(l.id)}`,className:`de-skill-card ${o?"de-skill-card--selected":""}`,role:"button",tabIndex:0,onClick:()=>m==null?void 0:m(l),onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),m==null||m(l))},children:[r.jsxs("div",{className:"de-skill-card-head",children:[r.jsx("span",{className:"de-skill-name",children:l.name}),r.jsx("span",{className:`de-skill-status ${l.enabled?"enabled":"disabled"}`,children:g})]}),r.jsx("p",{className:"de-skill-desc",children:Ix(l)}),r.jsxs("div",{className:"de-skill-card-foot",children:[r.jsxs("span",{className:"de-skill-version",children:["适用任务:",Fx[j]]}),r.jsx("button",{className:`de-skill-btn ${l.enabled?"de-skill-btn--danger":""}`,disabled:f,title:l.enabled?"暂时停用此技能,后续路由不会选择它。":"恢复使用此技能。",onClick:y=>{y.stopPropagation(),f||p==null||p(l)},children:f?"处理中...":l.enabled?"暂不使用":"恢复使用"})]})]})}function tS({focusSkillId:l}){const[s,u]=v.useState([]),[o,f]=v.useState(!0),[m,p]=v.useState(!1),[j,g]=v.useState(""),[y,w]=v.useState("all"),[_,N]=v.useState(l??null),[q,M]=v.useState(null),[$,H]=v.useState(null),Q=v.useRef(!1);v.useEffect(()=>(Q.current=!0,()=>{Q.current=!1}),[]);const I=v.useCallback(async()=>{f(!0),p(!1);try{const B=await h0();if(!Q.current)return;u(Array.isArray(B)&&B.length>0?dx(B):Sp())}catch(B){if(!Q.current)return;console.error("[SkillLibrary] fetch failed:",B),u(Sp()),p(!1)}finally{Q.current&&f(!1)}},[]);v.useEffect(()=>{I()},[I]),v.useEffect(()=>{l&&(N(l),w("all"),g(""),window.setTimeout(()=>{var B;(B=document.getElementById(`skill-card-${cc(l)}`))==null||B.scrollIntoView({block:"center",behavior:"smooth"})},80))},[l,s.length]);const F=v.useCallback(async B=>{const A=!B.enabled;M(B.id),H(null);try{const Y=await p0(B.id,A);if(!Y.ok)throw new Error(Y.error||"技能状态变更失败");u(te=>te.map(de=>de.id===B.id?{...de,enabled:A}:de)),N(B.id)}catch(Y){H(Y instanceof Error?Y.message:"技能状态变更失败")}finally{M(null)}},[]),ne=s.filter(B=>y==="all"||Tg(B)===y).filter(B=>!j||B.name.includes(j)||B.description.includes(j)||B.category.includes(j)),ie=ne.filter(Mo),me=new Set(ie.map(B=>B.id)),Z=ne.filter(B=>B.enabled&&!me.has(B.id)),ee=ne.filter(B=>!B.enabled&&Wx(B)&&!Mo(B)),Ce=ne.filter(B=>!B.enabled&&!Mo(B)),st=(ee.length>0?ee:Ce).slice(0,4),Ke=new Set(st.map(B=>B.id)),oe=Ce.filter(B=>!Ke.has(B.id)),X=[{key:"recommended",title:"推荐学习",hint:"优先补齐高频工作能力,适合让数字员工尽快接手重复事务。",skills:st,emptyText:"暂无推荐学习项。"},{key:"learnable",title:"可学习技能",hint:"可纳入数字员工日常工作的业务能力,学习入口待接入后启用。",skills:oe,emptyText:"当前没有可学习技能。"},{key:"learned",title:"已学技能",hint:"数字员工已经掌握并可被业务场景调用的能力。",skills:Z,emptyText:"当前还没有已学习技能。"},{key:"advanced",title:"高级技能",hint:"适合有明确边界或需要确认后再交给数字员工处理的能力。",skills:ie,emptyText:"暂无高级技能。"}],se=B=>r.jsxs("section",{style:{display:"grid",gap:10},children:[r.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12},children:[r.jsxs("div",{children:[r.jsx("h3",{style:{margin:0,fontSize:16,color:"var(--de-text-primary)"},children:B.title}),r.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"var(--de-text-muted)"},children:B.hint})]}),r.jsxs("span",{className:"de-capability-badge de-capability-standard",children:[B.skills.length," 项"]})]}),B.skills.length===0?r.jsx("p",{className:"de-empty-text",style:{margin:0},children:B.emptyText}):r.jsx("div",{className:"de-skill-grid",children:B.skills.map(A=>r.jsx(eS,{skill:A,recommended:B.key==="recommended",advanced:B.key==="advanced",selected:_===A.id,updating:q===A.id,onSelect:Y=>N(Y.id),onToggle:F},`${B.key}-${A.id}`))})]},B.key);return r.jsx("div",{style:{padding:"14px 18px"},children:r.jsxs(vs,{children:[r.jsx(rc,{title:"学习技能",children:r.jsx("button",{onClick:I,className:"de-btn-secondary de-btn-sm",children:"刷新"})}),r.jsxs("div",{className:"de-card-body",children:[$&&r.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:$}),r.jsxs("div",{className:"de-skill-toolbar",children:[r.jsx("input",{type:"text",className:"de-input",placeholder:"搜索业务能力...",value:j,onChange:B=>g(B.target.value)}),r.jsx("div",{className:"de-filter-row",children:Jx.map(B=>r.jsx("button",{className:`de-filter-chip ${y===B.value?"active":""}`,onClick:()=>w(B.value),children:B.label},B.value))})]}),o?r.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):m?r.jsx("p",{className:"de-empty-text",children:"服务暂不可用,已保留本地示例供预览。"}):ne.length===0&&s.length>0?r.jsx("p",{className:"de-empty-text",children:"无匹配技能,请调整搜索或筛选条件"}):ne.length===0?r.jsx("p",{className:"de-empty-text",children:"暂无可展示的学习技能。"}):r.jsx("div",{style:{display:"grid",gap:18},children:X.map(se)})]})]})})}const aS={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:12},Ro={border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"};function nS(){const l=new Date;return[l.getFullYear(),String(l.getMonth()+1).padStart(2,"0"),String(l.getDate()).padStart(2,"0")].join("-")}function lS(l){return(l==null?void 0:l.status)==="ready"?"已生成":(l==null?void 0:l.status)==="generating"?"生成中":(l==null?void 0:l.status)==="failed"?"生成失败":"待生成"}function iS(l){return(l==null?void 0:l.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}function sS(l){return l?l.generated_by==="ai"?`AI 已生成日报${l.model?`:${l.model}`:""}`:"AI 不可用时已使用规则兜底生成日报":"AI 将基于当天任务和运行明细生成日报"}function rS(l){if(!l)return[];const s=l.duties.filter(u=>u.selected).map(u=>u.id);return s.length>0?s:l.duties.filter(u=>u.implemented).map(u=>u.id)}function cS(l){if(!l)return"暂未生成";const s=new Date(l);return Number.isNaN(s.getTime())?l:s.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function uS({sections:l}){return l.length===0?r.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"今天还没有可汇总的任务。"}):r.jsx("div",{className:"de-task-summary-grid","aria-label":"日报任务汇总",children:l.map(s=>r.jsxs("div",{className:`de-task-summary-card de-live-feed-row--${s.latest_status_tone||"info"}`,children:[r.jsx("span",{className:"de-task-summary-title",children:s.title}),r.jsx("span",{className:"de-badge de-badge-info",children:s.latest_status_label}),r.jsxs("strong",{children:["执行次数 ",s.total_count]}),r.jsxs("small",{children:["成功次数 ",s.success_count," · 失败次数 ",s.failure_count]}),r.jsx("em",{children:s.ai_summary||s.business_summary})]},s.id))})}function oS({details:l}){return l.length===0?r.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"任务执行后,这里会展示时间、任务、步骤和执行情况。"}):r.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"日报运行明细",children:[r.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[r.jsx("span",{children:"时间"}),r.jsx("span",{children:"任务名称"}),r.jsx("span",{children:"步骤名称"}),r.jsx("span",{children:"执行状态"}),r.jsx("span",{children:"执行情况"})]}),l.map(s=>r.jsxs("div",{className:`de-run-detail-row de-live-feed-row--${s.status_tone||"info"}`,children:[r.jsx("span",{children:s.time||"--:--"}),r.jsx("strong",{children:s.task_name}),r.jsx("em",{children:s.step_name||s.operation_name||"任务执行"}),r.jsx("i",{className:"de-badge de-badge-info",children:s.status_label}),r.jsx("span",{children:s.business_detail})]},s.id))]})}function dS({focusSection:l}){const s=v.useMemo(()=>nS(),[]),[u,o]=v.useState(null),[f,m]=v.useState("18:00"),[p,j]=v.useState(!0),[g,y]=v.useState(null),[w,_]=v.useState(null),N=v.useRef(!1),q=(u==null?void 0:u.source)==="live",M=q?(u==null?void 0:u.daily_report)??null:null,$=q?(M==null?void 0:M.task_sections)??(u==null?void 0:u.execution_summaries)??[]:[],H=q?(u==null?void 0:u.run_details)??[]:[],Q=q?null:(u==null?void 0:u.demo_reason)??"当前没有真实运行投影,日报区域暂不展示兜底数据。",I=(M==null?void 0:M.totals)??{task_count:$.length,execution_count:$.reduce((Z,ee)=>Z+ee.total_count,0),success_count:$.reduce((Z,ee)=>Z+ee.success_count,0),failure_count:$.reduce((Z,ee)=>Z+ee.failure_count,0),running_count:$.reduce((Z,ee)=>Z+ee.running_count,0)},F=v.useCallback(async()=>{var Z;j(!0),_(null);try{const ee=await Qr(s);if(!N.current)return;o(ee),m(ee.source==="live"&&((Z=ee.daily_report)==null?void 0:Z.report_schedule_time)||"18:00")}catch(ee){if(!N.current)return;_(ee instanceof Error?ee.message:"日报数据加载失败")}finally{N.current&&j(!1)}},[s]);v.useEffect(()=>(N.current=!0,F(),()=>{N.current=!1}),[F]),v.useEffect(()=>{!l||p||window.setTimeout(()=>{var Z;(Z=document.getElementById(`report-section-${l}`))==null||Z.scrollIntoView({block:"center",behavior:"smooth"})},80)},[l,p]);const ne=v.useCallback(async()=>{var Z;y("update_report_schedule"),_(null);try{const ee=await ai({action:"update_report_schedule",date:s,report_schedule_time:f});if(!N.current)return;o(ee),m(ee.source==="live"&&((Z=ee.daily_report)==null?void 0:Z.report_schedule_time)||f),_("日报生成时间已更新。")}catch(ee){if(!N.current)return;_(ee instanceof Error?ee.message:"日报生成时间设置失败")}finally{N.current&&y(null)}},[f,s]),ie=v.useCallback(async()=>{var Z;y("generate_daily_report"),_(null);try{const ee=await ai({action:"generate_daily_report",date:s,duty_ids:q?rS(u):[],report_schedule_time:f});if(!N.current)return;o(ee),m(ee.source==="live"&&((Z=ee.daily_report)==null?void 0:Z.report_schedule_time)||f),_("日报已生成,可下载 PDF。")}catch(ee){if(!N.current)return;_(ee instanceof Error?ee.message:"日报生成失败")}finally{N.current&&y(null)}},[q,u,f,s]),me=v.useCallback(()=>{window.open(hg(s),"_blank","noopener,noreferrer")},[s]);return r.jsx("div",{style:{padding:"14px 18px"},children:r.jsxs(vs,{children:[r.jsx(rc,{title:"日报生成",children:r.jsx("span",{className:"de-card-meta-text",children:s})}),r.jsx("div",{className:"de-card-body",children:p?r.jsx("div",{className:"de-loading-skeleton",style:{height:420}}):r.jsxs(r.Fragment,{children:[r.jsxs("section",{id:"report-section-today",className:"de-report-summary",style:{marginBottom:12},children:[r.jsxs("div",{className:"de-report-summary-head",children:[r.jsxs("div",{className:"de-report-summary-title-row",children:[r.jsx("h3",{children:(M==null?void 0:M.title)||"数字员工日报"}),r.jsx("p",{children:sS(M)})]}),r.jsx("span",{className:`de-report-badge ${iS(M)}`,children:lS(M)})]}),r.jsxs("div",{className:"de-report-summary-body",children:[r.jsxs("div",{className:"de-report-schedule-row",children:[r.jsxs("label",{children:[r.jsx("span",{children:"生成时间"}),r.jsx("input",{type:"time",value:f,onChange:Z=>m(Z.target.value||"18:00")})]}),r.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g==="update_report_schedule",onClick:()=>{ne()},children:"设置时间"}),r.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:g==="generate_daily_report",onClick:()=>{ie()},children:g==="generate_daily_report"?"生成中...":"生成日报"}),r.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(M!=null&&M.pdf_available),onClick:me,title:M!=null&&M.pdf_available?"下载日报 PDF":"生成日报后可下载日报 PDF",children:[r.jsx(Bo,{size:14,"aria-hidden":"true"}),"下载日报"]})]}),r.jsxs("div",{className:"de-report-metrics",children:[r.jsxs("div",{className:"de-report-metric",children:[r.jsx("span",{children:"任务总数"}),r.jsx("strong",{children:I.task_count})]}),r.jsxs("div",{className:"de-report-metric",children:[r.jsx("span",{children:"执行次数"}),r.jsx("strong",{children:I.execution_count})]}),r.jsxs("div",{className:"de-report-metric",children:[r.jsx("span",{children:"成功次数"}),r.jsx("strong",{children:I.success_count})]}),r.jsxs("div",{className:"de-report-metric",children:[r.jsx("span",{children:"失败次数"}),r.jsx("strong",{children:I.failure_count})]})]}),r.jsxs("div",{className:"de-report-meta",children:[r.jsx("p",{children:(M==null?void 0:M.summary)||"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),Q?r.jsx("p",{children:Q}):null,r.jsxs("p",{children:["计划生成时间:",f,";最近生成:",cS(M==null?void 0:M.generated_at)]}),w?r.jsx("p",{children:w}):null]})]})]}),r.jsxs("div",{style:aS,children:[r.jsxs("section",{id:"report-section-tasks",style:Ro,children:[r.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"任务汇总"}),r.jsx(uS,{sections:$})]}),r.jsxs("section",{id:"report-section-details",style:Ro,children:[r.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"运行明细"}),r.jsx(oS,{details:H})]}),r.jsxs("section",{id:"report-section-summary",style:Ro,children:[r.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"日报内容"}),((M==null?void 0:M.detail_lines)??[]).length===0?r.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"生成日报后会展示 AI 整理后的分项说明。"}):r.jsx("div",{className:"de-report-meta",children:((M==null?void 0:M.detail_lines)??[]).map(Z=>r.jsx("p",{children:Z},Z))})]})]})]})})]})})}const fS=["sales","engineering","hr","finance","executive"],Cg="sgrobot-role-preferences",Oo={workStart:"09:00",workEnd:"18:00",notification:"system",reportTime:"17:30",avatarStyle:"professional",reminderLevel:"important"},mS={compact:"紧凑",balanced:"均衡",presentation:"汇报"},hS={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:12},Pl={display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"},ei={minHeight:34,borderRadius:8,border:"1px solid var(--de-glass-border-light)",background:"rgba(255,255,255,0.72)",color:"var(--de-text-primary)",padding:"0 10px"};function pS(){try{const l=localStorage.getItem(Cg);return l?{...Oo,...JSON.parse(l)}:Oo}catch{return Oo}}function gS(){const{role:l,profile:s,setRole:u}=z_(),[o,f]=v.useState(pS),[m,p]=v.useState(!1),j=v.useRef(null);v.useEffect(()=>()=>{j.current&&clearTimeout(j.current)},[]);const g=()=>{p(!0),j.current&&clearTimeout(j.current),j.current=setTimeout(()=>p(!1),2e3)},y=N=>{f(N);try{localStorage.setItem(Cg,JSON.stringify(N))}catch{}g()},w=(N,q)=>{y({...o,[N]:q})},_=N=>{u(N),g()};return r.jsx("div",{style:{padding:"14px 18px"},children:r.jsxs(vs,{children:[r.jsx(rc,{title:"角色偏好",children:m&&r.jsx("span",{className:"de-card-meta-text",children:"已保存"})}),r.jsxs("div",{className:"de-card-body",children:[r.jsxs("section",{className:"de-settings-section",children:[r.jsx("h3",{className:"de-settings-heading",children:"数字员工角色"}),r.jsx("p",{className:"de-settings-desc",children:"选择日常协作身份,数字员工会按你的岗位重点调整提醒和汇总口径。"}),r.jsx("div",{className:"de-role-grid",children:fS.map(N=>r.jsxs("button",{className:`de-role-card ${l===N?"active":""}`,onClick:()=>_(N),children:[r.jsx("span",{className:"de-role-label",children:Xo(Fr[N].labelKey)}),r.jsxs("span",{className:"de-role-density",children:[mS[Fr[N].density]??"均衡","视图"]})]},N))})]}),r.jsxs("section",{className:"de-settings-section",children:[r.jsx("h3",{className:"de-settings-heading",children:"工作偏好"}),r.jsxs("div",{style:hS,children:[r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"工作开始时间"}),r.jsx("input",{style:ei,type:"time",value:o.workStart,onChange:N=>w("workStart",N.target.value)})]}),r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"工作结束时间"}),r.jsx("input",{style:ei,type:"time",value:o.workEnd,onChange:N=>w("workEnd",N.target.value)})]}),r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"默认日报时间"}),r.jsx("input",{style:ei,type:"time",value:o.reportTime,onChange:N=>w("reportTime",N.target.value)})]}),r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"通知方式"}),r.jsxs("select",{style:ei,value:o.notification,onChange:N=>w("notification",N.target.value),children:[r.jsx("option",{value:"system",children:"系统通知"}),r.jsx("option",{value:"email",children:"邮件提醒"}),r.jsx("option",{value:"silent",children:"只在页面显示"})]})]}),r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"数字员工形象偏好"}),r.jsxs("select",{style:ei,value:o.avatarStyle,onChange:N=>w("avatarStyle",N.target.value),children:[r.jsx("option",{value:"professional",children:"专业稳重"}),r.jsx("option",{value:"friendly",children:"亲和协作"}),r.jsx("option",{value:"concise",children:"简洁高效"})]})]}),r.jsxs("label",{style:Pl,children:[r.jsx("span",{className:"de-role-label",children:"任务提醒偏好"}),r.jsxs("select",{style:ei,value:o.reminderLevel,onChange:N=>w("reminderLevel",N.target.value),children:[r.jsx("option",{value:"important",children:"只提醒重要事项"}),r.jsx("option",{value:"all",children:"所有进展都提醒"}),r.jsx("option",{value:"quiet",children:"尽量少打扰"})]})]})]})]}),r.jsxs("details",{className:"de-settings-section",style:{marginBottom:0},children:[r.jsx("summary",{className:"de-settings-heading",style:{cursor:"pointer"},children:"高级技术设置"}),r.jsxs("p",{className:"de-settings-desc",children:["默认隐藏,仅供技术人员排查使用。当前角色刷新阈值:",Math.round(s.staleDataThresholdMs/1e3)," 秒。"]})]})]})]})})}const kg=[{id:"home",label:"首页"},{id:"missions",label:"任务中心"},{id:"skills",label:"技能库"},{id:"reports",label:"日报"},{id:"settings",label:"设置"}],yS="sgrobot:digital-close";function Ag(l){return!!(l&&kg.some(s=>s.id===l))}function vS(l){const s=l.split("/").filter(Boolean),u=s.length>0?s[s.length-1]:null;return Ag(u)?u:null}function Op(l,s){const u=new URLSearchParams(s),o=u.get("tab");return{tab:Ag(o)?o:vS(l)??"home",date:u.get("date"),missionId:u.get("mission"),taskId:u.get("task"),skillId:u.get("skill"),reportSection:u.get("section")}}function bS({target:l,onNavigate:s}){switch(l.tab){case"home":return r.jsx(lx,{onNavigate:s});case"missions":return r.jsx(Vx,{focusMissionId:l.missionId,focusTaskId:l.taskId,focusDate:l.date});case"skills":return r.jsx(tS,{focusSkillId:l.skillId});case"reports":return r.jsx(dS,{focusSection:l.reportSection});case"settings":return r.jsx(gS,{})}}function _S(){if(window.parent&&window.parent!==window){const l=window.location.origin==="null"?"*":window.location.origin;window.parent.postMessage({type:yS},l);return}window.close()}function xS(){const l=ya(),s=Fo(),[u,o]=v.useState(()=>Op(l.pathname,l.search));v.useEffect(()=>{o(Op(l.pathname,l.search))},[l.pathname,l.search]);const f=v.useCallback(m=>{o(m);const p=new URLSearchParams;m.tab!=="home"&&p.set("tab",m.tab),m.date&&p.set("date",m.date),m.missionId&&p.set("mission",m.missionId),m.taskId&&p.set("task",m.taskId),m.skillId&&p.set("skill",m.skillId),m.reportSection&&p.set("section",m.reportSection),s({pathname:l.pathname,search:p.toString()?`?${p.toString()}`:""},{replace:!1})},[l.pathname,s]);return r.jsx(D_,{children:r.jsxs("div",{className:"de-shell",children:[r.jsx("header",{className:"de-header",children:r.jsxs("div",{className:"de-header-content",children:[r.jsxs("div",{className:"de-header-left",children:[r.jsx("div",{className:"de-header-accent-bar"}),r.jsx("h1",{className:"de-header-title",children:"智能数字人系统"})]}),r.jsx("div",{className:"de-header-center",children:kg.map(m=>r.jsx("button",{className:`de-nav-btn ${u.tab===m.id?"active":""}`,onClick:()=>f({tab:m.id}),children:r.jsx("span",{children:m.label})},m.id))}),r.jsxs("div",{className:"de-header-right",children:[r.jsx("span",{className:"de-header-welcome",children:"欢迎您,"}),r.jsx("span",{className:"de-header-username",children:"王琦"}),r.jsx("button",{type:"button",className:"de-header-icon",title:"消息",children:r.jsx(T_,{size:16})}),r.jsx("button",{type:"button",className:"de-header-icon",title:"通知",children:r.jsx(N_,{size:16})}),r.jsx("button",{type:"button",className:"de-header-icon de-header-close",title:"关闭",onClick:_S,children:r.jsx(k_,{size:17})})]})]})}),r.jsx("div",{className:"de-shell-body",children:r.jsx(bS,{target:u,onNavigate:f})})]})})}function SS(){return r.jsx(m_,{children:r.jsxs(Gb,{children:[r.jsx(Uo,{path:"/digital",element:r.jsx(xS,{})}),r.jsx(Uo,{path:"*",element:r.jsx($b,{to:"/digital",replace:!0})})]})})}Qv.createRoot(document.getElementById("root")).render(r.jsx(Uv.StrictMode,{children:r.jsx(SS,{})})); diff --git a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html index d5555b4e..2d52006e 100644 --- a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html +++ b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html @@ -13,7 +13,7 @@ console.warn("[qimingclaw] digital employee auth bootstrap skipped", error); } - + diff --git a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts index 6ae4923f..b4bf307f 100644 --- a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts +++ b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts @@ -95,6 +95,7 @@ export interface DigitalEmployeeSyncStatus { syncing: boolean; enabled: boolean; endpoint: string | null; + missingCredentials: string[]; pending: number; failed: number; lastSyncAt: string | null; @@ -132,6 +133,7 @@ export function getDigitalEmployeeSyncStatus(): DigitalEmployeeSyncStatus { syncing, enabled: config.enabled, endpoint: config.endpoint, + missingCredentials: missingSyncCredentialLabels(config), pending: countOutbox("pending"), failed: countOutbox("failed"), lastSyncAt, @@ -147,7 +149,11 @@ export async function flushDigitalEmployeeSyncOutbox( if (syncing) return getDigitalEmployeeSyncStatus(); const config = resolveSyncConfig(); - if (!config.enabled || !config.endpoint || !config.clientKey || !config.authToken) { + if ( + !config.enabled || + !config.endpoint || + missingSyncCredentialLabels(config).length > 0 + ) { lastSyncError = null; return getDigitalEmployeeSyncStatus(); } @@ -255,6 +261,15 @@ function buildEndpoint(serverHost: string | null): string | null { return `${normalized.replace(/\/+$/, "")}${DEFAULT_SYNC_PATH}`; } +function missingSyncCredentialLabels( + config: DigitalEmployeeSyncConfig, +): string[] { + return [ + config.clientKey ? "" : "客户端 Key", + config.authToken ? "" : "登录 token", + ].filter((value): value is string => Boolean(value)); +} + function readClientKey(serverHost: string | null): string | null { const username = readSetting("auth.username"); const globalKey = readSetting("auth.saved_key"); diff --git a/qimingclaw/docs/digital-employee-frontend-integration-plan.md b/qimingclaw/docs/digital-employee-frontend-integration-plan.md index b8b57dfe..835cc57a 100644 --- a/qimingclaw/docs/digital-employee-frontend-integration-plan.md +++ b/qimingclaw/docs/digital-employee-frontend-integration-plan.md @@ -464,7 +464,7 @@ window.QimingClawBridge.digital.flushSync() - worker 只消费 outbox,不直接侵入 Plan / Task / Run / Event 写入链路。 - 管理端返回格式包含 `acked[]`,每项带 `outbox_id`、`entity_type`、`entity_id`、`remote_id`。 - 若管理端只 ack 批次中的部分 item,已 ack 的 item 会标记 synced,未 ack 的 item 会保留 failed 状态并进入下一轮补偿。 -- 当前接口沿用管理端登录态鉴权,客户端必须能读取到登录 ticket/token 才会推送;没有 token 时保持本地 outbox 等待。 +- 当前接口沿用管理端登录态鉴权,客户端必须能读取到客户端 Key 和登录 ticket/token 才会推送;缺少凭据时保持本地 outbox 等待,并在数字员工同步状态条显示缺少项。 后端最小落点: