@xopcai/xopc 0.0.428 → 0.0.431

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agents-yTsbcxRi.js → agents-Ds7K3D7T.js} +1 -1
  4. package/dist/gateway/static/root/assets/{automation-task-card-w6cKxfaP.js → automation-task-card-DIjI_Y1X.js} +1 -1
  5. package/dist/gateway/static/root/assets/{automations-page-D4LyOLzY.js → automations-page-BQwSCkmd.js} +1 -1
  6. package/dist/gateway/static/root/assets/{automations-workspace-BGyvZZj5.js → automations-workspace-BUFTTjBq.js} +2 -2
  7. package/dist/gateway/static/root/assets/{capabilities-page-DHJLl4RD.js → capabilities-page-B8UgQ4dD.js} +2 -2
  8. package/dist/gateway/static/root/assets/{capabilities-settings-panel-FJ3Vo7Wa.js → capabilities-settings-panel-Bxn8HtEO.js} +2 -2
  9. package/dist/gateway/static/root/assets/{chat-page--dKUIg5W.js → chat-page-e-xCsrdS.js} +1 -1
  10. package/dist/gateway/static/root/assets/{computer-settings-page-Bm70SIjD.js → computer-settings-page-BIHbjBVt.js} +1 -1
  11. package/dist/gateway/static/root/assets/{image-generation-api-BbEnKsK1.js → image-generation-api-CdwYgzhU.js} +1 -1
  12. package/dist/gateway/static/root/assets/{index-ClPeYgQk.js → index-BmUSsdwn.js} +8 -8
  13. package/dist/gateway/static/root/assets/model-selector-YsCHu1Gn.js +1 -0
  14. package/dist/gateway/static/root/assets/{personal-page-CiKdXLeR.js → personal-page-Cvd-v9kT.js} +1 -1
  15. package/dist/gateway/static/root/assets/{phone-model-connection-ucX3Tvl8.js → phone-model-connection-BieYnAJ5.js} +1 -1
  16. package/dist/gateway/static/root/assets/phone-model-picker-Bkex4Sre.js +1 -0
  17. package/dist/gateway/static/root/assets/{phone-settings-page-BSdB2pnW.js → phone-settings-page-D8PuvEuJ.js} +1 -1
  18. package/dist/gateway/static/root/assets/{product-preview-content-CNaJb6Bj.js → product-preview-content-VcvxaO2S.js} +1 -1
  19. package/dist/gateway/static/root/assets/{product-preview-modal-DgwrrpqJ.js → product-preview-modal-Ym6bomTW.js} +2 -2
  20. package/dist/gateway/static/root/assets/{project-detail-page-FReFYUv0.js → project-detail-page-CFbXWvcd.js} +1 -1
  21. package/dist/gateway/static/root/assets/{route-preload-DS4fVFbc.js → route-preload-C-VRKwB1.js} +2 -2
  22. package/dist/gateway/static/root/assets/{sessions-page-C8gwrFHR.js → sessions-page-C2CH-55n.js} +1 -1
  23. package/dist/gateway/static/root/assets/{settings-page-DCQnHCNN.js → settings-page-B6vrcc6f.js} +1 -1
  24. package/dist/gateway/static/root/assets/{setup-interaction-page-B9ACeAvO.js → setup-interaction-page-BDPte58u.js} +1 -1
  25. package/dist/gateway/static/root/assets/{task-detail-page-L5RIelv0.js → task-detail-page-CC3Rzqq9.js} +1 -1
  26. package/dist/gateway/static/root/index.html +6 -6
  27. package/dist/package.js +1 -1
  28. package/dist/src/agent/coding/run-verification.d.ts +1 -0
  29. package/dist/src/agent/coding/run-verification.js +1 -1
  30. package/dist/src/agent/embedded/run-turn.js +12 -4
  31. package/dist/src/agent/service/direct-turn-helpers.js +9 -6
  32. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  33. package/dist/src/computer/model-policy.js +1 -1
  34. package/dist/src/config/models-json.d.ts +6 -0
  35. package/dist/src/config/models-json.js +9 -4
  36. package/dist/src/gateway/global-defaults-admin.js +1 -1
  37. package/dist/src/gateway/hono/routes/models.js +12 -5
  38. package/dist/src/gateway/hono/routes/phone-setup.js +2 -1
  39. package/dist/src/gateway/hono/routes/phone.js +2 -1
  40. package/dist/src/gateway/service/run-gateway-agent.js +1 -2
  41. package/dist/src/gateway/service.js +10 -10
  42. package/dist/src/gateway/xopc-cloud-capability-setup.js +6 -3
  43. package/dist/src/home-intelligence/host.js +2 -2
  44. package/dist/src/observability/runtime.d.ts +2 -0
  45. package/dist/src/observability/runtime.js +12 -1
  46. package/dist/src/phone/contracts.d.ts +2 -0
  47. package/dist/src/phone/contracts.js +1 -0
  48. package/dist/src/phone/model-adapter.d.ts +1 -1
  49. package/dist/src/phone/model-adapter.js +29 -6
  50. package/dist/src/phone/model-policy.d.ts +4 -0
  51. package/dist/src/phone/model-policy.js +30 -0
  52. package/dist/src/phone/structured-model.d.ts +6 -0
  53. package/dist/src/phone/structured-model.js +87 -0
  54. package/dist/src/providers/model-catalog-types.d.ts +1 -1
  55. package/dist/src/providers/model-reference-auditor.js +2 -1
  56. package/dist/src/providers/presentation.js +5 -3
  57. package/dist/src/storage/sqlite/schema.d.ts +2 -2
  58. package/dist/src/storage/sqlite/schema.js +7 -7
  59. package/dist/src/storage/sqlite/upgrades/261_session_input_task_origins.sql +6 -0
  60. package/dist/src/voice/platform-catalog.d.ts +1 -1
  61. package/package.json +1 -1
  62. package/dist/gateway/static/root/assets/model-selector-DJSVr3LM.js +0 -1
  63. package/dist/gateway/static/root/assets/phone-model-picker-CU37sziM.js +0 -1
