@fieldwangai/agentflow 0.1.160 → 0.1.162

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 (87) hide show
  1. package/bin/lib/auth.mjs +231 -14
  2. package/bin/lib/catalog-flows.mjs +2 -0
  3. package/bin/lib/cli-auth-page.mjs +103 -0
  4. package/bin/lib/skill-runtime.mjs +6 -0
  5. package/bin/lib/table.mjs +2 -3
  6. package/bin/lib/ui-server.mjs +220 -17
  7. package/bin/lib/workspace-draft.mjs +74 -0
  8. package/bin/lib/workspace-routes.mjs +297 -4
  9. package/bin/lib/workspace-server.mjs +6 -0
  10. package/builtin/nodes/control_while.md +5 -5
  11. package/builtin/pipelines/new/workspace.flow.js +1 -1
  12. package/builtin/web-ui/dist/assets/{WorkflowAssistantThread-Bfo9Ythw.js → WorkflowAssistantThread-CTrXOZ00.js} +1 -1
  13. package/builtin/web-ui/dist/assets/{index-e1omCEau.css → index-5uJFccdX.css} +1 -1
  14. package/builtin/web-ui/dist/assets/{index-XbeI5foV.js → index-BeUfNQRL.js} +4 -3
  15. package/builtin/web-ui/dist/index.html +2 -2
  16. package/package.json +5 -1
  17. package/skills/agentflow-author-flow/SKILL.md +81 -8
  18. package/skills/agentflow-author-flow/agents/openai.yaml +3 -3
  19. package/skills/agentflow-cli/SKILL.md +130 -25
  20. package/skills/agentflow-cli/agents/openai.yaml +2 -2
  21. package/skills/agentflow-cli/runtime/bin/lib/skill-runtime.mjs +14765 -0
  22. package/skills/agentflow-cli/runtime/builtin/nodes/agent_subAgent.md +34 -0
  23. package/skills/agentflow-cli/runtime/builtin/nodes/control_agent_toBool.md +26 -0
  24. package/skills/agentflow-cli/runtime/builtin/nodes/control_anyOne.md +19 -0
  25. package/skills/agentflow-cli/runtime/builtin/nodes/control_cancelled.md +26 -0
  26. package/skills/agentflow-cli/runtime/builtin/nodes/control_cd_workspace.md +50 -0
  27. package/skills/agentflow-cli/runtime/builtin/nodes/control_delay.md +31 -0
  28. package/skills/agentflow-cli/runtime/builtin/nodes/control_end.md +13 -0
  29. package/skills/agentflow-cli/runtime/builtin/nodes/control_if.md +21 -0
  30. package/skills/agentflow-cli/runtime/builtin/nodes/control_interval_loop.md +55 -0
  31. package/skills/agentflow-cli/runtime/builtin/nodes/control_load_mcp.md +24 -0
  32. package/skills/agentflow-cli/runtime/builtin/nodes/control_load_skills.md +35 -0
  33. package/skills/agentflow-cli/runtime/builtin/nodes/control_parse_json.md +25 -0
  34. package/skills/agentflow-cli/runtime/builtin/nodes/control_start.md +13 -0
  35. package/skills/agentflow-cli/runtime/builtin/nodes/control_subflow_call.md +27 -0
  36. package/skills/agentflow-cli/runtime/builtin/nodes/control_toBool.md +27 -0
  37. package/skills/agentflow-cli/runtime/builtin/nodes/control_user_workspace.md +24 -0
  38. package/skills/agentflow-cli/runtime/builtin/nodes/control_wait_until.md +34 -0
  39. package/skills/agentflow-cli/runtime/builtin/nodes/control_while.md +124 -0
  40. package/skills/agentflow-cli/runtime/builtin/nodes/display_ascii.md +24 -0
  41. package/skills/agentflow-cli/runtime/builtin/nodes/display_chart.md +32 -0
  42. package/skills/agentflow-cli/runtime/builtin/nodes/display_code.md +39 -0
  43. package/skills/agentflow-cli/runtime/builtin/nodes/display_html.md +32 -0
  44. package/skills/agentflow-cli/runtime/builtin/nodes/display_image.md +36 -0
  45. package/skills/agentflow-cli/runtime/builtin/nodes/display_markdown.md +24 -0
  46. package/skills/agentflow-cli/runtime/builtin/nodes/display_mermaid.md +24 -0
  47. package/skills/agentflow-cli/runtime/builtin/nodes/display_react_app.md +53 -0
  48. package/skills/agentflow-cli/runtime/builtin/nodes/display_table.md +32 -0
  49. package/skills/agentflow-cli/runtime/builtin/nodes/provide_bool.md +14 -0
  50. package/skills/agentflow-cli/runtime/builtin/nodes/provide_file.md +14 -0
  51. package/skills/agentflow-cli/runtime/builtin/nodes/provide_json.md +14 -0
  52. package/skills/agentflow-cli/runtime/builtin/nodes/provide_password.md +14 -0
  53. package/skills/agentflow-cli/runtime/builtin/nodes/provide_str.md +14 -0
  54. package/skills/agentflow-cli/runtime/builtin/nodes/tool_display_share_link.md +47 -0
  55. package/skills/agentflow-cli/runtime/builtin/nodes/tool_get_env.md +20 -0
  56. package/skills/agentflow-cli/runtime/builtin/nodes/tool_git_checkout.md +70 -0
  57. package/skills/agentflow-cli/runtime/builtin/nodes/tool_git_worktree_load.md +73 -0
  58. package/skills/agentflow-cli/runtime/builtin/nodes/tool_git_worktree_unload.md +52 -0
  59. package/skills/agentflow-cli/runtime/builtin/nodes/tool_gitlab_create_mr.md +114 -0
  60. package/skills/agentflow-cli/runtime/builtin/nodes/tool_jenkins_build.md +67 -0
  61. package/skills/agentflow-cli/runtime/builtin/nodes/tool_load_key.md +26 -0
  62. package/skills/agentflow-cli/runtime/builtin/nodes/tool_nodejs.md +52 -0
  63. package/skills/agentflow-cli/runtime/builtin/nodes/tool_print.md +21 -0
  64. package/skills/agentflow-cli/runtime/builtin/nodes/tool_save_key.md +26 -0
  65. package/skills/agentflow-cli/runtime/builtin/nodes/tool_set_run_env.md +38 -0
  66. package/skills/agentflow-cli/runtime/builtin/nodes/tool_user_ask.md +27 -0
  67. package/skills/agentflow-cli/runtime/builtin/nodes/tool_user_check.md +26 -0
  68. package/skills/agentflow-cli/runtime/builtin/nodes/tool_wecom_send_app_markdown.md +57 -0
  69. package/skills/agentflow-cli/runtime/builtin/nodes/tool_wecom_send_group_markdown.md +45 -0
  70. package/skills/agentflow-cli/runtime/builtin/nodes/workspace_one_click_task.md +44 -0
  71. package/skills/agentflow-cli/runtime/builtin/nodes/workspace_run.md +16 -0
  72. package/skills/agentflow-cli/runtime/builtin/nodes/workspace_scheduled_run.md +16 -0
  73. package/skills/agentflow-cli/runtime/builtin/nodes/workspace_subflow_input.md +14 -0
  74. package/skills/agentflow-cli/runtime/package.json +6 -0
  75. package/skills/agentflow-cli/scripts/agentflow-auth-store.mjs +113 -0
  76. package/skills/agentflow-cli/scripts/agentflow-cli.mjs +393 -28
  77. package/skills/agentflow-cli/scripts/agentflow-runtime.mjs +11 -4
  78. package/skills/agentflow-flow-add-instances/SKILL.md +2 -2
  79. package/skills/agentflow-flow-dsl/SKILL.md +25 -6
  80. package/skills/agentflow-flow-dsl/agents/openai.yaml +2 -2
  81. package/skills/agentflow-flow-edit-node-fields/SKILL.md +3 -3
  82. package/skills/agentflow-flow-recipes/SKILL.md +1 -1
  83. package/skills/agentflow-flow-recipes/references/recipes.md +1 -2
  84. package/skills/agentflow-flow-sync-ui/SKILL.md +1 -1
  85. package/skills/agentflow-node-dsl/SKILL.md +5 -13
  86. package/skills/agentflow-workspace-markdown/SKILL.md +1 -1
  87. package/skills/agentflow-workspace-graph/SKILL.md +0 -85
@@ -121,7 +121,8 @@ ${n("project:fileTruncated")}`:""]})]}):s.jsx("p",{children:n("project:noNodeFil
121
121
  `+U.slice(ce,_e),ce=_e+1),Ee=Ve;return Ye+=`
122
122
  `,U.length-ce>xe&&Ee>ce?Ye+=U.slice(ce,Ee)+`
123
123
  `+U.slice(Ee+1):Ye+=U.slice(ce),Ye.slice(1)}function st(U){let xe="",Q=0;for(let fe=0;fe<U.length;Q>=65536?fe+=2:fe++){Q=ve(U,fe);const ce=$[Q];!ce&&ee(Q)?(xe+=U[fe],Q>=65536&&(xe+=U[fe+1])):xe+=ce||L(Q)}return xe}function kt(U,xe,Q){let fe="";const ce=U.tag;for(let _e=0,Ee=Q.length;_e<Ee;_e+=1){let Ve=Q[_e];U.replacer&&(Ve=U.replacer.call(Q,String(_e),Ve)),(ye(U,xe,Ve,!1,!1)||typeof Ve>"u"&&ye(U,xe,null,!1,!1))&&(fe!==""&&(fe+=","+(U.condenseFlow?"":" ")),fe+=U.dump)}U.tag=ce,U.dump="["+fe+"]"}function je(U,xe,Q,fe){let ce="";const _e=U.tag;for(let Ee=0,Ve=Q.length;Ee<Ve;Ee+=1){let Ye=Q[Ee];U.replacer&&(Ye=U.replacer.call(Q,String(Ee),Ye)),(ye(U,xe+1,Ye,!0,!0,!1,!0)||typeof Ye>"u"&&ye(U,xe+1,null,!0,!0,!1,!0))&&((!fe||ce!=="")&&(ce+=K(U,xe)),U.dump&&l===U.dump.charCodeAt(0)?ce+="-":ce+="- ",ce+=U.dump)}U.tag=_e,U.dump=ce||"[]"}function se(U,xe,Q){let fe="";const ce=U.tag,_e=Object.keys(Q);for(let Ee=0,Ve=_e.length;Ee<Ve;Ee+=1){let Ye="";fe!==""&&(Ye+=", "),U.condenseFlow&&(Ye+='"');const at=_e[Ee];let ht=Q[at];U.replacer&&(ht=U.replacer.call(Q,at,ht)),ye(U,xe,at,!1,!1)&&(U.dump.length>1024&&(Ye+="? "),Ye+=U.dump+(U.condenseFlow?'"':"")+":"+(U.condenseFlow?"":" "),ye(U,xe,ht,!1,!1)&&(Ye+=U.dump,fe+=Ye))}U.tag=ce,U.dump="{"+fe+"}"}function N(U,xe,Q,fe){let ce="";const _e=U.tag,Ee=Object.keys(Q);if(U.sortKeys===!0)Ee.sort();else if(typeof U.sortKeys=="function")Ee.sort(U.sortKeys);else if(U.sortKeys)throw new t("sortKeys must be a boolean or a function");for(let Ve=0,Ye=Ee.length;Ve<Ye;Ve+=1){let at="";(!fe||ce!=="")&&(at+=K(U,xe));const ht=Ee[Ve];let jt=Q[ht];if(U.replacer&&(jt=U.replacer.call(Q,ht,jt)),!ye(U,xe+1,ht,!0,!0,!0))continue;const ot=U.tag!==null&&U.tag!=="?"||U.dump&&U.dump.length>1024;ot&&(U.dump&&l===U.dump.charCodeAt(0)?at+="?":at+="? "),at+=U.dump,ot&&(at+=K(U,xe)),ye(U,xe+1,jt,!0,ot)&&(U.dump&&l===U.dump.charCodeAt(0)?at+=":":at+=": ",at+=U.dump,ce+=at)}U.tag=_e,U.dump=ce||"{}"}function ne(U,xe,Q){const fe=Q?U.explicitTypes:U.implicitTypes;for(let ce=0,_e=fe.length;ce<_e;ce+=1){const Ee=fe[ce];if((Ee.instanceOf||Ee.predicate)&&(!Ee.instanceOf||typeof xe=="object"&&xe instanceof Ee.instanceOf)&&(!Ee.predicate||Ee.predicate(xe))){if(Q?Ee.multi&&Ee.representName?U.tag=Ee.representName(xe):U.tag=Ee.tag:U.tag="?",Ee.represent){const Ve=U.styleMap[Ee.tag]||Ee.defaultStyle;let Ye;if(r.call(Ee.represent)==="[object Function]")Ye=Ee.represent(xe,Ve);else if(i.call(Ee.represent,Ve))Ye=Ee.represent[Ve](xe,Ve);else throw new t("!<"+Ee.tag+'> tag resolver accepts not "'+Ve+'" style');U.dump=Ye}return!0}}return!1}function ye(U,xe,Q,fe,ce,_e,Ee){U.tag=null,U.dump=Q,ne(U,Q,!1)||ne(U,Q,!0);const Ve=r.call(U.dump),Ye=fe;fe&&(fe=U.flowLevel<0||U.flowLevel>xe);const at=Ve==="[object Object]"||Ve==="[object Array]";let ht,jt;if(at&&(ht=U.duplicates.indexOf(Q),jt=ht!==-1),(U.tag!==null&&U.tag!=="?"||jt||U.indent!==2&&xe>0)&&(ce=!1),jt&&U.usedDuplicates[ht])U.dump="*ref_"+ht;else{if(at&&jt&&!U.usedDuplicates[ht]&&(U.usedDuplicates[ht]=!0),Ve==="[object Object]")fe&&Object.keys(U.dump).length!==0?(N(U,xe,U.dump,ce),jt&&(U.dump="&ref_"+ht+U.dump)):(se(U,xe,U.dump),jt&&(U.dump="&ref_"+ht+" "+U.dump));else if(Ve==="[object Array]")fe&&U.dump.length!==0?(U.noArrayIndent&&!Ee&&xe>0?je(U,xe-1,U.dump,ce):je(U,xe,U.dump,ce),jt&&(U.dump="&ref_"+ht+U.dump)):(kt(U,xe,U.dump),jt&&(U.dump="&ref_"+ht+" "+U.dump));else if(Ve==="[object String]")U.tag!=="?"&&Ce(U,U.dump,xe,_e,Ye);else{if(Ve==="[object Undefined]")return!1;if(U.skipInvalid)return!1;throw new t("unacceptable kind of an object to dump "+Ve)}if(U.tag!==null&&U.tag!=="?"){let ot=encodeURI(U.tag[0]==="!"?U.tag.slice(1):U.tag).replace(/!/g,"%21");U.tag[0]==="!"?ot="!"+ot:ot.slice(0,18)==="tag:yaml.org,2002:"?ot="!!"+ot.slice(18):ot="!<"+ot+">",U.dump=ot+" "+U.dump}}return!0}function ke(U,xe){const Q=[],fe=[];Se(U,Q,fe);const ce=fe.length;for(let _e=0;_e<ce;_e+=1)xe.duplicates.push(Q[fe[_e]]);xe.usedDuplicates=new Array(ce)}function Se(U,xe,Q){if(U!==null&&typeof U=="object"){const fe=xe.indexOf(U);if(fe!==-1)Q.indexOf(fe)===-1&&Q.push(fe);else if(xe.push(U),Array.isArray(U))for(let ce=0,_e=U.length;ce<_e;ce+=1)Se(U[ce],xe,Q);else{const ce=Object.keys(U);for(let _e=0,Ee=ce.length;_e<Ee;_e+=1)Se(U[ce[_e]],xe,Q)}}}function Me(U,xe){xe=xe||{};const Q=new te(xe);Q.noRefs||ke(U,Q);let fe=U;return Q.replacer&&(fe=Q.replacer.call({"":fe},"",fe)),ye(Q,0,fe,!0,!0)?Q.dump+`
124
- `:""}return eb.dump=Me,eb}var JA;function QY(){if(JA)return Ur;JA=1;const e=JY(),t=XY();function n(r,i){return function(){throw new Error("Function yaml."+r+" is removed in js-yaml 4. Use yaml."+i+" instead, which is now safe by default.")}}return Ur.Type=ps(),Ur.Schema=EO(),Ur.FAILSAFE_SCHEMA=RO(),Ur.JSON_SCHEMA=DO(),Ur.CORE_SCHEMA=FO(),Ur.DEFAULT_SCHEMA=yS(),Ur.load=e.load,Ur.loadAll=e.loadAll,Ur.dump=t.dump,Ur.YAMLException=Cp(),Ur.types={binary:WO(),float:LO(),map:TO(),null:MO(),pairs:KO(),set:VO(),timestamp:zO(),bool:$O(),int:OO(),merge:BO(),omap:HO(),seq:PO(),str:IO()},Ur.safeLoad=n("safeLoad","load"),Ur.safeLoadAll=n("safeLoadAll","loadAll"),Ur.safeDump=n("safeDump","dump"),Ur}var ZY=QY();const eJ=GY(ZY),{Type:Ame,Schema:Eme,FAILSAFE_SCHEMA:Ime,JSON_SCHEMA:Pme,CORE_SCHEMA:Tme,DEFAULT_SCHEMA:Rme,load:Mme,loadAll:$me,dump:Ome,YAMLException:Lme,types:Dme,safeLoad:Fme,safeLoadAll:zme,safeDump:Bme}=eJ,Jf=["requirement","planning","code","test","normal"],XA={普通:"normal",技术规划:"planning",代码执行:"code",测试回归:"test",需求拆解:"requirement"};function wS(e,t){var i,o,a,l,c,u,f,p,d,m,g,v,w,y;const n=k=>{const b={type:(k==null?void 0:k.type)??"node",name:(k==null?void 0:k.name)??"",value:(k==null?void 0:k.value)??(k==null?void 0:k.default)??""};return(k==null?void 0:k.required)===!0&&(b.required=!0),(k==null?void 0:k.description)!=null&&String(k.description).trim()&&(b.description=String(k.description)),(k==null?void 0:k.showOnNode)!=null&&(b.showOnNode=!!k.showOnNode),b},r={};for(const k of e){if((i=k==null?void 0:k.data)!=null&&i.isWorkspaceGroup)continue;const b=t[k.id]&&typeof t[k.id]=="object"?{...t[k.id]}:{},S=((o=k.data)==null?void 0:o.definitionId)||k.id,j=((a=k.data)==null?void 0:a.inputs)??[],C=((l=k.data)==null?void 0:l.outputs)??[],R=((c=k.data)==null?void 0:c.role)!=null?String(k.data.role).trim():"",I=b.role!=null?String(b.role).trim():"",D=XA[R]||R,E=XA[I]||I,O=Jf.includes(D)?D:Jf.includes(E)?E:"normal",z=Array.isArray(j)?j.map(n):Array.isArray(b.input)?b.input.map(be=>n(be)):[],W=Array.isArray(C)?C.map(n):Array.isArray(b.output)?b.output.map(be=>n(be)):[],$=((u=k.data)==null?void 0:u.label)!=null?String(k.data.label):b.label!=null?String(b.label):k.id,H=(f=k.data)==null?void 0:f.body,P=H!=null?String(H):b.body!=null?String(b.body):"";let F=((p=k.data)==null?void 0:p.model)!=null&&String(k.data.model).trim()!==""?String(k.data.model).trim():b.model!=null&&String(b.model).trim()!==""?String(b.model).trim():void 0;(F===""||F==="default")&&(F=void 0);const L={...b,definitionId:S,label:$,role:O,model:F,input:z,output:W},q=((d=k.data)==null?void 0:d.marketplaceRef)||b.marketplaceRef;q?L.marketplaceRef=String(q):delete L.marketplaceRef;const M=((m=k.data)==null?void 0:m.marketplacePackageId)||b.marketplacePackageId;M?L.marketplacePackageId=String(M):delete L.marketplacePackageId;const te=((g=k.data)==null?void 0:g.marketplaceVersion)||b.marketplaceVersion;te?L.marketplaceVersion=String(te):delete L.marketplaceVersion,S.startsWith("provide_")||P.trim()===""?delete L.body:L.body=P;const G=Array.isArray((v=k.data)==null?void 0:v.images)?k.data.images:Array.isArray(b.images)?b.images:[];G.length>0?L.images=G:delete L.images;const K=(w=k.data)==null?void 0:w.script,oe=K!=null?String(K):b.script!=null?String(b.script):"";oe.trim()===""?delete L.script:L.script=oe;for(const be of["scriptRef","implementationRef","implementationMode"]){const ee=(y=k.data)==null?void 0:y[be],he=ee!=null?String(ee):b[be]!=null?String(b[be]):"";he.trim()===""?delete L[be]:L[be]=he.trim()}delete L.temperature,delete L.maxTokens,delete L.description,r[k.id]=L}return r}function xf(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function tJ(e,t){const n=String(e||"node").replace(/_copy(?:_\d+)?$/i,"");let r=`${n}_copy`,i=2;for(;t.has(r);)r=`${n}_copy_${i}`,i+=1;return t.add(r),r}function nJ(e,t,n){const r=(e||[]).filter(a=>a==null?void 0:a.selected);if(r.length===0)return null;const i=new Set(r.map(a=>a.id)),o=(t||[]).filter(a=>i.has(a.source)&&i.has(a.target));return{version:1,nodes:r.map(a=>xf(a)),edges:o.map(a=>xf(a)),instances:wS(r,n||{})}}function rJ(e,t,n,r,i={}){var p;if(!e||!Array.isArray(e.nodes)||e.nodes.length===0)return null;const o=i.offset||{x:48,y:48},a=new Set((t||[]).map(d=>d.id)),l=new Map;for(const d of e.nodes)l.set(d.id,tJ(d.id,a));const c=e.nodes.map(d=>{var g,v;const m=l.get(d.id);return{...xf(d),id:m,selected:!0,dragging:!1,position:{x:Number(((g=d.position)==null?void 0:g.x)||0)+o.x,y:Number(((v=d.position)==null?void 0:v.y)||0)+o.y}}}),u=(e.edges||[]).filter(d=>l.has(d.source)&&l.has(d.target)).map((d,m)=>{const g=l.get(d.source),v=l.get(d.target);return{...xf(d),id:`e-${g}-${v}-${Date.now()}-${m}`,source:g,target:v,selected:!1}}),f={...r||{}};for(const[d,m]of l.entries()){const g=(p=e.instances)==null?void 0:p[d];g&&(f[m]={...xf(g),label:g.label!=null?String(g.label):m})}return{nodes:[...(t||[]).map(d=>({...d,selected:!1})),...c],edges:[...(n||[]).map(d=>({...d,selected:!1})),...u],instances:f,pastedNodeIds:c.map(d=>d.id)}}const sJ=new Map([["文本","text"],["str","text"],["string","text"],["文件","file"],["path","file"],["节点","node"],["flow","node"],["control","node"],["boolean","bool"],["布尔","bool"],["object","json"]]),iJ=new Set(["json>text"]),oJ=Object.freeze({text:"#2196f3",file:"#4caf50",node:"#ff9800",bool:"#9c27b0",json:"#00bcd4",image:"#ec407a",any:"#9e9e9e"});function Ng(e){const t=String(e??"").trim().toLowerCase();return sJ.get(t)||t||"node"}function qO(e,t){const n=Ng(e),r=Ng(t);return n==="any"||r==="any"?{compatible:!0,kind:"any",source:n,target:r}:n===r?{compatible:!0,kind:"exact",source:n,target:r}:iJ.has(`${n}>${r}`)?{compatible:!0,kind:"lossless",source:n,target:r}:{compatible:!1,kind:"incompatible",source:n,target:r}}function aJ(e,t){return qO(e,t).compatible}function lJ(e){return oJ[Ng(e)]||"#9e9e9e"}function or(e){return lJ(e)}const cJ=new Set(["knowledgeContext","workspaceContext","skillsContext","mcpContext"]);function ov(e){const t=Ng(e==null?void 0:e.type),n=String((e==null?void 0:e.name)||(e==null?void 0:e.id)||"").trim();return t==="text"&&cJ.has(n)?`${t}+${n}`:t}function av(e){return ov(e)}function Xf(e,t){if(!e||!t||!aJ(e.type,t.type))return!1;const n=ov(e),r=ov(t),i=n.includes("+"),o=r.includes("+");return i||o?n===r:!0}function uJ(e,t){const n=new RegExp(`^${t}-(\\d+)$`).exec(String(e||""));if(!n)return-1;const r=Number.parseInt(n[1],10);return Number.isFinite(r)?r:-1}function Qf(e,t,n){var l;const r=n==="source"?"outputs":"inputs",o=uJ(t,n==="source"?"output":"input");return o<0?null:(Array.isArray((l=e==null?void 0:e.data)==null?void 0:l[r])?e.data[r]:[])[o]||null}const _g=/\[image\s+(\d+)\]/gi;function zo(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map((t,n)=>({id:String(t.id||`image-${n+1}`),label:String(t.label||`image ${n+1}`),name:String(t.name||`image-${n+1}`),mimeType:String(t.mimeType||t.type||"image/png"),dataUrl:String(t.dataUrl||t.data||"")})).filter(t=>t.dataUrl.startsWith("data:image/")):[]}function dJ(e){return`image ${zo(e).length+1}`}function fJ(e,t){const n=String(e||""),r=`[${t}]`;return n.trim()?`${n.replace(/[ \t]+$/u,"")} ${r}`:r}function pJ(e,t){const n=zo(e),r=String(t||""),i=new Set;_g.lastIndex=0;let o;for(;o=_g.exec(r);)i.add(`image ${o[1]}`.toLowerCase());return i.size===0?[]:n.filter(a=>i.has(String(a.label||"").toLowerCase()))}function hJ(e){return new Promise((t,n)=>{if(!e||!String(e.type||"").startsWith("image/")){n(new Error("Only image files are supported"));return}const r=new FileReader;r.onload=()=>{t({name:e.name||"image",mimeType:e.type||"image/png",dataUrl:String(r.result||"")})},r.onerror=()=>n(r.error||new Error("Failed to read image")),r.readAsDataURL(e)})}function UO(e){var n;return Array.from(((n=e==null?void 0:e.clipboardData)==null?void 0:n.items)||[]).filter(r=>r.kind==="file"&&String(r.type||"").startsWith("image/")).map(r=>r.getAsFile()).filter(Boolean)}function bf(e){var t;return Array.from(((t=e==null?void 0:e.dataTransfer)==null?void 0:t.files)||[]).filter(n=>String(n.type||"").startsWith("image/"))}async function GO({files:e,body:t,images:n}){const r=Array.from(e||[]);if(r.length===0)return null;let i=String(t||"");const o=zo(n);for(const a of r){const l=await hJ(a),c=dJ(o);o.push({id:`${Date.now().toString(36)}-${o.length+1}`,label:c,...l}),i=fJ(i,c)}return{body:i,images:o}}function mJ(e,t){return(Array.isArray(e)?e:[]).find(n=>String((n==null?void 0:n.name)||"")===String(t||""))}function ja(e,t,n=""){const r=mJ(e,t),i=(r==null?void 0:r.value)??(r==null?void 0:r.default);return i==null||String(i).trim()===""?n:String(i).trim()}function gJ(e){const t=String(e||"").trim();if(!t)return"未配置";const n=t.match(/\$\{flowDir\}\/([^\s'\"]+)/);if(n)return n[1];const r=t.split(/\r?\n/,1)[0];return r.length>88?`${r.slice(0,85)}…`:r}function yJ(e){if(Array.isArray(e))return e;try{const t=JSON.parse(String(e||"[]"));return Array.isArray(t)?t:[]}catch{return[]}}function Ja({label:e}){return s.jsx("div",{className:"af-node-ui-kit__section-heading",children:e})}function wJ({section:e,data:t}){var i;const n=(i=t==null?void 0:t.nodeUiBindings)==null?void 0:i[e.input],r=ja(t==null?void 0:t.inputs,e.input,"未连接");return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__binding",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__binding-value",title:(n==null?void 0:n.display)||r,children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:n?"cable":"data_object"}),s.jsx("code",{children:(n==null?void 0:n.display)||r}),s.jsx("em",{children:n?"CONNECTED":"LITERAL"})]})]})}function YO({section:e,data:t}){const n=t==null?void 0:t[e.field];return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__code",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__code-value",title:String(n||"未配置"),children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"terminal"}),s.jsx("code",{children:gJ(n)})]})]})}function QA({role:e,info:t,data:n}){const r=Array.isArray(t==null?void 0:t.inputs)?t.inputs:[],i=Array.isArray(t==null?void 0:t.outputs)?t.outputs:[];return s.jsxs("button",{type:"button",className:`af-node-ui-kit__loop-target af-node-ui-kit__loop-target--${e} nodrag`,disabled:!(t!=null&&t.id),onPointerDown:o=>o.stopPropagation(),onClick:o=>{var a;o.stopPropagation(),(a=n==null?void 0:n.onEditWhileSubflow)==null||a.call(n,t==null?void 0:t.id,e)},title:t!=null&&t.id?`编辑 ${e==="condition"?"Condition":"Body"} 子流程`:"尚未创建子流程",children:[s.jsx("span",{className:"af-node-ui-kit__loop-role",children:e==="condition"?"CONDITION":"BODY"}),s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:e==="condition"?"rule":"account_tree"}),s.jsxs("div",{children:[s.jsx("strong",{children:(t==null?void 0:t.label)||(t==null?void 0:t.id)||"未绑定"}),s.jsxs("em",{children:[Number(t==null?void 0:t.nodeCount)||0," 个内部节点"]})]}),s.jsxs("code",{children:["IN ",r.length?r.join(" · "):"—"]}),s.jsxs("code",{children:["OUT ",i.length?i.join(" · "):"—"]}),s.jsx("span",{className:"material-symbols-outlined af-node-ui-kit__loop-open","aria-hidden":!0,children:"arrow_forward"})]})}function xJ({section:e,data:t}){const n=t==null?void 0:t.whileSubflowInfo;return!(n!=null&&n.condition)&&!(n!=null&&n.body)?s.jsx(YO,{section:e,data:t}):s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__loop",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__loop-targets",children:[s.jsx(QA,{role:"condition",info:n.condition,data:t}),s.jsx(QA,{role:"body",info:n.body,data:t})]}),s.jsxs("div",{className:"af-node-ui-kit__loop-state-path",children:[s.jsx("span",{children:"stateₙ"}),s.jsx("b",{children:"→ check → run →"}),s.jsx("span",{children:"stateₙ₊₁"})]})]})}function bJ({section:e,data:t}){var i;const n=ja(t==null?void 0:t.outputs,e.output,"").toLowerCase(),r=(i=t==null?void 0:t.whileSubflowInfo)!=null&&i.condition?"Condition.decision":e.source;return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__decision",children:[s.jsxs("div",{className:"af-node-ui-kit__section-title-row",children:[s.jsx(Ja,{label:e.label}),r?s.jsx("code",{children:r}):null]}),s.jsx("div",{className:"af-node-ui-kit__decision-options",children:(e.options||[]).map(o=>s.jsx("span",{className:`af-node-ui-kit__decision-option af-node-ui-kit__tone--${o.tone}${n===o.value?" is-active":""}`,title:o.description||o.label,children:o.label},o.value))})]})}function kJ({section:e,data:t}){return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__metrics",children:[s.jsx(Ja,{label:e.label}),s.jsx("div",{className:"af-node-ui-kit__metric-grid",children:(e.items||[]).map(n=>{const r=n.output?ja(t==null?void 0:t.outputs,n.output,"0"):ja(t==null?void 0:t.inputs,n.input,"—"),i=n.maxInput?ja(t==null?void 0:t.inputs,n.maxInput,"—"):"",o=n.maxInput||(n.output?"":n.input),a=o?ja(t==null?void 0:t.inputs,o,""):"";return s.jsxs("div",{className:"af-node-ui-kit__metric",children:[s.jsx("span",{children:n.label}),o?s.jsxs("div",{className:"af-node-ui-kit__metric-edit nodrag",onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[n.output?s.jsxs("strong",{children:[r," /"]}):null,s.jsx("input",{type:o==="maxIterations"?"number":"text",min:o==="maxIterations"?"1":void 0,max:o==="maxIterations"?"1000":void 0,value:a,disabled:!!(t!=null&&t.readOnly),"aria-label":n.label,onChange:l=>{var c;return(c=t==null?void 0:t.onNodeInputValueChange)==null?void 0:c.call(t,o,l.target.value)}}),n.suffix?s.jsx("em",{children:n.suffix}):null]}):s.jsxs("strong",{children:[r,i?` / ${i}`:"",n.suffix||""]})]},`${n.label}-${n.input||n.output}`)})})]})}function vJ({section:e,data:t}){const n=ja(t==null?void 0:t.outputs,e.output,"尚未运行");return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__summary",children:[s.jsx(Ja,{label:e.label}),s.jsx("p",{title:n,children:n})]})}function jJ({section:e,data:t}){const n=yJ(ja(t==null?void 0:t.outputs,e.output,"[]")).slice(-e.limit);return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__history",children:[s.jsx(Ja,{label:e.label}),n.length?s.jsx("ol",{children:n.map((r,i)=>s.jsxs("li",{children:[s.jsxs("b",{children:["#",(r==null?void 0:r.iteration)??i+1]}),s.jsx("span",{className:`af-node-ui-kit__history-decision af-node-ui-kit__tone--${(r==null?void 0:r.decision)==="wait"?"amber":(r==null?void 0:r.decision)==="done"?"green":(r==null?void 0:r.decision)==="fail"?"red":"purple"}`,children:(r==null?void 0:r.decision)||"event"}),s.jsx("em",{children:(r==null?void 0:r.summary)||"无摘要"})]},`${(r==null?void 0:r.iteration)||i}-${(r==null?void 0:r.decision)||"event"}`))}):s.jsx("p",{children:"尚无迭代记录"})]})}function SJ({section:e,data:t}){const n=(t==null?void 0:t.subflowInfo)||{},r=Array.isArray(n.inputs)?n.inputs:[],i=Array.isArray(n.outputs)?n.outputs:[];return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__subflow",children:[s.jsx(Ja,{label:e.label}),s.jsxs("button",{type:"button",className:"af-node-ui-kit__subflow-target nodrag",disabled:!n.id,onPointerDown:o=>o.stopPropagation(),onClick:o=>{var a;o.stopPropagation(),(a=t==null?void 0:t.onEditWhileSubflow)==null||a.call(t,n.id,"call")},title:n.id?"编辑子流程":"尚未绑定子流程",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"account_tree"}),s.jsxs("div",{children:[s.jsx("strong",{children:n.label||n.id||"未绑定"}),s.jsxs("em",{children:[Number(n.nodeCount)||0," 个内部节点"]})]}),s.jsx("span",{className:"material-symbols-outlined af-node-ui-kit__subflow-open","aria-hidden":!0,children:"open_in_new"})]}),s.jsxs("div",{className:"af-node-ui-kit__subflow-contract",children:[s.jsxs("span",{children:["IN ",r.length?r.join(" · "):"—"]}),s.jsxs("span",{children:["OUT ",i.length?i.join(" · "):"—"]})]})]})}function JO({data:e}){var n;const t=(n=e==null?void 0:e.nodeUi)==null?void 0:n.card;return!t||!Array.isArray(t.sections)?null:s.jsx("div",{className:`af-node-ui-kit af-node-ui-kit--${t.template||"details"} af-node-ui-kit--tone-${t.tone||"neutral"}`,children:t.sections.map((r,i)=>{const o=`${r.type}-${r.label}-${i}`;return r.type==="binding"?s.jsx(wJ,{section:r,data:e},o):r.type==="code"?s.jsx(YO,{section:r,data:e},o):r.type==="loop"?s.jsx(xJ,{section:r,data:e},o):r.type==="decision"?s.jsx(bJ,{section:r,data:e},o):r.type==="metrics"?s.jsx(kJ,{section:r,data:e},o):r.type==="summary"?s.jsx(vJ,{section:r,data:e},o):r.type==="history"?s.jsx(jJ,{section:r,data:e},o):r.type==="subflow"?s.jsx(SJ,{section:r,data:e},o):null})})}function Us(e){const t=e.indexOf(" - ");return t>=0?e.slice(0,t).trim():e.trim()}function NJ(e){var r;const t=(r=e==null?void 0:e.definitionId)==null?void 0:r.trim();if(t&&t!=="普通")return t;const n=((e==null?void 0:e.schemaType)??"agent").toLowerCase();return n&&n!=="普通"?n:"agent"}function _J(e){return["true","1","yes","on"].includes(String((e==null?void 0:e.value)??(e==null?void 0:e.default)??"").trim().toLowerCase())}function $d(e){try{return JSON.parse(String(e||"").trim()),!0}catch{return!1}}function lv(e){try{return{valid:!0,value:JSON.parse(String(e||"").trim())}}catch(t){return{valid:!1,value:null,error:String((t==null?void 0:t.message)||"JSON 格式错误")}}}function CJ(e){return Array.isArray(e)?`ARRAY · ${e.length}`:e&&typeof e=="object"?`OBJECT · ${Object.keys(e).length}`:e===null?"NULL":(typeof e).toUpperCase()}function cv(e){if(Array.isArray(e)){const t=e.slice(0,2).map(n=>n&&typeof n=="object"&&!Array.isArray(n)?Object.values(n).filter(r=>["string","number"].includes(typeof r)).slice(0,2).join(" · "):String(n??"null")).filter(Boolean).join(" / ");return`Array(${e.length})${t?` · ${t}`:""}`}if(e&&typeof e=="object"){const t=Object.keys(e);return`Object(${t.length})${t.length?` · ${t.slice(0,3).join(" · ")}`:""}`}return typeof e=="string"?e||'""':JSON.stringify(e)}function tb(e){return Array.isArray(e)&&e.length>0&&e.every(t=>t&&typeof t=="object"&&!Array.isArray(t))}function AJ(e){const t=[];for(const n of e.slice(0,20))for(const r of Object.keys(n))if(t.includes(r)||t.push(r),t.length>=6)return t;return t}function EJ({label:e,rows:t}){const n=AJ(t),r=t.slice(0,50);return s.jsxs("details",{className:"af-flow-node__json-collection",open:!0,children:[s.jsxs("summary",{children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"chevron_right"}),s.jsx("code",{children:e}),s.jsxs("em",{children:["Array(",t.length,")"]})]}),s.jsxs("div",{className:"af-flow-node__json-table-scroll",children:[s.jsxs("table",{children:[s.jsx("thead",{children:s.jsx("tr",{children:n.map(i=>s.jsx("th",{children:i},i))})}),s.jsx("tbody",{children:r.map((i,o)=>s.jsx("tr",{children:n.map(a=>{const l=i==null?void 0:i[a],c=cv(l);return s.jsx("td",{title:c,children:c},a)})},String((i==null?void 0:i.id)??o)))})]}),t.length>r.length?s.jsxs("div",{className:"af-flow-node__json-more",children:["还有 ",t.length-r.length," 行,请进入编辑器查看"]}):null]})]})}function IJ({text:e,readOnly:t,onEdit:n}){const r=lv(e),i=r.valid&&r.value&&typeof r.value=="object"?Array.isArray(r.value)?r.value.map((c,u)=>[String(u),c]):Object.entries(r.value):r.valid?[["value",r.value]]:[],o=r.valid&&tb(r.value)?[["items",r.value]]:[],a=o.length?o:i.filter(([,c])=>tb(c)),l=o.length?[]:i.filter(([,c])=>!tb(c));return s.jsxs("div",{className:`af-flow-node__json-card nodrag${r.valid?"":" is-invalid"}`,onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsxs("div",{className:"af-flow-node__json-card-head",children:[s.jsxs("span",{className:"af-flow-node__json-kind",children:["{}"," ",r.valid?CJ(r.value):"INVALID JSON"]}),s.jsxs("button",{type:"button",onClick:n,"aria-label":t?"查看 JSON":"编辑 JSON",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:t?"visibility":"edit"}),t?"查看":"编辑 JSON"]})]}),r.valid?s.jsxs("div",{className:"af-flow-node__json-content",children:[l.length?s.jsx("div",{className:"af-flow-node__json-rows",children:l.map(([c,u])=>s.jsxs("div",{className:"af-flow-node__json-row",children:[s.jsx("code",{children:c}),s.jsx("span",{title:cv(u),children:cv(u)})]},c))}):null,a.map(([c,u])=>s.jsx(EJ,{label:c,rows:u},c))]}):s.jsx("div",{className:"af-flow-node__json-error",children:r.error})]})}function Lt(e){e.stopPropagation()}function Cg({slots:e=[],direction:t="in",connectable:n=!0}){const{t:r}=Fr(),i=t==="in",o=Array.isArray(e)?e:[];return s.jsx("div",{className:`af-flow-node__ports af-flow-node__ports--${i?"in":"out"}`,children:o.map((a,l)=>{if((a==null?void 0:a.showOnNode)===!1)return null;const c=(a==null?void 0:a.name)||`#${l+1}`,u=r(i?"flow:node.inputTooltip":"flow:node.outputTooltip",{name:(a==null?void 0:a.name)||`#${l}`,type:a==null?void 0:a.type})+((a==null?void 0:a.default)!=null&&a.default!==""?r("flow:node.defaultSuffix",{value:a.default}):"");return s.jsxs("div",{className:"af-flow-node__port-row",title:u,children:[s.jsxs("span",{className:`af-flow-node__port-label af-flow-node__port-label--${i?"in":"out"}`,children:[c,a!=null&&a.required?s.jsx("span",{className:"af-flow-node__port-required",children:"*"}):null]}),s.jsx(ar,{type:i?"target":"source",position:i?pt.Left:pt.Right,id:`${i?"input":"output"}-${l}`,className:"af-flow-node__handle",style:{background:or(a==null?void 0:a.type)},title:u,isConnectable:n&&(a==null?void 0:a.connectable)!==!1})]},`${i?"in":"out"}-${l}`)})})}function PJ(e){return String(e||"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function TJ(e,t){const n=`\\[${PJ(t)}\\]`;return String(e||"").replace(new RegExp(`[ \\t]*${n}`,"gi"),"").replace(/[ \t]+\n/g,`
124
+ `:""}return eb.dump=Me,eb}var JA;function QY(){if(JA)return Ur;JA=1;const e=JY(),t=XY();function n(r,i){return function(){throw new Error("Function yaml."+r+" is removed in js-yaml 4. Use yaml."+i+" instead, which is now safe by default.")}}return Ur.Type=ps(),Ur.Schema=EO(),Ur.FAILSAFE_SCHEMA=RO(),Ur.JSON_SCHEMA=DO(),Ur.CORE_SCHEMA=FO(),Ur.DEFAULT_SCHEMA=yS(),Ur.load=e.load,Ur.loadAll=e.loadAll,Ur.dump=t.dump,Ur.YAMLException=Cp(),Ur.types={binary:WO(),float:LO(),map:TO(),null:MO(),pairs:KO(),set:VO(),timestamp:zO(),bool:$O(),int:OO(),merge:BO(),omap:HO(),seq:PO(),str:IO()},Ur.safeLoad=n("safeLoad","load"),Ur.safeLoadAll=n("safeLoadAll","loadAll"),Ur.safeDump=n("safeDump","dump"),Ur}var ZY=QY();const eJ=GY(ZY),{Type:Ame,Schema:Eme,FAILSAFE_SCHEMA:Ime,JSON_SCHEMA:Pme,CORE_SCHEMA:Tme,DEFAULT_SCHEMA:Rme,load:Mme,loadAll:$me,dump:Ome,YAMLException:Lme,types:Dme,safeLoad:Fme,safeLoadAll:zme,safeDump:Bme}=eJ,Jf=["requirement","planning","code","test","normal"],XA={普通:"normal",技术规划:"planning",代码执行:"code",测试回归:"test",需求拆解:"requirement"};function wS(e,t){var i,o,a,l,c,u,f,p,d,m,g,v,w,y;const n=k=>{const b={type:(k==null?void 0:k.type)??"node",name:(k==null?void 0:k.name)??"",value:(k==null?void 0:k.value)??(k==null?void 0:k.default)??""};return(k==null?void 0:k.required)===!0&&(b.required=!0),(k==null?void 0:k.description)!=null&&String(k.description).trim()&&(b.description=String(k.description)),(k==null?void 0:k.showOnNode)!=null&&(b.showOnNode=!!k.showOnNode),b},r={};for(const k of e){if((i=k==null?void 0:k.data)!=null&&i.isWorkspaceGroup)continue;const b=t[k.id]&&typeof t[k.id]=="object"?{...t[k.id]}:{},S=((o=k.data)==null?void 0:o.definitionId)||k.id,j=((a=k.data)==null?void 0:a.inputs)??[],C=((l=k.data)==null?void 0:l.outputs)??[],R=((c=k.data)==null?void 0:c.role)!=null?String(k.data.role).trim():"",I=b.role!=null?String(b.role).trim():"",D=XA[R]||R,E=XA[I]||I,O=Jf.includes(D)?D:Jf.includes(E)?E:"normal",z=Array.isArray(j)?j.map(n):Array.isArray(b.input)?b.input.map(be=>n(be)):[],W=Array.isArray(C)?C.map(n):Array.isArray(b.output)?b.output.map(be=>n(be)):[],$=((u=k.data)==null?void 0:u.label)!=null?String(k.data.label):b.label!=null?String(b.label):k.id,H=(f=k.data)==null?void 0:f.body,P=H!=null?String(H):b.body!=null?String(b.body):"";let F=((p=k.data)==null?void 0:p.model)!=null&&String(k.data.model).trim()!==""?String(k.data.model).trim():b.model!=null&&String(b.model).trim()!==""?String(b.model).trim():void 0;(F===""||F==="default")&&(F=void 0);const L={...b,definitionId:S,label:$,role:O,model:F,input:z,output:W},q=((d=k.data)==null?void 0:d.marketplaceRef)||b.marketplaceRef;q?L.marketplaceRef=String(q):delete L.marketplaceRef;const M=((m=k.data)==null?void 0:m.marketplacePackageId)||b.marketplacePackageId;M?L.marketplacePackageId=String(M):delete L.marketplacePackageId;const te=((g=k.data)==null?void 0:g.marketplaceVersion)||b.marketplaceVersion;te?L.marketplaceVersion=String(te):delete L.marketplaceVersion,S.startsWith("provide_")||P.trim()===""?delete L.body:L.body=P;const G=Array.isArray((v=k.data)==null?void 0:v.images)?k.data.images:Array.isArray(b.images)?b.images:[];G.length>0?L.images=G:delete L.images;const K=(w=k.data)==null?void 0:w.script,oe=K!=null?String(K):b.script!=null?String(b.script):"";oe.trim()===""?delete L.script:L.script=oe;for(const be of["scriptRef","implementationRef","implementationMode"]){const ee=(y=k.data)==null?void 0:y[be],he=ee!=null?String(ee):b[be]!=null?String(b[be]):"";he.trim()===""?delete L[be]:L[be]=he.trim()}delete L.temperature,delete L.maxTokens,delete L.description,r[k.id]=L}return r}function xf(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function tJ(e,t){const n=String(e||"node").replace(/_copy(?:_\d+)?$/i,"");let r=`${n}_copy`,i=2;for(;t.has(r);)r=`${n}_copy_${i}`,i+=1;return t.add(r),r}function nJ(e,t,n){const r=(e||[]).filter(a=>a==null?void 0:a.selected);if(r.length===0)return null;const i=new Set(r.map(a=>a.id)),o=(t||[]).filter(a=>i.has(a.source)&&i.has(a.target));return{version:1,nodes:r.map(a=>xf(a)),edges:o.map(a=>xf(a)),instances:wS(r,n||{})}}function rJ(e,t,n,r,i={}){var p;if(!e||!Array.isArray(e.nodes)||e.nodes.length===0)return null;const o=i.offset||{x:48,y:48},a=new Set((t||[]).map(d=>d.id)),l=new Map;for(const d of e.nodes)l.set(d.id,tJ(d.id,a));const c=e.nodes.map(d=>{var g,v;const m=l.get(d.id);return{...xf(d),id:m,selected:!0,dragging:!1,position:{x:Number(((g=d.position)==null?void 0:g.x)||0)+o.x,y:Number(((v=d.position)==null?void 0:v.y)||0)+o.y}}}),u=(e.edges||[]).filter(d=>l.has(d.source)&&l.has(d.target)).map((d,m)=>{const g=l.get(d.source),v=l.get(d.target);return{...xf(d),id:`e-${g}-${v}-${Date.now()}-${m}`,source:g,target:v,selected:!1}}),f={...r||{}};for(const[d,m]of l.entries()){const g=(p=e.instances)==null?void 0:p[d];g&&(f[m]={...xf(g),label:g.label!=null?String(g.label):m})}return{nodes:[...(t||[]).map(d=>({...d,selected:!1})),...c],edges:[...(n||[]).map(d=>({...d,selected:!1})),...u],instances:f,pastedNodeIds:c.map(d=>d.id)}}const sJ=new Map([["文本","text"],["str","text"],["string","text"],["文件","file"],["path","file"],["节点","node"],["flow","node"],["control","node"],["boolean","bool"],["布尔","bool"],["object","json"]]),iJ=new Set(["json>text"]),oJ=Object.freeze({text:"#2196f3",file:"#4caf50",node:"#ff9800",bool:"#9c27b0",json:"#00bcd4",image:"#ec407a",any:"#9e9e9e"});function Ng(e){const t=String(e??"").trim().toLowerCase();return sJ.get(t)||t||"node"}function qO(e,t){const n=Ng(e),r=Ng(t);return n==="any"||r==="any"?{compatible:!0,kind:"any",source:n,target:r}:n===r?{compatible:!0,kind:"exact",source:n,target:r}:iJ.has(`${n}>${r}`)?{compatible:!0,kind:"lossless",source:n,target:r}:{compatible:!1,kind:"incompatible",source:n,target:r}}function aJ(e,t){return qO(e,t).compatible}function lJ(e){return oJ[Ng(e)]||"#9e9e9e"}function or(e){return lJ(e)}const cJ=new Set(["knowledgeContext","workspaceContext","skillsContext","mcpContext"]);function ov(e){const t=Ng(e==null?void 0:e.type),n=String((e==null?void 0:e.name)||(e==null?void 0:e.id)||"").trim();return t==="text"&&cJ.has(n)?`${t}+${n}`:t}function av(e){return ov(e)}function Xf(e,t){if(!e||!t||!aJ(e.type,t.type))return!1;const n=ov(e),r=ov(t),i=n.includes("+"),o=r.includes("+");return i||o?n===r:!0}function uJ(e,t){const n=new RegExp(`^${t}-(\\d+)$`).exec(String(e||""));if(!n)return-1;const r=Number.parseInt(n[1],10);return Number.isFinite(r)?r:-1}function Qf(e,t,n){var l;const r=n==="source"?"outputs":"inputs",o=uJ(t,n==="source"?"output":"input");return o<0?null:(Array.isArray((l=e==null?void 0:e.data)==null?void 0:l[r])?e.data[r]:[])[o]||null}const _g=/\[image\s+(\d+)\]/gi;function zo(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map((t,n)=>({id:String(t.id||`image-${n+1}`),label:String(t.label||`image ${n+1}`),name:String(t.name||`image-${n+1}`),mimeType:String(t.mimeType||t.type||"image/png"),dataUrl:String(t.dataUrl||t.data||"")})).filter(t=>t.dataUrl.startsWith("data:image/")):[]}function dJ(e){return`image ${zo(e).length+1}`}function fJ(e,t){const n=String(e||""),r=`[${t}]`;return n.trim()?`${n.replace(/[ \t]+$/u,"")} ${r}`:r}function pJ(e,t){const n=zo(e),r=String(t||""),i=new Set;_g.lastIndex=0;let o;for(;o=_g.exec(r);)i.add(`image ${o[1]}`.toLowerCase());return i.size===0?[]:n.filter(a=>i.has(String(a.label||"").toLowerCase()))}function hJ(e){return new Promise((t,n)=>{if(!e||!String(e.type||"").startsWith("image/")){n(new Error("Only image files are supported"));return}const r=new FileReader;r.onload=()=>{t({name:e.name||"image",mimeType:e.type||"image/png",dataUrl:String(r.result||"")})},r.onerror=()=>n(r.error||new Error("Failed to read image")),r.readAsDataURL(e)})}function UO(e){var n;return Array.from(((n=e==null?void 0:e.clipboardData)==null?void 0:n.items)||[]).filter(r=>r.kind==="file"&&String(r.type||"").startsWith("image/")).map(r=>r.getAsFile()).filter(Boolean)}function bf(e){var t;return Array.from(((t=e==null?void 0:e.dataTransfer)==null?void 0:t.files)||[]).filter(n=>String(n.type||"").startsWith("image/"))}async function GO({files:e,body:t,images:n}){const r=Array.from(e||[]);if(r.length===0)return null;let i=String(t||"");const o=zo(n);for(const a of r){const l=await hJ(a),c=dJ(o);o.push({id:`${Date.now().toString(36)}-${o.length+1}`,label:c,...l}),i=fJ(i,c)}return{body:i,images:o}}function mJ(e,t){return(Array.isArray(e)?e:[]).find(n=>String((n==null?void 0:n.name)||"")===String(t||""))}function ja(e,t,n=""){const r=mJ(e,t),i=(r==null?void 0:r.value)??(r==null?void 0:r.default);return i==null||String(i).trim()===""?n:String(i).trim()}function gJ(e){const t=String(e||"").trim();if(!t)return"未配置";const n=t.match(/\$\{flowDir\}\/([^\s'\"]+)/);if(n)return n[1];const r=t.split(/\r?\n/,1)[0];return r.length>88?`${r.slice(0,85)}…`:r}function yJ(e){if(Array.isArray(e))return e;try{const t=JSON.parse(String(e||"[]"));return Array.isArray(t)?t:[]}catch{return[]}}function Ja({label:e}){return s.jsx("div",{className:"af-node-ui-kit__section-heading",children:e})}function wJ({section:e,data:t}){var i;const n=(i=t==null?void 0:t.nodeUiBindings)==null?void 0:i[e.input],r=ja(t==null?void 0:t.inputs,e.input,"未连接");return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__binding",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__binding-value",title:(n==null?void 0:n.display)||r,children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:n?"cable":"data_object"}),s.jsx("code",{children:(n==null?void 0:n.display)||r}),s.jsx("em",{children:n?"CONNECTED":"LITERAL"})]})]})}function YO({section:e,data:t}){const n=t==null?void 0:t[e.field];return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__code",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__code-value",title:String(n||"未配置"),children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"terminal"}),s.jsx("code",{children:gJ(n)})]})]})}function QA({role:e,info:t,data:n}){const r=Array.isArray(t==null?void 0:t.inputs)?t.inputs:[],i=Array.isArray(t==null?void 0:t.outputs)?t.outputs:[];return s.jsxs("button",{type:"button",className:`af-node-ui-kit__loop-target af-node-ui-kit__loop-target--${e} nodrag`,disabled:!(t!=null&&t.id),onPointerDown:o=>o.stopPropagation(),onClick:o=>{var a;o.stopPropagation(),(a=n==null?void 0:n.onEditWhileSubflow)==null||a.call(n,t==null?void 0:t.id,e)},title:t!=null&&t.id?`编辑 ${e==="condition"?"Condition":"Body"} 子流程`:"尚未创建子流程",children:[s.jsx("span",{className:"af-node-ui-kit__loop-role",children:e==="condition"?"CONDITION":"BODY"}),s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:e==="condition"?"rule":"account_tree"}),s.jsxs("div",{children:[s.jsx("strong",{children:(t==null?void 0:t.label)||(t==null?void 0:t.id)||"未绑定"}),s.jsxs("em",{children:[Number(t==null?void 0:t.nodeCount)||0," 个内部节点"]})]}),s.jsxs("code",{children:["IN ",r.length?r.join(" · "):"—"]}),s.jsxs("code",{children:["OUT ",i.length?i.join(" · "):"—"]}),s.jsx("span",{className:"material-symbols-outlined af-node-ui-kit__loop-open","aria-hidden":!0,children:"arrow_forward"})]})}function xJ({section:e,data:t}){const n=t==null?void 0:t.whileSubflowInfo;return!(n!=null&&n.condition)&&!(n!=null&&n.body)?s.jsx(YO,{section:e,data:t}):s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__loop",children:[s.jsx(Ja,{label:e.label}),s.jsxs("div",{className:"af-node-ui-kit__loop-targets",children:[s.jsx(QA,{role:"condition",info:n.condition,data:t}),s.jsx(QA,{role:"body",info:n.body,data:t})]}),s.jsxs("div",{className:"af-node-ui-kit__loop-state-path",children:[s.jsx("span",{children:"stateₙ"}),s.jsx("b",{children:"→ check → run →"}),s.jsx("span",{children:"stateₙ₊₁"})]})]})}function bJ({section:e,data:t}){var p;const n=ja(t==null?void 0:t.outputs,e.output,"").toLowerCase(),r=(p=t==null?void 0:t.whileSubflowInfo)!=null&&p.condition?"Condition.decision":e.source,i=Array.isArray(e.options)?e.options:[],o=i.find(d=>d.value===n),l=n?n==="done"||n==="fail"?"FINAL DECISION":"CURRENT DECISION":"AWAITING DECISION",c=(o==null?void 0:o.label)||n||"尚未运行",u=(o==null?void 0:o.description)||(n?`Condition 返回了 ${n}`:`等待 ${r||e.output} 返回结果`),f=i.length?i.map(d=>`${d.label}: ${d.description||d.value}`).join(`
125
+ `):"Condition 的输出决定 While 下一步行为";return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__decision",children:[s.jsxs("div",{className:"af-node-ui-kit__section-title-row",children:[s.jsx(Ja,{label:e.label}),r?s.jsx("code",{children:r}):null]}),s.jsxs("div",{className:`af-node-ui-kit__decision-status af-node-ui-kit__tone--${(o==null?void 0:o.tone)||"neutral"}`,children:[s.jsx("span",{className:"af-node-ui-kit__decision-phase",children:l}),s.jsx("strong",{className:n?"is-resolved":"",children:c}),s.jsx("em",{title:u,children:u}),s.jsx("span",{className:"material-symbols-outlined af-node-ui-kit__decision-help nodrag",title:f,"aria-label":"查看决策语义",children:"help"})]})]})}function kJ({section:e,data:t}){return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__metrics",children:[s.jsx(Ja,{label:e.label}),s.jsx("div",{className:"af-node-ui-kit__metric-grid",children:(e.items||[]).map(n=>{const r=n.output?ja(t==null?void 0:t.outputs,n.output,"0"):ja(t==null?void 0:t.inputs,n.input,"—"),i=n.maxInput?ja(t==null?void 0:t.inputs,n.maxInput,"—"):"",o=n.maxInput||(n.output?"":n.input),a=o?ja(t==null?void 0:t.inputs,o,""):"";return s.jsxs("div",{className:"af-node-ui-kit__metric",children:[s.jsx("span",{children:n.label}),o?s.jsxs("div",{className:"af-node-ui-kit__metric-edit nodrag",onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[n.output?s.jsxs("strong",{children:[r," /"]}):null,s.jsx("input",{type:o==="maxIterations"?"number":"text",min:o==="maxIterations"?"1":void 0,max:o==="maxIterations"?"1000":void 0,value:a,disabled:!!(t!=null&&t.readOnly),"aria-label":n.label,onChange:l=>{var c;return(c=t==null?void 0:t.onNodeInputValueChange)==null?void 0:c.call(t,o,l.target.value)}}),n.suffix?s.jsx("em",{children:n.suffix}):null]}):s.jsxs("strong",{children:[r,i?` / ${i}`:"",n.suffix||""]})]},`${n.label}-${n.input||n.output}`)})})]})}function vJ({section:e,data:t}){const n=ja(t==null?void 0:t.outputs,e.output,"尚未运行");return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__summary",children:[s.jsx(Ja,{label:e.label}),s.jsx("p",{title:n,children:n})]})}function jJ({section:e,data:t}){const n=yJ(ja(t==null?void 0:t.outputs,e.output,"[]")).slice(-e.limit);return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__history",children:[s.jsx(Ja,{label:e.label}),n.length?s.jsx("ol",{children:n.map((r,i)=>s.jsxs("li",{children:[s.jsxs("b",{children:["#",(r==null?void 0:r.iteration)??i+1]}),s.jsx("span",{className:`af-node-ui-kit__history-decision af-node-ui-kit__tone--${(r==null?void 0:r.decision)==="wait"?"amber":(r==null?void 0:r.decision)==="done"?"green":(r==null?void 0:r.decision)==="fail"?"red":"purple"}`,children:(r==null?void 0:r.decision)||"event"}),s.jsx("em",{children:(r==null?void 0:r.summary)||"无摘要"})]},`${(r==null?void 0:r.iteration)||i}-${(r==null?void 0:r.decision)||"event"}`))}):s.jsx("p",{children:"尚无迭代记录"})]})}function SJ({section:e,data:t}){const n=(t==null?void 0:t.subflowInfo)||{},r=Array.isArray(n.inputs)?n.inputs:[],i=Array.isArray(n.outputs)?n.outputs:[];return s.jsxs("section",{className:"af-node-ui-kit__section af-node-ui-kit__subflow",children:[s.jsx(Ja,{label:e.label}),s.jsxs("button",{type:"button",className:"af-node-ui-kit__subflow-target nodrag",disabled:!n.id,onPointerDown:o=>o.stopPropagation(),onClick:o=>{var a;o.stopPropagation(),(a=t==null?void 0:t.onEditWhileSubflow)==null||a.call(t,n.id,"call")},title:n.id?"编辑子流程":"尚未绑定子流程",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"account_tree"}),s.jsxs("div",{children:[s.jsx("strong",{children:n.label||n.id||"未绑定"}),s.jsxs("em",{children:[Number(n.nodeCount)||0," 个内部节点"]})]}),s.jsx("span",{className:"material-symbols-outlined af-node-ui-kit__subflow-open","aria-hidden":!0,children:"open_in_new"})]}),s.jsxs("div",{className:"af-node-ui-kit__subflow-contract",children:[s.jsxs("span",{children:["IN ",r.length?r.join(" · "):"—"]}),s.jsxs("span",{children:["OUT ",i.length?i.join(" · "):"—"]})]})]})}function JO({data:e}){var n;const t=(n=e==null?void 0:e.nodeUi)==null?void 0:n.card;return!t||!Array.isArray(t.sections)?null:s.jsx("div",{className:`af-node-ui-kit af-node-ui-kit--${t.template||"details"} af-node-ui-kit--tone-${t.tone||"neutral"}`,children:t.sections.map((r,i)=>{const o=`${r.type}-${r.label}-${i}`;return r.type==="binding"?s.jsx(wJ,{section:r,data:e},o):r.type==="code"?s.jsx(YO,{section:r,data:e},o):r.type==="loop"?s.jsx(xJ,{section:r,data:e},o):r.type==="decision"?s.jsx(bJ,{section:r,data:e},o):r.type==="metrics"?s.jsx(kJ,{section:r,data:e},o):r.type==="summary"?s.jsx(vJ,{section:r,data:e},o):r.type==="history"?s.jsx(jJ,{section:r,data:e},o):r.type==="subflow"?s.jsx(SJ,{section:r,data:e},o):null})})}function Us(e){const t=e.indexOf(" - ");return t>=0?e.slice(0,t).trim():e.trim()}function NJ(e){var r;const t=(r=e==null?void 0:e.definitionId)==null?void 0:r.trim();if(t&&t!=="普通")return t;const n=((e==null?void 0:e.schemaType)??"agent").toLowerCase();return n&&n!=="普通"?n:"agent"}function _J(e){return["true","1","yes","on"].includes(String((e==null?void 0:e.value)??(e==null?void 0:e.default)??"").trim().toLowerCase())}function $d(e){try{return JSON.parse(String(e||"").trim()),!0}catch{return!1}}function lv(e){try{return{valid:!0,value:JSON.parse(String(e||"").trim())}}catch(t){return{valid:!1,value:null,error:String((t==null?void 0:t.message)||"JSON 格式错误")}}}function CJ(e){return Array.isArray(e)?`ARRAY · ${e.length}`:e&&typeof e=="object"?`OBJECT · ${Object.keys(e).length}`:e===null?"NULL":(typeof e).toUpperCase()}function cv(e){if(Array.isArray(e)){const t=e.slice(0,2).map(n=>n&&typeof n=="object"&&!Array.isArray(n)?Object.values(n).filter(r=>["string","number"].includes(typeof r)).slice(0,2).join(" · "):String(n??"null")).filter(Boolean).join(" / ");return`Array(${e.length})${t?` · ${t}`:""}`}if(e&&typeof e=="object"){const t=Object.keys(e);return`Object(${t.length})${t.length?` · ${t.slice(0,3).join(" · ")}`:""}`}return typeof e=="string"?e||'""':JSON.stringify(e)}function tb(e){return Array.isArray(e)&&e.length>0&&e.every(t=>t&&typeof t=="object"&&!Array.isArray(t))}function AJ(e){const t=[];for(const n of e.slice(0,20))for(const r of Object.keys(n))if(t.includes(r)||t.push(r),t.length>=6)return t;return t}function EJ({label:e,rows:t}){const n=AJ(t),r=t.slice(0,50);return s.jsxs("details",{className:"af-flow-node__json-collection",open:!0,children:[s.jsxs("summary",{children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"chevron_right"}),s.jsx("code",{children:e}),s.jsxs("em",{children:["Array(",t.length,")"]})]}),s.jsxs("div",{className:"af-flow-node__json-table-scroll",children:[s.jsxs("table",{children:[s.jsx("thead",{children:s.jsx("tr",{children:n.map(i=>s.jsx("th",{children:i},i))})}),s.jsx("tbody",{children:r.map((i,o)=>s.jsx("tr",{children:n.map(a=>{const l=i==null?void 0:i[a],c=cv(l);return s.jsx("td",{title:c,children:c},a)})},String((i==null?void 0:i.id)??o)))})]}),t.length>r.length?s.jsxs("div",{className:"af-flow-node__json-more",children:["还有 ",t.length-r.length," 行,请进入编辑器查看"]}):null]})]})}function IJ({text:e,readOnly:t,onEdit:n}){const r=lv(e),i=r.valid&&r.value&&typeof r.value=="object"?Array.isArray(r.value)?r.value.map((c,u)=>[String(u),c]):Object.entries(r.value):r.valid?[["value",r.value]]:[],o=r.valid&&tb(r.value)?[["items",r.value]]:[],a=o.length?o:i.filter(([,c])=>tb(c)),l=o.length?[]:i.filter(([,c])=>!tb(c));return s.jsxs("div",{className:`af-flow-node__json-card nodrag${r.valid?"":" is-invalid"}`,onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsxs("div",{className:"af-flow-node__json-card-head",children:[s.jsxs("span",{className:"af-flow-node__json-kind",children:["{}"," ",r.valid?CJ(r.value):"INVALID JSON"]}),s.jsxs("button",{type:"button",onClick:n,"aria-label":t?"查看 JSON":"编辑 JSON",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:t?"visibility":"edit"}),t?"查看":"编辑 JSON"]})]}),r.valid?s.jsxs("div",{className:"af-flow-node__json-content",children:[l.length?s.jsx("div",{className:"af-flow-node__json-rows",children:l.map(([c,u])=>s.jsxs("div",{className:"af-flow-node__json-row",children:[s.jsx("code",{children:c}),s.jsx("span",{title:cv(u),children:cv(u)})]},c))}):null,a.map(([c,u])=>s.jsx(EJ,{label:c,rows:u},c))]}):s.jsx("div",{className:"af-flow-node__json-error",children:r.error})]})}function Lt(e){e.stopPropagation()}function Cg({slots:e=[],direction:t="in",connectable:n=!0}){const{t:r}=Fr(),i=t==="in",o=Array.isArray(e)?e:[];return s.jsx("div",{className:`af-flow-node__ports af-flow-node__ports--${i?"in":"out"}`,children:o.map((a,l)=>{if((a==null?void 0:a.showOnNode)===!1)return null;const c=(a==null?void 0:a.name)||`#${l+1}`,u=r(i?"flow:node.inputTooltip":"flow:node.outputTooltip",{name:(a==null?void 0:a.name)||`#${l}`,type:a==null?void 0:a.type})+((a==null?void 0:a.default)!=null&&a.default!==""?r("flow:node.defaultSuffix",{value:a.default}):"");return s.jsxs("div",{className:"af-flow-node__port-row",title:u,children:[s.jsxs("span",{className:`af-flow-node__port-label af-flow-node__port-label--${i?"in":"out"}`,children:[c,a!=null&&a.required?s.jsx("span",{className:"af-flow-node__port-required",children:"*"}):null]}),s.jsx(ar,{type:i?"target":"source",position:i?pt.Left:pt.Right,id:`${i?"input":"output"}-${l}`,className:"af-flow-node__handle",style:{background:or(a==null?void 0:a.type)},title:u,isConnectable:n&&(a==null?void 0:a.connectable)!==!1})]},`${i?"in":"out"}-${l}`)})})}function PJ(e){return String(e||"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function TJ(e,t){const n=`\\[${PJ(t)}\\]`;return String(e||"").replace(new RegExp(`[ \\t]*${n}`,"gi"),"").replace(/[ \t]+\n/g,`
125
126
  `).replace(/\n{3,}/g,`
126
127
 
127
128
  `).trimEnd()}function nb(e){return String(e||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function RJ(e){const t=String(e||"");let n="",r=0;_g.lastIndex=0;let i;for(;i=_g.exec(t);)n+=nb(t.slice(r,i.index)),n+=`<span class="af-flow-node__image-token">${nb(i[0])}</span>`,r=i.index+i[0].length;return n+=nb(t.slice(r)),n||" "}function rb(e){return(Array.isArray(e)?e:[]).map(t=>String(t??"").trim()).filter(Boolean)}function MJ({nodeTitle:e,definitionId:t,description:n,guide:r,inputs:i,outputs:o,onClose:a}){const{t:l}=Fr(),[c,u]=h.useState(!1),f=String((r==null?void 0:r.summary)||n||"").trim(),p=rb(r==null?void 0:r.prerequisites),d=rb(r==null?void 0:r.steps),m=rb(r==null?void 0:r.notes),g=String((r==null?void 0:r.example)||"").trim();h.useEffect(()=>{const y=k=>{k.key==="Escape"&&(k.preventDefault(),a())};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[a]);const v=async()=>{var y;if(!(!g||typeof navigator>"u"||!((y=navigator.clipboard)!=null&&y.writeText)))try{await navigator.clipboard.writeText(g),u(!0),window.setTimeout(()=>u(!1),1600)}catch{}},w=(y,k)=>s.jsx("div",{className:"af-node-guide__slots",children:(Array.isArray(y)?y:[]).map((b,S)=>{const j=String((b==null?void 0:b.name)||`#${S+1}`),C=String((b==null?void 0:b.type)||"node"),R=String((b==null?void 0:b.default)??(b==null?void 0:b.value)??"");return s.jsxs("div",{className:"af-node-guide__slot",children:[s.jsxs("div",{className:"af-node-guide__slot-head",children:[s.jsx("code",{children:j}),s.jsx("span",{children:C}),s.jsx("em",{className:b!=null&&b.required?"is-required":"",children:b!=null&&b.required?l("flow:node.guideRequired"):l("flow:node.guideOptional")})]}),b!=null&&b.description?s.jsx("p",{children:String(b.description)}):null,R!==""?s.jsx("small",{children:l("flow:node.guideDefault",{value:R})}):null]},`${k}-${S}-${j}`)})});return sr.createPortal(s.jsx("div",{className:"af-node-guide nodrag",role:"presentation",onClick:a,onPointerDown:Lt,onMouseDown:Lt,onWheel:Lt,children:s.jsxs("section",{className:"af-node-guide__panel",role:"dialog","aria-modal":"true","aria-label":`${e} · ${l("flow:node.guideTitle")}`,onClick:Lt,children:[s.jsxs("header",{className:"af-node-guide__header",children:[s.jsxs("div",{className:"af-node-guide__heading",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":"true",children:"help"}),s.jsxs("div",{children:[s.jsx("h2",{children:e}),s.jsxs("p",{children:[t," · ",l("flow:node.guideTitle")]})]})]}),s.jsx("button",{type:"button",onClick:a,"aria-label":l("flow:node.guideClose"),title:l("flow:node.guideClose"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsxs("div",{className:"af-node-guide__content",children:[f?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guideSummary")}),s.jsx("p",{children:f})]}):null,p.length?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guidePrerequisites")}),s.jsx("ul",{children:p.map((y,k)=>s.jsx("li",{children:y},`pre-${k}`))})]}):null,d.length?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guideSteps")}),s.jsx("ol",{children:d.map((y,k)=>s.jsx("li",{children:y},`step-${k}`))})]}):null,i!=null&&i.length?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guideInputs")}),w(i,"input")]}):null,o!=null&&o.length?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guideOutputs")}),w(o,"output")]}):null,g?s.jsxs("section",{children:[s.jsxs("div",{className:"af-node-guide__section-heading",children:[s.jsx("h3",{children:l("flow:node.guideExample")}),s.jsxs("button",{type:"button",className:"af-node-guide__copy",onClick:v,children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":"true",children:c?"check":"content_copy"}),l(c?"flow:node.guideCopied":"flow:node.guideCopy")]})]}),s.jsx("pre",{children:g})]}):null,m.length?s.jsxs("section",{children:[s.jsx("h3",{children:l("flow:node.guideNotes")}),s.jsx("ul",{children:m.map((y,k)=>s.jsx("li",{children:y},`note-${k}`))})]}):null]})]})}),document.body)}function $J(e,t){const n=window.getComputedStyle(e),r=Number.parseFloat(n.lineHeight)||18,i=Number.parseFloat(n.paddingTop)||0,o=Number.parseFloat(n.paddingBottom)||0,a=Number.parseFloat(n.borderTopWidth)||0,l=Number.parseFloat(n.borderBottomWidth)||0,c=String(t||"").split(/\r\n|\r|\n/).length,u=Math.min(Math.max(c,2),8);return Math.ceil(u*r+i+o+a+l)}function OJ({data:e,selected:t,id:n,deleteNode:r,onProvideExpand:i,onProvideValueChange:o,onNodeBodyChange:a,onNodeImagesChange:l,modelLists:c,onModelChange:u,deferTextCommit:f=!1}){var $e,nt,ct,Dt;const{t:p}=Fr(),d=(e==null?void 0:e.inputs)??[],m=(e==null?void 0:e.outputs)??[],g=((e==null?void 0:e.schemaType)??"agent").toLowerCase(),v=NJ(e),w=(e==null?void 0:e.isRunMode)??!1,y=!!(e!=null&&e.readOnly),k=(e==null?void 0:e.isExecuting)??!1,b=(e==null?void 0:e.isDim)??!1,S=(e==null?void 0:e.nodeStatus)??null,j=(e==null?void 0:e.nodeElapsed)??null,C=(e==null?void 0:e.nodeRunDetail)??null,R=(e==null?void 0:e.definitionId)||"",I=($e=e==null?void 0:e.nodeUi)==null?void 0:$e.card,D=!!(I&&Array.isArray(I.sections)),E=!!((nt=I==null?void 0:I.sections)!=null&&nt.some(ge=>(ge==null?void 0:ge.type)==="subflow")),O=R==="control_while"&&!!(e!=null&&e.whileSubflowInfo),z=R==="tool_jenkins_build",W=String((C==null?void 0:C.jenkinsStatus)||((C==null?void 0:C.phase)==="queued"?"QUEUED":(C==null?void 0:C.phase)==="running"?"RUNNING":"")).toUpperCase(),$=R.startsWith("provide_"),H=R==="provide_bool",P=R==="provide_str",F=R==="provide_json",L=R==="provide_file",q=R==="provide_password",M=R==="agent_subAgent",te=R==="control_agent_toBool",G=(M||te)&&!w,K=H?_J(m[0]):!1,oe=$?String(((ct=m[0])==null?void 0:ct.value)??((Dt=m[0])==null?void 0:Dt.default)??(e==null?void 0:e.body)??""):"",be=String((e==null?void 0:e.body)||""),ee=(e==null?void 0:e.displayLabel)||(e==null?void 0:e.label)||p("flow:node.fallbackLabel"),he=!$&&!G&&(e!=null&&e.showBodyPreview)?String((e==null?void 0:e.body)||"").trim():"",me=zo(e==null?void 0:e.images),re=H||P||F||L||q||G||!!he||D,le=h.useRef(!1),ve=h.useRef(!1),ae=h.useRef(null),de=h.useRef(null),Ae=h.useRef(null),Te=h.useRef(null),Ie=h.useRef(null),[Oe,pe]=h.useState(oe),[Ce,qe]=h.useState(!1),[Xe,bt]=h.useState(!1),[Be,st]=h.useState(be),[kt,je]=h.useState(!1),[se,N]=h.useState({visible:!1,top:0,height:100}),[ne,ye]=h.useState(!1),[ke,Se]=h.useState(!1),Me=h.useCallback(()=>{const ge=de.current;if(!ge)return;const He=Math.max(1,ge.scrollHeight),At=Math.max(1,ge.clientHeight),Rt=He>At+1,ln=Rt?Math.max(12,At/He*100):100,Nn=Math.max(0,100-ln),bn=Rt?Math.min(Nn,ge.scrollTop/Math.max(1,He-At)*Nn):0;N({visible:Rt,top:bn,height:ln})},[]);h.useEffect(()=>{le.current||pe(oe)},[n,oe]),h.useEffect(()=>{qe(!1)},[n]),h.useEffect(()=>{ve.current||st(be)},[n,be]),h.useEffect(()=>{const ge=de.current;if(!ge)return;if(G){ge.style.minHeight="",ge.style.height="",Ae.current&&(Ae.current.style.minHeight="",Ae.current.style.height="");return}const He=$J(ge,Be);ge.style.minHeight=`${He}px`,ge.style.height="",Ae.current&&(Ae.current.style.minHeight=`${He}px`,Ae.current.style.height="")},[Be,G]),h.useEffect(()=>{if(!G)return;const ge=window.requestAnimationFrame(Me),He=de.current;if(!He||typeof ResizeObserver>"u")return()=>window.cancelAnimationFrame(ge);const At=new ResizeObserver(Me);return At.observe(He),()=>{window.cancelAnimationFrame(ge),At.disconnect()}},[Be,G,Me]),h.useEffect(()=>{const ge=ae.current,He=e==null?void 0:e.onNodeContentResize;if(!G||!ge||!He||typeof ResizeObserver>"u")return;let At=0;const Rt=()=>{window.cancelAnimationFrame(At),At=window.requestAnimationFrame(()=>He(n))},ln=new ResizeObserver(Rt);return ln.observe(ge),Rt(),()=>{window.cancelAnimationFrame(At),ln.disconnect()}},[e==null?void 0:e.onNodeContentResize,G,n]),h.useEffect(()=>{if(!ne)return;const ge=window.setTimeout(()=>{const He=Ie.current;if(!He)return;He.focus();const At=He.value.length;He.setSelectionRange(At,At)},0);return()=>window.clearTimeout(ge)},[ne]);const U=Array.isArray(c==null?void 0:c.cursor)?c.cursor:[],xe=Array.isArray(c==null?void 0:c.opencode)?c.opencode:[],Q=Array.isArray(c==null?void 0:c.claudeCode)?c.claudeCode:[],fe=Array.isArray(c==null?void 0:c.codex)?c.codex:[],ce=((e==null?void 0:e.model)??"").trim(),_e=g==="agent"&&!R.startsWith("tool_nodejs"),Ee=new Set(U.map(Us)),Ve=new Set(xe.map(Us)),Ye=new Set(Q.map(Us)),at=new Set(fe.map(Us)),ht=ce?ce.startsWith("cursor:")||ce.startsWith("opencode:")||ce.startsWith("codex:")||ce.startsWith("claude-code:")?ce:Ye.has(ce)?`claude-code:${ce}`:at.has(ce)?`codex:${ce}`:Ve.has(ce)?`opencode:${ce}`:Ee.has(ce)?`cursor:${ce}`:ce:"",jt=ce&&!ht.startsWith("cursor:")&&!ht.startsWith("opencode:")&&!ht.startsWith("codex:")&&!ht.startsWith("claude-code:")&&!Ee.has(ce)&&!Ve.has(ce)&&!Ye.has(ce)&&!at.has(ce),ot=ce.startsWith("cursor:")?ce.slice(7):ce.startsWith("opencode:")?ce.slice(9):ce.startsWith("codex:")?ce.slice(6):ce.startsWith("claude-code:")?ce.slice(12):ce,sn=ge=>{if(y)return;const He=ge.target.value;u&&u(n,He)},vn=ge=>{ge.stopPropagation(),!y&&r&&r(n)},jn=ge=>{ge.stopPropagation(),i&&i()},lr=ge=>{ge.stopPropagation(),!y&&(o==null||o(n,ge.target.value==="true"?"true":"false"))},Mr=ge=>{if(ge.stopPropagation(),y)return;const He=ge.target.value;pe(He),!f&&!le.current&&(o==null||o(n,He))},An=ge=>{ge.stopPropagation(),le.current=!0},Zn=ge=>{if(ge.stopPropagation(),y)return;le.current=!1;const He=ge.currentTarget.value;pe(He),f||o==null||o(n,He)},qn=()=>{y||f&&Oe===oe||o==null||o(n,Oe)},pr=ge=>{ge.stopPropagation();const He=lv(Oe);He.valid&&pe(JSON.stringify(He.value,null,2)),qe(!0)},hr=ge=>{ge.stopPropagation();const He=lv(Oe);if(!He.valid)return;const At=JSON.stringify(He.value,null,2);pe(At),y||o==null||o(n,At),qe(!1)},ts=ge=>{if(ge.stopPropagation(),y)return;if(typeof(e==null?void 0:e.onOpenProvideFilePicker)=="function"){e.onOpenProvideFilePicker(n,Oe);return}const He=window.prompt("文件路径",Oe);He!=null&&(pe(He),o==null||o(n,He))},hs=ge=>{ge.stopPropagation(),bt(He=>!He)},Wn=ge=>{if(st(ge),a==null||a(n,ge),l){const He=pJ(me,ge);(He.length!==me.length||He.some((At,Rt)=>{var ln;return At.id!==((ln=me[Rt])==null?void 0:ln.id)}))&&l(n,He)}},jr=ge=>{if(ge.stopPropagation(),y)return;const He=ge.target.value;f||ve.current?st(He):Wn(He)},er=ge=>{ge.stopPropagation(),!y&&(ve.current=!0,je(!0))},mr=ge=>{if(ge.stopPropagation(),y)return;ve.current=!1,je(!1);const He=ge.currentTarget.value;f?st(He):Wn(He)},Hn=()=>{y||(ve.current=!1,je(!1),!(f&&Be===be)&&Wn(Be))},Es=ge=>{ge.stopPropagation(),ge.preventDefault(),!y&&ye(!0)},$r=()=>{ye(!1),Hn()},an=ge=>{ge.stopPropagation(),ge.key==="Escape"&&(ge.preventDefault(),$r())},hn=h.useCallback(ge=>{const He=de.current;if(!He)return;const At=Math.max(0,He.scrollHeight-He.clientHeight);He.scrollTop=Math.min(1,Math.max(0,ge))*At,Me()},[Me]),Ln=h.useCallback((ge,He=0)=>{const At=Te.current;if(!At)return 0;const Rt=At.getBoundingClientRect(),ln=se.height/100*Rt.height,Nn=Math.max(1,Rt.height-ln);return(ge-Rt.top-He)/Nn},[se.height]),Sn=h.useCallback(ge=>{var Nr,ns;if(!se.visible)return;ge.preventDefault(),ge.stopPropagation();const He=Te.current;if(!He)return;const At=He.getBoundingClientRect(),Rt=se.top/100*At.height,ln=se.height/100*At.height,bn=ge.clientY>=At.top+Rt&&ge.clientY<=At.top+Rt+ln?ge.clientY-At.top-Rt:ln/2;hn(Ln(ge.clientY,bn));const Br=ge.pointerId;(ns=(Nr=ge.currentTarget).setPointerCapture)==null||ns.call(Nr,Br);const tr=Zt=>{Zt.preventDefault(),hn(Ln(Zt.clientY,bn))},Sr=()=>{window.removeEventListener("pointermove",tr),window.removeEventListener("pointerup",Sr),window.removeEventListener("pointercancel",Sr)};window.addEventListener("pointermove",tr),window.addEventListener("pointerup",Sr),window.addEventListener("pointercancel",Sr)},[Ln,se.height,se.top,se.visible,hn]),Nt=async ge=>{if(y)return;const He=await GO({files:ge,body:Be,images:me});He&&(st(He.body),a==null||a(n,He.body),l==null||l(n,He.images))},cr=(ge,He)=>{if(ge.stopPropagation(),y)return;const At=me.filter(ln=>ln.id!==He.id),Rt=TJ(Be,He.label);st(Rt),a==null||a(n,Rt),l==null||l(n,At)},Vt=ge=>{if(y)return;const He=UO(ge);He.length!==0&&(ge.preventDefault(),ge.stopPropagation(),Nt(He).catch(()=>{}))},mn=ge=>{if(y)return;const He=bf(ge);He.length!==0&&(ge.preventDefault(),ge.stopPropagation(),Nt(He).catch(()=>{}))},we=()=>{const ge=de.current,He=Ae.current;!ge||!He||(He.scrollTop=ge.scrollTop,He.scrollLeft=ge.scrollLeft)};return s.jsxs("div",{className:"af-flow-node"+(t?" af-flow-node--selected":"")+(k?" af-flow-node--executing":"")+(S==="success"?" af-flow-node--done":"")+(S==="failed"?" af-flow-node--failed":"")+(S==="outcome_failed"?" af-flow-node--failed":"")+(S==="waiting"?" af-flow-node--waiting":"")+(S==="running"&&!k?" af-flow-node--running-disk":"")+(b?" af-flow-node--dim":"")+(G?" af-flow-node--inline-body-editor":"")+(P?" af-flow-node--provide-text":"")+(F?" af-flow-node--provide-json":"")+(q?" af-flow-node--provide-password":"")+" af-flow-node--"+g.replace(/[^a-z0-9_-]/g,"")+(D?" af-flow-node--node-ui-kit":"")+(E?" af-flow-node--subflow-call":"")+(O?" af-flow-node--while-subflow":""),"data-schema":g,children:[s.jsxs("div",{className:"af-flow-node__chrome",children:[D&&I.icon?s.jsx("span",{className:"material-symbols-outlined af-flow-node__kit-icon","aria-hidden":!0,children:I.icon}):null,E?s.jsx("span",{className:"af-flow-node__kind-badge",children:"SUBFLOW CALL"}):null,O?s.jsx("span",{className:"af-flow-node__kind-badge",children:"WHILE · 2 SUBFLOWS"}):null,s.jsx("span",{className:"af-flow-node__title af-flow-node__title--chrome",title:`${ee}${n?` (${n})`:""}${v?` · ${v}`:""}`,children:ee}),!w&&_e&&s.jsxs("div",{className:"af-flow-node__model-wrap nodrag",onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsxs("select",{className:"af-flow-node__model nodrag",value:ht,onChange:sn,onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,"aria-label":p("flow:node.model"),title:ot||p("flow:node.defaultModel"),disabled:y,children:[s.jsx("option",{value:"",children:p("flow:node.defaultModel")}),jt&&s.jsx("option",{value:ce,children:ce}),U.length>0&&s.jsx("optgroup",{label:"Cursor",children:U.map(ge=>s.jsx("option",{value:`cursor:${Us(ge)}`,children:Us(ge)},`c-${ge}`))}),xe.length>0&&s.jsx("optgroup",{label:"OpenCode",children:xe.map(ge=>s.jsx("option",{value:`opencode:${Us(ge)}`,children:Us(ge)},`o-${ge}`))}),fe.length>0&&s.jsx("optgroup",{label:"Codex",children:fe.map(ge=>s.jsx("option",{value:`codex:${Us(ge)}`,children:Us(ge)},`codex-${ge}`))}),Q.length>0&&s.jsx("optgroup",{label:"Claude Code",children:Q.map(ge=>s.jsx("option",{value:`claude-code:${Us(ge)}`,children:Us(ge)},`cc-${ge}`))})]}),s.jsx("span",{className:"af-flow-node__model-arrow material-symbols-outlined",children:"expand_more"})]}),k&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--executing",children:"EXECUTING"}),S==="running"&&!k&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--running-disk",title:p("flow:node.diskRunning"),children:"RUNNING"}),S==="success"&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--done",children:z&&W?W:j!=null&&String(j).trim()!==""?j:"--"}),S==="waiting"&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--waiting",children:(C==null?void 0:C.phase)==="queued"?"QUEUED":(C==null?void 0:C.phase)==="triggering"?"TRIGGERING":"BUILDING"}),S==="outcome_failed"&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--failed",children:W||"FAILED"}),S==="failed"&&s.jsx("span",{className:"af-flow-node__status-badge af-flow-node__status-badge--failed",children:"FAILED"}),s.jsx("button",{type:"button",className:"af-flow-node__guide-button nodrag",onClick:ge=>{ge.stopPropagation(),Se(!0)},onPointerDown:Lt,onMouseDown:Lt,"aria-label":p("flow:node.openGuide"),title:p("flow:node.openGuide"),children:s.jsx("span",{className:"material-symbols-outlined",children:"help"})}),!w&&$&&!H&&!P&&!L&&!q&&s.jsx("button",{type:"button",className:"af-flow-node__expand",onClick:jn,"aria-label":p("flow:node.expandProvide"),title:p("flow:node.expandProvide"),children:s.jsx("span",{className:"material-symbols-outlined",children:"open_in_full"})}),!w&&s.jsx("button",{type:"button",className:"af-flow-node__delete",disabled:y,onClick:vn,"aria-label":p("flow:node.deleteNode"),title:p("flow:node.deleteNode"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsxs("div",{className:"af-flow-node__body",children:[s.jsx(Cg,{slots:d,direction:"in"}),s.jsxs("div",{className:"af-flow-node__title-wrap",children:[w&&z&&C?s.jsxs("div",{className:"af-flow-node__jenkins-runtime",children:[s.jsxs("div",{className:"af-flow-node__jenkins-runtime-main",children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":"true",children:S==="waiting"?"progress_activity":S==="success"?"check_circle":"error"}),s.jsx("span",{children:C.message||W||"Jenkins Build"})]}),C.buildNumber?s.jsxs("small",{children:["Build #",C.buildNumber]}):null,C.url||C.qrUrl?s.jsxs("div",{className:"af-flow-node__jenkins-runtime-links nodrag",children:[C.url?s.jsx("a",{href:C.url,target:"_blank",rel:"noreferrer",onPointerDown:Lt,onClick:Lt,children:"查看结果"}):null,C.qrUrl?s.jsx("a",{href:C.qrUrl,target:"_blank",rel:"noreferrer",onPointerDown:Lt,onClick:Lt,children:"二维码"}):null]}):null]}):null,H?s.jsxs("select",{className:"af-flow-node__bool-select nodrag"+(K?" af-flow-node__bool-select--true":""),value:K?"true":"false",onChange:lr,onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,"aria-label":"Boolean value",title:K?"true":"false",disabled:y,children:[s.jsx("option",{value:"false",children:"false"}),s.jsx("option",{value:"true",children:"true"})]}):P?s.jsx("textarea",{className:"af-flow-node__inline-text nodrag",value:Oe,onChange:Mr,onCompositionStart:An,onCompositionEnd:Zn,onBlur:qn,onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,placeholder:"输入文本",rows:2,readOnly:y}):F?Ce?s.jsxs("div",{className:"af-flow-node__json-editor nodrag",onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsxs("div",{className:"af-flow-node__json-editor-head",children:[s.jsx("span",{children:$d(Oe)?"JSON 格式正确":"JSON 格式错误"}),s.jsx("button",{type:"button",onClick:hr,disabled:!$d(Oe),children:y?"返回":"完成"})]}),s.jsx("textarea",{className:`af-flow-node__inline-text af-flow-node__inline-json nodrag${$d(Oe)?"":" is-invalid"}`,value:Oe,onChange:Mr,onCompositionStart:An,onCompositionEnd:Zn,onBlur:qn,placeholder:'{"key":"value"}',rows:8,readOnly:y,"aria-invalid":!$d(Oe),title:$d(Oe)?"Valid JSON":"Invalid JSON",spellCheck:!1})]}):s.jsx(IJ,{text:Oe,readOnly:y,onEdit:pr}):L?s.jsxs("div",{className:"af-flow-node__file-value nodrag",onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsx("input",{className:"af-flow-node__file-input nodrag",value:Oe,onChange:Mr,onCompositionStart:An,onCompositionEnd:Zn,onBlur:qn,placeholder:"选择或输入文件路径",title:Oe||"选择或输入文件路径",readOnly:y}),s.jsx("button",{type:"button",className:"af-flow-node__file-picker nodrag",disabled:y,onClick:ts,"aria-label":"选择文件",title:"选择文件",children:s.jsx("span",{className:"material-symbols-outlined",children:"folder_open"})})]}):q?s.jsxs("div",{className:"af-flow-node__password-value nodrag",onPointerDown:Lt,onMouseDown:Lt,onClick:Lt,children:[s.jsx("input",{className:"af-flow-node__password-input nodrag",type:Xe?"text":"password",value:Oe,onChange:Mr,onCompositionStart:An,onCompositionEnd:Zn,onBlur:qn,placeholder:"输入密码或密钥",title:Xe?Oe:"密码已隐藏",autoComplete:"new-password",name:"agentflow-secret",readOnly:y}),s.jsx("button",{type:"button",className:"af-flow-node__password-toggle nodrag",disabled:y,onClick:hs,"aria-label":Xe?"隐藏密码":"预览密码",title:Xe?"隐藏密码":"预览密码",children:s.jsx("span",{className:"material-symbols-outlined",children:Xe?"visibility_off":"visibility"})})]}):G?s.jsxs("div",{ref:ae,className:"af-flow-node__prompt-stack nodrag"+(kt?" af-flow-node__prompt-stack--composing":""),children:[s.jsx("pre",{ref:Ae,className:"af-flow-node__prompt-backdrop","aria-hidden":"true",dangerouslySetInnerHTML:{__html:RJ(Be)+`
@@ -209,7 +210,7 @@ ${n("project:fileTruncated")}`:""]})]}):s.jsx("p",{children:n("project:noNodeFil
209
210
  </body>
210
211
  </html>`}const eL=new Set(["workspaceRoot","pipelineWorkspace","cwd","flowName","runDir","flowDir"]),mX=["workspaceRoot","pipelineWorkspace","cwd","flowName","runDir","flowDir"];function gX(e,t){const n=e.slice(0,t),r=n.lastIndexOf("${");if(r<0)return null;const i=n.slice(r+2);return i.includes("}")?null:{atIndex:r,query:i}}function yX(e){const t=/\$\{([^}]*)\}/g,n=[];let r;for(;(r=t.exec(e))!==null;)n.push({start:r.index,end:r.index+r[0].length,key:r[1]});return n}function aE(e){const t=new Set;if(!Array.isArray(e))return t;for(const n of e){const r=(n==null?void 0:n.name)!=null?String(n.name).trim():"";r&&t.add(r)}return t}function tL(e,{inputNames:t,outputNames:n}){const r=e.trim();if(!r)return!1;if(r.startsWith("input.")){const i=r.slice(6).trim();return i!==""&&t.has(i)}if(r.startsWith("output.")){const i=r.slice(7).trim();return i!==""&&n.has(i)}if(eL.has(r)||t.has(r)||n.has(r))return!0;if(!r.includes(".")){const i=`${r}.md`;if(t.has(i)||n.has(i))return!0}return!1}function nL(e){return{inputNames:aE(e==null?void 0:e.inputs),outputNames:aE(e==null?void 0:e.outputs)}}function wX(e,t,n){const r=nL(t),i=yX(e),o=[];for(const a of i)if(!tL(a.key,r)){const l=a.key.trim()===""?n("flow:placeholder.empty"):a.key.trim();o.push({start:a.start,end:a.end,message:n("flow:placeholder.invalidPlaceholder",{hint:l})})}return o}function xX(e,t){const n=nL(t),r=/\$\{([^}]*)\}/g,i=[];let o=0,a;for(;(a=r.exec(e))!==null;){a.index>o&&i.push({kind:"plain",text:e.slice(o,a.index)});const l=a[0],c=tL(a[1],n);i.push({kind:c?"ph-valid":"ph-invalid",text:l}),o=a.index+l.length}return o<e.length&&i.push({kind:"plain",text:e.slice(o)}),i}function bX(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function kX(e){return e.map(t=>{const n=bX(t.text);return t.kind==="ph-invalid"?`<span class="af-body-ph-invalid">${n}</span>`:t.kind==="ph-valid"?`<span class="af-body-ph-valid">${n}</span>`:n}).join("")}function vX(e,t){const n=[];for(const r of(e==null?void 0:e.inputs)??[]){const i=(r==null?void 0:r.name)!=null?String(r.name).trim():"";if(!i)continue;const o=(r==null?void 0:r.type)!=null?String(r.type):"";n.push({section:"input",insert:`input.${i}`,label:i,subtitle:o?t("flow:placeholder.inputSubtitle",{type:o}):t("flow:placeholder.inputSubtitleNoType")})}for(const r of(e==null?void 0:e.outputs)??[]){const i=(r==null?void 0:r.name)!=null?String(r.name).trim():"";if(!i)continue;const o=(r==null?void 0:r.type)!=null?String(r.type):"";n.push({section:"output",insert:`output.${i}`,label:i,subtitle:o?t("flow:placeholder.outputSubtitle",{type:o}):t("flow:placeholder.outputSubtitleNoType")})}for(const r of mX)eL.has(r)&&n.push({section:"runtime",insert:r,label:r,subtitle:t("flow:placeholder.runtimeConst")});return n}function jX(e,t){const n=t.toLowerCase();return n?e.filter(r=>[r.insert,r.label,r.subtitle??""].map(o=>String(o).toLowerCase()).some(o=>o.includes(n))):e}function SX(e,t){if(!e||t<0)return null;const n=Math.min(t,e.value.length),r=getComputedStyle(e),i=document.createElement("div");i.setAttribute("aria-hidden","true"),i.style.visibility="hidden",i.style.position="fixed",i.style.top="0",i.style.left="-99999px",i.style.whiteSpace="pre-wrap",i.style.wordWrap="break-word",i.style.overflow="hidden";const o=e.clientWidth;if(o<=0)return null;i.style.width=`${o}px`,i.style.font=r.font,i.style.lineHeight=r.lineHeight,i.style.padding=r.padding,i.style.border=r.border,i.style.boxSizing=r.boxSizing,i.style.letterSpacing=r.letterSpacing,i.style.textIndent=r.textIndent,i.style.tabSize=r.tabSize||"8",i.textContent=e.value.slice(0,n);const a=document.createElement("span");a.textContent="​",i.appendChild(a),document.body.appendChild(i);const l=a.getBoundingClientRect(),c=parseFloat(r.lineHeight),u=Number.isFinite(c)&&c>0?c:l.height||16;return document.body.removeChild(i),{top:l.top,left:l.left,bottom:l.bottom,height:u}}function Vh({value:e,onChange:t,disabled:n,placeholder:r,rows:i=8,textareaClassName:o,ioSlots:a,variant:l="drawer",images:c,onImagesChange:u}){const{t:f}=Fr(),p=h.useId(),d=h.useRef(null),m=h.useRef(null),[g,v]=h.useState(0),[w,y]=h.useState(0),[k,b]=h.useState(null),S=h.useMemo(()=>zo(c),[c]),j=h.useMemo(()=>wX(e,a,f),[e,a,f]),C=j.length>0,R=h.useMemo(()=>xX(e,a),[e,a]),I=h.useMemo(()=>kX(R),[R]),D=h.useMemo(()=>n?null:gX(e,g),[e,g,n]),E=h.useMemo(()=>{if(!D)return[];const P=vX(a,f);return jX(P,D.query)},[D,a,f]);h.useEffect(()=>{y(P=>{const F=Math.max(0,E.length-1);return Math.min(Math.max(0,P),F)})},[E.length]);const O=h.useCallback(()=>{const P=d.current;if(!P||!D||E.length===0){b(null);return}const F=SX(P,g);if(!F){b(null);return}const L=4,q=44,M=13.5*16,te=Math.min(E.length*q+8,M);let G=F.bottom+L;G+te>window.innerHeight-8&&(G=Math.max(8,F.top-te-L));const K=288;let oe=F.left;oe=Math.max(8,Math.min(oe,window.innerWidth-K-8)),b({top:G,left:oe})},[D,E.length,g]);h.useLayoutEffect(()=>{if(!D||E.length===0){b(null);return}const P=requestAnimationFrame(()=>O());return()=>cancelAnimationFrame(P)},[D,E.length,g,e,O]),h.useEffect(()=>{if(!D||E.length===0)return;const P=()=>O();return window.addEventListener("scroll",P,!0),window.addEventListener("resize",P),()=>{window.removeEventListener("scroll",P,!0),window.removeEventListener("resize",P)}},[D,E.length,O]);const z=h.useCallback(P=>{if(!D)return;const{atIndex:F}=D,L=e.slice(0,F)+"${"+P+"}"+e.slice(g);t(L);const q=F+P.length+3;queueMicrotask(()=>{const M=d.current;M&&(M.focus(),M.setSelectionRange(q,q)),v(q)})},[D,e,g,t]),W=h.useCallback(()=>{const P=d.current,F=m.current;!P||!F||(F.scrollTop=P.scrollTop,F.scrollLeft=P.scrollLeft,D&&E.length>0&&queueMicrotask(()=>O()))},[D,E.length,O]),$=h.useCallback(P=>{if(!n&&D&&E.length>0&&(P.key==="ArrowDown"||P.key==="ArrowUp"||P.key==="Enter")){if(P.key==="ArrowDown")P.preventDefault(),y(F=>(F+1)%E.length);else if(P.key==="ArrowUp")P.preventDefault(),y(F=>(F-1+E.length)%E.length);else if(P.key==="Enter"&&!P.shiftKey){P.preventDefault();const F=E[w];F&&z(F.insert)}}},[n,D,E,w,z]),H=h.useCallback(async P=>{if(n||typeof u!="function")return!1;const F=await GO({files:P,body:e,images:S});return F?(t(F.body),u(F.images),queueMicrotask(()=>{const L=d.current;if(!L)return;L.focus();const q=F.body.length;L.setSelectionRange(q,q),v(q)}),!0):!1},[n,S,t,u,e]);return s.jsxs("div",{className:"af-body-prompt-editor"+(l==="expand"?" af-body-prompt-editor--expand":""),children:[S.length>0?s.jsx("div",{className:"af-body-image-list","aria-label":"image attachments",children:S.map((P,F)=>s.jsxs("span",{className:"af-body-image-chip",title:P.name,children:[s.jsx("img",{src:P.dataUrl,alt:""}),s.jsxs("span",{children:["[",P.label||`image ${F+1}`,"]"]})]},P.id||F))}):null,s.jsxs("div",{className:"af-body-prompt-stack",children:[s.jsx("pre",{ref:m,className:"af-body-prompt-backdrop "+o,"aria-hidden":"true",dangerouslySetInnerHTML:{__html:I+`
211
212
  `}}),s.jsx("textarea",{ref:d,className:"af-body-prompt-textarea "+o,rows:i,value:e,disabled:n,placeholder:r,spellCheck:!1,"aria-invalid":C,"aria-describedby":C?p:void 0,onChange:P=>{t(P.target.value),v(P.target.selectionStart??P.target.value.length)},onSelect:P=>{const F=P.target;F instanceof HTMLTextAreaElement&&v(F.selectionStart??0)},onClick:P=>{const F=P.target;F instanceof HTMLTextAreaElement&&v(F.selectionStart??0)},onKeyUp:P=>{const F=P.target;F instanceof HTMLTextAreaElement&&v(F.selectionStart??F.value.length)},onKeyDown:$,onPaste:P=>{const F=UO(P);F.length!==0&&(P.preventDefault(),H(F).catch(()=>{}))},onDragOver:P=>{bf(P).length>0&&P.preventDefault()},onDrop:P=>{const F=bf(P);F.length!==0&&(P.preventDefault(),H(F).catch(()=>{}))},onScroll:W})]}),D&&E.length>0&&k?sr.createPortal(s.jsx("ul",{className:"af-body-ph-menu af-body-ph-menu--pop af-composer-mention-menu",role:"listbox","aria-label":f("flow:nodeProps.placeholderSlots"),style:{position:"fixed",top:k.top,left:k.left,right:"auto",bottom:"auto",margin:0,zIndex:2e4},children:E.map((P,F)=>s.jsx("li",{role:"option","aria-selected":F===w,children:s.jsxs("button",{type:"button",className:"af-composer-mention-item"+(F===w?" af-composer-mention-item--active":""),onMouseDown:L=>L.preventDefault(),onMouseEnter:()=>y(F),onClick:()=>z(P.insert),children:[s.jsx("span",{className:"af-composer-mention-id",children:`\${${P.insert}}`}),P.subtitle?s.jsx("span",{className:"af-composer-mention-sub",children:P.subtitle}):null]})},`${P.section}-${P.insert}`))}),document.body):null,C?s.jsx("p",{id:p,className:"af-body-ph-issues",role:"status",children:j.map(P=>P.message).join(" · ")}):null]})}const NX=/^[a-zA-Z_][a-zA-Z0-9_-]*$/;function Od(e){const t=e.indexOf(" - ");return t>=0?e.slice(0,t).trim():e.trim()}function lE({kind:e,label:t,slots:n,onSlotsChange:r,disabled:i,requiredReadonly:o=!0}){const{t:a}=Fr(),l=()=>r([...n,{type:"text",name:"",default:"",required:!1,showOnNode:!1}]),c=p=>r(n.filter((d,m)=>m!==p)),u=(p,d,m)=>{const g=n.map((v,w)=>{if(w!==p)return v;const y={...v,[d]:m};return d==="required"&&m===!0&&(y.showOnNode=!0),y});r(g)},f=e==="input"?"input":"output";return s.jsxs("div",{className:"af-node-props-field af-node-props-field--io",children:[s.jsxs("div",{className:"af-node-props-io-head",children:[s.jsx("span",{className:"af-node-props-label",children:t}),s.jsx("button",{type:"button",className:"af-btn-ghost af-node-props-io-add",onClick:l,disabled:i,"aria-label":a("flow:nodeProps.addPinAriaLabel",{label:t}),children:a("flow:nodeProps.addPin")})]}),s.jsx("p",{className:"af-node-props-io-hint",children:a("flow:nodeProps.handleHint",{prefix:f})}),n.length===0?s.jsx("p",{className:"af-node-props-io-empty",children:a(e==="input"?"flow:nodeProps.noInputPins":"flow:nodeProps.noOutputPins")}):null,n.length>0?s.jsxs("div",{className:"af-node-props-io-table",role:"group","aria-label":t,children:[s.jsxs("div",{className:"af-node-props-io-table-head","aria-hidden":!0,children:[s.jsx("span",{children:a("flow:nodeProps.handle")}),s.jsx("span",{children:a("flow:nodeProps.type")}),s.jsx("span",{children:a("flow:nodeProps.name")}),s.jsx("span",{children:a("flow:nodeProps.defaultValue")}),s.jsx("span",{children:a("flow:nodeProps.description")}),s.jsx("span",{children:a("flow:nodeProps.required")}),s.jsx("span",{children:a("flow:nodeProps.showOnNode")}),s.jsx("span",{})]}),n.map((p,d)=>s.jsxs("div",{className:"af-node-props-io-row",children:[s.jsxs("span",{className:"af-node-props-io-handle",title:`${f}-${d}`,children:[f,"-",d]}),s.jsx("select",{className:"af-node-props-input af-node-props-io-cell",value:p.type,onChange:m=>u(d,"type",m.target.value),disabled:i,"aria-label":a("flow:nodeProps.pinTypeAriaLabel",{label:t,index:d}),children:["node","text","file","bool","json"].map(m=>s.jsx("option",{value:m,children:m},m))}),s.jsx("input",{type:"text",className:"af-node-props-input af-node-props-io-cell",value:p.name,onChange:m=>u(d,"name",m.target.value),disabled:i,spellCheck:!1,autoComplete:"off","aria-label":a("flow:nodeProps.pinNameAriaLabel",{label:t,index:d})}),s.jsx("input",{type:"text",className:"af-node-props-input af-node-props-io-cell",value:p.default,onChange:m=>u(d,"default",m.target.value),disabled:i,spellCheck:!1,autoComplete:"off","aria-label":a("flow:nodeProps.pinDefaultAriaLabel",{label:t,index:d})}),s.jsx("input",{type:"text",className:"af-node-props-input af-node-props-io-cell",value:p.description||"",onChange:m=>u(d,"description",m.target.value),disabled:i,spellCheck:!1,autoComplete:"off","aria-label":a("flow:nodeProps.pinDescriptionAriaLabel",{label:t,index:d})}),s.jsx("label",{className:"af-node-props-io-flag",title:a("flow:nodeProps.requiredHint"),children:s.jsx("input",{type:"checkbox",checked:!!p.required,onChange:m=>{o||u(d,"required",m.target.checked)},disabled:i||o,"aria-label":a("flow:nodeProps.pinRequiredAriaLabel",{label:t,index:d})})}),s.jsx("label",{className:"af-node-props-io-flag",title:a("flow:nodeProps.showOnNodeHint"),children:s.jsx("input",{type:"checkbox",checked:p.showOnNode!==!1,onChange:m=>u(d,"showOnNode",m.target.checked),disabled:i,"aria-label":a("flow:nodeProps.pinShowOnNodeAriaLabel",{label:t,index:d})})}),s.jsx("button",{type:"button",className:"af-icon-btn af-node-props-io-remove",onClick:()=>c(d),disabled:i,"aria-label":a("flow:nodeProps.deletePinAriaLabel",{label:t,index:d}),title:a("flow:nodeProps.deletePin"),children:s.jsx("span",{className:"material-symbols-outlined",children:"delete"})})]},`${f}-${d}`))]}):null]})}function _X({draft:e,setDraft:t,definitionId:n,systemPromptReadonly:r,modelLists:i,disabled:o,onIdBlur:a,onClose:l,onPublishToMarketplace:c,allowEditRequiredPins:u=!1,error:f,ioSlots:p}){const{t:d}=Fr(),[m,g]=h.useState(!1),[v,w]=h.useState(!1),[y,k]=h.useState({status:"idle",message:""}),b=h.useCallback(W=>{t($=>$&&{...$,...W})},[t]),{cursorList:S,opencodeList:j,claudeCodeList:C,codexList:R,currentNotInLists:I}=h.useMemo(()=>{const W=Array.isArray(i==null?void 0:i.cursor)?i.cursor:[],$=Array.isArray(i==null?void 0:i.opencode)?i.opencode:[],H=Array.isArray(i==null?void 0:i.claudeCode)?i.claudeCode:[],P=Array.isArray(i==null?void 0:i.codex)?i.codex:[],F=new Set([...W,...$,...H,...P].map(Od)),L=((e==null?void 0:e.model)??"").trim(),q=L.startsWith("cursor:")?L.slice(7):L.startsWith("opencode:")?L.slice(9):L.startsWith("codex:")?L.slice(6):L.startsWith("claude-code:")?L.slice(12):L,M=L&&!F.has(q)?L:"";return{cursorList:W,opencodeList:$,claudeCodeList:H,codexList:P,currentNotInLists:M}},[i,e==null?void 0:e.model]);if(!e)return null;const D=String(e.script??""),E=n==="tool_nodejs"||n==="control_while"||D.trim()!=="",O=typeof c=="function"&&!o&&(e==null?void 0:e.newId),z=async()=>{if(O){k({status:"running",message:d("flow:nodeProps.publishRunning")});try{const W=await c(e,n);k({status:"success",message:W!=null&&W.definitionId?d("flow:nodeProps.publishSuccessWithId",{id:W.definitionId}):d("flow:nodeProps.publishSuccess")})}catch(W){k({status:"error",message:String((W==null?void 0:W.message)||W)})}}};return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"af-pipeline-drawer-head af-node-props-head",children:[s.jsx("h2",{className:"af-pipeline-drawer-title",children:d("flow:nodeProps.title")}),s.jsxs("div",{className:"af-node-props-head-actions",children:[s.jsxs("button",{type:"button",className:"af-btn-ghost af-node-props-market-btn",onClick:z,disabled:!O||y.status==="running",title:d("flow:nodeProps.publishToMarketplaceHint"),children:[s.jsx("span",{className:"material-symbols-outlined","aria-hidden":!0,children:"inventory_2"}),y.status==="running"?d("flow:nodeProps.publishing"):d("flow:nodeProps.publishToMarketplace")]}),s.jsx("button",{type:"button",className:"af-btn-ghost af-node-props-close-secondary",onClick:l,children:d("common:common.close")})]})]}),s.jsxs("div",{className:"af-pipeline-drawer-body af-node-props-body",children:[f?s.jsx("p",{className:"af-err af-node-props-err",children:f}):null,y.message?s.jsx("p",{className:`af-node-props-market-status af-node-props-market-status--${y.status}`,children:y.message}):null,s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsx("span",{className:"af-node-props-label",children:d("flow:node.nodeType")}),s.jsx("div",{className:"af-pipeline-drawer-readonly af-node-props-readonly-mono",children:n})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsxs("span",{className:"af-node-props-label",children:[d("flow:nodeProps.instanceId"),s.jsx("span",{className:"af-node-props-hint",children:d("flow:node.displayNameHint")})]}),s.jsx("input",{type:"text",className:"af-node-props-input",value:e.newId,onChange:W=>b({newId:W.target.value}),onBlur:a,disabled:o,spellCheck:!1,autoComplete:"off","aria-label":d("flow:nodeProps.instanceId")})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsxs("span",{className:"af-node-props-label",children:[d("flow:node.displayName"),"(LABEL)"]}),s.jsx("input",{type:"text",className:"af-node-props-input",value:e.label,onChange:W=>b({label:W.target.value}),disabled:o,spellCheck:!1})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsxs("span",{className:"af-node-props-label",children:[d("flow:node.role"),"(ROLE)"]}),s.jsx("select",{className:"af-node-props-select",value:Jf.includes(e.role)?e.role:d("flow:roles.normal"),onChange:W=>b({role:W.target.value}),disabled:o,children:Jf.map(W=>s.jsx("option",{value:W,children:W},W))})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsxs("span",{className:"af-node-props-label",children:[d("flow:node.model"),"(MODEL)"]}),s.jsx("span",{className:"af-node-props-sublabel",children:d("flow:node.modelHint")}),s.jsxs("select",{className:"af-node-props-select",value:(()=>{const W=(e.model||"").trim();return W?I||W:""})(),onChange:W=>b({model:W.target.value}),disabled:o,"aria-label":d("flow:nodeProps.modelAriaLabel"),children:[s.jsx("option",{value:"",children:d("flow:node.defaultModel")}),I?s.jsxs("option",{value:I,children:[I,d("flow:nodeProps.yamlValueNotInList")]}):null,S.length>0?s.jsx("optgroup",{label:"Cursor",children:S.map(W=>s.jsx("option",{value:Od(W),children:W},`c-${W}`))}):null,j.length>0?s.jsx("optgroup",{label:"OpenCode",children:j.map(W=>s.jsx("option",{value:`opencode:${Od(W)}`,children:W},`o-${W}`))}):null,R.length>0?s.jsx("optgroup",{label:"Codex",children:R.map(W=>s.jsx("option",{value:`codex:${Od(W)}`,children:W},`codex-${W}`))}):null,C.length>0?s.jsx("optgroup",{label:"Claude Code",children:C.map(W=>s.jsx("option",{value:`claude-code:${Od(W)}`,children:W},`cc-${W}`))}):null]})]}),s.jsx(lE,{kind:"input",label:d("flow:nodeProps.inputPins"),slots:Array.isArray(e.inputs)?e.inputs:[],onSlotsChange:W=>b({inputs:W}),disabled:o,requiredReadonly:!u}),s.jsx(lE,{kind:"output",label:d("flow:nodeProps.outputPins"),slots:Array.isArray(e.outputs)?e.outputs:[],onSlotsChange:W=>b({outputs:W}),disabled:o,requiredReadonly:!u}),E?s.jsxs("div",{className:"af-pipeline-drawer-field af-node-props-field af-node-props-field--prompt",children:[s.jsxs("div",{className:"af-node-props-prompt-head",children:[s.jsxs("span",{className:"af-node-props-label",children:[d("flow:node.directCommand"),"(script)",s.jsx("span",{className:"af-node-props-hint",children:d("flow:node.scriptHint")})]}),s.jsx("button",{type:"button",className:"af-icon-btn af-node-props-expand",onClick:()=>w(!0),"aria-label":d("flow:nodeProps.expandEditScript"),title:d("flow:nodeProps.expand"),disabled:o,children:s.jsx("span",{className:"material-symbols-outlined",children:"open_in_full"})})]}),s.jsx(Vh,{value:D,onChange:W=>b({script:W}),disabled:o,placeholder:d("flow:nodeProps.scriptPlaceholder"),rows:6,textareaClassName:"af-pipeline-drawer-textarea af-node-props-body-textarea af-node-props-script-textarea",ioSlots:p,variant:"drawer"})]}):null,s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsx("span",{className:"af-node-props-label",children:"Script file(scriptRef)"}),s.jsxs("span",{className:"af-node-props-sublabel",children:["Relative path under this flow, for example nodes/",e.id,"/script.mjs"]}),s.jsx("input",{type:"text",className:"af-node-props-input",value:e.scriptRef||"",onChange:W=>b({scriptRef:W.target.value}),disabled:o,spellCheck:!1,autoComplete:"off"})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsx("span",{className:"af-node-props-label",children:"Implementation file(implementationRef)"}),s.jsxs("span",{className:"af-node-props-sublabel",children:["Relative path under this flow, for example nodes/",e.id,"/implementation.md"]}),s.jsx("input",{type:"text",className:"af-node-props-input",value:e.implementationRef||"",onChange:W=>b({implementationRef:W.target.value}),disabled:o,spellCheck:!1,autoComplete:"off"})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsx("span",{className:"af-node-props-label",children:"Implementation mode"}),s.jsxs("select",{className:"af-node-props-select",value:e.implementationMode||"",onChange:W=>b({implementationMode:W.target.value}),disabled:o,children:[s.jsx("option",{value:"",children:"auto"}),s.jsx("option",{value:"script",children:"script"}),s.jsx("option",{value:"steps",children:"steps"}),s.jsx("option",{value:"hybrid",children:"hybrid"})]})]}),s.jsxs("div",{className:"af-pipeline-drawer-field af-node-props-field af-node-props-field--prompt",children:[s.jsxs("div",{className:"af-node-props-prompt-head",children:[s.jsx("span",{className:"af-node-props-label",children:d("flow:node.userPrompt")}),s.jsx("button",{type:"button",className:"af-icon-btn af-node-props-expand",onClick:()=>g(!0),"aria-label":d("flow:nodeProps.expandEdit"),title:d("flow:nodeProps.expand"),disabled:o,children:s.jsx("span",{className:"material-symbols-outlined",children:"open_in_full"})})]}),s.jsx(Vh,{value:e.body,onChange:W=>b({body:W}),images:e.images,onImagesChange:W=>b({images:W}),disabled:o,placeholder:d("flow:nodeProps.bodyPlaceholder"),rows:8,textareaClassName:"af-pipeline-drawer-textarea af-node-props-body-textarea",ioSlots:p,variant:"drawer"})]}),s.jsxs("label",{className:"af-pipeline-drawer-field af-node-props-field",children:[s.jsx("span",{className:"af-node-props-label",children:d("flow:node.systemDescription")}),s.jsx("textarea",{className:"af-pipeline-drawer-textarea af-node-props-system-readonly",rows:4,readOnly:!0,value:r||d("flow:nodeProps.noDescription"),spellCheck:!1})]})]}),v?s.jsx("div",{className:"af-node-props-expand-overlay",role:"dialog","aria-modal":"true","aria-label":d("flow:nodeProps.editScript"),onMouseDown:W=>{W.target===W.currentTarget&&w(!1)},children:s.jsxs("div",{className:"af-node-props-expand-panel",children:[s.jsxs("div",{className:"af-node-props-expand-head",children:[s.jsx("span",{className:"af-node-props-expand-title",children:d("flow:node.directCommand")}),s.jsx("button",{type:"button",className:"af-icon-btn",onClick:()=>w(!1),"aria-label":d("flow:nodeProps.collapse"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsx(Vh,{value:D,onChange:W=>b({script:W}),disabled:o,placeholder:d("flow:nodeProps.scriptPlaceholderExpand"),rows:16,textareaClassName:"af-node-props-expand-textarea",ioSlots:p,variant:"expand"})]})}):null,m?s.jsx("div",{className:"af-node-props-expand-overlay",role:"dialog","aria-modal":"true","aria-label":d("flow:nodeProps.editUserPrompt"),onMouseDown:W=>{W.target===W.currentTarget&&g(!1)},children:s.jsxs("div",{className:"af-node-props-expand-panel",children:[s.jsxs("div",{className:"af-node-props-expand-head",children:[s.jsx("span",{className:"af-node-props-expand-title",children:d("flow:node.body")}),s.jsx("button",{type:"button",className:"af-icon-btn",onClick:()=>g(!1),"aria-label":d("flow:nodeProps.collapse"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsx(Vh,{value:e.body,onChange:W=>b({body:W}),images:e.images,onImagesChange:W=>b({images:W}),disabled:o,placeholder:d("flow:nodeProps.bodyPlaceholderExpand"),rows:16,textareaClassName:"af-node-props-expand-textarea",ioSlots:p,variant:"expand"})]})}):null]})}function CX({open:e,onClose:t,flowId:n,flowSource:r,onArchived:i}){const{t:o}=Fr(),a=h.useId(),l=h.useRef(null),[c,u]=h.useState(""),[f,p]=h.useState(!1),[d,m]=h.useState("");if(h.useEffect(()=>{if(!e)return;u(""),m(""),p(!1);const y=requestAnimationFrame(()=>{var k;return(k=l.current)==null?void 0:k.focus()});return()=>cancelAnimationFrame(y)},[e,n]),!e)return null;const g=c.trim(),v=g===n;async function w(y){if(y.preventDefault(),!(!v||f)){p(!0),m("");try{const k=await fetch("/api/flow/archive",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:n,flowSource:r,confirmFlowId:g})}),b=await k.json().catch(()=>({}));if(!k.ok){m(typeof b.error=="string"?b.error:o("project:archiveModal.archiveFailed"));return}i()}catch(k){m(String((k==null?void 0:k.message)||k))}finally{p(!1)}}}return s.jsx("div",{className:"af-shortcuts-overlay",role:"presentation",onMouseDown:y=>{y.target===y.currentTarget&&t()},children:s.jsxs("div",{ref:l,className:"af-shortcuts-panel af-new-pipeline-panel",role:"dialog","aria-modal":"true","aria-labelledby":a,tabIndex:-1,onMouseDown:y=>y.stopPropagation(),children:[s.jsxs("div",{className:"af-shortcuts-panel__head",children:[s.jsx("h2",{id:a,className:"af-shortcuts-panel__title",children:o("project:archiveModal.title")}),s.jsx("button",{type:"button",className:"af-shortcuts-panel__close af-icon-btn",onClick:t,"aria-label":o("project:archiveModal.close"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsxs("form",{className:"af-shortcuts-panel__body af-new-pipeline-form",onSubmit:w,children:[s.jsx("p",{className:"af-new-pipeline-lead",children:o("project:archiveModal.lead",{flowId:n})}),s.jsxs("label",{className:"af-new-pipeline-field",children:[s.jsx("span",{className:"af-pipeline-drawer-label",children:o("project:archiveModal.confirmLabel")}),s.jsx("input",{type:"text",className:"af-new-pipeline-input",value:c,onChange:y=>u(y.target.value),placeholder:n,autoComplete:"off",spellCheck:!1,"aria-invalid":g.length>0&&!v})]}),d?s.jsx("p",{className:"af-err af-new-pipeline-err",children:d}):null,s.jsxs("div",{className:"af-new-pipeline-actions",children:[s.jsx("button",{type:"button",className:"af-btn-secondary",onClick:t,disabled:f,children:o("project:archiveModal.cancel")}),s.jsx("button",{type:"submit",className:"af-btn-primary",disabled:!v||f,children:o(f?"project:archiveModal.archiving":"project:archiveModal.confirmArchive")})]})]})]})})}function AX({open:e,onClose:t,flowId:n,flowSource:r,flowArchived:i=!1,workspaceId:o="",leaveShared:a=!1,onDeleted:l}){const{t:c}=Fr(),u=h.useId(),f=h.useRef(null),[p,d]=h.useState(""),[m,g]=h.useState(!1),[v,w]=h.useState("");if(h.useEffect(()=>{if(!e)return;d(""),w(""),g(!1);const S=requestAnimationFrame(()=>{var j;return(j=f.current)==null?void 0:j.focus()});return()=>cancelAnimationFrame(S)},[e,n]),!e)return null;const y=p.trim(),k=a||y===n;async function b(S){if(S.preventDefault(),!k||m)return;g(!0),w("");let j=null;try{const C=new AbortController;j=setTimeout(()=>C.abort(),15e3);const R=await fetch("/api/flow/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:n,flowSource:r,confirmFlowId:a?n:y,flowArchived:i,workspaceId:o}),signal:C.signal}),I=await R.json().catch(()=>({}));if(!R.ok){w(typeof I.error=="string"?I.error:c("project:deleteModal.deleteFailed"));return}try{for(let D=localStorage.length-1;D>=0;D--){const E=localStorage.key(D);E&&(E.startsWith(`af:composer-sessions:${n}:${r}`)||E.startsWith(`af:composer-active-session:${n}:${r}`)||E.startsWith(`af:workspace-composer:${n}:${r}`))&&localStorage.removeItem(E)}}catch{}await l()}catch(C){if((C==null?void 0:C.name)==="AbortError"){w(c("project:deleteModal.deleteTimeout"));return}w(String((C==null?void 0:C.message)||C))}finally{j&&clearTimeout(j),g(!1)}}return s.jsx("div",{className:"af-shortcuts-overlay",role:"presentation",onMouseDown:S=>{S.target===S.currentTarget&&t()},children:s.jsxs("div",{ref:f,className:"af-shortcuts-panel af-new-pipeline-panel",role:"dialog","aria-modal":"true","aria-labelledby":u,tabIndex:-1,onMouseDown:S=>S.stopPropagation(),children:[s.jsxs("div",{className:"af-shortcuts-panel__head",children:[s.jsx("h2",{id:u,className:"af-shortcuts-panel__title",children:a?"退出共享 Workspace":c("project:deleteModal.title")}),s.jsx("button",{type:"button",className:"af-shortcuts-panel__close af-icon-btn",onClick:t,"aria-label":c("project:deleteModal.close"),children:s.jsx("span",{className:"material-symbols-outlined",children:"close"})})]}),s.jsxs("form",{className:"af-shortcuts-panel__body af-new-pipeline-form",onSubmit:b,children:[s.jsx("p",{className:"af-new-pipeline-lead",children:a?`退出后,${n} 将从你的项目列表移除;源项目和其他成员的数据不会被删除。`:c("project:deleteModal.lead",{flowId:n})}),a?null:s.jsxs("label",{className:"af-new-pipeline-field",children:[s.jsx("span",{className:"af-pipeline-drawer-label",children:c("project:deleteModal.confirmLabel")}),s.jsx("input",{type:"text",className:"af-new-pipeline-input",value:p,onChange:S=>d(S.target.value),placeholder:n,autoComplete:"off",spellCheck:!1,"aria-invalid":y.length>0&&!k})]}),v?s.jsx("p",{className:"af-err af-new-pipeline-err",children:v}):null,s.jsxs("div",{className:"af-new-pipeline-actions",children:[s.jsx("button",{type:"button",className:"af-btn-secondary",onClick:t,disabled:m,children:c("project:deleteModal.cancel")}),s.jsx("button",{type:"submit",className:"af-btn-primary af-btn-destructive",disabled:!k||m,children:m?a?"退出中...":c("project:deleteModal.deleting"):a?"确认退出":c("project:deleteModal.confirmDelete")})]})]})]})})}const cE=80,EX=220;function IX(e){if(!e||typeof e!="object")return e;const{selected:t,dragging:n,resizing:r,className:i,positionAbsolute:o,measured:a,internals:l,...c}=e;return c}function PX(e){if(!e||typeof e!="object")return e;const{selected:t,className:n,...r}=e;return r}function qh(e,t,n){const r={nodes:Array.isArray(e)?e.map(IX):[],edges:Array.isArray(t)?t.map(PX):[],extra:n&&typeof n=="object"?n:{}},i=JSON.stringify(r);return{value:JSON.parse(i),signature:i}}function ob(e,t){const n=[...e,t];return n.length>cE?n.slice(n.length-cE):n}function TX({nodes:e,edges:t,extra:n,enabled:r=!0,onRestore:i}){const[o,a]=h.useState(0),l=h.useRef([]),c=h.useRef([]),u=h.useRef(null),f=h.useRef(null),p=h.useRef(null),d=h.useRef(null),m=h.useRef(!1),g=h.useCallback(()=>a(j=>j+1),[]),v=h.useCallback(()=>{d.current&&(window.clearTimeout(d.current),d.current=null)},[]),w=h.useCallback(()=>{v();const j=f.current,C=p.current;return f.current=null,p.current=null,!j||!C||j.signature===C.signature?(C&&(u.current=C),!1):(l.current=ob(l.current,j),c.current=[],u.current=C,g(),!0)},[g,v]),y=h.useCallback((j=[],C=[],R={})=>{v(),l.current=[],c.current=[],f.current=null,p.current=null,u.current=qh(j,C,R),m.current=!1,g()},[g,v]),k=h.useCallback(j=>{m.current=!0,u.current=j,f.current=null,p.current=null,v(),i==null||i(j.value),g()},[g,v,i]),b=h.useCallback(()=>{w();const j=u.current||qh(e,t,n),C=l.current.pop();return C?(c.current=ob(c.current,j),k(C),!0):(g(),!1)},[g,t,n,w,e,k]),S=h.useCallback(()=>{w();const j=u.current||qh(e,t,n),C=c.current.pop();return C?(l.current=ob(l.current,j),k(C),!0):(g(),!1)},[g,t,n,w,e,k]);return h.useEffect(()=>()=>v(),[v]),h.useEffect(()=>{if(!r)return;const j=qh(e,t,n);if(!u.current){u.current=j;return}if(m.current){m.current=!1,u.current=j;return}j.signature!==u.current.signature&&(f.current||(f.current=u.current),p.current=j,v(),d.current=window.setTimeout(()=>{w()},EX))},[v,t,r,n,w,e]),{canUndo:l.current.length>0||!!f.current,canRedo:c.current.length>0,resetHistory:y,undo:b,redo:S,version:o}}function $o(e){return String(e??"").trim()}function uE(e){return e===!0?!0:["true","yes","done","waived","not_required"].includes($o(e).toLowerCase())}function RX(e){return e===!1?!0:["false","no","not_required","waived"].includes($o(e).toLowerCase())}function MX(e,t=""){return $o((e==null?void 0:e.key)||(e==null?void 0:e.issueKey)||(e==null?void 0:e.issue_key)||(e==null?void 0:e.id)||t)}function rL(e){return $o((e==null?void 0:e.platform)||"all").toLowerCase()||"all"}function sL(e){return rL(e)==="all"}function $X(e,t=[]){const n=$o((e==null?void 0:e.sourceIssue)||(e==null?void 0:e.source_issue)||(e==null?void 0:e.parentKey)||(e==null?void 0:e.parent_key)||(e==null?void 0:e.parentIssue)||(e==null?void 0:e.parent_issue)||(e==null?void 0:e.parent));if(n)return n;const r=rL(e),i=MX(e);if(!i||!["android","ios"].includes(r))return"";const o=`-${r}`;if(!i.endsWith(o))return"";const a=i.slice(0,-o.length);return new Set(t.map(l=>$o(l))).has(a)?a:""}function Ag(e){const t=$o(e==null?void 0:e.label).toLowerCase(),n=$o((e==null?void 0:e.href)||(e==null?void 0:e.url)).toLowerCase();return/\/merge_requests\/\d+/.test(n)||/\bmr\b|merge request|合并请求|实现 mr|修复 mr|提测 mr|集成 mr/i.test(t)?"mr":/\/issues\/\d+/.test(n)||/gitlab issue/i.test(t)?"issue":"other"}function OX(e=[]){const t={issue:0,mr:1,other:2};return[...e].sort((n,r)=>t[Ag(n)]-t[Ag(r)])}function LX(e){const t=$o((e==null?void 0:e.noMrReason)||(e==null?void 0:e.no_mr_reason)||(e==null?void 0:e.mrWaiverReason)||(e==null?void 0:e.mr_waiver_reason)||(e==null?void 0:e.implementationNotRequiredReason)||(e==null?void 0:e.implementation_not_required_reason));return/user confirmed self-test completion without implementation mr evidence/i.test(t)?"自测确认,无需实现 MR":t}function DX(e,t=[]){if(sL(e))return{kind:"aggregate",label:"双端汇总",detail:"由 Android / iOS 端侧 Issue 承接"};const n=t.map(Ag);if(n.includes("mr"))return{kind:"linked",label:"MR 已关联",detail:""};const r=(e==null?void 0:e.mrRequired)??(e==null?void 0:e.mr_required)??(e==null?void 0:e.requiresMr)??(e==null?void 0:e.requires_mr);return uE(e==null?void 0:e.implementationNotRequired)||uE(e==null?void 0:e.implementation_not_required)||RX(r)?{kind:"not-required",label:LX(e)||"无需实现 MR",detail:""}:n.includes("issue")?{kind:"pending",label:"MR 尚未记录",detail:""}:{kind:"missing-issue",label:"GitLab Issue 未绑定",detail:"端侧执行项应先创建或绑定 GitLab Issue"}}function fv(e=[]){return e.reduce((t,n)=>t+1+fv(Array.isArray(n==null?void 0:n.children)?n.children:[]),0)}function Pr(e){return String(e||"").trim()}function wa(e){return Pr(e).toLowerCase()}function Eg(e){return typeof e=="string"?wa(e):!e||typeof e!="object"||Array.isArray(e)?"":wa(e.kind||e.type||e.persistence||e.durability)}function iL(e,t="http://localhost"){const n=Pr(e);if(!n)return"";try{const r=new URL(n,t);return r.origin==="null"?`${r.protocol}//${r.host}${r.pathname}`:`${r.origin}${r.pathname}`}catch{return n.split(/[?#]/)[0]}}function oL(e={}){const t=Pr(e.href||e.url);if(!t)return!1;const n=wa(e.kind||e.type),r=wa(e.durability),i=wa(e.persistence),o=wa(e.truth||e.stateTruth||e.state_truth),a=wa(e.authority),l=Eg(e.source)||Eg(e.sourceArtifact||e.source_artifact),c=[e.label,n].map(Pr).join(" "),u=[e.label,e.title,n,i,a,l,t].map(Pr).join(" ");if(r==="temporary"||i==="runtime"&&l&&l!=="ai-doc"||l==="local-draft"||n==="temporary-review"||/临时\s*(markdown)?\s*(预览|review)|local[-_ ]?draft/i.test(u)||/gitlab[-_ ]?(issue|epic|mr)|merge[-_ ]?request|jenkins|tapd|实现\s*mr|修复\s*mr|提测\s*mr|集成\s*mr|安装包|二维码/i.test(c)||/tapd[-_ ]?(baseline|snapshot)|baseline[-_ ]?snapshot|tapd_snapshot|snapshot_v\d+\.md/i.test(`${c} ${t}`))return!1;const d=/ai[-_ ]?doc|方案文档|技术方案|设计文档|代码审查|code[-_ ]?review|文档预览|markdown[-_ ]?review/i.test(c),m=n==="ai-doc"||l==="ai-doc"||a==="ai-doc"||i==="ai-doc"&&d,g=o==="durable_fact"||o==="project_fact"||e.confirmed===!0;return m&&(r==="durable"||m||g)}function aL(e={}){const t=[e.label,e.kind,e.title,e.documentType].map(Pr).join(" ");return/技术方案|tech(?:nical)?[-_ ]?design/i.test(t)?"tech-design":/方案文档|方案已确认|plan(?:[-_ ]?doc)?/i.test(t)?"plan":/代码审查|code[-_ ]?review/i.test(t)?"code-review":/设计文档|design[-_ ]?doc/i.test(t)?"design":"document"}function FX(e={},{issueTitle:t="",requirementTitle:n=""}={}){const r=Pr(e.articleTitle||e.article_title||e.documentTitle||e.document_title||e.docTitle||e.doc_title);return r||(Pr(t)?Pr(t):aL(e)==="tech-design"&&Pr(n)?Pr(n):Pr(e.title||e.label))}function zX(e={},t="http://localhost"){const n=Pr(e.issueKey||e.issue_key||e.issue),r=aL(e);if(n)return`issue:${n}:${r}`;if(r==="tech-design")return"requirement:tech-design";const i=Pr(e.documentPath||e.document_path||e.path);return i?`path:${i.replace(/\\/g,"/").replace(/\/+/g,"/")}`:`url:${iL(e.href||e.url,t)}`}function dE(e={}){const t=Pr(e.href||e.url),n=wa(e.kind||e.type),r=Eg(e.source)||Eg(e.sourceArtifact||e.source_artifact),i=Pr(e.label);let o=0;return e.confirmed===!0&&(o+=100),r==="ai-doc"&&(o+=80),n==="ai-doc"&&(o+=70),/^https?:\/\//i.test(t)&&(o+=30),/\/api\/prd-workflow\/review\//.test(t)&&(o+=20),/预览|review/i.test(i)||(o+=10),o}function BX(e,t){const n=dE(t)>dE(e)?t:e,r=n===t?e:t;return{...r,...n,title:fE(e.title)>=fE(t.title)?e.title:t.title,issueKey:e.issueKey||t.issueKey,platform:e.platform||t.platform,documentPath:n.documentPath||r.documentPath,source:n.source||r.source}}function fE(e){const t=Pr(e);if(!t)return 0;const n=t.replace(/^Issue\s*\d+\s*/i,"").trim();return/^(方案文档预览|方案文档|技术方案|设计文档|代码审查|Markdown Review|文档预览)$/i.test(n)?10:100+Math.min(t.length,100)}function ab(e,t){const n=new Map,r=[];for(const i of e){const o=t(i);if(!o){r.push(i);continue}const a=n.get(o);if(a===void 0){n.set(o,r.length),r.push(i);continue}r[a]=BX(r[a],i)}return r}function WX(e=[],t="http://localhost"){const n=(Array.isArray(e)?e:[]).filter(o=>oL(o)),r=ab(n,o=>iL(o.href||o.url,t)),i=ab(r,o=>Pr(o.documentPath||o.document_path||o.path).replace(/\\/g,"/").replace(/\/+/g,"/"));return ab(i,o=>zX(o,t))}function Xt(e){return String(e||"").trim()}function Oo(e){return typeof e=="string"?Xt(e).toLowerCase():!e||typeof e!="object"||Array.isArray(e)?"":Xt(e.kind||e.type||e.persistence||e.durability).toLowerCase()}function Ig(e){return Xt((e==null?void 0:e.key)||(e==null?void 0:e.artifactKey)||(e==null?void 0:e.artifact_key))}function lL(e){return Xt((e==null?void 0:e.canonicalUrl)||(e==null?void 0:e.canonical_url)||(e==null?void 0:e.reviewUrl)||(e==null?void 0:e.review_url)||(e==null?void 0:e.href)||(e==null?void 0:e.url))}function cL(e){const t=Xt(e);if(!t)return"";try{const n=new URL(t,"http://agentflow.local");return`${n.origin}${n.pathname}`}catch{return t.split(/[?#]/)[0]}}function HX(e){const t=Xt(e);if(!t)return"";try{const n=new URL(t,"http://agentflow.local");return n.hash="",n.searchParams.sort(),n.href}catch{return t.split("#")[0]}}function KX(e={}){if(!e||typeof e!="object"||Array.isArray(e))return"";const t=Xt(e.issueKey||e.issue_key||e.issue),n=Xt(e.action||e.actionId||e.action_id),r=Xt(e.stageKey||e.stage_key||e.stage||e.phase||e.code||n),i=r.toLowerCase(),o=[r,n,e.code,e.type].map(a=>Xt(a).toLowerCase()).filter(Boolean);return t?/^(?:issue-plan|issue-gitlab|implementation|bugfix|integration):/.test(i)?r:o.some(a=>/^code-review(?::|$)/.test(a)||a==="code_review_completed")?`implementation:${t}`:o.some(a=>/plan_draft_local|submit-plan|plan-doc/.test(a)||["plan_mr","plan_approved","issue-plan"].includes(a))?`issue-plan:${t}`:o.some(a=>/gitlab_issue_missing|ensure-gitlab-issue/.test(a)||a==="issue-gitlab")?`issue-gitlab:${t}`:o.some(a=>["fix_mr","bugfix"].includes(a))?`bugfix:${t}`:o.some(a=>["integration_mr","integrated","integration"].includes(a))?`integration:${t}`:o.some(a=>["implementation_mr","implementation_done","implementation_merged","impl_mr","impl_done","impl_merged","runtime_marker","status","implementation"].includes(a))?`implementation:${t}`:r||n:r||n}function VX(e={}){var o,a;if(!e||typeof e!="object"||Array.isArray(e)||Xt(e.type||e.kind).toLowerCase()!=="workflow-report")return!1;const n=!!Xt(e.action||e.actionId||e.action_id||((o=e.actionModel)==null?void 0:o.key)||((a=e.action_model)==null?void 0:a.key)),r=Xt(e.artifactScope||e.artifact_scope||e.scope).toLowerCase()==="global",i=e.aggregateByStage??e.aggregate_by_stage;return!n&&(r||i===!1)}function Zf(e){const t=Ig(e);if(/^prd-review:/i.test(t)||Xt((e==null?void 0:e.reviewId)||(e==null?void 0:e.review_id))||/\/api\/prd-workflow\/review\//.test(lL(e)))return!0;const n=Xt((e==null?void 0:e.href)||(e==null?void 0:e.url)||(e==null?void 0:e.shortUrl)||(e==null?void 0:e.short_url)),r=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),i=Xt(e==null?void 0:e.durability).toLowerCase(),o=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact));return(r==="review"||r==="temporary-review"||i==="temporary"||i==="durable"||o==="local-draft"||o==="ai-doc")&&/\/r\/[A-Za-z0-9_-]{8,32}(?:[?#]|$)/.test(n)}function pv(e){return/^(?:markdown\s+review|review|markdown\s*预览|文档预览|预览)$/i.test(Xt(e))}function Ic(e){const t=Xt(e==null?void 0:e.label),n=Xt(e==null?void 0:e.title);return t&&!pv(t)?t:n&&!pv(n)?n:t||n}function pE(e){const t=Ic(e);if(t&&!pv(t))return 100;const n=[t,e==null?void 0:e.kind,e==null?void 0:e.type,e==null?void 0:e.durability,Oo(e==null?void 0:e.source)].map(Xt).join(" ");return/Markdown Review/i.test(n)?20:/预览|review/i.test(n)?10:0}function hE(e){const t=[],n=Ig(e);if(n&&t.push(`key:${n}`),Zf(e)){const i=cL(lL(e));i&&t.push(`review:${i}`)}const r=HX((e==null?void 0:e.href)||(e==null?void 0:e.url));return r&&t.push(`url:${r}`),t.length||t.push(`link:${Xt(e==null?void 0:e.label)}
212
- ${r}`),t}function qX(e){const t=[],n=new Map;for(const r of e){if(!r)continue;const i=Ic(r),o=i&&i!==Xt(r==null?void 0:r.label)?{...r,label:i}:r,a=hE(o),l=a.map(g=>n.get(g)).find(g=>g!=null);if(l==null){a.forEach(g=>n.set(g,t.length)),t.push(o);continue}const c=t[l],u=pE(o)>=pE(c)?Ic(o)||Ic(c):Ic(c)||Ic(o),f=!!Ig(c),p=!!Ig(o),d=f&&!p?c:o,m=d===c?o:c;t[l]={...m,...d,...u?{label:u}:{}},hE(t[l]).forEach(g=>n.set(g,l))}return t}function uL(e){const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.durability).toLowerCase(),r=Xt(e==null?void 0:e.persistence).toLowerCase(),i=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),o=[e==null?void 0:e.label,t,n,r,i].map(Xt).join(" ");return t==="temporary-review"||n==="temporary"||i==="local-draft"||/临时\s*(markdown)?\s*(预览|review)|local[-_ ]?draft/i.test(o)}function UX(e){if(!Zf(e)||uL(e))return!1;const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.durability).toLowerCase(),r=Xt(e==null?void 0:e.persistence).toLowerCase(),i=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),o=[e==null?void 0:e.label,t,n,r,i].map(Xt).join(" ");return t==="review"||n==="durable"||i==="ai-doc"||r==="ai-doc"||/方案文档预览|durable/i.test(o)}function GX(e){if(Zf(e))return!1;const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.persistence).toLowerCase(),r=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),i=[e==null?void 0:e.label,t].map(Xt).join(" ");return t==="ai-doc"||n==="ai-doc"||r==="ai-doc"||/方案文档|技术方案/.test(i)}function YX(e={}){const t=[e.stage,e.stageKey,e.stage_key,e.action,e.id,e.title].map(Xt).join(" ");return/(?:^|[:_-])issue[-_:]?plan(?:$|[:_-])|plan[-_:]?doc|submit[-_:]?plan/i.test(t)||/方案(?:文档)?(?:已确认|预览)/.test(t)}function JX(e=[],t={}){const n=qX(Array.isArray(e)?e:[]);if(!YX(t))return n;const r=n.filter(Zf);if(r.length===0)return n;const i=r.filter(UX),a=i.length>0||n.some(GX)?i.at(-1):r.filter(uL).at(-1);return n.filter(l=>!Zf(l)||l===a)}function Ui(e,t){const n=[],r=new Map,i=a=>{if(typeof a=="string")return[`value:${a}`];if(!a||typeof a!="object")return[];const l=[],c=Xt(a.key||a.artifactKey||a.artifact_key);c&&l.push(`key:${c}`);const u=cL(a.canonicalUrl||a.canonical_url||a.reviewUrl||a.review_url||a.href||a.url);u&&l.push(`url:${u}`);const f=Xt(a.path);return f&&l.push(`path:${f}`),l.length||l.push(`value:${JSON.stringify(a)}`),l},o=a=>{if(!a)return;const l=i(a);if(!l.length)return;const c=l.map(u=>r.get(u)).find(u=>u!=null);if(c==null){const u=n.length;n.push(a),l.forEach(f=>r.set(f,u));return}n[c]=a,i(a).forEach(u=>r.set(u,c))};return(Array.isArray(e)?e:[]).forEach(o),(Array.isArray(t)?t:[]).forEach(o),n}function Xr(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Pg(e){return Array.isArray(e)?e.map(Pg):Xr(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Pg(e[t])])):e}function _o(e,t){return JSON.stringify(Pg(e))===JSON.stringify(Pg(t))}function dL(e){return Xr(e==null?void 0:e.instances)?e.instances:{}}function Bl(e){return Xr(e==null?void 0:e.ui)?e.ui:{}}function Uh(e,t){if(!Xr(e))return{};const n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([r])=>!n.has(r)))}function XX(e,t){if(!Xr(e)||!Xr(t)||!Xr(e.instances)||!Xr(t.instances)||!Array.isArray(e.edges)||!Array.isArray(t.edges)||!Xr(e.ui)||!Xr(t.ui)||Number(e.version||1)!==Number(t.version||1))return!1;const n=Uh(e,["version","instances","edges","ui"]),r=Uh(t,["version","instances","edges","ui"]);if(!_o(n,r))return!1;const i=["nodePositions","nodeSizes","groups","displayPage","viewport","subflowBoundaryPositions"];return _o(Uh(e.ui,i),Uh(t.ui,i))}function fL(e){const t=Array.isArray(Bl(e).groups)?Bl(e).groups:[];return new Map(t.filter(n=>n==null?void 0:n.id).map(n=>[String(n.id),n]))}function mE(e){const t=new Set(Object.keys(dL(e)));for(const n of Array.isArray(e==null?void 0:e.edges)?e.edges:[])n!=null&&n.source&&t.add(String(n.source)),n!=null&&n.target&&t.add(String(n.target));for(const n of fL(e).keys())t.add(n);for(const n of Object.keys(Xr(Bl(e).subflowBoundaryPositions)?Bl(e).subflowBoundaryPositions:{}))t.add(n);return t}function gE(e,t){const n=dL(e),r=Bl(e),i=fL(e);return{instance:Object.prototype.hasOwnProperty.call(n,t)?n[t]:null,position:Xr(r.nodePositions)&&Object.prototype.hasOwnProperty.call(r.nodePositions,t)?r.nodePositions[t]:null,size:Xr(r.nodeSizes)&&Object.prototype.hasOwnProperty.call(r.nodeSizes,t)?r.nodeSizes[t]:null,boundaryPosition:Xr(r.subflowBoundaryPositions)&&Object.prototype.hasOwnProperty.call(r.subflowBoundaryPositions,t)?r.subflowBoundaryPositions[t]:null,group:i.get(t)||null}}function yE(e){return(Array.isArray(e==null?void 0:e.edges)?e.edges:[]).map(t=>({...t})).sort((t,n)=>{const r=[t.source,t.target,t.sourceHandle,t.targetHandle,t.id].map(o=>String(o??"")).join("\0"),i=[n.source,n.target,n.sourceHandle,n.targetHandle,n.id].map(o=>String(o??"")).join("\0");return r.localeCompare(i)})}function QX(e,t){if(!XX(e,t))return{safe:!1,changedNodeIds:[],nodesChanged:!0,edgesChanged:!0,displayPageChanged:!0};const n=new Set([...mE(e),...mE(t)]),r=Array.from(n).filter(i=>!_o(gE(e,i),gE(t,i)));return{safe:!0,changedNodeIds:r,nodesChanged:r.length>0,edgesChanged:!_o(yE(e),yE(t)),displayPageChanged:!_o(Bl(e).displayPage||null,Bl(t).displayPage||null)}}function ZX(e,t,n){const r=new Map((Array.isArray(e)?e:[]).map(o=>[o.id,o])),i=new Set(Array.isArray(n)?n:[]);return(Array.isArray(t)?t:[]).map(o=>{const a=r.get(o.id);return a&&!i.has(o.id)?a:a?{...o,selected:a.selected===!0}:o})}function wE(e){return[e==null?void 0:e.source,e==null?void 0:e.target,e==null?void 0:e.sourceHandle,e==null?void 0:e.targetHandle].map(t=>String(t??"")).join("\0")}function xE(e){if(!e||typeof e!="object")return e;const t={...e};return delete t.selected,t}function eQ(e,t){const n=new Map((Array.isArray(e)?e:[]).map(r=>[wE(r),r]));return(Array.isArray(t)?t:[]).map(r=>{const i=n.get(wE(r));return i?_o(xE(i),xE(r))?i:{...r,selected:i.selected===!0}:r})}function tQ(e,t,n){const r=Xr(e)?e:{},i=Xr(t)?t:{},o=new Set(Array.isArray(n)?n:[]);return Object.fromEntries(Object.entries(i).map(([a,l])=>[a,!o.has(a)&&Object.prototype.hasOwnProperty.call(r,a)?r[a]:l]))}const nQ=160,pa=72,pL=120,hL=360,Gh=28;function bE(e,t){return Number.isFinite(Number(e))?Number(e):t}function xa(e,t){var i,o,a,l;const n=(o=(i=e==null?void 0:e.ui)==null?void 0:i.nodeSizes)==null?void 0:o[t];if(n&&Number.isFinite(n.width)&&Number.isFinite(n.height))return{width:Math.max(80,n.width),height:Math.max(60,n.height)};const r=String(((l=(a=e==null?void 0:e.instances)==null?void 0:a[t])==null?void 0:l.definitionId)||"");return r==="workspace_run"||r==="workspace_scheduled_run"?{width:256,height:156}:r.startsWith("provide_")?{width:220,height:110}:r.startsWith("display_")?{width:496,height:160}:{width:260,height:150}}function kE(e){const t=/-(\d+)$/.exec(String(e||""));return t?Number(t[1]):0}function rQ(e,t){var a,l;const n=(a=e==null?void 0:e.instances)==null?void 0:a[t.source],r=(l=e==null?void 0:e.instances)==null?void 0:l[t.target],i=Array.isArray(n==null?void 0:n.output)?n.output[kE(t.sourceHandle)]:null,o=Array.isArray(r==null?void 0:r.input)?r.input[kE(t.targetHandle)]:null;return(i==null?void 0:i.type)==="node"||(o==null?void 0:o.type)==="node"}function mL(e){const t=[],n=new Set,r=i=>{const o=String(i||"");!o||n.has(o)||(n.add(o),t.push(o))};for(const i of Object.keys((e==null?void 0:e.instances)||{}))r(i);for(const i of(e==null?void 0:e.edges)||[])r(i==null?void 0:i.source),r(i==null?void 0:i.target);return t}function sQ(e,t,n){const r=new Set(t),i=new Map(t.map(p=>[p,new Set])),o=new Map(t.map(p=>[p,0]));for(const p of(e==null?void 0:e.edges)||[]){const d=String((p==null?void 0:p.source)||""),m=String((p==null?void 0:p.target)||"");!r.has(d)||!r.has(m)||d===m||i.get(d).has(m)||(i.get(d).add(m),o.set(m,o.get(m)+1))}const a=(p,d)=>n.get(p)-n.get(d),l=t.filter(p=>o.get(p)===0).sort(a),c=new Map(t.map(p=>[p,0])),u=new Set;for(;l.length;){const p=l.shift();u.add(p);for(const d of[...i.get(p)].sort(a))c.set(d,Math.max(c.get(d),c.get(p)+1)),o.set(d,o.get(d)-1),o.get(d)===0&&(l.push(d),l.sort(a))}let f=Math.max(0,...c.values());for(const p of t)u.has(p)||(f+=1,c.set(p,f));return c}function Yh(e,t,n,r){let i=t;for(const o of e)r[o]={...r[o],y:i},i+=xa(n,o).height+pa;return i}function iQ(e){var f,p;const t=mL(e),n=new Map(t.map((d,m)=>[d,m])),r=sQ(e,t,n),i=new Set;for(const d of(e==null?void 0:e.edges)||[])rQ(e,d)&&(i.add(String(d.source)),i.add(String(d.target)));for(const d of t){const m=String(((p=(f=e==null?void 0:e.instances)==null?void 0:f[d])==null?void 0:p.definitionId)||"");(m==="workspace_run"||m==="workspace_scheduled_run")&&i.add(d)}const o=new Map;for(const d of t){const m=r.get(d)||0;o.has(m)||o.set(m,[]),o.get(m).push(d)}const a=[...o.keys()].sort((d,m)=>d-m),l={};let c=hL;for(const d of o.values()){const m=d.filter(w=>i.has(w)),g=d.filter(w=>{var y,k;return!i.has(w)&&!String(((k=(y=e==null?void 0:e.instances)==null?void 0:y[w])==null?void 0:k.definitionId)||"").startsWith("display_")}),v=g.reduce((w,y)=>w+xa(e,y).height,0)+Math.max(0,g.length-1)*pa;if(m.length)c=Math.max(c,v+pa+80);else{const w=d.reduce((y,k)=>y+xa(e,k).height,0)+Math.max(0,d.length-1)*pa;c=Math.max(c,w/2+80)}}let u=pL;for(const d of a){const m=o.get(d).sort((k,b)=>n.get(k)-n.get(b)),g=m.filter(k=>i.has(k)),v=m.filter(k=>{var b,S;return!i.has(k)&&!String(((S=(b=e==null?void 0:e.instances)==null?void 0:b[k])==null?void 0:S.definitionId)||"").startsWith("display_")}),w=m.filter(k=>!i.has(k)&&!v.includes(k));for(const k of m)l[k]={x:u,y:c};if(g.length){const k=c,b=Yh(g,k,e,l),S=v.reduce((j,C)=>j+xa(e,C).height,0)+Math.max(0,v.length-1)*pa;Yh(v,k-pa-S,e,l),Yh(w,b,e,l)}else{const k=[...v,...w],b=k.reduce((S,j)=>S+xa(e,j).height,0)+Math.max(0,k.length-1)*pa;Yh(k,c-b/2,e,l)}const y=Math.max(...m.map(k=>xa(e,k).width),0);u+=y+nQ}return l}function vE(e){return e&&Number.isFinite(e.x)&&Number.isFinite(e.y)}function oQ(e,t){return e.x<t.x+t.width+Gh&&e.x+e.width+Gh>t.x&&e.y<t.y+t.height+Gh&&e.y+e.height+Gh>t.y}function aQ(e,{preserveExisting:t=!0}={}){var a,l,c;const n=iQ(e||{}),r=(a=e==null?void 0:e.ui)!=null&&a.nodePositions&&typeof e.ui.nodePositions=="object"?e.ui.nodePositions:{},i=t?{...r}:{},o=[];if(t)for(const[u,f]of Object.entries(r)){if(!vE(f))continue;const p=xa(e,u);o.push({id:u,x:f.x,y:f.y,...p})}for(const u of mL(e||{})){if(t&&vE(r[u]))continue;const f=xa(e,u),p={x:bE((l=n[u])==null?void 0:l.x,pL),y:bE((c=n[u])==null?void 0:c.y,hL)};let d={id:u,...p,...f};for(;o.some(m=>oQ(d,m));)p.y+=f.height+pa,d={id:u,...p,...f};i[u]=p,o.push(d)}return i}function lQ({background:e=!1,requestId:t=0,currentRequestId:n=0,interactionActive:r=!1,dirty:i=!1,startedEditVersion:o=0,currentEditVersion:a=0,startedRevision:l="",currentRevision:c=""}={}){return t!==n?"superseded":e?r?"interaction-active":i||a!==o||c!==l?"local-edits":"":""}function cQ({savedGraph:e,sentGraph:t,savedRevision:n="",currentRevision:r=""}={}){return{graph:e||t||null,revision:String(n||r||"")}}function gL(e=[]){let t=!1,n=!1,r=!1;for(const i of Array.isArray(e)?e:[]){if((i==null?void 0:i.type)==="position"&&i.position){r=!0,i.dragging===!0&&(t=!0),i.dragging===!1&&(n=!0);continue}if((i==null?void 0:i.type)==="dimensions"&&i.dimensions){r=!0,i.resizing===!0&&(t=!0),i.resizing===!1&&(n=!0);continue}["add","remove","replace"].includes(i==null?void 0:i.type)&&(r=!0)}return{active:t,finished:n,mutated:r}}function uQ({nodeInteraction:e=!1,pointerCount:t=0,viewportInteraction:n=!1}={}){return!!(e||n||Number(t)>0)}function dQ(e=[]){const t=gL(e);return t.mutated&&!t.active}function fQ(e){return!!((e==null?void 0:e.type)==="position"&&e.position&&e.dragging===!0||(e==null?void 0:e.type)==="dimensions"&&e.dimensions&&e.resizing===!0)}function pQ(e){return!!((e==null?void 0:e.type)==="position"&&e.position&&e.dragging===!1||(e==null?void 0:e.type)==="dimensions"&&e.dimensions&&e.resizing===!1)}function hQ(e=[]){const t=[],n=[];let r=!1;for(const i of Array.isArray(e)?e:[]){if(fQ(i)){t.push(i);continue}n.push(i),pQ(i)&&(r=!0)}return{transient:t,committed:n,finishesInteraction:r}}function Pm(e=[]){const t=[],n=new Map;for(const r of Array.isArray(e)?e:[]){const i=String((r==null?void 0:r.id)||"").trim();if(!(i&&((r==null?void 0:r.type)==="position"||(r==null?void 0:r.type)==="dimensions"))){t.push(r);continue}const a=`${r.type}:${i}`,l=n.get(a);l==null?(n.set(a,t.length),t.push(r)):t[l]=r}return t}function mQ(e=[]){return Pm(e).map(t=>(t==null?void 0:t.type)==="position"&&t.position&&t.dragging===!0?{...t,dragging:!1}:(t==null?void 0:t.type)==="dimensions"&&t.dimensions&&t.resizing===!0?{...t,resizing:!1}:t)}function jE(e){const t=Number((e==null?void 0:e.width)||0),n=Number((e==null?void 0:e.height)||0);return!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n<=0?null:{width:t,height:n}}function bS({resizing:e=!1,liveSize:t=null,persistedSize:n=null}={}){const r=jE(n);return e&&jE(t)||r}function gQ({phase:e="loading",detail:t="",nodeInteracting:n=!1}={}){if(n)return{phase:"interacting",label:"交互保护中",detail:"远端更新暂缓,松手后同步"};const r={loading:"载入中",dirty:"有未同步修改",saving:"同步中",synced:"已同步",conflict:"同步冲突",error:"同步失败",readonly:"只读"}[e]||"同步状态";return{phase:e,label:r,detail:t}}function SE(e,t){return{...t,waiters:[...Array.isArray(e==null?void 0:e.waiters)?e.waiters:[],...Array.isArray(t==null?void 0:t.waiters)?t.waiters:[]]}}function yQ({background:e=!1}={}){return{graph:!0,nodes:!e,files:!e}}function wQ({eventType:e="",revision:t="",currentRevision:n="",targetRevision:r="",refreshPending:i=!1}={}){return e!=="graph.committed"||!t?!1:t===n?!0:t===r&&i}const xQ=320,bQ=96;function Tg(e){var t;return!!((t=e==null?void 0:e.data)!=null&&t.isWorkspaceGroup)}function kQ(e,t){var n,r,i;return{position:{x:Number((n=e==null?void 0:e.position)==null?void 0:n.x)||0,y:Number((r=e==null?void 0:e.position)==null?void 0:r.y)||0},memberPositions:new Map((Array.isArray((i=e==null?void 0:e.data)==null?void 0:i.nodeIds)?e.data.nodeIds:[]).map(o=>t.get(String(o||""))).filter(o=>o&&!Tg(o)).map(o=>{var a,l;return[o.id,{x:Number((a=o.position)==null?void 0:a.x)||0,y:Number((l=o.position)==null?void 0:l.y)||0}]}))}}function vQ(e,t,n=new Map){const r=Array.isArray(e)?e:[],i=new Map((Array.isArray(t)?t:[]).map(l=>[l.id,l])),o=new Set(r.map(l=>String((l==null?void 0:l.id)||"")).filter(Boolean)),a=[...r];for(const l of r){if((l==null?void 0:l.type)!=="position"||!l.position)continue;const c=i.get(l.id);if(!Tg(c))continue;const u=l.dragging===!0||l.dragging===!1;let f=u?n.get(l.id):null;f||(f=kQ(c,i),u&&n.set(l.id,f));const p=Number(l.position.x)-f.position.x,d=Number(l.position.y)-f.position.y;if(!(!Number.isFinite(p)||!Number.isFinite(d))){for(const[m,g]of f.memberPositions)o.has(m)||a.push({type:"position",id:m,position:{x:g.x+p,y:g.y+d},dragging:l.dragging});l.dragging===!1&&n.delete(l.id)}}return a}function jQ(e){const t=String(e||"");return t==="display_html"||t==="display_react_app"?{width:720,height:520}:t==="display_table"||t==="display_chart"||t==="display_code"?{width:640,height:380}:t==="display_image"?{width:520,height:360}:t.startsWith("display_")?{width:520,height:320}:{width:xQ,height:bQ}}function jl(e){const t=Number(e==null?void 0:e.width),n=Number(e==null?void 0:e.height);return!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n<=0?null:{width:t,height:n}}function SQ(e){var t,n,r;return jl({width:e==null?void 0:e.width,height:e==null?void 0:e.height})||jl(e==null?void 0:e.measured)||jl((t=e==null?void 0:e.data)==null?void 0:t.displaySize)||jl((n=e==null?void 0:e.data)==null?void 0:n.nodeSize)||jQ((r=e==null?void 0:e.data)==null?void 0:r.definitionId)}function yL(e,{padding:t=52,minWidth:n=240,minHeight:r=160}={}){const i=Array.isArray(e)?e:[],o=new Map(i.map(c=>[String((c==null?void 0:c.id)||""),c]));let a=!1;const l=i.map(c=>{var j,C,R,I;if(!Tg(c))return c;const u=Array.from(new Set(Array.isArray((j=c.data)==null?void 0:j.nodeIds)?c.data.nodeIds:[])).map(D=>o.get(String(D||""))).filter(D=>D&&!Tg(D));if(u.length===0)return c;const f=u.reduce((D,E)=>{var $,H;const O=Number(($=E.position)==null?void 0:$.x)||0,z=Number((H=E.position)==null?void 0:H.y)||0,W=SQ(E);return{minX:Math.min(D.minX,O),minY:Math.min(D.minY,z),maxX:Math.max(D.maxX,O+W.width),maxY:Math.max(D.maxY,z+W.height)}},{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),p=Number((C=c.position)==null?void 0:C.x)||0,d=Number((R=c.position)==null?void 0:R.y)||0,m=jl({width:c.width,height:c.height})||jl((I=c.data)==null?void 0:I.nodeSize)||jl(c.measured)||{width:n,height:r},g=Math.min(p,f.minX-t),v=Math.min(d,f.minY-t),w=Math.max(p+m.width,f.maxX+t),y=Math.max(d+m.height,f.maxY+t),k={width:Math.max(n,Math.round(w-g)),height:Math.max(r,Math.round(y-v))},b=Math.round(g),S=Math.round(v);return b===p&&S===d&&k.width===Math.round(m.width)&&k.height===Math.round(m.height)?c:(a=!0,{...c,position:{x:b,y:S},width:k.width,height:k.height,data:{...c.data,nodeSize:k}})});return a?l:i}function Ty(e){return`subflow-start:${String(e||"")}`}function Ry(e){return`subflow-return:${String(e||"")}`}function Tm(e,t,n){return(Array.isArray(e==null?void 0:e[t])?e[t]:[]).findIndex(i=>String((i==null?void 0:i.name)||"")===String(n||""))}function NQ(e,t,n){var a;const i=Number.parseInt(String(n||"").replace("output-",""),10),o=Array.isArray(e==null?void 0:e[t])?e[t]:[];return String(((a=o[Number.isFinite(i)?i:0])==null?void 0:a.name)||"")}function NE(e,t){var n;return String(((n=e==null?void 0:e[t])==null?void 0:n.label)||t||"Node")}function _E(e){return Object.entries(e||{}).map(([t,n])=>({name:t,type:String((n==null?void 0:n.type)||"text")}))}function CE(e,t){var i;if(!(t!=null&&t.nodeId)||!(t!=null&&t.slot))return;const r=(Array.isArray((i=e==null?void 0:e[t.nodeId])==null?void 0:i.output)?e[t.nodeId].output:[]).find(o=>String((o==null?void 0:o.name)||"")===String(t.slot));return(r==null?void 0:r.value)??(r==null?void 0:r.default)}function _Q(e,t=""){if(e==null||e==="")return null;try{const n=typeof e=="string"?JSON.parse(e):e;return!n||typeof n!="object"||Array.isArray(n)?{value:n,fields:[],sourceNodeId:t}:{value:n,sourceNodeId:t,fields:Object.entries(n).map(([r,i])=>({name:r,type:Array.isArray(i)?`array(${i.length})`:i===null?"null":typeof i,preview:typeof i=="object"?JSON.stringify(i):String(i)}))}}catch{return null}}const CQ=new Set(["iteration","idempotencyKey"]);function ep(e){return CQ.has(String(e||""))}function wL(e={},t={},n=[]){const r=[],i=Array.isArray(n)?n:[];for(const[o,a]of Object.entries(e||{})){const l=String((a==null?void 0:a.definitionId)||""),c=l==="control_subflow_call"?[{kind:"call",role:"call",subflowId:String((a==null?void 0:a.subflowId)||"")}]:l==="control_while"?[{kind:"while",role:"condition",subflowId:String((a==null?void 0:a.conditionSubflowId)||"")},{kind:"while",role:"body",subflowId:String((a==null?void 0:a.bodySubflowId)||"")}]:[];for(const u of c){const f=t==null?void 0:t[u.subflowId];if(!u.subflowId||!f)continue;const p=NE(e,o),d=String((f==null?void 0:f.label)||u.subflowId),m=_E(f.inputs).filter(({name:v})=>u.kind!=="while"||!ep(v)).map(({name:v,type:w})=>{let y=`${p}.${v}`,k=u.kind==="while"?`While.${v}`:`Call.${v}`,b=o;if(u.kind==="call"){const S=Tm(a,"input",v),j=S>=0?i.find(C=>String((C==null?void 0:C.target)||"")===o&&String((C==null?void 0:C.targetHandle)||"")===`input-${S}`):null;if(j){const C=String(j.source||""),R=NQ(e==null?void 0:e[C],"output",j.sourceHandle)||"output";y=`${NE(e,C)}.${R}`,k=`${C}.${R}`,b=C}}return{name:v,type:w,from:y,fromShort:k,to:`${d}.${v}`,toShort:v,fromNodeId:b,toNodeId:Ty(u.subflowId)}}),g=_E(f.outputs).map(({name:v,type:w})=>({name:v,type:w,from:`${d}.${v}`,fromShort:v,to:`${p}.${v}`,toShort:u.kind==="while"?`While.${v}`:`Call.${v}`,fromNodeId:Ry(u.subflowId),toNodeId:o}));r.push({id:u.kind==="while"?`while-subflow:${o}:${u.role}:${u.subflowId}`:`subflow-call:${o}:${u.subflowId}`,kind:u.kind,role:u.role,callerId:o,callerLabel:p,subflowId:u.subflowId,subflowLabel:d,inputMappings:m,outputMappings:g})}}return r}function lb(e,t){const n=(t==null?void 0:t[e])||{};return{width:Math.max(180,Number(n.width)||320),height:Math.max(96,Number(n.height)||96)}}function Jh(e,t){const n=(t==null?void 0:t[e])||{};return{x:Number(n.x)||0,y:Number(n.y)||0}}function AE(e,t,n){const r=t==null?void 0:t[e];return!r||!Number.isFinite(Number(r.x))||!Number.isFinite(Number(r.y))?n:{x:Number(r.x),y:Number(r.y)}}function AQ(e,t,n){var l,c;const r=String((e==null?void 0:e.source)||""),i=String((e==null?void 0:e.target)||"");if(!t.has(r)||!t.has(i))return!1;const o=Number.parseInt(String((e==null?void 0:e.sourceHandle)||"").replace("output-",""),10),a=Array.isArray((l=n==null?void 0:n[r])==null?void 0:l.output)?n[r].output:[];return String(((c=a[o])==null?void 0:c.name)||"")==="next"}function EE({id:e,kind:t,subflowId:n,subflowLabel:r,subflowRole:i,label:o,position:a,width:l,height:c,contract:u,inputs:f,outputs:p,callRelations:d,fixedContract:m=!1,statePreview:g=null}){return{id:e,type:"flowNode",position:a,width:l,height:c,draggable:!0,deletable:!1,selectable:!0,zIndex:2,data:{isSubflowBoundary:!0,boundaryKind:t,subflowId:n,subflowLabel:r,subflowRole:i,label:o,title:o,contract:u,callRelations:d,fixedContract:m,statePreview:g,inputs:f,outputs:p,nodeSize:{width:l,height:c}}}}function EQ({instances:e={},subflows:t={},edges:n=[],positions:r={},sizes:i={},boundaryPositions:o={}}={}){var d,m,g;const a=[],l=[],c={},u=new Set,f=new Set,p=wL(e,t,n);for(const[v,w]of Object.entries(t||{})){const y=(Array.isArray(w==null?void 0:w.nodeIds)?w.nodeIds:[]).map(String).filter(pe=>e==null?void 0:e[pe]),k=new Set(y),b=(Array.isArray(w==null?void 0:w.roots)?w.roots:[]).map(String).filter(pe=>k.has(pe));if(!y.length)continue;const S=p.some(pe=>pe.subflowId===v&&pe.kind==="while");if(!b.length&&!S)continue;const j=Object.entries((w==null?void 0:w.inputs)||{}).map(([pe,Ce])=>({name:pe,type:String((Ce==null?void 0:Ce.type)||"text"),nodeId:String((Ce==null?void 0:Ce.nodeId)||""),slot:String((Ce==null?void 0:Ce.slot)||"")}));let C=Object.entries((w==null?void 0:w.outputs)||{}).map(([pe,Ce])=>({name:pe,type:String((Ce==null?void 0:Ce.type)||"text"),nodeId:String((Ce==null?void 0:Ce.nodeId)||""),slot:String((Ce==null?void 0:Ce.slot)||"")}));const R=p.filter(pe=>pe.subflowId===v),I=R.some(pe=>pe.kind==="while"),D=R.find(pe=>pe.kind==="while"),E=(D==null?void 0:D.role)||"call";I&&(C=(E==="condition"?[{name:"decision",type:"text",required:!0},{name:"summary",type:"text",required:!1}]:[{name:"state",type:"json",required:!0},{name:"summary",type:"text",required:!1}]).map(Ce=>{const qe=C.find(Xe=>Xe.name===Ce.name);return{...Ce,...qe||{}}}));const O=j.filter(pe=>!I||!ep(pe.name)),z=(Array.isArray(n)?n:[]).filter(pe=>AQ(pe,k,e)),W=new Set(z.map(pe=>String(pe.source))),H=y.filter(pe=>{var Ce;return String(((Ce=e==null?void 0:e[pe])==null?void 0:Ce.definitionId)||"")!=="workspace_subflow_input"}).filter(pe=>!W.has(pe)),P=H.length?H:Array.from(new Set(C.map(pe=>pe.nodeId).filter(pe=>k.has(pe)))),F=y.filter(pe=>r==null?void 0:r[pe]),L=b.length?b:F,q=L.map(pe=>Jh(pe,r)),M=340,te=1,G=1+O.length,K=Math.max(112,72+Math.max(te,G)*24),oe=L.length?L.reduce((pe,Ce)=>{const qe=Jh(Ce,r);return pe+qe.y+lb(Ce,i).height/2},0)/L.length:220,be={x:q.length?Math.round(Math.min(...q.map(pe=>pe.x))-M-80):80,y:Math.round(oe-K/2)},ee=P.length?P:L,he=340,me=1+C.length+(I?0:1),re=Math.max(112,72+me*24),le=ee.length?ee.reduce((pe,Ce)=>{const qe=Jh(Ce,r);return pe+qe.y+lb(Ce,i).height/2},0)/ee.length:oe,ve={x:ee.length?Math.round(Math.max(...ee.map(pe=>Jh(pe,r).x+lb(pe,i).width))+110):820,y:Math.round(le-re/2)},ae=Ty(v),de=Ry(v),Ae=AE(ae,o,be),Te=AE(de,o,ve);a.push(EE({id:ae,kind:"start",subflowId:v,subflowLabel:String((w==null?void 0:w.label)||v),subflowRole:E,label:"Subflow Start",position:Ae,width:M,height:K,contract:O.map(({name:pe,type:Ce})=>({name:pe,type:Ce})),inputs:[{name:"calls",type:"node"}],outputs:[{name:"next",type:"node"},...O.map(({name:pe,type:Ce})=>({name:pe,type:Ce}))],callRelations:R})),a.push(EE({id:de,kind:"return",subflowId:v,subflowLabel:String((w==null?void 0:w.label)||v),subflowRole:E,label:"Subflow Return",position:Te,width:he,height:re,contract:C.map(({name:pe,type:Ce,required:qe,nodeId:Xe})=>({name:pe,type:Ce,...qe!==void 0?{required:qe}:{},...I?{connected:!!Xe}:{}})),inputs:[{name:"prev",type:"node"},...C.map(({name:pe,type:Ce,required:qe})=>({name:pe,type:Ce,...qe!==void 0?{required:qe}:{}})),...I?[]:[{name:"add output",type:"any",addOutput:!0}]],outputs:[],callRelations:R,fixedContract:I,statePreview:E==="body"?_Q(CE(e,(d=w==null?void 0:w.outputs)==null?void 0:d.state)??CE(e,{nodeId:D==null?void 0:D.callerId,slot:"state"}),((g=(m=w==null?void 0:w.outputs)==null?void 0:m.state)==null?void 0:g.nodeId)||(D==null?void 0:D.callerId)||""):null})),c[v]=[ae,de];const Ie=new Map(j.map(pe=>[`${pe.nodeId}\0${pe.slot}`,{...pe,visibleContractIndex:O.findIndex(Ce=>Ce.name===pe.name)}])),Oe=new Set(j.map(pe=>pe.nodeId).filter(pe=>{var Ce;return k.has(pe)&&String(((Ce=e==null?void 0:e[pe])==null?void 0:Ce.definitionId)||"")==="workspace_subflow_input"}));for(const pe of Oe){const Ce=(Array.isArray(n)?n:[]).filter(Xe=>String((Xe==null?void 0:Xe.source)||"")===pe);Ce.every(Xe=>{var st,kt,je;if(!k.has(String((Xe==null?void 0:Xe.target)||"")))return!1;const bt=Number.parseInt(String((Xe==null?void 0:Xe.sourceHandle)||"").replace("output-",""),10),Be=String(((je=(kt=(st=e==null?void 0:e[pe])==null?void 0:st.output)==null?void 0:kt[bt])==null?void 0:je.name)||"");return Ie.has(`${pe}\0${Be}`)})&&(u.add(pe),Ce.forEach((Xe,bt)=>{var je,se,N;const Be=Number.parseInt(String((Xe==null?void 0:Xe.sourceHandle)||"").replace("output-",""),10),st=String(((N=(se=(je=e==null?void 0:e[pe])==null?void 0:je.output)==null?void 0:se[Be])==null?void 0:N.name)||""),kt=Ie.get(`${pe}\0${st}`);if(kt){if(kt.visibleContractIndex<0){f.add(`${String(Xe.target)}\0${String(Xe.targetHandle||"")}`);return}l.push({id:`subflow-start-data:${v}:${kt.name}:${bt}`,source:ae,target:String(Xe.target),sourceHandle:`output-${kt.visibleContractIndex+1}`,targetHandle:Xe.targetHandle??void 0,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"data"}})}}))}b.forEach((pe,Ce)=>{const qe=Tm(e[pe],"input","prev");qe<0||l.push({id:`subflow-start-edge:${v}:${pe}:${Ce}`,source:ae,target:pe,sourceHandle:"output-0",targetHandle:`input-${qe}`,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"control"}})}),ee.forEach((pe,Ce)=>{const qe=Tm(e[pe],"output","next");qe<0||l.push({id:`subflow-return-control:${v}:${pe}:${Ce}`,source:pe,target:de,sourceHandle:`output-${qe}`,targetHandle:"input-0",data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"control"}})}),C.forEach((pe,Ce)=>{if(!k.has(pe.nodeId))return;const qe=Tm(e[pe.nodeId],"output",pe.slot);qe<0||l.push({id:`subflow-return-data:${v}:${pe.name}:${Ce}`,source:pe.nodeId,target:de,sourceHandle:`output-${qe}`,targetHandle:`input-${Ce+1}`,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"data"}})})}return{nodes:a,edges:l,groupMemberIds:c,hiddenNodeIds:Array.from(u),hiddenInputHandles:Array.from(f)}}function IE(e,t,n){return(Array.isArray(e==null?void 0:e[t])?e[t]:[]).findIndex(i=>String((i==null?void 0:i.name)||"")===String(n||""))}function Pc(e,t){const n=Number.parseInt(String(e||"").replace(t,""),10);return Number.isFinite(n)?n:-1}function ua(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}_${r}`,r+=1;return t.add(n),n}function Ld(e,t,n,r){return{definitionId:"workspace_subflow_input",label:n,subflowId:t,subflowInputName:n,subflowInputType:r,input:[],output:[{type:r,name:"value",value:""}]}}function IQ({whileId:e,instance:t,instances:n={},subflows:r={}}){const i=String(e||"").trim();if(!i)return null;const o=new Set([...Object.keys(n),...Object.keys(r)]),a=ua(`${i}Condition`,o),l=ua(`${i}Body`,o),c=ua(`${i}_condition_state`,o),u=ua(`${i}_condition_iteration`,o),f=ua(`${i}_body_state`,o),p=ua(`${i}_body_iteration`,o),d=ua(`${i}_body_idempotency_key`,o),m={[c]:Ld(c,a,"state","json"),[u]:Ld(u,a,"iteration","text"),[f]:Ld(f,l,"state","json"),[p]:Ld(p,l,"iteration","text"),[d]:Ld(d,l,"idempotencyKey","text")};return{instance:{...t||{},conditionSubflowId:a,bodySubflowId:l},instances:m,subflows:{[a]:{id:a,label:"判断是否继续",inputs:{state:{nodeId:c,slot:"value",type:"json"},iteration:{nodeId:u,slot:"value",type:"text"}},outputs:{},roots:[],nodeIds:[c,u]},[l]:{id:l,label:"执行一轮",inputs:{state:{nodeId:f,slot:"value",type:"json"},iteration:{nodeId:p,slot:"value",type:"text"},idempotencyKey:{nodeId:d,slot:"value",type:"text"}},outputs:{},roots:[],nodeIds:[f,p,d]}}}}function PQ(e={},t,n){const r=String(t||""),i=e==null?void 0:e[r];return!i||!n?e:{...e,[r]:{...i,nodeIds:Array.from(new Set([...i.nodeIds||[],String(n)]))}}}function TQ(e={},t,n,r){var u,f;const i=String(t||""),o=String(n||"").trim(),a=String(r||"").trim(),l=e==null?void 0:e[i];if(!l||!o||!((u=l.outputs)!=null&&u[o]))return{subflows:e,error:"输出变量不存在"};if(!a)return{subflows:e,error:"输出变量名不能为空"};if(!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(a))return{subflows:e,error:"输出变量名只能使用字母、数字、_ 或 $,且不能以数字开头"};if(a!==o&&((f=l.outputs)!=null&&f[a]))return{subflows:e,error:`输出变量 ${a} 已存在`};if(a===o)return{subflows:e};const c=Object.fromEntries(Object.entries(l.outputs||{}).map(([p,d])=>p===o?[a,d]:[p,d]));return{subflows:{...e,[i]:{...l,outputs:c}}}}function RQ(e={},t,n){var a;const r=String(t||""),i=String(n||"").trim(),o=e==null?void 0:e[r];return!o||!i||!((a=o.outputs)!=null&&a[i])?{subflows:e,error:"输出变量不存在"}:{subflows:{...e,[r]:{...o,outputs:Object.fromEntries(Object.entries(o.outputs||{}).filter(([l])=>l!==i))}}}}function xL(e,t,n={}){var l;const r=String(t||""),i=(l=e==null?void 0:e.subflows)==null?void 0:l[r];if(!e||!i)return e;const o=typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e)),a=new Set;for(const[c,u]of Object.entries(o.instances||{})){if(String((u==null?void 0:u.definitionId)||"")!=="control_subflow_call"||String((u==null?void 0:u.subflowId)||"")!==r)continue;a.add(String(c));const f=Array.isArray(u.output)?u.output:[],p=f.filter(g=>String((g==null?void 0:g.type)||"")==="node");p.length||p.push({name:"next",type:"node",value:""});const d=new Map(f.map(g=>[String((g==null?void 0:g.name)||""),g])),m=Object.entries(i.outputs||{}).map(([g,v])=>{var k;const w=((k=Object.entries(n||{}).find(([,b])=>String(b)===g))==null?void 0:k[0])||g,y=d.get(w)||d.get(g)||{};return{...y,name:g,type:String((v==null?void 0:v.type)||(y==null?void 0:y.type)||"text"),value:(y==null?void 0:y.value)??(y==null?void 0:y.default)??""}});u.output=[...p,...m],o.edges=(o.edges||[]).flatMap(g=>{if(String((g==null?void 0:g.source)||"")!==String(c))return[g];const v=Pc(g.sourceHandle,"output-"),w=f[v];if(!w)return[];const y=(n==null?void 0:n[String(w.name||"")])||String(w.name||""),k=u.output.findIndex(b=>String((b==null?void 0:b.name)||"")===y);return k<0?[]:[{...g,sourceHandle:`output-${k}`}]})}return a.size?o:e}function MQ({graph:e,params:t,sourceNode:n,targetNode:r,activeSubflowId:i=""}){var d,m,g,v,w,y,k,b,S,j,C,R,I,D;if(!e||!t)return{handled:!1,graph:e};const o=(d=n==null?void 0:n.data)!=null&&d.isSubflowBoundary?n.data:null,a=(m=r==null?void 0:r.data)!=null&&m.isSubflowBoundary?r.data:null;if(!o&&!a)return{handled:!1,graph:e};const l=String((o==null?void 0:o.subflowId)||(a==null?void 0:a.subflowId)||i||""),c=(g=e==null?void 0:e.subflows)==null?void 0:g[l];if(!c)return{handled:!0,error:"子流程不存在",graph:e};const u=new Set((c.nodeIds||[]).map(String)),f=typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e)),p=f.subflows[l];if((o==null?void 0:o.boundaryKind)==="start"&&!a){if(!u.has(String(t.target||"")))return{handled:!0,error:"只能连接当前子流程中的节点",graph:e};const E=Pc(t.sourceHandle,"output-");if(E===0){const P=IE((v=f.instances)==null?void 0:v[t.target],"input","prev");return P<0||String(t.targetHandle||"")!==`input-${P}`?{handled:!0,error:"START.next 只能连接节点的 prev",graph:e}:(p.roots=Array.from(new Set([...p.roots||[],String(t.target)])),{handled:!0,graph:f})}const O=Object.entries(p.inputs||{}).filter(([P])=>!ep(P)),[z,W]=O[E-1]||[];if(!z||!(W!=null&&W.nodeId))return{handled:!0,error:"未知的 START 输入端口",graph:e};const $=Pc(t.targetHandle,"input-"),H=(k=(y=(w=f.instances)==null?void 0:w[t.target])==null?void 0:y.input)==null?void 0:k[$];return!H||String(H.type||"")!==String(W.type||"text")?{handled:!0,error:`类型不兼容:${W.type||"text"}`,graph:e}:(f.edges=(f.edges||[]).filter(P=>!(String(P.target)===String(t.target)&&String(P.targetHandle||"")===String(t.targetHandle||""))),f.edges.push({source:String(W.nodeId),target:String(t.target),sourceHandle:"output-0",targetHandle:String(t.targetHandle)}),{handled:!0,graph:f})}if((a==null?void 0:a.boundaryKind)==="return"&&!o){if(!u.has(String(t.source||"")))return{handled:!0,error:"只能从当前子流程中的节点返回",graph:e};const E=Pc(t.targetHandle,"input-");if(E===0){const P=IE((b=f.instances)==null?void 0:b[t.source],"output","next");return P<0||String(t.sourceHandle||"")!==`output-${P}`?{handled:!0,error:"RETURN.prev 只能接节点的 next",graph:e}:(f.edges||[]).some(L=>String((L==null?void 0:L.source)||"")===String(t.source||"")&&String((L==null?void 0:L.sourceHandle)||"")===`output-${P}`&&u.has(String((L==null?void 0:L.target)||"")))?{handled:!0,error:"RETURN.prev 只能从子流程的末端节点连入",graph:e}:{handled:!0,graph:f}}const O=String(a.subflowRole||"call"),z=O==="condition"?[{name:"decision",type:"text"},{name:"summary",type:"text"}]:O==="body"?[{name:"state",type:"json"},{name:"summary",type:"text"}]:a.contract||[];if(O==="call"&&E===z.length+1){const P=Pc(t.sourceHandle,"output-"),F=(C=(j=(S=f.instances)==null?void 0:S[t.source])==null?void 0:j.output)==null?void 0:C[P];if(!F||String(F.type||"")==="node")return{handled:!0,error:"请把数据输出连到 ADD OUTPUT",graph:e};const L=new Set(Object.keys(p.outputs||{})),q=String(F.name||"output").replace(/[^A-Za-z0-9_$]/g,"_")||"output",M=/^[A-Za-z_$]/.test(q)?q:`output_${q}`,te=ua(M,L);return p.outputs={...p.outputs||{},[te]:{nodeId:String(t.source),slot:String(F.name||""),type:String(F.type||"text")}},{handled:!0,graph:xL(f,l),addedOutputName:te}}const W=z[E-1],$=Pc(t.sourceHandle,"output-"),H=(D=(I=(R=f.instances)==null?void 0:R[t.source])==null?void 0:I.output)==null?void 0:D[$];return!W||!H||String(H.type||"")!==String(W.type||"text")?{handled:!0,error:`返回值类型不兼容:需要 ${(W==null?void 0:W.type)||"unknown"}`,graph:e}:(p.outputs={...p.outputs||{},[W.name]:{nodeId:String(t.source),slot:String(H.name||""),type:String(W.type||"text")}},{handled:!0,graph:f})}return{handled:!0,error:"子流程边界只支持 START → 节点,或节点 → RETURN",graph:e}}function $Q({nodes:e=[],edges:t=[],subflow:n=null,subflowId:r=""}){if(!n||!r)return{nodes:e,edges:t};const i=new Set([...(n.nodeIds||[]).map(String),Ty(r),Ry(r)]),o=e.filter(l=>{var c;return i.has(String(l.id))&&!((c=l==null?void 0:l.data)!=null&&c.isSubflowInputProxy)}),a=new Set(o.map(l=>String(l.id)));return{nodes:o,edges:t.filter(l=>a.has(String(l.source))&&a.has(String(l.target)))}}const OQ=h.lazy(()=>JR(()=>import("./WorkflowAssistantThread-Bfo9Ythw.js"),[])),LQ="af:workspace-graph:v2",PE="agentflow.workspace.sidebarCollapsed",Tc=["DISPLAY","CONTROL","TOOL","PROVIDE","AGENT"],DQ=new Set(["png","jpg","jpeg","gif","webp","svg"]),tp=320,bL=180,kL=960,za=96,Rm=900,hv=520,mv=320,xs=52,Ii=240,Pi=160,gv="display-ref:",FQ="display-group-ref:",np="0 9 * * *",zQ="Asia/Shanghai",BQ="0.1.160";function WQ(){const e=new URLSearchParams(window.location.search),t=String(e.get("returnTo")||"").trim();return{flowId:e.get("flowId")||"",flowSource:e.get("flowSource")||"user",workspaceId:e.get("workspaceId")||"",workflowShare:e.get("workflowShare")||"",adminOwnerId:e.get("adminOwnerId")||"",archived:e.get("archived")==="1"||e.get("flowArchived")==="1",returnTo:t==="/workflows"||t.startsWith("/workflows?")?t:"",workflowDemo:e.get("workflowDemo")==="1"}}function Yr(e){const t=new URLSearchParams;return e.flowId&&t.set("flowId",e.flowId),e.flowSource&&t.set("flowSource",e.flowSource),e.workspaceId&&t.set("workspaceId",e.workspaceId),e.workflowShare&&t.set("workflowShare",e.workflowShare),e.adminOwnerId&&t.set("adminOwnerId",e.adminOwnerId),e.archived&&t.set("archived","1"),e.returnTo&&t.set("returnTo",e.returnTo),e.workflowDemo&&t.set("workflowDemo","1"),t}function la(e={}){return[e.workspaceId||"",e.flowSource||"user",e.flowId||""].join(" ")}function HQ(e){const t=String(e||"").trim();if(!t)return null;try{const n=JSON.parse(window.sessionStorage.getItem(`agentflow.workflow.demo:${t}`)||"null");return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}function kS(e,t=4e3){const n=String(e??"").trim();return n?n.length>t?`${n.slice(0,t)}
213
+ ${r}`),t}function qX(e){const t=[],n=new Map;for(const r of e){if(!r)continue;const i=Ic(r),o=i&&i!==Xt(r==null?void 0:r.label)?{...r,label:i}:r,a=hE(o),l=a.map(g=>n.get(g)).find(g=>g!=null);if(l==null){a.forEach(g=>n.set(g,t.length)),t.push(o);continue}const c=t[l],u=pE(o)>=pE(c)?Ic(o)||Ic(c):Ic(c)||Ic(o),f=!!Ig(c),p=!!Ig(o),d=f&&!p?c:o,m=d===c?o:c;t[l]={...m,...d,...u?{label:u}:{}},hE(t[l]).forEach(g=>n.set(g,l))}return t}function uL(e){const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.durability).toLowerCase(),r=Xt(e==null?void 0:e.persistence).toLowerCase(),i=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),o=[e==null?void 0:e.label,t,n,r,i].map(Xt).join(" ");return t==="temporary-review"||n==="temporary"||i==="local-draft"||/临时\s*(markdown)?\s*(预览|review)|local[-_ ]?draft/i.test(o)}function UX(e){if(!Zf(e)||uL(e))return!1;const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.durability).toLowerCase(),r=Xt(e==null?void 0:e.persistence).toLowerCase(),i=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),o=[e==null?void 0:e.label,t,n,r,i].map(Xt).join(" ");return t==="review"||n==="durable"||i==="ai-doc"||r==="ai-doc"||/方案文档预览|durable/i.test(o)}function GX(e){if(Zf(e))return!1;const t=Xt((e==null?void 0:e.kind)||(e==null?void 0:e.type)).toLowerCase(),n=Xt(e==null?void 0:e.persistence).toLowerCase(),r=Oo(e==null?void 0:e.source)||Oo((e==null?void 0:e.sourceArtifact)||(e==null?void 0:e.source_artifact)),i=[e==null?void 0:e.label,t].map(Xt).join(" ");return t==="ai-doc"||n==="ai-doc"||r==="ai-doc"||/方案文档|技术方案/.test(i)}function YX(e={}){const t=[e.stage,e.stageKey,e.stage_key,e.action,e.id,e.title].map(Xt).join(" ");return/(?:^|[:_-])issue[-_:]?plan(?:$|[:_-])|plan[-_:]?doc|submit[-_:]?plan/i.test(t)||/方案(?:文档)?(?:已确认|预览)/.test(t)}function JX(e=[],t={}){const n=qX(Array.isArray(e)?e:[]);if(!YX(t))return n;const r=n.filter(Zf);if(r.length===0)return n;const i=r.filter(UX),a=i.length>0||n.some(GX)?i.at(-1):r.filter(uL).at(-1);return n.filter(l=>!Zf(l)||l===a)}function Ui(e,t){const n=[],r=new Map,i=a=>{if(typeof a=="string")return[`value:${a}`];if(!a||typeof a!="object")return[];const l=[],c=Xt(a.key||a.artifactKey||a.artifact_key);c&&l.push(`key:${c}`);const u=cL(a.canonicalUrl||a.canonical_url||a.reviewUrl||a.review_url||a.href||a.url);u&&l.push(`url:${u}`);const f=Xt(a.path);return f&&l.push(`path:${f}`),l.length||l.push(`value:${JSON.stringify(a)}`),l},o=a=>{if(!a)return;const l=i(a);if(!l.length)return;const c=l.map(u=>r.get(u)).find(u=>u!=null);if(c==null){const u=n.length;n.push(a),l.forEach(f=>r.set(f,u));return}n[c]=a,i(a).forEach(u=>r.set(u,c))};return(Array.isArray(e)?e:[]).forEach(o),(Array.isArray(t)?t:[]).forEach(o),n}function Xr(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Pg(e){return Array.isArray(e)?e.map(Pg):Xr(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Pg(e[t])])):e}function _o(e,t){return JSON.stringify(Pg(e))===JSON.stringify(Pg(t))}function dL(e){return Xr(e==null?void 0:e.instances)?e.instances:{}}function Bl(e){return Xr(e==null?void 0:e.ui)?e.ui:{}}function Uh(e,t){if(!Xr(e))return{};const n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([r])=>!n.has(r)))}function XX(e,t){if(!Xr(e)||!Xr(t)||!Xr(e.instances)||!Xr(t.instances)||!Array.isArray(e.edges)||!Array.isArray(t.edges)||!Xr(e.ui)||!Xr(t.ui)||Number(e.version||1)!==Number(t.version||1))return!1;const n=Uh(e,["version","instances","edges","ui"]),r=Uh(t,["version","instances","edges","ui"]);if(!_o(n,r))return!1;const i=["nodePositions","nodeSizes","groups","displayPage","viewport","subflowBoundaryPositions"];return _o(Uh(e.ui,i),Uh(t.ui,i))}function fL(e){const t=Array.isArray(Bl(e).groups)?Bl(e).groups:[];return new Map(t.filter(n=>n==null?void 0:n.id).map(n=>[String(n.id),n]))}function mE(e){const t=new Set(Object.keys(dL(e)));for(const n of Array.isArray(e==null?void 0:e.edges)?e.edges:[])n!=null&&n.source&&t.add(String(n.source)),n!=null&&n.target&&t.add(String(n.target));for(const n of fL(e).keys())t.add(n);for(const n of Object.keys(Xr(Bl(e).subflowBoundaryPositions)?Bl(e).subflowBoundaryPositions:{}))t.add(n);return t}function gE(e,t){const n=dL(e),r=Bl(e),i=fL(e);return{instance:Object.prototype.hasOwnProperty.call(n,t)?n[t]:null,position:Xr(r.nodePositions)&&Object.prototype.hasOwnProperty.call(r.nodePositions,t)?r.nodePositions[t]:null,size:Xr(r.nodeSizes)&&Object.prototype.hasOwnProperty.call(r.nodeSizes,t)?r.nodeSizes[t]:null,boundaryPosition:Xr(r.subflowBoundaryPositions)&&Object.prototype.hasOwnProperty.call(r.subflowBoundaryPositions,t)?r.subflowBoundaryPositions[t]:null,group:i.get(t)||null}}function yE(e){return(Array.isArray(e==null?void 0:e.edges)?e.edges:[]).map(t=>({...t})).sort((t,n)=>{const r=[t.source,t.target,t.sourceHandle,t.targetHandle,t.id].map(o=>String(o??"")).join("\0"),i=[n.source,n.target,n.sourceHandle,n.targetHandle,n.id].map(o=>String(o??"")).join("\0");return r.localeCompare(i)})}function QX(e,t){if(!XX(e,t))return{safe:!1,changedNodeIds:[],nodesChanged:!0,edgesChanged:!0,displayPageChanged:!0};const n=new Set([...mE(e),...mE(t)]),r=Array.from(n).filter(i=>!_o(gE(e,i),gE(t,i)));return{safe:!0,changedNodeIds:r,nodesChanged:r.length>0,edgesChanged:!_o(yE(e),yE(t)),displayPageChanged:!_o(Bl(e).displayPage||null,Bl(t).displayPage||null)}}function ZX(e,t,n){const r=new Map((Array.isArray(e)?e:[]).map(o=>[o.id,o])),i=new Set(Array.isArray(n)?n:[]);return(Array.isArray(t)?t:[]).map(o=>{const a=r.get(o.id);return a&&!i.has(o.id)?a:a?{...o,selected:a.selected===!0}:o})}function wE(e){return[e==null?void 0:e.source,e==null?void 0:e.target,e==null?void 0:e.sourceHandle,e==null?void 0:e.targetHandle].map(t=>String(t??"")).join("\0")}function xE(e){if(!e||typeof e!="object")return e;const t={...e};return delete t.selected,t}function eQ(e,t){const n=new Map((Array.isArray(e)?e:[]).map(r=>[wE(r),r]));return(Array.isArray(t)?t:[]).map(r=>{const i=n.get(wE(r));return i?_o(xE(i),xE(r))?i:{...r,selected:i.selected===!0}:r})}function tQ(e,t,n){const r=Xr(e)?e:{},i=Xr(t)?t:{},o=new Set(Array.isArray(n)?n:[]);return Object.fromEntries(Object.entries(i).map(([a,l])=>[a,!o.has(a)&&Object.prototype.hasOwnProperty.call(r,a)?r[a]:l]))}const nQ=160,pa=72,pL=120,hL=360,Gh=28;function bE(e,t){return Number.isFinite(Number(e))?Number(e):t}function xa(e,t){var i,o,a,l;const n=(o=(i=e==null?void 0:e.ui)==null?void 0:i.nodeSizes)==null?void 0:o[t];if(n&&Number.isFinite(n.width)&&Number.isFinite(n.height))return{width:Math.max(80,n.width),height:Math.max(60,n.height)};const r=String(((l=(a=e==null?void 0:e.instances)==null?void 0:a[t])==null?void 0:l.definitionId)||"");return r==="workspace_run"||r==="workspace_scheduled_run"?{width:256,height:156}:r.startsWith("provide_")?{width:220,height:110}:r.startsWith("display_")?{width:496,height:160}:{width:260,height:150}}function kE(e){const t=/-(\d+)$/.exec(String(e||""));return t?Number(t[1]):0}function rQ(e,t){var a,l;const n=(a=e==null?void 0:e.instances)==null?void 0:a[t.source],r=(l=e==null?void 0:e.instances)==null?void 0:l[t.target],i=Array.isArray(n==null?void 0:n.output)?n.output[kE(t.sourceHandle)]:null,o=Array.isArray(r==null?void 0:r.input)?r.input[kE(t.targetHandle)]:null;return(i==null?void 0:i.type)==="node"||(o==null?void 0:o.type)==="node"}function mL(e){const t=[],n=new Set,r=i=>{const o=String(i||"");!o||n.has(o)||(n.add(o),t.push(o))};for(const i of Object.keys((e==null?void 0:e.instances)||{}))r(i);for(const i of(e==null?void 0:e.edges)||[])r(i==null?void 0:i.source),r(i==null?void 0:i.target);return t}function sQ(e,t,n){const r=new Set(t),i=new Map(t.map(p=>[p,new Set])),o=new Map(t.map(p=>[p,0]));for(const p of(e==null?void 0:e.edges)||[]){const d=String((p==null?void 0:p.source)||""),m=String((p==null?void 0:p.target)||"");!r.has(d)||!r.has(m)||d===m||i.get(d).has(m)||(i.get(d).add(m),o.set(m,o.get(m)+1))}const a=(p,d)=>n.get(p)-n.get(d),l=t.filter(p=>o.get(p)===0).sort(a),c=new Map(t.map(p=>[p,0])),u=new Set;for(;l.length;){const p=l.shift();u.add(p);for(const d of[...i.get(p)].sort(a))c.set(d,Math.max(c.get(d),c.get(p)+1)),o.set(d,o.get(d)-1),o.get(d)===0&&(l.push(d),l.sort(a))}let f=Math.max(0,...c.values());for(const p of t)u.has(p)||(f+=1,c.set(p,f));return c}function Yh(e,t,n,r){let i=t;for(const o of e)r[o]={...r[o],y:i},i+=xa(n,o).height+pa;return i}function iQ(e){var f,p;const t=mL(e),n=new Map(t.map((d,m)=>[d,m])),r=sQ(e,t,n),i=new Set;for(const d of(e==null?void 0:e.edges)||[])rQ(e,d)&&(i.add(String(d.source)),i.add(String(d.target)));for(const d of t){const m=String(((p=(f=e==null?void 0:e.instances)==null?void 0:f[d])==null?void 0:p.definitionId)||"");(m==="workspace_run"||m==="workspace_scheduled_run")&&i.add(d)}const o=new Map;for(const d of t){const m=r.get(d)||0;o.has(m)||o.set(m,[]),o.get(m).push(d)}const a=[...o.keys()].sort((d,m)=>d-m),l={};let c=hL;for(const d of o.values()){const m=d.filter(w=>i.has(w)),g=d.filter(w=>{var y,k;return!i.has(w)&&!String(((k=(y=e==null?void 0:e.instances)==null?void 0:y[w])==null?void 0:k.definitionId)||"").startsWith("display_")}),v=g.reduce((w,y)=>w+xa(e,y).height,0)+Math.max(0,g.length-1)*pa;if(m.length)c=Math.max(c,v+pa+80);else{const w=d.reduce((y,k)=>y+xa(e,k).height,0)+Math.max(0,d.length-1)*pa;c=Math.max(c,w/2+80)}}let u=pL;for(const d of a){const m=o.get(d).sort((k,b)=>n.get(k)-n.get(b)),g=m.filter(k=>i.has(k)),v=m.filter(k=>{var b,S;return!i.has(k)&&!String(((S=(b=e==null?void 0:e.instances)==null?void 0:b[k])==null?void 0:S.definitionId)||"").startsWith("display_")}),w=m.filter(k=>!i.has(k)&&!v.includes(k));for(const k of m)l[k]={x:u,y:c};if(g.length){const k=c,b=Yh(g,k,e,l),S=v.reduce((j,C)=>j+xa(e,C).height,0)+Math.max(0,v.length-1)*pa;Yh(v,k-pa-S,e,l),Yh(w,b,e,l)}else{const k=[...v,...w],b=k.reduce((S,j)=>S+xa(e,j).height,0)+Math.max(0,k.length-1)*pa;Yh(k,c-b/2,e,l)}const y=Math.max(...m.map(k=>xa(e,k).width),0);u+=y+nQ}return l}function vE(e){return e&&Number.isFinite(e.x)&&Number.isFinite(e.y)}function oQ(e,t){return e.x<t.x+t.width+Gh&&e.x+e.width+Gh>t.x&&e.y<t.y+t.height+Gh&&e.y+e.height+Gh>t.y}function aQ(e,{preserveExisting:t=!0}={}){var a,l,c;const n=iQ(e||{}),r=(a=e==null?void 0:e.ui)!=null&&a.nodePositions&&typeof e.ui.nodePositions=="object"?e.ui.nodePositions:{},i=t?{...r}:{},o=[];if(t)for(const[u,f]of Object.entries(r)){if(!vE(f))continue;const p=xa(e,u);o.push({id:u,x:f.x,y:f.y,...p})}for(const u of mL(e||{})){if(t&&vE(r[u]))continue;const f=xa(e,u),p={x:bE((l=n[u])==null?void 0:l.x,pL),y:bE((c=n[u])==null?void 0:c.y,hL)};let d={id:u,...p,...f};for(;o.some(m=>oQ(d,m));)p.y+=f.height+pa,d={id:u,...p,...f};i[u]=p,o.push(d)}return i}function lQ({background:e=!1,requestId:t=0,currentRequestId:n=0,interactionActive:r=!1,dirty:i=!1,startedEditVersion:o=0,currentEditVersion:a=0,startedRevision:l="",currentRevision:c=""}={}){return t!==n?"superseded":e?r?"interaction-active":i||a!==o||c!==l?"local-edits":"":""}function cQ({savedGraph:e,sentGraph:t,savedRevision:n="",currentRevision:r=""}={}){return{graph:e||t||null,revision:String(n||r||"")}}function gL(e=[]){let t=!1,n=!1,r=!1;for(const i of Array.isArray(e)?e:[]){if((i==null?void 0:i.type)==="position"&&i.position){r=!0,i.dragging===!0&&(t=!0),i.dragging===!1&&(n=!0);continue}if((i==null?void 0:i.type)==="dimensions"&&i.dimensions){r=!0,i.resizing===!0&&(t=!0),i.resizing===!1&&(n=!0);continue}["add","remove","replace"].includes(i==null?void 0:i.type)&&(r=!0)}return{active:t,finished:n,mutated:r}}function uQ({nodeInteraction:e=!1,pointerCount:t=0,viewportInteraction:n=!1}={}){return!!(e||n||Number(t)>0)}function dQ(e=[]){const t=gL(e);return t.mutated&&!t.active}function fQ(e){return!!((e==null?void 0:e.type)==="position"&&e.position&&e.dragging===!0||(e==null?void 0:e.type)==="dimensions"&&e.dimensions&&e.resizing===!0)}function pQ(e){return!!((e==null?void 0:e.type)==="position"&&e.position&&e.dragging===!1||(e==null?void 0:e.type)==="dimensions"&&e.dimensions&&e.resizing===!1)}function hQ(e=[]){const t=[],n=[];let r=!1;for(const i of Array.isArray(e)?e:[]){if(fQ(i)){t.push(i);continue}n.push(i),pQ(i)&&(r=!0)}return{transient:t,committed:n,finishesInteraction:r}}function Pm(e=[]){const t=[],n=new Map;for(const r of Array.isArray(e)?e:[]){const i=String((r==null?void 0:r.id)||"").trim();if(!(i&&((r==null?void 0:r.type)==="position"||(r==null?void 0:r.type)==="dimensions"))){t.push(r);continue}const a=`${r.type}:${i}`,l=n.get(a);l==null?(n.set(a,t.length),t.push(r)):t[l]=r}return t}function mQ(e=[]){return Pm(e).map(t=>(t==null?void 0:t.type)==="position"&&t.position&&t.dragging===!0?{...t,dragging:!1}:(t==null?void 0:t.type)==="dimensions"&&t.dimensions&&t.resizing===!0?{...t,resizing:!1}:t)}function jE(e){const t=Number((e==null?void 0:e.width)||0),n=Number((e==null?void 0:e.height)||0);return!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n<=0?null:{width:t,height:n}}function bS({resizing:e=!1,liveSize:t=null,persistedSize:n=null}={}){const r=jE(n);return e&&jE(t)||r}function gQ({phase:e="loading",detail:t="",nodeInteracting:n=!1}={}){if(n)return{phase:"interacting",label:"交互保护中",detail:"远端更新暂缓,松手后同步"};const r={loading:"载入中",dirty:"有未同步修改",saving:"同步中",synced:"已同步",conflict:"同步冲突",error:"同步失败",readonly:"只读"}[e]||"同步状态";return{phase:e,label:r,detail:t}}function SE(e,t){return{...t,waiters:[...Array.isArray(e==null?void 0:e.waiters)?e.waiters:[],...Array.isArray(t==null?void 0:t.waiters)?t.waiters:[]]}}function yQ({background:e=!1}={}){return{graph:!0,nodes:!e,files:!e}}function wQ({eventType:e="",revision:t="",currentRevision:n="",targetRevision:r="",refreshPending:i=!1}={}){return e!=="graph.committed"||!t?!1:t===n?!0:t===r&&i}const xQ=320,bQ=96;function Tg(e){var t;return!!((t=e==null?void 0:e.data)!=null&&t.isWorkspaceGroup)}function kQ(e,t){var n,r,i;return{position:{x:Number((n=e==null?void 0:e.position)==null?void 0:n.x)||0,y:Number((r=e==null?void 0:e.position)==null?void 0:r.y)||0},memberPositions:new Map((Array.isArray((i=e==null?void 0:e.data)==null?void 0:i.nodeIds)?e.data.nodeIds:[]).map(o=>t.get(String(o||""))).filter(o=>o&&!Tg(o)).map(o=>{var a,l;return[o.id,{x:Number((a=o.position)==null?void 0:a.x)||0,y:Number((l=o.position)==null?void 0:l.y)||0}]}))}}function vQ(e,t,n=new Map){const r=Array.isArray(e)?e:[],i=new Map((Array.isArray(t)?t:[]).map(l=>[l.id,l])),o=new Set(r.map(l=>String((l==null?void 0:l.id)||"")).filter(Boolean)),a=[...r];for(const l of r){if((l==null?void 0:l.type)!=="position"||!l.position)continue;const c=i.get(l.id);if(!Tg(c))continue;const u=l.dragging===!0||l.dragging===!1;let f=u?n.get(l.id):null;f||(f=kQ(c,i),u&&n.set(l.id,f));const p=Number(l.position.x)-f.position.x,d=Number(l.position.y)-f.position.y;if(!(!Number.isFinite(p)||!Number.isFinite(d))){for(const[m,g]of f.memberPositions)o.has(m)||a.push({type:"position",id:m,position:{x:g.x+p,y:g.y+d},dragging:l.dragging});l.dragging===!1&&n.delete(l.id)}}return a}function jQ(e){const t=String(e||"");return t==="display_html"||t==="display_react_app"?{width:720,height:520}:t==="display_table"||t==="display_chart"||t==="display_code"?{width:640,height:380}:t==="display_image"?{width:520,height:360}:t.startsWith("display_")?{width:520,height:320}:{width:xQ,height:bQ}}function jl(e){const t=Number(e==null?void 0:e.width),n=Number(e==null?void 0:e.height);return!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n<=0?null:{width:t,height:n}}function SQ(e){var t,n,r;return jl({width:e==null?void 0:e.width,height:e==null?void 0:e.height})||jl(e==null?void 0:e.measured)||jl((t=e==null?void 0:e.data)==null?void 0:t.displaySize)||jl((n=e==null?void 0:e.data)==null?void 0:n.nodeSize)||jQ((r=e==null?void 0:e.data)==null?void 0:r.definitionId)}function yL(e,{padding:t=52,minWidth:n=240,minHeight:r=160}={}){const i=Array.isArray(e)?e:[],o=new Map(i.map(c=>[String((c==null?void 0:c.id)||""),c]));let a=!1;const l=i.map(c=>{var j,C,R,I;if(!Tg(c))return c;const u=Array.from(new Set(Array.isArray((j=c.data)==null?void 0:j.nodeIds)?c.data.nodeIds:[])).map(D=>o.get(String(D||""))).filter(D=>D&&!Tg(D));if(u.length===0)return c;const f=u.reduce((D,E)=>{var $,H;const O=Number(($=E.position)==null?void 0:$.x)||0,z=Number((H=E.position)==null?void 0:H.y)||0,W=SQ(E);return{minX:Math.min(D.minX,O),minY:Math.min(D.minY,z),maxX:Math.max(D.maxX,O+W.width),maxY:Math.max(D.maxY,z+W.height)}},{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),p=Number((C=c.position)==null?void 0:C.x)||0,d=Number((R=c.position)==null?void 0:R.y)||0,m=jl({width:c.width,height:c.height})||jl((I=c.data)==null?void 0:I.nodeSize)||jl(c.measured)||{width:n,height:r},g=Math.min(p,f.minX-t),v=Math.min(d,f.minY-t),w=Math.max(p+m.width,f.maxX+t),y=Math.max(d+m.height,f.maxY+t),k={width:Math.max(n,Math.round(w-g)),height:Math.max(r,Math.round(y-v))},b=Math.round(g),S=Math.round(v);return b===p&&S===d&&k.width===Math.round(m.width)&&k.height===Math.round(m.height)?c:(a=!0,{...c,position:{x:b,y:S},width:k.width,height:k.height,data:{...c.data,nodeSize:k}})});return a?l:i}function Ty(e){return`subflow-start:${String(e||"")}`}function Ry(e){return`subflow-return:${String(e||"")}`}function Tm(e,t,n){return(Array.isArray(e==null?void 0:e[t])?e[t]:[]).findIndex(i=>String((i==null?void 0:i.name)||"")===String(n||""))}function NQ(e,t,n){var a;const i=Number.parseInt(String(n||"").replace("output-",""),10),o=Array.isArray(e==null?void 0:e[t])?e[t]:[];return String(((a=o[Number.isFinite(i)?i:0])==null?void 0:a.name)||"")}function NE(e,t){var n;return String(((n=e==null?void 0:e[t])==null?void 0:n.label)||t||"Node")}function _E(e){return Object.entries(e||{}).map(([t,n])=>({name:t,type:String((n==null?void 0:n.type)||"text")}))}function CE(e,t){var i;if(!(t!=null&&t.nodeId)||!(t!=null&&t.slot))return;const r=(Array.isArray((i=e==null?void 0:e[t.nodeId])==null?void 0:i.output)?e[t.nodeId].output:[]).find(o=>String((o==null?void 0:o.name)||"")===String(t.slot));return(r==null?void 0:r.value)??(r==null?void 0:r.default)}function _Q(e,t=""){if(e==null||e==="")return null;try{const n=typeof e=="string"?JSON.parse(e):e;return!n||typeof n!="object"||Array.isArray(n)?{value:n,fields:[],sourceNodeId:t}:{value:n,sourceNodeId:t,fields:Object.entries(n).map(([r,i])=>({name:r,type:Array.isArray(i)?`array(${i.length})`:i===null?"null":typeof i,preview:typeof i=="object"?JSON.stringify(i):String(i)}))}}catch{return null}}const CQ=new Set(["iteration","idempotencyKey"]);function ep(e){return CQ.has(String(e||""))}function wL(e={},t={},n=[]){const r=[],i=Array.isArray(n)?n:[];for(const[o,a]of Object.entries(e||{})){const l=String((a==null?void 0:a.definitionId)||""),c=l==="control_subflow_call"?[{kind:"call",role:"call",subflowId:String((a==null?void 0:a.subflowId)||"")}]:l==="control_while"?[{kind:"while",role:"condition",subflowId:String((a==null?void 0:a.conditionSubflowId)||"")},{kind:"while",role:"body",subflowId:String((a==null?void 0:a.bodySubflowId)||"")}]:[];for(const u of c){const f=t==null?void 0:t[u.subflowId];if(!u.subflowId||!f)continue;const p=NE(e,o),d=String((f==null?void 0:f.label)||u.subflowId),m=_E(f.inputs).filter(({name:v})=>u.kind!=="while"||!ep(v)).map(({name:v,type:w})=>{let y=`${p}.${v}`,k=u.kind==="while"?`While.${v}`:`Call.${v}`,b=o;if(u.kind==="call"){const S=Tm(a,"input",v),j=S>=0?i.find(C=>String((C==null?void 0:C.target)||"")===o&&String((C==null?void 0:C.targetHandle)||"")===`input-${S}`):null;if(j){const C=String(j.source||""),R=NQ(e==null?void 0:e[C],"output",j.sourceHandle)||"output";y=`${NE(e,C)}.${R}`,k=`${C}.${R}`,b=C}}return{name:v,type:w,from:y,fromShort:k,to:`${d}.${v}`,toShort:v,fromNodeId:b,toNodeId:Ty(u.subflowId)}}),g=_E(f.outputs).map(({name:v,type:w})=>({name:v,type:w,from:`${d}.${v}`,fromShort:v,to:`${p}.${v}`,toShort:u.kind==="while"?`While.${v}`:`Call.${v}`,fromNodeId:Ry(u.subflowId),toNodeId:o}));r.push({id:u.kind==="while"?`while-subflow:${o}:${u.role}:${u.subflowId}`:`subflow-call:${o}:${u.subflowId}`,kind:u.kind,role:u.role,callerId:o,callerLabel:p,subflowId:u.subflowId,subflowLabel:d,inputMappings:m,outputMappings:g})}}return r}function lb(e,t){const n=(t==null?void 0:t[e])||{};return{width:Math.max(180,Number(n.width)||320),height:Math.max(96,Number(n.height)||96)}}function Jh(e,t){const n=(t==null?void 0:t[e])||{};return{x:Number(n.x)||0,y:Number(n.y)||0}}function AE(e,t,n){const r=t==null?void 0:t[e];return!r||!Number.isFinite(Number(r.x))||!Number.isFinite(Number(r.y))?n:{x:Number(r.x),y:Number(r.y)}}function AQ(e,t,n){var l,c;const r=String((e==null?void 0:e.source)||""),i=String((e==null?void 0:e.target)||"");if(!t.has(r)||!t.has(i))return!1;const o=Number.parseInt(String((e==null?void 0:e.sourceHandle)||"").replace("output-",""),10),a=Array.isArray((l=n==null?void 0:n[r])==null?void 0:l.output)?n[r].output:[];return String(((c=a[o])==null?void 0:c.name)||"")==="next"}function EE({id:e,kind:t,subflowId:n,subflowLabel:r,subflowRole:i,label:o,position:a,width:l,height:c,contract:u,inputs:f,outputs:p,callRelations:d,fixedContract:m=!1,statePreview:g=null}){return{id:e,type:"flowNode",position:a,width:l,height:c,draggable:!0,deletable:!1,selectable:!0,zIndex:2,data:{isSubflowBoundary:!0,boundaryKind:t,subflowId:n,subflowLabel:r,subflowRole:i,label:o,title:o,contract:u,callRelations:d,fixedContract:m,statePreview:g,inputs:f,outputs:p,nodeSize:{width:l,height:c}}}}function EQ({instances:e={},subflows:t={},edges:n=[],positions:r={},sizes:i={},boundaryPositions:o={}}={}){var d,m,g;const a=[],l=[],c={},u=new Set,f=new Set,p=wL(e,t,n);for(const[v,w]of Object.entries(t||{})){const y=(Array.isArray(w==null?void 0:w.nodeIds)?w.nodeIds:[]).map(String).filter(pe=>e==null?void 0:e[pe]),k=new Set(y),b=(Array.isArray(w==null?void 0:w.roots)?w.roots:[]).map(String).filter(pe=>k.has(pe));if(!y.length)continue;const S=p.some(pe=>pe.subflowId===v&&pe.kind==="while");if(!b.length&&!S)continue;const j=Object.entries((w==null?void 0:w.inputs)||{}).map(([pe,Ce])=>({name:pe,type:String((Ce==null?void 0:Ce.type)||"text"),nodeId:String((Ce==null?void 0:Ce.nodeId)||""),slot:String((Ce==null?void 0:Ce.slot)||"")}));let C=Object.entries((w==null?void 0:w.outputs)||{}).map(([pe,Ce])=>({name:pe,type:String((Ce==null?void 0:Ce.type)||"text"),nodeId:String((Ce==null?void 0:Ce.nodeId)||""),slot:String((Ce==null?void 0:Ce.slot)||"")}));const R=p.filter(pe=>pe.subflowId===v),I=R.some(pe=>pe.kind==="while"),D=R.find(pe=>pe.kind==="while"),E=(D==null?void 0:D.role)||"call";I&&(C=(E==="condition"?[{name:"decision",type:"text",required:!0},{name:"summary",type:"text",required:!1}]:[{name:"state",type:"json",required:!0},{name:"summary",type:"text",required:!1}]).map(Ce=>{const qe=C.find(Xe=>Xe.name===Ce.name);return{...Ce,...qe||{}}}));const O=j.filter(pe=>!I||!ep(pe.name)),z=(Array.isArray(n)?n:[]).filter(pe=>AQ(pe,k,e)),W=new Set(z.map(pe=>String(pe.source))),H=y.filter(pe=>{var Ce;return String(((Ce=e==null?void 0:e[pe])==null?void 0:Ce.definitionId)||"")!=="workspace_subflow_input"}).filter(pe=>!W.has(pe)),P=H.length?H:Array.from(new Set(C.map(pe=>pe.nodeId).filter(pe=>k.has(pe)))),F=y.filter(pe=>r==null?void 0:r[pe]),L=b.length?b:F,q=L.map(pe=>Jh(pe,r)),M=340,te=1,G=1+O.length,K=Math.max(112,72+Math.max(te,G)*24),oe=L.length?L.reduce((pe,Ce)=>{const qe=Jh(Ce,r);return pe+qe.y+lb(Ce,i).height/2},0)/L.length:220,be={x:q.length?Math.round(Math.min(...q.map(pe=>pe.x))-M-80):80,y:Math.round(oe-K/2)},ee=P.length?P:L,he=340,me=1+C.length+(I?0:1),re=Math.max(112,72+me*24),le=ee.length?ee.reduce((pe,Ce)=>{const qe=Jh(Ce,r);return pe+qe.y+lb(Ce,i).height/2},0)/ee.length:oe,ve={x:ee.length?Math.round(Math.max(...ee.map(pe=>Jh(pe,r).x+lb(pe,i).width))+110):820,y:Math.round(le-re/2)},ae=Ty(v),de=Ry(v),Ae=AE(ae,o,be),Te=AE(de,o,ve);a.push(EE({id:ae,kind:"start",subflowId:v,subflowLabel:String((w==null?void 0:w.label)||v),subflowRole:E,label:"Subflow Start",position:Ae,width:M,height:K,contract:O.map(({name:pe,type:Ce})=>({name:pe,type:Ce})),inputs:[{name:"calls",type:"node"}],outputs:[{name:"next",type:"node"},...O.map(({name:pe,type:Ce})=>({name:pe,type:Ce}))],callRelations:R})),a.push(EE({id:de,kind:"return",subflowId:v,subflowLabel:String((w==null?void 0:w.label)||v),subflowRole:E,label:"Subflow Return",position:Te,width:he,height:re,contract:C.map(({name:pe,type:Ce,required:qe,nodeId:Xe})=>({name:pe,type:Ce,...qe!==void 0?{required:qe}:{},...I?{connected:!!Xe}:{}})),inputs:[{name:"prev",type:"node"},...C.map(({name:pe,type:Ce,required:qe})=>({name:pe,type:Ce,...qe!==void 0?{required:qe}:{}})),...I?[]:[{name:"add output",type:"any",addOutput:!0}]],outputs:[],callRelations:R,fixedContract:I,statePreview:E==="body"?_Q(CE(e,(d=w==null?void 0:w.outputs)==null?void 0:d.state)??CE(e,{nodeId:D==null?void 0:D.callerId,slot:"state"}),((g=(m=w==null?void 0:w.outputs)==null?void 0:m.state)==null?void 0:g.nodeId)||(D==null?void 0:D.callerId)||""):null})),c[v]=[ae,de];const Ie=new Map(j.map(pe=>[`${pe.nodeId}\0${pe.slot}`,{...pe,visibleContractIndex:O.findIndex(Ce=>Ce.name===pe.name)}])),Oe=new Set(j.map(pe=>pe.nodeId).filter(pe=>{var Ce;return k.has(pe)&&String(((Ce=e==null?void 0:e[pe])==null?void 0:Ce.definitionId)||"")==="workspace_subflow_input"}));for(const pe of Oe){const Ce=(Array.isArray(n)?n:[]).filter(Xe=>String((Xe==null?void 0:Xe.source)||"")===pe);Ce.every(Xe=>{var st,kt,je;if(!k.has(String((Xe==null?void 0:Xe.target)||"")))return!1;const bt=Number.parseInt(String((Xe==null?void 0:Xe.sourceHandle)||"").replace("output-",""),10),Be=String(((je=(kt=(st=e==null?void 0:e[pe])==null?void 0:st.output)==null?void 0:kt[bt])==null?void 0:je.name)||"");return Ie.has(`${pe}\0${Be}`)})&&(u.add(pe),Ce.forEach((Xe,bt)=>{var je,se,N;const Be=Number.parseInt(String((Xe==null?void 0:Xe.sourceHandle)||"").replace("output-",""),10),st=String(((N=(se=(je=e==null?void 0:e[pe])==null?void 0:je.output)==null?void 0:se[Be])==null?void 0:N.name)||""),kt=Ie.get(`${pe}\0${st}`);if(kt){if(kt.visibleContractIndex<0){f.add(`${String(Xe.target)}\0${String(Xe.targetHandle||"")}`);return}l.push({id:`subflow-start-data:${v}:${kt.name}:${bt}`,source:ae,target:String(Xe.target),sourceHandle:`output-${kt.visibleContractIndex+1}`,targetHandle:Xe.targetHandle??void 0,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"data"}})}}))}b.forEach((pe,Ce)=>{const qe=Tm(e[pe],"input","prev");qe<0||l.push({id:`subflow-start-edge:${v}:${pe}:${Ce}`,source:ae,target:pe,sourceHandle:"output-0",targetHandle:`input-${qe}`,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"control"}})}),ee.forEach((pe,Ce)=>{const qe=Tm(e[pe],"output","next");qe<0||l.push({id:`subflow-return-control:${v}:${pe}:${Ce}`,source:pe,target:de,sourceHandle:`output-${qe}`,targetHandle:"input-0",data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"control"}})}),C.forEach((pe,Ce)=>{if(!k.has(pe.nodeId))return;const qe=Tm(e[pe.nodeId],"output",pe.slot);qe<0||l.push({id:`subflow-return-data:${v}:${pe.name}:${Ce}`,source:pe.nodeId,target:de,sourceHandle:`output-${qe}`,targetHandle:`input-${Ce+1}`,data:{virtualSubflowBoundary:!0,boundaryEdgeKind:"data"}})})}return{nodes:a,edges:l,groupMemberIds:c,hiddenNodeIds:Array.from(u),hiddenInputHandles:Array.from(f)}}function IE(e,t,n){return(Array.isArray(e==null?void 0:e[t])?e[t]:[]).findIndex(i=>String((i==null?void 0:i.name)||"")===String(n||""))}function Pc(e,t){const n=Number.parseInt(String(e||"").replace(t,""),10);return Number.isFinite(n)?n:-1}function ua(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}_${r}`,r+=1;return t.add(n),n}function Ld(e,t,n,r){return{definitionId:"workspace_subflow_input",label:n,subflowId:t,subflowInputName:n,subflowInputType:r,input:[],output:[{type:r,name:"value",value:""}]}}function IQ({whileId:e,instance:t,instances:n={},subflows:r={}}){const i=String(e||"").trim();if(!i)return null;const o=new Set([...Object.keys(n),...Object.keys(r)]),a=ua(`${i}Condition`,o),l=ua(`${i}Body`,o),c=ua(`${i}_condition_state`,o),u=ua(`${i}_condition_iteration`,o),f=ua(`${i}_body_state`,o),p=ua(`${i}_body_iteration`,o),d=ua(`${i}_body_idempotency_key`,o),m={[c]:Ld(c,a,"state","json"),[u]:Ld(u,a,"iteration","text"),[f]:Ld(f,l,"state","json"),[p]:Ld(p,l,"iteration","text"),[d]:Ld(d,l,"idempotencyKey","text")};return{instance:{...t||{},conditionSubflowId:a,bodySubflowId:l},instances:m,subflows:{[a]:{id:a,label:"判断是否继续",inputs:{state:{nodeId:c,slot:"value",type:"json"},iteration:{nodeId:u,slot:"value",type:"text"}},outputs:{},roots:[],nodeIds:[c,u]},[l]:{id:l,label:"执行一轮",inputs:{state:{nodeId:f,slot:"value",type:"json"},iteration:{nodeId:p,slot:"value",type:"text"},idempotencyKey:{nodeId:d,slot:"value",type:"text"}},outputs:{},roots:[],nodeIds:[f,p,d]}}}}function PQ(e={},t,n){const r=String(t||""),i=e==null?void 0:e[r];return!i||!n?e:{...e,[r]:{...i,nodeIds:Array.from(new Set([...i.nodeIds||[],String(n)]))}}}function TQ(e={},t,n,r){var u,f;const i=String(t||""),o=String(n||"").trim(),a=String(r||"").trim(),l=e==null?void 0:e[i];if(!l||!o||!((u=l.outputs)!=null&&u[o]))return{subflows:e,error:"输出变量不存在"};if(!a)return{subflows:e,error:"输出变量名不能为空"};if(!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(a))return{subflows:e,error:"输出变量名只能使用字母、数字、_ 或 $,且不能以数字开头"};if(a!==o&&((f=l.outputs)!=null&&f[a]))return{subflows:e,error:`输出变量 ${a} 已存在`};if(a===o)return{subflows:e};const c=Object.fromEntries(Object.entries(l.outputs||{}).map(([p,d])=>p===o?[a,d]:[p,d]));return{subflows:{...e,[i]:{...l,outputs:c}}}}function RQ(e={},t,n){var a;const r=String(t||""),i=String(n||"").trim(),o=e==null?void 0:e[r];return!o||!i||!((a=o.outputs)!=null&&a[i])?{subflows:e,error:"输出变量不存在"}:{subflows:{...e,[r]:{...o,outputs:Object.fromEntries(Object.entries(o.outputs||{}).filter(([l])=>l!==i))}}}}function xL(e,t,n={}){var l;const r=String(t||""),i=(l=e==null?void 0:e.subflows)==null?void 0:l[r];if(!e||!i)return e;const o=typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e)),a=new Set;for(const[c,u]of Object.entries(o.instances||{})){if(String((u==null?void 0:u.definitionId)||"")!=="control_subflow_call"||String((u==null?void 0:u.subflowId)||"")!==r)continue;a.add(String(c));const f=Array.isArray(u.output)?u.output:[],p=f.filter(g=>String((g==null?void 0:g.type)||"")==="node");p.length||p.push({name:"next",type:"node",value:""});const d=new Map(f.map(g=>[String((g==null?void 0:g.name)||""),g])),m=Object.entries(i.outputs||{}).map(([g,v])=>{var k;const w=((k=Object.entries(n||{}).find(([,b])=>String(b)===g))==null?void 0:k[0])||g,y=d.get(w)||d.get(g)||{};return{...y,name:g,type:String((v==null?void 0:v.type)||(y==null?void 0:y.type)||"text"),value:(y==null?void 0:y.value)??(y==null?void 0:y.default)??""}});u.output=[...p,...m],o.edges=(o.edges||[]).flatMap(g=>{if(String((g==null?void 0:g.source)||"")!==String(c))return[g];const v=Pc(g.sourceHandle,"output-"),w=f[v];if(!w)return[];const y=(n==null?void 0:n[String(w.name||"")])||String(w.name||""),k=u.output.findIndex(b=>String((b==null?void 0:b.name)||"")===y);return k<0?[]:[{...g,sourceHandle:`output-${k}`}]})}return a.size?o:e}function MQ({graph:e,params:t,sourceNode:n,targetNode:r,activeSubflowId:i=""}){var d,m,g,v,w,y,k,b,S,j,C,R,I,D;if(!e||!t)return{handled:!1,graph:e};const o=(d=n==null?void 0:n.data)!=null&&d.isSubflowBoundary?n.data:null,a=(m=r==null?void 0:r.data)!=null&&m.isSubflowBoundary?r.data:null;if(!o&&!a)return{handled:!1,graph:e};const l=String((o==null?void 0:o.subflowId)||(a==null?void 0:a.subflowId)||i||""),c=(g=e==null?void 0:e.subflows)==null?void 0:g[l];if(!c)return{handled:!0,error:"子流程不存在",graph:e};const u=new Set((c.nodeIds||[]).map(String)),f=typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e)),p=f.subflows[l];if((o==null?void 0:o.boundaryKind)==="start"&&!a){if(!u.has(String(t.target||"")))return{handled:!0,error:"只能连接当前子流程中的节点",graph:e};const E=Pc(t.sourceHandle,"output-");if(E===0){const P=IE((v=f.instances)==null?void 0:v[t.target],"input","prev");return P<0||String(t.targetHandle||"")!==`input-${P}`?{handled:!0,error:"START.next 只能连接节点的 prev",graph:e}:(p.roots=Array.from(new Set([...p.roots||[],String(t.target)])),{handled:!0,graph:f})}const O=Object.entries(p.inputs||{}).filter(([P])=>!ep(P)),[z,W]=O[E-1]||[];if(!z||!(W!=null&&W.nodeId))return{handled:!0,error:"未知的 START 输入端口",graph:e};const $=Pc(t.targetHandle,"input-"),H=(k=(y=(w=f.instances)==null?void 0:w[t.target])==null?void 0:y.input)==null?void 0:k[$];return!H||String(H.type||"")!==String(W.type||"text")?{handled:!0,error:`类型不兼容:${W.type||"text"}`,graph:e}:(f.edges=(f.edges||[]).filter(P=>!(String(P.target)===String(t.target)&&String(P.targetHandle||"")===String(t.targetHandle||""))),f.edges.push({source:String(W.nodeId),target:String(t.target),sourceHandle:"output-0",targetHandle:String(t.targetHandle)}),{handled:!0,graph:f})}if((a==null?void 0:a.boundaryKind)==="return"&&!o){if(!u.has(String(t.source||"")))return{handled:!0,error:"只能从当前子流程中的节点返回",graph:e};const E=Pc(t.targetHandle,"input-");if(E===0){const P=IE((b=f.instances)==null?void 0:b[t.source],"output","next");return P<0||String(t.sourceHandle||"")!==`output-${P}`?{handled:!0,error:"RETURN.prev 只能接节点的 next",graph:e}:(f.edges||[]).some(L=>String((L==null?void 0:L.source)||"")===String(t.source||"")&&String((L==null?void 0:L.sourceHandle)||"")===`output-${P}`&&u.has(String((L==null?void 0:L.target)||"")))?{handled:!0,error:"RETURN.prev 只能从子流程的末端节点连入",graph:e}:{handled:!0,graph:f}}const O=String(a.subflowRole||"call"),z=O==="condition"?[{name:"decision",type:"text"},{name:"summary",type:"text"}]:O==="body"?[{name:"state",type:"json"},{name:"summary",type:"text"}]:a.contract||[];if(O==="call"&&E===z.length+1){const P=Pc(t.sourceHandle,"output-"),F=(C=(j=(S=f.instances)==null?void 0:S[t.source])==null?void 0:j.output)==null?void 0:C[P];if(!F||String(F.type||"")==="node")return{handled:!0,error:"请把数据输出连到 ADD OUTPUT",graph:e};const L=new Set(Object.keys(p.outputs||{})),q=String(F.name||"output").replace(/[^A-Za-z0-9_$]/g,"_")||"output",M=/^[A-Za-z_$]/.test(q)?q:`output_${q}`,te=ua(M,L);return p.outputs={...p.outputs||{},[te]:{nodeId:String(t.source),slot:String(F.name||""),type:String(F.type||"text")}},{handled:!0,graph:xL(f,l),addedOutputName:te}}const W=z[E-1],$=Pc(t.sourceHandle,"output-"),H=(D=(I=(R=f.instances)==null?void 0:R[t.source])==null?void 0:I.output)==null?void 0:D[$];return!W||!H||String(H.type||"")!==String(W.type||"text")?{handled:!0,error:`返回值类型不兼容:需要 ${(W==null?void 0:W.type)||"unknown"}`,graph:e}:(p.outputs={...p.outputs||{},[W.name]:{nodeId:String(t.source),slot:String(H.name||""),type:String(W.type||"text")}},{handled:!0,graph:f})}return{handled:!0,error:"子流程边界只支持 START → 节点,或节点 → RETURN",graph:e}}function $Q({nodes:e=[],edges:t=[],subflow:n=null,subflowId:r=""}){if(!n||!r)return{nodes:e,edges:t};const i=new Set([...(n.nodeIds||[]).map(String),Ty(r),Ry(r)]),o=e.filter(l=>{var c;return i.has(String(l.id))&&!((c=l==null?void 0:l.data)!=null&&c.isSubflowInputProxy)}),a=new Set(o.map(l=>String(l.id)));return{nodes:o,edges:t.filter(l=>a.has(String(l.source))&&a.has(String(l.target)))}}const OQ=h.lazy(()=>JR(()=>import("./WorkflowAssistantThread-CTrXOZ00.js"),[])),LQ="af:workspace-graph:v2",PE="agentflow.workspace.sidebarCollapsed",Tc=["DISPLAY","CONTROL","TOOL","PROVIDE","AGENT"],DQ=new Set(["png","jpg","jpeg","gif","webp","svg"]),tp=320,bL=180,kL=960,za=96,Rm=900,hv=520,mv=320,xs=52,Ii=240,Pi=160,gv="display-ref:",FQ="display-group-ref:",np="0 9 * * *",zQ="Asia/Shanghai",BQ="0.1.162";function WQ(){const e=new URLSearchParams(window.location.search),t=String(e.get("returnTo")||"").trim();return{flowId:e.get("flowId")||"",flowSource:e.get("flowSource")||"user",workspaceId:e.get("workspaceId")||"",workflowShare:e.get("workflowShare")||"",adminOwnerId:e.get("adminOwnerId")||"",archived:e.get("archived")==="1"||e.get("flowArchived")==="1",returnTo:t==="/workflows"||t.startsWith("/workflows?")?t:"",workflowDemo:e.get("workflowDemo")==="1"}}function Yr(e){const t=new URLSearchParams;return e.flowId&&t.set("flowId",e.flowId),e.flowSource&&t.set("flowSource",e.flowSource),e.workspaceId&&t.set("workspaceId",e.workspaceId),e.workflowShare&&t.set("workflowShare",e.workflowShare),e.adminOwnerId&&t.set("adminOwnerId",e.adminOwnerId),e.archived&&t.set("archived","1"),e.returnTo&&t.set("returnTo",e.returnTo),e.workflowDemo&&t.set("workflowDemo","1"),t}function la(e={}){return[e.workspaceId||"",e.flowSource||"user",e.flowId||""].join(" ")}function HQ(e){const t=String(e||"").trim();if(!t)return null;try{const n=JSON.parse(window.sessionStorage.getItem(`agentflow.workflow.demo:${t}`)||"null");return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}function kS(e,t=4e3){const n=String(e??"").trim();return n?n.length>t?`${n.slice(0,t)}
213
214
  ...[truncated ${n.length-t} chars]`:n:""}function KQ(e){const t=kS(e==null?void 0:e.text,4e3);return t?{role:(e==null?void 0:e.role)==="user"?"user":"assistant",...e!=null&&e.kind?{kind:String(e.kind)}:{},text:t,...e!=null&&e.error?{error:!0}:{},at:Number.isFinite(Number(e==null?void 0:e.at))?Number(e.at):Date.now()}:null}function vS(e,t=80){return(Array.isArray(e)?e:[]).map(KQ).filter(Boolean).slice(-t)}function VQ(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n={};for(const[r,i]of Object.entries(t).slice(-80)){const o=String(r||"").trim();if(!o||!i||typeof i!="object")continue;const a=vS(i.messages,40),l=kS(i.draft||"",2e3);!a.length&&!l||(n[o]={sessionId:String(i.sessionId||`nodechat_${o}`),messages:a,...l?{draft:l}:{},candidateContent:"",running:!1,error:""})}return n}function qQ(e){return(Array.isArray(e)?e:[]).map(t=>{const n=String((t==null?void 0:t.id)||"").trim();if(!n)return null;const r=vS(t==null?void 0:t.messages,80);if(!r.length)return null;const i=String((t==null?void 0:t.status)||"done");return{id:n,label:kS((t==null?void 0:t.label)||n,120),status:i==="failed"?"failed":"done",messages:r}}).filter(Boolean).slice(-20)}function TE(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n=t.composer&&typeof t.composer=="object"&&!Array.isArray(t.composer)?t.composer:{};return{composer:{activeSessionId:String(n.activeSessionId||"workspace").trim()||"workspace",messages:vS(n.messages,100),runSessions:qQ(n.runSessions)},nodeChats:VQ(t.nodeChats)}}function Rg(e){if(!e)return!1;const t=String(e.type||"");if(t&&/^image\//i.test(t))return!0;const n=String(e.name||"").toLowerCase().split(".").pop();return DQ.has(n)}function au(e,t,n={}){const r=String(e||"").trim();if(!r)return"";if(/^(?:https?:|data:|blob:|file:)/i.test(r)||r.startsWith("/"))return r;const i=Yr(t||{});return i.set("path",r),n.download&&i.set("download","1"),`/api/workspace/file/raw?${i.toString()}`}function UQ(e){const t=String((e==null?void 0:e.flowId)||"").trim();if(!t)return"";const n=String((e==null?void 0:e.flowSource)||"user").trim()||"user",r=String((e==null?void 0:e.adminOwnerId)||"").trim();return`af:composer-skills:workspace:${t}:${n}${r?`:admin:${r}`:""}${e!=null&&e.archived?":archived":""}`}function GQ(e){const t=String((e==null?void 0:e.username)||(e==null?void 0:e.userId)||"").trim();return t?`${PE}:${t}`:PE}function YQ(e){try{const t=window.localStorage.getItem(e);if(t==="false")return!1;if(t==="true")return!0}catch{}return!0}function RE(e){return!e||typeof e.closest!="function"?!1:!!e.closest("input, textarea, select, [contenteditable='true']")}function JQ(e){var t;if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)return Number(e.selectionStart??0)!==Number(e.selectionEnd??0);if(e instanceof Element&&e.closest('[contenteditable="true"]')){const n=(t=window.getSelection)==null?void 0:t.call(window);return!!(n&&!n.isCollapsed)}return!1}function XQ(e){return!e||typeof e.closest!="function"?!1:!!e.closest(".af-flow-node__prompt-stack")&&!JQ(e)}function QQ(e){const t=String(e||"").trim();if(!t||ZQ(t))return"";if(/^运行完成/.test(t))return"运行完成";if(/^运行暂停/.test(t))return"运行暂停";if(/^运行停止/.test(t))return"运行停止";if(/^思考中/.test(t))return"模型正在思考";if(/^生成回复中/.test(t))return"模型正在生成回复";if(/^Timing\s+(.+?):\s+(\d+)ms/i.test(t)){const n=t.match(/^Timing\s+(.+?):\s+(\d+)ms/i);return`耗时:${(n==null?void 0:n[1])||"step"} ${(n==null?void 0:n[2])||"0"}ms`}if(/^工具\s+(.+?)(?:\s+\((started|completed)\))?$/i.test(t)){const n=t.match(/^工具\s+(.+?)(?:\s+\((started|completed)\))?$/i),r=String((n==null?void 0:n[1])||"tool").trim(),i=String((n==null?void 0:n[2])||"").toLowerCase();if(r==="thinking")return"模型正在思考";const o=r==="readToolCall"?"读取文件/上下文":r==="grepToolCall"?"搜索代码":r==="editToolCall"?"编辑文件":r;return i==="completed"?`完成:${o}`:`执行:${o}`}return/^\[stderr\]/.test(t)?t:""}function ZQ(e){return/^\[stderr\]/.test(e)?/Reading additional input from stdin/i.test(e)||/rmcp::transport::worker/i.test(e)||/Transport channel closed/i.test(e)||/http\/request failed/i.test(e)||/AuthRequiredError/i.test(e)||/No access token was provided/i.test(e)||/api\.githubcopilot\.com/i.test(e):!1}function eZ(e){const t=String(e||"").trim();return t?/^模型/.test(t)?"model":/^(执行|完成|耗时):/.test(t)?"tool":/^运行/.test(t)?"run":/^\[stderr\]/.test(t)?"error":"other":"other"}function cb(e,t,n,r="Workspace Run"){var c;const i=String(n||"").trim(),o=Array.isArray(e)?e.find(u=>String((u==null?void 0:u.id)||"")===i):null,a=t&&typeof t=="object"?t[i]:null;return String(((c=o==null?void 0:o.data)==null?void 0:c.label)||(a==null?void 0:a.label)||"").trim()||i||r}function ub(e,t,n="Workspace Run"){const r=String(e||"").trim()||n,i=String(t||"").trim();return!i||r===i?r:`${r} (${i})`}function ml(e){const t=Math.max(0,Number(e)||0);if(t<1e3)return`${t}ms`;if(t<6e4)return`${(t/1e3).toFixed(t<1e4?1:0)}s`;const n=Math.floor(t/6e4),r=Math.round(t%6e4/1e3);return`${n}m${r?`${r}s`:""}`}function ME(e){const t=String(e||"").trim().toLowerCase();return{unselected:"未选择需求",unavailable:"未连接",json_unsupported:"待升级",command_failed:"读取失败",uninitialized:"未初始化",preflight_blocked:"环境阻塞",tech_design_missing:"缺技术方案",tech_design_draft_review:"方案待确认",tech_design_confirmed:"方案已确认",baseline_missing:"缺基线",plan_missing:"缺计划",plan_draft_review:"计划待确认",issue_binding_missing:"待绑定 Issue",ready_for_implementation:"待实现",implementation_ready:"待实现",implementing:"实现中",implementation_in_progress:"实现中",implementation_review:"实现待审",self_test_ready:"待自测",bugfix:"修 Bug",fix_ready:"待修复",fix_in_progress:"修复中",testing:"已提测",done:"完成",blocked:"阻塞",conflict:"冲突",requirement_changed:"需求变更"}[t]||t||"未知"}function tZ(e){const t=String(e||"").trim().toLowerCase();return!t||["unselected","unavailable","json_unsupported","command_failed","uninitialized","preflight_blocked"].includes(t)?-1:/done|complete|closed|finished/.test(t)?3:/bug|fix|testing|test|self_test|submit_test/.test(t)?2:/implement|development|ready_for_implementation|issue_binding|gitlab|mr/.test(t)?1:0}function nZ(e){const t=tZ(e);return["方案确定","开发","Bug 修复","完成"].map((n,r)=>{let i="pending";return t>r?i="done":t===r&&(i=r===3?"done":"current"),{label:n,status:i}})}function rZ(e,t=""){var o,a,l,c;const n=e!=null&&e.globalState&&typeof e.globalState=="object"?e.globalState:{},r=(o=e==null?void 0:e.overall)!=null&&o.requirement&&typeof e.overall.requirement=="object"?e.overall.requirement:{};return String(n.title||r.title||r.name||((a=e==null?void 0:e.prd)==null?void 0:a.title)||((c=(l=e==null?void 0:e.raw)==null?void 0:l.prd)==null?void 0:c.title)||"").trim()||(t?`TAPD ${t}`:"选择 TAPD 需求后读取状态")}function rp(e){const t=String(e||"").trim();if(!t)return"";if(t.startsWith("/")&&!t.startsWith("//")||t.startsWith("#"))return t;if(!/^https?:\/\//i.test(t))return"";try{const n=new URL(t);if(n.hostname==="0.0.0.0"||n.hostname==="::"||n.hostname==="[::]"){const i=window.location.hostname;n.hostname=i&&i!=="0.0.0.0"&&i!=="::"?i:"127.0.0.1"}const r=String(new URLSearchParams(window.location.search).get("workflowShare")||"").trim();return r&&n.pathname.startsWith("/api/prd-workflow/review/")&&!n.searchParams.has("workflowShare")&&n.searchParams.set("workflowShare",r),n.href}catch{return t}}function lu(e){const t=String((e==null?void 0:e.url)||(e==null?void 0:e.href)||"").trim();if(t)return rp(t);const n=String((e==null?void 0:e.path)||"").trim();return n&&/^https?:\/\//i.test(n)?rp(n):""}function Xa(e){const t=String(e||"").trim().toLowerCase();return["done","success","completed","passed"].includes(t)?"done":["current","running","active","next"].includes(t)?"current":["observed","observation"].includes(t)?"observed":["superseded","stale","replaced"].includes(t)?"superseded":["blocked","failed","error","conflict"].includes(t)?"blocked":"pending"}function Ba(e){if(!e||typeof e!="object")return"";const t=String(e.truth||e.stateTruth||e.state_truth||"").trim().toLowerCase();return t||(String(e.idempotencyKey||e.idempotency_key||"").trim().startsWith("snapshot-action:")||String(e.source||"")==="prd-flow-client"&&String(e.type||"")==="workflow-action"?"observation":String(e.type||"")==="review-link"?"runtime_event":"")}function jS(e){return Xa(e==null?void 0:e.status)==="done"&&Ba(e)!=="observation"}function Co(e,t){return!e||typeof e!="object"?`Action ${t+1}`:String(e.title||e.label||e.name||e.actionLabel||e.action_label||e.id||e.action||`Action ${t+1}`)}function Mm(e){return!e||typeof e!="object"?"":String(e.detail||e.content||e.description||e.summary||e.message||e.reason||"")}function SS(e){return!e||typeof e!="object"?"":[e.code,e.action,e.actionId,e.action_id,e.stage,e.stageKey,e.stage_key,e.type,e.title].map(t=>String(t||"")).join(" ").toLowerCase()}function sZ(e,t="当前任务"){const r=[e==null?void 0:e.issueLabel,e==null?void 0:e.issue_label,e==null?void 0:e.title,e==null?void 0:e.label,e==null?void 0:e.name].map(i=>String(i||"")).join(" ").match(/\b(Issue\d+|Bug\d+)\b/i);return r?r[1].replace(/^issue/i,"Issue").replace(/^bug/i,"Bug"):t}function iZ(e,t){const n=Co(e,t),r=String((e==null?void 0:e.title)||(e==null?void 0:e.label)||(e==null?void 0:e.name)||(e==null?void 0:e.actionLabel)||(e==null?void 0:e.action_label)||"").trim();if(r)return r;const i=Xa(e==null?void 0:e.status),o=jS(e),l=`${Wl(e)} ${SS(e)}`,c=sZ(e);if(/issue-plan:|plan_draft_local|submit-plan|plan-doc|plan_doc_confirmed/.test(l)){if(o)return`${c} 方案已确认`;if(i==="observed"||i==="superseded"||Ba(e)==="observation")return`${c} 方案状态已观察`;if(i==="current"&&/^确认\s+/.test(n))return n}if(/issue-gitlab:|gitlab_issue_missing|ensure-gitlab-issue/.test(l)){if(o)return`已为 ${c} 创建/绑定 GitLab Issue`;if(i==="observed"||i==="superseded"||Ba(e)==="observation")return`${c} GitLab Issue 状态已观察`}return/implementation_in_progress|impl_in_progress/.test(l)?`正在实现 ${c}`:/implementation_ready/.test(l)?`可以开始实现 ${c}`:n}function oZ(e){if(!e||typeof e!="object")return"";const t=Mm(e);if(t)return t;const n=Xa(e.status),r=Ba(e),i=jS(e),a=`${Wl(e)} ${SS(e)}`,l=NS(e),c=l.some(p=>/方案|plan|markdown|review|预览/i.test(String(p.label||""))),u=l.some(p=>/gitlab issue/i.test(String(p.label||""))),f=l.some(p=>/gitlab epic/i.test(String(p.label||"")));return/issue-plan:|plan_draft_local|submit-plan|plan-doc|plan_doc_confirmed/.test(a)?i?c?"方案已确认并归档;可从下方打开方案文档预览。":"方案已确认并归档。":r==="observation"||n==="observed"?"客户端上报了当前方案阶段;这不是 ai-doc 确认结果。":n==="superseded"?"该客户端观察已被更新状态替代,仅保留为运行态记录。":n==="current"?"方案草稿已生成,等待确认;确认后会归档为正式方案。":"方案草稿已生成,等待确认。":/issue-gitlab:|gitlab_issue_missing|ensure-gitlab-issue/.test(a)?i?u&&f?"GitLab Issue 和 Epic 已绑定;可从下方打开关联链接。":u?"GitLab Issue 已绑定;可从下方打开关联链接。":"GitLab Issue 绑定步骤已完成。":r==="observation"||n==="observed"?"客户端上报了 GitLab Issue 阶段;是否已绑定以 GitLab/ai-doc 事实为准。":n==="superseded"?"该客户端观察已被更新状态替代,仅保留为运行态记录。":"方案文档已归档,等待创建或绑定 GitLab Issue。":/implementation_in_progress|impl_in_progress/.test(a)?"需求分支已就绪,当前处于实现中;实现 MR 创建后会记录到本 Issue。":/implementation_ready/.test(a)?"方案文档和 GitLab Issue 已就绪,等待开始实现。":""}function Mg(e){return!e||typeof e!="object"?"":String(e.stageEnteredAt||e.stage_entered_at||e.time||e.at||e.observedAt||e.observed_at||e.reportedAt||e.reported_at||e.startedAt||e.started_at||e.completedAt||e.completed_at||e.updatedAt||e.updated_at||e.createdAt||e.created_at||"")}const vL="Asia/Shanghai",aZ=new Intl.DateTimeFormat("zh-CN",{timeZone:vL,year:"numeric",month:"2-digit",day:"2-digit"}),lZ=new Intl.DateTimeFormat("zh-CN",{timeZone:vL,hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1});function jL(e){const t=Mg(e);if(!t)return null;const n=Date.parse(t);return Number.isFinite(n)?new Date(n):null}function cZ(e){const t=jL(e);return t?aZ.format(t).replace(/\//g,"-"):"无时间"}function uZ(e){const t=jL(e);return t?lZ.format(t):""}function dZ(e=[]){const t=[];return(Array.isArray(e)?e:[]).forEach((n,r)=>{const i=cZ(n);let o=t[t.length-1];(!o||o.day!==i)&&(o={day:i,items:[]},t.push(o)),o.items.push({item:n,index:r})}),t}function SL(e){const t=Xa(e);return t==="done"?"完成":t==="current"?"当前":t==="observed"?"已观察":t==="superseded"?"已更新":t==="blocked"?"阻塞":"待处理"}function ba(e){const t=String(e||"").trim(),n=t.toLowerCase();return n==="android"?"Android":n==="ios"?"iOS":["all","both","cross-platform","cross_platform"].includes(n)?"双端":t}function fZ(e){const t=Xa(e==null?void 0:e.status);return Ba(e)==="observation"&&t==="done"?"已观察":SL(t)}function NL(e){if(!e||typeof e!="object")return[];const t=[],n=(o,a,l)=>{const c=String(l||"").trim();c&&t.push({key:`${o}:${c}`,type:o,label:String(a||c),value:c})},r=Xa(e.status),i=Ba(e)==="observation"&&r==="done"?"observed":r;return n("status",SL(i),i),n("issue",e.issueKey||e.issue_key||e.issue,e.issueKey||e.issue_key||e.issue),n("platform",ba(e.platform),e.platform),t}function pZ(e=[]){const t=new Map;return(Array.isArray(e)?e:[]).forEach(n=>{NL(n).forEach(r=>{const i=t.get(r.key);t.set(r.key,{...r,count:((i==null?void 0:i.count)||0)+1})})}),Array.from(t.values()).sort((n,r)=>{const i={status:0,issue:1,platform:2,source:3,actor:4};return(i[n.type]??9)-(i[r.type]??9)||r.count-n.count||n.label.localeCompare(r.label)})}function hZ(e,t){const n=String(t||"all");return!n||n==="all"?!0:NL(e).some(r=>r.key===n)}function mZ(e){if(!e||typeof e!="object")return[];const t=[],n=(r,i)=>{const o=String(i||"").trim();o&&t.push({label:r,value:o})};return n("Issue",e.issueKey||e.issue_key||e.issue),n("平台",ba(e.platform)),t}function NS(e){const t=[],n=(o,a,l={})=>{const c=rp(a);c&&t.push({...l,label:String(o||c).trim()||c,href:c})},r=(o,a="链接",l=0)=>{if(l>3||o==null)return;if(typeof o=="string"){(/^(https?:\/\/|file:\/\/)/i.test(o)||o.startsWith("/"))&&n(a,o);return}if(Array.isArray(o)){o.forEach((u,f)=>r(u,`${a} ${f+1}`,l+1));return}if(typeof o!="object")return;const c=o.label||o.title||o.name||o.kind||o.type||a;n(c,o.url||o.href||o.path||o.file||o.filePath||o.file_path,o);for(const u of["links","urls","artifacts","outputs","output","results","result","files"])o[u]!=null&&r(o[u],u,l+1)},i=Array.isArray(e==null?void 0:e.links)?e.links:[];for(const o of i)typeof o=="string"?n("链接",o):n((o==null?void 0:o.label)||(o==null?void 0:o.title)||(o==null?void 0:o.kind)||"链接",(o==null?void 0:o.url)||(o==null?void 0:o.href),o);for(const o of Array.isArray(e==null?void 0:e.artifacts)?e.artifacts:[])n((o==null?void 0:o.label)||(o==null?void 0:o.title)||(o==null?void 0:o.kind)||"Artifact",lu(o),o);return n("TAPD",(e==null?void 0:e.tapdUrl)||(e==null?void 0:e.tapd_url)),n("ai-doc",(e==null?void 0:e.docUrl)||(e==null?void 0:e.doc_url)||(e==null?void 0:e.aiDocUrl)||(e==null?void 0:e.ai_doc_url)),n("Plan",(e==null?void 0:e.planDocUrl)||(e==null?void 0:e.plan_doc_url)||(e==null?void 0:e.planUrl)||(e==null?void 0:e.plan_url)),n("Issue",(e==null?void 0:e.issueUrl)||(e==null?void 0:e.issue_url)),n("GitLab Issue",(e==null?void 0:e.gitlabIssue)||(e==null?void 0:e.gitlab_issue)),n("GitLab Epic",(e==null?void 0:e.gitlabEpic)||(e==null?void 0:e.gitlab_epic)),n("MR",(e==null?void 0:e.mrUrl)||(e==null?void 0:e.mr_url)||(e==null?void 0:e.mergeRequestUrl)||(e==null?void 0:e.merge_request_url)),n("实现 MR",(e==null?void 0:e.implMr)||(e==null?void 0:e.impl_mr)),n("修复 MR",(e==null?void 0:e.fixMr)||(e==null?void 0:e.fix_mr)),n("提测 MR",(e==null?void 0:e.testMr)||(e==null?void 0:e.test_mr)),n("集成 MR",(e==null?void 0:e.integrationMr)||(e==null?void 0:e.integration_mr)),n("Jenkins",(e==null?void 0:e.jenkinsUrl)||(e==null?void 0:e.jenkins_url)||(e==null?void 0:e.jenkinsBuildUrl)||(e==null?void 0:e.jenkins_build_url)),n("安装包",(e==null?void 0:e.jenkinsPackageUrl)||(e==null?void 0:e.jenkins_package_url)),n("二维码",(e==null?void 0:e.jenkinsQrUrl)||(e==null?void 0:e.jenkins_qr_url)),n("调整",(e==null?void 0:e.editUrl)||(e==null?void 0:e.edit_url)||(e==null?void 0:e.adjustUrl)||(e==null?void 0:e.adjust_url)),n("链接",(e==null?void 0:e.url)||(e==null?void 0:e.href)),r(e==null?void 0:e.urls,"URL"),r(e==null?void 0:e.outputs,"产物"),r(e==null?void 0:e.output,"产物"),r(e==null?void 0:e.results,"结果"),r(e==null?void 0:e.result,"结果"),r(e==null?void 0:e.files,"文件"),JX(t,e)}function gZ(e,t=[]){var l,c,u,f,p;const n=[],r=new Map,i=String(((c=(l=e==null?void 0:e.overall)==null?void 0:l.requirement)==null?void 0:c.title)||((f=(u=e==null?void 0:e.overall)==null?void 0:u.requirement)==null?void 0:f.name)||"").trim();for(const d of yv(e)){const m=Qi(d),g=String((d==null?void 0:d.title)||(d==null?void 0:d.name)||(d==null?void 0:d.summary)||"").trim();m&&g&&r.set(m,g)}const o=(d,m={})=>{if(!d||typeof d!="object")return;const g=(w,y={})=>{if(!w||typeof w!="object")return;const k=String(m.issueKey||(d==null?void 0:d.issueKey)||(d==null?void 0:d.issue_key)||(d==null?void 0:d.issue)||"").trim(),b=w.source||w.sourceArtifact||w.source_artifact||d.sourceArtifact||d.source_artifact||d.source||m.source||null,S=FX({...w,title:w.title||m.documentTitle||(d==null?void 0:d.title)||"",documentTitle:w.documentTitle||w.document_title||(d==null?void 0:d.documentTitle)||(d==null?void 0:d.document_title)||""},{issueTitle:r.get(k)||"",requirementTitle:i}),j={label:String(w.label||"ai-doc").trim()||"ai-doc",href:String(w.href||w.url||"").trim(),kind:String(w.kind||w.type||d.kind||d.type||"").trim(),title:S,issueKey:k,platform:m.platform||ba(d.platform),durability:w.durability||d.durability||m.durability||"",persistence:w.persistence||d.persistence||m.persistence||"",truth:w.truth||w.stateTruth||w.state_truth||Ba(d)||m.truth||"",authority:w.authority||d.authority||m.authority||"",confirmed:w.confirmed??d.confirmed??m.confirmed,source:b,documentPath:w.documentPath||w.document_path||w.path||y.documentPath||(b==null?void 0:b.path)||(b==null?void 0:b.documentPath)||(b==null?void 0:b.document_path)||""};j.href&&n.push(j)};for(const w of Array.isArray(d==null?void 0:d.artifacts)?d.artifacts:[])!w||typeof w!="object"||g({...w,label:w.label||w.title||w.kind||"ai-doc",href:lu(w)},{documentPath:w.path});for(const w of Array.isArray(d==null?void 0:d.links)?d.links:[])!w||typeof w!="object"||g({...w,label:w.label||w.title||w.kind||"ai-doc",href:lu(w)},{documentPath:w.path});const v=lu(d);v&&g({...d,label:d.label||d.title||d.kind||"ai-doc",href:v},{documentPath:d.path})};o(e);for(const d of Array.isArray(t)?t:[])o(d,{issueKey:String((d==null?void 0:d.issueKey)||(d==null?void 0:d.issue_key)||(d==null?void 0:d.issue)||"").trim(),platform:ba(d==null?void 0:d.platform),documentTitle:String((d==null?void 0:d.documentTitle)||(d==null?void 0:d.document_title)||(d==null?void 0:d.title)||"").trim()});for(const d of["actions","workflowActions","workflow_actions","timeline","history","events","runtimeEvents","runtime_events"])for(const m of Array.isArray(e==null?void 0:e[d])?e[d]:[])o(m,{issueKey:String((m==null?void 0:m.issueKey)||(m==null?void 0:m.issue_key)||(m==null?void 0:m.issue)||"").trim(),platform:ba(m==null?void 0:m.platform),documentTitle:String((m==null?void 0:m.documentTitle)||(m==null?void 0:m.document_title)||(m==null?void 0:m.title)||"").trim()});for(const d of yv(e))o(d,{issueKey:Qi(d),platform:ba(d==null?void 0:d.platform),documentTitle:String((d==null?void 0:d.title)||(d==null?void 0:d.name)||(d==null?void 0:d.summary)||"").trim()});const a=(p=e==null?void 0:e.extensions)!=null&&p["prd-flow"]&&typeof e.extensions["prd-flow"]=="object"?e.extensions["prd-flow"]:{};for(const d of[...Array.isArray(e==null?void 0:e.aiDocs)?e.aiDocs:[],...Array.isArray(e==null?void 0:e.ai_docs)?e.ai_docs:[],...Array.isArray(a.aiDocs)?a.aiDocs:[],...Array.isArray(a.ai_docs)?a.ai_docs:[]])o(d,{issueKey:String((d==null?void 0:d.issueKey)||(d==null?void 0:d.issue_key)||"").trim(),platform:ba(d==null?void 0:d.platform),documentTitle:String((d==null?void 0:d.title)||(d==null?void 0:d.label)||"").trim()});return WX(n,window.location.origin)}function yZ(e){return!e||typeof e!="object"?{}:{marker:e.marker||e.flag||"",command:e.command||e.nextCommand||e.next_command||"",runtimeOnly:e.runtimeOnly===!0||e.runtime_only===!0,markerOnly:e.markerOnly===!0||e.marker_only===!0,url:e.url||e.href||e.mrUrl||e.mr_url||e.mergeRequestUrl||e.merge_request_url||"",mr:e.mr||e.mrUrl||e.mr_url||e.mergeRequestUrl||e.merge_request_url||"",testEnv:e.testEnv||e.test_environment||"",summary:e.summary||e.detail||e.description||"",links:Array.isArray(e.links)?e.links:[],artifacts:Array.isArray(e.artifacts)?e.artifacts:[],outputs:Array.isArray(e.outputs)?e.outputs:[],results:Array.isArray(e.results)?e.results:[]}}function Qi(e,t=0){return String((e==null?void 0:e.key)||(e==null?void 0:e.issueKey)||(e==null?void 0:e.issue_key)||(e==null?void 0:e.id)||(e==null?void 0:e.iid)||(e==null?void 0:e.title)||`issue-${t+1}`).trim()}function wZ(e,t=0){return String((e==null?void 0:e.title)||(e==null?void 0:e.name)||(e==null?void 0:e.label)||(e==null?void 0:e.summary)||Qi(e,t)||`Issue ${t+1}`).trim()}function xZ(e){return String((e==null?void 0:e.epicKey)||(e==null?void 0:e.epic_key)||(e==null?void 0:e.epic)||(e==null?void 0:e.epicTitle)||(e==null?void 0:e.epic_title)||(e==null?void 0:e.parentEpic)||(e==null?void 0:e.parent_epic)||"未归类").trim()}function bZ(e){return String((e==null?void 0:e.sourceIssue)||(e==null?void 0:e.source_issue)||(e==null?void 0:e.parentKey)||(e==null?void 0:e.parent_key)||(e==null?void 0:e.parent)||(e==null?void 0:e.parentIssue)||(e==null?void 0:e.parent_issue)||"").trim()}function kZ(e){const t=NS(e),n=(i,o)=>{if(Array.isArray(i)){for(const a of i)if(a)if(typeof a=="string")t.push({label:o,href:a});else{const l=a.url||a.href||a.webUrl||a.web_url||a.mrUrl||a.mr_url||a.issueUrl||a.issue_url;l&&t.push({label:a.label||a.title||a.platform||a.kind||o,href:l})}}};n(e==null?void 0:e.mrs,"MR"),n(e==null?void 0:e.mergeRequests,"MR"),n(e==null?void 0:e.merge_requests,"MR"),n(e==null?void 0:e.implMrs,"MR"),n(e==null?void 0:e.impl_mrs,"MR"),n(e==null?void 0:e.platformMrs,"MR"),n(e==null?void 0:e.platform_mrs,"MR");const r=new Set;return t.filter(i=>{const o=String(i.href||"").trim();if(!o)return!1;const a=`${i.label}
214
215
  ${o}`;return r.has(a)?!1:(r.add(a),!0)})}function vZ(e){const t=Array.isArray(e==null?void 0:e.epics)?e.epics:Array.isArray(e==null?void 0:e.epicGroups)?e.epicGroups:Array.isArray(e==null?void 0:e.epic_groups)?e.epic_groups:[],n=[],r=new Map,i=(a,l="")=>{const c=String(a||"未归类").trim()||"未归类";return r.has(c)?l&&r.get(c).title===c&&(r.get(c).title=String(l)):r.set(c,{key:c,title:String(l||c),issues:[]}),r.get(c)};for(const a of t){const l=String((a==null?void 0:a.key)||(a==null?void 0:a.id)||(a==null?void 0:a.title)||(a==null?void 0:a.name)||"未归类").trim(),c=i(l,(a==null?void 0:a.title)||(a==null?void 0:a.name)||l),u=Array.isArray(a==null?void 0:a.issues)?a.issues:Array.isArray(a==null?void 0:a.children)?a.children:Array.isArray(a==null?void 0:a.items)?a.items:[];for(const f of u)f&&typeof f=="object"&&c.issues.push({...f,epicKey:l})}for(const a of Array.isArray(e==null?void 0:e.issues)?e.issues:[])a&&typeof a=="object"&&n.push(a);for(const a of n)i(xZ(a)).issues.push(a);const o=a=>{const l=new Map,c=[],u=a.map((f,p)=>Qi(f,p));return a.forEach((f,p)=>{const d=Qi(f,p);l.set(d,{issue:f,children:[]})}),a.forEach((f,p)=>{const d=Qi(f,p),m=bZ(f)||$X(f,u),g=l.get(d);m&&l.has(m)?l.get(m).children.push(g):c.push(g)}),c};return Array.from(r.values()).map(a=>({...a,issues:o(a.issues)}))}function $g(e){return String((e==null?void 0:e.actionId)||(e==null?void 0:e.action_id)||(e==null?void 0:e.action)||(e==null?void 0:e.id)||"").trim()}function $E(e){var t;return String(((t=e==null?void 0:e.actionModel)==null?void 0:t.key)||(e==null?void 0:e.key)||(e==null?void 0:e.actionKey)||(e==null?void 0:e.action_key)||(e==null?void 0:e.action)||(e==null?void 0:e.actionId)||(e==null?void 0:e.action_id)||(e==null?void 0:e.stageKey)||(e==null?void 0:e.stage_key)||"").trim()}function jZ(e){const t=String(e||"pending");return t==="passed"?"check":t==="failed"?"close":t==="blocked"?"block":t==="skipped"?"skip_next":"radio_button_unchecked"}function Wl(e){return KX(e)}function Og(e){const t=Mg(e)||String((e==null?void 0:e.startedAt)||(e==null?void 0:e.started_at)||(e==null?void 0:e.createdAt)||(e==null?void 0:e.created_at)||(e==null?void 0:e.updatedAt)||(e==null?void 0:e.updated_at)||""),n=Date.parse(t);return Number.isFinite(n)?n:NaN}function yv(e){var i,o,a,l,c,u,f,p,d,m,g,v;const t=[],n=w=>{w&&typeof w=="object"&&!Array.isArray(w)&&t.push(w)},r=w=>{if(!w||typeof w!="object"||Array.isArray(w))return;const y=Array.isArray(w.issues)?w.issues:Array.isArray(w.children)?w.children:Array.isArray(w.items)?w.items:[];for(const k of y)!k||typeof k!="object"||Array.isArray(k)||(k.issue&&typeof k.issue=="object"?(n(k.issue),Array.isArray(k.children)&&k.children.forEach(b=>n((b==null?void 0:b.issue)||b))):n(k))};return[e==null?void 0:e.issues,(i=e==null?void 0:e.raw)==null?void 0:i.issues,(a=(o=e==null?void 0:e.raw)==null?void 0:o.prd)==null?void 0:a.issues].forEach(w=>{Array.isArray(w)&&w.forEach(n)}),[e==null?void 0:e.epics,e==null?void 0:e.epicGroups,e==null?void 0:e.epic_groups,(l=e==null?void 0:e.raw)==null?void 0:l.epics,(c=e==null?void 0:e.raw)==null?void 0:c.epicGroups,(u=e==null?void 0:e.raw)==null?void 0:u.epic_groups,(p=(f=e==null?void 0:e.raw)==null?void 0:f.prd)==null?void 0:p.epics,(m=(d=e==null?void 0:e.raw)==null?void 0:d.prd)==null?void 0:m.epicGroups,(v=(g=e==null?void 0:e.raw)==null?void 0:g.prd)==null?void 0:v.epic_groups].forEach(w=>{Array.isArray(w)&&w.forEach(r)}),t}function SZ(e,t){const n=String(t||"").trim();return n&&yv(e).find((r,i)=>Qi(r,i)===n)||null}function NZ(e){var t,n,r,i,o,a,l,c;return String((e==null?void 0:e.gitlabEpic)||(e==null?void 0:e.gitlab_epic)||((t=e==null?void 0:e.prd)==null?void 0:t.gitlabEpic)||((n=e==null?void 0:e.prd)==null?void 0:n.gitlab_epic)||((r=e==null?void 0:e.raw)==null?void 0:r.gitlabEpic)||((i=e==null?void 0:e.raw)==null?void 0:i.gitlab_epic)||((a=(o=e==null?void 0:e.raw)==null?void 0:o.prd)==null?void 0:a.gitlabEpic)||((c=(l=e==null?void 0:e.raw)==null?void 0:l.prd)==null?void 0:c.gitlab_epic)||"").trim()}function _Z(e,t){if(!t||typeof t!="object")return t;const n=String(t.issueKey||t.issue_key||t.issue||"").trim(),r=SZ(e,n),i=String(t.platform||(r==null?void 0:r.platform)||"").trim(),o=i&&!t.platform?{...t,platform:i}:t,a=String((r==null?void 0:r.gitlabIssue)||(r==null?void 0:r.gitlab_issue)||o.gitlabIssue||o.gitlab_issue||"").trim(),l=NZ(e);if(!a&&!l)return o;const c=Wl(o),u=`${c} ${SS(o)}`;if(!/issue-gitlab:|gitlab_issue_missing|ensure-gitlab-issue|implementation|impl_|fix_|testing|submit-test|self-test/i.test(u))return o;const p=[];a&&p.push({key:`gitlab-issue:${n}:${(i||"all").toLowerCase()}`,label:"GitLab Issue",kind:"gitlab-issue",durability:"durable",url:a}),l&&p.push({key:"gitlab-epic:requirement",label:"GitLab Epic",kind:"gitlab-epic",durability:"durable",url:l});const d=Xa(o.status),m=a&&d==="done"&&/^issue-gitlab:/.test(c)&&/需要.*GitLab Issue/.test(String(o.title||o.label||""));return{...o,...m?{title:String(o.title||o.label||"GitLab Issue 已绑定").replace(/^需要为/,"已为").replace("创建或绑定","创建/绑定"),label:String(o.label||o.title||"GitLab Issue 已绑定").replace(/^需要为/,"已为").replace("创建或绑定","创建/绑定")}:{},artifacts:Ui(o.artifacts,p)}}function OE(e,t){const n=Og(t),r=Og(e),i=Number.isFinite(n)&&(!Number.isFinite(r)||n>=r)?t:e,o=(i==null?void 0:i.status)||(t==null?void 0:t.status)||(e==null?void 0:e.status);return{...e,...t,title:Co(i,0)||Co(t,0)||Co(e,0),detail:Mm(i)||Mm(t)||Mm(e),status:o,links:Ui(e==null?void 0:e.links,t==null?void 0:t.links),artifacts:Ui(e==null?void 0:e.artifacts,t==null?void 0:t.artifacts),outputs:Ui(e==null?void 0:e.outputs,t==null?void 0:t.outputs),results:Ui(e==null?void 0:e.results,t==null?void 0:t.results),events:Ui(e==null?void 0:e.events,t==null?void 0:t.events),createdAt:(e==null?void 0:e.createdAt)||(e==null?void 0:e.created_at)||(t==null?void 0:t.createdAt)||(t==null?void 0:t.created_at),startedAt:(e==null?void 0:e.startedAt)||(e==null?void 0:e.started_at)||(t==null?void 0:t.startedAt)||(t==null?void 0:t.started_at),updatedAt:(i==null?void 0:i.updatedAt)||(i==null?void 0:i.updated_at)||(t==null?void 0:t.updatedAt)||(t==null?void 0:t.updated_at)||(e==null?void 0:e.updatedAt)||(e==null?void 0:e.updated_at)}}function CZ(e,t){const n=[],r=new Map,i=new Map,o=new Map,a=p=>{var d,m;return!!(!p||typeof p!="object"||p.auxiliary===!0||p.auxiliary_event===!0||VX(p)||String(p.type||"")==="review-link"||String(p.type||"")==="action-preview"||p.preview===!0||String(p.type||"")==="same-platform-stage-conflict"&&/\/api\/prd-workflow\/review\//.test(String(((d=p.conflict)==null?void 0:d.previousArtifact)||((m=p.conflict)==null?void 0:m.incomingArtifact)||"")))},l=(p,d)=>({...p,links:Ui(p==null?void 0:p.links,d==null?void 0:d.links),artifacts:Ui(p==null?void 0:p.artifacts,d==null?void 0:d.artifacts),outputs:Ui(p==null?void 0:p.outputs,d==null?void 0:d.outputs),results:Ui(p==null?void 0:p.results,d==null?void 0:d.results)}),c=(p,d)=>{if(!p)return;const m=r.get(p);if(m!=null){n[m]=l(n[m],d);return}o.set(p,l(o.get(p)||{},d))},u=(p,d)=>p&&o.has(p)?l(d,o.get(p)):d,f=p=>{if(Array.isArray(p))for(const d of p){const m=Wl(d);if(a(d)){c(m,d);continue}const g=String(d.id||d.eventId||d.event_id||d.actionId||d.action_id||"").trim(),v=m||g,w=v?r.get(v)??i.get(g):null;v&&w!=null?(n[w]=u(m,OE(n[w],d)),m&&r.set(m,w),g&&i.set(g,w)):(v&&r.set(v,n.length),g&&i.set(g,n.length),n.push(u(m,d)))}};if(f(e==null?void 0:e.actions),f(e==null?void 0:e.workflowActions),f(e==null?void 0:e.workflow_actions),f(e==null?void 0:e.timeline),f(e==null?void 0:e.history),f(e==null?void 0:e.events),f(e==null?void 0:e.runtimeEvents),f(e==null?void 0:e.runtime_events),t&&typeof t=="object"){const p=$g(t),d=Wl(t),m=d?r.get(d):p?i.get(p):null,g={...t,status:t.status||"next",kind:"next_action"};m!=null&&(n[m]=OE(n[m],g))}return n.map((p,d)=>({item:p,index:d,ts:Og(p)})).filter(p=>Number.isFinite(p.ts)).sort((p,d)=>d.ts-p.ts||p.index-d.index).map(p=>_Z(e,p.item))}function AZ(e){const t=Array.isArray(e==null?void 0:e.runtimeEvents)?e.runtimeEvents:Array.isArray(e==null?void 0:e.runtime_events)?e.runtime_events:[],n=Array.isArray(e==null?void 0:e.snapshotAudit)?e.snapshotAudit:Array.isArray(e==null?void 0:e.snapshot_audit)?e.snapshot_audit:[];return[...t,...n].filter(i=>i&&typeof i=="object").map((i,o)=>({item:i,index:o,ts:Og(i)})).sort((i,o)=>{const a=Number.isFinite(i.ts),l=Number.isFinite(o.ts);return a&&l?o.ts-i.ts||o.index-i.index:a?-1:l?1:o.index-i.index}).slice(0,8).map(i=>i.item)}function EZ(e,t){const n=String(t||"all");if(n==="all")return!0;const r=[e==null?void 0:e.status,e==null?void 0:e.type,e==null?void 0:e.kind,e==null?void 0:e.title,e==null?void 0:e.detail,e==null?void 0:e.error,JSON.stringify((e==null?void 0:e.links)||[]),JSON.stringify((e==null?void 0:e.artifacts)||[])].join(" ").toLowerCase();return n==="errors"?/error|failed|conflict|blocked|stale|revision|冲突|失败/.test(r):n==="review"?/review|temporary-review|临时/.test(r):n==="external"?/mr|merge request|gitlab|jenkins|package|build|tapd/.test(r):!0}function IZ(e,t){const n=typeof e=="string"?e:String((e==null?void 0:e.text)||""),r=typeof e=="object"?Number(e==null?void 0:e.stepMs):NaN,i=typeof e=="object"?Number(e==null?void 0:e.totalMs):NaN,o=Number.isFinite(r)&&Number.isFinite(i)?`(+${ml(r)} / 总 ${ml(i)})`:"";return`${t+1}. ${n}${o}`}function _L(e){if(String((e==null?void 0:e.type)||"")!=="raw")return null;const t=String((e==null?void 0:e.text)||"").trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Rc(...e){for(const t of e){const n=Number(t);if(Number.isFinite(n))return n}return NaN}function PZ(e){const t=e!=null&&e.tool_call&&typeof e.tool_call=="object"?e.tool_call:{},n=Object.keys(t).find(r=>/ToolCall$/i.test(r))||"";return n||String((e==null?void 0:e.name)||(e==null?void 0:e.tool)||"tool_call")}function TZ(e){const t=e!=null&&e.tool_call&&typeof e.tool_call=="object"?e.tool_call:{},n=Object.keys(t).find(r=>/ToolCall$/i.test(r))||"";return n&&t[n]&&typeof t[n]=="object"?t[n]:{}}function RZ(e,t){var i;const n=String(((i=t==null?void 0:t.args)==null?void 0:i.command)||"");return/ck_fetch\.py/.test(n)?"CK 查询":/collect_important_mails\.py|list_mails_by_date\.py|read_mail_content\.py/.test(n)?"邮件脚本":/npm\s+run\s+build|build:web-ui/.test(n)?"前端构建":/python3/.test(n)?"Python 脚本":{shellToolCall:"Shell 命令",readToolCall:"读取文件/上下文",grepToolCall:"搜索代码",globToolCall:"查找文件",editToolCall:"编辑文件",writeToolCall:"写入文件"}[e]||e||"工具调用"}function MZ(e){var o,a,l;const t=_L(e);if(!t||typeof t!="object")return null;const n=String(t.type||""),r=String(t.subtype||""),i=Rc(t.timestamp_ms,t.completedAtMs,t.startedAtMs,e==null?void 0:e.ts,Date.now());if(n==="tool_call"&&r==="completed"){const c=TZ(t),u=PZ(t),f=Rc(t.startedAtMs,c==null?void 0:c.startedAtMs),p=Rc(t.completedAtMs,c==null?void 0:c.completedAtMs),d=((o=c==null?void 0:c.result)==null?void 0:o.success)||((a=c==null?void 0:c.result)==null?void 0:a.failure)||{},m=Number.isFinite(f)&&Number.isFinite(p)?Math.max(0,p-f):Rc(d.executionTime,d.localExecutionTimeMs),g=String(((l=c==null?void 0:c.args)==null?void 0:l.command)||d.command||"").trim(),v=g?g.split(`
215
216
  `).find(Boolean)||g:"";return{kind:"tool",label:RZ(u,c),durationMs:Number.isFinite(m)?m:null,at:i,detail:v?v.slice(0,90):""}}if(n==="result"){const c=Rc(t.duration_ms,t.duration_api_ms);return{kind:"total",label:"运行总耗时",durationMs:Number.isFinite(c)?c:null,at:i,detail:t.is_error?"失败结束":"成功结束"}}return n==="connection"?{kind:"network",label:r==="reconnecting"?"连接重连":r==="reconnected"?"连接恢复":"连接事件",durationMs:null,at:i,detail:""}:n==="retry"?{kind:"network",label:r==="resuming"?"会话恢复":r==="starting"?"开始重试":"重试事件",durationMs:null,at:i,detail:""}:null}function LE(e,t,n,r){const i=(Array.isArray(e)?e:[]).map(w=>typeof w=="string"?{text:w}:w).filter(w=>w&&String(w.text||"").trim()),o=Array.isArray(t)?t:[],a=[...o].reverse().find(w=>(w==null?void 0:w.kind)==="total"&&Number.isFinite(Number(w.durationMs))),l=[...i].reverse().find(w=>Number.isFinite(Number(w.totalMs))),c=Number.isFinite(Number(r))&&Number.isFinite(Number(n))?Math.max(0,Number(r)-Number(n)):NaN,u=Rc(a==null?void 0:a.durationMs,l==null?void 0:l.totalMs,c),f=i.filter(w=>w.kind==="model").reduce((w,y)=>w+(Number(y.stepMs)||0),0),p=o.filter(w=>(w==null?void 0:w.kind)==="tool"),d=p.reduce((w,y)=>w+(Number(y.durationMs)||0),0),m=o.filter(w=>(w==null?void 0:w.kind)==="network").length,g=[...i.filter(w=>Number(w.stepMs)>=1e3).map(w=>({label:w.text,durationMs:Number(w.stepMs),detail:"Activity 间隔"})),...p.filter(w=>Number(w.durationMs)>=1e3).map(w=>({label:w.label,durationMs:Number(w.durationMs),detail:w.detail||"工具实际执行"}))].sort((w,y)=>y.durationMs-w.durationMs).slice(0,6),v=["耗时概览"];return Number.isFinite(u)&&v.push(`- 当前总耗时:${ml(u)}`),f>0&&v.push(`- 模型相关间隔:约 ${ml(f)}(按 Activity 间隔估算)`),p.length>0&&v.push(`- 工具实际执行:${ml(d)}(${p.length} 次完成事件)`),m>0&&v.push(`- 网络/会话恢复事件:${m} 次`),g.length>0&&(v.push(""),v.push("慢步骤"),g.forEach((w,y)=>{const k=w.detail?` · ${w.detail}`:"";v.push(`${y+1}. ${w.label}:${ml(w.durationMs)}${k}`)})),i.length>0&&(v.push(""),v.push("最近 Activity"),i.slice(-10).forEach((w,y)=>{v.push(IZ(w,y))})),p.length>0&&(v.push(""),v.push("最近工具完成"),p.slice(-8).forEach((w,y)=>{const k=Number.isFinite(Number(w.durationMs))?` ${ml(w.durationMs)}`:"",b=w.detail?` · ${w.detail}`:"";v.push(`${y+1}. ${w.label}${k}${b}`)})),v.join(`
@@ -869,4 +870,4 @@ node skills/agentflow-cli/scripts/agentflow-cli.mjs run \\
869
870
  transform: scale(1);
870
871
  }
871
872
  }
872
- `)),document.head.appendChild(w);const y=setTimeout(()=>{Qr.domElement(d.current)&&c&&d.current.focus()},0);return()=>{clearTimeout(y);const k=document.getElementById("joyride-beacon-animation");k!=null&&k.parentNode&&k.parentNode.removeChild(k)}},[m,a,c]);const g=xo(o.open);let v;if(t){const w=t;v=It.createElement(w,{continuous:n,index:r,isLastStep:i,size:u,step:f})}else v=It.createElement("span",{style:p.beacon},It.createElement("span",{style:p.beaconOuter}),It.createElement("span",{style:p.beaconInner}));return It.createElement("button",{ref:d,"aria-label":g,className:"react-joyride__beacon","data-testid":"button-beacon",onClick:l,onMouseEnter:l,style:p.beaconWrapper,title:g,type:"button"},v)}function Rhe({styles:e,...t}){const{color:n,height:r,width:i,...o}=e;return It.createElement("button",{style:o,type:"button",...t},It.createElement("svg",{height:typeof r=="number"?`${r}px`:r,preserveAspectRatio:"xMidYMid",version:"1.1",viewBox:"0 0 18 18",width:typeof i=="number"?`${i}px`:i,xmlns:"http://www.w3.org/2000/svg"},It.createElement("g",null,It.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:n}))))}function Mhe(e){const{backProps:t,closeProps:n,index:r,isLastStep:i,primaryProps:o,skipProps:a,step:l,tooltipProps:c}=e,{buttons:u,content:f,styles:p,title:d}=l,m={};u.includes("primary")&&(m.primary=It.createElement("button",{"data-testid":"button-primary",style:p.buttonPrimary,type:"button",...o})),u.includes("skip")&&!i&&(m.skip=It.createElement("button",{"aria-live":"off","data-testid":"button-skip",style:p.buttonSkip,type:"button",...a})),u.includes("back")&&r>0&&(m.back=It.createElement("button",{"data-testid":"button-back",style:p.buttonBack,type:"button",...t})),m.close=u.includes("close")&&It.createElement(Rhe,{"data-testid":"button-close",styles:p.buttonClose,...n});const g=d?{"aria-labelledby":"joyride-tooltip-title","aria-describedby":"joyride-tooltip-content"}:{"aria-label":xo(f),"aria-describedby":"joyride-tooltip-content"};return It.createElement("div",{key:"JoyrideTooltip",className:"react-joyride__tooltip","data-joyride-step":r,...l.id&&{"data-joyride-id":l.id},style:p.tooltip,...c,...g},It.createElement("div",{style:p.tooltipContainer},d&&It.createElement("h4",{id:"joyride-tooltip-title",style:p.tooltipTitle},d),It.createElement("div",{id:"joyride-tooltip-content",style:p.tooltipContent},f)),u.some(v=>v==="back"||v==="primary"||v==="skip")&&It.createElement("div",{style:p.tooltipFooter},It.createElement("div",{style:p.tooltipFooterSpacer},m.skip),m.back,m.primary),m.close)}function $he(e){const{continuous:t,controls:n,index:r,isLastStep:i,size:o,step:a}=e,l=y=>{y.preventDefault(),n.prev(Hi.BUTTON_BACK)},c=y=>{y.preventDefault(),a.closeButtonAction==="skip"?n.skip(Hi.BUTTON_CLOSE):n.close(Hi.BUTTON_CLOSE)},u=y=>{if(y.preventDefault(),!t){n.close(Hi.BUTTON_PRIMARY);return}n.next(Hi.BUTTON_PRIMARY)},f=y=>{y.preventDefault(),n.skip(Hi.BUTTON_SKIP)},p=()=>{const{back:y,close:k,last:b,next:S,nextWithProgress:j,skip:C}=a.locale,R=xo(y),I=xo(k),D=xo(b),E=xo(S),O=xo(C);let z=k,W=I;if(t){if(z=S,W=E,a.showProgress&&!i){const $=xo(j,{step:r+1,steps:o});z=Ov(j,r+1,o),W=$}i&&(z=b,W=D)}return{backProps:{"aria-label":R,children:y,"data-action":"back",onClick:l,role:"button",title:R},closeProps:{"aria-label":I,children:k,"data-action":"close",onClick:c,role:"button",title:I},primaryProps:{"aria-label":W,children:z,"data-action":"primary",onClick:u,role:"button",title:W},skipProps:{"aria-label":O,children:C,"data-action":"skip",onClick:f,role:"button",title:O},tooltipProps:{"aria-modal":!0,role:"alertdialog"}}},{arrowComponent:d,beaconComponent:m,tooltipComponent:g,...v}=a;let w;if(g){const y=g;w=It.createElement(y,{...p(),continuous:t,controls:n,index:r,isLastStep:i,size:o,step:v})}else w=It.createElement(Mhe,{...p(),continuous:t,controls:n,index:r,isLastStep:i,size:o,step:v});return w}function Ohe(e){if(e.startsWith("left"))return["top","bottom"];if(e.startsWith("right"))return["bottom","top"]}function Lhe(e,t,n){var r,i;return e?[Bpe()]:((r=t.floatingOptions)==null?void 0:r.flipOptions)===!1?[]:[zpe({crossAxis:!1,fallbackPlacements:Ohe(n),padding:20,...(i=t.floatingOptions)==null?void 0:i.flipOptions})]}function Dhe(e){var q,M,te,G,K;const{continuous:t,controls:n,index:r,lifecycle:i,nonce:o,open:a,portalElement:l,setPositionData:c,setTooltipRef:u,shouldScroll:f,size:p,step:d,target:m,updateState:g}=e,v=h.useRef(null),w=h.useRef({}),y=h.useRef({}),k=d.placement==="center",b=d.placement==="auto",S=h.useMemo(()=>({getBoundingClientRect:()=>({x:window.innerWidth/2,y:window.innerHeight/2,top:window.innerHeight/2,left:window.innerWidth/2,bottom:window.innerHeight/2,right:window.innerWidth/2,width:0,height:0})}),[]),j=h.useMemo(()=>iD(m)?Bu(m):void 0,[m]),C=h.useMemo(()=>Wu(m),[m]),R=h.useMemo(()=>j?{boundary:j,rootBoundary:"viewport"}:{},[j]),I=k||b?"bottom":d.placement,D=k?"fixed":((q=d.floatingOptions)==null?void 0:q.strategy)??(d.isFixed||C?"fixed":"absolute"),E=h.useMemo(()=>{var oe,be,ee,he;return k?[{name:"center",fn:({rects:me})=>({x:(window.innerWidth-me.floating.width)/2,y:(window.innerHeight-me.floating.height)/2})}]:[aP(({placement:me})=>{var ve;let re="right";me.startsWith("top")?re="top":me.startsWith("bottom")?re="bottom":me.startsWith("left")&&(re="left");const le=d.spotlightTarget?0:d.spotlightPadding[re];return d.offset+le+((ve=d.floatingOptions)!=null&&ve.hideArrow?0:d.arrowSize)},[d.offset,d.spotlightPadding,d.spotlightTarget,d.arrowSize,(oe=d.floatingOptions)==null?void 0:oe.hideArrow]),...Lhe(b,d,I),Fpe({padding:10,...R,...(be=d.floatingOptions)==null?void 0:be.shiftOptions}),...(ee=d.floatingOptions)!=null&&ee.hideArrow?[]:[Wpe({element:v,padding:d.arrowSpacing},[d.arrowSpacing,d.arrowBase])],...((he=d.floatingOptions)==null?void 0:he.middleware)??[]]},[k,d,b,I,R]),O=oP({...k?{elements:{reference:S}}:{},placement:I,strategy:D,middleware:E}),z=oP({strategy:D,placement:d.beaconPlacement??(b||k?"bottom":d.placement),middleware:h.useMemo(()=>{var oe,be;return[aP(((be=(oe=d.floatingOptions)==null?void 0:oe.beaconOptions)==null?void 0:be.offset)??-18)]},[(te=(M=d.floatingOptions)==null?void 0:M.beaconOptions)==null?void 0:te.offset]),whileElementsMounted:rP});y.current=O.middlewareData,w.current=z.middlewareData,h.useEffect(()=>{var ee;const{floating:oe,reference:be}=O.elements;if(!(!be||!oe||i!==wt.TOOLTIP))return rP(be,oe,O.update,(ee=d.floatingOptions)==null?void 0:ee.autoUpdate)},[i,O.update,(G=d.floatingOptions)==null?void 0:G.autoUpdate,d.target,O.elements]),h.useEffect(()=>{!k&&m&&O.refs.setReference(m),m&&z.refs.setReference(m)},[z.refs,k,m,O.refs]),h.useEffect(()=>{O.isPositioned&&c("tooltip",{placement:O.placement,x:O.x??0,y:O.y??0,middlewareData:y.current})},[c,O.isPositioned,O.placement,O.x,O.y]),h.useEffect(()=>{z.isPositioned&&c("beacon",{placement:z.placement,x:z.x??0,y:z.y??0,middlewareData:w.current})},[c,z.isPositioned,z.placement,z.x,z.y]);const W=d.zIndex+100,$=h.useCallback(oe=>{oe.type==="mouseenter"&&d.beaconTrigger!=="hover"||g({lifecycle:wt.TOOLTIP_BEFORE,positioned:!1})},[d.beaconTrigger,g]),H=h.useCallback(oe=>{oe&&(O.refs.setFloating(oe),u(oe))},[O.refs,u]),{arrow:P,floater:F}=d.styles;let L=null;if(i===wt.TOOLTIP||i===wt.TOOLTIP_BEFORE){const oe=cP({...F,...O.floatingStyles,zIndex:W,opacity:a&&O.isPositioned?1:0,...!a&&{transition:"none"}});L=It.createElement("div",{ref:H,className:"react-joyride__floater","data-testid":"floater",id:`react-joyride-step-${r}`,style:oe},It.createElement($he,{continuous:t,controls:n,index:r,isLastStep:r+1===p,size:p,step:d}),!k&&!((K=d.floatingOptions)!=null&&K.hideArrow)&&It.createElement(Phe,{arrowComponent:d.arrowComponent,arrowRef:v,base:d.arrowBase,placement:O.placement,position:O.middlewareData.arrow,size:d.arrowSize,styles:P}))}else(i===wt.BEACON||i===wt.BEACON_BEFORE)&&(L=It.createElement("div",{ref:z.refs.setFloating,className:"react-joyride__floater","data-testid":"floater-beacon",id:`react-joyride-step-${r}-beacon`,style:cP({...z.floatingStyles,zIndex:W})},It.createElement(The,{beaconComponent:d.beaconComponent,continuous:t,index:r,isLastStep:r+1===p,locale:d.locale,nonce:o,onInteract:$,shouldFocus:f,size:p,step:d,styles:d.styles})));return It.createElement(cD,{element:l},L)}function Fhe(e){const{continuous:t,controls:n,index:r,lifecycle:i,nonce:o,portalElement:a,setPositionData:l,shouldScroll:c,size:u,step:f,updateState:p}=e,[d,m]=h.useState(null);Ahe(f.disableFocusTrap?null:d,"[data-action=primary]");const g=ei(f.target),v=i===wt.TOOLTIP;return!aD(f)||!Qr.domElement(g)?null:It.createElement(Dhe,{key:`JoyrideStep-${r}`,continuous:t,controls:n,index:r,lifecycle:i,nonce:o,open:v,portalElement:a,setPositionData:l,setTooltipRef:m,shouldScroll:c,size:u,step:f,target:g,updateState:p})}function zhe({controls:e,mergedProps:t,state:n,step:r,store:i}){const{continuous:o,debug:a,nonce:l,portalElement:c,scrollToFirstStep:u}=t,f=xhe(c),{index:p,lifecycle:d,status:m}=n,g=m===Yt.RUNNING,[v,w]=h.useState(!1),y=h.useRef(null),k=(r==null?void 0:r.loaderDelay)??0;h.useEffect(()=>(n.waiting?k===0?w(!0):y.current=setTimeout(()=>{w(!0)},k):w(!1),()=>{y.current&&(clearTimeout(y.current),y.current=null)}),[k,n.waiting]),h.useEffect(()=>{if(!g)return;const j=C=>{!r||d!==wt.TOOLTIP||C.key==="Escape"&&r.dismissKeyAction&&(r.dismissKeyAction==="next"?e.next(Hi.KEYBOARD):e.close(Hi.KEYBOARD))};return document.body.addEventListener("keydown",j,{passive:!0}),()=>{document.body.removeEventListener("keydown",j)}},[e,g,d,r]);const b=h.useCallback(()=>{(r==null?void 0:r.overlayClickAction)==="close"?e.close(Hi.OVERLAY):(r==null?void 0:r.overlayClickAction)==="next"&&e.next(Hi.OVERLAY)},[e,r==null?void 0:r.overlayClickAction]);if(!r||!g)return null;const S=n.action===tn.START&&!r.skipBeacon&&r.placement!=="center";return It.createElement(It.Fragment,null,d!==wt.INIT&&It.createElement(Fhe,{...n,continuous:o,controls:e,debug:a,nonce:l,portalElement:f,setPositionData:i.current.setPositionData,shouldScroll:!r.skipScroll&&(p!==0||u),step:r,updateState:i.current.updateState}),It.createElement(cD,{element:f},It.createElement(It.Fragment,null,v&&It.createElement(khe,{nonce:l,step:r}),!S&&It.createElement(_he,{...r,continuous:o,lifecycle:d,onClickOverlay:b,portalElement:c?f:null,scrolling:n.scrolling,waiting:n.waiting}))))}function Bhe(e){const{controls:t,failures:n,mergedProps:r,state:i,step:o,store:a}=whe(e);return{controls:t,failures:n,on:h.useCallback((l,c)=>a.current.on(l,c),[a]),state:h.useMemo(()=>Jg(i,"positioned"),[i]),step:o,Tour:BS()?It.createElement(zhe,{controls:t,mergedProps:r,state:i,step:o,store:a}):null}}function Whe(e){const{Tour:t}=Bhe(e);return t}function Hhe(e){return BS()?It.createElement(Whe,e):null}function Khe(e){return[{target:"body",content:e("onboarding:projects.intro"),disableBeacon:!0,placement:"center"},{target:".af-hub-card",content:e("onboarding:projects.hubIntro"),disableBeacon:!0,placement:"left"}]}function Vhe(e){return[{target:"body",content:e("onboarding:flow.intro"),disableBeacon:!0,placement:"center"}]}function qhe(e){return[{target:"body",content:e("onboarding:flow.introEmpty"),disableBeacon:!0,placement:"center"}]}const cm="af:onboarding";function Uhe({page:e,hasNodes:t=!1}){const{t:n}=Fr(),[r,i]=h.useState(!1),[o,a]=h.useState([]),l=h.useRef(null),c=h.useMemo(()=>e==="projects"?Khe(n):t?Vhe(n):qhe(n),[e,t,n]);return h.useEffect(()=>{const u=localStorage.getItem(cm),f=u?JSON.parse(u):{};if(f.completed||f[e]){i(!1),a([]);return}localStorage.setItem(cm,JSON.stringify({...f,[e]:!0})),a(c),i(!0)},[e,t,c]),h.useEffect(()=>{if(!r)return;const u=f=>{var g;const p=f.target.closest("button");if(!p||!p.closest(".react-joyride__tooltip"))return;const m=(g=p.textContent)==null?void 0:g.trim();if(m===n("onboarding:done")||m===n("onboarding:startCreate")||m===n("onboarding:skip")){const v=localStorage.getItem(cm)||"{}",w=JSON.parse(v);m===n("onboarding:skip")?(w.projects=!0,w.flow=!0,w.completed=!0):w[e]=!0,localStorage.setItem(cm,JSON.stringify(w)),a([]),i(!1),e==="projects"&&(m===n("onboarding:done")||m===n("onboarding:startCreate"))&&(localStorage.setItem("af:newPipelineGuide","true"),setTimeout(()=>{const y=document.querySelector(".af-create-btn");y&&y.click()},500))}};return document.addEventListener("click",u,!0),()=>document.removeEventListener("click",u,!0)},[r,e,n]),!r||o.length===0?null:s.jsx(Hhe,{ref:l,steps:o,run:r,continuous:!0,showSkipButton:!0,showProgress:o.length>1,styles:{options:{primaryColor:"#7c4dff",textColor:"#ffffff",backgroundColor:"#1a1a1a",arrowColor:"#1a1a1a",overlayColor:"rgba(0, 0, 0, 0.4)",zIndex:1e4},tooltip:{borderRadius:"1.5rem",padding:"1.5rem"},buttonNext:{borderRadius:"9999px",padding:"0.625rem 1.5rem"},buttonSkip:{borderRadius:"9999px",color:"#9ecaff"},buttonClose:{display:"none"}},locale:{back:n("onboarding:back"),next:n("onboarding:next"),skip:n("onboarding:skip"),last:n(e==="projects"?"onboarding:startCreate":"onboarding:done")},floaterProps:{disableAnimation:!0},scrollToFirstStep:!0})}const Ghe="agentflow:recent-runs:v1",Yhe="agentflow:recent-runs:poller",Jhe=3e3,Xhe=8e3,Qhe=2e3,mP=5e3,Zhe=16e3,gP=[1e4,3e4,6e4];function eme(e){return gP[Math.min(Math.max(e-1,0),gP.length-1)]}function tme(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function nme(e){if(!e)return"暂无成功记录";try{return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"暂无成功记录"}}function rme(){const{navigate:e,path:t}=fs(),[n,r]=h.useState([]),[i,o]=h.useState(!1),[a,l]=h.useState(1),[c,u]=h.useState({status:"idle",failureCount:0,lastSuccessAt:0,message:""}),f=h.useRef(()=>{});h.useEffect(()=>{let S=!1,j=!1,C=!1,R=null,I=0,D=0,E=0,O=0,z=null,W=0,$=0;const H=tme(),P=new Map,F=typeof BroadcastChannel=="function"?new BroadcastChannel(Ghe):null,L=Te=>{try{F==null||F.postMessage({...Te,tabId:H,sentAt:Date.now()})}catch{}},q=()=>{const Te=Date.now()-Zhe;for(const[Ie,Oe]of P)Oe<Te&&P.delete(Ie);l(1+P.size)},M=(Te="presence")=>{L({type:Te,visible:!document.hidden})},te=Te=>{if(!S&&(Array.isArray(Te.runs)&&r(Te.runs),Te.syncHealth&&typeof Te.syncHealth=="object")){const Ie=Te.syncHealth;W=Number(Ie.failureCount)||0,$=Number(Ie.lastSuccessAt)||0,u(Ie)}},G=Te=>{te(Te),L({type:"state",...Te})},K=()=>{I&&(window.clearTimeout(I),I=0)},oe=Te=>{K(),!(S||!j||document.hidden)&&(I=window.setTimeout(()=>{I=0,be()},Math.max(0,Te)))},be=async()=>{if(S||!j||document.hidden||z)return;const Te=new AbortController;z=Te;let Ie=!1;const Oe=window.setTimeout(()=>{Ie=!0,Te.abort()},Xhe);try{const pe=await fetch("/api/pipeline-recent-runs",{signal:Te.signal});if(!pe.ok)throw new Error(`HTTP ${pe.status}`);const Ce=await pe.json();if(S||!j||document.hidden)return;W=0,$=Date.now();const qe=Array.isArray(Ce.runs)?Ce.runs:[];G({runs:qe.filter(Xe=>Xe&&Xe.status==="running"),syncHealth:{status:"ok",failureCount:0,lastSuccessAt:$,message:""}}),oe(Jhe)}catch(pe){const Ce=Te.signal.aborted&&!Ie;if(S||!j||document.hidden||Ce)return;W+=1,G({syncHealth:{status:"delayed",failureCount:W,lastSuccessAt:$,message:Ie?"运行状态同步超过 8 秒未响应":`运行状态同步失败:${String((pe==null?void 0:pe.message)||pe)}`}}),oe(eme(W))}finally{window.clearTimeout(Oe),z===Te&&(z=null)}},ee=()=>{K(),z&&(z.abort(),z=null)},he=()=>{if(ee(),R){const Te=R;R=null,Te()}j=!1},me=(Te=Qhe)=>{D&&window.clearTimeout(D),!(S||document.hidden||j||C)&&(D=window.setTimeout(()=>{D=0,le()},Te))},re=()=>{S||document.hidden||j||(j=!0,oe(0))},le=async()=>{var Te;if(!(S||document.hidden||j||C)){if(!((Te=navigator.locks)!=null&&Te.request)){re();return}C=!0;try{await navigator.locks.request(Yhe,{mode:"exclusive",ifAvailable:!0},async Ie=>{if(C=!1,!Ie||S||document.hidden){me();return}j=!0,oe(0),await new Promise(Oe=>{R=Oe}),R=null,j=!1})}catch{C=!1}finally{me()}}},ve=()=>{if(!S){if(j){W=0,oe(0);return}L({type:"retry"}),me(0)}};f.current=ve,F&&(F.onmessage=Te=>{const Ie=Te.data;if(!(!Ie||Ie.tabId===H)){if(Ie.type==="hello"||Ie.type==="presence"){P.set(Ie.tabId,Date.now()),q(),Ie.type==="hello"&&M();return}if(Ie.type==="bye"){P.delete(Ie.tabId),q(),me(0);return}if(Ie.type==="state"){P.set(Ie.tabId,Date.now()),q(),te(Ie);return}Ie.type==="retry"&&j&&(W=0,oe(0))}});const ae=()=>{M(),document.hidden?he():me(0)},de=()=>{M("bye"),he()},Ae=()=>{M("hello"),me(0)};return document.addEventListener("visibilitychange",ae),window.addEventListener("pagehide",de),window.addEventListener("pageshow",Ae),M("hello"),E=window.setInterval(M,mP),O=window.setInterval(q,mP),me(0),()=>{S=!0,f.current=()=>{},M("bye"),he(),D&&window.clearTimeout(D),E&&window.clearInterval(E),O&&window.clearInterval(O),document.removeEventListener("visibilitychange",ae),window.removeEventListener("pagehide",de),window.removeEventListener("pageshow",Ae),F==null||F.close()}},[]);const p=S=>{const j=new URLSearchParams({flowId:S.flowId,flowSource:S.flowSource||"workspace"});e(`/flow?${j.toString()}`),o(!1)},d=t==="/flow"?new URLSearchParams(window.location.search):null,m=(d==null?void 0:d.get("flowId"))||"",g=c.status==="delayed",v=a>1,w=n.length===1;if(n.length===0&&!g)return null;const y=g?"状态同步延迟":n.length>0?w?n[0].flowId:`${n.length} running`:"",k=g?`${c.message}${v?`;检测到 ${a} 个 AgentFlow 标签页`:""}`:v?`已合并 ${a} 个 AgentFlow 标签页的运行状态同步`:w?`${n[0].flowId} 运行中,点击跳转`:`${n.length} 个 pipeline 运行中`,b=()=>{if(!g&&!v&&w){p(n[0]);return}o(S=>!S)};return s.jsxs("div",{className:"af-run-indicator"+(g?" af-run-indicator--delayed":"")+(v?" af-run-indicator--coordinated":""),role:"status","aria-live":"polite",children:[i&&s.jsxs("div",{className:"af-run-indicator__menu",onMouseLeave:()=>o(!1),children:[(g||v)&&s.jsxs("div",{className:"af-run-indicator__sync",children:[s.jsx("div",{className:"af-run-indicator__sync-title",children:g?"运行状态同步延迟":"多标签页同步已合并"}),s.jsx("div",{className:"af-run-indicator__sync-copy",children:v?`检测到 ${a} 个 AgentFlow 标签页。当前只由一个可见标签页请求运行状态,后台页面不会重复建立连接。`:"运行状态接口暂未及时返回,已停止重复请求并自动降低刷新频率。"}),g&&s.jsxs("div",{className:"af-run-indicator__sync-meta",children:["最近成功:",nme(c.lastSuccessAt)]}),g&&s.jsx("button",{type:"button",className:"af-run-indicator__retry",onClick:S=>{S.stopPropagation(),f.current()},children:"立即重试"})]}),n.map(S=>s.jsxs("button",{type:"button",className:"af-run-indicator__item"+(S.flowId===m?" af-run-indicator__item--current":""),onClick:()=>p(S),title:`${S.flowId} · ${S.runId}`,children:[s.jsx("span",{className:"af-run-indicator__dot"}),s.jsx("span",{className:"af-run-indicator__flow",children:S.flowId}),s.jsx("span",{className:"af-run-indicator__run",children:S.runId.slice(0,12)})]},`${S.flowId}:${S.runId}`))]}),s.jsxs("button",{type:"button",className:"af-run-indicator__btn",onClick:b,title:k,children:[s.jsx("span",{className:"af-run-indicator__pulse"}),s.jsx("span",{className:"af-run-indicator__label",children:y})]})]})}const Ib="0.1.160",sme=6e4,ime=30*6e4;function Iu(e){return String(e||"").trim().replace(/^v/i,"")}function ome(e,t){const n=Iu(e),r=Iu(t);return!!(n&&r&&n!==r)}function ame(e,t){return`agentflow.app-version.snooze:${Iu(e)}:${Iu(t)}`}function lme(e){if(!e)return 0;try{const t=Number(window.sessionStorage.getItem(e));return Number.isFinite(t)?t:0}catch{return 0}}function cme(){const[e,t]=h.useState(null);if(h.useEffect(()=>{let r=!1,i=!1;const o=async()=>{if(!(i||document.visibilityState==="hidden")){i=!0;try{const c=await fetch("/api/app-version",{cache:"no-store"}),u=await c.json().catch(()=>({}));if(!c.ok||r)return;const f=Iu(u.version);if(!ome(Ib,f)){t(null);return}const p=ame(Ib,f);if(lme(p)>Date.now())return;t({clientVersion:Iu(Ib),serverVersion:f,startedAt:String(u.startedAt||""),snoozeKey:p})}catch{}finally{i=!1}}},a=()=>{document.visibilityState==="visible"&&o()},l=window.setInterval(()=>void o(),sme);return document.addEventListener("visibilitychange",a),window.addEventListener("focus",o),o(),()=>{r=!0,window.clearInterval(l),document.removeEventListener("visibilitychange",a),window.removeEventListener("focus",o)}},[]),!e)return null;const n=()=>{try{window.sessionStorage.setItem(e.snoozeKey,String(Date.now()+ime))}catch{}t(null)};return s.jsxs("aside",{className:"af-app-version-notice",role:"status","aria-live":"polite",children:[s.jsx("span",{className:"material-symbols-outlined af-app-version-notice__icon","aria-hidden":!0,children:"system_update"}),s.jsxs("div",{className:"af-app-version-notice__copy",children:[s.jsx("strong",{children:"AgentFlow 已更新"}),s.jsxs("span",{children:["v",e.clientVersion," → v",e.serverVersion,",刷新后生效"]})]}),s.jsxs("div",{className:"af-app-version-notice__actions",children:[s.jsx("button",{type:"button",className:"af-app-version-notice__later",onClick:n,children:"稍后"}),s.jsx("button",{type:"button",className:"af-app-version-notice__refresh",onClick:()=>window.location.reload(),children:"刷新更新"})]})]})}function uD(e){return e==="/likee-context"||e==="/likee_context"}function ume(e){if(e!=="/workspace"&&e!=="/workflow-checklist")return!1;const t=new URLSearchParams(window.location.search);return!!String(t.get("workflowShare")||"").trim()||e==="/workflow-checklist"&&t.get("demo")==="1"}function dme(){return s.jsx("div",{className:"af-app-loading",role:"status","aria-live":"polite","aria-label":"AgentFlow 正在启动",children:s.jsxs("div",{className:"af-app-loading__content",children:[s.jsx("div",{className:"af-app-loading__mark",children:s.jsx("img",{src:py,alt:""})}),s.jsx("h1",{children:"AgentFlow"}),s.jsx("p",{children:"Orchestration Engine"}),s.jsx("div",{className:"af-app-loading__track","aria-hidden":!0,children:s.jsx("span",{})}),s.jsx("small",{children:"正在连接工作空间…"})]})})}function fme(){const{navigate:e}=fs();return h.useEffect(()=>{const t=new URLSearchParams(window.location.search),n=new URLSearchParams,r=t.get("flowId")||"",i=t.get("flowSource")||"";r&&n.set("flowId",r),i&&n.set("flowSource",i),t.get("flowArchived")&&n.set("archived",t.get("flowArchived")),e(`/workspace${n.toString()?`?${n.toString()}`:""}`)},[e]),null}class pme extends h.Component{constructor(t){super(t),this.state={error:null,info:null}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,n){console.error("[AgentFlow UI render error]",t,n),this.setState({error:t,info:n})}render(){var r,i,o;if(!this.state.error)return this.props.children;const t=String(((r=this.state.error)==null?void 0:r.stack)||((i=this.state.error)==null?void 0:i.message)||this.state.error),n=String(((o=this.state.info)==null?void 0:o.componentStack)||"");return s.jsx("div",{className:"af-auth-screen",children:s.jsxs("div",{className:"af-auth-panel af-ui-error-panel",children:[s.jsxs("div",{className:"af-auth-brand",children:[s.jsx("span",{className:"material-symbols-outlined",children:"error"}),s.jsxs("div",{children:[s.jsx("h1",{children:"AgentFlow UI Error"}),s.jsx("p",{children:"页面渲染失败,下面是调试堆栈。"})]})]}),s.jsx("pre",{children:t}),n?s.jsx("pre",{children:n}):null]})})}}function hme({authUser:e}){const{path:t}=fs();return t==="/projects"||t==="/"?s.jsx(jc,{authUser:e}):t==="/nodes"?s.jsx(jc,{authUser:e,resourceKind:"nodes"}):t==="/my-nodes"?s.jsx(jc,{authUser:e,resourceKind:"my-nodes"}):t==="/my-flows"?s.jsx(jc,{authUser:e,resourceKind:"my-flows"}):t==="/skills"?s.jsx(jc,{authUser:e,resourceKind:"skills"}):t==="/workspaces"?s.jsx(Sue,{authUser:e}):t==="/workflows"?s.jsx(Due,{authUser:e}):t==="/workflow-report"?s.jsx(Ide,{}):t==="/workflow-checklist"?s.jsx(R2,{}):t==="/mcps"?s.jsx(due,{}):t==="/schedules"?s.jsx(mue,{}):t==="/node-studio"?s.jsx(wue,{}):t==="/flow"?s.jsx(fme,{}):t==="/workspace"?s.jsx(n2,{}):t.startsWith("/display")?s.jsx(i2,{}):t==="/settings"?s.jsx(Yce,{authUser:e}):t==="/admin/usage"?s.jsx(rue,{authUser:e}):t==="/admin/teams"?s.jsx(sue,{authUser:e}):t==="/feedback"?s.jsx(oue,{authUser:e}):uD(t)?s.jsx(M2,{}):s.jsx(jc,{})}function mme({children:e}){const[t,n]=h.useState({loading:!0,authenticated:!1,user:null,setupRequired:!1}),[r,i]=h.useState(""),[o,a]=h.useState(""),[l,c]=h.useState(!1),[u,f]=h.useState(""),p=async()=>{try{const g=await(await fetch("/api/auth/me")).json().catch(()=>({}));n({loading:!1,authenticated:!!g.authenticated,user:g.user||null,setupRequired:!!g.setupRequired}),f(g.error?String(g.error):"")}catch(m){n({loading:!1,authenticated:!1,user:null,setupRequired:!1}),f(String(m.message||m))}};h.useEffect(()=>{p()},[]);const d=async m=>{m.preventDefault(),c(!0),f("");try{const g=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:r,password:o})}),v=await g.json().catch(()=>({}));if(!g.ok)throw new Error(v.error||"登录失败");i(""),a(""),window.location.replace(window.location.href);return}catch(g){f(String(g.message||g))}finally{c(!1)}};return t.loading?s.jsx(dme,{}):t.authenticated?e({user:t.user,onLogout:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),n({loading:!1,authenticated:!1,user:null,setupRequired:!1})}}):s.jsx("div",{className:"af-auth-screen",children:s.jsxs("form",{className:"af-auth-panel",onSubmit:d,autoComplete:"on",children:[s.jsxs("div",{className:"af-auth-brand",children:[s.jsx("span",{className:"material-symbols-outlined",children:"account_circle"}),s.jsxs("div",{children:[s.jsx("h1",{children:"AgentFlow"}),s.jsx("p",{children:t.setupRequired?"初始化管理员账号":"登录或创建用户"})]})]}),s.jsxs("label",{className:"af-auth-field",children:[s.jsx("span",{children:"用户名"}),s.jsx("input",{id:"agentflow-auth-username",name:"username",type:"text",value:r,onChange:m=>i(m.target.value),autoComplete:"username",autoFocus:!0})]}),s.jsxs("label",{className:"af-auth-field",children:[s.jsx("span",{children:"密码"}),s.jsx("input",{id:"agentflow-auth-password",name:"password",type:"password",value:o,onChange:m=>a(m.target.value),autoComplete:t.setupRequired?"new-password":"current-password"})]}),u?s.jsx("p",{className:"af-auth-error",children:u}):null,s.jsx("button",{className:"af-auth-submit",type:"submit",disabled:l||!r.trim()||o.length<4,children:l?"处理中...":t.setupRequired?"创建并登录":"登录"})]})})}function gme({authUser:e,onLogout:t}){const{path:n}=fs(),r=n==="/workflow-report",i=n==="/flow"||n==="/workspace"||n==="/workflow-checklist",o=i||r;return s.jsxs("div",{className:"af-app",children:[n!=="/settings"&&!r?s.jsx(Uhe,{page:i?"flow":"projects"}):null,o?null:s.jsx(XB,{authUser:e,onLogout:t}),s.jsx("div",{className:o?"af-main af-main--pipeline":"af-main",children:s.jsx(hme,{authUser:e})}),s.jsx(rme,{})]})}function yme(){return s.jsx(pme,{children:s.jsxs(TB,{children:[s.jsx(wme,{}),s.jsx(cme,{})]})})}function wme(){const{path:e}=fs();return e.startsWith("/display")?s.jsx(i2,{}):uD(e)?s.jsx(M2,{}):ume(e)?e==="/workflow-checklist"?s.jsx(R2,{}):s.jsx(n2,{}):s.jsx(mme,{children:({user:t,onLogout:n})=>s.jsx(gme,{authUser:t,onLogout:n})})}window.addEventListener("error",e=>{console.error("[AgentFlow UI global error]",e.error||e.message,{filename:e.filename,lineno:e.lineno,colno:e.colno})});window.addEventListener("unhandledrejection",e=>{console.error("[AgentFlow UI unhandled rejection]",e.reason)});const yP=document.querySelector('link[rel="icon"]');yP&&(yP.href=py);Pb.createRoot(document.getElementById("root")).render(s.jsx(It.StrictMode,{children:s.jsx(yme,{})}));export{Cu as M,It as R,_me as a,sr as b,Va as g,s as j,h as r};
873
+ `)),document.head.appendChild(w);const y=setTimeout(()=>{Qr.domElement(d.current)&&c&&d.current.focus()},0);return()=>{clearTimeout(y);const k=document.getElementById("joyride-beacon-animation");k!=null&&k.parentNode&&k.parentNode.removeChild(k)}},[m,a,c]);const g=xo(o.open);let v;if(t){const w=t;v=It.createElement(w,{continuous:n,index:r,isLastStep:i,size:u,step:f})}else v=It.createElement("span",{style:p.beacon},It.createElement("span",{style:p.beaconOuter}),It.createElement("span",{style:p.beaconInner}));return It.createElement("button",{ref:d,"aria-label":g,className:"react-joyride__beacon","data-testid":"button-beacon",onClick:l,onMouseEnter:l,style:p.beaconWrapper,title:g,type:"button"},v)}function Rhe({styles:e,...t}){const{color:n,height:r,width:i,...o}=e;return It.createElement("button",{style:o,type:"button",...t},It.createElement("svg",{height:typeof r=="number"?`${r}px`:r,preserveAspectRatio:"xMidYMid",version:"1.1",viewBox:"0 0 18 18",width:typeof i=="number"?`${i}px`:i,xmlns:"http://www.w3.org/2000/svg"},It.createElement("g",null,It.createElement("path",{d:"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z",fill:n}))))}function Mhe(e){const{backProps:t,closeProps:n,index:r,isLastStep:i,primaryProps:o,skipProps:a,step:l,tooltipProps:c}=e,{buttons:u,content:f,styles:p,title:d}=l,m={};u.includes("primary")&&(m.primary=It.createElement("button",{"data-testid":"button-primary",style:p.buttonPrimary,type:"button",...o})),u.includes("skip")&&!i&&(m.skip=It.createElement("button",{"aria-live":"off","data-testid":"button-skip",style:p.buttonSkip,type:"button",...a})),u.includes("back")&&r>0&&(m.back=It.createElement("button",{"data-testid":"button-back",style:p.buttonBack,type:"button",...t})),m.close=u.includes("close")&&It.createElement(Rhe,{"data-testid":"button-close",styles:p.buttonClose,...n});const g=d?{"aria-labelledby":"joyride-tooltip-title","aria-describedby":"joyride-tooltip-content"}:{"aria-label":xo(f),"aria-describedby":"joyride-tooltip-content"};return It.createElement("div",{key:"JoyrideTooltip",className:"react-joyride__tooltip","data-joyride-step":r,...l.id&&{"data-joyride-id":l.id},style:p.tooltip,...c,...g},It.createElement("div",{style:p.tooltipContainer},d&&It.createElement("h4",{id:"joyride-tooltip-title",style:p.tooltipTitle},d),It.createElement("div",{id:"joyride-tooltip-content",style:p.tooltipContent},f)),u.some(v=>v==="back"||v==="primary"||v==="skip")&&It.createElement("div",{style:p.tooltipFooter},It.createElement("div",{style:p.tooltipFooterSpacer},m.skip),m.back,m.primary),m.close)}function $he(e){const{continuous:t,controls:n,index:r,isLastStep:i,size:o,step:a}=e,l=y=>{y.preventDefault(),n.prev(Hi.BUTTON_BACK)},c=y=>{y.preventDefault(),a.closeButtonAction==="skip"?n.skip(Hi.BUTTON_CLOSE):n.close(Hi.BUTTON_CLOSE)},u=y=>{if(y.preventDefault(),!t){n.close(Hi.BUTTON_PRIMARY);return}n.next(Hi.BUTTON_PRIMARY)},f=y=>{y.preventDefault(),n.skip(Hi.BUTTON_SKIP)},p=()=>{const{back:y,close:k,last:b,next:S,nextWithProgress:j,skip:C}=a.locale,R=xo(y),I=xo(k),D=xo(b),E=xo(S),O=xo(C);let z=k,W=I;if(t){if(z=S,W=E,a.showProgress&&!i){const $=xo(j,{step:r+1,steps:o});z=Ov(j,r+1,o),W=$}i&&(z=b,W=D)}return{backProps:{"aria-label":R,children:y,"data-action":"back",onClick:l,role:"button",title:R},closeProps:{"aria-label":I,children:k,"data-action":"close",onClick:c,role:"button",title:I},primaryProps:{"aria-label":W,children:z,"data-action":"primary",onClick:u,role:"button",title:W},skipProps:{"aria-label":O,children:C,"data-action":"skip",onClick:f,role:"button",title:O},tooltipProps:{"aria-modal":!0,role:"alertdialog"}}},{arrowComponent:d,beaconComponent:m,tooltipComponent:g,...v}=a;let w;if(g){const y=g;w=It.createElement(y,{...p(),continuous:t,controls:n,index:r,isLastStep:i,size:o,step:v})}else w=It.createElement(Mhe,{...p(),continuous:t,controls:n,index:r,isLastStep:i,size:o,step:v});return w}function Ohe(e){if(e.startsWith("left"))return["top","bottom"];if(e.startsWith("right"))return["bottom","top"]}function Lhe(e,t,n){var r,i;return e?[Bpe()]:((r=t.floatingOptions)==null?void 0:r.flipOptions)===!1?[]:[zpe({crossAxis:!1,fallbackPlacements:Ohe(n),padding:20,...(i=t.floatingOptions)==null?void 0:i.flipOptions})]}function Dhe(e){var q,M,te,G,K;const{continuous:t,controls:n,index:r,lifecycle:i,nonce:o,open:a,portalElement:l,setPositionData:c,setTooltipRef:u,shouldScroll:f,size:p,step:d,target:m,updateState:g}=e,v=h.useRef(null),w=h.useRef({}),y=h.useRef({}),k=d.placement==="center",b=d.placement==="auto",S=h.useMemo(()=>({getBoundingClientRect:()=>({x:window.innerWidth/2,y:window.innerHeight/2,top:window.innerHeight/2,left:window.innerWidth/2,bottom:window.innerHeight/2,right:window.innerWidth/2,width:0,height:0})}),[]),j=h.useMemo(()=>iD(m)?Bu(m):void 0,[m]),C=h.useMemo(()=>Wu(m),[m]),R=h.useMemo(()=>j?{boundary:j,rootBoundary:"viewport"}:{},[j]),I=k||b?"bottom":d.placement,D=k?"fixed":((q=d.floatingOptions)==null?void 0:q.strategy)??(d.isFixed||C?"fixed":"absolute"),E=h.useMemo(()=>{var oe,be,ee,he;return k?[{name:"center",fn:({rects:me})=>({x:(window.innerWidth-me.floating.width)/2,y:(window.innerHeight-me.floating.height)/2})}]:[aP(({placement:me})=>{var ve;let re="right";me.startsWith("top")?re="top":me.startsWith("bottom")?re="bottom":me.startsWith("left")&&(re="left");const le=d.spotlightTarget?0:d.spotlightPadding[re];return d.offset+le+((ve=d.floatingOptions)!=null&&ve.hideArrow?0:d.arrowSize)},[d.offset,d.spotlightPadding,d.spotlightTarget,d.arrowSize,(oe=d.floatingOptions)==null?void 0:oe.hideArrow]),...Lhe(b,d,I),Fpe({padding:10,...R,...(be=d.floatingOptions)==null?void 0:be.shiftOptions}),...(ee=d.floatingOptions)!=null&&ee.hideArrow?[]:[Wpe({element:v,padding:d.arrowSpacing},[d.arrowSpacing,d.arrowBase])],...((he=d.floatingOptions)==null?void 0:he.middleware)??[]]},[k,d,b,I,R]),O=oP({...k?{elements:{reference:S}}:{},placement:I,strategy:D,middleware:E}),z=oP({strategy:D,placement:d.beaconPlacement??(b||k?"bottom":d.placement),middleware:h.useMemo(()=>{var oe,be;return[aP(((be=(oe=d.floatingOptions)==null?void 0:oe.beaconOptions)==null?void 0:be.offset)??-18)]},[(te=(M=d.floatingOptions)==null?void 0:M.beaconOptions)==null?void 0:te.offset]),whileElementsMounted:rP});y.current=O.middlewareData,w.current=z.middlewareData,h.useEffect(()=>{var ee;const{floating:oe,reference:be}=O.elements;if(!(!be||!oe||i!==wt.TOOLTIP))return rP(be,oe,O.update,(ee=d.floatingOptions)==null?void 0:ee.autoUpdate)},[i,O.update,(G=d.floatingOptions)==null?void 0:G.autoUpdate,d.target,O.elements]),h.useEffect(()=>{!k&&m&&O.refs.setReference(m),m&&z.refs.setReference(m)},[z.refs,k,m,O.refs]),h.useEffect(()=>{O.isPositioned&&c("tooltip",{placement:O.placement,x:O.x??0,y:O.y??0,middlewareData:y.current})},[c,O.isPositioned,O.placement,O.x,O.y]),h.useEffect(()=>{z.isPositioned&&c("beacon",{placement:z.placement,x:z.x??0,y:z.y??0,middlewareData:w.current})},[c,z.isPositioned,z.placement,z.x,z.y]);const W=d.zIndex+100,$=h.useCallback(oe=>{oe.type==="mouseenter"&&d.beaconTrigger!=="hover"||g({lifecycle:wt.TOOLTIP_BEFORE,positioned:!1})},[d.beaconTrigger,g]),H=h.useCallback(oe=>{oe&&(O.refs.setFloating(oe),u(oe))},[O.refs,u]),{arrow:P,floater:F}=d.styles;let L=null;if(i===wt.TOOLTIP||i===wt.TOOLTIP_BEFORE){const oe=cP({...F,...O.floatingStyles,zIndex:W,opacity:a&&O.isPositioned?1:0,...!a&&{transition:"none"}});L=It.createElement("div",{ref:H,className:"react-joyride__floater","data-testid":"floater",id:`react-joyride-step-${r}`,style:oe},It.createElement($he,{continuous:t,controls:n,index:r,isLastStep:r+1===p,size:p,step:d}),!k&&!((K=d.floatingOptions)!=null&&K.hideArrow)&&It.createElement(Phe,{arrowComponent:d.arrowComponent,arrowRef:v,base:d.arrowBase,placement:O.placement,position:O.middlewareData.arrow,size:d.arrowSize,styles:P}))}else(i===wt.BEACON||i===wt.BEACON_BEFORE)&&(L=It.createElement("div",{ref:z.refs.setFloating,className:"react-joyride__floater","data-testid":"floater-beacon",id:`react-joyride-step-${r}-beacon`,style:cP({...z.floatingStyles,zIndex:W})},It.createElement(The,{beaconComponent:d.beaconComponent,continuous:t,index:r,isLastStep:r+1===p,locale:d.locale,nonce:o,onInteract:$,shouldFocus:f,size:p,step:d,styles:d.styles})));return It.createElement(cD,{element:l},L)}function Fhe(e){const{continuous:t,controls:n,index:r,lifecycle:i,nonce:o,portalElement:a,setPositionData:l,shouldScroll:c,size:u,step:f,updateState:p}=e,[d,m]=h.useState(null);Ahe(f.disableFocusTrap?null:d,"[data-action=primary]");const g=ei(f.target),v=i===wt.TOOLTIP;return!aD(f)||!Qr.domElement(g)?null:It.createElement(Dhe,{key:`JoyrideStep-${r}`,continuous:t,controls:n,index:r,lifecycle:i,nonce:o,open:v,portalElement:a,setPositionData:l,setTooltipRef:m,shouldScroll:c,size:u,step:f,target:g,updateState:p})}function zhe({controls:e,mergedProps:t,state:n,step:r,store:i}){const{continuous:o,debug:a,nonce:l,portalElement:c,scrollToFirstStep:u}=t,f=xhe(c),{index:p,lifecycle:d,status:m}=n,g=m===Yt.RUNNING,[v,w]=h.useState(!1),y=h.useRef(null),k=(r==null?void 0:r.loaderDelay)??0;h.useEffect(()=>(n.waiting?k===0?w(!0):y.current=setTimeout(()=>{w(!0)},k):w(!1),()=>{y.current&&(clearTimeout(y.current),y.current=null)}),[k,n.waiting]),h.useEffect(()=>{if(!g)return;const j=C=>{!r||d!==wt.TOOLTIP||C.key==="Escape"&&r.dismissKeyAction&&(r.dismissKeyAction==="next"?e.next(Hi.KEYBOARD):e.close(Hi.KEYBOARD))};return document.body.addEventListener("keydown",j,{passive:!0}),()=>{document.body.removeEventListener("keydown",j)}},[e,g,d,r]);const b=h.useCallback(()=>{(r==null?void 0:r.overlayClickAction)==="close"?e.close(Hi.OVERLAY):(r==null?void 0:r.overlayClickAction)==="next"&&e.next(Hi.OVERLAY)},[e,r==null?void 0:r.overlayClickAction]);if(!r||!g)return null;const S=n.action===tn.START&&!r.skipBeacon&&r.placement!=="center";return It.createElement(It.Fragment,null,d!==wt.INIT&&It.createElement(Fhe,{...n,continuous:o,controls:e,debug:a,nonce:l,portalElement:f,setPositionData:i.current.setPositionData,shouldScroll:!r.skipScroll&&(p!==0||u),step:r,updateState:i.current.updateState}),It.createElement(cD,{element:f},It.createElement(It.Fragment,null,v&&It.createElement(khe,{nonce:l,step:r}),!S&&It.createElement(_he,{...r,continuous:o,lifecycle:d,onClickOverlay:b,portalElement:c?f:null,scrolling:n.scrolling,waiting:n.waiting}))))}function Bhe(e){const{controls:t,failures:n,mergedProps:r,state:i,step:o,store:a}=whe(e);return{controls:t,failures:n,on:h.useCallback((l,c)=>a.current.on(l,c),[a]),state:h.useMemo(()=>Jg(i,"positioned"),[i]),step:o,Tour:BS()?It.createElement(zhe,{controls:t,mergedProps:r,state:i,step:o,store:a}):null}}function Whe(e){const{Tour:t}=Bhe(e);return t}function Hhe(e){return BS()?It.createElement(Whe,e):null}function Khe(e){return[{target:"body",content:e("onboarding:projects.intro"),disableBeacon:!0,placement:"center"},{target:".af-hub-card",content:e("onboarding:projects.hubIntro"),disableBeacon:!0,placement:"left"}]}function Vhe(e){return[{target:"body",content:e("onboarding:flow.intro"),disableBeacon:!0,placement:"center"}]}function qhe(e){return[{target:"body",content:e("onboarding:flow.introEmpty"),disableBeacon:!0,placement:"center"}]}const cm="af:onboarding";function Uhe({page:e,hasNodes:t=!1}){const{t:n}=Fr(),[r,i]=h.useState(!1),[o,a]=h.useState([]),l=h.useRef(null),c=h.useMemo(()=>e==="projects"?Khe(n):t?Vhe(n):qhe(n),[e,t,n]);return h.useEffect(()=>{const u=localStorage.getItem(cm),f=u?JSON.parse(u):{};if(f.completed||f[e]){i(!1),a([]);return}localStorage.setItem(cm,JSON.stringify({...f,[e]:!0})),a(c),i(!0)},[e,t,c]),h.useEffect(()=>{if(!r)return;const u=f=>{var g;const p=f.target.closest("button");if(!p||!p.closest(".react-joyride__tooltip"))return;const m=(g=p.textContent)==null?void 0:g.trim();if(m===n("onboarding:done")||m===n("onboarding:startCreate")||m===n("onboarding:skip")){const v=localStorage.getItem(cm)||"{}",w=JSON.parse(v);m===n("onboarding:skip")?(w.projects=!0,w.flow=!0,w.completed=!0):w[e]=!0,localStorage.setItem(cm,JSON.stringify(w)),a([]),i(!1),e==="projects"&&(m===n("onboarding:done")||m===n("onboarding:startCreate"))&&(localStorage.setItem("af:newPipelineGuide","true"),setTimeout(()=>{const y=document.querySelector(".af-create-btn");y&&y.click()},500))}};return document.addEventListener("click",u,!0),()=>document.removeEventListener("click",u,!0)},[r,e,n]),!r||o.length===0?null:s.jsx(Hhe,{ref:l,steps:o,run:r,continuous:!0,showSkipButton:!0,showProgress:o.length>1,styles:{options:{primaryColor:"#7c4dff",textColor:"#ffffff",backgroundColor:"#1a1a1a",arrowColor:"#1a1a1a",overlayColor:"rgba(0, 0, 0, 0.4)",zIndex:1e4},tooltip:{borderRadius:"1.5rem",padding:"1.5rem"},buttonNext:{borderRadius:"9999px",padding:"0.625rem 1.5rem"},buttonSkip:{borderRadius:"9999px",color:"#9ecaff"},buttonClose:{display:"none"}},locale:{back:n("onboarding:back"),next:n("onboarding:next"),skip:n("onboarding:skip"),last:n(e==="projects"?"onboarding:startCreate":"onboarding:done")},floaterProps:{disableAnimation:!0},scrollToFirstStep:!0})}const Ghe="agentflow:recent-runs:v1",Yhe="agentflow:recent-runs:poller",Jhe=3e3,Xhe=8e3,Qhe=2e3,mP=5e3,Zhe=16e3,gP=[1e4,3e4,6e4];function eme(e){return gP[Math.min(Math.max(e-1,0),gP.length-1)]}function tme(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function nme(e){if(!e)return"暂无成功记录";try{return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return"暂无成功记录"}}function rme(){const{navigate:e,path:t}=fs(),[n,r]=h.useState([]),[i,o]=h.useState(!1),[a,l]=h.useState(1),[c,u]=h.useState({status:"idle",failureCount:0,lastSuccessAt:0,message:""}),f=h.useRef(()=>{});h.useEffect(()=>{let S=!1,j=!1,C=!1,R=null,I=0,D=0,E=0,O=0,z=null,W=0,$=0;const H=tme(),P=new Map,F=typeof BroadcastChannel=="function"?new BroadcastChannel(Ghe):null,L=Te=>{try{F==null||F.postMessage({...Te,tabId:H,sentAt:Date.now()})}catch{}},q=()=>{const Te=Date.now()-Zhe;for(const[Ie,Oe]of P)Oe<Te&&P.delete(Ie);l(1+P.size)},M=(Te="presence")=>{L({type:Te,visible:!document.hidden})},te=Te=>{if(!S&&(Array.isArray(Te.runs)&&r(Te.runs),Te.syncHealth&&typeof Te.syncHealth=="object")){const Ie=Te.syncHealth;W=Number(Ie.failureCount)||0,$=Number(Ie.lastSuccessAt)||0,u(Ie)}},G=Te=>{te(Te),L({type:"state",...Te})},K=()=>{I&&(window.clearTimeout(I),I=0)},oe=Te=>{K(),!(S||!j||document.hidden)&&(I=window.setTimeout(()=>{I=0,be()},Math.max(0,Te)))},be=async()=>{if(S||!j||document.hidden||z)return;const Te=new AbortController;z=Te;let Ie=!1;const Oe=window.setTimeout(()=>{Ie=!0,Te.abort()},Xhe);try{const pe=await fetch("/api/pipeline-recent-runs",{signal:Te.signal});if(!pe.ok)throw new Error(`HTTP ${pe.status}`);const Ce=await pe.json();if(S||!j||document.hidden)return;W=0,$=Date.now();const qe=Array.isArray(Ce.runs)?Ce.runs:[];G({runs:qe.filter(Xe=>Xe&&Xe.status==="running"),syncHealth:{status:"ok",failureCount:0,lastSuccessAt:$,message:""}}),oe(Jhe)}catch(pe){const Ce=Te.signal.aborted&&!Ie;if(S||!j||document.hidden||Ce)return;W+=1,G({syncHealth:{status:"delayed",failureCount:W,lastSuccessAt:$,message:Ie?"运行状态同步超过 8 秒未响应":`运行状态同步失败:${String((pe==null?void 0:pe.message)||pe)}`}}),oe(eme(W))}finally{window.clearTimeout(Oe),z===Te&&(z=null)}},ee=()=>{K(),z&&(z.abort(),z=null)},he=()=>{if(ee(),R){const Te=R;R=null,Te()}j=!1},me=(Te=Qhe)=>{D&&window.clearTimeout(D),!(S||document.hidden||j||C)&&(D=window.setTimeout(()=>{D=0,le()},Te))},re=()=>{S||document.hidden||j||(j=!0,oe(0))},le=async()=>{var Te;if(!(S||document.hidden||j||C)){if(!((Te=navigator.locks)!=null&&Te.request)){re();return}C=!0;try{await navigator.locks.request(Yhe,{mode:"exclusive",ifAvailable:!0},async Ie=>{if(C=!1,!Ie||S||document.hidden){me();return}j=!0,oe(0),await new Promise(Oe=>{R=Oe}),R=null,j=!1})}catch{C=!1}finally{me()}}},ve=()=>{if(!S){if(j){W=0,oe(0);return}L({type:"retry"}),me(0)}};f.current=ve,F&&(F.onmessage=Te=>{const Ie=Te.data;if(!(!Ie||Ie.tabId===H)){if(Ie.type==="hello"||Ie.type==="presence"){P.set(Ie.tabId,Date.now()),q(),Ie.type==="hello"&&M();return}if(Ie.type==="bye"){P.delete(Ie.tabId),q(),me(0);return}if(Ie.type==="state"){P.set(Ie.tabId,Date.now()),q(),te(Ie);return}Ie.type==="retry"&&j&&(W=0,oe(0))}});const ae=()=>{M(),document.hidden?he():me(0)},de=()=>{M("bye"),he()},Ae=()=>{M("hello"),me(0)};return document.addEventListener("visibilitychange",ae),window.addEventListener("pagehide",de),window.addEventListener("pageshow",Ae),M("hello"),E=window.setInterval(M,mP),O=window.setInterval(q,mP),me(0),()=>{S=!0,f.current=()=>{},M("bye"),he(),D&&window.clearTimeout(D),E&&window.clearInterval(E),O&&window.clearInterval(O),document.removeEventListener("visibilitychange",ae),window.removeEventListener("pagehide",de),window.removeEventListener("pageshow",Ae),F==null||F.close()}},[]);const p=S=>{const j=new URLSearchParams({flowId:S.flowId,flowSource:S.flowSource||"workspace"});e(`/flow?${j.toString()}`),o(!1)},d=t==="/flow"?new URLSearchParams(window.location.search):null,m=(d==null?void 0:d.get("flowId"))||"",g=c.status==="delayed",v=a>1,w=n.length===1;if(n.length===0&&!g)return null;const y=g?"状态同步延迟":n.length>0?w?n[0].flowId:`${n.length} running`:"",k=g?`${c.message}${v?`;检测到 ${a} 个 AgentFlow 标签页`:""}`:v?`已合并 ${a} 个 AgentFlow 标签页的运行状态同步`:w?`${n[0].flowId} 运行中,点击跳转`:`${n.length} 个 pipeline 运行中`,b=()=>{if(!g&&!v&&w){p(n[0]);return}o(S=>!S)};return s.jsxs("div",{className:"af-run-indicator"+(g?" af-run-indicator--delayed":"")+(v?" af-run-indicator--coordinated":""),role:"status","aria-live":"polite",children:[i&&s.jsxs("div",{className:"af-run-indicator__menu",onMouseLeave:()=>o(!1),children:[(g||v)&&s.jsxs("div",{className:"af-run-indicator__sync",children:[s.jsx("div",{className:"af-run-indicator__sync-title",children:g?"运行状态同步延迟":"多标签页同步已合并"}),s.jsx("div",{className:"af-run-indicator__sync-copy",children:v?`检测到 ${a} 个 AgentFlow 标签页。当前只由一个可见标签页请求运行状态,后台页面不会重复建立连接。`:"运行状态接口暂未及时返回,已停止重复请求并自动降低刷新频率。"}),g&&s.jsxs("div",{className:"af-run-indicator__sync-meta",children:["最近成功:",nme(c.lastSuccessAt)]}),g&&s.jsx("button",{type:"button",className:"af-run-indicator__retry",onClick:S=>{S.stopPropagation(),f.current()},children:"立即重试"})]}),n.map(S=>s.jsxs("button",{type:"button",className:"af-run-indicator__item"+(S.flowId===m?" af-run-indicator__item--current":""),onClick:()=>p(S),title:`${S.flowId} · ${S.runId}`,children:[s.jsx("span",{className:"af-run-indicator__dot"}),s.jsx("span",{className:"af-run-indicator__flow",children:S.flowId}),s.jsx("span",{className:"af-run-indicator__run",children:S.runId.slice(0,12)})]},`${S.flowId}:${S.runId}`))]}),s.jsxs("button",{type:"button",className:"af-run-indicator__btn",onClick:b,title:k,children:[s.jsx("span",{className:"af-run-indicator__pulse"}),s.jsx("span",{className:"af-run-indicator__label",children:y})]})]})}const Ib="0.1.162",sme=6e4,ime=30*6e4;function Iu(e){return String(e||"").trim().replace(/^v/i,"")}function ome(e,t){const n=Iu(e),r=Iu(t);return!!(n&&r&&n!==r)}function ame(e,t){return`agentflow.app-version.snooze:${Iu(e)}:${Iu(t)}`}function lme(e){if(!e)return 0;try{const t=Number(window.sessionStorage.getItem(e));return Number.isFinite(t)?t:0}catch{return 0}}function cme(){const[e,t]=h.useState(null);if(h.useEffect(()=>{let r=!1,i=!1;const o=async()=>{if(!(i||document.visibilityState==="hidden")){i=!0;try{const c=await fetch("/api/app-version",{cache:"no-store"}),u=await c.json().catch(()=>({}));if(!c.ok||r)return;const f=Iu(u.version);if(!ome(Ib,f)){t(null);return}const p=ame(Ib,f);if(lme(p)>Date.now())return;t({clientVersion:Iu(Ib),serverVersion:f,startedAt:String(u.startedAt||""),snoozeKey:p})}catch{}finally{i=!1}}},a=()=>{document.visibilityState==="visible"&&o()},l=window.setInterval(()=>void o(),sme);return document.addEventListener("visibilitychange",a),window.addEventListener("focus",o),o(),()=>{r=!0,window.clearInterval(l),document.removeEventListener("visibilitychange",a),window.removeEventListener("focus",o)}},[]),!e)return null;const n=()=>{try{window.sessionStorage.setItem(e.snoozeKey,String(Date.now()+ime))}catch{}t(null)};return s.jsxs("aside",{className:"af-app-version-notice",role:"status","aria-live":"polite",children:[s.jsx("span",{className:"material-symbols-outlined af-app-version-notice__icon","aria-hidden":!0,children:"system_update"}),s.jsxs("div",{className:"af-app-version-notice__copy",children:[s.jsx("strong",{children:"AgentFlow 已更新"}),s.jsxs("span",{children:["v",e.clientVersion," → v",e.serverVersion,",刷新后生效"]})]}),s.jsxs("div",{className:"af-app-version-notice__actions",children:[s.jsx("button",{type:"button",className:"af-app-version-notice__later",onClick:n,children:"稍后"}),s.jsx("button",{type:"button",className:"af-app-version-notice__refresh",onClick:()=>window.location.reload(),children:"刷新更新"})]})]})}function uD(e){return e==="/likee-context"||e==="/likee_context"}function ume(e){if(e!=="/workspace"&&e!=="/workflow-checklist")return!1;const t=new URLSearchParams(window.location.search);return!!String(t.get("workflowShare")||"").trim()||e==="/workflow-checklist"&&t.get("demo")==="1"}function dme(){return s.jsx("div",{className:"af-app-loading",role:"status","aria-live":"polite","aria-label":"AgentFlow 正在启动",children:s.jsxs("div",{className:"af-app-loading__content",children:[s.jsx("div",{className:"af-app-loading__mark",children:s.jsx("img",{src:py,alt:""})}),s.jsx("h1",{children:"AgentFlow"}),s.jsx("p",{children:"Orchestration Engine"}),s.jsx("div",{className:"af-app-loading__track","aria-hidden":!0,children:s.jsx("span",{})}),s.jsx("small",{children:"正在连接工作空间…"})]})})}function fme(){const{navigate:e}=fs();return h.useEffect(()=>{const t=new URLSearchParams(window.location.search),n=new URLSearchParams,r=t.get("flowId")||"",i=t.get("flowSource")||"";r&&n.set("flowId",r),i&&n.set("flowSource",i),t.get("flowArchived")&&n.set("archived",t.get("flowArchived")),e(`/workspace${n.toString()?`?${n.toString()}`:""}`)},[e]),null}class pme extends h.Component{constructor(t){super(t),this.state={error:null,info:null}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,n){console.error("[AgentFlow UI render error]",t,n),this.setState({error:t,info:n})}render(){var r,i,o;if(!this.state.error)return this.props.children;const t=String(((r=this.state.error)==null?void 0:r.stack)||((i=this.state.error)==null?void 0:i.message)||this.state.error),n=String(((o=this.state.info)==null?void 0:o.componentStack)||"");return s.jsx("div",{className:"af-auth-screen",children:s.jsxs("div",{className:"af-auth-panel af-ui-error-panel",children:[s.jsxs("div",{className:"af-auth-brand",children:[s.jsx("span",{className:"material-symbols-outlined",children:"error"}),s.jsxs("div",{children:[s.jsx("h1",{children:"AgentFlow UI Error"}),s.jsx("p",{children:"页面渲染失败,下面是调试堆栈。"})]})]}),s.jsx("pre",{children:t}),n?s.jsx("pre",{children:n}):null]})})}}function hme({authUser:e}){const{path:t}=fs();return t==="/projects"||t==="/"?s.jsx(jc,{authUser:e}):t==="/nodes"?s.jsx(jc,{authUser:e,resourceKind:"nodes"}):t==="/my-nodes"?s.jsx(jc,{authUser:e,resourceKind:"my-nodes"}):t==="/my-flows"?s.jsx(jc,{authUser:e,resourceKind:"my-flows"}):t==="/skills"?s.jsx(jc,{authUser:e,resourceKind:"skills"}):t==="/workspaces"?s.jsx(Sue,{authUser:e}):t==="/workflows"?s.jsx(Due,{authUser:e}):t==="/workflow-report"?s.jsx(Ide,{}):t==="/workflow-checklist"?s.jsx(R2,{}):t==="/mcps"?s.jsx(due,{}):t==="/schedules"?s.jsx(mue,{}):t==="/node-studio"?s.jsx(wue,{}):t==="/flow"?s.jsx(fme,{}):t==="/workspace"?s.jsx(n2,{}):t.startsWith("/display")?s.jsx(i2,{}):t==="/settings"?s.jsx(Yce,{authUser:e}):t==="/admin/usage"?s.jsx(rue,{authUser:e}):t==="/admin/teams"?s.jsx(sue,{authUser:e}):t==="/feedback"?s.jsx(oue,{authUser:e}):uD(t)?s.jsx(M2,{}):s.jsx(jc,{})}function mme({children:e}){const[t,n]=h.useState({loading:!0,authenticated:!1,user:null,setupRequired:!1}),[r,i]=h.useState(""),[o,a]=h.useState(""),[l,c]=h.useState(!1),[u,f]=h.useState(""),p=async()=>{try{const g=await(await fetch("/api/auth/me")).json().catch(()=>({}));n({loading:!1,authenticated:!!g.authenticated,user:g.user||null,setupRequired:!!g.setupRequired}),f(g.error?String(g.error):"")}catch(m){n({loading:!1,authenticated:!1,user:null,setupRequired:!1}),f(String(m.message||m))}};h.useEffect(()=>{p()},[]);const d=async m=>{m.preventDefault(),c(!0),f("");try{const g=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:r,password:o})}),v=await g.json().catch(()=>({}));if(!g.ok)throw new Error(v.error||"登录失败");i(""),a(""),window.location.replace(window.location.href);return}catch(g){f(String(g.message||g))}finally{c(!1)}};return t.loading?s.jsx(dme,{}):t.authenticated?e({user:t.user,onLogout:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),n({loading:!1,authenticated:!1,user:null,setupRequired:!1})}}):s.jsx("div",{className:"af-auth-screen",children:s.jsxs("form",{className:"af-auth-panel",onSubmit:d,autoComplete:"on",children:[s.jsxs("div",{className:"af-auth-brand",children:[s.jsx("span",{className:"material-symbols-outlined",children:"account_circle"}),s.jsxs("div",{children:[s.jsx("h1",{children:"AgentFlow"}),s.jsx("p",{children:t.setupRequired?"初始化管理员账号":"登录或创建用户"})]})]}),s.jsxs("label",{className:"af-auth-field",children:[s.jsx("span",{children:"用户名"}),s.jsx("input",{id:"agentflow-auth-username",name:"username",type:"text",value:r,onChange:m=>i(m.target.value),autoComplete:"username",autoFocus:!0})]}),s.jsxs("label",{className:"af-auth-field",children:[s.jsx("span",{children:"密码"}),s.jsx("input",{id:"agentflow-auth-password",name:"password",type:"password",value:o,onChange:m=>a(m.target.value),autoComplete:t.setupRequired?"new-password":"current-password"})]}),u?s.jsx("p",{className:"af-auth-error",children:u}):null,s.jsx("button",{className:"af-auth-submit",type:"submit",disabled:l||!r.trim()||o.length<4,children:l?"处理中...":t.setupRequired?"创建并登录":"登录"})]})})}function gme({authUser:e,onLogout:t}){const{path:n}=fs(),r=n==="/workflow-report",i=n==="/flow"||n==="/workspace"||n==="/workflow-checklist",o=i||r;return s.jsxs("div",{className:"af-app",children:[n!=="/settings"&&!r?s.jsx(Uhe,{page:i?"flow":"projects"}):null,o?null:s.jsx(XB,{authUser:e,onLogout:t}),s.jsx("div",{className:o?"af-main af-main--pipeline":"af-main",children:s.jsx(hme,{authUser:e})}),s.jsx(rme,{})]})}function yme(){return s.jsx(pme,{children:s.jsxs(TB,{children:[s.jsx(wme,{}),s.jsx(cme,{})]})})}function wme(){const{path:e}=fs();return e.startsWith("/display")?s.jsx(i2,{}):uD(e)?s.jsx(M2,{}):ume(e)?e==="/workflow-checklist"?s.jsx(R2,{}):s.jsx(n2,{}):s.jsx(mme,{children:({user:t,onLogout:n})=>s.jsx(gme,{authUser:t,onLogout:n})})}window.addEventListener("error",e=>{console.error("[AgentFlow UI global error]",e.error||e.message,{filename:e.filename,lineno:e.lineno,colno:e.colno})});window.addEventListener("unhandledrejection",e=>{console.error("[AgentFlow UI unhandled rejection]",e.reason)});const yP=document.querySelector('link[rel="icon"]');yP&&(yP.href=py);Pb.createRoot(document.getElementById("root")).render(s.jsx(It.StrictMode,{children:s.jsx(yme,{})}));export{Cu as M,It as R,_me as a,sr as b,Va as g,s as j,h as r};