@@ -1,3 +1,3 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{f as i,m as a,t as o,u as s}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as c,l,n as u,o as d}from"./locale-store-B7y-RVe8.js";import{t as f}from"./messages-DYDkJvXj.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./dist-BGTk37IG.js";import{U as b,nt as x,t as S,w as C}from"./chat-page--dKUIg5W.js";import{t as w}from"./arrow-left-D880xG-P.js";import{t as T}from"./calendar-clock-D-quYVPe.js";import{n as E,r as D}from"./popover-select-CEMWIrtY.js";import{t as ee}from"./circle-check-C23XjkUj.js";import{t as O}from"./circle-x-DFsCKeya.js";import{t as k}from"./circle-BoO4YvTx.js";import{t as A}from"./ellipsis-0k4rZLoy.js";import{t as j}from"./external-link-DjqjBmc3.js";import{t as te}from"./folder-kanban-CpLlFI1o.js";import{t as ne}from"./folder-open-CyzJ19I9.js";import{F as re,N as M,V as ie,z as ae}from"./markdown-view-DFHa8rUg.js";import{t as oe}from"./message-square-fVE7Ghj1.js";import{t as se}from"./pause-DuPxgSxk.js";import{t as ce}from"./play-kxZvpBg8.js";import{t as le}from"./x-B_N4OPjy.js";import{t as N}from"./cn-0WouolD0.js";import{t as ue}from"./skeleton-BI5TyibZ.js";import{c as de}from"./api-C-9J9ghT.js";import{ct as fe,lt as pe}from"./session-manager-DjRWxXJG.js";import{i as me}from"./vendor-swr-CdRzEUwF.js";import{C as he,D as ge,T as _e,d as ve,f as ye,k as be,m as xe,y as Se}from"./use-composer-attachments-CoiQAgjo.js";import{t as Ce}from"./chat-agents-api-Cffxfzi1.js";import{t as P}from"./button-Cc4hUNTt.js";import{s as we}from"./file-preview-surface-BaMGmCbw.js";import{d as Te,f as Ee,h as De,m as Oe,p as ke,s as Ae}from"./composer-payload-handoff-_9L2A5AZ.js";import{t as je}from"./page-header-store-CoKMiYoi.js";import{t as Me}from"./agent-avatar-display-D-yds6wG.js";import{t as Ne}from"./confirm-dialog-D7dQJytv.js";import{l as Pe,m as Fe,o as Ie,r as F,t as Le,u as Re}from"./dist-ZrL34Ps4.js";import{C as I,_ as ze,a as Be,c as L,d as Ve,l as He,u as Ue,w as We}from"./automation-task-card-w6cKxfaP.js";import{t as Ge}from"./date-picker-BvEnSGZK.js";import{t as Ke}from"./automation-api-DAou8Kji.js";import{n as qe}from"./date-formatters-DukWSVwc.js";import{n as Je,r as R,t as Ye}from"./task-result-evidence-BV-6hBVU.js";import{t as Xe}from"./page-context-capture-button-CGfR0dsc.js";import{t as Ze}from"./dependency-picker-XjPB8FJS.js";var z=e(t(),1),B=n(),V=r();function Qe(e,t,n){let r=new URLSearchParams(e),i=r.getAll(`taskPanel`).filter(e=>e!==t&&e!==`${t}:closed`);r.delete(`taskPanel`);for(let e of i)r.append(`taskPanel`,e);return r.append(`taskPanel`,n?t:`${t}:closed`),r}function $e(e){let t=(0,B.c)(24),n,r,i,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],o=t[4],s=t[5],c=t[6]):({panelId:r,title:c,defaultOpen:s,children:n,summaryClassName:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=o,t[5]=s,t[6]=c);let l=s!==void 0&&s,[u,d]=a(),f;if(t[7]!==l||t[8]!==r||t[9]!==u){let e=u.getAll(`taskPanel`);f=e.includes(r)||l&&!e.includes(`${r}:closed`),t[7]=l,t[8]=r,t[9]=u,t[10]=f}else f=t[10];let p=f,m=o??`cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,h;t[11]!==p||t[12]!==r||t[13]!==d?(h=e=>{e.preventDefault(),d(e=>Qe(e,r,!p),{preventScrollReset:!0})},t[11]=p,t[12]=r,t[13]=d,t[14]=h):h=t[14];let g;t[15]!==m||t[16]!==h||t[17]!==c?(g=(0,V.jsx)(`summary`,{className:m,onClick:h,children:c}),t[15]=m,t[16]=h,t[17]=c,t[18]=g):g=t[18];let _;return t[19]!==n||t[20]!==p||t[21]!==i||t[22]!==g?(_=(0,V.jsxs)(`details`,{...i,open:p,children:[g,n]}),t[19]=n,t[20]=p,t[21]=i,t[22]=g,t[23]=_):_=t[23],_}var et=`Default criteria were not expanded into concrete acceptance items; broad completion cannot certify item coverage.`;function tt(e){let t=(0,B.c)(50),{criterion:n,index:r,language:i,closed:a,pending:o,onReview:s,projectId:c,conversationId:l}=e,u=i===`zh`,[d,f]=(0,z.useState)(!1),p=n.status===`passed`?ee:n.status===`failed`?O:k,m=n.status===`passed`?u?`已通过`:`Passed`:n.status===`failed`?u?`未通过`:`Failed`:u?`待验收`:`Awaiting review`,h=n.review?u?`用户确认`:`User reviewed`:n.status===`passed`||n.status===`failed`?u?`自动核验`:`Automatic verification`:void 0,g;t[0]!==r||t[1]!==s?(g=async function(e){await s(r,e)&&f(!1)},t[0]=r,t[1]=s,t[2]=g):g=t[2];let _=g,v=n.status===`passed`?`text-success`:n.status===`failed`?`text-danger`:`text-fg-subtle`,y;t[3]===v?y=t[4]:(y=N(`mt-0.5 size-4 shrink-0`,v),t[3]=v,t[4]=y);let b;t[5]!==p||t[6]!==y?(b=(0,V.jsx)(p,{"aria-hidden":!0,className:y}),t[5]=p,t[6]=y,t[7]=b):b=t[7];let x;t[8]===n.text?x=t[9]:(x=(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:n.text}),t[8]=n.text,t[9]=x);let S;t[10]===m?S=t[11]:(S=(0,V.jsx)(`span`,{children:m}),t[10]=m,t[11]=S);let C;t[12]===h?C=t[13]:(C=h?(0,V.jsxs)(`span`,{children:[`· `,h]}):null,t[12]=h,t[13]=C);let w;t[14]!==a||t[15]!==n.review||t[16]!==d||t[17]!==o||t[18]!==u?(w=n.review&&!a&&!d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!0),children:u?`更改判定`:`Change review`}):null,t[14]=a,t[15]=n.review,t[16]=d,t[17]=o,t[18]=u,t[19]=w):w=t[19];let T;t[20]!==a||t[21]!==n.review||t[22]!==d||t[23]!==o||t[24]!==_||t[25]!==u?(T=!a&&(!n.review||d)?(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsx)(P,{variant:`secondary`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`passed`),children:u?`确认通过`:`Mark passed`}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`failed`),children:u?`标记未通过`:`Mark failed`}),d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!1),children:u?`取消`:`Cancel`}):null]}):null,t[20]=a,t[21]=n.review,t[22]=d,t[23]=o,t[24]=_,t[25]=u,t[26]=T):T=t[26];let E;t[27]!==S||t[28]!==C||t[29]!==w||t[30]!==T?(E=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-2 text-xs text-fg-muted`,children:[S,C,w,T]}),t[27]=S,t[28]=C,t[29]=w,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==l||t[33]!==n.evidence||t[34]!==n.method||t[35]!==n.note||t[36]!==n.review||t[37]!==n.verificationStatus||t[38]!==r||t[39]!==i||t[40]!==c||t[41]!==u?(D=n.evidence.length>0||n.method||n.review||n.note?(0,V.jsx)($e,{panelId:`criterion:${r}:evidence`,title:(0,V.jsxs)(V.Fragment,{children:[u?`查看依据`:`View evidence`,n.evidence.length>0?` · ${n.evidence.length}`:``]}),summaryClassName:`min-h-9 cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,children:(0,V.jsxs)(`div`,{className:`space-y-2 border-l border-edge pl-3 text-xs leading-5 text-fg-muted`,children:[n.method?(0,V.jsxs)(`p`,{children:[u?`自动核验`:`Automatic verification`,` · `,n.verificationStatus===`passed`?u?`通过`:`Passed`:n.verificationStatus===`failed`?u?`未通过`:`Failed`:u?`未核验`:`Unverified`,n.method===`model_reviewed`?u?` · 模型审阅`:` · Model review`:``]}):null,n.review?(0,V.jsxs)(`p`,{children:[u?`人工判定`:`User review`,` · `,qe(n.review.reviewedAt,i)]}):null,n.note&&n.note!==et?(0,V.jsx)(R,{content:n.note,contentKey:`criterion:${r}:note`,language:i,markdown:!1}):null,(0,V.jsx)(Ye,{evidence:n.evidence,projectId:c,conversationId:l,language:i})]})}):null,t[32]=l,t[33]=n.evidence,t[34]=n.method,t[35]=n.note,t[36]=n.review,t[37]=n.verificationStatus,t[38]=r,t[39]=i,t[40]=c,t[41]=u,t[42]=D):D=t[42];let A;t[43]!==E||t[44]!==D||t[45]!==x?(A=(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[x,E,D]}),t[43]=E,t[44]=D,t[45]=x,t[46]=A):A=t[46];let j;return t[47]!==A||t[48]!==b?(j=(0,V.jsxs)(`li`,{className:`flex min-w-0 items-start gap-3 py-4`,children:[b,A]}),t[47]=A,t[48]=b,t[49]=j):j=t[49],j}function nt(e){let t=(0,B.c)(41),{criteria:n,language:r,closed:i,pending:a,canComplete:o,completionPending:s,blockedReason:c,error:l,onReview:u,onComplete:d,projectId:f,conversationId:p}=e,m=r===`zh`,h;t[0]===n?h=t[1]:(h=n.some(rt),t[0]=n,t[1]=h);let g=h,_;t[2]!==g||t[3]!==m?(_=g?(0,V.jsx)($e,{panelId:`acceptance:diagnostic`,title:m?`自动核验未完成:验收标准过于宽泛`:`Automatic verification incomplete: criteria are too broad`,className:`mb-2 text-xs leading-5 text-fg-muted`,children:(0,V.jsx)(`p`,{className:`mt-2 break-words`,children:et})}):null,t[2]=g,t[3]=m,t[4]=_):_=t[4];let v;if(t[5]!==i||t[6]!==p||t[7]!==n||t[8]!==r||t[9]!==u||t[10]!==a||t[11]!==f){let e;t[13]!==i||t[14]!==p||t[15]!==r||t[16]!==u||t[17]!==a||t[18]!==f?(e=(e,t)=>(0,V.jsx)(tt,{criterion:e,index:t,language:r,closed:i,pending:a,onReview:u,projectId:f,conversationId:p},`${t}:${e.text}`),t[13]=i,t[14]=p,t[15]=r,t[16]=u,t[17]=a,t[18]=f,t[19]=e):e=t[19],v=n.map(e),t[5]=i,t[6]=p,t[7]=n,t[8]=r,t[9]=u,t[10]=a,t[11]=f,t[12]=v}else v=t[12];let y;t[20]===v?y=t[21]:(y=(0,V.jsx)(`ul`,{className:`divide-y divide-edge-subtle`,children:v}),t[20]=v,t[21]=y);let b;t[22]!==n.length||t[23]!==m?(b=n.length===0?(0,V.jsx)(`p`,{className:`py-4 text-sm text-fg-muted`,children:m?`尚未定义验收标准`:`No acceptance criteria defined`}):null,t[22]=n.length,t[23]=m,t[24]=b):b=t[24];let x;t[25]===l?x=t[26]:(x=l?(0,V.jsx)(`p`,{role:`alert`,className:`my-2 text-sm text-danger`,children:l}):null,t[25]=l,t[26]=x);let S;t[27]!==c||t[28]!==o||t[29]!==i||t[30]!==s||t[31]!==d||t[32]!==a||t[33]!==m?(S=i?null:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-3 border-t border-edge-subtle pt-4`,children:[!o&&c?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:c}):null,(0,V.jsx)(P,{variant:`primary`,disabled:!o||a||s,onClick:d,children:m?`验收通过,完成任务`:`Accept and complete task`})]}),t[27]=c,t[28]=o,t[29]=i,t[30]=s,t[31]=d,t[32]=a,t[33]=m,t[34]=S):S=t[34];let C;return t[35]!==_||t[36]!==y||t[37]!==b||t[38]!==x||t[39]!==S?(C=(0,V.jsxs)(V.Fragment,{children:[_,y,b,x,S]}),t[35]=_,t[36]=y,t[37]=b,t[38]=x,t[39]=S,t[40]=C):C=t[40],C}function rt(e){return e.note===et}function it(e){let t=(0,B.c)(22),{detail:n,language:r}=e,i=r===`zh`,a;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=Ee(n),s;if(t[4]!==n.runs||t[5]!==n.task){let e;t[7]===n.task?e=t[8]:(e=e=>e.contractVersion===n.task.latestContractVersion,t[7]=n.task,t[8]=e),s=new Set(n.runs.filter(e).map(lt)),t[4]=n.runs,t[5]=n.task,t[6]=s}else s=t[6];let c=s,l;if(t[9]!==n.context||t[10]!==n.receipts||t[11]!==c){l=n.context.filter(ct).map(st);let e=new Set(l.map(ot).filter(Boolean)),r;t[13]===c?r=t[14]:(r=e=>c.has(e.runId),t[13]=c,t[14]=r);for(let t of n.receipts.filter(r))for(let n of t.evidence.filter(at))n.uri&&e.has(n.uri)||(n.uri&&e.add(n.uri),l.push(n));t[9]=n.context,t[10]=n.receipts,t[11]=c,t[12]=l}else l=t[12];let u=e?.summary.trim(),d=u&&u.length<=160&&!u.includes(`
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{f as i,m as a,t as o,u as s}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as c,l,n as u,o as d}from"./locale-store-B7y-RVe8.js";import{t as f}from"./messages-DYDkJvXj.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./dist-BGTk37IG.js";import{U as b,nt as x,t as S,w as C}from"./chat-page-e-xCsrdS.js";import{t as w}from"./arrow-left-D880xG-P.js";import{t as T}from"./calendar-clock-D-quYVPe.js";import{n as E,r as D}from"./popover-select-CEMWIrtY.js";import{t as ee}from"./circle-check-C23XjkUj.js";import{t as O}from"./circle-x-DFsCKeya.js";import{t as k}from"./circle-BoO4YvTx.js";import{t as A}from"./ellipsis-0k4rZLoy.js";import{t as j}from"./external-link-DjqjBmc3.js";import{t as te}from"./folder-kanban-CpLlFI1o.js";import{t as ne}from"./folder-open-CyzJ19I9.js";import{F as re,N as M,V as ie,z as ae}from"./markdown-view-DFHa8rUg.js";import{t as oe}from"./message-square-fVE7Ghj1.js";import{t as se}from"./pause-DuPxgSxk.js";import{t as ce}from"./play-kxZvpBg8.js";import{t as le}from"./x-B_N4OPjy.js";import{t as N}from"./cn-0WouolD0.js";import{t as ue}from"./skeleton-BI5TyibZ.js";import{c as de}from"./api-C-9J9ghT.js";import{ct as fe,lt as pe}from"./session-manager-DjRWxXJG.js";import{i as me}from"./vendor-swr-CdRzEUwF.js";import{C as he,D as ge,T as _e,d as ve,f as ye,k as be,m as xe,y as Se}from"./use-composer-attachments-CoiQAgjo.js";import{t as Ce}from"./chat-agents-api-Cffxfzi1.js";import{t as P}from"./button-Cc4hUNTt.js";import{s as we}from"./file-preview-surface-BaMGmCbw.js";import{d as Te,f as Ee,h as De,m as Oe,p as ke,s as Ae}from"./composer-payload-handoff-_9L2A5AZ.js";import{t as je}from"./page-header-store-CoKMiYoi.js";import{t as Me}from"./agent-avatar-display-D-yds6wG.js";import{t as Ne}from"./confirm-dialog-D7dQJytv.js";import{l as Pe,m as Fe,o as Ie,r as F,t as Le,u as Re}from"./dist-ZrL34Ps4.js";import{C as I,_ as ze,a as Be,c as L,d as Ve,l as He,u as Ue,w as We}from"./automation-task-card-DIjI_Y1X.js";import{t as Ge}from"./date-picker-BvEnSGZK.js";import{t as Ke}from"./automation-api-DAou8Kji.js";import{n as qe}from"./date-formatters-DukWSVwc.js";import{n as Je,r as R,t as Ye}from"./task-result-evidence-BV-6hBVU.js";import{t as Xe}from"./page-context-capture-button-CGfR0dsc.js";import{t as Ze}from"./dependency-picker-XjPB8FJS.js";var z=e(t(),1),B=n(),V=r();function Qe(e,t,n){let r=new URLSearchParams(e),i=r.getAll(`taskPanel`).filter(e=>e!==t&&e!==`${t}:closed`);r.delete(`taskPanel`);for(let e of i)r.append(`taskPanel`,e);return r.append(`taskPanel`,n?t:`${t}:closed`),r}function $e(e){let t=(0,B.c)(24),n,r,i,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],o=t[4],s=t[5],c=t[6]):({panelId:r,title:c,defaultOpen:s,children:n,summaryClassName:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=o,t[5]=s,t[6]=c);let l=s!==void 0&&s,[u,d]=a(),f;if(t[7]!==l||t[8]!==r||t[9]!==u){let e=u.getAll(`taskPanel`);f=e.includes(r)||l&&!e.includes(`${r}:closed`),t[7]=l,t[8]=r,t[9]=u,t[10]=f}else f=t[10];let p=f,m=o??`cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,h;t[11]!==p||t[12]!==r||t[13]!==d?(h=e=>{e.preventDefault(),d(e=>Qe(e,r,!p),{preventScrollReset:!0})},t[11]=p,t[12]=r,t[13]=d,t[14]=h):h=t[14];let g;t[15]!==m||t[16]!==h||t[17]!==c?(g=(0,V.jsx)(`summary`,{className:m,onClick:h,children:c}),t[15]=m,t[16]=h,t[17]=c,t[18]=g):g=t[18];let _;return t[19]!==n||t[20]!==p||t[21]!==i||t[22]!==g?(_=(0,V.jsxs)(`details`,{...i,open:p,children:[g,n]}),t[19]=n,t[20]=p,t[21]=i,t[22]=g,t[23]=_):_=t[23],_}var et=`Default criteria were not expanded into concrete acceptance items; broad completion cannot certify item coverage.`;function tt(e){let t=(0,B.c)(50),{criterion:n,index:r,language:i,closed:a,pending:o,onReview:s,projectId:c,conversationId:l}=e,u=i===`zh`,[d,f]=(0,z.useState)(!1),p=n.status===`passed`?ee:n.status===`failed`?O:k,m=n.status===`passed`?u?`已通过`:`Passed`:n.status===`failed`?u?`未通过`:`Failed`:u?`待验收`:`Awaiting review`,h=n.review?u?`用户确认`:`User reviewed`:n.status===`passed`||n.status===`failed`?u?`自动核验`:`Automatic verification`:void 0,g;t[0]!==r||t[1]!==s?(g=async function(e){await s(r,e)&&f(!1)},t[0]=r,t[1]=s,t[2]=g):g=t[2];let _=g,v=n.status===`passed`?`text-success`:n.status===`failed`?`text-danger`:`text-fg-subtle`,y;t[3]===v?y=t[4]:(y=N(`mt-0.5 size-4 shrink-0`,v),t[3]=v,t[4]=y);let b;t[5]!==p||t[6]!==y?(b=(0,V.jsx)(p,{"aria-hidden":!0,className:y}),t[5]=p,t[6]=y,t[7]=b):b=t[7];let x;t[8]===n.text?x=t[9]:(x=(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:n.text}),t[8]=n.text,t[9]=x);let S;t[10]===m?S=t[11]:(S=(0,V.jsx)(`span`,{children:m}),t[10]=m,t[11]=S);let C;t[12]===h?C=t[13]:(C=h?(0,V.jsxs)(`span`,{children:[`· `,h]}):null,t[12]=h,t[13]=C);let w;t[14]!==a||t[15]!==n.review||t[16]!==d||t[17]!==o||t[18]!==u?(w=n.review&&!a&&!d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!0),children:u?`更改判定`:`Change review`}):null,t[14]=a,t[15]=n.review,t[16]=d,t[17]=o,t[18]=u,t[19]=w):w=t[19];let T;t[20]!==a||t[21]!==n.review||t[22]!==d||t[23]!==o||t[24]!==_||t[25]!==u?(T=!a&&(!n.review||d)?(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsx)(P,{variant:`secondary`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`passed`),children:u?`确认通过`:`Mark passed`}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`failed`),children:u?`标记未通过`:`Mark failed`}),d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!1),children:u?`取消`:`Cancel`}):null]}):null,t[20]=a,t[21]=n.review,t[22]=d,t[23]=o,t[24]=_,t[25]=u,t[26]=T):T=t[26];let E;t[27]!==S||t[28]!==C||t[29]!==w||t[30]!==T?(E=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-2 text-xs text-fg-muted`,children:[S,C,w,T]}),t[27]=S,t[28]=C,t[29]=w,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==l||t[33]!==n.evidence||t[34]!==n.method||t[35]!==n.note||t[36]!==n.review||t[37]!==n.verificationStatus||t[38]!==r||t[39]!==i||t[40]!==c||t[41]!==u?(D=n.evidence.length>0||n.method||n.review||n.note?(0,V.jsx)($e,{panelId:`criterion:${r}:evidence`,title:(0,V.jsxs)(V.Fragment,{children:[u?`查看依据`:`View evidence`,n.evidence.length>0?` · ${n.evidence.length}`:``]}),summaryClassName:`min-h-9 cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,children:(0,V.jsxs)(`div`,{className:`space-y-2 border-l border-edge pl-3 text-xs leading-5 text-fg-muted`,children:[n.method?(0,V.jsxs)(`p`,{children:[u?`自动核验`:`Automatic verification`,` · `,n.verificationStatus===`passed`?u?`通过`:`Passed`:n.verificationStatus===`failed`?u?`未通过`:`Failed`:u?`未核验`:`Unverified`,n.method===`model_reviewed`?u?` · 模型审阅`:` · Model review`:``]}):null,n.review?(0,V.jsxs)(`p`,{children:[u?`人工判定`:`User review`,` · `,qe(n.review.reviewedAt,i)]}):null,n.note&&n.note!==et?(0,V.jsx)(R,{content:n.note,contentKey:`criterion:${r}:note`,language:i,markdown:!1}):null,(0,V.jsx)(Ye,{evidence:n.evidence,projectId:c,conversationId:l,language:i})]})}):null,t[32]=l,t[33]=n.evidence,t[34]=n.method,t[35]=n.note,t[36]=n.review,t[37]=n.verificationStatus,t[38]=r,t[39]=i,t[40]=c,t[41]=u,t[42]=D):D=t[42];let A;t[43]!==E||t[44]!==D||t[45]!==x?(A=(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[x,E,D]}),t[43]=E,t[44]=D,t[45]=x,t[46]=A):A=t[46];let j;return t[47]!==A||t[48]!==b?(j=(0,V.jsxs)(`li`,{className:`flex min-w-0 items-start gap-3 py-4`,children:[b,A]}),t[47]=A,t[48]=b,t[49]=j):j=t[49],j}function nt(e){let t=(0,B.c)(41),{criteria:n,language:r,closed:i,pending:a,canComplete:o,completionPending:s,blockedReason:c,error:l,onReview:u,onComplete:d,projectId:f,conversationId:p}=e,m=r===`zh`,h;t[0]===n?h=t[1]:(h=n.some(rt),t[0]=n,t[1]=h);let g=h,_;t[2]!==g||t[3]!==m?(_=g?(0,V.jsx)($e,{panelId:`acceptance:diagnostic`,title:m?`自动核验未完成:验收标准过于宽泛`:`Automatic verification incomplete: criteria are too broad`,className:`mb-2 text-xs leading-5 text-fg-muted`,children:(0,V.jsx)(`p`,{className:`mt-2 break-words`,children:et})}):null,t[2]=g,t[3]=m,t[4]=_):_=t[4];let v;if(t[5]!==i||t[6]!==p||t[7]!==n||t[8]!==r||t[9]!==u||t[10]!==a||t[11]!==f){let e;t[13]!==i||t[14]!==p||t[15]!==r||t[16]!==u||t[17]!==a||t[18]!==f?(e=(e,t)=>(0,V.jsx)(tt,{criterion:e,index:t,language:r,closed:i,pending:a,onReview:u,projectId:f,conversationId:p},`${t}:${e.text}`),t[13]=i,t[14]=p,t[15]=r,t[16]=u,t[17]=a,t[18]=f,t[19]=e):e=t[19],v=n.map(e),t[5]=i,t[6]=p,t[7]=n,t[8]=r,t[9]=u,t[10]=a,t[11]=f,t[12]=v}else v=t[12];let y;t[20]===v?y=t[21]:(y=(0,V.jsx)(`ul`,{className:`divide-y divide-edge-subtle`,children:v}),t[20]=v,t[21]=y);let b;t[22]!==n.length||t[23]!==m?(b=n.length===0?(0,V.jsx)(`p`,{className:`py-4 text-sm text-fg-muted`,children:m?`尚未定义验收标准`:`No acceptance criteria defined`}):null,t[22]=n.length,t[23]=m,t[24]=b):b=t[24];let x;t[25]===l?x=t[26]:(x=l?(0,V.jsx)(`p`,{role:`alert`,className:`my-2 text-sm text-danger`,children:l}):null,t[25]=l,t[26]=x);let S;t[27]!==c||t[28]!==o||t[29]!==i||t[30]!==s||t[31]!==d||t[32]!==a||t[33]!==m?(S=i?null:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-3 border-t border-edge-subtle pt-4`,children:[!o&&c?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:c}):null,(0,V.jsx)(P,{variant:`primary`,disabled:!o||a||s,onClick:d,children:m?`验收通过,完成任务`:`Accept and complete task`})]}),t[27]=c,t[28]=o,t[29]=i,t[30]=s,t[31]=d,t[32]=a,t[33]=m,t[34]=S):S=t[34];let C;return t[35]!==_||t[36]!==y||t[37]!==b||t[38]!==x||t[39]!==S?(C=(0,V.jsxs)(V.Fragment,{children:[_,y,b,x,S]}),t[35]=_,t[36]=y,t[37]=b,t[38]=x,t[39]=S,t[40]=C):C=t[40],C}function rt(e){return e.note===et}function it(e){let t=(0,B.c)(22),{detail:n,language:r}=e,i=r===`zh`,a;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=Ee(n),s;if(t[4]!==n.runs||t[5]!==n.task){let e;t[7]===n.task?e=t[8]:(e=e=>e.contractVersion===n.task.latestContractVersion,t[7]=n.task,t[8]=e),s=new Set(n.runs.filter(e).map(lt)),t[4]=n.runs,t[5]=n.task,t[6]=s}else s=t[6];let c=s,l;if(t[9]!==n.context||t[10]!==n.receipts||t[11]!==c){l=n.context.filter(ct).map(st);let e=new Set(l.map(ot).filter(Boolean)),r;t[13]===c?r=t[14]:(r=e=>c.has(e.runId),t[13]=c,t[14]=r);for(let t of n.receipts.filter(r))for(let n of t.evidence.filter(at))n.uri&&e.has(n.uri)||(n.uri&&e.add(n.uri),l.push(n));t[9]=n.context,t[10]=n.receipts,t[11]=c,t[12]=l}else l=t[12];let u=e?.summary.trim(),d=u&&u.length<=160&&!u.includes(`
2
2
  `)&&!/\b(?:Claim|Criterion|Research claim)\b|c-ac\d|Default criteria were not/i.test(u)?u:void 0,f=i?`交付结果`:`Deliverables`,p;t[15]===f?p=t[16]:(p=(0,V.jsx)(`h2`,{id:`task-results-heading`,className:`text-sm font-semibold text-fg`,children:f}),t[15]=f,t[16]=p);let m;t[17]!==n||t[18]!==l||t[19]!==r||t[20]!==i?(m=l.length>0?(0,V.jsx)(Ye,{evidence:l,language:r,projectId:n.task.projectId,conversationId:n.conversation.activeConversationId??void 0,compact:!0}):(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:i?`尚无可查看的交付物`:`No deliverables available yet`}),t[17]=n,t[18]=l,t[19]=r,t[20]=i,t[21]=m):m=t[21],a=(0,V.jsxs)(`section`,{"aria-label":i?`交付结果`:`Deliverables`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,children:[p,d?(0,V.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-fg-muted [overflow-wrap:anywhere]`,children:d}):null,e&&e.completionVerdict!==`achieved`?(0,V.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:i?`本次执行尚未报告目标全部达成。`:`This run has not reported the full goal achieved.`}):null,m,e?null:(0,V.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:i?`尚无本版任务的执行结果`:`No run result for this task version`}),e&&(e.needsUser||e.remainingWork.length>0||e.nextAction||e.failure)?(0,V.jsxs)(`div`,{className:`mt-4 space-y-2 border-t border-edge-subtle pt-3`,"aria-label":i?`执行待办`:`Run follow-up`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:e.needsUser?i?`需要你决定`:`Your decision needed`:i?`待处理事项`:`Remaining work`}),e.remainingWork.length>0?(0,V.jsx)(`ul`,{className:`space-y-2 text-sm leading-6 text-fg`,children:[...new Set(e.remainingWork)].map(H)}):null,e.nextAction?(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:e.nextAction}):null,e.failure?(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-danger [overflow-wrap:anywhere]`,children:e.failure.recoveryAction}):null,e.needsUser?(0,V.jsx)(o,{className:`inline-flex min-h-9 items-center rounded-sm text-xs font-medium text-accent-fg hover:underline focus-visible:ring-2 focus-visible:ring-accent/40`,to:M(n.task.id),children:i?`查看并决定`:`Review and decide`}):null]}):null]}),t[0]=n,t[1]=r,t[2]=i,t[3]=a}else a=t[3];return a}function H(e){return(0,V.jsx)(`li`,{className:`whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:e},e)}function at(e){return e.kind===`artifact`}function ot(e){return e.uri}function st(e){return{kind:[`file`,`url`].includes(e.targetKind)?`artifact`:`source`,title:e.title??e.targetId,summary:``,...[`file`,`url`].includes(e.targetKind)?{uri:e.targetId}:{},provenance:`user`,strength:`observed`,observedAt:0}}function ct(e){return e.role===`deliverable`}function lt(e){return e.id}function ut(e){let t=(0,B.c)(13),{detail:n,language:r}=e,i=r===`zh`,a=Te(r),o;t[0]===n?o=t[1]:(o=Ee(n),t[0]=n,t[1]=o);let s=o,c;t[2]===s?.runId?c=t[3]:(c=e=>e.runId!==s?.runId,t[2]=s?.runId,t[3]=c);let l=n.receipts.filter(c),[u,d]=(0,z.useState)(`idle`),f;t[4]===s?f=t[5]:(f=async function(e){if(s){d(`pending`);try{await _e(s.runId,e),d(`saved`)}catch{d(`failed`)}}},t[4]=s,t[5]=f);let p=f,m;t[6]!==n||t[7]!==r?(m=(0,V.jsx)(b,{detail:n,language:r}),t[6]=n,t[7]=r,t[8]=m):m=t[8];let h=s?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:a.latestResult}),(0,V.jsxs)(`span`,{className:`text-xs text-fg-muted`,children:[a.receiptStatuses[s.status],` · `,a.verificationStatuses[s.verification.status]]})]}),(0,V.jsx)(R,{content:s.summary,contentKey:`${n.task.id}:result:${s.runId}`,language:r}),s.evidence.length>0?(0,V.jsxs)(`details`,{children:[(0,V.jsxs)(`summary`,{className:`cursor-pointer py-2 text-xs text-fg-muted`,children:[i?`验证依据与执行产物`:`Evidence and artifacts`,` · `,s.evidence.length]}),(0,V.jsx)(Ye,{evidence:s.evidence,projectId:n.task.projectId,conversationId:n.conversation.activeConversationId??void 0,language:r})]}):null,(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:u===`pending`,onClick:()=>void p(`helpful`),children:a.doneWell}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:u===`pending`,onClick:()=>void p(`not_helpful`),children:a.needsFix}),u===`saved`?(0,V.jsx)(`span`,{role:`status`,className:`text-xs text-fg-muted`,children:i?`反馈已记录`:`Feedback saved`}):null,u===`failed`?(0,V.jsx)(`span`,{role:`alert`,className:`text-xs text-danger`,children:a.actionFailed}):null]})]}):null,g=l.length>0?(0,V.jsxs)(`details`,{className:`border-t border-edge-subtle pt-3`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer py-2 text-xs text-fg-muted`,children:a.executionHistory.replace(`{{count}}`,String(l.length))}),(0,V.jsx)(`div`,{className:`mt-3 space-y-4`,children:l.map(e=>(0,V.jsxs)(`article`,{className:`space-y-2 rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:a.receiptStatuses[e.status]}),(0,V.jsx)(R,{content:e.summary,contentKey:`${n.task.id}:result:${e.runId}`,language:r})]},e.runId))})]}):null,_;return t[9]!==m||t[10]!==h||t[11]!==g?(_=(0,V.jsxs)(`div`,{className:`space-y-4`,children:[m,h,g]}),t[9]=m,t[10]=h,t[11]=g,t[12]=_):_=t[12],_}function dt(e){let t=(0,B.c)(33),{changes:n,language:r}=e,i=r===`zh`,a;t[0]===i?a=t[1]:(a=i?{backlog:`待办池`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已关闭`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Closed`},t[0]=i,t[1]=a);let o=a,s;t[2]===i?s=t[3]:(s=i?{board:`看板`,mobile:`移动端`,api:`手动操作`,runtime:`自动流转`,undo:`撤销`}:{board:`Board`,mobile:`Mobile`,api:`Manual update`,runtime:`Automatic`,undo:`Undo`},t[2]=i,t[3]=s);let c=s,l;t[4]===i?l=t[5]:(l=i?{done:`完成`,cancelled:`取消`,duplicate:`重复`,wont_do:`不做`}:{done:`Done`,cancelled:`Cancelled`,duplicate:`Duplicate`,wont_do:`Won’t do`},t[4]=i,t[5]=l);let u=l,d;t[6]===i?d=t[7]:(d=i?{user:`用户`,agent:`Agent`,system:`系统`,integration:`外部服务`}:{user:`User`,agent:`Agent`,system:`System`,integration:`Integration`},t[6]=i,t[7]=d);let f=d,p=i?`变更记录`:`Change log`,m;t[8]!==n.length||t[9]!==p?(m=(0,V.jsxs)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:[p,` (`,n.length,`)`]}),t[8]=n.length,t[9]=p,t[10]=m):m=t[10];let h;if(t[11]!==f||t[12]!==n||t[13]!==r||t[14]!==o||t[15]!==u||t[16]!==c){let e;t[18]!==f||t[19]!==r||t[20]!==o||t[21]!==u||t[22]!==c?(e=e=>(0,V.jsxs)(`li`,{className:`text-sm text-fg`,children:[(0,V.jsxs)(`div`,{children:[o[e.fromPhase],e.fromResolution?` · ${u[e.fromResolution]}`:``,` → `,o[e.toPhase],e.toResolution?` · ${u[e.toResolution]}`:``]}),(0,V.jsxs)(`div`,{className:`mt-1 text-xs text-fg-muted`,children:[f[e.actor.kind],e.actor.id?` (${e.actor.id})`:``,` · `,c[e.source],` · `,(0,V.jsx)(`time`,{dateTime:new Date(e.createdAt).toISOString(),children:qe(e.createdAt,r)})]})]},e.id),t[18]=f,t[19]=r,t[20]=o,t[21]=u,t[22]=c,t[23]=e):e=t[23],h=[...n].reverse().map(e),t[11]=f,t[12]=n,t[13]=r,t[14]=o,t[15]=u,t[16]=c,t[17]=h}else h=t[17];let g;t[24]===h?g=t[25]:(g=(0,V.jsx)(`ol`,{className:`mt-3 max-h-80 space-y-3 overflow-y-auto`,children:h}),t[24]=h,t[25]=g);let _;t[26]!==n.length||t[27]!==i?(_=n.length?null:(0,V.jsx)(`p`,{className:`mt-3 text-xs text-fg-muted`,children:i?`暂无阶段变更记录`:`No phase changes yet`}),t[26]=n.length,t[27]=i,t[28]=_):_=t[28];let v;return t[29]!==m||t[30]!==g||t[31]!==_?(v=(0,V.jsxs)(`details`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[m,g,_]}),t[29]=m,t[30]=g,t[31]=_,t[32]=v):v=t[32],v}function ft({schedules:e,language:t,onEdit:n,onUpdated:r}){let i=t===`zh`,a=f(t),[s,c]=(0,z.useState)(null),l=(0,z.useRef)(!1),[u,d]=(0,z.useState)(null),p=e=>new Date(e).toLocaleString(i?`zh-CN`:`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,timeZoneName:`short`});async function m(e){if(!l.current){l.current=!0,c(e.id),d(null);try{r((await Ke.update(e.id,{enabled:!1,expectedRevision:e.updatedAtMs})).automation)}catch(e){d(e instanceof Error?e.message:a.automations.feedback.actionFailed)}finally{l.current=!1,c(null)}}}return(0,V.jsxs)(`section`,{"aria-label":i?`执行时间`:`Execution schedule`,className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i?`执行时间`:`Execution schedule`}),(0,V.jsx)(`div`,{className:`mt-3 space-y-4`,children:e.map(e=>{let r=e.trigger.kind===`schedule`?e.trigger.schedule:null,c=I(e),l=!e.management||e.management.editable.includes(`trigger`),u=!e.management||e.management.editable.includes(`enabled`);return(0,V.jsxs)(`article`,{className:`space-y-2 text-sm text-fg`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,V.jsx)(`span`,{className:`break-words font-medium`,children:e.name}),(0,V.jsx)(`span`,{className:`text-xs text-fg-muted`,children:c?i?`已执行`:`Completed`:e.enabled?i?`已启用`:`Enabled`:i?`已取消定时执行`:`Scheduling disabled`})]}),(0,V.jsx)(`p`,{children:r?.kind===`once`?`${i?`单次执行:`:`Run once: `}${p(Date.parse(r.at))}`:ze(e.trigger,a.automations,a.cron,t)}),r?.kind===`cron`?(0,V.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[i?`执行时区:`:`Schedule timezone: `,r.tz||(i?`服务所在电脑时区`:`Server timezone`)]}):null,(0,V.jsxs)(`p`,{className:`text-fg-muted`,children:[i?`下次执行:`:`Next run: `,c?i?`已执行,无后续计划`:`Completed; no upcoming run`:e.enabled?e.state.nextRunAtMs===void 0?i?`暂无后续执行`:`No upcoming run`:p(e.state.nextRunAtMs):i?`已取消,不再自动执行`:`Disabled; no automatic runs`]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[l?(0,V.jsx)(P,{variant:`secondary`,disabled:s!==null,onClick:()=>n(e),children:i?`修改时间`:`Edit schedule`}):null,e.enabled&&u?(0,V.jsx)(P,{variant:`ghost`,disabled:s!==null,onClick:()=>void m(e),children:s===e.id?i?`正在取消…`:`Cancelling…`:i?`取消定时执行`:`Cancel schedule`}):null,(0,V.jsx)(P,{asChild:!0,variant:`ghost`,children:(0,V.jsx)(o,{to:`/automations?automation=${encodeURIComponent(e.id)}`,children:i?`查看自动化`:`View automation`})})]})]},e.id)})}),u?(0,V.jsx)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:u}):null]})}var pt=`w-full rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-2 focus-visible:outline-accent`;function mt({taskId:e,taskTitle:t,projectId:n,executorAgentId:r,language:i,onClose:a,onCreated:s,automation:c}){let l=i===`zh`,u=f(i).automations,[d,b]=(0,z.useState)(()=>c?Ue(c):{...Ve,name:t,projectId:n??``,actionMode:`task_command`,taskId:e,agentId:r??``,triggerMode:`once`,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`}),[x,S]=(0,z.useState)(null),[C,w]=(0,z.useState)(!1),T=(0,z.useRef)(!1),[ee,O]=(0,z.useState)(null),k=e=>b(t=>({...t,...e}));async function A(e){if(e.preventDefault(),!(T.current||x)&&(O(null),!(!d.name.trim()||!c&&!r))){if(d.triggerMode===`once`&&(!Number.isFinite(new Date(d.onceAt).getTime())||new Date(d.onceAt).getTime()<=Date.now())){O(u.experience.futureTime);return}T.current=!0,w(!0);try{let e=c?L(c,d).trigger:He(d).trigger,{automation:t}=c?await Ke.update(c.id,{trigger:e,...c.management?{}:{name:d.name.trim(),delivery:{...c.delivery,notificationPolicy:d.notificationPolicy}},...!c.management||c.management.editable.includes(`enabled`)?{enabled:!0}:{},expectedRevision:c.updatedAtMs}):await Ke.create({...He(d),enabled:!0});S(t),s(t)}catch(e){O(e instanceof Error?e.message:u.feedback.actionFailed)}finally{T.current=!1,w(!1)}}}return(0,V.jsx)(y,{open:!0,onOpenChange:e=>{!e&&!T.current&&a()},children:(0,V.jsxs)(g,{children:[(0,V.jsx)(p,{className:`fixed inset-0 z-[110] bg-black/45`}),(0,V.jsxs)(_,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[111] flex h-[min(38rem,calc(100dvh-2rem))] w-[min(32rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-overlay shadow-popover outline-none`,children:[(0,V.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 border-b border-edge-subtle px-5 py-4`,children:[(0,V.jsx)(v,{className:`text-base font-semibold text-fg`,children:c?l?`修改执行时间`:`Edit execution schedule`:l?`设置执行时间`:`Set execution time`}),(0,V.jsx)(h,{asChild:!0,children:(0,V.jsx)(P,{variant:`ghost`,className:`size-9 p-0`,disabled:C,"aria-label":l?`关闭`:`Close`,children:(0,V.jsx)(le,{className:`size-4`})})})]}),(0,V.jsx)(m,{className:`sr-only`,children:l?`为当前任务创建定时或周期自动化。`:`Create a scheduled or recurring automation for this task.`}),x?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-5`,children:[(0,V.jsx)(`p`,{role:`status`,className:`text-sm font-medium text-fg`,children:c?l?`执行时间已更新`:`Schedule updated`:l?`执行时间已设置`:`Schedule created`}),(0,V.jsx)(`p`,{className:`break-words text-sm text-fg-muted`,children:x.name}),(0,V.jsx)(P,{asChild:!0,variant:`primary`,children:(0,V.jsx)(o,{to:`/automations?automation=${encodeURIComponent(x.id)}`,children:l?`查看自动化`:`View automation`})})]}),(0,V.jsx)(`footer`,{className:`shrink-0 border-t border-edge-subtle p-4`,children:(0,V.jsx)(P,{onClick:a,children:l?`完成`:`Done`})})]}):(0,V.jsxs)(`form`,{onSubmit:e=>void A(e),className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-5`,children:[(0,V.jsxs)(`p`,{className:`break-words text-sm text-fg-muted`,children:[l?`执行任务:`:`Task: `,t]}),(0,V.jsxs)(`fieldset`,{disabled:C,className:`space-y-4`,children:[(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.name,(0,V.jsx)(`input`,{required:!0,readOnly:!!c?.management,className:pt,value:d.name,onChange:e=>k({name:e.target.value})})]}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.trigger,(0,V.jsxs)(E,{value:d.triggerMode,onChange:e=>k({triggerMode:e.target.value}),children:[c?.trigger.kind===`schedule`&&c.trigger.schedule.kind===`interval`?(0,V.jsx)(D,{value:`interval`,children:l?`固定间隔`:`Fixed interval`}):null,c?.trigger.kind===`schedule`&&c.trigger.schedule.kind===`cron`?(0,V.jsx)(D,{value:`cron`,children:l?`自定义规则`:`Custom schedule`}):null,(0,V.jsx)(D,{value:`once`,children:u.trigger.once}),(0,V.jsx)(D,{value:`daily`,children:u.trigger.daily}),(0,V.jsx)(D,{value:`weekly`,children:u.trigger.weekly})]})]}),d.triggerMode===`once`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.onceAt,(0,V.jsx)(`input`,{required:!0,type:`datetime-local`,className:pt,value:d.onceAt,onChange:e=>k({onceAt:e.target.value})})]}):[`daily`,`weekly`].includes(d.triggerMode)?(0,V.jsxs)(`div`,{className:`grid gap-2 text-sm text-fg`,children:[(0,V.jsx)(`span`,{children:u.form.time}),(0,V.jsx)(We,{disabled:C,value:d.time,onChange:e=>k({time:e}),ariaLabel:u.form.time})]}):null,d.triggerMode===`weekly`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.day,(0,V.jsx)(E,{value:d.weekday,onChange:e=>k({weekday:e.target.value}),children:[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`].map((e,t)=>(0,V.jsx)(D,{value:String(t),children:u.weekdays[e]},e))})]}):null,d.triggerMode===`cron`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`定时规则`:`Cron expression`,(0,V.jsx)(`input`,{required:!0,className:pt,value:d.cronExpr,onChange:e=>k({cronExpr:e.target.value})})]}):null,d.triggerMode===`interval`?(0,V.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`执行间隔`:`Interval`,(0,V.jsx)(`input`,{required:!0,type:`number`,min:`1`,className:pt,value:d.intervalValue,onChange:e=>k({intervalValue:e.target.value})})]}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`单位`:`Unit`,(0,V.jsxs)(E,{value:d.intervalUnit,onChange:e=>k({intervalUnit:e.target.value}),children:[(0,V.jsx)(D,{value:`minute`,children:l?`分钟`:`Minutes`}),(0,V.jsx)(D,{value:`hour`,children:l?`小时`:`Hours`}),(0,V.jsx)(D,{value:`day`,children:l?`天`:`Days`}),(0,V.jsx)(D,{value:`week`,children:l?`周`:`Weeks`})]})]})]}):null,(0,V.jsx)(Be,{form:d,onChange:k,language:i}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.draft.notifications,(0,V.jsxs)(E,{disabled:!!c?.management,value:d.notificationPolicy,onChange:e=>k({notificationPolicy:e.target.value}),children:[(0,V.jsx)(D,{value:`attention`,children:u.draft.notifyAttention}),(0,V.jsx)(D,{value:`all`,children:u.draft.notifyAll}),(0,V.jsx)(D,{value:`none`,children:u.draft.notifyNone})]})]})]}),!c&&!r?(0,V.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:l?`请先为任务指定执行 Agent。`:`Assign an executor agent to the task first.`}):null,ee?(0,V.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:ee}):null]}),(0,V.jsxs)(`footer`,{className:`flex shrink-0 justify-end gap-2 border-t border-edge-subtle p-4`,children:[(0,V.jsx)(P,{type:`button`,variant:`ghost`,disabled:C,onClick:a,children:l?`取消`:`Cancel`}),(0,V.jsx)(P,{type:`submit`,variant:`primary`,disabled:C||!c&&!r||!d.name.trim()||d.triggerMode===`once`&&!d.onceAt,children:C?l?`正在保存…`:`Saving…`:c?c.enabled?l?`保存修改`:`Save changes`:l?`保存并启用`:`Save and enable`:l?`创建自动化`:`Create automation`})]})]})]})]})})}function ht(e){let t=(0,B.c)(36),{detail:n,language:r,onUpdated:i}=e,a=r===`zh`,s;t[0]===n.waits?s=t[1]:(s=n.waits.find(yt),t[0]=n.waits,t[1]=s);let c=s,l,u,d,f,p,m,h;if(t[2]!==n||t[3]!==r||t[4]!==i||t[5]!==c||t[6]!==a){l=n.allowedCommands.includes(`resolve_wait`)&&!c?n.waits.filter(vt):[];let e=l.length>0||n.attention.some(_t),s;t[14]===n?s=t[15]:(s=Ee(n),t[14]=n,t[15]=s);let g=s,_=n.runs.some(gt);d=c?.reason??n.waits[0]?.reason??(n.task.phase===`closed`?a?`任务已关闭,可查看交付物与执行结果。`:`The task is closed. Review its deliverables and results.`:n.task.phase===`review`?a?`请检查交付物与验收项,通过后确认完成。`:`Review the deliverables and acceptance criteria before completing the task.`:_?a?`Agent 正在执行任务,无需你操作。`:`The agent is working. No action is needed from you.`:g?.summary??(a?`任务尚未开始,可开始执行或设置执行时间。`:`Start the task or set an execution time.`)),u=n.attention.length>0?(0,V.jsx)(`ul`,{className:`mt-3 space-y-3`,children:n.attention.map((e,t)=>{let i=l.some(t=>e.kind===`input_required`&&t.kind===`user_input`||e.kind===`approval_required`&&t.kind===`approval`);return(0,V.jsxs)(`li`,{className:`text-sm leading-6 text-fg-muted`,children:[(0,V.jsx)(R,{content:e.summary,contentKey:`${n.task.id}:attention:${e.kind}:${t}`,language:r,markdown:!1,previewHeight:72}),!i&&(e.kind===`input_required`||e.kind===`approval_required`)?(0,V.jsx)(o,{className:`mt-2 inline-flex min-h-11 items-center rounded-lg bg-accent-soft px-3 font-medium text-accent-fg`,to:M(n.task.id),children:a?e.kind===`approval_required`?`查看并决定`:`补充信息`:e.kind===`approval_required`?`Review decision`:`Provide information`}):null]},`${e.kind}-${t}`)})}):null,f=a?`当前需要处理`:`Current action`,p=`rounded-xl border border-edge bg-surface-panel p-4`;let v=e?a?`需要你处理`:`Your action needed`:a?`当前进展`:`Current progress`,y=l.length>1?` · ${l.length}`:``;t[16]!==v||t[17]!==y?(m=(0,V.jsxs)(`h2`,{className:`text-sm font-semibold text-fg`,children:[v,y]}),t[16]=v,t[17]=y,t[18]=m):m=t[18];let b;t[19]!==n||t[20]!==i||t[21]!==a?(b=e=>(0,V.jsx)(Je,{wait:e,detail:n,zh:a,onUpdated:i},e.id),t[19]=n,t[20]=i,t[21]=a,t[22]=b):b=t[22],h=l.map(b),t[2]=n,t[3]=r,t[4]=i,t[5]=c,t[6]=a,t[7]=l,t[8]=u,t[9]=d,t[10]=f,t[11]=p,t[12]=m,t[13]=h}else l=t[7],u=t[8],d=t[9],f=t[10],p=t[11],m=t[12],h=t[13];let g;t[23]!==l.length||t[24]!==u||t[25]!==n.task||t[26]!==r||t[27]!==d||t[28]!==a?(g=l.length>0?u?(0,V.jsxs)(`details`,{className:`mt-3`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-xs text-fg-muted`,children:a?`等待详情`:`Waiting details`}),u]}):null:u??(0,V.jsx)(R,{content:d,contentKey:`${n.task.id}:current-progress`,language:r,markdown:!1,previewHeight:72,className:`mt-2 text-sm leading-6 text-fg-muted`}),t[23]=l.length,t[24]=u,t[25]=n.task,t[26]=r,t[27]=d,t[28]=a,t[29]=g):g=t[29];let _;return t[30]!==f||t[31]!==p||t[32]!==m||t[33]!==h||t[34]!==g?(_=(0,V.jsxs)(`section`,{"aria-label":f,className:p,children:[m,h,g]}),t[30]=f,t[31]=p,t[32]=m,t[33]=h,t[34]=g,t[35]=_):_=t[35],_}function gt(e){return!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)}function _t(e){return e.kind===`input_required`||e.kind===`approval_required`}function vt(e){return(e.kind===`user_input`||e.kind===`approval`&&typeof e.condition.capability==`string`)&&e.condition.type!==`connection`}function yt(e){return e.kind===`paused`}function bt(e){let t=(0,B.c)(17),{children:n,contentKey:r,language:i,className:o}=e,s=(0,z.useId)(),c=z.Children.toArray(n),[l,u]=a(),d;t[0]!==r||t[1]!==l?(d=l.getAll(`taskExpanded`).includes(r),t[0]=r,t[1]=l,t[2]=d):d=t[2];let f=d,p=f?c:c.slice(0,3),m;t[3]!==s||t[4]!==p?(m=(0,V.jsx)(`ul`,{id:s,className:`space-y-1.5`,children:p}),t[3]=s,t[4]=p,t[5]=m):m=t[5];let h;t[6]!==r||t[7]!==f||t[8]!==s||t[9]!==c.length||t[10]!==i||t[11]!==u?(h=c.length>3?(0,V.jsx)(`button`,{type:`button`,"aria-expanded":f,"aria-controls":s,className:`mt-2 min-h-9 rounded-sm text-xs font-medium text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>u(e=>{let t=new URLSearchParams(e),n=t.getAll(`taskExpanded`).filter(e=>e!==r);return t.delete(`taskExpanded`),n.forEach(e=>t.append(`taskExpanded`,e)),f||t.append(`taskExpanded`,r),t},{preventScrollReset:!0}),children:i===`zh`?f?`收起`:`查看全部(${c.length})`:f?`Show less`:`Show all (${c.length})`}):null,t[6]=r,t[7]=f,t[8]=s,t[9]=c.length,t[10]=i,t[11]=u,t[12]=h):h=t[12];let g;return t[13]!==o||t[14]!==m||t[15]!==h?(g=(0,V.jsxs)(`div`,{className:o,children:[m,h]}),t[13]=o,t[14]=m,t[15]=h,t[16]=g):g=t[16],g}function xt({taskId:e}){let t=l(e=>e.conversationId),n=u(e=>e.language),[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(null),[s,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)([]),[_,v]=(0,z.useState)(null),y=c(`/api/tasks/${encodeURIComponent(e)}/collaboration`),{data:b,error:x,mutate:S}=me([`task-collaboration`,e,t],()=>d(`${y}?recent=1`),{revalidateOnFocus:!0}),C=[...new Map([...h,...b?.items??[]].map(e=>[e.id,e])).values()].sort((e,t)=>e.sequence-t.sequence),w=async()=>{let e=C[0];if(!(!e||p)){m(!0);try{let t=await d(`${y}?recent=1&beforeSequence=${e.sequence}`);g(e=>[...t.items,...e])}catch(e){v(e instanceof Error?e.message:String(e))}finally{m(!1)}}};(0,z.useEffect)(()=>{let t=t=>{let n=t.detail;(!n?.taskId||n.taskId===e)&&S()};return window.addEventListener(`task-collaboration-entry-added`,t),window.addEventListener(`gateway-realtime-connected`,t),()=>{window.removeEventListener(`task-collaboration-entry-added`,t),window.removeEventListener(`gateway-realtime-connected`,t)}},[S,e]);let T=async()=>{if(!(!r.trim()||s)){f(!0),v(null);try{await d(y,{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({kind:a?`answer`:`instruction`,body:r.trim(),...a?{causationId:a}:{}})}),i(``),o(null),await S()}catch(e){v(e instanceof Error?e.message:String(e))}finally{f(!1)}}};return(0,V.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:n===`zh`?`任务留言`:`Task updates`}),(0,V.jsxs)(`div`,{className:`mt-3 max-h-64 space-y-2 overflow-y-auto`,children:[!b&&!x?(0,V.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-2`,children:[(0,V.jsx)(ue,{className:`h-14 w-full`}),(0,V.jsx)(ue,{className:`h-14 w-4/5`})]}):null,x?(0,V.jsx)(`p`,{role:`status`,className:`text-xs text-fg-muted`,children:n===`zh`?`暂时无法读取留言`:`Updates unavailable`}):null,C[0]&&C[0].sequence>1?(0,V.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void w(),className:`text-xs text-accent hover:underline disabled:opacity-50`,children:n===`zh`?`查看更早留言`:`Earlier updates`}):null,C.map(t=>(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-base px-3 py-2 text-sm`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-subtle`,children:[(0,V.jsx)(`span`,{children:t.authorKind===`worker_agent`?n===`zh`?`执行 Agent`:`Worker`:t.authorKind===`main_agent`?n===`zh`?`主 Agent`:`Main Agent`:t.authorKind===`system`?n===`zh`?`系统`:`System`:n===`zh`?`用户`:`You`}),(0,V.jsxs)(`span`,{children:[`· `,t.kind]}),t.deliveryStatus?(0,V.jsxs)(`span`,{children:[`· `,t.deliveryStatus]}):null]}),(0,V.jsx)(`div`,{className:`mt-1 min-w-0 text-fg`,"data-task-collaboration-body":!0,children:(0,V.jsx)(R,{content:t.body,contentKey:`${e}:update:${t.id}`,language:n,breaks:!0,previewHeight:120})}),t.kind===`question`&&t.authorKind===`worker_agent`?(0,V.jsx)(`button`,{type:`button`,className:`mt-2 text-xs text-accent hover:underline`,onClick:()=>o(t.id),children:n===`zh`?`回复问题`:`Reply`}):null]},t.id)),b&&!C.length?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n===`zh`?`暂无进展留言`:`No updates yet`}):null]}),a?(0,V.jsxs)(`p`,{className:`mt-3 text-xs text-accent`,children:[n===`zh`?`正在回复执行 Agent 的问题`:`Replying to the worker`,(0,V.jsx)(`button`,{type:`button`,className:`ml-2 underline`,onClick:()=>o(null),children:n===`zh`?`取消`:`Cancel`})]}):null,(0,V.jsx)(`textarea`,{value:r,onChange:e=>i(e.target.value),rows:2,"aria-label":n===`zh`?`任务留言`:`Task message`,placeholder:n===`zh`?`给执行 Agent 留言`:`Message the worker`,className:`mt-3 w-full resize-y rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),_?(0,V.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:_}):null,(0,V.jsx)(`button`,{type:`button`,disabled:!r.trim()||s,onClick:()=>void T(),className:`mt-2 rounded-lg bg-accent px-3 py-2 text-xs font-medium text-white disabled:opacity-50`,children:s?n===`zh`?`发送中`:`Sending`:n===`zh`?`发送`:`Send`})]})}function St(e,t,n,r){return!!(e&&t!==e.version&&n!==e.value&&r!==n)}function Ct(e,t){let n={...e.task};t.title!==void 0&&(n.title=t.title),t.priority!==void 0&&(n.priority=t.priority);for(let e of[`body`,`projectId`,`milestoneId`,`parentTaskId`,`dueAt`,`ownerId`]){let r=t[e];r!==void 0&&(r===null?delete n[e]:Object.assign(n,{[e]:r}))}return n.version+=1,n.updatedAt=Date.now(),{...e,task:n}}function wt(e,t){return(t===`zh`?{backlog:`待规划`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已关闭`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Closed`})[e]}function Tt(){let e=(0,B.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsxs)(`div`,{className:`space-y-4`,"aria-busy":!0,children:[(0,V.jsx)(ue,{className:`h-32 rounded-2xl`}),(0,V.jsx)(ue,{className:`h-52 rounded-2xl`}),(0,V.jsx)(ue,{className:`h-40 rounded-2xl`})]}),e[0]=t):t=e[0],t}function Et(e){if(e===void 0)return``;let t=new Date(e);return new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().slice(0,10)}function Dt(e){return e?new Date(`${e}T23:59:59.999`).getTime():null}var Ot=[`backlog`,`ready`,`active`,`review`,`closed`],kt=[`low`,`normal`,`high`,`critical`],At=(0,z.memo)(function(e){let t=(0,B.c)(20),{value:n,disabled:r,canMove:i,canApprove:a,canReopen:o,language:s,label:c,onChange:l}=e,u;t[0]!==a||t[1]!==i||t[2]!==o||t[3]!==n?(u=e=>e!==n&&!i&&!(e===`closed`?a:n===`closed`&&o),t[0]=a,t[1]=i,t[2]=o,t[3]=n,t[4]=u):u=t[4];let d=u,f;t[5]===c?f=t[6]:(f=(0,V.jsx)(`span`,{children:c}),t[5]=c,t[6]=f);let p;t[7]===l?p=t[8]:(p=e=>l(e.target.value),t[7]=l,t[8]=p);let m;t[9]!==s||t[10]!==d?(m=Ot.map(e=>(0,V.jsx)(D,{value:e,disabled:d(e),children:wt(e,s)},e)),t[9]=s,t[10]=d,t[11]=m):m=t[11];let h;t[12]!==r||t[13]!==p||t[14]!==m||t[15]!==n?(h=(0,V.jsx)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:p,children:m}),t[12]=r,t[13]=p,t[14]=m,t[15]=n,t[16]=h):h=t[16];let g;return t[17]!==f||t[18]!==h?(g=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[f,h]}),t[17]=f,t[18]=h,t[19]=g):g=t[19],g}),jt=(0,z.memo)(function(e){let t=(0,B.c)(14),{value:n,disabled:r,label:i,labels:a,onChange:o}=e,s;t[0]===i?s=t[1]:(s=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=s);let c;t[2]===o?c=t[3]:(c=e=>o(e.target.value),t[2]=o,t[3]=c);let l;t[4]===a?l=t[5]:(l=kt.map(e=>(0,V.jsx)(D,{value:e,children:a[e]},e)),t[4]=a,t[5]=l);let u;t[6]!==r||t[7]!==c||t[8]!==l||t[9]!==n?(u=(0,V.jsx)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:c,children:l}),t[6]=r,t[7]=c,t[8]=l,t[9]=n,t[10]=u):u=t[10];let d;return t[11]!==s||t[12]!==u?(d=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[s,u]}),t[11]=s,t[12]=u,t[13]=d):d=t[13],d}),Mt=(0,z.memo)(function(e){let t=(0,B.c)(10),{value:n,disabled:r,label:i,onChange:a}=e,o;t[0]===i?o=t[1]:(o=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=o);let s;t[2]!==r||t[3]!==i||t[4]!==a||t[5]!==n?(s=(0,V.jsx)(Ge,{disabled:r,value:n,onChange:a,ariaLabel:i}),t[2]=r,t[3]=i,t[4]=a,t[5]=n,t[6]=s):s=t[6];let c;return t[7]!==o||t[8]!==s?(c=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[o,s]}),t[7]=o,t[8]=s,t[9]=c):c=t[9],c}),Nt=(0,z.memo)(function(e){let t=(0,B.c)(17),{value:n,disabled:r,label:i,unassignedLabel:a,agents:o,onChange:s}=e,c;t[0]===i?c=t[1]:(c=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=c);let l;t[2]===s?l=t[3]:(l=e=>s(e.target.value),t[2]=s,t[3]=l);let u;t[4]===a?u=t[5]:(u=(0,V.jsx)(D,{value:``,disabled:!0,children:a}),t[4]=a,t[5]=u);let d;t[6]===o?d=t[7]:(d=o.map(qt),t[6]=o,t[7]=d);let f;t[8]!==r||t[9]!==l||t[10]!==u||t[11]!==d||t[12]!==n?(f=(0,V.jsxs)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:l,children:[u,d]}),t[8]=r,t[9]=l,t[10]=u,t[11]=d,t[12]=n,t[13]=f):f=t[13];let p;return t[14]!==c||t[15]!==f?(p=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[c,f]}),t[14]=c,t[15]=f,t[16]=p):p=t[16],p}),Pt=(0,z.memo)(function(e){let t=(0,B.c)(9),{candidates:n,selected:r,disabled:i,labels:a,getTaskHref:o,onChange:s}=e,c;t[0]===r?c=t[1]:(c=r.map(Jt),t[0]=r,t[1]=c);let l;return t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==a||t[6]!==s||t[7]!==c?(l=(0,V.jsx)(Ze,{borderless:!0,candidates:n,selectedIds:c,disabled:i,getTaskHref:o,onChange:s,labels:a}),t[2]=n,t[3]=i,t[4]=o,t[5]=a,t[6]=s,t[7]=c,t[8]=l):l=t[8],l},(e,t)=>e.disabled===t.disabled&&e.labels===t.labels&&e.getTaskHref===t.getTaskHref&&e.onChange===t.onChange&&e.candidates.length===t.candidates.length&&e.candidates.every((e,n)=>e.id===t.candidates[n]?.id&&e.title===t.candidates[n]?.title)&&e.selected.length===t.selected.length&&e.selected.every((e,n)=>e.id===t.selected[n]?.id&&e.title===t.selected[n]?.title)),Ft=`xopc.taskDetail.chatPanelPercent`,It=42;function Lt(e,t){let n=Math.max(30,352/Math.max(t,1)*100),r=Math.min(60,(t-480)/Math.max(t,1)*100);return r<n?It:Math.min(r,Math.max(n,e))}function Rt(){try{let e=Number(window.localStorage.getItem(Ft));return Number.isFinite(e)&&e>=30&&e<=60?e:It}catch{return It}}function zt(e){let t=(0,B.c)(13),{items:n,empty:r,contentKey:i}=e,a=u(Vt);if(n.length===0){let e;return t[0]===r?e=t[1]:(e=(0,V.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:r}),t[0]=r,t[1]=e),e}let o;t[2]===n?o=t[3]:(o=n.join(`
3
3
  `),t[2]=n,t[3]=o);let s;t[4]===n?s=t[5]:(s=n.map(Bt),t[4]=n,t[5]=s);let c;t[6]===s?c=t[7]:(c=(0,V.jsx)(`ul`,{className:`space-y-2`,children:s}),t[6]=s,t[7]=c);let l;return t[8]!==i||t[9]!==a||t[10]!==o||t[11]!==c?(l=(0,V.jsx)(R,{content:o,contentKey:i,language:a,previewHeight:144,children:c}),t[8]=i,t[9]=a,t[10]=o,t[11]=c,t[12]=l):l=t[12],l}function Bt(e){return(0,V.jsxs)(`li`,{className:`flex gap-2 text-sm leading-6 text-fg`,children:[(0,V.jsx)(k,{className:`mt-1 size-4 shrink-0 text-fg-subtle`}),(0,V.jsx)(`span`,{className:`min-w-0 whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:e})]},e)}function Vt(e){return e.language}function U({taskId:e,presentation:t,backgroundPath:n,onDeleted:r}){let[i,c]=a(),d=s(),f=u(e=>e.language),p=l(e=>e.conversationId),m=(0,z.useMemo)(()=>Te(f),[f]),h=je(e=>e.setPageHeader),g=je(e=>e.clearPageHeader),_=we(e=>e.panes),v=C(e=>e.openForSession),{data:y,error:b,mutate:E,lastChange:D,conversationLoading:ee,conversationError:O}=x(e),{data:k,error:le,mutate:_e}=me(e?[`task-detail-automations`,p]:null,()=>Ke.list(),{refreshInterval:3e4}),[Ae,I]=(0,z.useState)(null),[ze,Be]=(0,z.useState)(null),[L,Ve]=(0,z.useState)(()=>new Set),[He,Ue]=(0,z.useState)([]),[We,Ge]=(0,z.useState)(null),[Je,Ye]=(0,z.useState)([]),[Ze,B]=(0,z.useState)(!1),[et,tt]=(0,z.useState)(``),[rt,H]=(0,z.useState)(!1),[at,ot]=(0,z.useState)(``),[st,ct]=(0,z.useState)(Rt),[lt,pt]=(0,z.useState)(!1),gt=(0,z.useRef)(null),_t=(0,z.useRef)(null),vt=(0,z.useRef)(null),yt=(0,z.useRef)(!1),wt=(0,z.useRef)(!1),Ot=(0,z.useRef)(``),kt=(0,z.useRef)(null),Bt=(0,z.useRef)(null),Vt=(0,z.useRef)(null),U=(0,z.useRef)(y),[Ht,W]=(0,z.useState)(null),[Ut,Wt]=(0,z.useState)(null),[Gt,Kt]=(0,z.useState)(!1),[qt,Jt]=(0,z.useState)(!1),[Yt,Xt]=(0,z.useState)(null),Zt=(0,z.useRef)(null),Qt=(0,z.useMemo)(()=>({link:m.linkDependencies,linked:m.linkedDependencies,searchPlaceholder:m.dependencySearchPlaceholder,noMatches:m.noDependencyMatches,noCandidates:m.noDependencyCandidates,remove:m.removeDependency}),[m.dependencySearchPlaceholder,m.linkDependencies,m.linkedDependencies,m.noDependencyCandidates,m.noDependencyMatches,m.removeDependency]),$t=y?.dependencies.map(e=>`${e.id}:${e.title}`).join(`\0`)??``,en=(0,z.useMemo)(()=>ae(i.get(`returnTo`),`/`,[`/projects`,`/chat`,`/notes`,`/tasks`]),[i]),tn=(0,z.useCallback)(e=>t===`modal`&&n?re(n,e):ie(`/tasks/${encodeURIComponent(e)}`,en),[n,t,en]);U.current=y;let G=(0,z.useCallback)((e,t)=>{Ve(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},[]);(0,z.useEffect)(()=>{I(null),Be(null),W(null),B(!1),kt.current=null,H(!1),Wt(null),Kt(!1),Jt(!1),Xt(null)},[e]),(0,z.useEffect)(()=>{let e=!0;return Ce().then(t=>{e&&Ye(t.items)}).catch(()=>void 0),()=>{e=!1}},[p]),(0,z.useEffect)(()=>{if(!D||D.source===`user`)return;Wt(D);let e=window.setTimeout(()=>Wt(null),3500);return()=>window.clearTimeout(e)},[D]),(0,z.useEffect)(()=>{let t=y?.task.projectId,n=y?.dependencies??[];if(!t){Vt.current=null,Ge(null),Ue(n);return}Vt.current!==t&&(Vt.current=t,Ge(null));let r=!0;return de(t).then(t=>{if(!r)return;Ge(t.project.name);let i=new Map;for(let r of[...t.tasks,...n])r.id!==e&&i.set(r.id,{id:r.id,title:r.title});Ue([...i.values()])}).catch(()=>{r&&Ue(n)}),()=>{r=!1}},[$t,y?.task.projectId,e]);let K=(0,z.useCallback)(async(t,n=`command`)=>{let r=U.current;if(r){G(n,!0),I(null),t.type===`close`&&t.resolution===`done`&&Be(null);try{await E(await ye(e,t,r.task.version),{revalidate:!1})}catch{I(m.actionFailed),t.type===`close`&&t.resolution===`done`&&Be(m.actionFailed)}finally{G(n,!1)}}},[m.actionFailed,E,G,e]),nn=(0,z.useCallback)(async(t,n)=>{let r=U.current;if(!r)return!1;n&&G(n,!0),I(null);try{let n=ge(e,t,r.task.version);return await E(n,{optimisticData:Ct(r,t),populateCache:!0,revalidate:!1,rollbackOnError:!0}),!0}catch{return I(m.actionFailed),!1}finally{n&&G(n,!1)}},[m.actionFailed,E,G,e]),rn=()=>{y&&(kt.current={value:y.task.title,version:y.task.version},W(null),tt(y.task.title),B(!0))},an=()=>{yt.current=!0,tt(U.current?.task.title??``),kt.current=null,W(null),B(!1),queueMicrotask(()=>{yt.current=!1})},on=async(e=!1)=>{if(yt.current){yt.current=!1;return}let t=U.current;if(!t||L.has(`title`))return;let n=et.trim();if(!n){an();return}let r=kt.current;if(!e&&St(r,t.task.version,t.task.title,n)){W(`title`);return}if(n===t.task.title){an();return}await nn({title:n},`title`)&&(kt.current=null,W(null),B(!1))},sn=async()=>{if(!y)return;if(wt.current){wt.current=!1;return}let e=at.trim(),t=Bt.current;if(St(t,y.task.version,y.task.body??``,e)){W(`description`);return}if(at===Ot.current||e===(y.task.body??``).trim()){H(!1);return}await nn({body:fe(y.task.body??``,e)||null})&&(W(null),H(!1))},cn=(0,z.useCallback)(async e=>{let t=U.current;!t||e===t.task.phase||await K({type:`move`,phase:e},`phase`)},[K]),ln=(0,z.useCallback)(e=>{nn({priority:e},`priority`)},[nn]),un=(0,z.useCallback)(e=>{nn({dueAt:Dt(e)},`dueAt`)},[nn]),dn=(0,z.useCallback)(e=>{ct(e);try{window.localStorage.setItem(Ft,String(e))}catch{}},[]),fn=(0,z.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`&&e.key!==`Home`)return;e.preventDefault();let t=vt.current?.clientWidth??0,n=e.key===`Home`?It:st+(e.key===`ArrowLeft`?2:-2);dn(Lt(n,t))},[st,dn]),pn=(0,z.useCallback)(e=>{if(!window.matchMedia(`(min-width: 1024px)`).matches)return;let t=vt.current;if(!t)return;e.preventDefault();let n=e.currentTarget,r=e.pointerId;n.setPointerCapture(r),pt(!0);let i=st,a=0,o=()=>{a=0,t.style.setProperty(`--task-chat-panel-width`,`${i}%`)},s=e=>{let n=t.getBoundingClientRect();i=Lt((n.right-e.clientX)/n.width*100,n.width),a===0&&(a=window.requestAnimationFrame(o))},c=()=>{a!==0&&(window.cancelAnimationFrame(a),o());try{n.releasePointerCapture(r)}catch{}pt(!1),dn(i),window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c)};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c),window.addEventListener(`pointercancel`,c)},[st,dn]),mn=(0,z.useCallback)(async t=>{let n=U.current;if(n){G(`dependencies`,!0),I(null);try{await E(await be(e,t,n.task.version),{revalidate:!1})}catch{I(m.dependencyUpdateFailed)}finally{G(`dependencies`,!1)}}},[m.dependencyUpdateFailed,E,G,e]),hn=(0,z.useCallback)(async t=>{let n=U.current;if(!(!n||!t||t===n.conversation.currentExecutorAgentId)){G(`delegateAgentId`,!0),I(null);try{await E(await Se(e,t,n.task.version),{revalidate:!1})}catch{I(m.actionFailed)}finally{G(`delegateAgentId`,!1)}}},[m.actionFailed,E,G,e]),gn=(0,z.useCallback)(async()=>{G(`delete`,!0),I(null);try{await xe(e),r?r():d(en,{replace:!0})}catch(e){I(e instanceof Error?e.message:m.actionFailed)}finally{G(`delete`,!1)}},[m.actionFailed,d,r,en,G,e]),_n=(0,z.useCallback)(async(t,n)=>{let r=U.current;if(!r)return!1;G(`acceptance`,!0),Be(null),I(null);try{return await E(await he(e,t,n,r.task.version,r.task.latestContractVersion),{revalidate:!1}),!0}catch{return Be(m.actionFailed),I(m.actionFailed),E().catch(()=>void 0),!1}finally{G(`acceptance`,!1)}},[m.actionFailed,E,G,e]);if((0,z.useLayoutEffect)(()=>{if(t!==`modal`)return h({startExtra:(0,V.jsx)(o,{to:en,className:`flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover`,"aria-label":m.backToWork,children:(0,V.jsx)(w,{className:`size-4`})}),main:y?(0,V.jsx)(`p`,{className:`truncate text-sm font-semibold text-fg`,children:We?`${We} / ${m.taskLabel}`:m.taskLabel}):null,end:null}),g},[g,m.backToWork,m.taskLabel,y,t,We,en,h]),b&&!y)return(0,V.jsx)(`div`,{className:t===`modal`?`p-5 text-sm text-danger`:`mx-auto max-w-3xl p-6 text-sm text-danger`,children:m.taskNotFound});if(!y)return(0,V.jsx)(`div`,{className:t===`modal`?`p-5`:`mx-auto max-w-4xl p-4 sm:p-6`,children:(0,V.jsx)(Tt,{})});let q=y.waits[0],J=y.runs.find(e=>!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)),Y=De(y),vn=Y.length>0&&Y.every(e=>e.status===`passed`),yn=y.waits.find(e=>e.kind===`paused`),bn=Ee(y),xn=ke(y),Sn=m.detailStatuses[xn],Cn=pe(y.task.body?.trim()||y.task.contract?.objective.trim()||``),wn=y.allowedCommands.includes(`mark_ready`),Tn=y.allowedCommands.includes(`start`),En=y.allowedCommands.includes(`add_wait`),Dn=!q&&!J&&vn&&y.task.phase===`review`&&y.allowedCommands.includes(`close`),On=y.allowedCommands.includes(`reopen`),X=y.conversation.activeConversationId,Z=y.conversation.currentExecutorAgentId??y.task.delegateAgentId??y.task.ownerId,kn=Je.find(e=>e.id===Z),An=!!(X&&_[X]?.open),jn=y.context.filter(e=>e.role!==`deliverable`),Mn=k?.automations.filter(t=>t.action.kind===`task_command`&&t.action.taskId===e)??[],Q=Mn.filter(e=>e.trigger.kind===`schedule`&&e.action.kind===`task_command`&&e.action.command.type===`start`),Nn=Q.filter(e=>e.enabled&&e.state.nextRunAtMs!==void 0).map(e=>e.state.nextRunAtMs).sort((e,t)=>e-t)[0],Pn=e=>{_e(t=>({automations:[e,...(t?.automations??[]).filter(t=>t.id!==e.id)]}),{revalidate:!1})},Fn=e=>{Xt(e),Jt(!0)},In=()=>{k&&(Q.length===1?Fn(Q[0]):Q.length>1?(Zt.current&&(Zt.current.open=!0),c(e=>Qe(e,`schedule`,!0),{preventScrollReset:!0}),Zt.current?.scrollIntoView({block:`start`,behavior:`smooth`}),Zt.current?.focus({preventScroll:!0})):(Xt(null),Jt(!0)))},$=y.sessions.filter((e,t,n)=>n.findIndex(t=>t.conversationId===e.conversationId)===t),Ln=y.task.contract?.expectedOutputs??[],Rn=y.task.contract?.constraints??[],zn=y.task.contract?.approvalRequired??[],Bn=y.task.contract?.assumptions??[],Vn=y.task.contract?.risks??[],Hn=Rn.length>0||zn.length>0||Bn.length>0||Vn.length>0,Un=(...e)=>!!Ut?.changedFields.some(t=>e.includes(t)),Wn=y.allowedCommands.includes(`move`),Gn=L.has(`command`),Kn=L.has(`delete`),qn=J!==void 0,Jn=()=>{let e=gt.current;e&&(e.open=!0,c(e=>Qe(e,`acceptance`,!0),{preventScrollReset:!0}),e.scrollIntoView({block:`start`,behavior:`smooth`}),e.focus({preventScroll:!0}))},Yn=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[wn&&!Tn&&!q&&y.task.phase!==`review`?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`mark_ready`}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.scheduleTask]}):null,yn&&y.allowedCommands.includes(`resolve_wait`)?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`resolve_wait`,waitId:yn.id}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.resumeTask]}):null,!q&&Tn&&y.task.phase!==`review`&&Z?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`start`,executor:{kind:`agent`,agentId:Z}}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.runTask]}):null,On?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`ghost`,disabled:Gn,onClick:()=>void K({type:`reopen`,phase:`ready`}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.reopenTask]}):null,y.task.phase!==`review`&&!yn&&En?(0,V.jsxs)(P,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:Gn,onClick:()=>void K({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:[(0,V.jsx)(se,{className:`size-4`}),m.pauseTask]}):null,y.task.phase===`closed`?(0,V.jsx)(P,{variant:`primary`,className:`min-h-9 px-3 py-1.5 text-xs`,onClick:()=>{_t.current?.scrollIntoView({block:`start`,behavior:`smooth`}),_t.current?.focus({preventScroll:!0})},children:f===`zh`?`查看结果`:`View results`}):null,!q&&!J&&y.task.phase!==`closed`&&y.task.phase!==`review`?(0,V.jsxs)(P,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:!k,onClick:In,children:[(0,V.jsx)(T,{className:`size-4`}),Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:f===`zh`?`设置执行时间`:`Set execution time`]}):null,y.task.phase===`review`?(0,V.jsx)(P,{variant:`primary`,className:`min-h-9 px-3 py-1.5 text-xs`,onClick:Jn,children:f===`zh`?`去验收`:`Review results`}):null,(0,V.jsxs)(Pe,{children:[(0,V.jsx)(Fe,{asChild:!0,children:(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:`size-9 p-0`,disabled:Gn||Kn,"aria-label":m.moreActions,children:(0,V.jsx)(A,{className:`size-4`,"aria-hidden":!0})})}),(0,V.jsx)(Ie,{children:(0,V.jsxs)(Le,{align:`end`,sideOffset:6,className:`z-[100] min-w-44 rounded-lg border border-edge bg-surface-overlay p-1 shadow-popover`,children:[y.task.phase===`review`&&!yn&&En?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:m.pauseTask}):null,y.task.phase===`review`&&!q&&!J?(0,V.jsx)(F,{disabled:!k,className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover data-[disabled]:opacity-50`,onSelect:In,children:Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:f===`zh`?`设置执行时间`:`Set execution time`}):null,y.task.phase===`review`&&!q&&Tn&&Z?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`start`,executor:{kind:`agent`,agentId:Z}}),children:m.runTask}):null,wn&&(Tn||q||y.task.phase===`review`)?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`mark_ready`}),children:m.scheduleTask}):null,J?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{G(`command`,!0),I(null),E(ve(e,J.id,J.version),{revalidate:!1}).catch(()=>I(m.actionFailed)).finally(()=>G(`command`,!1))},children:m.cancelActiveRun}):null,J?(0,V.jsx)(Re,{className:`my-1 h-px bg-edge`}):null,y.task.phase===`closed`?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>void K({type:`close`,resolution:`cancelled`}),children:m.cancelTask}),(0,V.jsx)(Re,{className:`my-1 h-px bg-edge`})]}),(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{if(qn){I(m.deleteActiveTaskBlocked);return}Kt(!0)},children:m.deleteTask})]})})]})]});return(0,V.jsxs)(`div`,{ref:vt,className:`flex h-full min-h-0 flex-col overflow-hidden ${lt?`lg:cursor-col-resize lg:select-none`:``}`,style:{"--task-chat-panel-width":`${st}%`},children:[(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto lg:flex-row lg:overflow-hidden`,children:[(0,V.jsxs)(`div`,{className:`task-detail-scroll flex min-w-0 shrink-0 flex-col lg:min-h-0 lg:flex-1 lg:shrink lg:overflow-y-auto lg:overscroll-contain`,children:[(0,V.jsxs)(`header`,{className:N(`shrink-0 border-b border-edge-subtle bg-surface-panel px-5 py-4 sm:px-6`,Un(`title`)&&`task-detail-live-update`),children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-3`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[We?(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,V.jsx)(te,{className:`size-3.5`,"aria-hidden":!0}),We]}):null,We?(0,V.jsx)(`span`,{"aria-hidden":`true`,children:`/`}):null,(0,V.jsx)(`span`,{children:m.taskLabel}),Ut?(0,V.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,role:`status`,children:Ut.source===`agent`?f===`zh`?`Agent 刚刚更新`:`Updated by Agent`:f===`zh`?`执行结果已同步`:`Execution result synced`}):null]}),Ze?(0,V.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,"aria-label":f===`zh`?`任务标题`:`Task title`,rows:2,value:et,onFocus:e=>{kt.current?.value===et&&(e.currentTarget.setSelectionRange(0,0),e.currentTarget.scrollTop=0)},onChange:e=>tt(e.target.value),onBlur:()=>void on(),onKeyDown:e=>{e.nativeEvent.isComposing||(e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),an()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),e.currentTarget.blur()))},className:`mt-2 block max-h-56 min-h-14 w-full max-w-3xl resize-none overflow-y-auto bg-transparent p-0 text-xl font-semibold leading-7 text-fg outline-none [field-sizing:content]`}):(0,V.jsx)(R,{content:y.task.title,contentKey:`${e}:title`,language:f,previewHeight:56,className:`mt-2 max-w-3xl`,children:(0,V.jsx)(`h1`,{className:`break-words text-xl font-semibold leading-7 text-fg`,children:(0,V.jsx)(`button`,{type:`button`,className:`max-w-full whitespace-pre-wrap break-words [overflow-wrap:anywhere] rounded-sm text-left outline-none hover:bg-surface-hover/60 focus-visible:ring-2 focus-visible:ring-accent/40`,title:y.task.title,onClick:rn,children:y.task.title})})}),Ht===`title`?(0,V.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`Agent 在你编辑期间更新了标题。`:`The Agent updated the title while you were editing.`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:an,children:f===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,disabled:L.has(`title`),onClick:()=>void on(!0),children:f===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,V.jsx)(`span`,{className:N(`shrink-0 rounded-full px-2.5 py-1 text-xs font-medium`,Oe(xn)),children:Sn})]}),(0,V.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,V.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2`,children:[Z?(0,V.jsx)(Me,{agentId:Z,avatar:kn?.avatar,size:20,className:`shrink-0`}):null,(0,V.jsxs)(`span`,{className:`min-w-0 break-words [overflow-wrap:anywhere]`,children:[m.executorLabel,` · `,kn?.name??Z??m.unassigned]})]}),(0,V.jsx)(`span`,{className:`text-fg-subtle`,children:m.updatedAt.replace(`{{date}}`,qe(y.task.updatedAt,f))})]})]}),(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 flex shrink-0 flex-wrap items-center justify-between gap-2 border-b border-edge-subtle bg-surface-panel px-4 py-2 sm:px-5`,"aria-label":f===`zh`?`任务操作`:`Task actions`,children:[(0,V.jsxs)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-fg-muted`,children:[y.task.title,` · `,Sn]}),Yn,Ae?(0,V.jsx)(`p`,{role:`alert`,className:`basis-full text-sm text-danger`,children:Ae}):null]}),(0,V.jsxs)(`section`,{className:`min-w-0 space-y-4 p-4 sm:p-5`,children:[y.task.phase===`review`?null:(0,V.jsx)(ht,{detail:y,language:f,onUpdated:e=>{E(e,{revalidate:!1})}}),(0,V.jsxs)(`section`,{ref:_t,tabIndex:-1,"aria-labelledby":`task-results-heading`,className:`scroll-mt-24 space-y-4`,children:[(0,V.jsx)(it,{detail:y,language:f}),y.task.phase===`review`&&(y.waits.length>0||y.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`))?(0,V.jsx)(ht,{detail:y,language:f,onUpdated:e=>{E(e,{revalidate:!1})}}):null,(0,V.jsx)($e,{panelId:`acceptance`,defaultOpen:y.task.phase===`review`||!!bn,ref:gt,tabIndex:-1,"aria-label":m.successDefinition,className:`scroll-mt-24 overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel`,summaryClassName:`cursor-pointer p-4 text-sm font-medium text-fg`,title:(0,V.jsxs)(V.Fragment,{children:[f===`zh`?`验收`:`Acceptance`,` · `,Y.filter(e=>e.status===`passed`).length,`/`,Y.length]}),children:(0,V.jsx)(`div`,{className:`px-4 pb-4`,children:(0,V.jsx)(nt,{criteria:Y,language:f,closed:y.task.phase===`closed`,pending:L.has(`acceptance`),completionPending:Gn,canComplete:Dn,error:ze,blockedReason:q?f===`zh`?`请先处理待办事项`:`Resolve the pending request first`:J?f===`zh`?`请等待当前执行结束`:`Wait for the current run to finish`:vn?f===`zh`?`任务尚未进入可完成状态`:`The task is not ready for completion`:Y.length===0?f===`zh`?`请先定义验收标准`:`Define acceptance criteria first`:f===`zh`?`还有 ${Y.filter(e=>e.status!==`passed`).length} 项待验收`:`${Y.filter(e=>e.status!==`passed`).length} criteria need review`,onReview:_n,onComplete:()=>void K({type:`close`,resolution:`done`}),projectId:y.task.projectId,conversationId:X??void 0},`${e}:${y.task.latestContractVersion}`)})})]}),(0,V.jsx)($e,{panelId:`report`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`完整执行报告`:`Full execution report`,children:(0,V.jsx)(ut,{detail:y,language:f},bn?.runId??e)}),!k&&!le?(0,V.jsx)(ue,{className:`h-9 rounded-lg`}):null,le?(0,V.jsxs)(`div`,{role:`alert`,className:`flex flex-wrap items-center gap-2 text-sm text-danger`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`无法读取执行计划,请重试后再设置时间。`:`Could not load schedules. Retry before setting a time.`}),(0,V.jsx)(P,{variant:`ghost`,onClick:()=>void _e(),children:f===`zh`?`重试`:`Retry`})]}):null,Q.length>0?(0,V.jsx)($e,{panelId:`schedule`,ref:Zt,tabIndex:-1,className:`scroll-mt-24 rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm text-fg-muted`,title:(0,V.jsxs)(V.Fragment,{children:[f===`zh`?`执行时间`:`Execution schedule`,` · `,Q.length,Nn===void 0?``:` · ${f===`zh`?`下次执行:`:`Next run: `}${qe(Nn,f)}`]}),children:(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(ft,{schedules:Q,language:f,onEdit:Fn,onUpdated:Pn})})}):null,(0,V.jsx)($e,{panelId:`goal`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`任务目标与说明`:`Task goal and description`,children:(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel divide-y divide-edge-subtle`,children:[(0,V.jsxs)(`div`,{className:`border-b border-edge-subtle p-5`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:f===`zh`?`任务目标`:`Task goal`}),(0,V.jsx)(R,{content:y.task.contract?.objective||y.task.title,contentKey:`${e}:goal`,language:f,markdown:!1,previewHeight:72,className:`mt-3 text-sm leading-6 text-fg`}),(0,V.jsxs)(P,{variant:`ghost`,className:`mt-2 min-h-9 px-2 text-xs`,onClick:Jn,children:[m.successDefinition,` · `,Y.length]})]}),Ln.length>0?(0,V.jsxs)(`div`,{className:`p-5`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:m.expectedOutputs}),(0,V.jsx)(`div`,{className:`mt-2`,children:(0,V.jsx)(zt,{contentKey:`${e}:expectedOutputs`,items:Ln,empty:m.noDefinition})})]}):null,(0,V.jsxs)(`details`,{className:N(`p-5`,Un(`body`)&&`task-detail-live-update`),children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:m.taskDescription}),rt?(0,V.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,rows:6,value:at,onChange:e=>ot(e.target.value),onBlur:()=>void sn(),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),wt.current=!0,ot(pe(y.task.body??y.task.contract?.objective??``)),H(!1),queueMicrotask(()=>{wt.current=!1}))},className:`mt-3 w-full resize-y rounded-lg bg-surface-hover px-3 py-2 text-sm leading-6 text-fg outline-none ring-2 ring-accent/20 focus:ring-accent/50`}):(0,V.jsxs)(`div`,{className:`mt-2`,children:[Cn&&Cn!==y.task.title?(0,V.jsx)(R,{content:Cn,contentKey:`${e}:description`,language:f}):(0,V.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:m.noTaskDescription}),(0,V.jsx)(`button`,{type:`button`,className:`mt-2 rounded-md px-2 py-1 text-xs text-accent hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{let e=pe(y.task.body??y.task.contract?.objective??``);Ot.current=e,Bt.current={value:y.task.body??``,version:y.task.version},W(null),ot(e),H(!0)},children:f===`zh`?`编辑说明`:`Edit description`})]}),Ht===`description`?(0,V.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`Agent 在你编辑期间更新了描述。`:`The Agent updated the description while you were editing.`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{ot(pe(y.task.body??``)),W(null),H(!1)},children:f===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void nn({body:fe(y.task.body??``,at.trim())||null}).then(e=>{e&&(W(null),H(!1))}),children:f===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),Hn?(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`contract`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.taskDefinition}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:f===`zh`?`执行边界及补充背景`:`Execution boundaries and supporting context`}),Rn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.constraints}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:constraints`,items:Rn,empty:m.noDefinition})})]}):null,zn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.approvalRequired}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:approvalRequired`,items:zn,empty:m.noDefinition})})]}):null,Bn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.contextAssumptions}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:assumptions`,items:Bn,empty:m.noDefinition})})]}):null,Vn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.contextRisks}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:risks`,items:Vn,empty:m.noDefinition})})]}):null]}):null]})})}),(0,V.jsxs)($e,{panelId:`management`,"aria-label":f===`zh`?`任务管理`:`Task management`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`任务管理`:`Task management`,children:[(0,V.jsxs)(`aside`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`phase`,`resolution`,`priority`,`dueAt`,`delegateAgentId`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.taskProperties}),(0,V.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,V.jsx)(At,{value:y.task.phase,disabled:L.has(`phase`),canMove:Wn,canApprove:Dn,canReopen:On,language:f,label:m.taskPhase,onChange:cn}),(0,V.jsx)(jt,{value:y.task.priority,disabled:L.has(`priority`),label:m.priority,labels:m.priorityLabels,onChange:ln}),(0,V.jsx)(Mt,{value:Et(y.task.dueAt),disabled:L.has(`dueAt`),label:m.dueDate,onChange:un}),(0,V.jsx)(Nt,{value:y.conversation.currentExecutorAgentId??``,disabled:L.has(`delegateAgentId`),label:m.executorLabel,unassignedLabel:m.unassigned,agents:Je,onChange:hn})]})]}),(0,V.jsxs)(`details`,{className:N(`p-5`,Un(`dependencies`)&&`task-detail-live-update`),children:[(0,V.jsxs)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:[m.taskRelations,` · `,y.dependencies.length,` / `,y.dependents.length]}),(0,V.jsxs)(`div`,{className:`mt-4 space-y-4`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:m.dependencies}),(0,V.jsx)(Pt,{candidates:He,selected:y.dependencies,disabled:L.has(`dependencies`),labels:Qt,getTaskHref:tn,onChange:mn})]}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:m.dependents}),y.dependents.length>0?(0,V.jsx)(`div`,{className:`space-y-1.5`,children:y.dependents.map(t=>(0,V.jsx)(R,{content:t.title,contentKey:`${e}:dependent:${t.id}`,language:f,previewHeight:72,className:`rounded-lg bg-surface-hover p-2.5`,children:(0,V.jsx)(o,{to:tn(t.id),className:`block break-words [overflow-wrap:anywhere] text-sm text-fg-muted transition-colors hover:text-fg`,children:t.title})},t.id))}):(0,V.jsx)(`p`,{className:`text-sm text-fg-subtle`,children:m.noDependents})]})]})]})]}),y.task.phase===`closed`?null:(0,V.jsxs)(P,{variant:`ghost`,className:`my-3`,disabled:!k,onClick:In,children:[(0,V.jsx)(T,{className:`size-4`}),Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:m.scheduleRecurringTask]}),(0,V.jsxs)(`details`,{className:`mb-4 rounded-xl border border-edge-subtle bg-surface-panel p-5 shadow-surface`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:f===`zh`?`关联内容`:`Related work`}),$.length>0||y.runs.length>0||Mn.length>0||y.dependencies.length>0||y.dependents.length>0?(0,V.jsxs)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[$.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:f===`zh`?`对话 · ${$.length}`:`Conversations · ${$.length}`}),(0,V.jsx)(bt,{contentKey:`${e}:sessions`,language:f,className:`mt-2`,children:$.map(t=>(0,V.jsx)(`li`,{children:(0,V.jsx)(o,{className:`block break-words [overflow-wrap:anywhere] text-sm text-accent hover:underline`,to:t.conversationId===X?M(e):`/chat/${encodeURIComponent(t.conversationId)}`,children:t.conversationId===X?f===`zh`?`当前执行对话`:`Current execution chat`:t.role===`discussion`?f===`zh`?`关联讨论`:`Linked discussion`:f===`zh`?`历史执行对话`:`Earlier execution chat`})},t.id))})]}):null,Mn.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:f===`zh`?`自动化 · ${Mn.length}`:`Automations · ${Mn.length}`}),(0,V.jsx)(bt,{contentKey:`${e}:automations`,language:f,className:`mt-2`,children:Mn.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsx)(o,{className:`block break-words [overflow-wrap:anywhere] text-sm text-accent hover:underline`,to:`/automations?automation=${encodeURIComponent(e.id)}`,children:e.name})},e.id))})]}):null,y.dependencies.length>0||y.dependents.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:m.taskRelations}),(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg`,children:f===`zh`?`${y.dependencies.length} 个前置任务 · ${y.dependents.length} 个后续任务`:`${y.dependencies.length} prerequisites · ${y.dependents.length} dependents`})]}):null]}):(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:f===`zh`?`还没有关联内容`:`No related work yet`}),(0,V.jsx)(`div`,{className:`mt-4 border-t border-edge-subtle pt-3`,children:(0,V.jsx)(Xe,{resource:{kind:`task`,id:y.task.id,revision:String(y.task.version)},disabled:Ze||rt||L.size>0})})]}),jn.length>0?(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`context`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.contextUsed}),(0,V.jsx)(`ul`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:jn.map(e=>(0,V.jsxs)(`li`,{className:`min-w-0 rounded-lg bg-surface-hover p-2.5`,children:[(0,V.jsxs)(`span`,{className:`text-[11px] text-fg-subtle`,children:[m.contextRoleLabels[e.role],` · `,m.contextKindLabels[e.targetKind]]}),e.targetKind===`url`&&/^https?:\/\//.test(e.targetId)?(0,V.jsx)(`a`,{className:`mt-1 block break-all text-sm text-accent hover:underline`,href:e.targetId,target:`_blank`,rel:`noreferrer`,children:e.title??e.targetId}):(0,V.jsx)(`p`,{className:`mt-1 break-words text-sm text-fg`,children:e.title??e.targetId})]},e.id))})]}):null]}),(0,V.jsxs)(`details`,{className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:f===`zh`?`活动记录与留言`:`Activity and updates`}),(0,V.jsxs)(`div`,{className:`mt-3 space-y-4`,children:[(0,V.jsx)(xt,{taskId:e},e),(0,V.jsx)(dt,{changes:y.phaseChanges,language:f})]})]})]})]}),(0,V.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":f===`zh`?`调整任务信息和 Agent 对话的宽度`:`Resize task details and Agent chat`,"aria-valuemin":30,"aria-valuemax":60,"aria-valuenow":Math.round(st),tabIndex:0,onPointerDown:pn,onKeyDown:fn,onDoubleClick:()=>dn(It),className:`group hidden w-2 shrink-0 cursor-col-resize touch-none items-stretch justify-center bg-surface-panel outline-none transition-colors hover:bg-surface-hover focus-visible:bg-surface-hover lg:flex ${lt?`bg-surface-hover`:``}`,children:(0,V.jsx)(`div`,{className:`w-px bg-edge-strong/70 transition-colors group-hover:bg-accent group-focus-visible:bg-accent`})}),(0,V.jsxs)(`aside`,{className:`flex min-h-[34rem] min-w-0 shrink-0 flex-col border-t border-edge-subtle bg-surface-panel lg:min-h-0 lg:w-[var(--task-chat-panel-width)] lg:border-t-0`,children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge-subtle px-4 py-3`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-medium text-fg-muted`,children:f===`zh`?`执行对话`:`Execution chat`}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[$.length>1?(0,V.jsxs)(Pe,{children:[(0,V.jsx)(Fe,{asChild:!0,children:(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:`h-8 px-2 text-xs`,children:f===`zh`?`${$.length} 段对话`:`${$.length} conversations`})}),(0,V.jsx)(Ie,{children:(0,V.jsx)(Le,{align:`end`,sideOffset:6,className:`z-[100] min-w-52 rounded-lg border border-edge bg-surface-overlay p-1 shadow-popover`,children:$.map(t=>(0,V.jsx)(F,{asChild:!0,children:(0,V.jsx)(o,{className:`block rounded-md px-3 py-2 text-sm text-fg outline-none hover:bg-surface-hover focus:bg-surface-hover`,to:t.conversationId===X?M(e):`/chat/${encodeURIComponent(t.conversationId)}`,children:t.conversationId===X?f===`zh`?`当前执行对话`:`Current execution chat`:t.role===`discussion`?f===`zh`?`关联讨论`:`Linked discussion`:f===`zh`?`历史执行对话`:`Earlier execution chat`})},t.id))})})]}):null,X?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:N(`size-8 p-0`,An&&`bg-surface-hover text-fg`),"aria-label":f===`zh`?`项目文件`:`Project files`,"aria-pressed":An,onClick:()=>{we.getState().openFiles(X),v(X)},children:(0,V.jsx)(ne,{className:`size-4`,"aria-hidden":!0})}),(0,V.jsx)(P,{asChild:!0,variant:`ghost`,className:`size-8 p-0`,children:(0,V.jsx)(o,{to:M(e),"aria-label":f===`zh`?`全屏打开对话`:`Open chat full screen`,children:(0,V.jsx)(j,{className:`size-4`,"aria-hidden":!0})})})]}):null]})]}),X?(0,V.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,V.jsx)(S,{embedded:!0,conversationId:X,taskId:e})}):ee?(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 animate-pulse text-fg-subtle`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`正在创建任务会话`:`Creating task conversation`})]})}):O?(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 text-danger`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`任务会话创建失败`:`Could not create task conversation`}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:O instanceof Error?O.message:String(O)})]})}):(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 text-fg-subtle`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`等待任务会话`:`Waiting for a task conversation`}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:f===`zh`?`安排或开始任务后,Agent 的执行过程和持续对话会显示在这里。`:`Schedule or start the task to see the agent run and continue the conversation here.`})]})})]})]}),qt?(0,V.jsx)(mt,{automation:Yt??void 0,taskId:e,taskTitle:y.task.title,projectId:y.task.projectId,executorAgentId:Z,language:f,onClose:()=>Jt(!1),onCreated:Pn},`${e}:${Yt?.id??`new`}`):null,(0,V.jsx)(Ne,{open:Gt,title:m.deleteTaskTitle,description:m.deleteTaskDescription.replace(`{{title}}`,y.task.title),confirmLabel:m.confirmDeleteTask,cancelLabel:m.keepTask,destructive:!0,onConfirm:()=>{Kt(!1),gn()},onCancel:()=>Kt(!1)})]})}function Ht(){let e=(0,B.c)(2),{taskId:t}=i(),n=t===void 0?``:t,r;return e[0]===n?r=e[1]:(r=(0,V.jsx)(U,{taskId:n,presentation:`page`}),e[0]=n,e[1]=r),r}function W(e){let t=(0,B.c)(41),{taskId:n,backgroundPath:r,workspacePanelWidth:i,onClose:a}=e,o=i===void 0?0:i,s=u(Kt),c=Ae(Gt),l=o>0,d;t[0]!==a||t[1]!==c?(d=e=>{e||(c(null),a())},t[0]=a,t[1]=c,t[2]=d):d=t[2];let f=s===`zh`?`关闭任务详情`:`Close task details`,p;t[3]!==a||t[4]!==c?(p=()=>{c(null),a()},t[3]=a,t[4]=c,t[5]=p):p=t[5];let b;t[6]!==f||t[7]!==p?(b=(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"data-task-modal-backdrop":!0,className:`fixed inset-0 z-[80] bg-black/45`,"aria-label":f,onClick:p}),t[6]=f,t[7]=p,t[8]=b):b=t[8];let x=l?`true`:`false`,S=`${o/2}px`,C=`${o}px`,w;t[9]!==S||t[10]!==C?(w={"--task-detail-workspace-offset":S,"--task-detail-workspace-width":C},t[9]=S,t[10]=C,t[11]=w):w=t[11];let T=w,E=s===`zh`?`任务详情`:`Task details`,D;t[12]===E?D=t[13]:(D=(0,V.jsx)(v,{className:`font-medium text-fg`,children:E}),t[12]=E,t[13]=D);let ee=s===`zh`?`查看并操作任务详情`:`View and manage task details`,O;t[14]===ee?O=t[15]:(O=(0,V.jsx)(m,{className:`sr-only`,children:ee}),t[14]=ee,t[15]=O);let k=s===`zh`?`关闭任务详情`:`Close task details`,A;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,V.jsx)(le,{className:`size-4`,"aria-hidden":!0}),t[16]=A):A=t[16];let j;t[17]===k?j=t[18]:(j=(0,V.jsx)(`div`,{className:`flex shrink-0 items-center gap-1`,children:(0,V.jsx)(h,{className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":k,children:A})}),t[17]=k,t[18]=j);let te;t[19]!==D||t[20]!==O||t[21]!==j?(te=(0,V.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 bg-surface-panel px-5 py-3.5`,children:[D,O,j]}),t[19]=D,t[20]=O,t[21]=j,t[22]=te):te=t[22];let ne;t[23]!==a||t[24]!==c?(ne=()=>{c(null),a()},t[23]=a,t[24]=c,t[25]=ne):ne=t[25];let re;t[26]!==r||t[27]!==ne||t[28]!==n?(re=(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(0,V.jsx)(U,{taskId:n,presentation:`modal`,backgroundPath:r,onDeleted:ne})}),t[26]=r,t[27]=ne,t[28]=n,t[29]=re):re=t[29];let M;t[30]!==T||t[31]!==te||t[32]!==re||t[33]!==x?(M=(0,V.jsxs)(_,{className:`xopc-dialog-content task-detail-modal-content fixed top-1/2 z-[90] flex h-[min(54rem,calc(100dvh-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-overlay focus:outline-none`,"data-workspace-panel-open":x,style:T,onEscapeKeyDown:Wt,onInteractOutside:Ut,children:[te,re]}),t[30]=T,t[31]=te,t[32]=re,t[33]=x,t[34]=M):M=t[34];let ie;t[35]!==M||t[36]!==b?(ie=(0,V.jsxs)(g,{children:[b,M]}),t[35]=M,t[36]=b,t[37]=ie):ie=t[37];let ae;return t[38]!==d||t[39]!==ie?(ae=(0,V.jsx)(y,{modal:!1,open:!0,onOpenChange:d,children:ie}),t[38]=d,t[39]=ie,t[40]=ae):ae=t[40],ae}function Ut(e){let t=e.detail.originalEvent.target;t instanceof Element&&t.closest(`#app-workspace-panel, [data-task-modal-backdrop]`)&&e.preventDefault()}function Wt(e){let t=e.target;t instanceof HTMLElement&&t.closest(`[data-task-inline-editor]`)&&e.preventDefault()}function Gt(e){return e.setPath}function Kt(e){return e.language}function qt(e){return(0,V.jsx)(D,{value:e.id,children:e.name||e.id},e.id)}function Jt(e){return e.id}export{W as TaskDetailModal,Ht as TaskDetailPage};
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260910-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260910-1" />
13
13
  <title>XOPC — Keep what matters moving.</title>
14
- <script type="module" crossorigin src="/assets/index-ClPeYgQk.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-BmUSsdwn.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
@@ -190,13 +190,13 @@
190
190
  <link rel="modulepreload" crossorigin href="/assets/skill-api-utils-C7V4JVXM.js">
191
191
  <link rel="modulepreload" crossorigin href="/assets/skill-list-api-B8fegRLZ.js">
192
192
  <link rel="modulepreload" crossorigin href="/assets/command-palette-api-BRxfFgGA.js">
193
- <link rel="modulepreload" crossorigin href="/assets/model-selector-DJSVr3LM.js">
193
+ <link rel="modulepreload" crossorigin href="/assets/model-selector-YsCHu1Gn.js">
194
194
  <link rel="modulepreload" crossorigin href="/assets/dev-view-store-38EmUIEC.js">
195
195
  <link rel="modulepreload" crossorigin href="/assets/extension-iframe-host-BzjrVAUR.js">
196
196
  <link rel="modulepreload" crossorigin href="/assets/calendar-clock-D-quYVPe.js">
197
197
  <link rel="modulepreload" crossorigin href="/assets/calendar-days-hw_Y-g-s.js">
198
198
  <link rel="modulepreload" crossorigin href="/assets/date-picker-BvEnSGZK.js">
199
- <link rel="modulepreload" crossorigin href="/assets/automation-task-card-w6cKxfaP.js">
199
+ <link rel="modulepreload" crossorigin href="/assets/automation-task-card-DIjI_Y1X.js">
200
200
  <link rel="modulepreload" crossorigin href="/assets/api-Dv6Cn-Rs.js">
201
201
  <link rel="modulepreload" crossorigin href="/assets/runtime-health-D2TDFLLq.js">
202
202
  <link rel="modulepreload" crossorigin href="/assets/terminal-panel-store-BGdKE9hU.js">
@@ -206,7 +206,7 @@
206
206
  <link rel="modulepreload" crossorigin href="/assets/oauth-authorization-window-o6URRos4.js">
207
207
  <link rel="modulepreload" crossorigin href="/assets/page-context-draft-DhRNxc0v.js">
208
208
  <link rel="modulepreload" crossorigin href="/assets/side-chat-shortcut-BIw-1TTD.js">
209
- <link rel="modulepreload" crossorigin href="/assets/chat-page--dKUIg5W.js">
209
+ <link rel="modulepreload" crossorigin href="/assets/chat-page-e-xCsrdS.js">
210
210
  <link rel="modulepreload" crossorigin href="/assets/arrow-right-DSSvoX71.js">
211
211
  <link rel="modulepreload" crossorigin href="/assets/arrow-up-right-T72JbQ1Q.js">
212
212
  <link rel="modulepreload" crossorigin href="/assets/browser-notification-delivery-DmE2FgGc.js">
@@ -279,7 +279,7 @@
279
279
  <link rel="modulepreload" crossorigin href="/assets/preference-select-fields-D2-QfMN5.js">
280
280
  <link rel="modulepreload" crossorigin href="/assets/navigation-D62kPsA9.js">
281
281
  <link rel="modulepreload" crossorigin href="/assets/page-tabs-oeTY7z3_.js">
282
- <link rel="modulepreload" crossorigin href="/assets/route-preload-DS4fVFbc.js">
282
+ <link rel="modulepreload" crossorigin href="/assets/route-preload-C-VRKwB1.js">
283
283
  <link rel="modulepreload" crossorigin href="/assets/use-personal-profile-BB10h9ED.js">
284
284
  <link rel="modulepreload" crossorigin href="/assets/project-understanding-CrSkrJnM.js">
285
285
  <link rel="modulepreload" crossorigin href="/assets/refresh-button-DiWdGAaX.js">
@@ -287,7 +287,7 @@
287
287
  <link rel="modulepreload" crossorigin href="/assets/use-workspace-tree-sF5DcONt.js">
288
288
  <link rel="modulepreload" crossorigin href="/assets/settings-mode-store-Bk_hzwPK.js">
289
289
  <link rel="modulepreload" crossorigin href="/assets/global-defaults-api-asOZQeM8.js">
290
- <link rel="modulepreload" crossorigin href="/assets/product-preview-modal-DgwrrpqJ.js">
290
+ <link rel="modulepreload" crossorigin href="/assets/product-preview-modal-Ym6bomTW.js">
291
291
  <link rel="modulepreload" crossorigin href="/assets/settings-loading-skeleton-BTqvr_Fw.js">
292
292
  <link rel="modulepreload" crossorigin href="/assets/segmented-styles-Cqb91xsn.js">
293
293
  <link rel="modulepreload" crossorigin href="/assets/settings-advanced-section-BmrbHgQa.js">
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.428";
2
+ var version = "0.0.431";
3
3
  //#endregion
4
4
  export { version };
@@ -13,6 +13,7 @@ type VerificationOptions = {
13
13
  required?: boolean;
14
14
  toolNames?: string[];
15
15
  workspace?: string;
16
+ trackWorkspace?: boolean;
16
17
  };
17
18
  /** One run owns its evidence; transcript tool results are the durable record. */
18
19
  export declare class RunVerification {
@@ -50,7 +50,7 @@ var RunVerification = class RunVerification {
50
50
  this.options = options;
51
51
  }
52
52
  static async open(workspace, options = {}) {
53
- const run = new RunVerification(() => readWorkspaceRevision(workspace), {
53
+ const run = new RunVerification(options.trackWorkspace === false && options.required === false ? async () => void 0 : () => readWorkspaceRevision(workspace), {
54
54
  ...options,
55
55
  workspace
56
56
  });
@@ -9,7 +9,7 @@ import { getClarification, getClarificationResumeInput, isClarificationSuspended
9
9
  import "../../storage/sqlite/index.js";
10
10
  import { ProviderUsageScopeError, init_model_usage } from "../../providers/model-usage.js";
11
11
  import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
12
- import { setTraceIdentity, traceOperation, traceRun, traceTools } from "../../observability/runtime.js";
12
+ import { recordTraceLatency, setTraceIdentity, traceOperation, traceRun, traceTools } from "../../observability/runtime.js";
13
13
  import { continuesAfterTool, trackAiUsageStream } from "../../usage/recorder.js";
14
14
  import { cloudCreditBudgetStopMessage, isCloudCreditBudgetExhausted, reportCloudCreditError, withCloudCreditBudget } from "../../providers/xopc-cloud-credit-budget.js";
15
15
  import { originalReadAuthorizationNotice, projectForgottenHistoryMessages, projectSuppressedMemoryBlocks } from "../../memory-learning/forgotten-history.js";
@@ -645,6 +645,7 @@ async function runXopcEmbeddedTurnInner(params) {
645
645
  latencyReasoning = options?.reasoning;
646
646
  if (firstModelRequestAt === void 0) {
647
647
  firstModelRequestAt = currentModelRequestAt;
648
+ recordTraceLatency({ embeddedPreparationMs: firstModelRequestAt - preparationStartedAt });
648
649
  log.info({
649
650
  conversationId,
650
651
  runId,
@@ -674,7 +675,8 @@ async function runXopcEmbeddedTurnInner(params) {
674
675
  session.agent.streamFunction = loggingStreamFn;
675
676
  const verification = await RunVerification.open(workspaceDir, {
676
677
  required: params.verifyChanges === true,
677
- toolNames: tools.map((tool) => tool.name)
678
+ toolNames: tools.map((tool) => tool.name),
679
+ trackWorkspace: executionToolPolicy.surface !== "personal_main"
678
680
  });
679
681
  const checkpoints = runner.piSm.getBranch?.() ?? [];
680
682
  const recoveryTurn = params.resumeLastUserMessage === true || Boolean(params.recoveryMessage);
@@ -898,14 +900,20 @@ async function runXopcEmbeddedTurnInner(params) {
898
900
  unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
899
901
  if (!firstModelTextSeen && firstModelRequestAt !== void 0 && currentModelRequestAt !== void 0 && event.type === "message_update" && event.assistantMessageEvent?.type === "text_delta" && event.assistantMessageEvent.delta.trim()) {
900
902
  firstModelTextSeen = true;
903
+ const textSeenAt = performance.now();
904
+ recordTraceLatency({
905
+ modelFirstTextMs: textSeenAt - currentModelRequestAt,
906
+ firstRequestToTextMs: textSeenAt - firstModelRequestAt,
907
+ modelRequestNumber
908
+ });
901
909
  log.info({
902
910
  conversationId,
903
911
  runId,
904
912
  modelRef: latencyModelRef,
905
913
  thinking: latencyReasoning ?? "off",
906
914
  phase: "first_model_text",
907
- modelFirstTextMs: performance.now() - currentModelRequestAt,
908
- firstRequestToTextMs: performance.now() - firstModelRequestAt,
915
+ modelFirstTextMs: textSeenAt - currentModelRequestAt,
916
+ firstRequestToTextMs: textSeenAt - firstModelRequestAt,
909
917
  modelRequestNumber
910
918
  }, "Embedded first response text ready");
911
919
  }
@@ -119,15 +119,18 @@ async function runDirectAgentTurn(deps, input) {
119
119
  const isConnectionResume = Boolean(getConnectionResumeInput(input.conversationId, turnId));
120
120
  const isClarificationResume = Boolean(getClarificationResumeInput(input.conversationId, turnId));
121
121
  const isResume = Boolean(phoneResumeForRun(input.conversationId, turnId)) || isConnectionResume || isClarificationResume || Boolean(getTaskContinuation(input.conversationId, turnId)) || Boolean(getMcpSetupResumeInput(input.conversationId, turnId));
122
- const userContext = await deps.agentManager.prepareUserTurnContext(input.userMessage, input.conversationId, turnId);
123
- const sourceContexts = input.sourceContexts ?? [];
124
- const sourceEnrichedMessage = injectSourceContextsIntoUserMessage(input.userMessage, sourceContexts);
125
- const taskContext = [buildTaskExecutionDirective(input.conversationId), buildDelegatedTaskDirective(input.conversationId)].filter(Boolean).join("\n");
126
122
  const modelRef = deps.modelManager.getModelForSession(input.conversationId);
127
- const llmTurn = await hydrateUserTurnForLlm({
123
+ const [contextResult, mediaResult] = await Promise.allSettled([deps.agentManager.prepareUserTurnContext(input.userMessage, input.conversationId, turnId), hydrateUserTurnForLlm({
128
124
  message: input.userMessage,
129
125
  modelRef
130
- });
126
+ })]);
127
+ if (contextResult.status === "rejected") throw contextResult.reason;
128
+ if (mediaResult.status === "rejected") throw mediaResult.reason;
129
+ const userContext = contextResult.value;
130
+ const llmTurn = mediaResult.value;
131
+ const sourceContexts = input.sourceContexts ?? [];
132
+ const sourceEnrichedMessage = injectSourceContextsIntoUserMessage(input.userMessage, sourceContexts);
133
+ const taskContext = [buildTaskExecutionDirective(input.conversationId), buildDelegatedTaskDirective(input.conversationId)].filter(Boolean).join("\n");
131
134
  const contextImages = sourceContexts.flatMap((context) => context.images ?? []);
132
135
  const sourceImages = resolveImageHandlingStrategy(modelRef) === "native" ? [...input.sourceImages ?? [], ...contextImages] : [];
133
136
  const llmImages = [...llmTurn.images, ...sourceImages];
@@ -31,7 +31,7 @@ async function checkDatabaseSchema(ctx) {
31
31
  id: "database-schema",
32
32
  label: "Database schema",
33
33
  status: "pass",
34
- message: `SQLite schema v${readSchemaVersion(getSqliteDatabase())} (current release v260).`,
34
+ message: `SQLite schema v${readSchemaVersion(getSqliteDatabase())} (current release v261).`,
35
35
  hints: []
36
36
  };
37
37
  }
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
3
2
  import { init_constants } from "../providers/constants.js";
3
+ import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
4
  import { z } from "zod";
5
5
  //#region src/computer/model-policy.ts
6
6
  /** OpenAI-compatible language APIs support function tools unless explicitly disabled. */
@@ -376,6 +376,7 @@ export declare const CustomModelSchema: z.ZodObject<{
376
376
  profile: z.ZodEnum<{
377
377
  "autoglm-phone-v1": "autoglm-phone-v1";
378
378
  "structured-phone-v1": "structured-phone-v1";
379
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
379
380
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
380
381
  "gui-owl-phone-v1": "gui-owl-phone-v1";
381
382
  }>;
@@ -466,6 +467,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
466
467
  profile: z.ZodEnum<{
467
468
  "autoglm-phone-v1": "autoglm-phone-v1";
468
469
  "structured-phone-v1": "structured-phone-v1";
470
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
469
471
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
470
472
  "gui-owl-phone-v1": "gui-owl-phone-v1";
471
473
  }>;
@@ -560,6 +562,7 @@ export declare const ProviderConfigSchema: z.ZodObject<{
560
562
  profile: z.ZodEnum<{
561
563
  "autoglm-phone-v1": "autoglm-phone-v1";
562
564
  "structured-phone-v1": "structured-phone-v1";
565
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
563
566
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
564
567
  "gui-owl-phone-v1": "gui-owl-phone-v1";
565
568
  }>;
@@ -650,6 +653,7 @@ export declare const ProviderConfigSchema: z.ZodObject<{
650
653
  profile: z.ZodEnum<{
651
654
  "autoglm-phone-v1": "autoglm-phone-v1";
652
655
  "structured-phone-v1": "structured-phone-v1";
656
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
653
657
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
654
658
  "gui-owl-phone-v1": "gui-owl-phone-v1";
655
659
  }>;
@@ -859,6 +863,7 @@ export declare const ModelsJsonSchema: z.ZodObject<{
859
863
  profile: z.ZodEnum<{
860
864
  "autoglm-phone-v1": "autoglm-phone-v1";
861
865
  "structured-phone-v1": "structured-phone-v1";
866
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
862
867
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
863
868
  "gui-owl-phone-v1": "gui-owl-phone-v1";
864
869
  }>;
@@ -949,6 +954,7 @@ export declare const ModelsJsonSchema: z.ZodObject<{
949
954
  profile: z.ZodEnum<{
950
955
  "autoglm-phone-v1": "autoglm-phone-v1";
951
956
  "structured-phone-v1": "structured-phone-v1";
957
+ "structured-tools-phone-v1": "structured-tools-phone-v1";
952
958
  "doubao-seed-phone-v1": "doubao-seed-phone-v1";
953
959
  "gui-owl-phone-v1": "gui-owl-phone-v1";
954
960
  }>;
@@ -2,8 +2,9 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
3
3
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
4
4
  import { PhoneModelMetadataSchema, init_contracts } from "../phone/contracts.js";
5
+ import { init_model_policy, phoneModelProfile } from "../phone/model-policy.js";
5
6
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
6
- import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
7
+ import { init_model_policy as init_model_policy$1, isComputerModel } from "../computer/model-policy.js";
7
8
  import { assertCurrentModelProvider, init_provider_policy } from "../providers/provider-policy.js";
8
9
  import { existsSync, readFileSync } from "fs";
9
10
  import { z } from "zod";
@@ -125,9 +126,12 @@ function validateModelsConfig(config) {
125
126
  });
126
127
  if (providerConfig.models) for (let i = 0; i < providerConfig.models.length; i++) {
127
128
  const model = providerConfig.models[i];
128
- if (model.phoneUse && (!model.input?.includes("image") || (model.api ?? providerConfig.api) !== "openai-completions")) errors.push({
129
+ if (model.phoneUse && !phoneModelProfile({
130
+ ...model,
131
+ api: model.api ?? providerConfig.api
132
+ })) errors.push({
129
133
  path: `providers.${providerName}.models[${i}].phoneUse`,
130
- message: "Phone Use requires image input and OpenAI Chat Completions",
134
+ message: "Phone Use requires image input and an API matching its protocol",
131
135
  severity: "error"
132
136
  });
133
137
  if (model.computerUse && !isComputerModel({
@@ -243,11 +247,12 @@ function modelsJsonExists(path = resolveModelsJsonPath()) {
243
247
  }
244
248
  var OpenRouterRoutingSchema, VercelGatewayRoutingSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenAICompatSchema, ImageGenerationResolutionSchema, ImageGenerationQualitySchema, ImageGenerationOutputFormatSchema, ImageGenerationBackgroundSchema, ImageGeometrySchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, CustomModelSchema, ModelOverrideSchema, ProviderConfigSchema, ModelsJsonSchema, PROVIDER_ID_REGEX, RESERVED_PROVIDER_IDS;
245
249
  var init_models_json = __esmMin((() => {
250
+ init_model_policy();
246
251
  init_contracts();
247
252
  init_src();
248
253
  init_write_file_atomic();
249
254
  init_paths();
250
- init_model_policy();
255
+ init_model_policy$1();
251
256
  init_provider_policy();
252
257
  OpenRouterRoutingSchema = z.object({
253
258
  only: z.array(z.string()).optional(),
@@ -3,8 +3,8 @@ import { init_agent_config } from "../agent-config/index.js";
3
3
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
4
  import { validatePhoneModelChange } from "../phone/model-adapter.js";
5
5
  import { AgentCatalogService } from "../agent-catalog/service.js";
6
- import { validateComputerModelChange } from "../computer/model-config.js";
7
6
  import { GATEWAY_BUILTIN_TOOLS } from "./agent-builtin-tools.js";
7
+ import { validateComputerModelChange } from "../computer/model-config.js";
8
8
  import { isDeepStrictEqual } from "node:util";
9
9
  //#region src/gateway/global-defaults-admin.ts
10
10
  init_agent_config();
@@ -4,7 +4,8 @@ import { init_model_usage, withModelUsageOrigin } from "../../../providers/model
4
4
  import { resolveEffectiveAgentConfigForAgent } from "../../../config/agent-profile.js";
5
5
  import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
6
6
  import "../../../providers/constants.js";
7
- import { computerModelProfile, init_model_policy, isDedicatedComputerModel } from "../../../computer/model-policy.js";
7
+ import { init_model_policy, isDedicatedPhoneModel, phoneModelProfile } from "../../../phone/model-policy.js";
8
+ import { computerModelProfile, init_model_policy as init_model_policy$1, isDedicatedComputerModel } from "../../../computer/model-policy.js";
8
9
  import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
9
10
  import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
10
11
  import { getModelRegistry } from "../../../providers/model-registry.js";
@@ -12,7 +13,6 @@ import { CredentialResolver, init_credentials } from "../../../auth/credentials.
12
13
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
13
14
  import { PROVIDER_META, getAllModels, getAllProviders, getAvailableModels, getProviderAuthState, init_providers, isProviderConfigured, isProviderConfiguredSync } from "../../../providers/index.js";
14
15
  import { XopcCloudAccountError, XopcCloudAccountService } from "../../../providers/xopc-cloud-account-service.js";
15
- import { phoneModelProfile } from "../../../phone/model-adapter.js";
16
16
  import { buildCapabilityPlansForConfig } from "../../../capabilities/readiness/from-config.js";
17
17
  import "../../../capabilities/readiness/index.js";
18
18
  import { getModelThinking } from "../../../providers/model-thinking.js";
@@ -29,9 +29,10 @@ import { dismissXopcCloudOnboarding, getXopcCloudOnboardingStatus } from "../../
29
29
  import { auditModelReferences } from "../../../providers/model-reference-auditor.js";
30
30
  import { registerProviderSetupRoutes } from "./provider-setup.js";
31
31
  //#region src/gateway/hono/routes/models.ts
32
+ init_model_policy();
32
33
  init_model_usage();
33
34
  init_profiles();
34
- init_model_policy();
35
+ init_model_policy$1();
35
36
  init_models_json();
36
37
  init_resolve_config_value();
37
38
  init_providers();
@@ -325,7 +326,10 @@ function registerModelsRoutes(authenticated, deps) {
325
326
  name: m.name,
326
327
  ...catalogDisplayNames(m.provider, m.id),
327
328
  provider: m.provider,
328
- ...phoneModelProfile(m) ? { phoneUse: { profile: phoneModelProfile(m) } } : {},
329
+ ...phoneModelProfile(m) ? { phoneUse: {
330
+ profile: phoneModelProfile(m),
331
+ dedicated: isDedicatedPhoneModel(m)
332
+ } } : {},
329
333
  ...computerModelProfile(m) ? { computerUse: {
330
334
  profile: computerModelProfile(m),
331
335
  dedicated: isDedicatedComputerModel(m)
@@ -712,7 +716,10 @@ function registerModelsRoutes(authenticated, deps) {
712
716
  name: m.name,
713
717
  ...catalogDisplayNames(m.provider, m.id),
714
718
  provider: m.provider,
715
- ...phoneModelProfile(m) ? { phoneUse: { profile: phoneModelProfile(m) } } : {},
719
+ ...phoneModelProfile(m) ? { phoneUse: {
720
+ profile: phoneModelProfile(m),
721
+ dedicated: isDedicatedPhoneModel(m)
722
+ } } : {},
716
723
  contextWindow: m.contextWindow ?? 128e3,
717
724
  maxTokens: m.maxTokens ?? 4096,
718
725
  reasoning: m.reasoning ?? false,
@@ -3,10 +3,11 @@ import { getSessionMetadata, init_session_read_repository } from "../../../stora
3
3
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
4
4
  import { init_paths } from "../../../config/paths.js";
5
5
  import { resolveEffectiveAgentConfigForAgent } from "../../../config/agent-profile.js";
6
+ import { phoneModelProfile } from "../../../phone/model-policy.js";
6
7
  import { getAllModels, init_providers, isProviderConfiguredSync, resolveModel } from "../../../providers/index.js";
7
8
  import { phoneAllowsApp } from "../../../phone/app-access.js";
8
9
  import { managedPhoneAdbPath } from "../../../runtime-tools/phone-dependency-catalog.js";
9
- import { phoneModelProfile } from "../../../phone/model-adapter.js";
10
+ import "../../../phone/model-adapter.js";
10
11
  import { getPhoneRuntime } from "../../../phone/runtime.js";
11
12
  import { AgentCatalogService } from "../../../agent-catalog/service.js";
12
13
  import { PhoneSetupService } from "../../../phone/setup/service.js";
@@ -6,11 +6,12 @@ import { init_session_repository } from "../../../storage/sqlite/session-reposit
6
6
  import { MOCK_PHONE_MODEL, PhoneActionSchema, PhoneConfigSchema, PhoneDeviceSchema, PhoneError, PhoneExecutionModeSchema, PhoneInputSchema, init_contracts } from "../../../phone/contracts.js";
7
7
  import { createConversation, init_conversation_repository } from "../../../storage/sqlite/conversation-repository.js";
8
8
  import { getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
9
+ import { phoneModelProfile } from "../../../phone/model-policy.js";
9
10
  import { getAllModels, init_providers, isProviderConfiguredSync } from "../../../providers/index.js";
10
11
  import { normalizePhoneAppAccess, phoneAppAccess } from "../../../phone/app-access.js";
11
12
  import { cancelPhoneAssistance, pendingPhoneAssistance, phoneAssistance, phoneAssistanceReport } from "../../../phone/assistance.js";
12
13
  import { resolveAdbPath } from "../../../phone/adb-driver.js";
13
- import { createPhoneModel, phoneModelProfile } from "../../../phone/model-adapter.js";
14
+ import { createPhoneModel } from "../../../phone/model-adapter.js";
14
15
  import { getPhoneRuntime, phoneExecutionContext } from "../../../phone/runtime.js";
15
16
  import { registerPhoneSetupRoutes } from "./phone-setup.js";
16
17
  import { getGatewayPrincipal } from "../../security/gateway-principal.js";
@@ -176,7 +176,6 @@ async function* runGatewayAgent(deps, message, channel, chatId, origin, attachme
176
176
  });
177
177
  const timezone = agentService.resolveUserTimezoneForSession(conversationId);
178
178
  const stampedMessage = message.trimStart().startsWith("/") ? message : prependEnvelopeTimestamp(message, timezone);
179
- const prepared = await agentService.prepareInboundAttachments(conversationId, cappedAttachments);
180
179
  const runAbort = runAbortControllers.get(runId);
181
180
  if (!runAbort) throw new Error("run abort controller missing for webchat");
182
181
  if (runOptions?.taskRunId && new TaskRunRepository().get(runOptions.taskRunId)?.status === "cancelled") runAbort.abort();
@@ -199,7 +198,7 @@ async function* runGatewayAgent(deps, message, channel, chatId, origin, attachme
199
198
  let streamError;
200
199
  let embeddedAborted = false;
201
200
  try {
202
- const eventStream = agentService.turnDispatcher.processDirectStreaming(stampedMessage, conversationId, origin, prepared, thinking, {
201
+ const eventStream = agentService.turnDispatcher.processDirectStreaming(stampedMessage, conversationId, origin, cappedAttachments, thinking, {
203
202
  signal: mergedSignal,
204
203
  runId,
205
204
  sourceContexts: runOptions?.sourceContexts,