@yiyi_zhang/reactflow-ui 1.2.0 → 1.3.1

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 (116) hide show
  1. package/README.md +8 -6
  2. package/dist/AiWorkflowIDE.d.ts +13 -0
  3. package/dist/WorkflowIDE.d.ts +9 -0
  4. package/dist/actions/builtin/coerce.d.ts +9 -0
  5. package/dist/actions/types.d.ts +1 -0
  6. package/dist/ai.d.ts +21 -2
  7. package/dist/components/AiNative/AgentTimeline.d.ts +1 -1
  8. package/dist/components/AiNative/ClarificationCard.d.ts +3 -2
  9. package/dist/components/AiNative/InlineCanvasCopilot.d.ts +2 -1
  10. package/dist/components/AiNative/RepairCard.d.ts +3 -2
  11. package/dist/components/AiNative/mermaidParser.d.ts +31 -0
  12. package/dist/components/AiNative/repairActions.d.ts +16 -0
  13. package/dist/components/AiNative/runInputs.d.ts +13 -0
  14. package/dist/components/BrandLogo.d.ts +2 -3
  15. package/dist/components/ConfirmDialog.d.ts +3 -1
  16. package/dist/components/DraftCodeField.d.ts +26 -0
  17. package/dist/components/PromptDialog.d.ts +3 -1
  18. package/dist/components/business/ActionPickerModal.d.ts +2 -0
  19. package/dist/components/business/BusinessEditorContext.d.ts +38 -0
  20. package/dist/components/business/DataPillInput.d.ts +10 -0
  21. package/dist/components/business/DecisionBranchCard.d.ts +2 -1
  22. package/dist/components/business/ForkJoinCard.d.ts +2 -1
  23. package/dist/components/business/LibraryVersionBadge.d.ts +1 -1
  24. package/dist/components/business/LoopDoWhileCard.d.ts +2 -1
  25. package/dist/components/business/NestedControlStep.d.ts +7 -1
  26. package/dist/components/business/RunStoryTimeline.d.ts +7 -0
  27. package/dist/components/business/StepCardParts.d.ts +73 -0
  28. package/dist/components/business/StepFlowEditor.d.ts +18 -1
  29. package/dist/components/business/StepListEditor.d.ts +6 -2
  30. package/dist/components/business/deleteMessage.d.ts +6 -0
  31. package/dist/components/business/runStatus.d.ts +11 -0
  32. package/dist/components/icons/CmIcon.d.ts +17 -0
  33. package/dist/components/icons/iconRegistry.d.ts +80 -0
  34. package/dist/components/import/ApiImportDialog.d.ts +27 -0
  35. package/dist/components/onboarding/ModalShell.d.ts +15 -0
  36. package/dist/components/onboarding/OnboardingController.d.ts +74 -0
  37. package/dist/components/onboarding/OnboardingGuideCard.d.ts +10 -0
  38. package/dist/components/onboarding/OnboardingWizard.d.ts +42 -0
  39. package/dist/components/onboarding/PromotionPanel.d.ts +28 -0
  40. package/dist/components/onboarding/WorkflowNameBuilder.d.ts +19 -0
  41. package/dist/components/onboarding/index.d.ts +8 -0
  42. package/dist/components/onboarding/styles.d.ts +11 -0
  43. package/dist/components/onboarding/useOnboardingData.d.ts +17 -0
  44. package/dist/components/template/TemplateGallery.d.ts +2 -0
  45. package/dist/components/template/TemplateSetupWizard.d.ts +2 -0
  46. package/dist/hooks/useConfirm.d.ts +3 -1
  47. package/dist/import/buildAction.d.ts +23 -0
  48. package/dist/import/common.d.ts +23 -0
  49. package/dist/import/curl.d.ts +12 -0
  50. package/dist/import/detect.d.ts +9 -0
  51. package/dist/import/index.d.ts +10 -0
  52. package/dist/import/insert.d.ts +16 -0
  53. package/dist/import/openapi.d.ts +9 -0
  54. package/dist/import/postman.d.ts +9 -0
  55. package/dist/import/schema.d.ts +15 -0
  56. package/dist/import/selection.d.ts +17 -0
  57. package/dist/import/sensitive.d.ts +18 -0
  58. package/dist/import/types.d.ts +62 -0
  59. package/dist/import/util.d.ts +23 -0
  60. package/dist/index.d.ts +21 -2
  61. package/dist/library/versionStatus.d.ts +2 -2
  62. package/dist/logo.svg +9 -36
  63. package/dist/onboarding/index.d.ts +6 -0
  64. package/dist/onboarding/naming.d.ts +46 -0
  65. package/dist/onboarding/poll.d.ts +42 -0
  66. package/dist/onboarding/wizardState.d.ts +44 -0
  67. package/dist/parser/conductorGenerator.d.ts +17 -2
  68. package/dist/product-launch.html +10 -1394
  69. package/dist/providers/WorkflowIdeProvider.d.ts +23 -0
  70. package/dist/providers/resolve.d.ts +20 -0
  71. package/dist/providers/types.d.ts +67 -0
  72. package/dist/reactflow-ui-ai.es.js +20355 -13884
  73. package/dist/reactflow-ui.css +1 -1
  74. package/dist/reactflow-ui.es.js +23257 -14745
  75. package/dist/reactflow-ui.umd.js +192 -38
  76. package/dist/sample-imports/cmdb-openapi3.json +334 -0
  77. package/dist/sample-imports/cmdb-postman.json +100 -0
  78. package/dist/sample-imports/ticket-swagger2.json +231 -0
  79. package/dist/sample-workflows/ecs-lifecycle-automation.json +36 -4
  80. package/dist/services/ai/agentRunner.d.ts +42 -1
  81. package/dist/services/ai/errorMessages.d.ts +9 -1
  82. package/dist/services/ai/protocolAdapter.d.ts +5 -0
  83. package/dist/services/ai/systemPrompt.d.ts +1 -1
  84. package/dist/services/ai/toolExecutor.d.ts +26 -0
  85. package/dist/services/ai/workflowSynthesizer.d.ts +4 -4
  86. package/dist/services/aiService.d.ts +5 -1
  87. package/dist/stepmodel/compile.d.ts +2 -1
  88. package/dist/stepmodel/factory.d.ts +5 -0
  89. package/dist/stepmodel/pills.d.ts +32 -0
  90. package/dist/stepmodel/types.d.ts +10 -0
  91. package/dist/stepmodel/validate.d.ts +20 -0
  92. package/dist/store/aiStore.d.ts +10 -3
  93. package/dist/store/sandboxRunObserver.d.ts +20 -0
  94. package/dist/store/workflowStore.d.ts +2 -9
  95. package/dist/telemetry/buffer.d.ts +37 -0
  96. package/dist/telemetry/once.d.ts +11 -0
  97. package/dist/telemetry/track.d.ts +17 -0
  98. package/dist/telemetry/types.d.ts +24 -0
  99. package/dist/telemetry/useTelemetry.d.ts +22 -0
  100. package/dist/template/templateStore.d.ts +6 -0
  101. package/dist/template/types.d.ts +1 -0
  102. package/dist/types/conductor.d.ts +25 -1
  103. package/dist/types/workflow.d.ts +20 -3
  104. package/dist/types/workflowLibrary.d.ts +5 -5
  105. package/dist/utils/executionAnalyzer.d.ts +5 -0
  106. package/dist/utils/executionImport.d.ts +52 -0
  107. package/dist/utils/executionPoller.d.ts +37 -0
  108. package/dist/utils/localSandboxEngine.d.ts +43 -6
  109. package/dist/utils/runStory.d.ts +20 -0
  110. package/dist/utils/sandbox/jq.d.ts +13 -0
  111. package/dist/utils/sandbox/scriptRunner.d.ts +34 -0
  112. package/dist/utils/statusMeta.d.ts +35 -0
  113. package/dist/utils/taskEditing.d.ts +59 -0
  114. package/dist/utils/taskTypeMeta.d.ts +1 -0
  115. package/dist/utils/validationRules.d.ts +19 -5
  116. package/package.json +6 -2
@@ -1,60 +1,200 @@
1
- (function(Z,I){typeof exports=="object"&&typeof module<"u"?I(exports,require("react"),require("reactflow"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react","reactflow","react-dom"],I):(Z=typeof globalThis<"u"?globalThis:Z||self,I(Z.ReactflowUI={},Z.React,Z.ReactFlow,Z.ReactDOM))})(this,(function(Z,I,q,Qe){"use strict";var Yt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Cy(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Xt={exports:{}},Nt={};var ic;function Ny(){if(ic)return Nt;ic=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(n,o,s){var i=null;if(s!==void 0&&(i=""+s),o.key!==void 0&&(i=""+o.key),"key"in o){s={};for(var l in o)l!=="key"&&(s[l]=o[l])}else s=o;return o=s.ref,{$$typeof:e,type:n,key:i,ref:o!==void 0?o:null,props:s}}return Nt.Fragment=t,Nt.jsx=r,Nt.jsxs=r,Nt}var Rt={};var lc;function Ry(){return lc||(lc=1,process.env.NODE_ENV!=="production"&&(function(){function e(C){if(C==null)return null;if(typeof C=="function")return C.$$typeof===T?null:C.displayName||C.name||null;if(typeof C=="string")return C;switch(C){case g:return"Fragment";case x:return"Profiler";case b:return"StrictMode";case j:return"Suspense";case w:return"SuspenseList";case _:return"Activity"}if(typeof C=="object")switch(typeof C.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),C.$$typeof){case y:return"Portal";case k:return C.displayName||"Context";case v:return(C._context.displayName||"Context")+".Consumer";case S:var G=C.render;return C=C.displayName,C||(C=G.displayName||G.name||"",C=C!==""?"ForwardRef("+C+")":"ForwardRef"),C;case N:return G=C.displayName||null,G!==null?G:e(C.type)||"Memo";case L:G=C._payload,C=C._init;try{return e(C(G))}catch{}}return null}function t(C){return""+C}function r(C){try{t(C);var G=!1}catch{G=!0}if(G){G=console;var Q=G.error,M=typeof Symbol=="function"&&Symbol.toStringTag&&C[Symbol.toStringTag]||C.constructor.name||"Object";return Q.call(G,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",M),t(C)}}function n(C){if(C===g)return"<>";if(typeof C=="object"&&C!==null&&C.$$typeof===L)return"<...>";try{var G=e(C);return G?"<"+G+">":"<...>"}catch{return"<...>"}}function o(){var C=D.A;return C===null?null:C.getOwner()}function s(){return Error("react-stack-top-frame")}function i(C){if(R.call(C,"key")){var G=Object.getOwnPropertyDescriptor(C,"key").get;if(G&&G.isReactWarning)return!1}return C.key!==void 0}function l(C,G){function Q(){P||(P=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",G))}Q.isReactWarning=!0,Object.defineProperty(C,"key",{get:Q,configurable:!0})}function c(){var C=e(this.type);return z[C]||(z[C]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),C=this.props.ref,C!==void 0?C:null}function u(C,G,Q,M,F,H){var U=Q.ref;return C={$$typeof:m,type:C,key:G,props:Q,_owner:M},(U!==void 0?U:null)!==null?Object.defineProperty(C,"ref",{enumerable:!1,get:c}):Object.defineProperty(C,"ref",{enumerable:!1,value:null}),C._store={},Object.defineProperty(C._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(C,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(C,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:F}),Object.defineProperty(C,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:H}),Object.freeze&&(Object.freeze(C.props),Object.freeze(C)),C}function d(C,G,Q,M,F,H){var U=G.children;if(U!==void 0)if(M)if(A(U)){for(M=0;M<U.length;M++)p(U[M]);Object.freeze&&Object.freeze(U)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else p(U);if(R.call(G,"key")){U=e(C);var ee=Object.keys(G).filter(function(de){return de!=="key"});M=0<ee.length?"{key: someKey, "+ee.join(": ..., ")+": ...}":"{key: someKey}",$[U+M]||(ee=0<ee.length?"{"+ee.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(K,T){typeof exports=="object"&&typeof module<"u"?T(exports,require("react"),require("reactflow"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react","reactflow","react-dom"],T):(K=typeof globalThis<"u"?globalThis:K||self,T(K.ReactflowUI={},K.React,K.ReactFlow,K.ReactDOM))})(this,(function(K,T,J,kt){"use strict";var Jn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function m0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Un={exports:{}},Jr={};var $p;function h0(){if($p)return Jr;$p=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(n,s,a){var i=null;if(a!==void 0&&(i=""+a),s.key!==void 0&&(i=""+s.key),"key"in s){a={};for(var l in s)l!=="key"&&(a[l]=s[l])}else a=s;return s=a.ref,{$$typeof:e,type:n,key:i,ref:s!==void 0?s:null,props:a}}return Jr.Fragment=t,Jr.jsx=r,Jr.jsxs=r,Jr}var Ur={};var Lp;function y0(){return Lp||(Lp=1,process.env.NODE_ENV!=="production"&&(function(){function e(P){if(P==null)return null;if(typeof P=="function")return P.$$typeof===N?null:P.displayName||P.name||null;if(typeof P=="string")return P;switch(P){case x:return"Fragment";case v:return"Profiler";case g:return"StrictMode";case j:return"Suspense";case _:return"SuspenseList";case C:return"Activity"}if(typeof P=="object")switch(typeof P.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),P.$$typeof){case y:return"Portal";case b:return P.displayName||"Context";case k:return(P._context.displayName||"Context")+".Consumer";case S:var $=P.render;return P=P.displayName,P||(P=$.displayName||$.name||"",P=P!==""?"ForwardRef("+P+")":"ForwardRef"),P;case w:return $=P.displayName||null,$!==null?$:e(P.type)||"Memo";case I:$=P._payload,P=P._init;try{return e(P($))}catch{}}return null}function t(P){return""+P}function r(P){try{t(P);var $=!1}catch{$=!0}if($){$=console;var X=$.error,D=typeof Symbol=="function"&&Symbol.toStringTag&&P[Symbol.toStringTag]||P.constructor.name||"Object";return X.call($,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",D),t(P)}}function n(P){if(P===x)return"<>";if(typeof P=="object"&&P!==null&&P.$$typeof===I)return"<...>";try{var $=e(P);return $?"<"+$+">":"<...>"}catch{return"<...>"}}function s(){var P=O.A;return P===null?null:P.getOwner()}function a(){return Error("react-stack-top-frame")}function i(P){if(E.call(P,"key")){var $=Object.getOwnPropertyDescriptor(P,"key").get;if($&&$.isReactWarning)return!1}return P.key!==void 0}function l(P,$){function X(){H||(H=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",$))}X.isReactWarning=!0,Object.defineProperty(P,"key",{get:X,configurable:!0})}function c(){var P=e(this.type);return F[P]||(F[P]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),P=this.props.ref,P!==void 0?P:null}function d(P,$,X,D,B,U){var G=X.ref;return P={$$typeof:h,type:P,key:$,props:X,_owner:D},(G!==void 0?G:null)!==null?Object.defineProperty(P,"ref",{enumerable:!1,get:c}):Object.defineProperty(P,"ref",{enumerable:!1,value:null}),P._store={},Object.defineProperty(P._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(P,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(P,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:B}),Object.defineProperty(P,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:U}),Object.freeze&&(Object.freeze(P.props),Object.freeze(P)),P}function u(P,$,X,D,B,U){var G=$.children;if(G!==void 0)if(D)if(R(G)){for(D=0;D<G.length;D++)p(G[D]);Object.freeze&&Object.freeze(G)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else p(G);if(E.call($,"key")){G=e(P);var ne=Object.keys($).filter(function(Q){return Q!=="key"});D=0<ne.length?"{key: someKey, "+ne.join(": ..., ")+": ...}":"{key: someKey}",W[G+D]||(ne=0<ne.length?"{"+ne.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,M,U,ee,U),$[U+M]=!0)}if(U=null,Q!==void 0&&(r(Q),U=""+Q),i(G)&&(r(G.key),U=""+G.key),"key"in G){Q={};for(var ce in G)ce!=="key"&&(Q[ce]=G[ce])}else Q=G;return U&&l(Q,typeof C=="function"?C.displayName||C.name||"Unknown":C),u(C,U,Q,o(),F,H)}function p(C){h(C)?C._store&&(C._store.validated=1):typeof C=="object"&&C!==null&&C.$$typeof===L&&(C._payload.status==="fulfilled"?h(C._payload.value)&&C._payload.value._store&&(C._payload.value._store.validated=1):C._store&&(C._store.validated=1))}function h(C){return typeof C=="object"&&C!==null&&C.$$typeof===m}var f=I,m=Symbol.for("react.transitional.element"),y=Symbol.for("react.portal"),g=Symbol.for("react.fragment"),b=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),v=Symbol.for("react.consumer"),k=Symbol.for("react.context"),S=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),w=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),L=Symbol.for("react.lazy"),_=Symbol.for("react.activity"),T=Symbol.for("react.client.reference"),D=f.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,R=Object.prototype.hasOwnProperty,A=Array.isArray,E=console.createTask?console.createTask:function(){return null};f={react_stack_bottom_frame:function(C){return C()}};var P,z={},J=f.react_stack_bottom_frame.bind(f,s)(),B=E(n(s)),$={};Rt.Fragment=g,Rt.jsx=function(C,G,Q){var M=1e4>D.recentlyCreatedOwnerStacks++;return d(C,G,Q,!1,M?Error("react-stack-top-frame"):J,M?E(n(C)):B)},Rt.jsxs=function(C,G,Q){var M=1e4>D.recentlyCreatedOwnerStacks++;return d(C,G,Q,!0,M?Error("react-stack-top-frame"):J,M?E(n(C)):B)}})()),Rt}var cc;function Ey(){return cc||(cc=1,process.env.NODE_ENV==="production"?Xt.exports=Ny():Xt.exports=Ry()),Xt.exports}var a=Ey();const dc=e=>{let t;const r=new Set,n=(u,d)=>{const p=typeof u=="function"?u(t):u;if(!Object.is(p,t)){const h=t;t=d??(typeof p!="object"||p===null)?p:Object.assign({},t,p),r.forEach(f=>f(t,h))}},o=()=>t,l={setState:n,getState:o,getInitialState:()=>c,subscribe:u=>(r.add(u),()=>r.delete(u))},c=t=e(n,o,l);return l},uc=(e=>e?dc(e):dc),Py=e=>e;function $r(e,t=Py){const r=I.useSyncExternalStore(e.subscribe,I.useCallback(()=>t(e.getState()),[e,t]),I.useCallback(()=>t(e.getInitialState()),[e,t]));return I.useDebugValue(r),r}const Oy=e=>{const t=uc(e),r=n=>$r(t,n);return Object.assign(r,t),r},qr=(e=>Oy);function zr(e,t){let r;try{r=e()}catch{return}return{getItem:o=>{var s;const i=c=>c===null?null:JSON.parse(c,void 0),l=(s=r.getItem(o))!=null?s:null;return l instanceof Promise?l.then(i):i(l)},setItem:(o,s)=>r.setItem(o,JSON.stringify(s,void 0)),removeItem:o=>r.removeItem(o)}}const Wr=e=>t=>{try{const r=e(t);return r instanceof Promise?r:{then(n){return Wr(n)(r)},catch(n){return this}}}catch(r){return{then(n){return this},catch(n){return Wr(n)(r)}}}},pc=(e,t)=>(r,n,o)=>{let s={storage:zr(()=>localStorage),partialize:y=>y,version:0,merge:(y,g)=>({...g,...y}),...t},i=!1;const l=new Set,c=new Set;let u=s.storage;if(!u)return e((...y)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),r(...y)},n,o);const d=()=>{const y=s.partialize({...n()});return u.setItem(s.name,{state:y,version:s.version})},p=o.setState;o.setState=(y,g)=>(p(y,g),d());const h=e((...y)=>(r(...y),d()),n,o);o.getInitialState=()=>h;let f;const m=()=>{var y,g;if(!u)return;i=!1,l.forEach(x=>{var v;return x((v=n())!=null?v:h)});const b=((g=s.onRehydrateStorage)==null?void 0:g.call(s,(y=n())!=null?y:h))||void 0;return Wr(u.getItem.bind(u))(s.name).then(x=>{if(x)if(typeof x.version=="number"&&x.version!==s.version){if(s.migrate){const v=s.migrate(x.state,x.version);return v instanceof Promise?v.then(k=>[!0,k]):[!0,v]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,x.state];return[!1,void 0]}).then(x=>{var v;const[k,S]=x;if(f=s.merge(S,(v=n())!=null?v:h),r(f,!0),k)return d()}).then(()=>{b?.(f,void 0),f=n(),i=!0,c.forEach(x=>x(f))}).catch(x=>{b?.(void 0,x)})};return o.persist={setOptions:y=>{s={...s,...y},y.storage&&(u=y.storage)},clearStorage:()=>{u?.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>m(),hasHydrated:()=>i,onHydrate:y=>(l.add(y),()=>{l.delete(y)}),onFinishHydration:y=>(c.add(y),()=>{c.delete(y)})},s.skipHydration||m(),f||h};var fc=(e,t,r)=>(o,s)=>({pastStates:r?.pastStates||[],futureStates:r?.futureStates||[],undo:(i=1)=>{if(s().pastStates.length){const l=r?.partialize?.(t())||t(),c=s().pastStates.splice(-i,i),u=c.shift();e(u),o({pastStates:s().pastStates,futureStates:s().futureStates.concat(r?.diff?.(l,u)||l,c.reverse())})}},redo:(i=1)=>{if(s().futureStates.length){const l=r?.partialize?.(t())||t(),c=s().futureStates.splice(-i,i),u=c.shift();e(u),o({pastStates:s().pastStates.concat(r?.diff?.(l,u)||l,c.reverse()),futureStates:s().futureStates})}},clear:()=>o({pastStates:[],futureStates:[]}),isTracking:!0,pause:()=>o({isTracking:!1}),resume:()=>o({isTracking:!0}),setOnSave:i=>o({_onSave:i}),_onSave:r?.onSave,_handleSet:(i,l,c,u)=>{r?.limit&&s().pastStates.length>=r?.limit&&s().pastStates.shift(),s()._onSave?.(i,c),o({pastStates:s().pastStates.concat(u||i),futureStates:[]})}}),Dy=(e,t)=>(n,o,s)=>{s.temporal=uc(t?.wrapTemporal?.(fc(n,o,t))||fc(n,o,t));const i=t?.handleSet?.(s.temporal.getState()._handleSet)||s.temporal.getState()._handleSet,l=u=>{if(!s.temporal.getState().isTracking)return;const d=t?.partialize?.(o())||o(),p=t?.diff?.(u,d);p===null||t?.equality?.(u,d)||i(u,void 0,d,p)},c=s.setState;return s.setState=(...u)=>{const d=t?.partialize?.(o())||o();c(...u),l(d)},e((...u)=>{const d=t?.partialize?.(o())||o();n(...u),l(d)},o,s)};function Ay(e,t="TB",r){const n=r?.hideEmptyBranches??!1;if(!e||!e.tasks)return{nodes:[],edges:[],taskMap:{}};const o=[],s=[],i={};let l=0;const c=e.tasks;for(let u=0;u<c.length;u++){const d=c[u],p=hc(d,l,i,t,c,n);if(o.push(...p.nodes),s.push(...p.edges),l=p.nextId,u>0){const h=c[u-1];Fr(h,d,s,n)}Object.assign(i,p.taskMap)}if(!n&&c.length>0){const u=c[0],d="__workflow_start__";o.push({id:d,type:"plusNode",data:{label:"+",taskReferenceName:d,taskType:"PLUS",parentRef:d,edgeData:{isWorkflowStart:!0},layoutDirection:t},position:{x:0,y:0},sourcePosition:t==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:t==="LR"?q.Position.Left:q.Position.Top}),s.push({id:`e-${d}-${u.taskReferenceName}`,source:d,target:u.taskReferenceName,animated:!0});const p=c[c.length-1],h="__workflow_end__";o.push({id:h,type:"plusNode",data:{label:"+",taskReferenceName:h,taskType:"PLUS",parentRef:p.taskReferenceName,layoutDirection:t},position:{x:0,y:0},sourcePosition:t==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:t==="LR"?q.Position.Left:q.Position.Top}),Fr(p,{taskReferenceName:h},s,n)}return{nodes:o,edges:s,taskMap:i}}function hc(e,t,r,n="TB",o=[],s=!1){switch(e.type||"SIMPLE"){case"DECISION":case"SWITCH":return My(e,t,r,n,s);case"FORK_JOIN":case"FORK_JOIN_DYNAMIC":return $y(e,t,r,n);case"JOIN":case"EXCLUSIVE_JOIN":return Wy(e,t,r,n,o,s);case"DO_WHILE":return qy(e,t,r,n,s);case"SUB_WORKFLOW":return zy(e,t,r,n);default:return Ly(e,t,r,n)}}function Ly(e,t,r,n="TB"){const o={id:e.taskReferenceName,type:"taskNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type||"SIMPLE",task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top},s={[e.taskReferenceName]:e};return{nodes:[o],edges:[],taskMap:s,nextId:t+1}}function My(e,t,r,n="TB",o=!1){const s=[],i=[];let l=t;const c={},u={id:e.taskReferenceName,type:"decisionNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top};s.push(u),c[e.taskReferenceName]=e;const d=e.decisionCases||{},p=e.defaultCase||[],h=Object.keys(d),f=(m,y)=>{if(n==="TB"){if(m===0&&y>1)return"left";if(m===1&&y>2)return"right"}else{if(m===0&&y>1)return"top";if(m===1&&y>2)return"bottom"}return null};if(h.forEach((m,y)=>{const g=d[m],b=f(y,h.length+1);if(g&&g.length>0){const x=Zt(g,l,{...r,...c},n,o);s.push(...x.nodes),i.push(...x.edges),Object.assign(c,x.taskMap),l=x.nextId;const v=g[0].taskReferenceName;i.push({id:`e-${e.taskReferenceName}-${v}`,source:e.taskReferenceName,sourceHandle:b||void 0,target:v,label:m,animated:!0,data:{branchCase:m},style:{stroke:"#3b82f6"}})}else if(!o){const x=`${e.taskReferenceName}_empty_${m}`;s.push({id:x,type:"plusNode",data:{label:`${m} (空)`,parentRef:e.taskReferenceName,edgeData:{branchCase:m},layoutDirection:n,taskReferenceName:x,taskType:"EMPTY_BRANCH"},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary, #64748b)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-tertiary, #94a3b8)",minWidth:"80px",textAlign:"center"}}),i.push({id:`e-${e.taskReferenceName}-${x}`,source:e.taskReferenceName,sourceHandle:b||void 0,target:x,label:m,animated:!0,data:{branchCase:m},style:{stroke:"#3b82f6",strokeDasharray:"5,5"}})}}),p&&p.length>0){const m=Zt(p,l,{...r,...c},n,o);s.push(...m.nodes),i.push(...m.edges),Object.assign(c,m.taskMap),l=m.nextId;const y=p[0].taskReferenceName;i.push({id:`e-${e.taskReferenceName}-${y}`,source:e.taskReferenceName,target:y,label:"default",animated:!0,data:{branchCase:"default"},style:{stroke:"#f59e0b"}})}else if(!o){const m=`${e.taskReferenceName}_empty_default`;s.push({id:m,type:"plusNode",data:{label:"default (空)",parentRef:e.taskReferenceName,edgeData:{branchCase:"default"},layoutDirection:n,taskReferenceName:m,taskType:"EMPTY_BRANCH"},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary, #64748b)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-tertiary, #94a3b8)",minWidth:"80px",textAlign:"center"}}),i.push({id:`e-${e.taskReferenceName}-${m}`,source:e.taskReferenceName,target:m,label:"default",animated:!0,data:{branchCase:"default"},style:{stroke:"#f59e0b",strokeDasharray:"5,5"}})}return{nodes:s,edges:i,taskMap:c,nextId:l}}function $y(e,t,r,n="TB"){const o=[],s=[];let i=t;const l={},c=e.type==="FORK_JOIN_DYNAMIC",u={id:e.taskReferenceName,type:"forkNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,isDynamic:c,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top};if(o.push(u),l[e.taskReferenceName]=e,c){const d=`${e.taskReferenceName}_dynamic_placeholder`;o.push({id:d,type:"dynamicPlaceholderNode",data:{label:"动态分支",taskReferenceName:d,taskType:"DYNAMIC_PLACEHOLDER",layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top}),s.push({id:`e-${e.taskReferenceName}-${d}`,source:e.taskReferenceName,target:d,animated:!0,style:{stroke:"#10b981",strokeDasharray:"5,5",strokeWidth:2}}),l[d]={taskReferenceName:d,type:"DYNAMIC_PLACEHOLDER"}}return c||(e.forkTasks||[]).forEach((p,h)=>{if(p&&p.length>0){const f=Zt(p,i,{...r,...l},n,!1);o.push(...f.nodes),s.push(...f.edges),Object.assign(l,f.taskMap),i=f.nextId;const m=p[0].taskReferenceName;s.push({id:`e-${e.taskReferenceName}-${m}`,source:e.taskReferenceName,sourceHandle:`branch_${h}`,target:m,label:`分支 ${h+1}`,animated:!0,data:{forkIndex:h},style:{stroke:"#10b981"}})}}),{nodes:o,edges:s,taskMap:l,nextId:i}}function qy(e,t,r,n="TB",o=!1){const s={},i=e.taskReferenceName,l={id:i,type:"loopNode",data:{label:e.name,taskReferenceName:i,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top,style:{pointerEvents:"none"}};s[i]=e;const c=e.loopOver||[],u=[],d=[];let p=t+1;if(c.length>0){const h=Zt(c,p,{...r,...s},n,o);if(p=h.nextId,Object.assign(s,h.taskMap),h.nodes.forEach(f=>{u.push({...f,parentId:f.parentId??i,extent:f.parentId?f.extent:"parent"})}),d.push(...h.edges),!o){const f=c[0],m=`__loop_start__${i}`;u.push({id:m,type:"plusNode",parentId:i,extent:"parent",data:{label:"+",taskReferenceName:m,taskType:"PLUS",parentRef:i,edgeData:{isLoopBodyStart:!0,loopId:i},layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top}),d.push({id:`e-${m}-${f.taskReferenceName}`,source:m,target:f.taskReferenceName,animated:!0})}if(!o){const f=c[c.length-1],m=`__loop_end__${i}`;u.push({id:m,type:"plusNode",parentId:i,extent:"parent",data:{label:"+",taskReferenceName:m,taskType:"PLUS",parentRef:f.taskReferenceName,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top}),d.push({id:`e-${f.taskReferenceName}-${m}`,source:f.taskReferenceName,target:m,animated:!0})}}else if(!o){const h=`${i}_loop_empty_plus`;u.push({id:h,type:"plusNode",parentId:i,extent:"parent",data:{label:"+ 添加",taskReferenceName:h,taskType:"PLUS",parentRef:i,edgeData:{isLoopAdd:!0},layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top})}return{nodes:[l,...u],edges:d,taskMap:s,nextId:p}}function zy(e,t,r,n="TB"){const o={id:e.taskReferenceName,type:"subWorkflowNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top},s={[e.taskReferenceName]:e};return{nodes:[o],edges:[],taskMap:s,nextId:t+1}}function Wy(e,t,r,n="TB",o=[],s=!1){const i={id:e.taskReferenceName,type:"joinNode",data:{label:e.name||"JOIN",taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top},l={[e.taskReferenceName]:e},c=[],u=[];(e.joinOn||[]).forEach(h=>{const f=o.find(m=>m.taskReferenceName===h)||r[h];f&&Qt(f,s).forEach(y=>{u.push({id:`e-${y}-${e.taskReferenceName}`,source:y,target:e.taskReferenceName,animated:!0})})});const p=o.findIndex(h=>h.taskReferenceName===e.taskReferenceName);if(p>0){const h=o[p-1];if(h.type==="FORK_JOIN_DYNAMIC"){const f=`${h.taskReferenceName}_dynamic_placeholder`;u.push({id:`e-${f}-${e.taskReferenceName}-dynamic`,source:f,target:e.taskReferenceName,animated:!0,style:{stroke:"#10b981",strokeWidth:2,strokeDasharray:"5,5",opacity:.8}})}else h.type==="FORK_JOIN"&&(h.forkTasks||[]).forEach((m,y)=>{if((!m||m.length===0)&&!s){const g=`${h.taskReferenceName}_empty_branch_${y}`;c.push({id:g,type:"default",data:{label:`分支 ${y+1} (空)`,layoutDirection:n,taskReferenceName:g,taskType:"EMPTY_BRANCH"},position:{x:0,y:0},sourcePosition:n==="LR"?q.Position.Right:q.Position.Bottom,targetPosition:n==="LR"?q.Position.Left:q.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary, #64748b)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-tertiary, #94a3b8)",minWidth:"80px",textAlign:"center"}}),u.push({id:`e-${h.taskReferenceName}-${g}`,source:h.taskReferenceName,sourceHandle:`branch_${y}`,target:g,label:`分支 ${y+1}`,animated:!0,data:{forkIndex:y},style:{stroke:"#10b981",strokeDasharray:"5,5"}}),u.push({id:`e-${g}-${e.taskReferenceName}`,source:g,target:e.taskReferenceName,animated:!0,style:{strokeDasharray:"5,5"}})}})}return{nodes:[i,...c],edges:u,taskMap:l,nextId:t+1}}function Zt(e,t,r,n="TB",o=!1){const s=[],i=[];let l=t;const c={};for(let u=0;u<e.length;u++){const d=e[u],p={...r,...c},h=hc(d,l,p,n,e,o);if(s.push(...h.nodes),i.push(...h.edges),Object.assign(c,h.taskMap),l=h.nextId,u>0){const f=e[u-1];Fr(f,d,i,o)}}return{nodes:s,edges:i,taskMap:c,nextId:l}}function Fr(e,t,r,n=!1){if(e.type==="FORK_JOIN"||e.type==="FORK_JOIN_DYNAMIC")return;const o=Qt(e,n),s=t.taskReferenceName;o.forEach(i=>{const l=`e-${i}-${s}`;r.find(c=>c.id===l)||r.push({id:l,source:i,target:s,animated:!0})})}function Qt(e,t=!1){const r=e.type||"SIMPLE";if(r==="DECISION"||r==="SWITCH"){const n=[],o=e.decisionCases||{},s=e.defaultCase||[];if(Object.entries(o).forEach(([i,l])=>{if(l&&l.length>0){const c=l[l.length-1];n.push(...Qt(c,t))}else t||n.push(`${e.taskReferenceName}_empty_${i}`)}),s.length>0){const i=s[s.length-1];n.push(...Qt(i,t))}else t||n.push(`${e.taskReferenceName}_empty_default`);return n.length>0?n:[e.taskReferenceName]}return[e.taskReferenceName]}const Ae=Ay;function Br(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Hr,mc;function Fy(){if(mc)return Hr;mc=1;function e(){this.__data__=[],this.size=0}return Hr=e,Hr}var Ur,gc;function gt(){if(gc)return Ur;gc=1;function e(t,r){return t===r||t!==t&&r!==r}return Ur=e,Ur}var Jr,yc;function er(){if(yc)return Jr;yc=1;var e=gt();function t(r,n){for(var o=r.length;o--;)if(e(r[o][0],n))return o;return-1}return Jr=t,Jr}var Kr,xc;function By(){if(xc)return Kr;xc=1;var e=er(),t=Array.prototype,r=t.splice;function n(o){var s=this.__data__,i=e(s,o);if(i<0)return!1;var l=s.length-1;return i==l?s.pop():r.call(s,i,1),--this.size,!0}return Kr=n,Kr}var Vr,bc;function Hy(){if(bc)return Vr;bc=1;var e=er();function t(r){var n=this.__data__,o=e(n,r);return o<0?void 0:n[o][1]}return Vr=t,Vr}var Gr,vc;function Uy(){if(vc)return Gr;vc=1;var e=er();function t(r){return e(this.__data__,r)>-1}return Gr=t,Gr}var Yr,kc;function Jy(){if(kc)return Yr;kc=1;var e=er();function t(r,n){var o=this.__data__,s=e(o,r);return s<0?(++this.size,o.push([r,n])):o[s][1]=n,this}return Yr=t,Yr}var Xr,Sc;function tr(){if(Sc)return Xr;Sc=1;var e=Fy(),t=By(),r=Hy(),n=Uy(),o=Jy();function s(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var u=i[l];this.set(u[0],u[1])}}return s.prototype.clear=e,s.prototype.delete=t,s.prototype.get=r,s.prototype.has=n,s.prototype.set=o,Xr=s,Xr}var Zr,_c;function Ky(){if(_c)return Zr;_c=1;var e=tr();function t(){this.__data__=new e,this.size=0}return Zr=t,Zr}var Qr,wc;function Vy(){if(wc)return Qr;wc=1;function e(t){var r=this.__data__,n=r.delete(t);return this.size=r.size,n}return Qr=e,Qr}var en,Tc;function Gy(){if(Tc)return en;Tc=1;function e(t){return this.__data__.get(t)}return en=e,en}var tn,jc;function Yy(){if(jc)return tn;jc=1;function e(t){return this.__data__.has(t)}return tn=e,tn}var rn,Ic;function Cc(){if(Ic)return rn;Ic=1;var e=typeof Yt=="object"&&Yt&&Yt.Object===Object&&Yt;return rn=e,rn}var nn,Nc;function Ke(){if(Nc)return nn;Nc=1;var e=Cc(),t=typeof self=="object"&&self&&self.Object===Object&&self,r=e||t||Function("return this")();return nn=r,nn}var an,Rc;function yt(){if(Rc)return an;Rc=1;var e=Ke(),t=e.Symbol;return an=t,an}var on,Ec;function Xy(){if(Ec)return on;Ec=1;var e=yt(),t=Object.prototype,r=t.hasOwnProperty,n=t.toString,o=e?e.toStringTag:void 0;function s(i){var l=r.call(i,o),c=i[o];try{i[o]=void 0;var u=!0}catch{}var d=n.call(i);return u&&(l?i[o]=c:delete i[o]),d}return on=s,on}var sn,Pc;function Zy(){if(Pc)return sn;Pc=1;var e=Object.prototype,t=e.toString;function r(n){return t.call(n)}return sn=r,sn}var ln,Oc;function lt(){if(Oc)return ln;Oc=1;var e=yt(),t=Xy(),r=Zy(),n="[object Null]",o="[object Undefined]",s=e?e.toStringTag:void 0;function i(l){return l==null?l===void 0?o:n:s&&s in Object(l)?t(l):r(l)}return ln=i,ln}var cn,Dc;function He(){if(Dc)return cn;Dc=1;function e(t){var r=typeof t;return t!=null&&(r=="object"||r=="function")}return cn=e,cn}var dn,Ac;function Et(){if(Ac)return dn;Ac=1;var e=lt(),t=He(),r="[object AsyncFunction]",n="[object Function]",o="[object GeneratorFunction]",s="[object Proxy]";function i(l){if(!t(l))return!1;var c=e(l);return c==n||c==o||c==r||c==s}return dn=i,dn}var un,Lc;function Qy(){if(Lc)return un;Lc=1;var e=Ke(),t=e["__core-js_shared__"];return un=t,un}var pn,Mc;function ex(){if(Mc)return pn;Mc=1;var e=Qy(),t=(function(){var n=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""})();function r(n){return!!t&&t in n}return pn=r,pn}var fn,$c;function qc(){if($c)return fn;$c=1;var e=Function.prototype,t=e.toString;function r(n){if(n!=null){try{return t.call(n)}catch{}try{return n+""}catch{}}return""}return fn=r,fn}var hn,zc;function tx(){if(zc)return hn;zc=1;var e=Et(),t=ex(),r=He(),n=qc(),o=/[\\^$.*+?()[\]{}|]/g,s=/^\[object .+?Constructor\]$/,i=Function.prototype,l=Object.prototype,c=i.toString,u=l.hasOwnProperty,d=RegExp("^"+c.call(u).replace(o,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function p(h){if(!r(h)||t(h))return!1;var f=e(h)?d:s;return f.test(n(h))}return hn=p,hn}var mn,Wc;function rx(){if(Wc)return mn;Wc=1;function e(t,r){return t?.[r]}return mn=e,mn}var gn,Fc;function ct(){if(Fc)return gn;Fc=1;var e=tx(),t=rx();function r(n,o){var s=t(n,o);return e(s)?s:void 0}return gn=r,gn}var yn,Bc;function xn(){if(Bc)return yn;Bc=1;var e=ct(),t=Ke(),r=e(t,"Map");return yn=r,yn}var bn,Hc;function rr(){if(Hc)return bn;Hc=1;var e=ct(),t=e(Object,"create");return bn=t,bn}var vn,Uc;function nx(){if(Uc)return vn;Uc=1;var e=rr();function t(){this.__data__=e?e(null):{},this.size=0}return vn=t,vn}var kn,Jc;function ax(){if(Jc)return kn;Jc=1;function e(t){var r=this.has(t)&&delete this.__data__[t];return this.size-=r?1:0,r}return kn=e,kn}var Sn,Kc;function ox(){if(Kc)return Sn;Kc=1;var e=rr(),t="__lodash_hash_undefined__",r=Object.prototype,n=r.hasOwnProperty;function o(s){var i=this.__data__;if(e){var l=i[s];return l===t?void 0:l}return n.call(i,s)?i[s]:void 0}return Sn=o,Sn}var _n,Vc;function sx(){if(Vc)return _n;Vc=1;var e=rr(),t=Object.prototype,r=t.hasOwnProperty;function n(o){var s=this.__data__;return e?s[o]!==void 0:r.call(s,o)}return _n=n,_n}var wn,Gc;function ix(){if(Gc)return wn;Gc=1;var e=rr(),t="__lodash_hash_undefined__";function r(n,o){var s=this.__data__;return this.size+=this.has(n)?0:1,s[n]=e&&o===void 0?t:o,this}return wn=r,wn}var Tn,Yc;function lx(){if(Yc)return Tn;Yc=1;var e=nx(),t=ax(),r=ox(),n=sx(),o=ix();function s(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var u=i[l];this.set(u[0],u[1])}}return s.prototype.clear=e,s.prototype.delete=t,s.prototype.get=r,s.prototype.has=n,s.prototype.set=o,Tn=s,Tn}var jn,Xc;function cx(){if(Xc)return jn;Xc=1;var e=lx(),t=tr(),r=xn();function n(){this.size=0,this.__data__={hash:new e,map:new(r||t),string:new e}}return jn=n,jn}var In,Zc;function dx(){if(Zc)return In;Zc=1;function e(t){var r=typeof t;return r=="string"||r=="number"||r=="symbol"||r=="boolean"?t!=="__proto__":t===null}return In=e,In}var Cn,Qc;function nr(){if(Qc)return Cn;Qc=1;var e=dx();function t(r,n){var o=r.__data__;return e(n)?o[typeof n=="string"?"string":"hash"]:o.map}return Cn=t,Cn}var Nn,ed;function ux(){if(ed)return Nn;ed=1;var e=nr();function t(r){var n=e(this,r).delete(r);return this.size-=n?1:0,n}return Nn=t,Nn}var Rn,td;function px(){if(td)return Rn;td=1;var e=nr();function t(r){return e(this,r).get(r)}return Rn=t,Rn}var En,rd;function fx(){if(rd)return En;rd=1;var e=nr();function t(r){return e(this,r).has(r)}return En=t,En}var Pn,nd;function hx(){if(nd)return Pn;nd=1;var e=nr();function t(r,n){var o=e(this,r),s=o.size;return o.set(r,n),this.size+=o.size==s?0:1,this}return Pn=t,Pn}var On,ad;function Dn(){if(ad)return On;ad=1;var e=cx(),t=ux(),r=px(),n=fx(),o=hx();function s(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var u=i[l];this.set(u[0],u[1])}}return s.prototype.clear=e,s.prototype.delete=t,s.prototype.get=r,s.prototype.has=n,s.prototype.set=o,On=s,On}var An,od;function mx(){if(od)return An;od=1;var e=tr(),t=xn(),r=Dn(),n=200;function o(s,i){var l=this.__data__;if(l instanceof e){var c=l.__data__;if(!t||c.length<n-1)return c.push([s,i]),this.size=++l.size,this;l=this.__data__=new r(c)}return l.set(s,i),this.size=l.size,this}return An=o,An}var Ln,sd;function ar(){if(sd)return Ln;sd=1;var e=tr(),t=Ky(),r=Vy(),n=Gy(),o=Yy(),s=mx();function i(l){var c=this.__data__=new e(l);this.size=c.size}return i.prototype.clear=t,i.prototype.delete=r,i.prototype.get=n,i.prototype.has=o,i.prototype.set=s,Ln=i,Ln}var Mn,id;function $n(){if(id)return Mn;id=1;function e(t,r){for(var n=-1,o=t==null?0:t.length;++n<o&&r(t[n],n,t)!==!1;);return t}return Mn=e,Mn}var qn,ld;function cd(){if(ld)return qn;ld=1;var e=ct(),t=(function(){try{var r=e(Object,"defineProperty");return r({},"",{}),r}catch{}})();return qn=t,qn}var zn,dd;function or(){if(dd)return zn;dd=1;var e=cd();function t(r,n,o){n=="__proto__"&&e?e(r,n,{configurable:!0,enumerable:!0,value:o,writable:!0}):r[n]=o}return zn=t,zn}var Wn,ud;function sr(){if(ud)return Wn;ud=1;var e=or(),t=gt(),r=Object.prototype,n=r.hasOwnProperty;function o(s,i,l){var c=s[i];(!(n.call(s,i)&&t(c,l))||l===void 0&&!(i in s))&&e(s,i,l)}return Wn=o,Wn}var Fn,pd;function Pt(){if(pd)return Fn;pd=1;var e=sr(),t=or();function r(n,o,s,i){var l=!s;s||(s={});for(var c=-1,u=o.length;++c<u;){var d=o[c],p=i?i(s[d],n[d],d,s,n):void 0;p===void 0&&(p=n[d]),l?t(s,d,p):e(s,d,p)}return s}return Fn=r,Fn}var Bn,fd;function gx(){if(fd)return Bn;fd=1;function e(t,r){for(var n=-1,o=Array(t);++n<t;)o[n]=r(n);return o}return Bn=e,Bn}var Hn,hd;function Xe(){if(hd)return Hn;hd=1;function e(t){return t!=null&&typeof t=="object"}return Hn=e,Hn}var Un,md;function yx(){if(md)return Un;md=1;var e=lt(),t=Xe(),r="[object Arguments]";function n(o){return t(o)&&e(o)==r}return Un=n,Un}var Jn,gd;function Ot(){if(gd)return Jn;gd=1;var e=yx(),t=Xe(),r=Object.prototype,n=r.hasOwnProperty,o=r.propertyIsEnumerable,s=e((function(){return arguments})())?e:function(i){return t(i)&&n.call(i,"callee")&&!o.call(i,"callee")};return Jn=s,Jn}var Kn,yd;function Re(){if(yd)return Kn;yd=1;var e=Array.isArray;return Kn=e,Kn}var Dt={exports:{}},Vn,xd;function xx(){if(xd)return Vn;xd=1;function e(){return!1}return Vn=e,Vn}Dt.exports;var bd;function xt(){return bd||(bd=1,(function(e,t){var r=Ke(),n=xx(),o=t&&!t.nodeType&&t,s=o&&!0&&e&&!e.nodeType&&e,i=s&&s.exports===o,l=i?r.Buffer:void 0,c=l?l.isBuffer:void 0,u=c||n;e.exports=u})(Dt,Dt.exports)),Dt.exports}var Gn,vd;function ir(){if(vd)return Gn;vd=1;var e=9007199254740991,t=/^(?:0|[1-9]\d*)$/;function r(n,o){var s=typeof n;return o=o??e,!!o&&(s=="number"||s!="symbol"&&t.test(n))&&n>-1&&n%1==0&&n<o}return Gn=r,Gn}var Yn,kd;function Xn(){if(kd)return Yn;kd=1;var e=9007199254740991;function t(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=e}return Yn=t,Yn}var Zn,Sd;function bx(){if(Sd)return Zn;Sd=1;var e=lt(),t=Xn(),r=Xe(),n="[object Arguments]",o="[object Array]",s="[object Boolean]",i="[object Date]",l="[object Error]",c="[object Function]",u="[object Map]",d="[object Number]",p="[object Object]",h="[object RegExp]",f="[object Set]",m="[object String]",y="[object WeakMap]",g="[object ArrayBuffer]",b="[object DataView]",x="[object Float32Array]",v="[object Float64Array]",k="[object Int8Array]",S="[object Int16Array]",j="[object Int32Array]",w="[object Uint8Array]",N="[object Uint8ClampedArray]",L="[object Uint16Array]",_="[object Uint32Array]",T={};T[x]=T[v]=T[k]=T[S]=T[j]=T[w]=T[N]=T[L]=T[_]=!0,T[n]=T[o]=T[g]=T[s]=T[b]=T[i]=T[l]=T[c]=T[u]=T[d]=T[p]=T[h]=T[f]=T[m]=T[y]=!1;function D(R){return r(R)&&t(R.length)&&!!T[e(R)]}return Zn=D,Zn}var Qn,_d;function lr(){if(_d)return Qn;_d=1;function e(t){return function(r){return t(r)}}return Qn=e,Qn}var At={exports:{}};At.exports;var wd;function ea(){return wd||(wd=1,(function(e,t){var r=Cc(),n=t&&!t.nodeType&&t,o=n&&!0&&e&&!e.nodeType&&e,s=o&&o.exports===n,i=s&&r.process,l=(function(){try{var c=o&&o.require&&o.require("util").types;return c||i&&i.binding&&i.binding("util")}catch{}})();e.exports=l})(At,At.exports)),At.exports}var ta,Td;function Lt(){if(Td)return ta;Td=1;var e=bx(),t=lr(),r=ea(),n=r&&r.isTypedArray,o=n?t(n):e;return ta=o,ta}var ra,jd;function Id(){if(jd)return ra;jd=1;var e=gx(),t=Ot(),r=Re(),n=xt(),o=ir(),s=Lt(),i=Object.prototype,l=i.hasOwnProperty;function c(u,d){var p=r(u),h=!p&&t(u),f=!p&&!h&&n(u),m=!p&&!h&&!f&&s(u),y=p||h||f||m,g=y?e(u.length,String):[],b=g.length;for(var x in u)(d||l.call(u,x))&&!(y&&(x=="length"||f&&(x=="offset"||x=="parent")||m&&(x=="buffer"||x=="byteLength"||x=="byteOffset")||o(x,b)))&&g.push(x);return g}return ra=c,ra}var na,Cd;function cr(){if(Cd)return na;Cd=1;var e=Object.prototype;function t(r){var n=r&&r.constructor,o=typeof n=="function"&&n.prototype||e;return r===o}return na=t,na}var aa,Nd;function Rd(){if(Nd)return aa;Nd=1;function e(t,r){return function(n){return t(r(n))}}return aa=e,aa}var oa,Ed;function vx(){if(Ed)return oa;Ed=1;var e=Rd(),t=e(Object.keys,Object);return oa=t,oa}var sa,Pd;function ia(){if(Pd)return sa;Pd=1;var e=cr(),t=vx(),r=Object.prototype,n=r.hasOwnProperty;function o(s){if(!e(s))return t(s);var i=[];for(var l in Object(s))n.call(s,l)&&l!="constructor"&&i.push(l);return i}return sa=o,sa}var la,Od;function et(){if(Od)return la;Od=1;var e=Et(),t=Xn();function r(n){return n!=null&&t(n.length)&&!e(n)}return la=r,la}var ca,Dd;function nt(){if(Dd)return ca;Dd=1;var e=Id(),t=ia(),r=et();function n(o){return r(o)?e(o):t(o)}return ca=n,ca}var da,Ad;function kx(){if(Ad)return da;Ad=1;var e=Pt(),t=nt();function r(n,o){return n&&e(o,t(o),n)}return da=r,da}var ua,Ld;function Sx(){if(Ld)return ua;Ld=1;function e(t){var r=[];if(t!=null)for(var n in Object(t))r.push(n);return r}return ua=e,ua}var pa,Md;function _x(){if(Md)return pa;Md=1;var e=He(),t=cr(),r=Sx(),n=Object.prototype,o=n.hasOwnProperty;function s(i){if(!e(i))return r(i);var l=t(i),c=[];for(var u in i)u=="constructor"&&(l||!o.call(i,u))||c.push(u);return c}return pa=s,pa}var fa,$d;function dt(){if($d)return fa;$d=1;var e=Id(),t=_x(),r=et();function n(o){return r(o)?e(o,!0):t(o)}return fa=n,fa}var ha,qd;function wx(){if(qd)return ha;qd=1;var e=Pt(),t=dt();function r(n,o){return n&&e(o,t(o),n)}return ha=r,ha}var Mt={exports:{}};Mt.exports;var zd;function Wd(){return zd||(zd=1,(function(e,t){var r=Ke(),n=t&&!t.nodeType&&t,o=n&&!0&&e&&!e.nodeType&&e,s=o&&o.exports===n,i=s?r.Buffer:void 0,l=i?i.allocUnsafe:void 0;function c(u,d){if(d)return u.slice();var p=u.length,h=l?l(p):new u.constructor(p);return u.copy(h),h}e.exports=c})(Mt,Mt.exports)),Mt.exports}var ma,Fd;function Bd(){if(Fd)return ma;Fd=1;function e(t,r){var n=-1,o=t.length;for(r||(r=Array(o));++n<o;)r[n]=t[n];return r}return ma=e,ma}var ga,Hd;function Ud(){if(Hd)return ga;Hd=1;function e(t,r){for(var n=-1,o=t==null?0:t.length,s=0,i=[];++n<o;){var l=t[n];r(l,n,t)&&(i[s++]=l)}return i}return ga=e,ga}var ya,Jd;function Kd(){if(Jd)return ya;Jd=1;function e(){return[]}return ya=e,ya}var xa,Vd;function ba(){if(Vd)return xa;Vd=1;var e=Ud(),t=Kd(),r=Object.prototype,n=r.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(i){return i==null?[]:(i=Object(i),e(o(i),function(l){return n.call(i,l)}))}:t;return xa=s,xa}var va,Gd;function Tx(){if(Gd)return va;Gd=1;var e=Pt(),t=ba();function r(n,o){return e(n,t(n),o)}return va=r,va}var ka,Yd;function Sa(){if(Yd)return ka;Yd=1;function e(t,r){for(var n=-1,o=r.length,s=t.length;++n<o;)t[s+n]=r[n];return t}return ka=e,ka}var _a,Xd;function dr(){if(Xd)return _a;Xd=1;var e=Rd(),t=e(Object.getPrototypeOf,Object);return _a=t,_a}var wa,Zd;function Qd(){if(Zd)return wa;Zd=1;var e=Sa(),t=dr(),r=ba(),n=Kd(),o=Object.getOwnPropertySymbols,s=o?function(i){for(var l=[];i;)e(l,r(i)),i=t(i);return l}:n;return wa=s,wa}var Ta,eu;function jx(){if(eu)return Ta;eu=1;var e=Pt(),t=Qd();function r(n,o){return e(n,t(n),o)}return Ta=r,Ta}var ja,tu;function ru(){if(tu)return ja;tu=1;var e=Sa(),t=Re();function r(n,o,s){var i=o(n);return t(n)?i:e(i,s(n))}return ja=r,ja}var Ia,nu;function au(){if(nu)return Ia;nu=1;var e=ru(),t=ba(),r=nt();function n(o){return e(o,r,t)}return Ia=n,Ia}var Ca,ou;function Ix(){if(ou)return Ca;ou=1;var e=ru(),t=Qd(),r=dt();function n(o){return e(o,r,t)}return Ca=n,Ca}var Na,su;function Cx(){if(su)return Na;su=1;var e=ct(),t=Ke(),r=e(t,"DataView");return Na=r,Na}var Ra,iu;function Nx(){if(iu)return Ra;iu=1;var e=ct(),t=Ke(),r=e(t,"Promise");return Ra=r,Ra}var Ea,lu;function cu(){if(lu)return Ea;lu=1;var e=ct(),t=Ke(),r=e(t,"Set");return Ea=r,Ea}var Pa,du;function Rx(){if(du)return Pa;du=1;var e=ct(),t=Ke(),r=e(t,"WeakMap");return Pa=r,Pa}var Oa,uu;function bt(){if(uu)return Oa;uu=1;var e=Cx(),t=xn(),r=Nx(),n=cu(),o=Rx(),s=lt(),i=qc(),l="[object Map]",c="[object Object]",u="[object Promise]",d="[object Set]",p="[object WeakMap]",h="[object DataView]",f=i(e),m=i(t),y=i(r),g=i(n),b=i(o),x=s;return(e&&x(new e(new ArrayBuffer(1)))!=h||t&&x(new t)!=l||r&&x(r.resolve())!=u||n&&x(new n)!=d||o&&x(new o)!=p)&&(x=function(v){var k=s(v),S=k==c?v.constructor:void 0,j=S?i(S):"";if(j)switch(j){case f:return h;case m:return l;case y:return u;case g:return d;case b:return p}return k}),Oa=x,Oa}var Da,pu;function Ex(){if(pu)return Da;pu=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n){var o=n.length,s=new n.constructor(o);return o&&typeof n[0]=="string"&&t.call(n,"index")&&(s.index=n.index,s.input=n.input),s}return Da=r,Da}var Aa,fu;function hu(){if(fu)return Aa;fu=1;var e=Ke(),t=e.Uint8Array;return Aa=t,Aa}var La,mu;function Ma(){if(mu)return La;mu=1;var e=hu();function t(r){var n=new r.constructor(r.byteLength);return new e(n).set(new e(r)),n}return La=t,La}var $a,gu;function Px(){if(gu)return $a;gu=1;var e=Ma();function t(r,n){var o=n?e(r.buffer):r.buffer;return new r.constructor(o,r.byteOffset,r.byteLength)}return $a=t,$a}var qa,yu;function Ox(){if(yu)return qa;yu=1;var e=/\w*$/;function t(r){var n=new r.constructor(r.source,e.exec(r));return n.lastIndex=r.lastIndex,n}return qa=t,qa}var za,xu;function Dx(){if(xu)return za;xu=1;var e=yt(),t=e?e.prototype:void 0,r=t?t.valueOf:void 0;function n(o){return r?Object(r.call(o)):{}}return za=n,za}var Wa,bu;function vu(){if(bu)return Wa;bu=1;var e=Ma();function t(r,n){var o=n?e(r.buffer):r.buffer;return new r.constructor(o,r.byteOffset,r.length)}return Wa=t,Wa}var Fa,ku;function Ax(){if(ku)return Fa;ku=1;var e=Ma(),t=Px(),r=Ox(),n=Dx(),o=vu(),s="[object Boolean]",i="[object Date]",l="[object Map]",c="[object Number]",u="[object RegExp]",d="[object Set]",p="[object String]",h="[object Symbol]",f="[object ArrayBuffer]",m="[object DataView]",y="[object Float32Array]",g="[object Float64Array]",b="[object Int8Array]",x="[object Int16Array]",v="[object Int32Array]",k="[object Uint8Array]",S="[object Uint8ClampedArray]",j="[object Uint16Array]",w="[object Uint32Array]";function N(L,_,T){var D=L.constructor;switch(_){case f:return e(L);case s:case i:return new D(+L);case m:return t(L,T);case y:case g:case b:case x:case v:case k:case S:case j:case w:return o(L,T);case l:return new D;case c:case p:return new D(L);case u:return r(L);case d:return new D;case h:return n(L)}}return Fa=N,Fa}var Ba,Su;function _u(){if(Su)return Ba;Su=1;var e=He(),t=Object.create,r=(function(){function n(){}return function(o){if(!e(o))return{};if(t)return t(o);n.prototype=o;var s=new n;return n.prototype=void 0,s}})();return Ba=r,Ba}var Ha,wu;function Tu(){if(wu)return Ha;wu=1;var e=_u(),t=dr(),r=cr();function n(o){return typeof o.constructor=="function"&&!r(o)?e(t(o)):{}}return Ha=n,Ha}var Ua,ju;function Lx(){if(ju)return Ua;ju=1;var e=bt(),t=Xe(),r="[object Map]";function n(o){return t(o)&&e(o)==r}return Ua=n,Ua}var Ja,Iu;function Mx(){if(Iu)return Ja;Iu=1;var e=Lx(),t=lr(),r=ea(),n=r&&r.isMap,o=n?t(n):e;return Ja=o,Ja}var Ka,Cu;function $x(){if(Cu)return Ka;Cu=1;var e=bt(),t=Xe(),r="[object Set]";function n(o){return t(o)&&e(o)==r}return Ka=n,Ka}var Va,Nu;function qx(){if(Nu)return Va;Nu=1;var e=$x(),t=lr(),r=ea(),n=r&&r.isSet,o=n?t(n):e;return Va=o,Va}var Ga,Ru;function Eu(){if(Ru)return Ga;Ru=1;var e=ar(),t=$n(),r=sr(),n=kx(),o=wx(),s=Wd(),i=Bd(),l=Tx(),c=jx(),u=au(),d=Ix(),p=bt(),h=Ex(),f=Ax(),m=Tu(),y=Re(),g=xt(),b=Mx(),x=He(),v=qx(),k=nt(),S=dt(),j=1,w=2,N=4,L="[object Arguments]",_="[object Array]",T="[object Boolean]",D="[object Date]",R="[object Error]",A="[object Function]",E="[object GeneratorFunction]",P="[object Map]",z="[object Number]",J="[object Object]",B="[object RegExp]",$="[object Set]",C="[object String]",G="[object Symbol]",Q="[object WeakMap]",M="[object ArrayBuffer]",F="[object DataView]",H="[object Float32Array]",U="[object Float64Array]",ee="[object Int8Array]",ce="[object Int16Array]",de="[object Int32Array]",Te="[object Uint8Array]",Ce="[object Uint8ClampedArray]",W="[object Uint16Array]",xe="[object Uint32Array]",re={};re[L]=re[_]=re[M]=re[F]=re[T]=re[D]=re[H]=re[U]=re[ee]=re[ce]=re[de]=re[P]=re[z]=re[J]=re[B]=re[$]=re[C]=re[G]=re[Te]=re[Ce]=re[W]=re[xe]=!0,re[R]=re[A]=re[Q]=!1;function me(ae,je,pe,ge,We,_e){var be,se=je&j,ve=je&w,qe=je&N;if(pe&&(be=We?pe(ae,ge,We,_e):pe(ae)),be!==void 0)return be;if(!x(ae))return ae;var V=y(ae);if(V){if(be=h(ae),!se)return i(ae,be)}else{var X=p(ae),ne=X==A||X==E;if(g(ae))return s(ae,se);if(X==J||X==L||ne&&!We){if(be=ve||ne?{}:m(ae),!se)return ve?c(ae,o(be,ae)):l(ae,n(be,ae))}else{if(!re[X])return We?ae:{};be=f(ae,X,se)}}_e||(_e=new e);var fe=_e.get(ae);if(fe)return fe;_e.set(ae,be),v(ae)?ae.forEach(function(O){be.add(me(O,je,pe,O,ae,_e))}):b(ae)&&ae.forEach(function(O,K){be.set(K,me(O,je,pe,K,ae,_e))});var Y=qe?ve?d:u:ve?S:k,ue=V?void 0:Y(ae);return t(ue||ae,function(O,K){ue&&(K=O,O=ae[K]),r(be,K,me(O,je,pe,K,ae,_e))}),be}return Ga=me,Ga}var Ya,Pu;function zx(){if(Pu)return Ya;Pu=1;var e=Eu(),t=4;function r(n){return e(n,t)}return Ya=r,Ya}var Xa,Ou;function Za(){if(Ou)return Xa;Ou=1;function e(t){return function(){return t}}return Xa=e,Xa}var Qa,Du;function Wx(){if(Du)return Qa;Du=1;function e(t){return function(r,n,o){for(var s=-1,i=Object(r),l=o(r),c=l.length;c--;){var u=l[t?c:++s];if(n(i[u],u,i)===!1)break}return r}}return Qa=e,Qa}var eo,Au;function to(){if(Au)return eo;Au=1;var e=Wx(),t=e();return eo=t,eo}var ro,Lu;function no(){if(Lu)return ro;Lu=1;var e=to(),t=nt();function r(n,o){return n&&e(n,o,t)}return ro=r,ro}var ao,Mu;function Fx(){if(Mu)return ao;Mu=1;var e=et();function t(r,n){return function(o,s){if(o==null)return o;if(!e(o))return r(o,s);for(var i=o.length,l=n?i:-1,c=Object(o);(n?l--:++l<i)&&s(c[l],l,c)!==!1;);return o}}return ao=t,ao}var oo,$u;function ur(){if($u)return oo;$u=1;var e=no(),t=Fx(),r=t(e);return oo=r,oo}var so,qu;function ut(){if(qu)return so;qu=1;function e(t){return t}return so=e,so}var io,zu;function Wu(){if(zu)return io;zu=1;var e=ut();function t(r){return typeof r=="function"?r:e}return io=t,io}var lo,Fu;function Bu(){if(Fu)return lo;Fu=1;var e=$n(),t=ur(),r=Wu(),n=Re();function o(s,i){var l=n(s)?e:t;return l(s,r(i))}return lo=o,lo}var co,Hu;function Uu(){return Hu||(Hu=1,co=Bu()),co}var uo,Ju;function Bx(){if(Ju)return uo;Ju=1;var e=ur();function t(r,n){var o=[];return e(r,function(s,i,l){n(s,i,l)&&o.push(s)}),o}return uo=t,uo}var po,Ku;function Hx(){if(Ku)return po;Ku=1;var e="__lodash_hash_undefined__";function t(r){return this.__data__.set(r,e),this}return po=t,po}var fo,Vu;function Ux(){if(Vu)return fo;Vu=1;function e(t){return this.__data__.has(t)}return fo=e,fo}var ho,Gu;function Yu(){if(Gu)return ho;Gu=1;var e=Dn(),t=Hx(),r=Ux();function n(o){var s=-1,i=o==null?0:o.length;for(this.__data__=new e;++s<i;)this.add(o[s])}return n.prototype.add=n.prototype.push=t,n.prototype.has=r,ho=n,ho}var mo,Xu;function Jx(){if(Xu)return mo;Xu=1;function e(t,r){for(var n=-1,o=t==null?0:t.length;++n<o;)if(r(t[n],n,t))return!0;return!1}return mo=e,mo}var go,Zu;function Qu(){if(Zu)return go;Zu=1;function e(t,r){return t.has(r)}return go=e,go}var yo,ep;function tp(){if(ep)return yo;ep=1;var e=Yu(),t=Jx(),r=Qu(),n=1,o=2;function s(i,l,c,u,d,p){var h=c&n,f=i.length,m=l.length;if(f!=m&&!(h&&m>f))return!1;var y=p.get(i),g=p.get(l);if(y&&g)return y==l&&g==i;var b=-1,x=!0,v=c&o?new e:void 0;for(p.set(i,l),p.set(l,i);++b<f;){var k=i[b],S=l[b];if(u)var j=h?u(S,k,b,l,i,p):u(k,S,b,i,l,p);if(j!==void 0){if(j)continue;x=!1;break}if(v){if(!t(l,function(w,N){if(!r(v,N)&&(k===w||d(k,w,c,u,p)))return v.push(N)})){x=!1;break}}else if(!(k===S||d(k,S,c,u,p))){x=!1;break}}return p.delete(i),p.delete(l),x}return yo=s,yo}var xo,rp;function Kx(){if(rp)return xo;rp=1;function e(t){var r=-1,n=Array(t.size);return t.forEach(function(o,s){n[++r]=[s,o]}),n}return xo=e,xo}var bo,np;function vo(){if(np)return bo;np=1;function e(t){var r=-1,n=Array(t.size);return t.forEach(function(o){n[++r]=o}),n}return bo=e,bo}var ko,ap;function Vx(){if(ap)return ko;ap=1;var e=yt(),t=hu(),r=gt(),n=tp(),o=Kx(),s=vo(),i=1,l=2,c="[object Boolean]",u="[object Date]",d="[object Error]",p="[object Map]",h="[object Number]",f="[object RegExp]",m="[object Set]",y="[object String]",g="[object Symbol]",b="[object ArrayBuffer]",x="[object DataView]",v=e?e.prototype:void 0,k=v?v.valueOf:void 0;function S(j,w,N,L,_,T,D){switch(N){case x:if(j.byteLength!=w.byteLength||j.byteOffset!=w.byteOffset)return!1;j=j.buffer,w=w.buffer;case b:return!(j.byteLength!=w.byteLength||!T(new t(j),new t(w)));case c:case u:case h:return r(+j,+w);case d:return j.name==w.name&&j.message==w.message;case f:case y:return j==w+"";case p:var R=o;case m:var A=L&i;if(R||(R=s),j.size!=w.size&&!A)return!1;var E=D.get(j);if(E)return E==w;L|=l,D.set(j,w);var P=n(R(j),R(w),L,_,T,D);return D.delete(j),P;case g:if(k)return k.call(j)==k.call(w)}return!1}return ko=S,ko}var So,op;function Gx(){if(op)return So;op=1;var e=au(),t=1,r=Object.prototype,n=r.hasOwnProperty;function o(s,i,l,c,u,d){var p=l&t,h=e(s),f=h.length,m=e(i),y=m.length;if(f!=y&&!p)return!1;for(var g=f;g--;){var b=h[g];if(!(p?b in i:n.call(i,b)))return!1}var x=d.get(s),v=d.get(i);if(x&&v)return x==i&&v==s;var k=!0;d.set(s,i),d.set(i,s);for(var S=p;++g<f;){b=h[g];var j=s[b],w=i[b];if(c)var N=p?c(w,j,b,i,s,d):c(j,w,b,s,i,d);if(!(N===void 0?j===w||u(j,w,l,c,d):N)){k=!1;break}S||(S=b=="constructor")}if(k&&!S){var L=s.constructor,_=i.constructor;L!=_&&"constructor"in s&&"constructor"in i&&!(typeof L=="function"&&L instanceof L&&typeof _=="function"&&_ instanceof _)&&(k=!1)}return d.delete(s),d.delete(i),k}return So=o,So}var _o,sp;function Yx(){if(sp)return _o;sp=1;var e=ar(),t=tp(),r=Vx(),n=Gx(),o=bt(),s=Re(),i=xt(),l=Lt(),c=1,u="[object Arguments]",d="[object Array]",p="[object Object]",h=Object.prototype,f=h.hasOwnProperty;function m(y,g,b,x,v,k){var S=s(y),j=s(g),w=S?d:o(y),N=j?d:o(g);w=w==u?p:w,N=N==u?p:N;var L=w==p,_=N==p,T=w==N;if(T&&i(y)){if(!i(g))return!1;S=!0,L=!1}if(T&&!L)return k||(k=new e),S||l(y)?t(y,g,b,x,v,k):r(y,g,w,b,x,v,k);if(!(b&c)){var D=L&&f.call(y,"__wrapped__"),R=_&&f.call(g,"__wrapped__");if(D||R){var A=D?y.value():y,E=R?g.value():g;return k||(k=new e),v(A,E,b,x,k)}}return T?(k||(k=new e),n(y,g,b,x,v,k)):!1}return _o=m,_o}var wo,ip;function lp(){if(ip)return wo;ip=1;var e=Yx(),t=Xe();function r(n,o,s,i,l){return n===o?!0:n==null||o==null||!t(n)&&!t(o)?n!==n&&o!==o:e(n,o,s,i,r,l)}return wo=r,wo}var To,cp;function Xx(){if(cp)return To;cp=1;var e=ar(),t=lp(),r=1,n=2;function o(s,i,l,c){var u=l.length,d=u,p=!c;if(s==null)return!d;for(s=Object(s);u--;){var h=l[u];if(p&&h[2]?h[1]!==s[h[0]]:!(h[0]in s))return!1}for(;++u<d;){h=l[u];var f=h[0],m=s[f],y=h[1];if(p&&h[2]){if(m===void 0&&!(f in s))return!1}else{var g=new e;if(c)var b=c(m,y,f,s,i,g);if(!(b===void 0?t(y,m,r|n,c,g):b))return!1}}return!0}return To=o,To}var jo,dp;function up(){if(dp)return jo;dp=1;var e=He();function t(r){return r===r&&!e(r)}return jo=t,jo}var Io,pp;function Zx(){if(pp)return Io;pp=1;var e=up(),t=nt();function r(n){for(var o=t(n),s=o.length;s--;){var i=o[s],l=n[i];o[s]=[i,l,e(l)]}return o}return Io=r,Io}var Co,fp;function hp(){if(fp)return Co;fp=1;function e(t,r){return function(n){return n==null?!1:n[t]===r&&(r!==void 0||t in Object(n))}}return Co=e,Co}var No,mp;function Qx(){if(mp)return No;mp=1;var e=Xx(),t=Zx(),r=hp();function n(o){var s=t(o);return s.length==1&&s[0][2]?r(s[0][0],s[0][1]):function(i){return i===o||e(i,o,s)}}return No=n,No}var Ro,gp;function vt(){if(gp)return Ro;gp=1;var e=lt(),t=Xe(),r="[object Symbol]";function n(o){return typeof o=="symbol"||t(o)&&e(o)==r}return Ro=n,Ro}var Eo,yp;function Po(){if(yp)return Eo;yp=1;var e=Re(),t=vt(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function o(s,i){if(e(s))return!1;var l=typeof s;return l=="number"||l=="symbol"||l=="boolean"||s==null||t(s)?!0:n.test(s)||!r.test(s)||i!=null&&s in Object(i)}return Eo=o,Eo}var Oo,xp;function eb(){if(xp)return Oo;xp=1;var e=Dn(),t="Expected a function";function r(n,o){if(typeof n!="function"||o!=null&&typeof o!="function")throw new TypeError(t);var s=function(){var i=arguments,l=o?o.apply(this,i):i[0],c=s.cache;if(c.has(l))return c.get(l);var u=n.apply(this,i);return s.cache=c.set(l,u)||c,u};return s.cache=new(r.Cache||e),s}return r.Cache=e,Oo=r,Oo}var Do,bp;function tb(){if(bp)return Do;bp=1;var e=eb(),t=500;function r(n){var o=e(n,function(i){return s.size===t&&s.clear(),i}),s=o.cache;return o}return Do=r,Do}var Ao,vp;function rb(){if(vp)return Ao;vp=1;var e=tb(),t=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=e(function(o){var s=[];return o.charCodeAt(0)===46&&s.push(""),o.replace(t,function(i,l,c,u){s.push(c?u.replace(r,"$1"):l||i)}),s});return Ao=n,Ao}var Lo,kp;function pr(){if(kp)return Lo;kp=1;function e(t,r){for(var n=-1,o=t==null?0:t.length,s=Array(o);++n<o;)s[n]=r(t[n],n,t);return s}return Lo=e,Lo}var Mo,Sp;function nb(){if(Sp)return Mo;Sp=1;var e=yt(),t=pr(),r=Re(),n=vt(),o=e?e.prototype:void 0,s=o?o.toString:void 0;function i(l){if(typeof l=="string")return l;if(r(l))return t(l,i)+"";if(n(l))return s?s.call(l):"";var c=l+"";return c=="0"&&1/l==-1/0?"-0":c}return Mo=i,Mo}var $o,_p;function wp(){if(_p)return $o;_p=1;var e=nb();function t(r){return r==null?"":e(r)}return $o=t,$o}var qo,Tp;function fr(){if(Tp)return qo;Tp=1;var e=Re(),t=Po(),r=rb(),n=wp();function o(s,i){return e(s)?s:t(s,i)?[s]:r(n(s))}return qo=o,qo}var zo,jp;function $t(){if(jp)return zo;jp=1;var e=vt();function t(r){if(typeof r=="string"||e(r))return r;var n=r+"";return n=="0"&&1/r==-1/0?"-0":n}return zo=t,zo}var Wo,Ip;function hr(){if(Ip)return Wo;Ip=1;var e=fr(),t=$t();function r(n,o){o=e(o,n);for(var s=0,i=o.length;n!=null&&s<i;)n=n[t(o[s++])];return s&&s==i?n:void 0}return Wo=r,Wo}var Fo,Cp;function ab(){if(Cp)return Fo;Cp=1;var e=hr();function t(r,n,o){var s=r==null?void 0:e(r,n);return s===void 0?o:s}return Fo=t,Fo}var Bo,Np;function ob(){if(Np)return Bo;Np=1;function e(t,r){return t!=null&&r in Object(t)}return Bo=e,Bo}var Ho,Rp;function Ep(){if(Rp)return Ho;Rp=1;var e=fr(),t=Ot(),r=Re(),n=ir(),o=Xn(),s=$t();function i(l,c,u){c=e(c,l);for(var d=-1,p=c.length,h=!1;++d<p;){var f=s(c[d]);if(!(h=l!=null&&u(l,f)))break;l=l[f]}return h||++d!=p?h:(p=l==null?0:l.length,!!p&&o(p)&&n(f,p)&&(r(l)||t(l)))}return Ho=i,Ho}var Uo,Pp;function Op(){if(Pp)return Uo;Pp=1;var e=ob(),t=Ep();function r(n,o){return n!=null&&t(n,o,e)}return Uo=r,Uo}var Jo,Dp;function sb(){if(Dp)return Jo;Dp=1;var e=lp(),t=ab(),r=Op(),n=Po(),o=up(),s=hp(),i=$t(),l=1,c=2;function u(d,p){return n(d)&&o(p)?s(i(d),p):function(h){var f=t(h,d);return f===void 0&&f===p?r(h,d):e(p,f,l|c)}}return Jo=u,Jo}var Ko,Ap;function Lp(){if(Ap)return Ko;Ap=1;function e(t){return function(r){return r?.[t]}}return Ko=e,Ko}var Vo,Mp;function ib(){if(Mp)return Vo;Mp=1;var e=hr();function t(r){return function(n){return e(n,r)}}return Vo=t,Vo}var Go,$p;function lb(){if($p)return Go;$p=1;var e=Lp(),t=ib(),r=Po(),n=$t();function o(s){return r(s)?e(n(s)):t(s)}return Go=o,Go}var Yo,qp;function tt(){if(qp)return Yo;qp=1;var e=Qx(),t=sb(),r=ut(),n=Re(),o=lb();function s(i){return typeof i=="function"?i:i==null?r:typeof i=="object"?n(i)?t(i[0],i[1]):e(i):o(i)}return Yo=s,Yo}var Xo,zp;function Wp(){if(zp)return Xo;zp=1;var e=Ud(),t=Bx(),r=tt(),n=Re();function o(s,i){var l=n(s)?e:t;return l(s,r(i,3))}return Xo=o,Xo}var Zo,Fp;function cb(){if(Fp)return Zo;Fp=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n,o){return n!=null&&t.call(n,o)}return Zo=r,Zo}var Qo,Bp;function Hp(){if(Bp)return Qo;Bp=1;var e=cb(),t=Ep();function r(n,o){return n!=null&&t(n,o,e)}return Qo=r,Qo}var es,Up;function db(){if(Up)return es;Up=1;var e=ia(),t=bt(),r=Ot(),n=Re(),o=et(),s=xt(),i=cr(),l=Lt(),c="[object Map]",u="[object Set]",d=Object.prototype,p=d.hasOwnProperty;function h(f){if(f==null)return!0;if(o(f)&&(n(f)||typeof f=="string"||typeof f.splice=="function"||s(f)||l(f)||r(f)))return!f.length;var m=t(f);if(m==c||m==u)return!f.size;if(i(f))return!e(f).length;for(var y in f)if(p.call(f,y))return!1;return!0}return es=h,es}var ts,Jp;function Kp(){if(Jp)return ts;Jp=1;function e(t){return t===void 0}return ts=e,ts}var rs,Vp;function Gp(){if(Vp)return rs;Vp=1;var e=ur(),t=et();function r(n,o){var s=-1,i=t(n)?Array(n.length):[];return e(n,function(l,c,u){i[++s]=o(l,c,u)}),i}return rs=r,rs}var ns,Yp;function Xp(){if(Yp)return ns;Yp=1;var e=pr(),t=tt(),r=Gp(),n=Re();function o(s,i){var l=n(s)?e:r;return l(s,t(i,3))}return ns=o,ns}var as,Zp;function ub(){if(Zp)return as;Zp=1;function e(t,r,n,o){var s=-1,i=t==null?0:t.length;for(o&&i&&(n=t[++s]);++s<i;)n=r(n,t[s],s,t);return n}return as=e,as}var os,Qp;function pb(){if(Qp)return os;Qp=1;function e(t,r,n,o,s){return s(t,function(i,l,c){n=o?(o=!1,i):r(n,i,l,c)}),n}return os=e,os}var ss,ef;function tf(){if(ef)return ss;ef=1;var e=ub(),t=ur(),r=tt(),n=pb(),o=Re();function s(i,l,c){var u=o(i)?e:n,d=arguments.length<3;return u(i,r(l,4),c,d,t)}return ss=s,ss}var is,rf;function fb(){if(rf)return is;rf=1;var e=lt(),t=Re(),r=Xe(),n="[object String]";function o(s){return typeof s=="string"||!t(s)&&r(s)&&e(s)==n}return is=o,is}var ls,nf;function hb(){if(nf)return ls;nf=1;var e=Lp(),t=e("length");return ls=t,ls}var cs,af;function mb(){if(af)return cs;af=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",o=t+r+n,s="\\ufe0e\\ufe0f",i="\\u200d",l=RegExp("["+i+e+o+s+"]");function c(u){return l.test(u)}return cs=c,cs}var ds,of;function gb(){if(of)return ds;of=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",o=t+r+n,s="\\ufe0e\\ufe0f",i="["+e+"]",l="["+o+"]",c="\\ud83c[\\udffb-\\udfff]",u="(?:"+l+"|"+c+")",d="[^"+e+"]",p="(?:\\ud83c[\\udde6-\\uddff]){2}",h="[\\ud800-\\udbff][\\udc00-\\udfff]",f="\\u200d",m=u+"?",y="["+s+"]?",g="(?:"+f+"(?:"+[d,p,h].join("|")+")"+y+m+")*",b=y+m+g,x="(?:"+[d+l+"?",l,p,h,i].join("|")+")",v=RegExp(c+"(?="+c+")|"+x+b,"g");function k(S){for(var j=v.lastIndex=0;v.test(S);)++j;return j}return ds=k,ds}var us,sf;function yb(){if(sf)return us;sf=1;var e=hb(),t=mb(),r=gb();function n(o){return t(o)?r(o):e(o)}return us=n,us}var ps,lf;function xb(){if(lf)return ps;lf=1;var e=ia(),t=bt(),r=et(),n=fb(),o=yb(),s="[object Map]",i="[object Set]";function l(c){if(c==null)return 0;if(r(c))return n(c)?o(c):c.length;var u=t(c);return u==s||u==i?c.size:e(c).length}return ps=l,ps}var fs,cf;function bb(){if(cf)return fs;cf=1;var e=$n(),t=_u(),r=no(),n=tt(),o=dr(),s=Re(),i=xt(),l=Et(),c=He(),u=Lt();function d(p,h,f){var m=s(p),y=m||i(p)||u(p);if(h=n(h,4),f==null){var g=p&&p.constructor;y?f=m?new g:[]:c(p)?f=l(g)?t(o(p)):{}:f={}}return(y?e:r)(p,function(b,x,v){return h(f,b,x,v)}),f}return fs=d,fs}var hs,df;function vb(){if(df)return hs;df=1;var e=yt(),t=Ot(),r=Re(),n=e?e.isConcatSpreadable:void 0;function o(s){return r(s)||t(s)||!!(n&&s&&s[n])}return hs=o,hs}var ms,uf;function gs(){if(uf)return ms;uf=1;var e=Sa(),t=vb();function r(n,o,s,i,l){var c=-1,u=n.length;for(s||(s=t),l||(l=[]);++c<u;){var d=n[c];o>0&&s(d)?o>1?r(d,o-1,s,i,l):e(l,d):i||(l[l.length]=d)}return l}return ms=r,ms}var ys,pf;function kb(){if(pf)return ys;pf=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return ys=e,ys}var xs,ff;function hf(){if(ff)return xs;ff=1;var e=kb(),t=Math.max;function r(n,o,s){return o=t(o===void 0?n.length-1:o,0),function(){for(var i=arguments,l=-1,c=t(i.length-o,0),u=Array(c);++l<c;)u[l]=i[o+l];l=-1;for(var d=Array(o+1);++l<o;)d[l]=i[l];return d[o]=s(u),e(n,this,d)}}return xs=r,xs}var bs,mf;function Sb(){if(mf)return bs;mf=1;var e=Za(),t=cd(),r=ut(),n=t?function(o,s){return t(o,"toString",{configurable:!0,enumerable:!1,value:e(s),writable:!0})}:r;return bs=n,bs}var vs,gf;function _b(){if(gf)return vs;gf=1;var e=800,t=16,r=Date.now;function n(o){var s=0,i=0;return function(){var l=r(),c=t-(l-i);if(i=l,c>0){if(++s>=e)return arguments[0]}else s=0;return o.apply(void 0,arguments)}}return vs=n,vs}var ks,yf;function xf(){if(yf)return ks;yf=1;var e=Sb(),t=_b(),r=t(e);return ks=r,ks}var Ss,bf;function mr(){if(bf)return Ss;bf=1;var e=ut(),t=hf(),r=xf();function n(o,s){return r(t(o,s,e),o+"")}return Ss=n,Ss}var _s,vf;function kf(){if(vf)return _s;vf=1;function e(t,r,n,o){for(var s=t.length,i=n+(o?1:-1);o?i--:++i<s;)if(r(t[i],i,t))return i;return-1}return _s=e,_s}var ws,Sf;function wb(){if(Sf)return ws;Sf=1;function e(t){return t!==t}return ws=e,ws}var Ts,_f;function Tb(){if(_f)return Ts;_f=1;function e(t,r,n){for(var o=n-1,s=t.length;++o<s;)if(t[o]===r)return o;return-1}return Ts=e,Ts}var js,wf;function jb(){if(wf)return js;wf=1;var e=kf(),t=wb(),r=Tb();function n(o,s,i){return s===s?r(o,s,i):e(o,t,i)}return js=n,js}var Is,Tf;function Ib(){if(Tf)return Is;Tf=1;var e=jb();function t(r,n){var o=r==null?0:r.length;return!!o&&e(r,n,0)>-1}return Is=t,Is}var Cs,jf;function Cb(){if(jf)return Cs;jf=1;function e(t,r,n){for(var o=-1,s=t==null?0:t.length;++o<s;)if(n(r,t[o]))return!0;return!1}return Cs=e,Cs}var Ns,If;function Nb(){if(If)return Ns;If=1;function e(){}return Ns=e,Ns}var Rs,Cf;function Rb(){if(Cf)return Rs;Cf=1;var e=cu(),t=Nb(),r=vo(),n=1/0,o=e&&1/r(new e([,-0]))[1]==n?function(s){return new e(s)}:t;return Rs=o,Rs}var Es,Nf;function Eb(){if(Nf)return Es;Nf=1;var e=Yu(),t=Ib(),r=Cb(),n=Qu(),o=Rb(),s=vo(),i=200;function l(c,u,d){var p=-1,h=t,f=c.length,m=!0,y=[],g=y;if(d)m=!1,h=r;else if(f>=i){var b=u?null:o(c);if(b)return s(b);m=!1,h=n,g=new e}else g=u?[]:y;e:for(;++p<f;){var x=c[p],v=u?u(x):x;if(x=d||x!==0?x:0,m&&v===v){for(var k=g.length;k--;)if(g[k]===v)continue e;u&&g.push(v),y.push(x)}else h(g,v,d)||(g!==y&&g.push(v),y.push(x))}return y}return Es=l,Es}var Ps,Rf;function Ef(){if(Rf)return Ps;Rf=1;var e=et(),t=Xe();function r(n){return t(n)&&e(n)}return Ps=r,Ps}var Os,Pf;function Pb(){if(Pf)return Os;Pf=1;var e=gs(),t=mr(),r=Eb(),n=Ef(),o=t(function(s){return r(e(s,1,n,!0))});return Os=o,Os}var Ds,Of;function Ob(){if(Of)return Ds;Of=1;var e=pr();function t(r,n){return e(n,function(o){return r[o]})}return Ds=t,Ds}var As,Df;function Af(){if(Df)return As;Df=1;var e=Ob(),t=nt();function r(n){return n==null?[]:e(n,t(n))}return As=r,As}var Ls,Lf;function Ue(){if(Lf)return Ls;Lf=1;var e;if(typeof Br=="function")try{e={clone:zx(),constant:Za(),each:Uu(),filter:Wp(),has:Hp(),isArray:Re(),isEmpty:db(),isFunction:Et(),isUndefined:Kp(),keys:nt(),map:Xp(),reduce:tf(),size:xb(),transform:bb(),union:Pb(),values:Af()}}catch{}return e||(e=window._),Ls=e,Ls}var Ms,Mf;function $s(){if(Mf)return Ms;Mf=1;var e=Ue();Ms=o;var t="\0",r="\0",n="";function o(d){this._isDirected=e.has(d,"directed")?d.directed:!0,this._isMultigraph=e.has(d,"multigraph")?d.multigraph:!1,this._isCompound=e.has(d,"compound")?d.compound:!1,this._label=void 0,this._defaultNodeLabelFn=e.constant(void 0),this._defaultEdgeLabelFn=e.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[r]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}o.prototype._nodeCount=0,o.prototype._edgeCount=0,o.prototype.isDirected=function(){return this._isDirected},o.prototype.isMultigraph=function(){return this._isMultigraph},o.prototype.isCompound=function(){return this._isCompound},o.prototype.setGraph=function(d){return this._label=d,this},o.prototype.graph=function(){return this._label},o.prototype.setDefaultNodeLabel=function(d){return e.isFunction(d)||(d=e.constant(d)),this._defaultNodeLabelFn=d,this},o.prototype.nodeCount=function(){return this._nodeCount},o.prototype.nodes=function(){return e.keys(this._nodes)},o.prototype.sources=function(){var d=this;return e.filter(this.nodes(),function(p){return e.isEmpty(d._in[p])})},o.prototype.sinks=function(){var d=this;return e.filter(this.nodes(),function(p){return e.isEmpty(d._out[p])})},o.prototype.setNodes=function(d,p){var h=arguments,f=this;return e.each(d,function(m){h.length>1?f.setNode(m,p):f.setNode(m)}),this},o.prototype.setNode=function(d,p){return e.has(this._nodes,d)?(arguments.length>1&&(this._nodes[d]=p),this):(this._nodes[d]=arguments.length>1?p:this._defaultNodeLabelFn(d),this._isCompound&&(this._parent[d]=r,this._children[d]={},this._children[r][d]=!0),this._in[d]={},this._preds[d]={},this._out[d]={},this._sucs[d]={},++this._nodeCount,this)},o.prototype.node=function(d){return this._nodes[d]},o.prototype.hasNode=function(d){return e.has(this._nodes,d)},o.prototype.removeNode=function(d){var p=this;if(e.has(this._nodes,d)){var h=function(f){p.removeEdge(p._edgeObjs[f])};delete this._nodes[d],this._isCompound&&(this._removeFromParentsChildList(d),delete this._parent[d],e.each(this.children(d),function(f){p.setParent(f)}),delete this._children[d]),e.each(e.keys(this._in[d]),h),delete this._in[d],delete this._preds[d],e.each(e.keys(this._out[d]),h),delete this._out[d],delete this._sucs[d],--this._nodeCount}return this},o.prototype.setParent=function(d,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(e.isUndefined(p))p=r;else{p+="";for(var h=p;!e.isUndefined(h);h=this.parent(h))if(h===d)throw new Error("Setting "+p+" as parent of "+d+" would create a cycle");this.setNode(p)}return this.setNode(d),this._removeFromParentsChildList(d),this._parent[d]=p,this._children[p][d]=!0,this},o.prototype._removeFromParentsChildList=function(d){delete this._children[this._parent[d]][d]},o.prototype.parent=function(d){if(this._isCompound){var p=this._parent[d];if(p!==r)return p}},o.prototype.children=function(d){if(e.isUndefined(d)&&(d=r),this._isCompound){var p=this._children[d];if(p)return e.keys(p)}else{if(d===r)return this.nodes();if(this.hasNode(d))return[]}},o.prototype.predecessors=function(d){var p=this._preds[d];if(p)return e.keys(p)},o.prototype.successors=function(d){var p=this._sucs[d];if(p)return e.keys(p)},o.prototype.neighbors=function(d){var p=this.predecessors(d);if(p)return e.union(p,this.successors(d))},o.prototype.isLeaf=function(d){var p;return this.isDirected()?p=this.successors(d):p=this.neighbors(d),p.length===0},o.prototype.filterNodes=function(d){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var h=this;e.each(this._nodes,function(y,g){d(g)&&p.setNode(g,y)}),e.each(this._edgeObjs,function(y){p.hasNode(y.v)&&p.hasNode(y.w)&&p.setEdge(y,h.edge(y))});var f={};function m(y){var g=h.parent(y);return g===void 0||p.hasNode(g)?(f[y]=g,g):g in f?f[g]:m(g)}return this._isCompound&&e.each(p.nodes(),function(y){p.setParent(y,m(y))}),p},o.prototype.setDefaultEdgeLabel=function(d){return e.isFunction(d)||(d=e.constant(d)),this._defaultEdgeLabelFn=d,this},o.prototype.edgeCount=function(){return this._edgeCount},o.prototype.edges=function(){return e.values(this._edgeObjs)},o.prototype.setPath=function(d,p){var h=this,f=arguments;return e.reduce(d,function(m,y){return f.length>1?h.setEdge(m,y,p):h.setEdge(m,y),y}),this},o.prototype.setEdge=function(){var d,p,h,f,m=!1,y=arguments[0];typeof y=="object"&&y!==null&&"v"in y?(d=y.v,p=y.w,h=y.name,arguments.length===2&&(f=arguments[1],m=!0)):(d=y,p=arguments[1],h=arguments[3],arguments.length>2&&(f=arguments[2],m=!0)),d=""+d,p=""+p,e.isUndefined(h)||(h=""+h);var g=l(this._isDirected,d,p,h);if(e.has(this._edgeLabels,g))return m&&(this._edgeLabels[g]=f),this;if(!e.isUndefined(h)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(d),this.setNode(p),this._edgeLabels[g]=m?f:this._defaultEdgeLabelFn(d,p,h);var b=c(this._isDirected,d,p,h);return d=b.v,p=b.w,Object.freeze(b),this._edgeObjs[g]=b,s(this._preds[p],d),s(this._sucs[d],p),this._in[p][g]=b,this._out[d][g]=b,this._edgeCount++,this},o.prototype.edge=function(d,p,h){var f=arguments.length===1?u(this._isDirected,arguments[0]):l(this._isDirected,d,p,h);return this._edgeLabels[f]},o.prototype.hasEdge=function(d,p,h){var f=arguments.length===1?u(this._isDirected,arguments[0]):l(this._isDirected,d,p,h);return e.has(this._edgeLabels,f)},o.prototype.removeEdge=function(d,p,h){var f=arguments.length===1?u(this._isDirected,arguments[0]):l(this._isDirected,d,p,h),m=this._edgeObjs[f];return m&&(d=m.v,p=m.w,delete this._edgeLabels[f],delete this._edgeObjs[f],i(this._preds[p],d),i(this._sucs[d],p),delete this._in[p][f],delete this._out[d][f],this._edgeCount--),this},o.prototype.inEdges=function(d,p){var h=this._in[d];if(h){var f=e.values(h);return p?e.filter(f,function(m){return m.v===p}):f}},o.prototype.outEdges=function(d,p){var h=this._out[d];if(h){var f=e.values(h);return p?e.filter(f,function(m){return m.w===p}):f}},o.prototype.nodeEdges=function(d,p){var h=this.inEdges(d,p);if(h)return h.concat(this.outEdges(d,p))};function s(d,p){d[p]?d[p]++:d[p]=1}function i(d,p){--d[p]||delete d[p]}function l(d,p,h,f){var m=""+p,y=""+h;if(!d&&m>y){var g=m;m=y,y=g}return m+n+y+n+(e.isUndefined(f)?t:f)}function c(d,p,h,f){var m=""+p,y=""+h;if(!d&&m>y){var g=m;m=y,y=g}var b={v:m,w:y};return f&&(b.name=f),b}function u(d,p){return l(d,p.v,p.w,p.name)}return Ms}var qs,$f;function Db(){return $f||($f=1,qs="2.1.8"),qs}var zs,qf;function Ab(){return qf||(qf=1,zs={Graph:$s(),version:Db()}),zs}var Ws,zf;function Lb(){if(zf)return Ws;zf=1;var e=Ue(),t=$s();Ws={write:r,read:s};function r(i){var l={options:{directed:i.isDirected(),multigraph:i.isMultigraph(),compound:i.isCompound()},nodes:n(i),edges:o(i)};return e.isUndefined(i.graph())||(l.value=e.clone(i.graph())),l}function n(i){return e.map(i.nodes(),function(l){var c=i.node(l),u=i.parent(l),d={v:l};return e.isUndefined(c)||(d.value=c),e.isUndefined(u)||(d.parent=u),d})}function o(i){return e.map(i.edges(),function(l){var c=i.edge(l),u={v:l.v,w:l.w};return e.isUndefined(l.name)||(u.name=l.name),e.isUndefined(c)||(u.value=c),u})}function s(i){var l=new t(i.options).setGraph(i.value);return e.each(i.nodes,function(c){l.setNode(c.v,c.value),c.parent&&l.setParent(c.v,c.parent)}),e.each(i.edges,function(c){l.setEdge({v:c.v,w:c.w,name:c.name},c.value)}),l}return Ws}var Fs,Wf;function Mb(){if(Wf)return Fs;Wf=1;var e=Ue();Fs=t;function t(r){var n={},o=[],s;function i(l){e.has(n,l)||(n[l]=!0,s.push(l),e.each(r.successors(l),i),e.each(r.predecessors(l),i))}return e.each(r.nodes(),function(l){s=[],i(l),s.length&&o.push(s)}),o}return Fs}var Bs,Ff;function Bf(){if(Ff)return Bs;Ff=1;var e=Ue();Bs=t;function t(){this._arr=[],this._keyIndices={}}return t.prototype.size=function(){return this._arr.length},t.prototype.keys=function(){return this._arr.map(function(r){return r.key})},t.prototype.has=function(r){return e.has(this._keyIndices,r)},t.prototype.priority=function(r){var n=this._keyIndices[r];if(n!==void 0)return this._arr[n].priority},t.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key},t.prototype.add=function(r,n){var o=this._keyIndices;if(r=String(r),!e.has(o,r)){var s=this._arr,i=s.length;return o[r]=i,s.push({key:r,priority:n}),this._decrease(i),!0}return!1},t.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var r=this._arr.pop();return delete this._keyIndices[r.key],this._heapify(0),r.key},t.prototype.decrease=function(r,n){var o=this._keyIndices[r];if(n>this._arr[o].priority)throw new Error("New priority is greater than current priority. Key: "+r+" Old: "+this._arr[o].priority+" New: "+n);this._arr[o].priority=n,this._decrease(o)},t.prototype._heapify=function(r){var n=this._arr,o=2*r,s=o+1,i=r;o<n.length&&(i=n[o].priority<n[i].priority?o:i,s<n.length&&(i=n[s].priority<n[i].priority?s:i),i!==r&&(this._swap(r,i),this._heapify(i)))},t.prototype._decrease=function(r){for(var n=this._arr,o=n[r].priority,s;r!==0&&(s=r>>1,!(n[s].priority<o));)this._swap(r,s),r=s},t.prototype._swap=function(r,n){var o=this._arr,s=this._keyIndices,i=o[r],l=o[n];o[r]=l,o[n]=i,s[l.key]=r,s[i.key]=n},Bs}var Hs,Hf;function Uf(){if(Hf)return Hs;Hf=1;var e=Ue(),t=Bf();Hs=n;var r=e.constant(1);function n(s,i,l,c){return o(s,String(i),l||r,c||function(u){return s.outEdges(u)})}function o(s,i,l,c){var u={},d=new t,p,h,f=function(m){var y=m.v!==p?m.v:m.w,g=u[y],b=l(m),x=h.distance+b;if(b<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+m+" Weight: "+b);x<g.distance&&(g.distance=x,g.predecessor=p,d.decrease(y,x))};for(s.nodes().forEach(function(m){var y=m===i?0:Number.POSITIVE_INFINITY;u[m]={distance:y},d.add(m,y)});d.size()>0&&(p=d.removeMin(),h=u[p],h.distance!==Number.POSITIVE_INFINITY);)c(p).forEach(f);return u}return Hs}var Us,Jf;function $b(){if(Jf)return Us;Jf=1;var e=Uf(),t=Ue();Us=r;function r(n,o,s){return t.transform(n.nodes(),function(i,l){i[l]=e(n,l,o,s)},{})}return Us}var Js,Kf;function Vf(){if(Kf)return Js;Kf=1;var e=Ue();Js=t;function t(r){var n=0,o=[],s={},i=[];function l(c){var u=s[c]={onStack:!0,lowlink:n,index:n++};if(o.push(c),r.successors(c).forEach(function(h){e.has(s,h)?s[h].onStack&&(u.lowlink=Math.min(u.lowlink,s[h].index)):(l(h),u.lowlink=Math.min(u.lowlink,s[h].lowlink))}),u.lowlink===u.index){var d=[],p;do p=o.pop(),s[p].onStack=!1,d.push(p);while(c!==p);i.push(d)}}return r.nodes().forEach(function(c){e.has(s,c)||l(c)}),i}return Js}var Ks,Gf;function qb(){if(Gf)return Ks;Gf=1;var e=Ue(),t=Vf();Ks=r;function r(n){return e.filter(t(n),function(o){return o.length>1||o.length===1&&n.hasEdge(o[0],o[0])})}return Ks}var Vs,Yf;function zb(){if(Yf)return Vs;Yf=1;var e=Ue();Vs=r;var t=e.constant(1);function r(o,s,i){return n(o,s||t,i||function(l){return o.outEdges(l)})}function n(o,s,i){var l={},c=o.nodes();return c.forEach(function(u){l[u]={},l[u][u]={distance:0},c.forEach(function(d){u!==d&&(l[u][d]={distance:Number.POSITIVE_INFINITY})}),i(u).forEach(function(d){var p=d.v===u?d.w:d.v,h=s(d);l[u][p]={distance:h,predecessor:u}})}),c.forEach(function(u){var d=l[u];c.forEach(function(p){var h=l[p];c.forEach(function(f){var m=h[u],y=d[f],g=h[f],b=m.distance+y.distance;b<g.distance&&(g.distance=b,g.predecessor=y.predecessor)})})}),l}return Vs}var Gs,Xf;function Zf(){if(Xf)return Gs;Xf=1;var e=Ue();Gs=t,t.CycleException=r;function t(n){var o={},s={},i=[];function l(c){if(e.has(s,c))throw new r;e.has(o,c)||(s[c]=!0,o[c]=!0,e.each(n.predecessors(c),l),delete s[c],i.push(c))}if(e.each(n.sinks(),l),e.size(o)!==n.nodeCount())throw new r;return i}function r(){}return r.prototype=new Error,Gs}var Ys,Qf;function Wb(){if(Qf)return Ys;Qf=1;var e=Zf();Ys=t;function t(r){try{e(r)}catch(n){if(n instanceof e.CycleException)return!1;throw n}return!0}return Ys}var Xs,eh;function th(){if(eh)return Xs;eh=1;var e=Ue();Xs=t;function t(n,o,s){e.isArray(o)||(o=[o]);var i=(n.isDirected()?n.successors:n.neighbors).bind(n),l=[],c={};return e.each(o,function(u){if(!n.hasNode(u))throw new Error("Graph does not have node: "+u);r(n,u,s==="post",c,i,l)}),l}function r(n,o,s,i,l,c){e.has(i,o)||(i[o]=!0,s||c.push(o),e.each(l(o),function(u){r(n,u,s,i,l,c)}),s&&c.push(o))}return Xs}var Zs,rh;function Fb(){if(rh)return Zs;rh=1;var e=th();Zs=t;function t(r,n){return e(r,n,"post")}return Zs}var Qs,nh;function Bb(){if(nh)return Qs;nh=1;var e=th();Qs=t;function t(r,n){return e(r,n,"pre")}return Qs}var ei,ah;function Hb(){if(ah)return ei;ah=1;var e=Ue(),t=$s(),r=Bf();ei=n;function n(o,s){var i=new t,l={},c=new r,u;function d(h){var f=h.v===u?h.w:h.v,m=c.priority(f);if(m!==void 0){var y=s(h);y<m&&(l[f]=u,c.decrease(f,y))}}if(o.nodeCount()===0)return i;e.each(o.nodes(),function(h){c.add(h,Number.POSITIVE_INFINITY),i.setNode(h)}),c.decrease(o.nodes()[0],0);for(var p=!1;c.size()>0;){if(u=c.removeMin(),e.has(l,u))i.setEdge(u,l[u]);else{if(p)throw new Error("Input graph is not connected: "+o);p=!0}o.nodeEdges(u).forEach(d)}return i}return ei}var ti,oh;function Ub(){return oh||(oh=1,ti={components:Mb(),dijkstra:Uf(),dijkstraAll:$b(),findCycles:qb(),floydWarshall:zb(),isAcyclic:Wb(),postorder:Fb(),preorder:Bb(),prim:Hb(),tarjan:Vf(),topsort:Zf()}),ti}var ri,sh;function Jb(){if(sh)return ri;sh=1;var e=Ab();return ri={Graph:e.Graph,json:Lb(),alg:Ub(),version:e.version},ri}var ni,ih;function Ve(){if(ih)return ni;ih=1;var e;if(typeof Br=="function")try{e=Jb()}catch{}return e||(e=window.graphlib),ni=e,ni}var ai,lh;function Kb(){if(lh)return ai;lh=1;var e=Eu(),t=1,r=4;function n(o){return e(o,t|r)}return ai=n,ai}var oi,ch;function gr(){if(ch)return oi;ch=1;var e=gt(),t=et(),r=ir(),n=He();function o(s,i,l){if(!n(l))return!1;var c=typeof i;return(c=="number"?t(l)&&r(i,l.length):c=="string"&&i in l)?e(l[i],s):!1}return oi=o,oi}var si,dh;function Vb(){if(dh)return si;dh=1;var e=mr(),t=gt(),r=gr(),n=dt(),o=Object.prototype,s=o.hasOwnProperty,i=e(function(l,c){l=Object(l);var u=-1,d=c.length,p=d>2?c[2]:void 0;for(p&&r(c[0],c[1],p)&&(d=1);++u<d;)for(var h=c[u],f=n(h),m=-1,y=f.length;++m<y;){var g=f[m],b=l[g];(b===void 0||t(b,o[g])&&!s.call(l,g))&&(l[g]=h[g])}return l});return si=i,si}var ii,uh;function Gb(){if(uh)return ii;uh=1;var e=tt(),t=et(),r=nt();function n(o){return function(s,i,l){var c=Object(s);if(!t(s)){var u=e(i,3);s=r(s),i=function(p){return u(c[p],p,c)}}var d=o(s,i,l);return d>-1?c[u?s[d]:d]:void 0}}return ii=n,ii}var li,ph;function Yb(){if(ph)return li;ph=1;var e=/\s/;function t(r){for(var n=r.length;n--&&e.test(r.charAt(n)););return n}return li=t,li}var ci,fh;function Xb(){if(fh)return ci;fh=1;var e=Yb(),t=/^\s+/;function r(n){return n&&n.slice(0,e(n)+1).replace(t,"")}return ci=r,ci}var di,hh;function Zb(){if(hh)return di;hh=1;var e=Xb(),t=He(),r=vt(),n=NaN,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,i=/^0o[0-7]+$/i,l=parseInt;function c(u){if(typeof u=="number")return u;if(r(u))return n;if(t(u)){var d=typeof u.valueOf=="function"?u.valueOf():u;u=t(d)?d+"":d}if(typeof u!="string")return u===0?u:+u;u=e(u);var p=s.test(u);return p||i.test(u)?l(u.slice(2),p?2:8):o.test(u)?n:+u}return di=c,di}var ui,mh;function gh(){if(mh)return ui;mh=1;var e=Zb(),t=1/0,r=17976931348623157e292;function n(o){if(!o)return o===0?o:0;if(o=e(o),o===t||o===-t){var s=o<0?-1:1;return s*r}return o===o?o:0}return ui=n,ui}var pi,yh;function Qb(){if(yh)return pi;yh=1;var e=gh();function t(r){var n=e(r),o=n%1;return n===n?o?n-o:n:0}return pi=t,pi}var fi,xh;function ev(){if(xh)return fi;xh=1;var e=kf(),t=tt(),r=Qb(),n=Math.max;function o(s,i,l){var c=s==null?0:s.length;if(!c)return-1;var u=l==null?0:r(l);return u<0&&(u=n(c+u,0)),e(s,t(i,3),u)}return fi=o,fi}var hi,bh;function tv(){if(bh)return hi;bh=1;var e=Gb(),t=ev(),r=e(t);return hi=r,hi}var mi,vh;function kh(){if(vh)return mi;vh=1;var e=gs();function t(r){var n=r==null?0:r.length;return n?e(r,1):[]}return mi=t,mi}var gi,Sh;function rv(){if(Sh)return gi;Sh=1;var e=to(),t=Wu(),r=dt();function n(o,s){return o==null?o:e(o,t(s),r)}return gi=n,gi}var yi,_h;function nv(){if(_h)return yi;_h=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return yi=e,yi}var xi,wh;function av(){if(wh)return xi;wh=1;var e=or(),t=no(),r=tt();function n(o,s){var i={};return s=r(s,3),t(o,function(l,c,u){e(i,c,s(l,c,u))}),i}return xi=n,xi}var bi,Th;function vi(){if(Th)return bi;Th=1;var e=vt();function t(r,n,o){for(var s=-1,i=r.length;++s<i;){var l=r[s],c=n(l);if(c!=null&&(u===void 0?c===c&&!e(c):o(c,u)))var u=c,d=l}return d}return bi=t,bi}var ki,jh;function ov(){if(jh)return ki;jh=1;function e(t,r){return t>r}return ki=e,ki}var Si,Ih;function sv(){if(Ih)return Si;Ih=1;var e=vi(),t=ov(),r=ut();function n(o){return o&&o.length?e(o,r,t):void 0}return Si=n,Si}var _i,Ch;function Nh(){if(Ch)return _i;Ch=1;var e=or(),t=gt();function r(n,o,s){(s!==void 0&&!t(n[o],s)||s===void 0&&!(o in n))&&e(n,o,s)}return _i=r,_i}var wi,Rh;function iv(){if(Rh)return wi;Rh=1;var e=lt(),t=dr(),r=Xe(),n="[object Object]",o=Function.prototype,s=Object.prototype,i=o.toString,l=s.hasOwnProperty,c=i.call(Object);function u(d){if(!r(d)||e(d)!=n)return!1;var p=t(d);if(p===null)return!0;var h=l.call(p,"constructor")&&p.constructor;return typeof h=="function"&&h instanceof h&&i.call(h)==c}return wi=u,wi}var Ti,Eh;function Ph(){if(Eh)return Ti;Eh=1;function e(t,r){if(!(r==="constructor"&&typeof t[r]=="function")&&r!="__proto__")return t[r]}return Ti=e,Ti}var ji,Oh;function lv(){if(Oh)return ji;Oh=1;var e=Pt(),t=dt();function r(n){return e(n,t(n))}return ji=r,ji}var Ii,Dh;function cv(){if(Dh)return Ii;Dh=1;var e=Nh(),t=Wd(),r=vu(),n=Bd(),o=Tu(),s=Ot(),i=Re(),l=Ef(),c=xt(),u=Et(),d=He(),p=iv(),h=Lt(),f=Ph(),m=lv();function y(g,b,x,v,k,S,j){var w=f(g,x),N=f(b,x),L=j.get(N);if(L){e(g,x,L);return}var _=S?S(w,N,x+"",g,b,j):void 0,T=_===void 0;if(T){var D=i(N),R=!D&&c(N),A=!D&&!R&&h(N);_=N,D||R||A?i(w)?_=w:l(w)?_=n(w):R?(T=!1,_=t(N,!0)):A?(T=!1,_=r(N,!0)):_=[]:p(N)||s(N)?(_=w,s(w)?_=m(w):(!d(w)||u(w))&&(_=o(N))):T=!1}T&&(j.set(N,_),k(_,N,v,S,j),j.delete(N)),e(g,x,_)}return Ii=y,Ii}var Ci,Ah;function dv(){if(Ah)return Ci;Ah=1;var e=ar(),t=Nh(),r=to(),n=cv(),o=He(),s=dt(),i=Ph();function l(c,u,d,p,h){c!==u&&r(u,function(f,m){if(h||(h=new e),o(f))n(c,u,m,d,l,p,h);else{var y=p?p(i(c,m),f,m+"",c,u,h):void 0;y===void 0&&(y=f),t(c,m,y)}},s)}return Ci=l,Ci}var Ni,Lh;function uv(){if(Lh)return Ni;Lh=1;var e=mr(),t=gr();function r(n){return e(function(o,s){var i=-1,l=s.length,c=l>1?s[l-1]:void 0,u=l>2?s[2]:void 0;for(c=n.length>3&&typeof c=="function"?(l--,c):void 0,u&&t(s[0],s[1],u)&&(c=l<3?void 0:c,l=1),o=Object(o);++i<l;){var d=s[i];d&&n(o,d,i,c)}return o})}return Ni=r,Ni}var Ri,Mh;function pv(){if(Mh)return Ri;Mh=1;var e=dv(),t=uv(),r=t(function(n,o,s){e(n,o,s)});return Ri=r,Ri}var Ei,$h;function qh(){if($h)return Ei;$h=1;function e(t,r){return t<r}return Ei=e,Ei}var Pi,zh;function fv(){if(zh)return Pi;zh=1;var e=vi(),t=qh(),r=ut();function n(o){return o&&o.length?e(o,r,t):void 0}return Pi=n,Pi}var Oi,Wh;function hv(){if(Wh)return Oi;Wh=1;var e=vi(),t=tt(),r=qh();function n(o,s){return o&&o.length?e(o,t(s,2),r):void 0}return Oi=n,Oi}var Di,Fh;function mv(){if(Fh)return Di;Fh=1;var e=Ke(),t=function(){return e.Date.now()};return Di=t,Di}var Ai,Bh;function gv(){if(Bh)return Ai;Bh=1;var e=sr(),t=fr(),r=ir(),n=He(),o=$t();function s(i,l,c,u){if(!n(i))return i;l=t(l,i);for(var d=-1,p=l.length,h=p-1,f=i;f!=null&&++d<p;){var m=o(l[d]),y=c;if(m==="__proto__"||m==="constructor"||m==="prototype")return i;if(d!=h){var g=f[m];y=u?u(g,m,f):void 0,y===void 0&&(y=n(g)?g:r(l[d+1])?[]:{})}e(f,m,y),f=f[m]}return i}return Ai=s,Ai}var Li,Hh;function yv(){if(Hh)return Li;Hh=1;var e=hr(),t=gv(),r=fr();function n(o,s,i){for(var l=-1,c=s.length,u={};++l<c;){var d=s[l],p=e(o,d);i(p,d)&&t(u,r(d,o),p)}return u}return Li=n,Li}var Mi,Uh;function xv(){if(Uh)return Mi;Uh=1;var e=yv(),t=Op();function r(n,o){return e(n,o,function(s,i){return t(n,i)})}return Mi=r,Mi}var $i,Jh;function bv(){if(Jh)return $i;Jh=1;var e=kh(),t=hf(),r=xf();function n(o){return r(t(o,void 0,e),o+"")}return $i=n,$i}var qi,Kh;function vv(){if(Kh)return qi;Kh=1;var e=xv(),t=bv(),r=t(function(n,o){return n==null?{}:e(n,o)});return qi=r,qi}var zi,Vh;function kv(){if(Vh)return zi;Vh=1;var e=Math.ceil,t=Math.max;function r(n,o,s,i){for(var l=-1,c=t(e((o-n)/(s||1)),0),u=Array(c);c--;)u[i?c:++l]=n,n+=s;return u}return zi=r,zi}var Wi,Gh;function Sv(){if(Gh)return Wi;Gh=1;var e=kv(),t=gr(),r=gh();function n(o){return function(s,i,l){return l&&typeof l!="number"&&t(s,i,l)&&(i=l=void 0),s=r(s),i===void 0?(i=s,s=0):i=r(i),l=l===void 0?s<i?1:-1:r(l),e(s,i,l,o)}}return Wi=n,Wi}var Fi,Yh;function _v(){if(Yh)return Fi;Yh=1;var e=Sv(),t=e();return Fi=t,Fi}var Bi,Xh;function wv(){if(Xh)return Bi;Xh=1;function e(t,r){var n=t.length;for(t.sort(r);n--;)t[n]=t[n].value;return t}return Bi=e,Bi}var Hi,Zh;function Tv(){if(Zh)return Hi;Zh=1;var e=vt();function t(r,n){if(r!==n){var o=r!==void 0,s=r===null,i=r===r,l=e(r),c=n!==void 0,u=n===null,d=n===n,p=e(n);if(!u&&!p&&!l&&r>n||l&&c&&d&&!u&&!p||s&&c&&d||!o&&d||!i)return 1;if(!s&&!l&&!p&&r<n||p&&o&&i&&!s&&!l||u&&o&&i||!c&&i||!d)return-1}return 0}return Hi=t,Hi}var Ui,Qh;function jv(){if(Qh)return Ui;Qh=1;var e=Tv();function t(r,n,o){for(var s=-1,i=r.criteria,l=n.criteria,c=i.length,u=o.length;++s<c;){var d=e(i[s],l[s]);if(d){if(s>=u)return d;var p=o[s];return d*(p=="desc"?-1:1)}}return r.index-n.index}return Ui=t,Ui}var Ji,em;function Iv(){if(em)return Ji;em=1;var e=pr(),t=hr(),r=tt(),n=Gp(),o=wv(),s=lr(),i=jv(),l=ut(),c=Re();function u(d,p,h){p.length?p=e(p,function(y){return c(y)?function(g){return t(g,y.length===1?y[0]:y)}:y}):p=[l];var f=-1;p=e(p,s(r));var m=n(d,function(y,g,b){var x=e(p,function(v){return v(y)});return{criteria:x,index:++f,value:y}});return o(m,function(y,g){return i(y,g,h)})}return Ji=u,Ji}var Ki,tm;function Cv(){if(tm)return Ki;tm=1;var e=gs(),t=Iv(),r=mr(),n=gr(),o=r(function(s,i){if(s==null)return[];var l=i.length;return l>1&&n(s,i[0],i[1])?i=[]:l>2&&n(i[0],i[1],i[2])&&(i=[i[0]]),t(s,e(i,1),[])});return Ki=o,Ki}var Vi,rm;function Nv(){if(rm)return Vi;rm=1;var e=wp(),t=0;function r(n){var o=++t;return e(n)+o}return Vi=r,Vi}var Gi,nm;function Rv(){if(nm)return Gi;nm=1;function e(t,r,n){for(var o=-1,s=t.length,i=r.length,l={};++o<s;){var c=o<i?r[o]:void 0;n(l,t[o],c)}return l}return Gi=e,Gi}var Yi,am;function Ev(){if(am)return Yi;am=1;var e=sr(),t=Rv();function r(n,o){return t(n||[],o||[],e)}return Yi=r,Yi}var Xi,om;function Ie(){if(om)return Xi;om=1;var e;if(typeof Br=="function")try{e={cloneDeep:Kb(),constant:Za(),defaults:Vb(),each:Uu(),filter:Wp(),find:tv(),flatten:kh(),forEach:Bu(),forIn:rv(),has:Hp(),isUndefined:Kp(),last:nv(),map:Xp(),mapValues:av(),max:sv(),merge:pv(),min:fv(),minBy:hv(),now:mv(),pick:vv(),range:_v(),reduce:tf(),sortBy:Cv(),uniqueId:Nv(),values:Af(),zipObject:Ev()}}catch{}return e||(e=window._),Xi=e,Xi}var Zi,sm;function Pv(){if(sm)return Zi;sm=1,Zi=e;function e(){var n={};n._next=n._prev=n,this._sentinel=n}e.prototype.dequeue=function(){var n=this._sentinel,o=n._prev;if(o!==n)return t(o),o},e.prototype.enqueue=function(n){var o=this._sentinel;n._prev&&n._next&&t(n),n._next=o._next,o._next._prev=n,o._next=n,n._prev=o},e.prototype.toString=function(){for(var n=[],o=this._sentinel,s=o._prev;s!==o;)n.push(JSON.stringify(s,r)),s=s._prev;return"["+n.join(", ")+"]"};function t(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function r(n,o){if(n!=="_next"&&n!=="_prev")return o}return Zi}var Qi,im;function Ov(){if(im)return Qi;im=1;var e=Ie(),t=Ve().Graph,r=Pv();Qi=o;var n=e.constant(1);function o(u,d){if(u.nodeCount()<=1)return[];var p=l(u,d||n),h=s(p.graph,p.buckets,p.zeroIdx);return e.flatten(e.map(h,function(f){return u.outEdges(f.v,f.w)}),!0)}function s(u,d,p){for(var h=[],f=d[d.length-1],m=d[0],y;u.nodeCount();){for(;y=m.dequeue();)i(u,d,p,y);for(;y=f.dequeue();)i(u,d,p,y);if(u.nodeCount()){for(var g=d.length-2;g>0;--g)if(y=d[g].dequeue(),y){h=h.concat(i(u,d,p,y,!0));break}}}return h}function i(u,d,p,h,f){var m=f?[]:void 0;return e.forEach(u.inEdges(h.v),function(y){var g=u.edge(y),b=u.node(y.v);f&&m.push({v:y.v,w:y.w}),b.out-=g,c(d,p,b)}),e.forEach(u.outEdges(h.v),function(y){var g=u.edge(y),b=y.w,x=u.node(b);x.in-=g,c(d,p,x)}),u.removeNode(h.v),m}function l(u,d){var p=new t,h=0,f=0;e.forEach(u.nodes(),function(g){p.setNode(g,{v:g,in:0,out:0})}),e.forEach(u.edges(),function(g){var b=p.edge(g.v,g.w)||0,x=d(g),v=b+x;p.setEdge(g.v,g.w,v),f=Math.max(f,p.node(g.v).out+=x),h=Math.max(h,p.node(g.w).in+=x)});var m=e.range(f+h+3).map(function(){return new r}),y=h+1;return e.forEach(p.nodes(),function(g){c(m,y,p.node(g))}),{graph:p,buckets:m,zeroIdx:y}}function c(u,d,p){p.out?p.in?u[p.out-p.in+d].enqueue(p):u[u.length-1].enqueue(p):u[0].enqueue(p)}return Qi}var el,lm;function Dv(){if(lm)return el;lm=1;var e=Ie(),t=Ov();el={run:r,undo:o};function r(s){var i=s.graph().acyclicer==="greedy"?t(s,l(s)):n(s);e.forEach(i,function(c){var u=s.edge(c);s.removeEdge(c),u.forwardName=c.name,u.reversed=!0,s.setEdge(c.w,c.v,u,e.uniqueId("rev"))});function l(c){return function(u){return c.edge(u).weight}}}function n(s){var i=[],l={},c={};function u(d){e.has(c,d)||(c[d]=!0,l[d]=!0,e.forEach(s.outEdges(d),function(p){e.has(l,p.w)?i.push(p):u(p.w)}),delete l[d])}return e.forEach(s.nodes(),u),i}function o(s){e.forEach(s.edges(),function(i){var l=s.edge(i);if(l.reversed){s.removeEdge(i);var c=l.forwardName;delete l.reversed,delete l.forwardName,s.setEdge(i.w,i.v,l,c)}})}return el}var tl,cm;function ze(){if(cm)return tl;cm=1;var e=Ie(),t=Ve().Graph;tl={addDummyNode:r,simplify:n,asNonCompoundGraph:o,successorWeights:s,predecessorWeights:i,intersectRect:l,buildLayerMatrix:c,normalizeRanks:u,removeEmptyRanks:d,addBorderNode:p,maxRank:h,partition:f,time:m,notime:y};function r(g,b,x,v){var k;do k=e.uniqueId(v);while(g.hasNode(k));return x.dummy=b,g.setNode(k,x),k}function n(g){var b=new t().setGraph(g.graph());return e.forEach(g.nodes(),function(x){b.setNode(x,g.node(x))}),e.forEach(g.edges(),function(x){var v=b.edge(x.v,x.w)||{weight:0,minlen:1},k=g.edge(x);b.setEdge(x.v,x.w,{weight:v.weight+k.weight,minlen:Math.max(v.minlen,k.minlen)})}),b}function o(g){var b=new t({multigraph:g.isMultigraph()}).setGraph(g.graph());return e.forEach(g.nodes(),function(x){g.children(x).length||b.setNode(x,g.node(x))}),e.forEach(g.edges(),function(x){b.setEdge(x,g.edge(x))}),b}function s(g){var b=e.map(g.nodes(),function(x){var v={};return e.forEach(g.outEdges(x),function(k){v[k.w]=(v[k.w]||0)+g.edge(k).weight}),v});return e.zipObject(g.nodes(),b)}function i(g){var b=e.map(g.nodes(),function(x){var v={};return e.forEach(g.inEdges(x),function(k){v[k.v]=(v[k.v]||0)+g.edge(k).weight}),v});return e.zipObject(g.nodes(),b)}function l(g,b){var x=g.x,v=g.y,k=b.x-x,S=b.y-v,j=g.width/2,w=g.height/2;if(!k&&!S)throw new Error("Not possible to find intersection inside of the rectangle");var N,L;return Math.abs(S)*j>Math.abs(k)*w?(S<0&&(w=-w),N=w*k/S,L=w):(k<0&&(j=-j),N=j,L=j*S/k),{x:x+N,y:v+L}}function c(g){var b=e.map(e.range(h(g)+1),function(){return[]});return e.forEach(g.nodes(),function(x){var v=g.node(x),k=v.rank;e.isUndefined(k)||(b[k][v.order]=x)}),b}function u(g){var b=e.min(e.map(g.nodes(),function(x){return g.node(x).rank}));e.forEach(g.nodes(),function(x){var v=g.node(x);e.has(v,"rank")&&(v.rank-=b)})}function d(g){var b=e.min(e.map(g.nodes(),function(S){return g.node(S).rank})),x=[];e.forEach(g.nodes(),function(S){var j=g.node(S).rank-b;x[j]||(x[j]=[]),x[j].push(S)});var v=0,k=g.graph().nodeRankFactor;e.forEach(x,function(S,j){e.isUndefined(S)&&j%k!==0?--v:v&&e.forEach(S,function(w){g.node(w).rank+=v})})}function p(g,b,x,v){var k={width:0,height:0};return arguments.length>=4&&(k.rank=x,k.order=v),r(g,"border",k,b)}function h(g){return e.max(e.map(g.nodes(),function(b){var x=g.node(b).rank;if(!e.isUndefined(x))return x}))}function f(g,b){var x={lhs:[],rhs:[]};return e.forEach(g,function(v){b(v)?x.lhs.push(v):x.rhs.push(v)}),x}function m(g,b){var x=e.now();try{return b()}finally{console.log(g+" time: "+(e.now()-x)+"ms")}}function y(g,b){return b()}return tl}var rl,dm;function Av(){if(dm)return rl;dm=1;var e=Ie(),t=ze();rl={run:r,undo:o};function r(s){s.graph().dummyChains=[],e.forEach(s.edges(),function(i){n(s,i)})}function n(s,i){var l=i.v,c=s.node(l).rank,u=i.w,d=s.node(u).rank,p=i.name,h=s.edge(i),f=h.labelRank;if(d!==c+1){s.removeEdge(i);var m,y,g;for(g=0,++c;c<d;++g,++c)h.points=[],y={width:0,height:0,edgeLabel:h,edgeObj:i,rank:c},m=t.addDummyNode(s,"edge",y,"_d"),c===f&&(y.width=h.width,y.height=h.height,y.dummy="edge-label",y.labelpos=h.labelpos),s.setEdge(l,m,{weight:h.weight},p),g===0&&s.graph().dummyChains.push(m),l=m;s.setEdge(l,u,{weight:h.weight},p)}}function o(s){e.forEach(s.graph().dummyChains,function(i){var l=s.node(i),c=l.edgeLabel,u;for(s.setEdge(l.edgeObj,c);l.dummy;)u=s.successors(i)[0],s.removeNode(i),c.points.push({x:l.x,y:l.y}),l.dummy==="edge-label"&&(c.x=l.x,c.y=l.y,c.width=l.width,c.height=l.height),i=u,l=s.node(i)})}return rl}var nl,um;function yr(){if(um)return nl;um=1;var e=Ie();nl={longestPath:t,slack:r};function t(n){var o={};function s(i){var l=n.node(i);if(e.has(o,i))return l.rank;o[i]=!0;var c=e.min(e.map(n.outEdges(i),function(u){return s(u.w)-n.edge(u).minlen}));return(c===Number.POSITIVE_INFINITY||c===void 0||c===null)&&(c=0),l.rank=c}e.forEach(n.sources(),s)}function r(n,o){return n.node(o.w).rank-n.node(o.v).rank-n.edge(o).minlen}return nl}var al,pm;function fm(){if(pm)return al;pm=1;var e=Ie(),t=Ve().Graph,r=yr().slack;al=n;function n(l){var c=new t({directed:!1}),u=l.nodes()[0],d=l.nodeCount();c.setNode(u,{});for(var p,h;o(c,l)<d;)p=s(c,l),h=c.hasNode(p.v)?r(l,p):-r(l,p),i(c,l,h);return c}function o(l,c){function u(d){e.forEach(c.nodeEdges(d),function(p){var h=p.v,f=d===h?p.w:h;!l.hasNode(f)&&!r(c,p)&&(l.setNode(f,{}),l.setEdge(d,f,{}),u(f))})}return e.forEach(l.nodes(),u),l.nodeCount()}function s(l,c){return e.minBy(c.edges(),function(u){if(l.hasNode(u.v)!==l.hasNode(u.w))return r(c,u)})}function i(l,c,u){e.forEach(l.nodes(),function(d){c.node(d).rank+=u})}return al}var ol,hm;function Lv(){if(hm)return ol;hm=1;var e=Ie(),t=fm(),r=yr().slack,n=yr().longestPath,o=Ve().alg.preorder,s=Ve().alg.postorder,i=ze().simplify;ol=l,l.initLowLimValues=p,l.initCutValues=c,l.calcCutValue=d,l.leaveEdge=f,l.enterEdge=m,l.exchangeEdges=y;function l(v){v=i(v),n(v);var k=t(v);p(k),c(k,v);for(var S,j;S=f(k);)j=m(k,v,S),y(k,v,S,j)}function c(v,k){var S=s(v,v.nodes());S=S.slice(0,S.length-1),e.forEach(S,function(j){u(v,k,j)})}function u(v,k,S){var j=v.node(S),w=j.parent;v.edge(S,w).cutvalue=d(v,k,S)}function d(v,k,S){var j=v.node(S),w=j.parent,N=!0,L=k.edge(S,w),_=0;return L||(N=!1,L=k.edge(w,S)),_=L.weight,e.forEach(k.nodeEdges(S),function(T){var D=T.v===S,R=D?T.w:T.v;if(R!==w){var A=D===N,E=k.edge(T).weight;if(_+=A?E:-E,b(v,S,R)){var P=v.edge(S,R).cutvalue;_+=A?-P:P}}}),_}function p(v,k){arguments.length<2&&(k=v.nodes()[0]),h(v,{},1,k)}function h(v,k,S,j,w){var N=S,L=v.node(j);return k[j]=!0,e.forEach(v.neighbors(j),function(_){e.has(k,_)||(S=h(v,k,S,_,j))}),L.low=N,L.lim=S++,w?L.parent=w:delete L.parent,S}function f(v){return e.find(v.edges(),function(k){return v.edge(k).cutvalue<0})}function m(v,k,S){var j=S.v,w=S.w;k.hasEdge(j,w)||(j=S.w,w=S.v);var N=v.node(j),L=v.node(w),_=N,T=!1;N.lim>L.lim&&(_=L,T=!0);var D=e.filter(k.edges(),function(R){return T===x(v,v.node(R.v),_)&&T!==x(v,v.node(R.w),_)});return e.minBy(D,function(R){return r(k,R)})}function y(v,k,S,j){var w=S.v,N=S.w;v.removeEdge(w,N),v.setEdge(j.v,j.w,{}),p(v),c(v,k),g(v,k)}function g(v,k){var S=e.find(v.nodes(),function(w){return!k.node(w).parent}),j=o(v,S);j=j.slice(1),e.forEach(j,function(w){var N=v.node(w).parent,L=k.edge(w,N),_=!1;L||(L=k.edge(N,w),_=!0),k.node(w).rank=k.node(N).rank+(_?L.minlen:-L.minlen)})}function b(v,k,S){return v.hasEdge(k,S)}function x(v,k,S){return S.low<=k.lim&&k.lim<=S.lim}return ol}var sl,mm;function Mv(){if(mm)return sl;mm=1;var e=yr(),t=e.longestPath,r=fm(),n=Lv();sl=o;function o(c){switch(c.graph().ranker){case"network-simplex":l(c);break;case"tight-tree":i(c);break;case"longest-path":s(c);break;default:l(c)}}var s=t;function i(c){t(c),r(c)}function l(c){n(c)}return sl}var il,gm;function $v(){if(gm)return il;gm=1;var e=Ie();il=t;function t(o){var s=n(o);e.forEach(o.graph().dummyChains,function(i){for(var l=o.node(i),c=l.edgeObj,u=r(o,s,c.v,c.w),d=u.path,p=u.lca,h=0,f=d[h],m=!0;i!==c.w;){if(l=o.node(i),m){for(;(f=d[h])!==p&&o.node(f).maxRank<l.rank;)h++;f===p&&(m=!1)}if(!m){for(;h<d.length-1&&o.node(f=d[h+1]).minRank<=l.rank;)h++;f=d[h]}o.setParent(i,f),i=o.successors(i)[0]}})}function r(o,s,i,l){var c=[],u=[],d=Math.min(s[i].low,s[l].low),p=Math.max(s[i].lim,s[l].lim),h,f;h=i;do h=o.parent(h),c.push(h);while(h&&(s[h].low>d||p>s[h].lim));for(f=h,h=l;(h=o.parent(h))!==f;)u.push(h);return{path:c.concat(u.reverse()),lca:f}}function n(o){var s={},i=0;function l(c){var u=i;e.forEach(o.children(c),l),s[c]={low:u,lim:i++}}return e.forEach(o.children(),l),s}return il}var ll,ym;function qv(){if(ym)return ll;ym=1;var e=Ie(),t=ze();ll={run:r,cleanup:i};function r(l){var c=t.addDummyNode(l,"root",{},"_root"),u=o(l),d=e.max(e.values(u))-1,p=2*d+1;l.graph().nestingRoot=c,e.forEach(l.edges(),function(f){l.edge(f).minlen*=p});var h=s(l)+1;e.forEach(l.children(),function(f){n(l,c,p,h,d,u,f)}),l.graph().nodeRankFactor=p}function n(l,c,u,d,p,h,f){var m=l.children(f);if(!m.length){f!==c&&l.setEdge(c,f,{weight:0,minlen:u});return}var y=t.addBorderNode(l,"_bt"),g=t.addBorderNode(l,"_bb"),b=l.node(f);l.setParent(y,f),b.borderTop=y,l.setParent(g,f),b.borderBottom=g,e.forEach(m,function(x){n(l,c,u,d,p,h,x);var v=l.node(x),k=v.borderTop?v.borderTop:x,S=v.borderBottom?v.borderBottom:x,j=v.borderTop?d:2*d,w=k!==S?1:p-h[f]+1;l.setEdge(y,k,{weight:j,minlen:w,nestingEdge:!0}),l.setEdge(S,g,{weight:j,minlen:w,nestingEdge:!0})}),l.parent(f)||l.setEdge(c,y,{weight:0,minlen:p+h[f]})}function o(l){var c={};function u(d,p){var h=l.children(d);h&&h.length&&e.forEach(h,function(f){u(f,p+1)}),c[d]=p}return e.forEach(l.children(),function(d){u(d,1)}),c}function s(l){return e.reduce(l.edges(),function(c,u){return c+l.edge(u).weight},0)}function i(l){var c=l.graph();l.removeNode(c.nestingRoot),delete c.nestingRoot,e.forEach(l.edges(),function(u){var d=l.edge(u);d.nestingEdge&&l.removeEdge(u)})}return ll}var cl,xm;function zv(){if(xm)return cl;xm=1;var e=Ie(),t=ze();cl=r;function r(o){function s(i){var l=o.children(i),c=o.node(i);if(l.length&&e.forEach(l,s),e.has(c,"minRank")){c.borderLeft=[],c.borderRight=[];for(var u=c.minRank,d=c.maxRank+1;u<d;++u)n(o,"borderLeft","_bl",i,c,u),n(o,"borderRight","_br",i,c,u)}}e.forEach(o.children(),s)}function n(o,s,i,l,c,u){var d={width:0,height:0,rank:u,borderType:s},p=c[s][u-1],h=t.addDummyNode(o,"border",d,i);c[s][u]=h,o.setParent(h,l),p&&o.setEdge(p,h,{weight:1})}return cl}var dl,bm;function Wv(){if(bm)return dl;bm=1;var e=Ie();dl={adjust:t,undo:r};function t(u){var d=u.graph().rankdir.toLowerCase();(d==="lr"||d==="rl")&&n(u)}function r(u){var d=u.graph().rankdir.toLowerCase();(d==="bt"||d==="rl")&&s(u),(d==="lr"||d==="rl")&&(l(u),n(u))}function n(u){e.forEach(u.nodes(),function(d){o(u.node(d))}),e.forEach(u.edges(),function(d){o(u.edge(d))})}function o(u){var d=u.width;u.width=u.height,u.height=d}function s(u){e.forEach(u.nodes(),function(d){i(u.node(d))}),e.forEach(u.edges(),function(d){var p=u.edge(d);e.forEach(p.points,i),e.has(p,"y")&&i(p)})}function i(u){u.y=-u.y}function l(u){e.forEach(u.nodes(),function(d){c(u.node(d))}),e.forEach(u.edges(),function(d){var p=u.edge(d);e.forEach(p.points,c),e.has(p,"x")&&c(p)})}function c(u){var d=u.x;u.x=u.y,u.y=d}return dl}var ul,vm;function Fv(){if(vm)return ul;vm=1;var e=Ie();ul=t;function t(r){var n={},o=e.filter(r.nodes(),function(u){return!r.children(u).length}),s=e.max(e.map(o,function(u){return r.node(u).rank})),i=e.map(e.range(s+1),function(){return[]});function l(u){if(!e.has(n,u)){n[u]=!0;var d=r.node(u);i[d.rank].push(u),e.forEach(r.successors(u),l)}}var c=e.sortBy(o,function(u){return r.node(u).rank});return e.forEach(c,l),i}return ul}var pl,km;function Bv(){if(km)return pl;km=1;var e=Ie();pl=t;function t(n,o){for(var s=0,i=1;i<o.length;++i)s+=r(n,o[i-1],o[i]);return s}function r(n,o,s){for(var i=e.zipObject(s,e.map(s,function(h,f){return f})),l=e.flatten(e.map(o,function(h){return e.sortBy(e.map(n.outEdges(h),function(f){return{pos:i[f.w],weight:n.edge(f).weight}}),"pos")}),!0),c=1;c<s.length;)c<<=1;var u=2*c-1;c-=1;var d=e.map(new Array(u),function(){return 0}),p=0;return e.forEach(l.forEach(function(h){var f=h.pos+c;d[f]+=h.weight;for(var m=0;f>0;)f%2&&(m+=d[f+1]),f=f-1>>1,d[f]+=h.weight;p+=h.weight*m})),p}return pl}var fl,Sm;function Hv(){if(Sm)return fl;Sm=1;var e=Ie();fl=t;function t(r,n){return e.map(n,function(o){var s=r.inEdges(o);if(s.length){var i=e.reduce(s,function(l,c){var u=r.edge(c),d=r.node(c.v);return{sum:l.sum+u.weight*d.order,weight:l.weight+u.weight}},{sum:0,weight:0});return{v:o,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:o}})}return fl}var hl,_m;function Uv(){if(_m)return hl;_m=1;var e=Ie();hl=t;function t(o,s){var i={};e.forEach(o,function(c,u){var d=i[c.v]={indegree:0,in:[],out:[],vs:[c.v],i:u};e.isUndefined(c.barycenter)||(d.barycenter=c.barycenter,d.weight=c.weight)}),e.forEach(s.edges(),function(c){var u=i[c.v],d=i[c.w];!e.isUndefined(u)&&!e.isUndefined(d)&&(d.indegree++,u.out.push(i[c.w]))});var l=e.filter(i,function(c){return!c.indegree});return r(l)}function r(o){var s=[];function i(u){return function(d){d.merged||(e.isUndefined(d.barycenter)||e.isUndefined(u.barycenter)||d.barycenter>=u.barycenter)&&n(u,d)}}function l(u){return function(d){d.in.push(u),--d.indegree===0&&o.push(d)}}for(;o.length;){var c=o.pop();s.push(c),e.forEach(c.in.reverse(),i(c)),e.forEach(c.out,l(c))}return e.map(e.filter(s,function(u){return!u.merged}),function(u){return e.pick(u,["vs","i","barycenter","weight"])})}function n(o,s){var i=0,l=0;o.weight&&(i+=o.barycenter*o.weight,l+=o.weight),s.weight&&(i+=s.barycenter*s.weight,l+=s.weight),o.vs=s.vs.concat(o.vs),o.barycenter=i/l,o.weight=l,o.i=Math.min(s.i,o.i),s.merged=!0}return hl}var ml,wm;function Jv(){if(wm)return ml;wm=1;var e=Ie(),t=ze();ml=r;function r(s,i){var l=t.partition(s,function(y){return e.has(y,"barycenter")}),c=l.lhs,u=e.sortBy(l.rhs,function(y){return-y.i}),d=[],p=0,h=0,f=0;c.sort(o(!!i)),f=n(d,u,f),e.forEach(c,function(y){f+=y.vs.length,d.push(y.vs),p+=y.barycenter*y.weight,h+=y.weight,f=n(d,u,f)});var m={vs:e.flatten(d,!0)};return h&&(m.barycenter=p/h,m.weight=h),m}function n(s,i,l){for(var c;i.length&&(c=e.last(i)).i<=l;)i.pop(),s.push(c.vs),l++;return l}function o(s){return function(i,l){return i.barycenter<l.barycenter?-1:i.barycenter>l.barycenter?1:s?l.i-i.i:i.i-l.i}}return ml}var gl,Tm;function Kv(){if(Tm)return gl;Tm=1;var e=Ie(),t=Hv(),r=Uv(),n=Jv();gl=o;function o(l,c,u,d){var p=l.children(c),h=l.node(c),f=h?h.borderLeft:void 0,m=h?h.borderRight:void 0,y={};f&&(p=e.filter(p,function(S){return S!==f&&S!==m}));var g=t(l,p);e.forEach(g,function(S){if(l.children(S.v).length){var j=o(l,S.v,u,d);y[S.v]=j,e.has(j,"barycenter")&&i(S,j)}});var b=r(g,u);s(b,y);var x=n(b,d);if(f&&(x.vs=e.flatten([f,x.vs,m],!0),l.predecessors(f).length)){var v=l.node(l.predecessors(f)[0]),k=l.node(l.predecessors(m)[0]);e.has(x,"barycenter")||(x.barycenter=0,x.weight=0),x.barycenter=(x.barycenter*x.weight+v.order+k.order)/(x.weight+2),x.weight+=2}return x}function s(l,c){e.forEach(l,function(u){u.vs=e.flatten(u.vs.map(function(d){return c[d]?c[d].vs:d}),!0)})}function i(l,c){e.isUndefined(l.barycenter)?(l.barycenter=c.barycenter,l.weight=c.weight):(l.barycenter=(l.barycenter*l.weight+c.barycenter*c.weight)/(l.weight+c.weight),l.weight+=c.weight)}return gl}var yl,jm;function Vv(){if(jm)return yl;jm=1;var e=Ie(),t=Ve().Graph;yl=r;function r(o,s,i){var l=n(o),c=new t({compound:!0}).setGraph({root:l}).setDefaultNodeLabel(function(u){return o.node(u)});return e.forEach(o.nodes(),function(u){var d=o.node(u),p=o.parent(u);(d.rank===s||d.minRank<=s&&s<=d.maxRank)&&(c.setNode(u),c.setParent(u,p||l),e.forEach(o[i](u),function(h){var f=h.v===u?h.w:h.v,m=c.edge(f,u),y=e.isUndefined(m)?0:m.weight;c.setEdge(f,u,{weight:o.edge(h).weight+y})}),e.has(d,"minRank")&&c.setNode(u,{borderLeft:d.borderLeft[s],borderRight:d.borderRight[s]}))}),c}function n(o){for(var s;o.hasNode(s=e.uniqueId("_root")););return s}return yl}var xl,Im;function Gv(){if(Im)return xl;Im=1;var e=Ie();xl=t;function t(r,n,o){var s={},i;e.forEach(o,function(l){for(var c=r.parent(l),u,d;c;){if(u=r.parent(c),u?(d=s[u],s[u]=c):(d=i,i=c),d&&d!==c){n.setEdge(d,c);return}c=u}})}return xl}var bl,Cm;function Yv(){if(Cm)return bl;Cm=1;var e=Ie(),t=Fv(),r=Bv(),n=Kv(),o=Vv(),s=Gv(),i=Ve().Graph,l=ze();bl=c;function c(h){var f=l.maxRank(h),m=u(h,e.range(1,f+1),"inEdges"),y=u(h,e.range(f-1,-1,-1),"outEdges"),g=t(h);p(h,g);for(var b=Number.POSITIVE_INFINITY,x,v=0,k=0;k<4;++v,++k){d(v%2?m:y,v%4>=2),g=l.buildLayerMatrix(h);var S=r(h,g);S<b&&(k=0,x=e.cloneDeep(g),b=S)}p(h,x)}function u(h,f,m){return e.map(f,function(y){return o(h,y,m)})}function d(h,f){var m=new i;e.forEach(h,function(y){var g=y.graph().root,b=n(y,g,m,f);e.forEach(b.vs,function(x,v){y.node(x).order=v}),s(y,m,b.vs)})}function p(h,f){e.forEach(f,function(m){e.forEach(m,function(y,g){h.node(y).order=g})})}return bl}var vl,Nm;function Xv(){if(Nm)return vl;Nm=1;var e=Ie(),t=Ve().Graph,r=ze();vl={positionX:m,findType1Conflicts:n,findType2Conflicts:o,addConflict:i,hasConflict:l,verticalAlignment:c,horizontalCompaction:u,alignCoordinates:h,findSmallestWidthAlignment:p,balance:f};function n(b,x){var v={};function k(S,j){var w=0,N=0,L=S.length,_=e.last(j);return e.forEach(j,function(T,D){var R=s(b,T),A=R?b.node(R).order:L;(R||T===_)&&(e.forEach(j.slice(N,D+1),function(E){e.forEach(b.predecessors(E),function(P){var z=b.node(P),J=z.order;(J<w||A<J)&&!(z.dummy&&b.node(E).dummy)&&i(v,P,E)})}),N=D+1,w=A)}),j}return e.reduce(x,k),v}function o(b,x){var v={};function k(j,w,N,L,_){var T;e.forEach(e.range(w,N),function(D){T=j[D],b.node(T).dummy&&e.forEach(b.predecessors(T),function(R){var A=b.node(R);A.dummy&&(A.order<L||A.order>_)&&i(v,R,T)})})}function S(j,w){var N=-1,L,_=0;return e.forEach(w,function(T,D){if(b.node(T).dummy==="border"){var R=b.predecessors(T);R.length&&(L=b.node(R[0]).order,k(w,_,D,N,L),_=D,N=L)}k(w,_,w.length,L,j.length)}),w}return e.reduce(x,S),v}function s(b,x){if(b.node(x).dummy)return e.find(b.predecessors(x),function(v){return b.node(v).dummy})}function i(b,x,v){if(x>v){var k=x;x=v,v=k}var S=b[x];S||(b[x]=S={}),S[v]=!0}function l(b,x,v){if(x>v){var k=x;x=v,v=k}return e.has(b[x],v)}function c(b,x,v,k){var S={},j={},w={};return e.forEach(x,function(N){e.forEach(N,function(L,_){S[L]=L,j[L]=L,w[L]=_})}),e.forEach(x,function(N){var L=-1;e.forEach(N,function(_){var T=k(_);if(T.length){T=e.sortBy(T,function(P){return w[P]});for(var D=(T.length-1)/2,R=Math.floor(D),A=Math.ceil(D);R<=A;++R){var E=T[R];j[_]===_&&L<w[E]&&!l(v,_,E)&&(j[E]=_,j[_]=S[_]=S[E],L=w[E])}}})}),{root:S,align:j}}function u(b,x,v,k,S){var j={},w=d(b,x,v,S),N=S?"borderLeft":"borderRight";function L(D,R){for(var A=w.nodes(),E=A.pop(),P={};E;)P[E]?D(E):(P[E]=!0,A.push(E),A=A.concat(R(E))),E=A.pop()}function _(D){j[D]=w.inEdges(D).reduce(function(R,A){return Math.max(R,j[A.v]+w.edge(A))},0)}function T(D){var R=w.outEdges(D).reduce(function(E,P){return Math.min(E,j[P.w]-w.edge(P))},Number.POSITIVE_INFINITY),A=b.node(D);R!==Number.POSITIVE_INFINITY&&A.borderType!==N&&(j[D]=Math.max(j[D],R))}return L(_,w.predecessors.bind(w)),L(T,w.successors.bind(w)),e.forEach(k,function(D){j[D]=j[v[D]]}),j}function d(b,x,v,k){var S=new t,j=b.graph(),w=y(j.nodesep,j.edgesep,k);return e.forEach(x,function(N){var L;e.forEach(N,function(_){var T=v[_];if(S.setNode(T),L){var D=v[L],R=S.edge(D,T);S.setEdge(D,T,Math.max(w(b,_,L),R||0))}L=_})}),S}function p(b,x){return e.minBy(e.values(x),function(v){var k=Number.NEGATIVE_INFINITY,S=Number.POSITIVE_INFINITY;return e.forIn(v,function(j,w){var N=g(b,w)/2;k=Math.max(j+N,k),S=Math.min(j-N,S)}),k-S})}function h(b,x){var v=e.values(x),k=e.min(v),S=e.max(v);e.forEach(["u","d"],function(j){e.forEach(["l","r"],function(w){var N=j+w,L=b[N],_;if(L!==x){var T=e.values(L);_=w==="l"?k-e.min(T):S-e.max(T),_&&(b[N]=e.mapValues(L,function(D){return D+_}))}})})}function f(b,x){return e.mapValues(b.ul,function(v,k){if(x)return b[x.toLowerCase()][k];var S=e.sortBy(e.map(b,k));return(S[1]+S[2])/2})}function m(b){var x=r.buildLayerMatrix(b),v=e.merge(n(b,x),o(b,x)),k={},S;e.forEach(["u","d"],function(w){S=w==="u"?x:e.values(x).reverse(),e.forEach(["l","r"],function(N){N==="r"&&(S=e.map(S,function(D){return e.values(D).reverse()}));var L=(w==="u"?b.predecessors:b.successors).bind(b),_=c(b,S,v,L),T=u(b,S,_.root,_.align,N==="r");N==="r"&&(T=e.mapValues(T,function(D){return-D})),k[w+N]=T})});var j=p(b,k);return h(k,j),f(k,b.graph().align)}function y(b,x,v){return function(k,S,j){var w=k.node(S),N=k.node(j),L=0,_;if(L+=w.width/2,e.has(w,"labelpos"))switch(w.labelpos.toLowerCase()){case"l":_=-w.width/2;break;case"r":_=w.width/2;break}if(_&&(L+=v?_:-_),_=0,L+=(w.dummy?x:b)/2,L+=(N.dummy?x:b)/2,L+=N.width/2,e.has(N,"labelpos"))switch(N.labelpos.toLowerCase()){case"l":_=N.width/2;break;case"r":_=-N.width/2;break}return _&&(L+=v?_:-_),_=0,L}}function g(b,x){return b.node(x).width}return vl}var kl,Rm;function Zv(){if(Rm)return kl;Rm=1;var e=Ie(),t=ze(),r=Xv().positionX;kl=n;function n(s){s=t.asNonCompoundGraph(s),o(s),e.forEach(r(s),function(i,l){s.node(l).x=i})}function o(s){var i=t.buildLayerMatrix(s),l=s.graph().ranksep,c=0;e.forEach(i,function(u){var d=e.max(e.map(u,function(p){return s.node(p).height}));e.forEach(u,function(p){s.node(p).y=c+d/2}),c+=d+l})}return kl}var Sl,Em;function Qv(){if(Em)return Sl;Em=1;var e=Ie(),t=Dv(),r=Av(),n=Mv(),o=ze().normalizeRanks,s=$v(),i=ze().removeEmptyRanks,l=qv(),c=zv(),u=Wv(),d=Yv(),p=Zv(),h=ze(),f=Ve().Graph;Sl=m;function m(M,F){var H=F&&F.debugTiming?h.time:h.notime;H("layout",function(){var U=H(" buildLayoutGraph",function(){return L(M)});H(" runLayout",function(){y(U,H)}),H(" updateInputGraph",function(){g(M,U)})})}function y(M,F){F(" makeSpaceForEdgeLabels",function(){_(M)}),F(" removeSelfEdges",function(){B(M)}),F(" acyclic",function(){t.run(M)}),F(" nestingGraph.run",function(){l.run(M)}),F(" rank",function(){n(h.asNonCompoundGraph(M))}),F(" injectEdgeLabelProxies",function(){T(M)}),F(" removeEmptyRanks",function(){i(M)}),F(" nestingGraph.cleanup",function(){l.cleanup(M)}),F(" normalizeRanks",function(){o(M)}),F(" assignRankMinMax",function(){D(M)}),F(" removeEdgeLabelProxies",function(){R(M)}),F(" normalize.run",function(){r.run(M)}),F(" parentDummyChains",function(){s(M)}),F(" addBorderSegments",function(){c(M)}),F(" order",function(){d(M)}),F(" insertSelfEdges",function(){$(M)}),F(" adjustCoordinateSystem",function(){u.adjust(M)}),F(" position",function(){p(M)}),F(" positionSelfEdges",function(){C(M)}),F(" removeBorderNodes",function(){J(M)}),F(" normalize.undo",function(){r.undo(M)}),F(" fixupEdgeLabelCoords",function(){P(M)}),F(" undoCoordinateSystem",function(){u.undo(M)}),F(" translateGraph",function(){A(M)}),F(" assignNodeIntersects",function(){E(M)}),F(" reversePoints",function(){z(M)}),F(" acyclic.undo",function(){t.undo(M)})}function g(M,F){e.forEach(M.nodes(),function(H){var U=M.node(H),ee=F.node(H);U&&(U.x=ee.x,U.y=ee.y,F.children(H).length&&(U.width=ee.width,U.height=ee.height))}),e.forEach(M.edges(),function(H){var U=M.edge(H),ee=F.edge(H);U.points=ee.points,e.has(ee,"x")&&(U.x=ee.x,U.y=ee.y)}),M.graph().width=F.graph().width,M.graph().height=F.graph().height}var b=["nodesep","edgesep","ranksep","marginx","marginy"],x={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},v=["acyclicer","ranker","rankdir","align"],k=["width","height"],S={width:0,height:0},j=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},N=["labelpos"];function L(M){var F=new f({multigraph:!0,compound:!0}),H=Q(M.graph());return F.setGraph(e.merge({},x,G(H,b),e.pick(H,v))),e.forEach(M.nodes(),function(U){var ee=Q(M.node(U));F.setNode(U,e.defaults(G(ee,k),S)),F.setParent(U,M.parent(U))}),e.forEach(M.edges(),function(U){var ee=Q(M.edge(U));F.setEdge(U,e.merge({},w,G(ee,j),e.pick(ee,N)))}),F}function _(M){var F=M.graph();F.ranksep/=2,e.forEach(M.edges(),function(H){var U=M.edge(H);U.minlen*=2,U.labelpos.toLowerCase()!=="c"&&(F.rankdir==="TB"||F.rankdir==="BT"?U.width+=U.labeloffset:U.height+=U.labeloffset)})}function T(M){e.forEach(M.edges(),function(F){var H=M.edge(F);if(H.width&&H.height){var U=M.node(F.v),ee=M.node(F.w),ce={rank:(ee.rank-U.rank)/2+U.rank,e:F};h.addDummyNode(M,"edge-proxy",ce,"_ep")}})}function D(M){var F=0;e.forEach(M.nodes(),function(H){var U=M.node(H);U.borderTop&&(U.minRank=M.node(U.borderTop).rank,U.maxRank=M.node(U.borderBottom).rank,F=e.max(F,U.maxRank))}),M.graph().maxRank=F}function R(M){e.forEach(M.nodes(),function(F){var H=M.node(F);H.dummy==="edge-proxy"&&(M.edge(H.e).labelRank=H.rank,M.removeNode(F))})}function A(M){var F=Number.POSITIVE_INFINITY,H=0,U=Number.POSITIVE_INFINITY,ee=0,ce=M.graph(),de=ce.marginx||0,Te=ce.marginy||0;function Ce(W){var xe=W.x,re=W.y,me=W.width,ae=W.height;F=Math.min(F,xe-me/2),H=Math.max(H,xe+me/2),U=Math.min(U,re-ae/2),ee=Math.max(ee,re+ae/2)}e.forEach(M.nodes(),function(W){Ce(M.node(W))}),e.forEach(M.edges(),function(W){var xe=M.edge(W);e.has(xe,"x")&&Ce(xe)}),F-=de,U-=Te,e.forEach(M.nodes(),function(W){var xe=M.node(W);xe.x-=F,xe.y-=U}),e.forEach(M.edges(),function(W){var xe=M.edge(W);e.forEach(xe.points,function(re){re.x-=F,re.y-=U}),e.has(xe,"x")&&(xe.x-=F),e.has(xe,"y")&&(xe.y-=U)}),ce.width=H-F+de,ce.height=ee-U+Te}function E(M){e.forEach(M.edges(),function(F){var H=M.edge(F),U=M.node(F.v),ee=M.node(F.w),ce,de;H.points?(ce=H.points[0],de=H.points[H.points.length-1]):(H.points=[],ce=ee,de=U),H.points.unshift(h.intersectRect(U,ce)),H.points.push(h.intersectRect(ee,de))})}function P(M){e.forEach(M.edges(),function(F){var H=M.edge(F);if(e.has(H,"x"))switch((H.labelpos==="l"||H.labelpos==="r")&&(H.width-=H.labeloffset),H.labelpos){case"l":H.x-=H.width/2+H.labeloffset;break;case"r":H.x+=H.width/2+H.labeloffset;break}})}function z(M){e.forEach(M.edges(),function(F){var H=M.edge(F);H.reversed&&H.points.reverse()})}function J(M){e.forEach(M.nodes(),function(F){if(M.children(F).length){var H=M.node(F),U=M.node(H.borderTop),ee=M.node(H.borderBottom),ce=M.node(e.last(H.borderLeft)),de=M.node(e.last(H.borderRight));H.width=Math.abs(de.x-ce.x),H.height=Math.abs(ee.y-U.y),H.x=ce.x+H.width/2,H.y=U.y+H.height/2}}),e.forEach(M.nodes(),function(F){M.node(F).dummy==="border"&&M.removeNode(F)})}function B(M){e.forEach(M.edges(),function(F){if(F.v===F.w){var H=M.node(F.v);H.selfEdges||(H.selfEdges=[]),H.selfEdges.push({e:F,label:M.edge(F)}),M.removeEdge(F)}})}function $(M){var F=h.buildLayerMatrix(M);e.forEach(F,function(H){var U=0;e.forEach(H,function(ee,ce){var de=M.node(ee);de.order=ce+U,e.forEach(de.selfEdges,function(Te){h.addDummyNode(M,"selfedge",{width:Te.label.width,height:Te.label.height,rank:de.rank,order:ce+ ++U,e:Te.e,label:Te.label},"_se")}),delete de.selfEdges})})}function C(M){e.forEach(M.nodes(),function(F){var H=M.node(F);if(H.dummy==="selfedge"){var U=M.node(H.e.v),ee=U.x+U.width/2,ce=U.y,de=H.x-ee,Te=U.height/2;M.setEdge(H.e,H.label),M.removeNode(F),H.label.points=[{x:ee+2*de/3,y:ce-Te},{x:ee+5*de/6,y:ce-Te},{x:ee+de,y:ce},{x:ee+5*de/6,y:ce+Te},{x:ee+2*de/3,y:ce+Te}],H.label.x=H.x,H.label.y=H.y}})}function G(M,F){return e.mapValues(e.pick(M,F),Number)}function Q(M){var F={};return e.forEach(M,function(H,U){F[U.toLowerCase()]=H}),F}return Sl}var _l,Pm;function e1(){if(Pm)return _l;Pm=1;var e=Ie(),t=ze(),r=Ve().Graph;_l={debugOrdering:n};function n(o){var s=t.buildLayerMatrix(o),i=new r({compound:!0,multigraph:!0}).setGraph({});return e.forEach(o.nodes(),function(l){i.setNode(l,{label:l}),i.setParent(l,"layer"+o.node(l).rank)}),e.forEach(o.edges(),function(l){i.setEdge(l.v,l.w,{},l.name)}),e.forEach(s,function(l,c){var u="layer"+c;i.setNode(u,{rank:"same"}),e.reduce(l,function(d,p){return i.setEdge(d,p,{style:"invis"}),p})}),i}return _l}var wl,Om;function t1(){return Om||(Om=1,wl="0.8.5"),wl}var Tl,Dm;function r1(){return Dm||(Dm=1,Tl={graphlib:Ve(),layout:Qv(),debug:e1(),util:{time:ze().time,notime:ze().notime},version:t1()}),Tl}var n1=r1();const Am=Cy(n1);function kt(e,t="TB"){if(e.data?._layoutWidth&&e.data?._layoutHeight)return{width:e.data._layoutWidth,height:e.data._layoutHeight};let r=240,n=84;switch(e.type){case"decisionNode":r=164,n=164;break;case"forkNode":r=240,n=84;break;case"joinNode":r=240,n=84;break;case"dynamicPlaceholderNode":r=220,n=70;break;case"loopNode":r=320,n=200;break;case"subWorkflowNode":r=240,n=84;break;case"eventNode":r=240,n=84;break;case"default":r=240,n=40;break;case"plusNode":r=e.data.label&&e.data.label!=="+"?120:32,n=32;break;default:r=240,n=84;break}return{width:r,height:n}}function a1(e,t,r=8){const n=[];if(e.length<r)return n;const o=new Map,s={},i={};e.forEach(p=>{o.set(p.id,p),s[p.id]=[],i[p.id]=[]}),t.forEach(p=>{s[p.source]&&s[p.source].push(p.target),i[p.target]&&i[p.target].push(p.source)});const l=new Set,c=new Set(["input","output","decisionNode","forkNode","joinNode","loopNode","default","plusNode"]),u=p=>!c.has(p.type||""),d=[...e].sort((p,h)=>p.position.y-h.position.y);for(const p of d){if(l.has(p.id)||!u(p)||s[p.id].length>1)continue;const h=[p.id];let f=p,m=s[f.id];for(;m&&m.length===1;){const y=m[0],g=o.get(y);if(!g||l.has(y)||!u(g)||i[y].length!==1)break;h.push(y),f=g,m=s[f.id]}h.length>=r&&(n.push(h),h.forEach(y=>l.add(y)))}return n}function o1(e,t,r,n,o,s=5,i="view"){const l=t.find(x=>x.id===e[0]),{width:c,height:u}=kt(l||t[0],r),d=Math.max(.7,1-(e.length-10)/80),p=i==="edit"||i==="run"?1.15:1,h=Math.min(n,Math.round(60*d*p)),f=Math.min(o,Math.round(80*d*p)),m=c+h,y=u+f;let g=0,b=0;if(r==="TB"){const x=Math.ceil(e.length/s);g=s*m-h,b=x*y-f}else g=Math.ceil(e.length/s)*m-h,b=s*y-f;return g+=40,b+=40,{width:g,height:b,gridKW:m,gridKH:y,cols:s}}const jl=58,Lm=20,s1=16;function i1(e,t,r,n){if(e.length===0)return{positionedChildren:[],containerWidth:280,containerHeight:jl+50};const o=e.map(p=>({...p,parentId:void 0,extent:void 0})),{nodes:s}=Il(o,t,{direction:r,mode:n,enableSnakeLayout:!1});let i=0,l=0;s.forEach(p=>{const{width:h,height:f}=kt(p,r);i=Math.max(i,p.position.x+h),l=Math.max(l,p.position.y+f)});const c=Math.max(300,i+Lm*2),u=jl+l+s1;return{positionedChildren:s.map(p=>{const h=e.find(f=>f.id===p.id);return{...p,parentId:h.parentId,extent:h.extent,position:{x:p.position.x+Lm,y:p.position.y+jl}}}),containerWidth:c,containerHeight:u}}function Il(e,t,r={}){const{direction:n="TB",mode:o="view",enableSnakeLayout:s=!0,snakeColumns:i=5,snakeMinChainLength:l=8,snakeMinNodeCount:c=10}=r,u=e.length,d=e.filter(_=>_.type!=="plusNode").length;let p=n==="LR"?150:120,h=n==="LR"?120:100,f=p,m=h;if(u>15){let _=Math.max(.5,1-(u-15)/50),T=Math.max(.4,1-(u-15)/40);(o==="edit"||o==="run")&&(_=1-(1-_)*.5,T=1-(1-T)*.5),f=Math.round(p*_),m=Math.round(h*T)}const y=s&&d>c?a1(e,t,l):[],g={};y.forEach((_,T)=>{_.forEach(D=>{g[D]=T})});const b=new Am.graphlib.Graph;b.setDefaultEdgeLabel(()=>({})),b.setGraph({rankdir:n,ranker:"network-simplex",ranksep:f,nodesep:m,edgesep:50,marginx:50,marginy:50});const x=new Set,v={};e.forEach(_=>{const T=g[_.id];if(T!==void 0){if(!x.has(T)){x.add(T);const D=o1(y[T],e,n,m,f,i,o);v[T]=D,b.setNode(`__CHAIN_${T}`,{width:D.width,height:D.height})}}else{const{width:D,height:R}=kt(_,n);b.setNode(_.id,{width:D,height:R})}});const k={};t.forEach(_=>{const T=g[_.source],D=g[_.target],R=T!==void 0?`__CHAIN_${T}`:_.source,A=D!==void 0?`__CHAIN_${D}`:_.target;R!==A&&(k[A]=(k[A]||0)+1)}),t.forEach(_=>{const T=g[_.source],D=g[_.target];let R=_.source,A=_.target;if(T!==void 0&&(R=`__CHAIN_${T}`),D!==void 0&&(A=`__CHAIN_${D}`),R!==A){const E=(k[A]||0)>1;b.setEdge(R,A,{weight:E?1:2})}}),Am.layout(b);const S={};for(const _ of e)S[_.id]={..._};const j=[],w=new Set;e.forEach(_=>{if(g[_.id]===void 0){const T=b.node(_.id),D=S[_.id],{width:R,height:A}=kt(D,n);D.position={x:T.x-R/2,y:T.y-A/2},D.data={...D.data,sourcePosition:void 0,targetPosition:void 0},D.sourcePosition=n==="LR"?q.Position.Right:q.Position.Bottom,D.targetPosition=n==="LR"?q.Position.Left:q.Position.Top,j.push(D)}else w.add(_.id)}),y.forEach((_,T)=>{const D=`__CHAIN_${T}`,R=b.node(D),A=v[T],E=R.x-A.width/2+20,P=R.y-A.height/2+20,z=A.cols,J=A.gridKW,B=A.gridKH;_.forEach(($,C)=>{const G=S[$];let Q=0,M=0,F,H;if(n==="TB"){const U=Math.floor(C/z),ee=C%z,ce=U%2===0,de=Math.ceil(_.length/z),Te=U===de-1,Ce=_.length%z||z,W=Te?(z-Ce)*J/2:0;let xe;ce?xe=ee*J+W:xe=(z-1-ee)*J-W;const re=U*B;Q=E+xe,M=P+re;const me=Te?Ce:z;ce?(H=q.Position.Left,F=q.Position.Right,ee===me-1&&C!==_.length-1&&(F=q.Position.Bottom),ee===0&&C!==0&&(H=q.Position.Top)):(H=q.Position.Right,F=q.Position.Left,ee===me-1&&C!==_.length-1&&(F=q.Position.Bottom),ee===0&&C!==0&&(H=q.Position.Top)),C===0&&(H=q.Position.Top),C===_.length-1&&(F=q.Position.Bottom)}else{const U=Math.floor(C/z),ee=C%z,ce=U%2===0,de=Math.ceil(_.length/z),Te=U===de-1,Ce=_.length%z||z,W=Te?Math.max(0,(z-Ce)*B)/2:0,xe=U*J;let re;ce?re=ee*B+W:re=(z-1-ee)*B-W,Q=E+xe,M=P+re;const me=Te?Ce:z;ce?(H=q.Position.Top,F=q.Position.Bottom,ee===me-1&&C!==_.length-1&&(F=q.Position.Right),ee===0&&C!==0&&(H=q.Position.Left)):(H=q.Position.Bottom,F=q.Position.Top,ee===me-1&&C!==_.length-1&&(F=q.Position.Right),ee===0&&C!==0&&(H=q.Position.Left)),C===0&&(H=q.Position.Left),C===_.length-1&&(F=q.Position.Right)}G.position={x:Q,y:M},G.data={...G.data,sourcePosition:F,targetPosition:H},G.sourcePosition=F,G.targetPosition=H,j.push(G)})});const N=j.reduce((_,T)=>({..._,[T.id]:T}),{}),L=t.map(_=>{const T=N[_.source],D=N[_.target];if(!T||!D||w.has(T.id)||T.type!=="decisionNode")return _;const{width:R,height:A}=kt(T,n),{width:E,height:P}=kt(D,n),z={x:T.position.x+R/2,y:T.position.y+A/2},J={x:D.position.x+E/2,y:D.position.y+P/2};let B=null;if(n==="TB"){const $=R*.25;J.x<z.x-$?B="left":J.x>z.x+$&&(B="right")}else{const $=A*.25;J.y<z.y-$?B="top":J.y>z.y+$&&(B="bottom")}return{..._,sourceHandle:B}});return{nodes:j,edges:L}}function Ee(e,t,r={}){const n=r.direction||"TB",o=r.mode||"view",s=e.filter(b=>b.parentId),i=e.filter(b=>!b.parentId);if(s.length===0)return Il(e,t,r);const l=new Map(s.map(b=>[b.id,b])),c={},u=[];t.forEach(b=>{const x=l.get(b.source),v=l.get(b.target);if(x?.parentId&&x.parentId===v?.parentId){const k=x.parentId;c[k]||(c[k]=[]),c[k].push(b)}else u.push(b)});const d={};s.forEach(b=>{const x=b.parentId;d[x]||(d[x]=[]),d[x].push(b)});const p={},h=[];for(const[b,x]of Object.entries(d)){const v=c[b]||[],{positionedChildren:k,containerWidth:S,containerHeight:j}=i1(x,v,n,o);p[b]={width:S,height:j},h.push(...k)}const f=i.map(b=>{if(b.type==="loopNode"&&p[b.id]){const{width:x,height:v}=p[b.id];return{...b,data:{...b.data,_layoutWidth:x,_layoutHeight:v},style:{...b.style,width:x,height:v}}}return b}),{nodes:m,edges:y}=Il(f,u,r);return{nodes:[...m.map(b=>{if(b.type==="loopNode"&&p[b.id]){const{width:x,height:v}=p[b.id];return{...b,width:x,height:v,style:{...b.style,width:x,height:v}}}return b}),...h],edges:[...y,...Object.values(c).flat()]}}function Fe(e,t){if(!e)return null;for(const r of e){if(r.taskReferenceName===t)return r;if(r.decisionCases){for(const o of Object.keys(r.decisionCases)){const s=Fe(r.decisionCases[o],t);if(s)return s}const n=Fe(r.defaultCase,t);if(n)return n}if(r.forkTasks)for(const n of r.forkTasks){const o=Fe(n,t);if(o)return o}if(r.loopOver){const n=Fe(r.loopOver,t);if(n)return n}}return null}function Ze(e,t){if(!e)return!1;const r=e.findIndex(n=>n.taskReferenceName===t);if(r!==-1)return e.splice(r,1),!0;for(const n of e){if(n.decisionCases){for(const o of Object.keys(n.decisionCases))if(Ze(n.decisionCases[o],t))return!0;if(Ze(n.defaultCase,t))return!0}if(n.forkTasks){for(const o of n.forkTasks)if(Ze(o,t))return!0}if(n.loopOver&&Ze(n.loopOver,t))return!0}return!1}function St(e,t){if(!e)return null;if(e.some(r=>r.taskReferenceName===t))return e;for(const r of e){if(r.decisionCases){for(const o of Object.values(r.decisionCases)){const s=St(o,t);if(s)return s}const n=St(r.defaultCase,t);if(n)return n}if(r.forkTasks)for(const n of r.forkTasks){const o=St(n,t);if(o)return o}if(r.loopOver){const n=St(r.loopOver,t);if(n)return n}}return null}function Mm(e,t){const r=e.findIndex(n=>n.taskReferenceName===t);if(r<0)return null;for(let n=r+1;n<e.length;n++)if(e[n].type==="JOIN"||e[n].type==="EXCLUSIVE_JOIN")return e[n].taskReferenceName;return null}function $m(e,t){const r=e.findIndex(n=>n.taskReferenceName===t);if(r<0)return null;for(let n=r-1;n>=0;n--)if(e[n].type==="FORK_JOIN"||e[n].type==="FORK_JOIN_DYNAMIC")return e[n].taskReferenceName;return null}function Ge(e,t,r){if(!e)return!1;if(t==="start")return e.unshift(r),!0;const n=e.findIndex(o=>o.taskReferenceName===t);if(n!==-1)return e.splice(n+1,0,r),!0;for(const o of e){if(o.decisionCases){for(const s of Object.keys(o.decisionCases))if(Ge(o.decisionCases[s],t,r))return!0;if(Ge(o.defaultCase,t,r))return!0}if(o.forkTasks){for(const s of o.forkTasks)if(Ge(s,t,r))return!0}if(o.loopOver&&Ge(o.loopOver,t,r))return!0}return!1}function _t(e,t,r,n){for(const o of e||[]){if(o.taskReferenceName===t){if(r.branchCase==="default")return o.defaultCase||(o.defaultCase=[]),o.defaultCase.unshift(n),!0;if(r.branchCase!==void 0)return o.decisionCases||(o.decisionCases={}),o.decisionCases[r.branchCase]||(o.decisionCases[r.branchCase]=[]),o.decisionCases[r.branchCase].unshift(n),!0;if(r.forkIndex!==void 0)return o.forkTasks||(o.forkTasks=[]),o.forkTasks[r.forkIndex].unshift(n),!0;if(r.isLoopAdd)return o.loopOver||(o.loopOver=[]),o.loopOver.unshift(n),!0}if(o.decisionCases){for(const s of Object.keys(o.decisionCases))if(_t(o.decisionCases[s],t,r,n))return!0;if(_t(o.defaultCase,t,r,n))return!0}if(o.forkTasks){for(const s of o.forkTasks)if(_t(s,t,r,n))return!0}if(o.loopOver&&_t(o.loopOver,t,r,n))return!0}return!1}function Le(e){if(e)for(let t=0;t<e.length;t++){const r=e[t];if(r.type==="FORK_JOIN"&&t+1<e.length){const n=e[t+1];if(n.type==="JOIN"){const o=[];(r.forkTasks||[]).forEach(s=>{s&&s.length>0&&o.push(s[s.length-1].taskReferenceName)}),n.joinOn=o}}r.decisionCases&&(Object.values(r.decisionCases).forEach(n=>Le(n)),r.defaultCase&&Le(r.defaultCase)),r.forkTasks&&r.forkTasks.forEach(n=>Le(n)),r.loopOver&&Le(r.loopOver)}}const l1=[{field:"name",type:"required",message:"工作流名称 (name) 必填"},{field:"version",type:"required",message:"工作流版本 (version) 必填"},{field:"tasks",type:"min_length",value:1,message:"工作流必须包含至少一个任务"}],qm={common:[{field:"name",type:"required",message:"任务类型名称 (name) 必填"},{field:"taskReferenceName",type:"required",message:"引用名 (taskReferenceName) 必填"},{field:"taskReferenceName",type:"pattern",value:/^[a-zA-Z0-9_]+$/,message:"引用名仅允许字母、数字和下划线"},{field:"taskReferenceName",type:"unique",message:"引用名在工作流中必须唯一"}],types:{HTTP:[{field:"inputParameters.http_request.uri",type:"required",message:"HTTP 任务缺少请求地址 (uri) 配置"},{field:"inputParameters.http_request.method",type:"required",level:"warning",message:"HTTP 任务未指定 Method,建议配置"}],INLINE:[{field:"inputParameters.expression",type:"custom",validate:(e,t)=>!!(t?.inputParameters?.expression||t?.inputParameters?.scriptExpression),message:"INLINE 任务缺少脚本表达式 (expression)"}],LAMBDA:[{field:"inputParameters.scriptExpression",type:"required",message:"LAMBDA 任务缺少脚本表达式 (scriptExpression)"}],JSON_JQ_TRANSFORM:[{field:"inputParameters.queryExpression",type:"required",message:"JQ 任务缺少查询表达式 (queryExpression)"}],SUB_WORKFLOW:[{field:"subWorkflowParam.name",type:"required",message:"子工作流任务缺少子流程名称 (name)"}],START_WORKFLOW:[{field:"inputParameters.startWorkflow.name",type:"custom",validate:(e,t)=>!!t?.inputParameters?.startWorkflow?.name,message:"START_WORKFLOW 任务缺少目标工作流名称"}],DYNAMIC:[{field:"dynamicTaskNameParam",type:"required",message:"DYNAMIC 任务缺少 dynamicTaskNameParam 配置"}],TERMINATE:[{field:"inputParameters.terminationStatus",type:"required",level:"warning",message:"终止任务未指定状态 (terminationStatus)"},{field:"inputParameters.terminationStatus",type:"enum",value:["COMPLETED","FAILED"],message:"终止状态必须为 COMPLETED 或 FAILED"}],DO_WHILE:[{field:"loopCondition",type:"custom",validate:(e,t)=>!!(t?.loopCondition||t?.inputParameters?.items),message:"循环任务需要配置退出条件 (loopCondition) 或列表 (items)"}],DECISION:[{field:"decisionCases",type:"custom",validate:e=>Object.keys(e||{}).length>0,message:"决策任务必须至少包含一个分支 (decisionCases)"},{field:"decisionCases",type:"custom",validate:e=>{const t=Object.keys(e||{});return new Set(t).size===t.length},message:"决策分支条件不能重复"}],SWITCH:[{field:"decisionCases",type:"custom",validate:e=>Object.keys(e||{}).length>0,message:"Switch 任务必须至少包含一个分支"}],FORK_JOIN_DYNAMIC:[{field:"dynamicForkTasksParam",type:"custom",validate:(e,t)=>!!(t?.dynamicForkTasksParam||t?.forkTaskType||t?.forkTaskWorkflow),message:"FORK_JOIN_DYNAMIC 任务需要配置 dynamicForkTasksParam 或 forkTaskType 或 forkTaskWorkflow",level:"warning"}]}};class c1{rules=[];setRules(t){this.rules=[...t]}getRules(){return this.rules}hasRules(){return this.rules.length>0}runAll(t){const r=[],n=[];for(const o of this.rules)try{const s=o.validate(t);for(const i of s)o.level==="warning"?n.push(i):r.push(i)}catch{r.push({type:"GLOBAL",ref:"",message:`自定义规则 "${o.id}" 执行异常`})}return{errors:r,warnings:n}}buildPromptSection(){return this.rules.length===0?null:`## 业务校验规则(必须遵守)
7
- 以下规则由集成方定义,生成工作流时必须满足:
8
- ${this.rules.map(r=>`- ${r.description}`).join(`
9
- `)}`}}const zm=new c1,d1=(e,t)=>t.split(".").reduce((r,n)=>r&&r[n]!==void 0?r[n]:void 0,e),Cl=(e,t,r,n)=>{const{errors:o,warnings:s}=n,i=e.taskReferenceName||"GLOBAL";t.forEach(l=>{const c=d1(e,l.field);let u=!0;switch(l.type){case"required":u=c!=null&&c!=="";break;case"min_length":u=Array.isArray(c)&&c.length>=l.value;break;case"pattern":u=l.value.test(c);break;case"enum":u=l.value.includes(c);break;case"unique":l.field==="taskReferenceName"&&c&&(r.taskRefs.has(c)?u=!1:r.taskRefs.add(c));break;case"custom":typeof l.validate=="function"&&(u=l.validate(c,e,r));break}if(!u){const d={type:e.taskReferenceName?"TASK":"GLOBAL",ref:i,message:l.message};l.level==="warning"?s.push(d):o.push(d)}})},Be=e=>{const t=[],r=[],n={taskRefs:new Set,taskMap:{}};if(!e)return{isValid:!1,errors:[{type:"GLOBAL",ref:"",message:"工作流定义为空"}],warnings:[]};if(Cl(e,l1,n,{errors:t,warnings:r}),!e.tasks||e.tasks.length===0)return{isValid:!1,errors:t,warnings:r};const o=i=>{i.forEach(l=>{Cl(l,qm.common,n,{errors:t,warnings:r});const c=qm.types[l.type];c&&Cl(l,c,n,{errors:t,warnings:r}),l.decisionCases&&Object.keys(l.decisionCases).forEach(u=>{o(l.decisionCases[u])}),l.defaultCase&&o(l.defaultCase),l.forkTasks&&l.forkTasks.forEach(u=>o(u)),l.loopOver&&o(l.loopOver)})};o(e.tasks);const s=u1(e.tasks);if(t.push(...s),zm.hasRules()){const i=zm.runAll(e);t.push(...i.errors),r.push(...i.warnings)}return{isValid:t.length===0,errors:t,warnings:r}},u1=e=>{const t=[],r=new Map,n=new Set,o=d=>{for(let p=0;p<d.length;p++){const h=d[p],f=h.taskReferenceName;if(n.add(f),r.has(f)||r.set(f,[]),p<d.length-1){const m=d[p+1].taskReferenceName;h.type!=="FORK_JOIN"&&h.type!=="FORK_JOIN_DYNAMIC"&&r.get(f).push(m)}if(h.decisionCases)for(const m of Object.values(h.decisionCases))m.length>0&&(r.get(f).push(m[0].taskReferenceName),o(m));if(h.defaultCase&&h.defaultCase.length>0&&(r.get(f).push(h.defaultCase[0].taskReferenceName),o(h.defaultCase)),h.forkTasks)for(const m of h.forkTasks)m.length>0&&(r.get(f).push(m[0].taskReferenceName),o(m));if(h.loopOver)for(const m of h.loopOver)n.add(m.taskReferenceName);if(h.joinOn)for(const m of h.joinOn)r.has(m)||r.set(m,[]),r.get(m).push(f)}};o(e);const s=0,i=1,l=2,c=new Map;for(const d of n)c.set(d,s);const u=d=>{c.set(d,i);const p=r.get(d)||[];for(const h of p)if(c.has(h)){if(c.get(h)===i)return t.push({type:"GLOBAL",ref:h,message:`检测到环路:任务 "${d}" → "${h}" 形成了循环依赖`}),!0;if(c.get(h)===s&&u(h))return!0}return c.set(d,l),!1};for(const d of n)c.get(d)===s&&u(d);return t};function p1(e,t){const r=new Set(e),n={};e.forEach(l=>n[l]=0),t.forEach(l=>{r.has(l.source)&&r.has(l.target)&&(n[l.target]=(n[l.target]??0)+1)});const o=[];let s=e.filter(l=>n[l]===0);const i={...n};for(;s.length>0;){o.push([...s]);const l=[];s.forEach(c=>{t.forEach(u=>{u.source===c&&r.has(u.target)&&(i[u.target]--,i[u.target]===0&&l.push(u.target))})}),s=l}return o}function at(e){return!e||e.length===0?[]:typeof e[0]=="string"?e.map(t=>({name:t})):e}class f1{schemas=new Map;setSchemas(t){this.schemas.clear();for(const r of t)this.schemas.set(r.taskName,r)}get(t){return this.schemas.get(t)}getAll(){return Array.from(this.schemas.values())}hasSchemas(){return this.schemas.size>0}buildPromptSection(t){if(!this.hasSchemas())return null;const r=this.getAll(),n=t?.limit,o=n!==void 0&&r.length>n?r.slice(0,Math.max(0,Math.floor(n))):r,s=["## 任务 Schema 注册表(数据流参考)","以下任务的输入/输出字段已注册。生成 inputParameters 时请引用正确的上游输出字段(格式:`${taskRef.output.fieldName}`)。"];for(const i of o){const l=i.taskType?`(${i.taskType})`:"",c=i.description?` — ${i.description}`:"";if(s.push(`
10
- **${i.taskName}** ${l}${c}`),i.inputSchema&&Object.keys(i.inputSchema).length>0){const u=Object.entries(i.inputSchema).map(([d,p])=>`${d}: ${p}`).join(", ");s.push(`- 输入: ${u}`)}if(i.outputSchema&&Object.keys(i.outputSchema).length>0){const u=Object.entries(i.outputSchema).map(([d,p])=>`${d}: ${p}`).join(", ");s.push(`- 输出: ${u}`)}}return o.length<r.length&&s.push(`
11
- (另有 ${r.length-o.length} 个任务的 Schema 未在此列出,引用前可调用 search_workflow_library 查询)`),s.join(`
12
- `)}}const h1=new f1;function wt(e,t,r){if(t.push({task:e,isConditional:r}),e.decisionCases)for(const n of Object.values(e.decisionCases))for(const o of n||[])wt(o,t,!0);if(e.defaultCase)for(const n of e.defaultCase)wt(n,t,!0);if(e.forkTasks)for(const n of e.forkTasks)for(const o of n||[])wt(o,t,r);if(e.loopOver)for(const n of e.loopOver)wt(n,t,r)}function Wm(e,t){if(!e||!Array.isArray(e.tasks))return[];const r=[];function n(s,i){for(let l=0;l<s.length;l++){const c=s[l];if(c.taskReferenceName===t)return!0;if(c.decisionCases||c.defaultCase){for(const u of Object.values(c.decisionCases||{})){const d=[];if(o(u||[],!0,d))return r.push({task:c,isConditional:i}),r.push(...d),!0}if(c.defaultCase){const u=[];if(o(c.defaultCase,!0,u))return r.push({task:c,isConditional:i}),r.push(...u),!0}}if(c.forkTasks)for(const u of c.forkTasks){const d=[];if(o(u||[],i,d))return r.push({task:c,isConditional:i}),r.push(...d),!0}if(c.loopOver){const u=[];if(o(c.loopOver,i,u))return r.push({task:c,isConditional:i}),r.push(...u),!0}wt(c,r,i)}return!1}function o(s,i,l){for(let c=0;c<s.length;c++){const u=s[c];if(u.taskReferenceName===t)return!0;if(u.decisionCases||u.defaultCase){for(const d of Object.values(u.decisionCases||{})){const p=[];if(o(d||[],!0,p))return l.push({task:u,isConditional:i}),l.push(...p),!0}if(u.defaultCase){const d=[];if(o(u.defaultCase,!0,d))return l.push({task:u,isConditional:i}),l.push(...d),!0}}if(u.forkTasks)for(const d of u.forkTasks){const p=[];if(o(d||[],i,p))return l.push({task:u,isConditional:i}),l.push(...p),!0}if(u.loopOver){const d=[];if(o(u.loopOver,i,d))return l.push({task:u,isConditional:i}),l.push(...d),!0}wt(u,l,i)}return!1}return n(e.tasks,!1),r}function Nl(e,t){return Wm(e,t).map(r=>r.task)}function xr(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return e.length>32?`"${e.slice(0,32)}..."`:`"${e}"`;if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e))return`Array(${e.length})`;if(typeof e=="object"){const t=Object.keys(e);return`{ ${t.slice(0,3).join(", ")}${t.length>3?", ...":""} }`}return String(e)}function Rl(e){if(e==null)return"any";if(Array.isArray(e))return"array";const t=typeof e;return t==="string"||t==="number"||t==="boolean"||t==="object"?t:"any"}function El(e,t,r="",n=0,o=3,s=[]){if(!e||typeof e!="object"||n>o)return s;for(const[i,l]of Object.entries(e)){const c=r?`${r}.${i}`:i,u=Rl(l);s.push({path:c,expression:`\${${t}.output.${c}}`,valueType:u,sampleValue:xr(l),source:"runtime_sample"}),u==="object"&&l!==null&&Object.keys(l).length>0&&n<o?El(l,t,c,n+1,o,s):u==="array"&&Array.isArray(l)&&l.length>0&&typeof l[0]=="object"&&l[0]!==null&&n<o&&El(l[0],t,`${c}[0]`,n+1,o,s)}return s}function Fm(e,t){const r=e.taskReferenceName,n=new Map,o=t?.[r]?.output;if(o&&typeof o=="object"){const l=El(o,r);for(const c of l)n.set(c.path,c)}const s=h1.get(e.name);if(s?.outputSchema){for(const[l,c]of Object.entries(s.outputSchema))if(!n.has(l)){const u=c.toLowerCase(),d=u.includes("number")||u.includes("int")?"number":u.includes("bool")?"boolean":u.includes("array")||u.includes("[]")?"array":u.includes("object")?"object":"string";n.set(l,{path:l,expression:`\${${r}.output.${l}}`,valueType:d,description:c,source:"schema_registry"})}}const i=(l,c,u)=>{n.has(l)||n.set(l,{path:l,expression:`\${${r}.output.${l}}`,valueType:c,description:u,source:"task_type_contract"})};switch(e.type){case"HTTP":i("response.body","object","HTTP 响应体 JSON 数据"),i("response.statusCode","number","HTTP 状态码 (如 200)"),i("response.headers","object","HTTP 响应头");break;case"JSON_JQ_TRANSFORM":i("result","any","JQ 表达式单值计算结果"),i("resultList","array","JQ 表达式列表计算结果");break;case"DO_WHILE":i("iteration","number","当前循环迭代轮次 (从 1 开始)");break;case"SUB_WORKFLOW":i("workflowId","string","子工作流实例 ID"),i("result","object","子工作流返回输出");break;case"HUMAN":i("approved","boolean","人工审批结果"),i("comment","string","审批意见备注"),i("assignee","string","实际审批人");break;default:n.size===0&&(i("result","any",`${e.name||r} 默认执行结果`),i("data","object",`${e.name||r} 业务输出对象`));break}return Array.from(n.values())}function Bm(e,t,r,n){if(!e)return[];const o=[],s=at(e.inputParameters);if(s.length>0)for(const u of s){const d=n?.[u.name]??u.defaultValue;o.push({label:`workflow.input.${u.name}`,value:`\${workflow.input.${u.name}}`,category:"workflow_input",valueType:u.type==="number"?"number":u.type==="boolean"?"boolean":u.type==="object"?"object":u.type==="array"?"array":"string",sourceRef:"workflow.input",sourceLabel:"工作流输入",description:u.description||`工作流启动参数 ${u.name}`,sampleValue:d!==void 0&&d!==""?xr(d):void 0})}else if(n&&typeof n=="object")for(const[u,d]of Object.entries(n))o.push({label:`workflow.input.${u}`,value:`\${workflow.input.${u}}`,category:"workflow_input",valueType:Rl(d),sourceRef:"workflow.input",sourceLabel:"工作流输入",description:`工作流运行态输入字段 ${u}`,sampleValue:xr(d)});else o.push({label:"workflow.input.data",value:"${workflow.input.data}",category:"workflow_input",valueType:"any",sourceRef:"workflow.input",sourceLabel:"工作流输入",description:"引用工作流启动时传入的参数(可在全局设置中定义 inputParameters)"});const i=Wm(e,t),l=new Set;for(let u=i.length-1;u>=0;u--){const{task:d,isConditional:p}=i[u];if(d.type==="SET_VARIABLE"&&d.inputParameters){for(const[f,m]of Object.entries(d.inputParameters))l.has(f)||(l.add(f),o.push({label:`workflow.variables.${f}`,value:`\${workflow.variables.${f}}`,category:"variable",valueType:Rl(m),sourceRef:d.taskReferenceName,sourceLabel:`变量 (${d.name||d.taskReferenceName})`,description:`由上游 SET_VARIABLE 节点 [${d.taskReferenceName}] 设置的全局变量`,sampleValue:xr(m),isConditional:p}));continue}if(d.type==="JOIN"||d.type==="TERMINATE")continue;const h=Fm(d,r);for(const f of h)o.push({label:`${d.taskReferenceName}.output.${f.path}`,value:f.expression,category:"upstream",valueType:f.valueType,sourceRef:d.taskReferenceName,sourceLabel:`${d.name||d.taskReferenceName} (${d.type})`,description:f.description||`来自上游任务 [${d.name||d.taskReferenceName}] 的输出字段`,sampleValue:f.sampleValue,isConditional:p})}const c=[{key:"workflow.workflowId",desc:"当前工作流执行实例唯一 ID"},{key:"workflow.correlationId",desc:"外部业务关联 ID (Correlation ID)"},{key:"workflow.status",desc:"当前工作流状态"},{key:"workflow.version",desc:"当前工作流定义版本号"}];for(const u of c)o.push({label:u.key,value:`\${${u.key}}`,category:"system",valueType:"string",sourceRef:"workflow",sourceLabel:"系统元数据",description:u.desc});return o}function pt(e,t=[]){if(!e)return t;for(const r of e){if(t.push(r),r.decisionCases)for(const n of Object.values(r.decisionCases))pt(n,t);if(r.defaultCase&&pt(r.defaultCase,t),r.forkTasks)for(const n of r.forkTasks)pt(n,t);r.loopOver&&pt(r.loopOver,t)}return t}function Tt(e,t=[]){if(typeof e=="string"){const r=/\$\{([^}]+)\}/g;let n;for(;(n=r.exec(e))!==null;)t.push(n[1].trim())}else if(Array.isArray(e))for(const r of e)Tt(r,t);else if(e&&typeof e=="object")for(const r of Object.values(e))Tt(r,t);return t}function Hm(e){if(!e||!Array.isArray(e.tasks))return{edges:[],diagnostics:[]};const t=pt(e.tasks),r=new Map,n=new Map;for(const l of t)if(r.set(l.taskReferenceName,l),l.type==="SET_VARIABLE"&&l.inputParameters)for(const c of Object.keys(l.inputParameters))n.set(c,l.taskReferenceName);const o=[],s=[],i=new Set;for(const l of t){const c=l.taskReferenceName,u=new Set(Nl(e,c).map(p=>p.taskReferenceName)),d=[];Tt(l.inputParameters,d),Tt(l.httpRequest,d),l.loopCondition&&Tt(l.loopCondition,d),l.expression&&Tt(l.expression,d);for(const p of d){if(p.startsWith("workflow.input.")||p==="workflow.input")continue;if(p.startsWith("workflow.variables.")){const f=p.slice(19).split(".")[0],m=n.get(f);if(m&&m!==c){const y=u.has(m),g=`dfg-${m}->${c}-var:${f}`;i.has(g)||(i.add(g),o.push({id:g,sourceRef:m,targetRef:c,fieldPath:`variables.${f}`,expression:`\${${p}}`,sourceType:"workflow_variable",isValidUpstream:y,issue:y?void 0:"forward_ref"}))}continue}if(p.startsWith("workflow."))continue;const h=p.split(".");if(h.length>=2&&(h[1]==="output"||h[1]==="input")){const f=h[0],m=h.slice(2).join(".")||h[1];if(f===c)continue;const y=r.has(f),g=u.has(f);let b;y?g||(b="forward_ref",s.push({taskRef:c,expression:`\${${p}}`,issue:"forward_ref",message:`任务 [${c}] 引用了非上游或互斥分支任务 "${f}" 的输出`})):(b="undefined_ref",s.push({taskRef:c,expression:`\${${p}}`,issue:"undefined_ref",message:`任务 [${c}] 引用了不存在的任务 "${f}"`}));const x=`dfg-${f}->${c}-${m}`;i.has(x)||(i.add(x),o.push({id:x,sourceRef:f,targetRef:c,fieldPath:m,expression:`\${${p}}`,sourceType:"task_output",isValidUpstream:y&&g,issue:b}))}}}return{edges:o,diagnostics:s}}function Um(e,t,r){const n=t.trim(),o=r.trim();if(!n||!o||n===o)return{updatedDef:e,replacedCount:0,affectedTaskRefs:[]};const s=JSON.parse(JSON.stringify(e));let i=0;const l=new Set,c=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),u=new RegExp(`\\$\\{\\s*${c}(\\.|\\s*\\})`,"g"),d=new RegExp(`\\$\\.\\b${c}\\b`,"g");function p(f,m){if(typeof f=="string"){let y=f;return u.lastIndex=0,u.test(y)&&(y=y.replace(u,(g,b)=>(i++,l.add(m),`\${${o}${b}`))),d.lastIndex=0,d.test(y)&&(y=y.replace(d,()=>(i++,l.add(m),`$.${o}`))),y}if(Array.isArray(f))return f.map(y=>p(y,m));if(f&&typeof f=="object"){const y={};for(const[g,b]of Object.entries(f))y[g]=p(b,m);return y}return f}const h=pt(s.tasks);for(const f of h){const m=f.taskReferenceName===n?o:f.taskReferenceName;f.taskReferenceName===n&&(f.taskReferenceName=o),f.inputParameters&&(f.inputParameters=p(f.inputParameters,m)),f.httpRequest&&(f.httpRequest=p(f.httpRequest,m)),f.loopCondition&&(f.loopCondition=p(f.loopCondition,m)),f.expression&&(f.expression=p(f.expression,m)),Array.isArray(f.joinOn)&&(f.joinOn=f.joinOn.map(y=>y===n?(i++,l.add(m),o):y)),Array.isArray(f.defaultExclusiveJoinTask)&&(f.defaultExclusiveJoinTask=f.defaultExclusiveJoinTask.map(y=>y===n?(i++,l.add(m),o):y))}return s.outputParameters&&(s.outputParameters=p(s.outputParameters,"__workflow_output__")),l.delete(o),{updatedDef:s,replacedCount:i,affectedTaskRefs:Array.from(l)}}function Jm(e){return!e||typeof e!="object"?null:e.__isMockOverride||"outputData"in e||"forceCase"in e||"durationMs"in e||"status"in e&&(e.status==="COMPLETED"||e.status==="FAILED"||e.status==="TIMED_OUT"||e.status==="COMPLETED_WITH_ERRORS")&&Object.keys(e).every(t=>["__isMockOverride","status","durationMs","forceCase","outputData","reasonForIncompletion"].includes(t))?e:{__isMockOverride:!0,outputData:e}}function br(e,t){if(!e||!t)return;const r=t.split(".");let n=e;for(const o of r){if(n==null)return;n=n[o]}return n}function vr(e,t){if(typeof e=="string"){const r=e.match(/^\$\{([^}]+)\}$/);if(r){const n=Km(r[1].trim(),t);return n!==void 0?n:e}return e.replace(/\$\{([^}]+)\}/g,(n,o)=>{const s=Km(o.trim(),t);return s===void 0?n:typeof s=="object"?JSON.stringify(s):String(s)})}if(Array.isArray(e))return e.map(r=>vr(r,t));if(e&&typeof e=="object"){const r={};for(const[n,o]of Object.entries(e))r[n]=vr(o,t);return r}return e}function Km(e,t){if(e==="workflow.input")return t.workflowInput;if(e.startsWith("workflow.input."))return br(t.workflowInput,e.slice(15));if(e==="workflow.variables")return t.variables;if(e.startsWith("workflow.variables."))return br(t.variables,e.slice(19));if(e==="workflow.workflowId")return"sandbox-dryrun-wf-001";if(e==="workflow.correlationId")return"corr-sandbox-9921";const r=e.indexOf(".output");if(r>0){const n=e.slice(0,r),o=e.slice(r+7),s=t.taskOutputs[n];if(!s)return;if(!o||o==="")return s;if(o.startsWith("."))return br(s,o.slice(1))}}function kr(e,t={},r){switch(e.type){case"HTTP":{const n=t.http_request||e.httpRequest||t;return{response:{statusCode:200,headers:{"content-type":"application/json","x-sandbox":"true"},body:{code:0,status:"SUCCESS",message:`Simulated HTTP ${n?.method||"GET"} response for ${e.name}`,requestEcho:n?.uri||"/api/v1/resource",data:{id:`res_${e.taskReferenceName}_${r||1}`,verified:!0,score:95,items:[{id:1,name:"item-alpha"},{id:2,name:"item-beta"}]}}}}}case"JSON_JQ_TRANSFORM":{const n=t.queryExpression||e.inputParameters?.queryExpression||".";if(n==="."||!n){const o={...t};return delete o.queryExpression,{result:o,resultList:[o]}}if(typeof n=="string"&&n.startsWith(".")){const o=n.slice(1).replace(/\[\]/g,""),s=o?br(t,o):t;return{result:s!==void 0?s:{transformed:!0,expression:n},resultList:Array.isArray(s)?s:[s??{transformed:!0}]}}return{result:{transformed:!0,queryExpression:n,sourceKeys:Object.keys(t)},resultList:[{transformed:!0}]}}case"SET_VARIABLE":return{variables:{...Object.keys(t).length?t:e.inputParameters||{}}};case"INLINE":return{result:{evaluated:!0,evaluatorType:t.evaluatorType||e.evaluatorType||"graaljs",summary:`Executed inline script for ${e.taskReferenceName}`,...t}};case"EVENT":return{event_produced:`conductor:event:${e.sink||e.name}`,payload:t};case"WAIT":return{waited:!0,duration:t.duration||"1s"};case"TERMINATE":return{terminationStatus:t.terminationStatus||"COMPLETED",terminationReason:t.terminationReason||"Terminated in sandbox dry-run",output:t.workflowOutput||{}};default:return{code:0,status:"OK",result:`Simulated output from ${e.name}`,processedAt:new Date().toISOString(),iteration:r??1,inputEcho:t,data:{id:`${e.taskReferenceName}_out_${r||1}`,approved:!0,amount:t.amount??100}}}}function m1(e,t,r,n){const o=Jm(r.taskMocks[e.taskReferenceName]);if(o?.outputData)return e.type==="SET_VARIABLE"&&Object.assign(r.variables,o.outputData),structuredClone(o.outputData);e.type==="SET_VARIABLE"&&Object.assign(r.variables,t);const s=kr(e,t,n);return s.processedAt&&(s.processedAt=new Date(r.currentTimeMs).toISOString()),s}function g1(e,t,r,n){if(n)return n;const o=Object.keys(r);if(o.length===0)return"default";const s=e.caseValueParam||"case_value",i=t[s]??e.expression;if(i!=null){const l=String(i).trim();if(r[l])return l;for(const c of o)if(l.includes(c))return c}return o[0]}function Sr(e,t,r){for(const n of e){const o=y1(n,t,r);if(o==="FAILED"||o==="TERMINATED")return o}return"COMPLETED"}function y1(e,t,r){t.seqCounter+=1;const n=t.seqCounter,o=t.currentTimeMs,s=8+n%5*4,i=o+s;t.currentTimeMs=i;const l=Jm(t.taskMocks[e.taskReferenceName]),c=vr(e.inputParameters||{},t),u=r&&r>1?`${e.taskReferenceName}__${r}`:e.taskReferenceName;if(e.type==="SWITCH"||e.type==="DECISION"){const x=e.decisionCases||{},v=g1(e,c,x,l?.forceCase),k=v==="__default__"?e.defaultCase||[]:x[v]||e.defaultCase||[],S={taskId:`sandbox-task-${n}`,taskType:e.type,taskDefName:e.name,referenceTaskName:u,status:"COMPLETED",scheduledTime:o,startTime:i,endTime:i+(l?.durationMs??12),seq:n,pollCount:1,retryCount:0,iteration:r,inputData:{...c,case_value_param:v},outputData:l?.outputData||{selectedCase:v==="__default__"?"defaultCase":v,evaluatedExpression:e.expression||e.caseValueParam||"default"},workflowTask:e};return t.currentTimeMs=S.endTime,t.taskOutputs[e.taskReferenceName]=S.outputData,t.tasks.push(S),Sr(k,t,r)}if(e.type==="FORK_JOIN"){const x=e.forkTasks||[],v=i,k={taskId:`sandbox-task-${n}`,taskType:"FORK_JOIN",taskDefName:e.name,referenceTaskName:u,status:"COMPLETED",scheduledTime:o,startTime:v,endTime:v+10,seq:n,pollCount:1,retryCount:0,iteration:r,inputData:c,outputData:{forkedBranches:x.length},workflowTask:e};t.tasks.push(k);const S=v+10;let j=S;for(const w of x){t.currentTimeMs=S;const N=Sr(w,t,r);if(t.currentTimeMs>j&&(j=t.currentTimeMs),N!=="COMPLETED")return N}return t.currentTimeMs=j,t.taskOutputs[e.taskReferenceName]=k.outputData,"COMPLETED"}if(e.type==="JOIN"){const x=e.joinOn||[],v={};for(const j of x)t.taskOutputs[j]&&(v[j]=t.taskOutputs[j]);const k=i+15,S={taskId:`sandbox-task-${n}`,taskType:"JOIN",taskDefName:e.name,referenceTaskName:u,status:"COMPLETED",scheduledTime:o,startTime:i,endTime:k,seq:n,pollCount:1,retryCount:0,iteration:r,inputData:{joinOn:x},outputData:v,workflowTask:e};return t.currentTimeMs=k,t.taskOutputs[e.taskReferenceName]=v,t.tasks.push(S),"COMPLETED"}if(e.type==="DO_WHILE"){const x=e.loopOver||[],v=Math.max(1,Math.min(t.maxLoopIterations,10)),k={taskId:`sandbox-task-${n}`,taskType:"DO_WHILE",taskDefName:e.name,referenceTaskName:u,status:"COMPLETED",scheduledTime:o,startTime:i,endTime:i,seq:n,pollCount:1,retryCount:0,iteration:v,inputData:{loopCondition:e.loopCondition,resolvedInput:c},outputData:{iteration:v},workflowTask:e};t.tasks.push(k);const S={};for(let j=1;j<=v;j++){const w=Sr(x,t,j);S[String(j)]={};for(const N of x)t.taskOutputs[N.taskReferenceName]&&(S[String(j)][N.taskReferenceName]=t.taskOutputs[N.taskReferenceName]);if(w!=="COMPLETED")return k.endTime=t.currentTimeMs,w}return k.endTime=t.currentTimeMs+10,k.outputData={iteration:v,...S},t.currentTimeMs=k.endTime,t.taskOutputs[e.taskReferenceName]=k.outputData,"COMPLETED"}const d=e.type==="HTTP"?145+n%4*35:e.type==="SIMPLE"?85+n%5*30:28+n%3*12,p=typeof l?.durationMs=="number"&&l.durationMs>=0?l.durationMs:d,h=i+p,f=m1(e,c,t,r),m=e.type==="TERMINATE"&&c.terminationStatus==="FAILED",y=l?.status||(m?"FAILED_WITH_TERMINAL_ERROR":"COMPLETED"),g=y==="FAILED"||y==="FAILED_WITH_TERMINAL_ERROR"||y==="TIMED_OUT",b={taskId:`sandbox-task-${n}`,taskType:e.type,taskDefName:e.name,referenceTaskName:u,status:y,scheduledTime:o,startTime:i,endTime:h,seq:n,pollCount:1,retryCount:0,iteration:r,workerId:"browser-local-sandbox-worker",inputData:c,outputData:f,reasonForIncompletion:g?l?.reasonForIncompletion||(m?c.terminationReason||"Terminated with FAILED status":`沙箱人工模拟任务异常 (${y})`):void 0,workflowTask:e};return t.currentTimeMs=h,t.taskOutputs[e.taskReferenceName]=f,t.tasks.push(b),g?"FAILED":e.type==="TERMINATE"?m?"FAILED":"TERMINATED":"COMPLETED"}function qt(e){const t={orderId:"ORD-2026-88412",userId:"usr_99201",amount:299,currency:"CNY",env:"sandbox"};if(Array.isArray(e.inputParameters))for(const r of e.inputParameters){const n=typeof r=="string"?r:r?.name,o=typeof r=="object"&&r!==null?r.example??r.defaultValue??`sample_${n}`:`sample_${n}`;n&&!(n in t)&&(t[n]=o)}try{const r=JSON.stringify(e.tasks||[]),n=/\$\{\s*workflow\.input\.([a-zA-Z0-9_]+)/g;let o;for(;(o=n.exec(r))!==null;){const s=o[1];s&&!(s in t)&&(t[s]=`mock_${s}`)}}catch{}return t}function zt(e,t={}){const r=Date.now()-2e3,n=t.workflowInput||qt(e),o={workflowInput:n,variables:{},taskOutputs:{},taskMocks:t.taskMocks||{},tasks:[],currentTimeMs:r,maxLoopIterations:t.maxLoopIterations??2,seqCounter:0},s=Sr(e.tasks||[],o),i={};if(e.outputParameters&&Object.keys(e.outputParameters).length>0)Object.assign(i,vr(e.outputParameters,o));else{const c=o.tasks[o.tasks.length-1];c?.outputData&&Object.assign(i,c.outputData)}const l=s==="FAILED"?"FAILED":s==="TERMINATED"?"TERMINATED":"COMPLETED";return{workflowId:`sandbox-dryrun-${Date.now().toString(36)}`,workflowName:e.name||"sandbox_workflow",workflowVersion:e.version||1,status:l,startTime:r,endTime:o.currentTimeMs,createTime:r,updateTime:o.currentTimeMs,input:n,output:i,variables:o.variables,tasks:o.tasks,workflowDefinition:structuredClone(e)}}function Wt(e,t=[]){return Array.isArray(e)&&e.forEach((r,n)=>{if(r){if(r.type==="FORK_JOIN_DYNAMIC"){for(let o=n+1;o<e.length;o++)if(e[o]?.type==="JOIN"||e[o]?.type==="EXCLUSIVE_JOIN"){t.push({forkRef:r.taskReferenceName,joinRef:e[o].taskReferenceName});break}}r.decisionCases&&Object.values(r.decisionCases).forEach(o=>Wt(o,t)),r.defaultCase&&Wt(r.defaultCase,t),Array.isArray(r.forkTasks)&&r.forkTasks.forEach(o=>Wt(o,t)),Array.isArray(r.loopOver)&&Wt(r.loopOver,t)}}),t}let Vm=null,Pl=[];function x1(e){return e===Vm||(Vm=e,Pl=e.map(t=>Object.assign({},t,{selected:!1}))),Pl}const ie=qr()(pc(Dy((e,t)=>({mode:"view",workflowDef:null,workflowInstance:null,nodes:[],edges:[],taskMap:{},layoutDirection:"TB",selectedTask:null,selectedTaskInstance:null,isDetailPanelOpen:!1,executionData:null,dynamicRuntimeTasksByFork:{},validationResults:{isValid:!0,errors:[],warnings:[]},theme:"dark",themeColor:"blue",edgeType:"smoothstep",nodesLocked:!0,copiedTask:null,viewMode:"business",simState:{},isSimRunning:!1,workflowLoadKey:0,graphStale:!1,runState:"idle",pendingExecutionId:null,executionError:null,showRunPanel:!1,showAnalysisPanel:!1,focusedParamKey:null,showDataLineage:!1,lastRefactorNotice:null,showWaterfallPanel:!1,timeTravelTimestamp:null,activeLoopIterations:{},inlineCopilotTaskRef:null,setWorkflow:(r,n)=>{const o=n||t().layoutDirection,s=JSON.parse(JSON.stringify(r));Le(s.tasks);const{nodes:i,edges:l,taskMap:c}=Ae(s,o,{hideEmptyBranches:t().mode!=="edit"}),{nodes:u,edges:d}=Ee(i,l,{direction:o,mode:t().mode}),p=Be(s);e({workflowDef:s,nodes:u,edges:d,taskMap:c,validationResults:p,layoutDirection:o,workflowLoadKey:t().workflowLoadKey+1,graphStale:!1})},setWorkflowDefOnly:r=>{const n=JSON.parse(JSON.stringify(r));Le(n.tasks),e({workflowDef:n,validationResults:Be(n),graphStale:!0})},refreshGraph:()=>{const{graphStale:r,workflowDef:n,layoutDirection:o,mode:s}=t();if(!r||!n)return;const{nodes:i,edges:l,taskMap:c}=Ae(n,o,{hideEmptyBranches:s!=="edit"}),{nodes:u,edges:d}=Ee(i,l,{direction:o,mode:s});e({nodes:u,edges:d,taskMap:c,graphStale:!1})},setMode:r=>{t().mode==="run"&&r!=="run"&&e({executionData:null,workflowInstance:null,dynamicRuntimeTasksByFork:{},timeTravelTimestamp:null,showWaterfallPanel:!1,activeLoopIterations:{}}),e({mode:r});const{workflowDef:o,layoutDirection:s}=t();if(o){const{nodes:i,edges:l,taskMap:c}=Ae(o,s,{hideEmptyBranches:r!=="edit"}),{nodes:u,edges:d}=Ee(i,l,{direction:s,mode:r});e({nodes:u,edges:d,taskMap:c,graphStale:!1})}},setExecutionData:r=>e({executionData:r,dynamicRuntimeTasksByFork:r===null?{}:t().dynamicRuntimeTasksByFork}),updateTaskStatus:(r,n)=>{const{executionData:o}=t();if(!o)return;const s={...o};s[r]&&(s[r]={...s[r],status:n},e({executionData:s}))},loadSampleExecution:async()=>{try{const n=await(await fetch("/sample-workflows/sample-execution.json")).json();t().importExecutionJSON(n)}catch(r){console.error("Failed to load sample execution:",r),alert("加载示例运行数据失败")}},importExecutionJSON:r=>{if(!r)return;let n=[],o=null,s=t().workflowDef;if(Array.isArray(r.tasks)?(n=r.tasks,r.workflowId&&r.status&&(o=r,r.workflowDefinition&&(s=r.workflowDefinition))):Array.isArray(r)&&(n=r),n.length===0)return;s&&JSON.stringify(s)!==JSON.stringify(t().workflowDef)&&t().setWorkflow(s);const i=t().taskMap,l={},c=(f,m,y)=>{const g=y!==void 0&&m.iteration===void 0?{...m,iteration:y}:m;l[f]||(l[f]={taskReferenceName:f,status:g.status,attempts:[],startTime:g.startTime,endTime:g.endTime,output:g.outputData,input:g.inputData,reasonForIncompletion:g.reasonForIncompletion,iteration:g.iteration}),l[f].attempts.push(g)};n.forEach(f=>{const m=f.referenceTaskName;if(!m)return;const y=m.match(/^(.+)__(\d+)$/);if(y&&i[y[1]]){const g=y[1],b=parseInt(y[2],10);c(g,f,b)}c(m,f)}),Object.values(l).forEach(f=>{f.attempts.some(g=>g.iteration!==void 0&&g.iteration>0)?(f.attempts.sort((g,b)=>(g.iteration??0)-(b.iteration??0)),f.totalIterations=f.attempts.reduce((g,b)=>Math.max(g,b.iteration??0),0),f.startTime=f.attempts[0]?.startTime):f.attempts.sort((g,b)=>(g.retryCount??0)-(b.retryCount??0));const y=f.attempts[f.attempts.length-1];y&&(f.status=y.status,f.endTime=y.endTime,f.output=y.outputData,f.input=y.inputData,f.reasonForIncompletion=y.reasonForIncompletion,f.iteration=y.iteration)});const d=t().workflowDef?.tasks||[],p=Wt(d),h={};p.forEach(({forkRef:f,joinRef:m})=>{const y=n.findIndex(x=>x.referenceTaskName===f),g=n.findIndex(x=>x.referenceTaskName===m);if(y<0||g<0)return;const b=new Set;h[f]=n.slice(y+1,g).filter(x=>!x.referenceTaskName||!x.taskId||i[x.referenceTaskName]||b.has(x.referenceTaskName)?!1:(b.add(x.referenceTaskName),!0)).map(x=>x)}),e({executionData:l,dynamicRuntimeTasksByFork:h,workflowInstance:o,timeTravelTimestamp:null,activeLoopIterations:{},mode:"run"})},setSelectedTask:r=>e({selectedTask:r?{...r}:null}),setIsDetailPanelOpen:r=>e({isDetailPanelOpen:r}),selectTaskAction:(r,n=!0)=>{e({selectedTask:r?{...r}:null,isDetailPanelOpen:r?n:!1,selectedTaskInstance:null})},setSelectedTaskInstance:r=>e({selectedTaskInstance:r}),setLayoutDirection:r=>{const{workflowDef:n}=t();if(n){const{nodes:o,edges:s,taskMap:i}=Ae(n,r,{hideEmptyBranches:t().mode!=="edit"}),{nodes:l,edges:c}=Ee(o,s,{direction:r,mode:t().mode});e({nodes:l,edges:c,taskMap:i,layoutDirection:r})}else e({layoutDirection:r})},onNodesChange:r=>{const n=t().nodes,o=new Set(n.map(i=>i.id)),s=r.filter(i=>"id"in i&&o.has(i.id));s.length!==0&&e({nodes:q.applyNodeChanges(s,n)})},onEdgesChange:r=>{const n=t().edges,o=q.applyEdgeChanges(r,n);o!==n&&e({edges:o})},onConnect:r=>{const{edges:n,layoutDirection:o}=t(),s=q.addEdge(r,n),{nodes:i,edges:l}=Ee(t().nodes,s,{direction:o,mode:t().mode});e({edges:l,nodes:i})},checkTaskRefUniqueness:(r,n)=>{if(r===n)return!0;const{taskMap:o}=t();return!o[r]},updateTask:(r,n,o)=>{const{workflowDef:s,layoutDirection:i}=t();if(!s)return;let l=JSON.parse(JSON.stringify(s)),c=t().lastRefactorNotice;const u=typeof n=="object"?Object.keys(n):[n],d=typeof n=="object"?n.taskReferenceName:n==="taskReferenceName"?o:void 0;let p=r;if(typeof d=="string"&&d.trim()&&d.trim()!==r){const f=d.trim(),m=Um(l,r,f);l=m.updatedDef,p=f,m.replacedCount>0&&(c={oldRef:r,newRef:f,replacedCount:m.replacedCount,affectedTasks:m.affectedTaskRefs,timestamp:Date.now()})}const h=Fe(l.tasks,p);if(h){typeof n=="object"?Object.assign(h,n,{taskReferenceName:p}):n!=="taskReferenceName"&&(h[n]=o),Le(l.tasks);const f=Be(l),m=new Set(["taskReferenceName","type","decisionCases","defaultCase","forkTasks","loopOver","joinOn"]);if(u.some(g=>m.has(g))){const{nodes:g,edges:b,taskMap:x}=Ae(l,i,{hideEmptyBranches:t().mode!=="edit"}),{nodes:v,edges:k}=Ee(g,b,{direction:i,mode:t().mode}),S=t().selectedTask?.taskReferenceName===r?h:t().selectedTask;e({workflowDef:l,nodes:v,edges:k,taskMap:x,selectedTask:S,validationResults:f,lastRefactorNotice:c})}else{const g=t().nodes.map(v=>v.data?.taskReferenceName===r?{...v,data:{...v.data,label:h.name||v.data.label,task:h,loopCondition:h.loopCondition??v.data.loopCondition,subWorkflowName:h.subWorkflowParam?.name??v.data.subWorkflowName}}:v),b={...t().taskMap,[r]:h},x=t().selectedTask?.taskReferenceName===r?h:t().selectedTask;e({workflowDef:l,nodes:g,taskMap:b,selectedTask:x,validationResults:f})}}},updateWorkflowProperties:r=>{const{workflowDef:n,layoutDirection:o}=t();if(!n)return;const s=JSON.parse(JSON.stringify(n));Object.assign(s,r),Le(s.tasks);const i=Be(s);if("tasks"in r){const{nodes:l,edges:c,taskMap:u}=Ae(s,o,{hideEmptyBranches:t().mode!=="edit"}),{nodes:d,edges:p}=Ee(l,c,{direction:o,mode:t().mode});e({workflowDef:s,nodes:d,edges:p,taskMap:u,validationResults:i})}else e({workflowDef:s,validationResults:i})},addNode:(r,n,o,s,i={})=>{const{workflowDef:l,layoutDirection:c}=t();if(!l)return;const u=JSON.parse(JSON.stringify(l)),d={name:r.data.label,taskReferenceName:r.data.taskReferenceName,type:r.data.taskType||"SIMPLE",inputParameters:{}};switch(d.type){case"HTTP":d.httpRequest={method:"GET",uri:"https://example.com/api",headers:{"Content-Type":"application/json"},body:{}};break;case"KAFKA_PUBLISH":d.inputParameters={topic:"my_topic",value:"${workflow.input.value}",bootStrapServers:"localhost:9092",headers:{},key:"msg_key"};break;case"JSON_JQ_TRANSFORM":d.inputParameters={queryExpression:".name",input:{}};break;case"SET_VARIABLE":d.inputParameters={variableName:"variableValue"};break;case"SUB_WORKFLOW":d.subWorkflowParam={name:"execution_workflow",version:1};break;case"EVENT":d.sink="conductor";break;case"WAIT":d.inputParameters={duration:"30s"};break;case"TERMINATE":d.inputParameters={terminationStatus:"COMPLETED",workflowOutput:{}};break}if(d.type==="FORK_JOIN"||d.type==="FORK_JOIN_DYNAMIC"){d.type==="FORK_JOIN"?d.forkTasks=[[],[]]:(d.dynamicForkTasksParam="dynamic_tasks",d.dynamicForkTasksInputParamName="input");const b={name:`${d.name}_join`,taskReferenceName:`${d.taskReferenceName}_join`,type:"JOIN",joinOn:[]};if(i.isWorkflowStart)u.tasks.unshift(b),u.tasks.unshift(d);else if(i.isLoopBodyStart){const x=Fe(u.tasks,n);x&&(x.loopOver||(x.loopOver=[]),x.loopOver.unshift(b),x.loopOver.unshift(d))}else i.branchCase!==void 0||i.forkIndex!==void 0||i.isLoopAdd?(_t(u.tasks,n,i,d),Ge(u.tasks,d.taskReferenceName,b)):u.tasks.length===0?u.tasks.push(d,b):(Ge(u.tasks,n,d),Ge(u.tasks,d.taskReferenceName,b))}else if(d.type==="DECISION"||d.type==="SWITCH"?(d.evaluatorType="value-param",d.caseValueParam="case_param",d.decisionCases={case1:[]},d.defaultCase=[]):d.type==="DO_WHILE"?(d.loopCondition="$.taskReferenceName.output.value < 10",d.loopOver=[]):d.type==="INLINE"?(d.evaluatorType="graaljs",d.inputParameters={expression:`function execute(input) {
6
+ <%s key={someKey} {...props} />`,D,G,ne,G),W[G+D]=!0)}if(G=null,X!==void 0&&(r(X),G=""+X),i($)&&(r($.key),G=""+$.key),"key"in $){X={};for(var ye in $)ye!=="key"&&(X[ye]=$[ye])}else X=$;return G&&l(X,typeof P=="function"?P.displayName||P.name||"Unknown":P),d(P,G,X,s(),B,U)}function p(P){f(P)?P._store&&(P._store.validated=1):typeof P=="object"&&P!==null&&P.$$typeof===I&&(P._payload.status==="fulfilled"?f(P._payload.value)&&P._payload.value._store&&(P._payload.value._store.validated=1):P._store&&(P._store.validated=1))}function f(P){return typeof P=="object"&&P!==null&&P.$$typeof===h}var m=T,h=Symbol.for("react.transitional.element"),y=Symbol.for("react.portal"),x=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),v=Symbol.for("react.profiler"),k=Symbol.for("react.consumer"),b=Symbol.for("react.context"),S=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),_=Symbol.for("react.suspense_list"),w=Symbol.for("react.memo"),I=Symbol.for("react.lazy"),C=Symbol.for("react.activity"),N=Symbol.for("react.client.reference"),O=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,E=Object.prototype.hasOwnProperty,R=Array.isArray,L=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(P){return P()}};var H,F={},q=m.react_stack_bottom_frame.bind(m,a)(),A=L(n(a)),W={};Ur.Fragment=x,Ur.jsx=function(P,$,X){var D=1e4>O.recentlyCreatedOwnerStacks++;return u(P,$,X,!1,D?Error("react-stack-top-frame"):q,D?L(n(P)):A)},Ur.jsxs=function(P,$,X){var D=1e4>O.recentlyCreatedOwnerStacks++;return u(P,$,X,!0,D?Error("react-stack-top-frame"):q,D?L(n(P)):A)}})()),Ur}var Dp;function g0(){return Dp||(Dp=1,process.env.NODE_ENV==="production"?Un.exports=h0():Un.exports=y0()),Un.exports}var o=g0();const Mp=e=>{let t;const r=new Set,n=(d,u)=>{const p=typeof d=="function"?d(t):d;if(!Object.is(p,t)){const f=t;t=u??(typeof p!="object"||p===null)?p:Object.assign({},t,p),r.forEach(m=>m(t,f))}},s=()=>t,l={setState:n,getState:s,getInitialState:()=>c,subscribe:d=>(r.add(d),()=>r.delete(d))},c=t=e(n,s,l);return l},Wp=(e=>e?Mp(e):Mp),x0=e=>e;function da(e,t=x0){const r=T.useSyncExternalStore(e.subscribe,T.useCallback(()=>t(e.getState()),[e,t]),T.useCallback(()=>t(e.getInitialState()),[e,t]));return T.useDebugValue(r),r}const zp=e=>{const t=Wp(e),r=n=>da(t,n);return Object.assign(r,t),r},Vn=(e=>e?zp(e):zp);function ua(e,t){let r;try{r=e()}catch{return}return{getItem:s=>{var a;const i=c=>c===null?null:JSON.parse(c,void 0),l=(a=r.getItem(s))!=null?a:null;return l instanceof Promise?l.then(i):i(l)},setItem:(s,a)=>r.setItem(s,JSON.stringify(a,void 0)),removeItem:s=>r.removeItem(s)}}const pa=e=>t=>{try{const r=e(t);return r instanceof Promise?r:{then(n){return pa(n)(r)},catch(n){return this}}}catch(r){return{then(n){return this},catch(n){return pa(n)(r)}}}},qp=(e,t)=>(r,n,s)=>{let a={storage:ua(()=>localStorage),partialize:y=>y,version:0,merge:(y,x)=>({...x,...y}),...t},i=!1;const l=new Set,c=new Set;let d=a.storage;if(!d)return e((...y)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),r(...y)},n,s);const u=()=>{const y=a.partialize({...n()});return d.setItem(a.name,{state:y,version:a.version})},p=s.setState;s.setState=(y,x)=>(p(y,x),u());const f=e((...y)=>(r(...y),u()),n,s);s.getInitialState=()=>f;let m;const h=()=>{var y,x;if(!d)return;i=!1,l.forEach(v=>{var k;return v((k=n())!=null?k:f)});const g=((x=a.onRehydrateStorage)==null?void 0:x.call(a,(y=n())!=null?y:f))||void 0;return pa(d.getItem.bind(d))(a.name).then(v=>{if(v)if(typeof v.version=="number"&&v.version!==a.version){if(a.migrate){const k=a.migrate(v.state,v.version);return k instanceof Promise?k.then(b=>[!0,b]):[!0,k]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,v.state];return[!1,void 0]}).then(v=>{var k;const[b,S]=v;if(m=a.merge(S,(k=n())!=null?k:f),r(m,!0),b)return u()}).then(()=>{g?.(m,void 0),m=n(),i=!0,c.forEach(v=>v(m))}).catch(v=>{g?.(void 0,v)})};return s.persist={setOptions:y=>{a={...a,...y},y.storage&&(d=y.storage)},clearStorage:()=>{d?.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>h(),hasHydrated:()=>i,onHydrate:y=>(l.add(y),()=>{l.delete(y)}),onFinishHydration:y=>(c.add(y),()=>{c.delete(y)})},a.skipHydration||h(),m||f};var Fp=(e,t,r)=>(s,a)=>({pastStates:r?.pastStates||[],futureStates:r?.futureStates||[],undo:(i=1)=>{if(a().pastStates.length){const l=r?.partialize?.(t())||t(),c=a().pastStates.splice(-i,i),d=c.shift();e(d),s({pastStates:a().pastStates,futureStates:a().futureStates.concat(r?.diff?.(l,d)||l,c.reverse())})}},redo:(i=1)=>{if(a().futureStates.length){const l=r?.partialize?.(t())||t(),c=a().futureStates.splice(-i,i),d=c.shift();e(d),s({pastStates:a().pastStates.concat(r?.diff?.(l,d)||l,c.reverse()),futureStates:a().futureStates})}},clear:()=>s({pastStates:[],futureStates:[]}),isTracking:!0,pause:()=>s({isTracking:!1}),resume:()=>s({isTracking:!0}),setOnSave:i=>s({_onSave:i}),_onSave:r?.onSave,_handleSet:(i,l,c,d)=>{r?.limit&&a().pastStates.length>=r?.limit&&a().pastStates.shift(),a()._onSave?.(i,c),s({pastStates:a().pastStates.concat(d||i),futureStates:[]})}}),v0=(e,t)=>(n,s,a)=>{a.temporal=Wp(t?.wrapTemporal?.(Fp(n,s,t))||Fp(n,s,t));const i=t?.handleSet?.(a.temporal.getState()._handleSet)||a.temporal.getState()._handleSet,l=d=>{if(!a.temporal.getState().isTracking)return;const u=t?.partialize?.(s())||s(),p=t?.diff?.(d,u);p===null||t?.equality?.(d,u)||i(d,void 0,u,p)},c=a.setState;return a.setState=(...d)=>{const u=t?.partialize?.(s())||s();c(...d),l(u)},e((...d)=>{const u=t?.partialize?.(s())||s();n(...d),l(u)},s,a)};function b0(e,t="TB",r){const n=r?.hideEmptyBranches??!1;if(!e||!e.tasks)return{nodes:[],edges:[],taskMap:{}};const s=[],a=[],i={};let l=0;const c=e.tasks;for(let d=0;d<c.length;d++){const u=c[d],p=Bp(u,l,i,t,c,n);if(s.push(...p.nodes),a.push(...p.edges),l=p.nextId,d>0){const f=c[d-1];fa(f,u,a,n)}Object.assign(i,p.taskMap)}if(!n&&c.length>0){const d=c[0],u="__workflow_start__";s.push({id:u,type:"plusNode",data:{label:"+",taskReferenceName:u,taskType:"PLUS",parentRef:u,edgeData:{isWorkflowStart:!0},layoutDirection:t},position:{x:0,y:0},sourcePosition:t==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:t==="LR"?J.Position.Left:J.Position.Top}),a.push({id:`e-${u}-${d.taskReferenceName}`,source:u,target:d.taskReferenceName,animated:!0});const p=c[c.length-1],f="__workflow_end__";s.push({id:f,type:"plusNode",data:{label:"+",taskReferenceName:f,taskType:"PLUS",parentRef:p.taskReferenceName,layoutDirection:t},position:{x:0,y:0},sourcePosition:t==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:t==="LR"?J.Position.Left:J.Position.Top}),fa(p,{taskReferenceName:f},a,n)}return{nodes:s,edges:a,taskMap:i}}function Bp(e,t,r,n="TB",s=[],a=!1){switch(e.type||"SIMPLE"){case"DECISION":case"SWITCH":return w0(e,t,r,n,a);case"FORK_JOIN":case"FORK_JOIN_DYNAMIC":return S0(e,t,r,n);case"JOIN":case"EXCLUSIVE_JOIN":return T0(e,t,r,n,s,a);case"DO_WHILE":return _0(e,t,r,n,a);case"SUB_WORKFLOW":return j0(e,t,r,n);default:return k0(e,t,r,n)}}function k0(e,t,r,n="TB"){const s={id:e.taskReferenceName,type:"taskNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type||"SIMPLE",task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top},a={[e.taskReferenceName]:e};return{nodes:[s],edges:[],taskMap:a,nextId:t+1}}function w0(e,t,r,n="TB",s=!1){const a=[],i=[];let l=t;const c={},d={id:e.taskReferenceName,type:"decisionNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top};a.push(d),c[e.taskReferenceName]=e;const u=e.decisionCases||{},p=e.defaultCase||[],f=Object.keys(u),m=(h,y)=>{if(n==="TB"){if(h===0&&y>1)return"left";if(h===1&&y>2)return"right"}else{if(h===0&&y>1)return"top";if(h===1&&y>2)return"bottom"}return null};if(f.forEach((h,y)=>{const x=u[h],g=m(y,f.length+1);if(x&&x.length>0){const v=Kn(x,l,{...r,...c},n,s);a.push(...v.nodes),i.push(...v.edges),Object.assign(c,v.taskMap),l=v.nextId;const k=x[0].taskReferenceName;i.push({id:`e-${e.taskReferenceName}-${k}`,source:e.taskReferenceName,sourceHandle:g||void 0,target:k,label:h,animated:!0,data:{branchCase:h},style:{stroke:"var(--cm-cat-control)"}})}else if(!s){const v=`${e.taskReferenceName}_empty_${h}`;a.push({id:v,type:"plusNode",data:{label:`${h} (空)`,parentRef:e.taskReferenceName,edgeData:{branchCase:h},layoutDirection:n,taskReferenceName:v,taskType:"EMPTY_BRANCH"},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-muted)",minWidth:"80px",textAlign:"center"}}),i.push({id:`e-${e.taskReferenceName}-${v}`,source:e.taskReferenceName,sourceHandle:g||void 0,target:v,label:h,animated:!0,data:{branchCase:h},style:{stroke:"var(--cm-cat-control)",strokeDasharray:"5,5"}})}}),p&&p.length>0){const h=Kn(p,l,{...r,...c},n,s);a.push(...h.nodes),i.push(...h.edges),Object.assign(c,h.taskMap),l=h.nextId;const y=p[0].taskReferenceName;i.push({id:`e-${e.taskReferenceName}-${y}`,source:e.taskReferenceName,target:y,label:"default",animated:!0,data:{branchCase:"default"},style:{stroke:"var(--cm-text-muted)"}})}else if(!s){const h=`${e.taskReferenceName}_empty_default`;a.push({id:h,type:"plusNode",data:{label:"default (空)",parentRef:e.taskReferenceName,edgeData:{branchCase:"default"},layoutDirection:n,taskReferenceName:h,taskType:"EMPTY_BRANCH"},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-muted)",minWidth:"80px",textAlign:"center"}}),i.push({id:`e-${e.taskReferenceName}-${h}`,source:e.taskReferenceName,target:h,label:"default",animated:!0,data:{branchCase:"default"},style:{stroke:"var(--cm-text-muted)",strokeDasharray:"5,5"}})}return{nodes:a,edges:i,taskMap:c,nextId:l}}function S0(e,t,r,n="TB"){const s=[],a=[];let i=t;const l={},c=e.type==="FORK_JOIN_DYNAMIC",d={id:e.taskReferenceName,type:"forkNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,isDynamic:c,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top};if(s.push(d),l[e.taskReferenceName]=e,c){const u=`${e.taskReferenceName}_dynamic_placeholder`;s.push({id:u,type:"dynamicPlaceholderNode",data:{label:"动态分支",taskReferenceName:u,taskType:"DYNAMIC_PLACEHOLDER",layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top}),a.push({id:`e-${e.taskReferenceName}-${u}`,source:e.taskReferenceName,target:u,animated:!0,style:{stroke:"var(--cm-cat-control)",strokeDasharray:"5,5",strokeWidth:2}}),l[u]={taskReferenceName:u,type:"DYNAMIC_PLACEHOLDER"}}return c||(e.forkTasks||[]).forEach((p,f)=>{if(p&&p.length>0){const m=Kn(p,i,{...r,...l},n,!1);s.push(...m.nodes),a.push(...m.edges),Object.assign(l,m.taskMap),i=m.nextId;const h=p[0].taskReferenceName;a.push({id:`e-${e.taskReferenceName}-${h}`,source:e.taskReferenceName,sourceHandle:`branch_${f}`,target:h,label:`分支 ${f+1}`,animated:!0,data:{forkIndex:f},style:{stroke:"var(--cm-cat-control)"}})}}),{nodes:s,edges:a,taskMap:l,nextId:i}}function _0(e,t,r,n="TB",s=!1){const a={},i=e.taskReferenceName,l={id:i,type:"loopNode",data:{label:e.name,taskReferenceName:i,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top,style:{pointerEvents:"none"}};a[i]=e;const c=e.loopOver||[],d=[],u=[];let p=t+1;if(c.length>0){const f=Kn(c,p,{...r,...a},n,s);if(p=f.nextId,Object.assign(a,f.taskMap),f.nodes.forEach(m=>{d.push({...m,parentId:m.parentId??i,extent:m.parentId?m.extent:"parent"})}),u.push(...f.edges),!s){const m=c[0],h=`__loop_start__${i}`;d.push({id:h,type:"plusNode",parentId:i,extent:"parent",data:{label:"+",taskReferenceName:h,taskType:"PLUS",parentRef:i,edgeData:{isLoopBodyStart:!0,loopId:i},layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top}),u.push({id:`e-${h}-${m.taskReferenceName}`,source:h,target:m.taskReferenceName,animated:!0})}if(!s){const m=c[c.length-1],h=`__loop_end__${i}`;d.push({id:h,type:"plusNode",parentId:i,extent:"parent",data:{label:"+",taskReferenceName:h,taskType:"PLUS",parentRef:m.taskReferenceName,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top}),u.push({id:`e-${m.taskReferenceName}-${h}`,source:m.taskReferenceName,target:h,animated:!0})}}else if(!s){const f=`${i}_loop_empty_plus`;d.push({id:f,type:"plusNode",parentId:i,extent:"parent",data:{label:"+ 添加",taskReferenceName:f,taskType:"PLUS",parentRef:i,edgeData:{isLoopAdd:!0},layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top})}return{nodes:[l,...d],edges:u,taskMap:a,nextId:p}}function j0(e,t,r,n="TB"){const s={id:e.taskReferenceName,type:"subWorkflowNode",data:{label:e.name,taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top},a={[e.taskReferenceName]:e};return{nodes:[s],edges:[],taskMap:a,nextId:t+1}}function T0(e,t,r,n="TB",s=[],a=!1){const i={id:e.taskReferenceName,type:"joinNode",data:{label:e.name||"JOIN",taskReferenceName:e.taskReferenceName,taskType:e.type,task:e,layoutDirection:n},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top},l={[e.taskReferenceName]:e},c=[],d=[],u=e.joinOn||[];u.forEach(f=>{const m=s.find(h=>h.taskReferenceName===f)||r[f];m&&Vr(m,a).forEach(y=>{d.push({id:`e-${y}-${e.taskReferenceName}`,source:y,target:e.taskReferenceName,animated:!0})})});const p=s.findIndex(f=>f.taskReferenceName===e.taskReferenceName);if(p>0){const f=s[p-1];if(f.type==="FORK_JOIN_DYNAMIC"){const m=`${f.taskReferenceName}_dynamic_placeholder`;d.push({id:`e-${m}-${e.taskReferenceName}-dynamic`,source:m,target:e.taskReferenceName,animated:!0,style:{stroke:"var(--cm-cat-control)",strokeWidth:2,strokeDasharray:"5,5",opacity:.8}})}else f.type==="FORK_JOIN"&&(f.forkTasks||[]).forEach((h,y)=>{if(h&&h.length>0){const x=h[h.length-1];u.includes(x.taskReferenceName)||Vr(x,a).forEach(g=>{const v=`e-${g}-${e.taskReferenceName}`;d.some(k=>k.id===v)||d.push({id:v,source:g,target:e.taskReferenceName,label:"不等待",animated:!1,data:{notJoined:!0},style:{strokeDasharray:"4,4",opacity:.6}})})}if((!h||h.length===0)&&!a){const x=`${f.taskReferenceName}_empty_branch_${y}`;c.push({id:x,type:"plusNode",data:{label:`分支 ${y+1} (空)`,layoutDirection:n,taskReferenceName:x,taskType:"EMPTY_BRANCH",parentRef:f.taskReferenceName,edgeData:{forkIndex:y}},position:{x:0,y:0},sourcePosition:n==="LR"?J.Position.Right:J.Position.Bottom,targetPosition:n==="LR"?J.Position.Left:J.Position.Top,style:{background:"transparent",border:"2px dashed var(--border-secondary)",borderRadius:"8px",padding:"6px 12px",fontSize:"11px",color:"var(--text-muted)",minWidth:"80px",textAlign:"center"}}),d.push({id:`e-${f.taskReferenceName}-${x}`,source:f.taskReferenceName,sourceHandle:`branch_${y}`,target:x,label:`分支 ${y+1}`,animated:!0,data:{forkIndex:y},style:{stroke:"var(--cm-cat-control)",strokeDasharray:"5,5"}}),d.push({id:`e-${x}-${e.taskReferenceName}`,source:x,target:e.taskReferenceName,animated:!0,data:{forkIndex:y,branchParentRef:f.taskReferenceName},style:{strokeDasharray:"5,5"}})}})}return{nodes:[i,...c],edges:d,taskMap:l,nextId:t+1}}function Kn(e,t,r,n="TB",s=!1){const a=[],i=[];let l=t;const c={};for(let d=0;d<e.length;d++){const u=e[d],p={...r,...c},f=Bp(u,l,p,n,e,s);if(a.push(...f.nodes),i.push(...f.edges),Object.assign(c,f.taskMap),l=f.nextId,d>0){const m=e[d-1];fa(m,u,i,s)}}return{nodes:a,edges:i,taskMap:c,nextId:l}}function fa(e,t,r,n=!1){if(e.type==="FORK_JOIN"||e.type==="FORK_JOIN_DYNAMIC")return;const s=Vr(e,n),a=t.taskReferenceName,i=e.type==="DECISION"||e.type==="SWITCH";s.forEach(l=>{const c=`e-${l}-${a}`;r.find(d=>d.id===c)||r.push({id:c,source:l,target:a,animated:!0,...i?{data:{exitOf:e.taskReferenceName}}:{}})})}function Vr(e,t=!1){const r=e.type||"SIMPLE";if(r==="DECISION"||r==="SWITCH"){const n=[],s=e.decisionCases||{},a=e.defaultCase||[];if(Object.entries(s).forEach(([i,l])=>{if(l&&l.length>0){const c=l[l.length-1];n.push(...Vr(c,t))}else t||n.push(`${e.taskReferenceName}_empty_${i}`)}),a.length>0){const i=a[a.length-1];n.push(...Vr(i,t))}else t||n.push(`${e.taskReferenceName}_empty_default`);return n.length>0?n:[e.taskReferenceName]}return[e.taskReferenceName]}const yt=b0;function ma(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var ha,Hp;function I0(){if(Hp)return ha;Hp=1;function e(){this.__data__=[],this.size=0}return ha=e,ha}var ya,Jp;function Nr(){if(Jp)return ya;Jp=1;function e(t,r){return t===r||t!==t&&r!==r}return ya=e,ya}var ga,Up;function Gn(){if(Up)return ga;Up=1;var e=Nr();function t(r,n){for(var s=r.length;s--;)if(e(r[s][0],n))return s;return-1}return ga=t,ga}var xa,Vp;function N0(){if(Vp)return xa;Vp=1;var e=Gn(),t=Array.prototype,r=t.splice;function n(s){var a=this.__data__,i=e(a,s);if(i<0)return!1;var l=a.length-1;return i==l?a.pop():r.call(a,i,1),--this.size,!0}return xa=n,xa}var va,Kp;function C0(){if(Kp)return va;Kp=1;var e=Gn();function t(r){var n=this.__data__,s=e(n,r);return s<0?void 0:n[s][1]}return va=t,va}var ba,Gp;function E0(){if(Gp)return ba;Gp=1;var e=Gn();function t(r){return e(this.__data__,r)>-1}return ba=t,ba}var ka,Yp;function R0(){if(Yp)return ka;Yp=1;var e=Gn();function t(r,n){var s=this.__data__,a=e(s,r);return a<0?(++this.size,s.push([r,n])):s[a][1]=n,this}return ka=t,ka}var wa,Xp;function Yn(){if(Xp)return wa;Xp=1;var e=I0(),t=N0(),r=C0(),n=E0(),s=R0();function a(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var d=i[l];this.set(d[0],d[1])}}return a.prototype.clear=e,a.prototype.delete=t,a.prototype.get=r,a.prototype.has=n,a.prototype.set=s,wa=a,wa}var Sa,Zp;function O0(){if(Zp)return Sa;Zp=1;var e=Yn();function t(){this.__data__=new e,this.size=0}return Sa=t,Sa}var _a,Qp;function P0(){if(Qp)return _a;Qp=1;function e(t){var r=this.__data__,n=r.delete(t);return this.size=r.size,n}return _a=e,_a}var ja,ef;function A0(){if(ef)return ja;ef=1;function e(t){return this.__data__.get(t)}return ja=e,ja}var Ta,tf;function $0(){if(tf)return Ta;tf=1;function e(t){return this.__data__.has(t)}return Ta=e,Ta}var Ia,rf;function nf(){if(rf)return Ia;rf=1;var e=typeof Jn=="object"&&Jn&&Jn.Object===Object&&Jn;return Ia=e,Ia}var Na,sf;function wt(){if(sf)return Na;sf=1;var e=nf(),t=typeof self=="object"&&self&&self.Object===Object&&self,r=e||t||Function("return this")();return Na=r,Na}var Ca,af;function Cr(){if(af)return Ca;af=1;var e=wt(),t=e.Symbol;return Ca=t,Ca}var Ea,of;function L0(){if(of)return Ea;of=1;var e=Cr(),t=Object.prototype,r=t.hasOwnProperty,n=t.toString,s=e?e.toStringTag:void 0;function a(i){var l=r.call(i,s),c=i[s];try{i[s]=void 0;var d=!0}catch{}var u=n.call(i);return d&&(l?i[s]=c:delete i[s]),u}return Ea=a,Ea}var Ra,lf;function D0(){if(lf)return Ra;lf=1;var e=Object.prototype,t=e.toString;function r(n){return t.call(n)}return Ra=r,Ra}var Oa,cf;function ur(){if(cf)return Oa;cf=1;var e=Cr(),t=L0(),r=D0(),n="[object Null]",s="[object Undefined]",a=e?e.toStringTag:void 0;function i(l){return l==null?l===void 0?s:n:a&&a in Object(l)?t(l):r(l)}return Oa=i,Oa}var Pa,df;function gt(){if(df)return Pa;df=1;function e(t){var r=typeof t;return t!=null&&(r=="object"||r=="function")}return Pa=e,Pa}var Aa,uf;function Kr(){if(uf)return Aa;uf=1;var e=ur(),t=gt(),r="[object AsyncFunction]",n="[object Function]",s="[object GeneratorFunction]",a="[object Proxy]";function i(l){if(!t(l))return!1;var c=e(l);return c==n||c==s||c==r||c==a}return Aa=i,Aa}var $a,pf;function M0(){if(pf)return $a;pf=1;var e=wt(),t=e["__core-js_shared__"];return $a=t,$a}var La,ff;function W0(){if(ff)return La;ff=1;var e=M0(),t=(function(){var n=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""})();function r(n){return!!t&&t in n}return La=r,La}var Da,mf;function hf(){if(mf)return Da;mf=1;var e=Function.prototype,t=e.toString;function r(n){if(n!=null){try{return t.call(n)}catch{}try{return n+""}catch{}}return""}return Da=r,Da}var Ma,yf;function z0(){if(yf)return Ma;yf=1;var e=Kr(),t=W0(),r=gt(),n=hf(),s=/[\\^$.*+?()[\]{}|]/g,a=/^\[object .+?Constructor\]$/,i=Function.prototype,l=Object.prototype,c=i.toString,d=l.hasOwnProperty,u=RegExp("^"+c.call(d).replace(s,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function p(f){if(!r(f)||t(f))return!1;var m=e(f)?u:a;return m.test(n(f))}return Ma=p,Ma}var Wa,gf;function q0(){if(gf)return Wa;gf=1;function e(t,r){return t?.[r]}return Wa=e,Wa}var za,xf;function pr(){if(xf)return za;xf=1;var e=z0(),t=q0();function r(n,s){var a=t(n,s);return e(a)?a:void 0}return za=r,za}var qa,vf;function Fa(){if(vf)return qa;vf=1;var e=pr(),t=wt(),r=e(t,"Map");return qa=r,qa}var Ba,bf;function Xn(){if(bf)return Ba;bf=1;var e=pr(),t=e(Object,"create");return Ba=t,Ba}var Ha,kf;function F0(){if(kf)return Ha;kf=1;var e=Xn();function t(){this.__data__=e?e(null):{},this.size=0}return Ha=t,Ha}var Ja,wf;function B0(){if(wf)return Ja;wf=1;function e(t){var r=this.has(t)&&delete this.__data__[t];return this.size-=r?1:0,r}return Ja=e,Ja}var Ua,Sf;function H0(){if(Sf)return Ua;Sf=1;var e=Xn(),t="__lodash_hash_undefined__",r=Object.prototype,n=r.hasOwnProperty;function s(a){var i=this.__data__;if(e){var l=i[a];return l===t?void 0:l}return n.call(i,a)?i[a]:void 0}return Ua=s,Ua}var Va,_f;function J0(){if(_f)return Va;_f=1;var e=Xn(),t=Object.prototype,r=t.hasOwnProperty;function n(s){var a=this.__data__;return e?a[s]!==void 0:r.call(a,s)}return Va=n,Va}var Ka,jf;function U0(){if(jf)return Ka;jf=1;var e=Xn(),t="__lodash_hash_undefined__";function r(n,s){var a=this.__data__;return this.size+=this.has(n)?0:1,a[n]=e&&s===void 0?t:s,this}return Ka=r,Ka}var Ga,Tf;function V0(){if(Tf)return Ga;Tf=1;var e=F0(),t=B0(),r=H0(),n=J0(),s=U0();function a(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var d=i[l];this.set(d[0],d[1])}}return a.prototype.clear=e,a.prototype.delete=t,a.prototype.get=r,a.prototype.has=n,a.prototype.set=s,Ga=a,Ga}var Ya,If;function K0(){if(If)return Ya;If=1;var e=V0(),t=Yn(),r=Fa();function n(){this.size=0,this.__data__={hash:new e,map:new(r||t),string:new e}}return Ya=n,Ya}var Xa,Nf;function G0(){if(Nf)return Xa;Nf=1;function e(t){var r=typeof t;return r=="string"||r=="number"||r=="symbol"||r=="boolean"?t!=="__proto__":t===null}return Xa=e,Xa}var Za,Cf;function Zn(){if(Cf)return Za;Cf=1;var e=G0();function t(r,n){var s=r.__data__;return e(n)?s[typeof n=="string"?"string":"hash"]:s.map}return Za=t,Za}var Qa,Ef;function Y0(){if(Ef)return Qa;Ef=1;var e=Zn();function t(r){var n=e(this,r).delete(r);return this.size-=n?1:0,n}return Qa=t,Qa}var eo,Rf;function X0(){if(Rf)return eo;Rf=1;var e=Zn();function t(r){return e(this,r).get(r)}return eo=t,eo}var to,Of;function Z0(){if(Of)return to;Of=1;var e=Zn();function t(r){return e(this,r).has(r)}return to=t,to}var ro,Pf;function Q0(){if(Pf)return ro;Pf=1;var e=Zn();function t(r,n){var s=e(this,r),a=s.size;return s.set(r,n),this.size+=s.size==a?0:1,this}return ro=t,ro}var no,Af;function so(){if(Af)return no;Af=1;var e=K0(),t=Y0(),r=X0(),n=Z0(),s=Q0();function a(i){var l=-1,c=i==null?0:i.length;for(this.clear();++l<c;){var d=i[l];this.set(d[0],d[1])}}return a.prototype.clear=e,a.prototype.delete=t,a.prototype.get=r,a.prototype.has=n,a.prototype.set=s,no=a,no}var ao,$f;function ew(){if($f)return ao;$f=1;var e=Yn(),t=Fa(),r=so(),n=200;function s(a,i){var l=this.__data__;if(l instanceof e){var c=l.__data__;if(!t||c.length<n-1)return c.push([a,i]),this.size=++l.size,this;l=this.__data__=new r(c)}return l.set(a,i),this.size=l.size,this}return ao=s,ao}var oo,Lf;function Qn(){if(Lf)return oo;Lf=1;var e=Yn(),t=O0(),r=P0(),n=A0(),s=$0(),a=ew();function i(l){var c=this.__data__=new e(l);this.size=c.size}return i.prototype.clear=t,i.prototype.delete=r,i.prototype.get=n,i.prototype.has=s,i.prototype.set=a,oo=i,oo}var io,Df;function lo(){if(Df)return io;Df=1;function e(t,r){for(var n=-1,s=t==null?0:t.length;++n<s&&r(t[n],n,t)!==!1;);return t}return io=e,io}var co,Mf;function Wf(){if(Mf)return co;Mf=1;var e=pr(),t=(function(){try{var r=e(Object,"defineProperty");return r({},"",{}),r}catch{}})();return co=t,co}var uo,zf;function es(){if(zf)return uo;zf=1;var e=Wf();function t(r,n,s){n=="__proto__"&&e?e(r,n,{configurable:!0,enumerable:!0,value:s,writable:!0}):r[n]=s}return uo=t,uo}var po,qf;function ts(){if(qf)return po;qf=1;var e=es(),t=Nr(),r=Object.prototype,n=r.hasOwnProperty;function s(a,i,l){var c=a[i];(!(n.call(a,i)&&t(c,l))||l===void 0&&!(i in a))&&e(a,i,l)}return po=s,po}var fo,Ff;function Gr(){if(Ff)return fo;Ff=1;var e=ts(),t=es();function r(n,s,a,i){var l=!a;a||(a={});for(var c=-1,d=s.length;++c<d;){var u=s[c],p=i?i(a[u],n[u],u,a,n):void 0;p===void 0&&(p=n[u]),l?t(a,u,p):e(a,u,p)}return a}return fo=r,fo}var mo,Bf;function tw(){if(Bf)return mo;Bf=1;function e(t,r){for(var n=-1,s=Array(t);++n<t;)s[n]=r(n);return s}return mo=e,mo}var ho,Hf;function It(){if(Hf)return ho;Hf=1;function e(t){return t!=null&&typeof t=="object"}return ho=e,ho}var yo,Jf;function rw(){if(Jf)return yo;Jf=1;var e=ur(),t=It(),r="[object Arguments]";function n(s){return t(s)&&e(s)==r}return yo=n,yo}var go,Uf;function Yr(){if(Uf)return go;Uf=1;var e=rw(),t=It(),r=Object.prototype,n=r.hasOwnProperty,s=r.propertyIsEnumerable,a=e((function(){return arguments})())?e:function(i){return t(i)&&n.call(i,"callee")&&!s.call(i,"callee")};return go=a,go}var xo,Vf;function Ke(){if(Vf)return xo;Vf=1;var e=Array.isArray;return xo=e,xo}var Xr={exports:{}},vo,Kf;function nw(){if(Kf)return vo;Kf=1;function e(){return!1}return vo=e,vo}Xr.exports;var Gf;function Er(){return Gf||(Gf=1,(function(e,t){var r=wt(),n=nw(),s=t&&!t.nodeType&&t,a=s&&!0&&e&&!e.nodeType&&e,i=a&&a.exports===s,l=i?r.Buffer:void 0,c=l?l.isBuffer:void 0,d=c||n;e.exports=d})(Xr,Xr.exports)),Xr.exports}var bo,Yf;function rs(){if(Yf)return bo;Yf=1;var e=9007199254740991,t=/^(?:0|[1-9]\d*)$/;function r(n,s){var a=typeof n;return s=s??e,!!s&&(a=="number"||a!="symbol"&&t.test(n))&&n>-1&&n%1==0&&n<s}return bo=r,bo}var ko,Xf;function wo(){if(Xf)return ko;Xf=1;var e=9007199254740991;function t(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=e}return ko=t,ko}var So,Zf;function sw(){if(Zf)return So;Zf=1;var e=ur(),t=wo(),r=It(),n="[object Arguments]",s="[object Array]",a="[object Boolean]",i="[object Date]",l="[object Error]",c="[object Function]",d="[object Map]",u="[object Number]",p="[object Object]",f="[object RegExp]",m="[object Set]",h="[object String]",y="[object WeakMap]",x="[object ArrayBuffer]",g="[object DataView]",v="[object Float32Array]",k="[object Float64Array]",b="[object Int8Array]",S="[object Int16Array]",j="[object Int32Array]",_="[object Uint8Array]",w="[object Uint8ClampedArray]",I="[object Uint16Array]",C="[object Uint32Array]",N={};N[v]=N[k]=N[b]=N[S]=N[j]=N[_]=N[w]=N[I]=N[C]=!0,N[n]=N[s]=N[x]=N[a]=N[g]=N[i]=N[l]=N[c]=N[d]=N[u]=N[p]=N[f]=N[m]=N[h]=N[y]=!1;function O(E){return r(E)&&t(E.length)&&!!N[e(E)]}return So=O,So}var _o,Qf;function ns(){if(Qf)return _o;Qf=1;function e(t){return function(r){return t(r)}}return _o=e,_o}var Zr={exports:{}};Zr.exports;var em;function jo(){return em||(em=1,(function(e,t){var r=nf(),n=t&&!t.nodeType&&t,s=n&&!0&&e&&!e.nodeType&&e,a=s&&s.exports===n,i=a&&r.process,l=(function(){try{var c=s&&s.require&&s.require("util").types;return c||i&&i.binding&&i.binding("util")}catch{}})();e.exports=l})(Zr,Zr.exports)),Zr.exports}var To,tm;function Qr(){if(tm)return To;tm=1;var e=sw(),t=ns(),r=jo(),n=r&&r.isTypedArray,s=n?t(n):e;return To=s,To}var Io,rm;function nm(){if(rm)return Io;rm=1;var e=tw(),t=Yr(),r=Ke(),n=Er(),s=rs(),a=Qr(),i=Object.prototype,l=i.hasOwnProperty;function c(d,u){var p=r(d),f=!p&&t(d),m=!p&&!f&&n(d),h=!p&&!f&&!m&&a(d),y=p||f||m||h,x=y?e(d.length,String):[],g=x.length;for(var v in d)(u||l.call(d,v))&&!(y&&(v=="length"||m&&(v=="offset"||v=="parent")||h&&(v=="buffer"||v=="byteLength"||v=="byteOffset")||s(v,g)))&&x.push(v);return x}return Io=c,Io}var No,sm;function ss(){if(sm)return No;sm=1;var e=Object.prototype;function t(r){var n=r&&r.constructor,s=typeof n=="function"&&n.prototype||e;return r===s}return No=t,No}var Co,am;function om(){if(am)return Co;am=1;function e(t,r){return function(n){return t(r(n))}}return Co=e,Co}var Eo,im;function aw(){if(im)return Eo;im=1;var e=om(),t=e(Object.keys,Object);return Eo=t,Eo}var Ro,lm;function Oo(){if(lm)return Ro;lm=1;var e=ss(),t=aw(),r=Object.prototype,n=r.hasOwnProperty;function s(a){if(!e(a))return t(a);var i=[];for(var l in Object(a))n.call(a,l)&&l!="constructor"&&i.push(l);return i}return Ro=s,Ro}var Po,cm;function $t(){if(cm)return Po;cm=1;var e=Kr(),t=wo();function r(n){return n!=null&&t(n.length)&&!e(n)}return Po=r,Po}var Ao,dm;function Xt(){if(dm)return Ao;dm=1;var e=nm(),t=Oo(),r=$t();function n(s){return r(s)?e(s):t(s)}return Ao=n,Ao}var $o,um;function ow(){if(um)return $o;um=1;var e=Gr(),t=Xt();function r(n,s){return n&&e(s,t(s),n)}return $o=r,$o}var Lo,pm;function iw(){if(pm)return Lo;pm=1;function e(t){var r=[];if(t!=null)for(var n in Object(t))r.push(n);return r}return Lo=e,Lo}var Do,fm;function lw(){if(fm)return Do;fm=1;var e=gt(),t=ss(),r=iw(),n=Object.prototype,s=n.hasOwnProperty;function a(i){if(!e(i))return r(i);var l=t(i),c=[];for(var d in i)d=="constructor"&&(l||!s.call(i,d))||c.push(d);return c}return Do=a,Do}var Mo,mm;function fr(){if(mm)return Mo;mm=1;var e=nm(),t=lw(),r=$t();function n(s){return r(s)?e(s,!0):t(s)}return Mo=n,Mo}var Wo,hm;function cw(){if(hm)return Wo;hm=1;var e=Gr(),t=fr();function r(n,s){return n&&e(s,t(s),n)}return Wo=r,Wo}var en={exports:{}};en.exports;var ym;function gm(){return ym||(ym=1,(function(e,t){var r=wt(),n=t&&!t.nodeType&&t,s=n&&!0&&e&&!e.nodeType&&e,a=s&&s.exports===n,i=a?r.Buffer:void 0,l=i?i.allocUnsafe:void 0;function c(d,u){if(u)return d.slice();var p=d.length,f=l?l(p):new d.constructor(p);return d.copy(f),f}e.exports=c})(en,en.exports)),en.exports}var zo,xm;function vm(){if(xm)return zo;xm=1;function e(t,r){var n=-1,s=t.length;for(r||(r=Array(s));++n<s;)r[n]=t[n];return r}return zo=e,zo}var qo,bm;function km(){if(bm)return qo;bm=1;function e(t,r){for(var n=-1,s=t==null?0:t.length,a=0,i=[];++n<s;){var l=t[n];r(l,n,t)&&(i[a++]=l)}return i}return qo=e,qo}var Fo,wm;function Sm(){if(wm)return Fo;wm=1;function e(){return[]}return Fo=e,Fo}var Bo,_m;function Ho(){if(_m)return Bo;_m=1;var e=km(),t=Sm(),r=Object.prototype,n=r.propertyIsEnumerable,s=Object.getOwnPropertySymbols,a=s?function(i){return i==null?[]:(i=Object(i),e(s(i),function(l){return n.call(i,l)}))}:t;return Bo=a,Bo}var Jo,jm;function dw(){if(jm)return Jo;jm=1;var e=Gr(),t=Ho();function r(n,s){return e(n,t(n),s)}return Jo=r,Jo}var Uo,Tm;function Vo(){if(Tm)return Uo;Tm=1;function e(t,r){for(var n=-1,s=r.length,a=t.length;++n<s;)t[a+n]=r[n];return t}return Uo=e,Uo}var Ko,Im;function as(){if(Im)return Ko;Im=1;var e=om(),t=e(Object.getPrototypeOf,Object);return Ko=t,Ko}var Go,Nm;function Cm(){if(Nm)return Go;Nm=1;var e=Vo(),t=as(),r=Ho(),n=Sm(),s=Object.getOwnPropertySymbols,a=s?function(i){for(var l=[];i;)e(l,r(i)),i=t(i);return l}:n;return Go=a,Go}var Yo,Em;function uw(){if(Em)return Yo;Em=1;var e=Gr(),t=Cm();function r(n,s){return e(n,t(n),s)}return Yo=r,Yo}var Xo,Rm;function Om(){if(Rm)return Xo;Rm=1;var e=Vo(),t=Ke();function r(n,s,a){var i=s(n);return t(n)?i:e(i,a(n))}return Xo=r,Xo}var Zo,Pm;function Am(){if(Pm)return Zo;Pm=1;var e=Om(),t=Ho(),r=Xt();function n(s){return e(s,r,t)}return Zo=n,Zo}var Qo,$m;function pw(){if($m)return Qo;$m=1;var e=Om(),t=Cm(),r=fr();function n(s){return e(s,r,t)}return Qo=n,Qo}var ei,Lm;function fw(){if(Lm)return ei;Lm=1;var e=pr(),t=wt(),r=e(t,"DataView");return ei=r,ei}var ti,Dm;function mw(){if(Dm)return ti;Dm=1;var e=pr(),t=wt(),r=e(t,"Promise");return ti=r,ti}var ri,Mm;function Wm(){if(Mm)return ri;Mm=1;var e=pr(),t=wt(),r=e(t,"Set");return ri=r,ri}var ni,zm;function hw(){if(zm)return ni;zm=1;var e=pr(),t=wt(),r=e(t,"WeakMap");return ni=r,ni}var si,qm;function Rr(){if(qm)return si;qm=1;var e=fw(),t=Fa(),r=mw(),n=Wm(),s=hw(),a=ur(),i=hf(),l="[object Map]",c="[object Object]",d="[object Promise]",u="[object Set]",p="[object WeakMap]",f="[object DataView]",m=i(e),h=i(t),y=i(r),x=i(n),g=i(s),v=a;return(e&&v(new e(new ArrayBuffer(1)))!=f||t&&v(new t)!=l||r&&v(r.resolve())!=d||n&&v(new n)!=u||s&&v(new s)!=p)&&(v=function(k){var b=a(k),S=b==c?k.constructor:void 0,j=S?i(S):"";if(j)switch(j){case m:return f;case h:return l;case y:return d;case x:return u;case g:return p}return b}),si=v,si}var ai,Fm;function yw(){if(Fm)return ai;Fm=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n){var s=n.length,a=new n.constructor(s);return s&&typeof n[0]=="string"&&t.call(n,"index")&&(a.index=n.index,a.input=n.input),a}return ai=r,ai}var oi,Bm;function Hm(){if(Bm)return oi;Bm=1;var e=wt(),t=e.Uint8Array;return oi=t,oi}var ii,Jm;function li(){if(Jm)return ii;Jm=1;var e=Hm();function t(r){var n=new r.constructor(r.byteLength);return new e(n).set(new e(r)),n}return ii=t,ii}var ci,Um;function gw(){if(Um)return ci;Um=1;var e=li();function t(r,n){var s=n?e(r.buffer):r.buffer;return new r.constructor(s,r.byteOffset,r.byteLength)}return ci=t,ci}var di,Vm;function xw(){if(Vm)return di;Vm=1;var e=/\w*$/;function t(r){var n=new r.constructor(r.source,e.exec(r));return n.lastIndex=r.lastIndex,n}return di=t,di}var ui,Km;function vw(){if(Km)return ui;Km=1;var e=Cr(),t=e?e.prototype:void 0,r=t?t.valueOf:void 0;function n(s){return r?Object(r.call(s)):{}}return ui=n,ui}var pi,Gm;function Ym(){if(Gm)return pi;Gm=1;var e=li();function t(r,n){var s=n?e(r.buffer):r.buffer;return new r.constructor(s,r.byteOffset,r.length)}return pi=t,pi}var fi,Xm;function bw(){if(Xm)return fi;Xm=1;var e=li(),t=gw(),r=xw(),n=vw(),s=Ym(),a="[object Boolean]",i="[object Date]",l="[object Map]",c="[object Number]",d="[object RegExp]",u="[object Set]",p="[object String]",f="[object Symbol]",m="[object ArrayBuffer]",h="[object DataView]",y="[object Float32Array]",x="[object Float64Array]",g="[object Int8Array]",v="[object Int16Array]",k="[object Int32Array]",b="[object Uint8Array]",S="[object Uint8ClampedArray]",j="[object Uint16Array]",_="[object Uint32Array]";function w(I,C,N){var O=I.constructor;switch(C){case m:return e(I);case a:case i:return new O(+I);case h:return t(I,N);case y:case x:case g:case v:case k:case b:case S:case j:case _:return s(I,N);case l:return new O;case c:case p:return new O(I);case d:return r(I);case u:return new O;case f:return n(I)}}return fi=w,fi}var mi,Zm;function Qm(){if(Zm)return mi;Zm=1;var e=gt(),t=Object.create,r=(function(){function n(){}return function(s){if(!e(s))return{};if(t)return t(s);n.prototype=s;var a=new n;return n.prototype=void 0,a}})();return mi=r,mi}var hi,eh;function th(){if(eh)return hi;eh=1;var e=Qm(),t=as(),r=ss();function n(s){return typeof s.constructor=="function"&&!r(s)?e(t(s)):{}}return hi=n,hi}var yi,rh;function kw(){if(rh)return yi;rh=1;var e=Rr(),t=It(),r="[object Map]";function n(s){return t(s)&&e(s)==r}return yi=n,yi}var gi,nh;function ww(){if(nh)return gi;nh=1;var e=kw(),t=ns(),r=jo(),n=r&&r.isMap,s=n?t(n):e;return gi=s,gi}var xi,sh;function Sw(){if(sh)return xi;sh=1;var e=Rr(),t=It(),r="[object Set]";function n(s){return t(s)&&e(s)==r}return xi=n,xi}var vi,ah;function _w(){if(ah)return vi;ah=1;var e=Sw(),t=ns(),r=jo(),n=r&&r.isSet,s=n?t(n):e;return vi=s,vi}var bi,oh;function ih(){if(oh)return bi;oh=1;var e=Qn(),t=lo(),r=ts(),n=ow(),s=cw(),a=gm(),i=vm(),l=dw(),c=uw(),d=Am(),u=pw(),p=Rr(),f=yw(),m=bw(),h=th(),y=Ke(),x=Er(),g=ww(),v=gt(),k=_w(),b=Xt(),S=fr(),j=1,_=2,w=4,I="[object Arguments]",C="[object Array]",N="[object Boolean]",O="[object Date]",E="[object Error]",R="[object Function]",L="[object GeneratorFunction]",H="[object Map]",F="[object Number]",q="[object Object]",A="[object RegExp]",W="[object Set]",P="[object String]",$="[object Symbol]",X="[object WeakMap]",D="[object ArrayBuffer]",B="[object DataView]",U="[object Float32Array]",G="[object Float64Array]",ne="[object Int8Array]",ye="[object Int16Array]",Q="[object Int32Array]",_e="[object Uint8Array]",ve="[object Uint8ClampedArray]",je="[object Uint16Array]",fe="[object Uint32Array]",V={};V[I]=V[C]=V[D]=V[B]=V[N]=V[O]=V[U]=V[G]=V[ne]=V[ye]=V[Q]=V[H]=V[F]=V[q]=V[A]=V[W]=V[P]=V[$]=V[_e]=V[ve]=V[je]=V[fe]=!0,V[E]=V[R]=V[X]=!1;function ee(z,Ie,ke,Ne,Te,Se){var le,Ce=Ie&j,Me=Ie&_,Ve=Ie&w;if(ke&&(le=Te?ke(z,Ne,Te,Se):ke(z)),le!==void 0)return le;if(!v(z))return z;var Z=y(z);if(Z){if(le=f(z),!Ce)return i(z,le)}else{var oe=p(z),ie=oe==R||oe==L;if(x(z))return a(z,Ce);if(oe==q||oe==I||ie&&!Te){if(le=Me||ie?{}:h(z),!Ce)return Me?c(z,s(le,z)):l(z,n(le,z))}else{if(!V[oe])return Te?z:{};le=m(z,oe,Ce)}}Se||(Se=new e);var ge=Se.get(z);if(ge)return ge;Se.set(z,le),k(z)?z.forEach(function(Re){le.add(ee(Re,Ie,ke,Re,z,Se))}):g(z)&&z.forEach(function(Re,we){le.set(we,ee(Re,Ie,ke,we,z,Se))});var te=Ve?Me?u:d:Me?S:b,me=Z?void 0:te(z);return t(me||z,function(Re,we){me&&(we=Re,Re=z[we]),r(le,we,ee(Re,Ie,ke,we,z,Se))}),le}return bi=ee,bi}var ki,lh;function jw(){if(lh)return ki;lh=1;var e=ih(),t=4;function r(n){return e(n,t)}return ki=r,ki}var wi,ch;function Si(){if(ch)return wi;ch=1;function e(t){return function(){return t}}return wi=e,wi}var _i,dh;function Tw(){if(dh)return _i;dh=1;function e(t){return function(r,n,s){for(var a=-1,i=Object(r),l=s(r),c=l.length;c--;){var d=l[t?c:++a];if(n(i[d],d,i)===!1)break}return r}}return _i=e,_i}var ji,uh;function Ti(){if(uh)return ji;uh=1;var e=Tw(),t=e();return ji=t,ji}var Ii,ph;function Ni(){if(ph)return Ii;ph=1;var e=Ti(),t=Xt();function r(n,s){return n&&e(n,s,t)}return Ii=r,Ii}var Ci,fh;function Iw(){if(fh)return Ci;fh=1;var e=$t();function t(r,n){return function(s,a){if(s==null)return s;if(!e(s))return r(s,a);for(var i=s.length,l=n?i:-1,c=Object(s);(n?l--:++l<i)&&a(c[l],l,c)!==!1;);return s}}return Ci=t,Ci}var Ei,mh;function os(){if(mh)return Ei;mh=1;var e=Ni(),t=Iw(),r=t(e);return Ei=r,Ei}var Ri,hh;function mr(){if(hh)return Ri;hh=1;function e(t){return t}return Ri=e,Ri}var Oi,yh;function gh(){if(yh)return Oi;yh=1;var e=mr();function t(r){return typeof r=="function"?r:e}return Oi=t,Oi}var Pi,xh;function vh(){if(xh)return Pi;xh=1;var e=lo(),t=os(),r=gh(),n=Ke();function s(a,i){var l=n(a)?e:t;return l(a,r(i))}return Pi=s,Pi}var Ai,bh;function kh(){return bh||(bh=1,Ai=vh()),Ai}var $i,wh;function Nw(){if(wh)return $i;wh=1;var e=os();function t(r,n){var s=[];return e(r,function(a,i,l){n(a,i,l)&&s.push(a)}),s}return $i=t,$i}var Li,Sh;function Cw(){if(Sh)return Li;Sh=1;var e="__lodash_hash_undefined__";function t(r){return this.__data__.set(r,e),this}return Li=t,Li}var Di,_h;function Ew(){if(_h)return Di;_h=1;function e(t){return this.__data__.has(t)}return Di=e,Di}var Mi,jh;function Th(){if(jh)return Mi;jh=1;var e=so(),t=Cw(),r=Ew();function n(s){var a=-1,i=s==null?0:s.length;for(this.__data__=new e;++a<i;)this.add(s[a])}return n.prototype.add=n.prototype.push=t,n.prototype.has=r,Mi=n,Mi}var Wi,Ih;function Rw(){if(Ih)return Wi;Ih=1;function e(t,r){for(var n=-1,s=t==null?0:t.length;++n<s;)if(r(t[n],n,t))return!0;return!1}return Wi=e,Wi}var zi,Nh;function Ch(){if(Nh)return zi;Nh=1;function e(t,r){return t.has(r)}return zi=e,zi}var qi,Eh;function Rh(){if(Eh)return qi;Eh=1;var e=Th(),t=Rw(),r=Ch(),n=1,s=2;function a(i,l,c,d,u,p){var f=c&n,m=i.length,h=l.length;if(m!=h&&!(f&&h>m))return!1;var y=p.get(i),x=p.get(l);if(y&&x)return y==l&&x==i;var g=-1,v=!0,k=c&s?new e:void 0;for(p.set(i,l),p.set(l,i);++g<m;){var b=i[g],S=l[g];if(d)var j=f?d(S,b,g,l,i,p):d(b,S,g,i,l,p);if(j!==void 0){if(j)continue;v=!1;break}if(k){if(!t(l,function(_,w){if(!r(k,w)&&(b===_||u(b,_,c,d,p)))return k.push(w)})){v=!1;break}}else if(!(b===S||u(b,S,c,d,p))){v=!1;break}}return p.delete(i),p.delete(l),v}return qi=a,qi}var Fi,Oh;function Ow(){if(Oh)return Fi;Oh=1;function e(t){var r=-1,n=Array(t.size);return t.forEach(function(s,a){n[++r]=[a,s]}),n}return Fi=e,Fi}var Bi,Ph;function Hi(){if(Ph)return Bi;Ph=1;function e(t){var r=-1,n=Array(t.size);return t.forEach(function(s){n[++r]=s}),n}return Bi=e,Bi}var Ji,Ah;function Pw(){if(Ah)return Ji;Ah=1;var e=Cr(),t=Hm(),r=Nr(),n=Rh(),s=Ow(),a=Hi(),i=1,l=2,c="[object Boolean]",d="[object Date]",u="[object Error]",p="[object Map]",f="[object Number]",m="[object RegExp]",h="[object Set]",y="[object String]",x="[object Symbol]",g="[object ArrayBuffer]",v="[object DataView]",k=e?e.prototype:void 0,b=k?k.valueOf:void 0;function S(j,_,w,I,C,N,O){switch(w){case v:if(j.byteLength!=_.byteLength||j.byteOffset!=_.byteOffset)return!1;j=j.buffer,_=_.buffer;case g:return!(j.byteLength!=_.byteLength||!N(new t(j),new t(_)));case c:case d:case f:return r(+j,+_);case u:return j.name==_.name&&j.message==_.message;case m:case y:return j==_+"";case p:var E=s;case h:var R=I&i;if(E||(E=a),j.size!=_.size&&!R)return!1;var L=O.get(j);if(L)return L==_;I|=l,O.set(j,_);var H=n(E(j),E(_),I,C,N,O);return O.delete(j),H;case x:if(b)return b.call(j)==b.call(_)}return!1}return Ji=S,Ji}var Ui,$h;function Aw(){if($h)return Ui;$h=1;var e=Am(),t=1,r=Object.prototype,n=r.hasOwnProperty;function s(a,i,l,c,d,u){var p=l&t,f=e(a),m=f.length,h=e(i),y=h.length;if(m!=y&&!p)return!1;for(var x=m;x--;){var g=f[x];if(!(p?g in i:n.call(i,g)))return!1}var v=u.get(a),k=u.get(i);if(v&&k)return v==i&&k==a;var b=!0;u.set(a,i),u.set(i,a);for(var S=p;++x<m;){g=f[x];var j=a[g],_=i[g];if(c)var w=p?c(_,j,g,i,a,u):c(j,_,g,a,i,u);if(!(w===void 0?j===_||d(j,_,l,c,u):w)){b=!1;break}S||(S=g=="constructor")}if(b&&!S){var I=a.constructor,C=i.constructor;I!=C&&"constructor"in a&&"constructor"in i&&!(typeof I=="function"&&I instanceof I&&typeof C=="function"&&C instanceof C)&&(b=!1)}return u.delete(a),u.delete(i),b}return Ui=s,Ui}var Vi,Lh;function $w(){if(Lh)return Vi;Lh=1;var e=Qn(),t=Rh(),r=Pw(),n=Aw(),s=Rr(),a=Ke(),i=Er(),l=Qr(),c=1,d="[object Arguments]",u="[object Array]",p="[object Object]",f=Object.prototype,m=f.hasOwnProperty;function h(y,x,g,v,k,b){var S=a(y),j=a(x),_=S?u:s(y),w=j?u:s(x);_=_==d?p:_,w=w==d?p:w;var I=_==p,C=w==p,N=_==w;if(N&&i(y)){if(!i(x))return!1;S=!0,I=!1}if(N&&!I)return b||(b=new e),S||l(y)?t(y,x,g,v,k,b):r(y,x,_,g,v,k,b);if(!(g&c)){var O=I&&m.call(y,"__wrapped__"),E=C&&m.call(x,"__wrapped__");if(O||E){var R=O?y.value():y,L=E?x.value():x;return b||(b=new e),k(R,L,g,v,b)}}return N?(b||(b=new e),n(y,x,g,v,k,b)):!1}return Vi=h,Vi}var Ki,Dh;function Mh(){if(Dh)return Ki;Dh=1;var e=$w(),t=It();function r(n,s,a,i,l){return n===s?!0:n==null||s==null||!t(n)&&!t(s)?n!==n&&s!==s:e(n,s,a,i,r,l)}return Ki=r,Ki}var Gi,Wh;function Lw(){if(Wh)return Gi;Wh=1;var e=Qn(),t=Mh(),r=1,n=2;function s(a,i,l,c){var d=l.length,u=d,p=!c;if(a==null)return!u;for(a=Object(a);d--;){var f=l[d];if(p&&f[2]?f[1]!==a[f[0]]:!(f[0]in a))return!1}for(;++d<u;){f=l[d];var m=f[0],h=a[m],y=f[1];if(p&&f[2]){if(h===void 0&&!(m in a))return!1}else{var x=new e;if(c)var g=c(h,y,m,a,i,x);if(!(g===void 0?t(y,h,r|n,c,x):g))return!1}}return!0}return Gi=s,Gi}var Yi,zh;function qh(){if(zh)return Yi;zh=1;var e=gt();function t(r){return r===r&&!e(r)}return Yi=t,Yi}var Xi,Fh;function Dw(){if(Fh)return Xi;Fh=1;var e=qh(),t=Xt();function r(n){for(var s=t(n),a=s.length;a--;){var i=s[a],l=n[i];s[a]=[i,l,e(l)]}return s}return Xi=r,Xi}var Zi,Bh;function Hh(){if(Bh)return Zi;Bh=1;function e(t,r){return function(n){return n==null?!1:n[t]===r&&(r!==void 0||t in Object(n))}}return Zi=e,Zi}var Qi,Jh;function Mw(){if(Jh)return Qi;Jh=1;var e=Lw(),t=Dw(),r=Hh();function n(s){var a=t(s);return a.length==1&&a[0][2]?r(a[0][0],a[0][1]):function(i){return i===s||e(i,s,a)}}return Qi=n,Qi}var el,Uh;function Or(){if(Uh)return el;Uh=1;var e=ur(),t=It(),r="[object Symbol]";function n(s){return typeof s=="symbol"||t(s)&&e(s)==r}return el=n,el}var tl,Vh;function rl(){if(Vh)return tl;Vh=1;var e=Ke(),t=Or(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function s(a,i){if(e(a))return!1;var l=typeof a;return l=="number"||l=="symbol"||l=="boolean"||a==null||t(a)?!0:n.test(a)||!r.test(a)||i!=null&&a in Object(i)}return tl=s,tl}var nl,Kh;function Ww(){if(Kh)return nl;Kh=1;var e=so(),t="Expected a function";function r(n,s){if(typeof n!="function"||s!=null&&typeof s!="function")throw new TypeError(t);var a=function(){var i=arguments,l=s?s.apply(this,i):i[0],c=a.cache;if(c.has(l))return c.get(l);var d=n.apply(this,i);return a.cache=c.set(l,d)||c,d};return a.cache=new(r.Cache||e),a}return r.Cache=e,nl=r,nl}var sl,Gh;function zw(){if(Gh)return sl;Gh=1;var e=Ww(),t=500;function r(n){var s=e(n,function(i){return a.size===t&&a.clear(),i}),a=s.cache;return s}return sl=r,sl}var al,Yh;function qw(){if(Yh)return al;Yh=1;var e=zw(),t=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=e(function(s){var a=[];return s.charCodeAt(0)===46&&a.push(""),s.replace(t,function(i,l,c,d){a.push(c?d.replace(r,"$1"):l||i)}),a});return al=n,al}var ol,Xh;function is(){if(Xh)return ol;Xh=1;function e(t,r){for(var n=-1,s=t==null?0:t.length,a=Array(s);++n<s;)a[n]=r(t[n],n,t);return a}return ol=e,ol}var il,Zh;function Fw(){if(Zh)return il;Zh=1;var e=Cr(),t=is(),r=Ke(),n=Or(),s=e?e.prototype:void 0,a=s?s.toString:void 0;function i(l){if(typeof l=="string")return l;if(r(l))return t(l,i)+"";if(n(l))return a?a.call(l):"";var c=l+"";return c=="0"&&1/l==-1/0?"-0":c}return il=i,il}var ll,Qh;function ey(){if(Qh)return ll;Qh=1;var e=Fw();function t(r){return r==null?"":e(r)}return ll=t,ll}var cl,ty;function ls(){if(ty)return cl;ty=1;var e=Ke(),t=rl(),r=qw(),n=ey();function s(a,i){return e(a)?a:t(a,i)?[a]:r(n(a))}return cl=s,cl}var dl,ry;function tn(){if(ry)return dl;ry=1;var e=Or();function t(r){if(typeof r=="string"||e(r))return r;var n=r+"";return n=="0"&&1/r==-1/0?"-0":n}return dl=t,dl}var ul,ny;function cs(){if(ny)return ul;ny=1;var e=ls(),t=tn();function r(n,s){s=e(s,n);for(var a=0,i=s.length;n!=null&&a<i;)n=n[t(s[a++])];return a&&a==i?n:void 0}return ul=r,ul}var pl,sy;function Bw(){if(sy)return pl;sy=1;var e=cs();function t(r,n,s){var a=r==null?void 0:e(r,n);return a===void 0?s:a}return pl=t,pl}var fl,ay;function Hw(){if(ay)return fl;ay=1;function e(t,r){return t!=null&&r in Object(t)}return fl=e,fl}var ml,oy;function iy(){if(oy)return ml;oy=1;var e=ls(),t=Yr(),r=Ke(),n=rs(),s=wo(),a=tn();function i(l,c,d){c=e(c,l);for(var u=-1,p=c.length,f=!1;++u<p;){var m=a(c[u]);if(!(f=l!=null&&d(l,m)))break;l=l[m]}return f||++u!=p?f:(p=l==null?0:l.length,!!p&&s(p)&&n(m,p)&&(r(l)||t(l)))}return ml=i,ml}var hl,ly;function cy(){if(ly)return hl;ly=1;var e=Hw(),t=iy();function r(n,s){return n!=null&&t(n,s,e)}return hl=r,hl}var yl,dy;function Jw(){if(dy)return yl;dy=1;var e=Mh(),t=Bw(),r=cy(),n=rl(),s=qh(),a=Hh(),i=tn(),l=1,c=2;function d(u,p){return n(u)&&s(p)?a(i(u),p):function(f){var m=t(f,u);return m===void 0&&m===p?r(f,u):e(p,m,l|c)}}return yl=d,yl}var gl,uy;function py(){if(uy)return gl;uy=1;function e(t){return function(r){return r?.[t]}}return gl=e,gl}var xl,fy;function Uw(){if(fy)return xl;fy=1;var e=cs();function t(r){return function(n){return e(n,r)}}return xl=t,xl}var vl,my;function Vw(){if(my)return vl;my=1;var e=py(),t=Uw(),r=rl(),n=tn();function s(a){return r(a)?e(n(a)):t(a)}return vl=s,vl}var bl,hy;function Lt(){if(hy)return bl;hy=1;var e=Mw(),t=Jw(),r=mr(),n=Ke(),s=Vw();function a(i){return typeof i=="function"?i:i==null?r:typeof i=="object"?n(i)?t(i[0],i[1]):e(i):s(i)}return bl=a,bl}var kl,yy;function gy(){if(yy)return kl;yy=1;var e=km(),t=Nw(),r=Lt(),n=Ke();function s(a,i){var l=n(a)?e:t;return l(a,r(i,3))}return kl=s,kl}var wl,xy;function Kw(){if(xy)return wl;xy=1;var e=Object.prototype,t=e.hasOwnProperty;function r(n,s){return n!=null&&t.call(n,s)}return wl=r,wl}var Sl,vy;function by(){if(vy)return Sl;vy=1;var e=Kw(),t=iy();function r(n,s){return n!=null&&t(n,s,e)}return Sl=r,Sl}var _l,ky;function Gw(){if(ky)return _l;ky=1;var e=Oo(),t=Rr(),r=Yr(),n=Ke(),s=$t(),a=Er(),i=ss(),l=Qr(),c="[object Map]",d="[object Set]",u=Object.prototype,p=u.hasOwnProperty;function f(m){if(m==null)return!0;if(s(m)&&(n(m)||typeof m=="string"||typeof m.splice=="function"||a(m)||l(m)||r(m)))return!m.length;var h=t(m);if(h==c||h==d)return!m.size;if(i(m))return!e(m).length;for(var y in m)if(p.call(m,y))return!1;return!0}return _l=f,_l}var jl,wy;function Sy(){if(wy)return jl;wy=1;function e(t){return t===void 0}return jl=e,jl}var Tl,_y;function jy(){if(_y)return Tl;_y=1;var e=os(),t=$t();function r(n,s){var a=-1,i=t(n)?Array(n.length):[];return e(n,function(l,c,d){i[++a]=s(l,c,d)}),i}return Tl=r,Tl}var Il,Ty;function Iy(){if(Ty)return Il;Ty=1;var e=is(),t=Lt(),r=jy(),n=Ke();function s(a,i){var l=n(a)?e:r;return l(a,t(i,3))}return Il=s,Il}var Nl,Ny;function Yw(){if(Ny)return Nl;Ny=1;function e(t,r,n,s){var a=-1,i=t==null?0:t.length;for(s&&i&&(n=t[++a]);++a<i;)n=r(n,t[a],a,t);return n}return Nl=e,Nl}var Cl,Cy;function Xw(){if(Cy)return Cl;Cy=1;function e(t,r,n,s,a){return a(t,function(i,l,c){n=s?(s=!1,i):r(n,i,l,c)}),n}return Cl=e,Cl}var El,Ey;function Ry(){if(Ey)return El;Ey=1;var e=Yw(),t=os(),r=Lt(),n=Xw(),s=Ke();function a(i,l,c){var d=s(i)?e:n,u=arguments.length<3;return d(i,r(l,4),c,u,t)}return El=a,El}var Rl,Oy;function Zw(){if(Oy)return Rl;Oy=1;var e=ur(),t=Ke(),r=It(),n="[object String]";function s(a){return typeof a=="string"||!t(a)&&r(a)&&e(a)==n}return Rl=s,Rl}var Ol,Py;function Qw(){if(Py)return Ol;Py=1;var e=py(),t=e("length");return Ol=t,Ol}var Pl,Ay;function eS(){if(Ay)return Pl;Ay=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",s=t+r+n,a="\\ufe0e\\ufe0f",i="\\u200d",l=RegExp("["+i+e+s+a+"]");function c(d){return l.test(d)}return Pl=c,Pl}var Al,$y;function tS(){if($y)return Al;$y=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",s=t+r+n,a="\\ufe0e\\ufe0f",i="["+e+"]",l="["+s+"]",c="\\ud83c[\\udffb-\\udfff]",d="(?:"+l+"|"+c+")",u="[^"+e+"]",p="(?:\\ud83c[\\udde6-\\uddff]){2}",f="[\\ud800-\\udbff][\\udc00-\\udfff]",m="\\u200d",h=d+"?",y="["+a+"]?",x="(?:"+m+"(?:"+[u,p,f].join("|")+")"+y+h+")*",g=y+h+x,v="(?:"+[u+l+"?",l,p,f,i].join("|")+")",k=RegExp(c+"(?="+c+")|"+v+g,"g");function b(S){for(var j=k.lastIndex=0;k.test(S);)++j;return j}return Al=b,Al}var $l,Ly;function rS(){if(Ly)return $l;Ly=1;var e=Qw(),t=eS(),r=tS();function n(s){return t(s)?r(s):e(s)}return $l=n,$l}var Ll,Dy;function nS(){if(Dy)return Ll;Dy=1;var e=Oo(),t=Rr(),r=$t(),n=Zw(),s=rS(),a="[object Map]",i="[object Set]";function l(c){if(c==null)return 0;if(r(c))return n(c)?s(c):c.length;var d=t(c);return d==a||d==i?c.size:e(c).length}return Ll=l,Ll}var Dl,My;function sS(){if(My)return Dl;My=1;var e=lo(),t=Qm(),r=Ni(),n=Lt(),s=as(),a=Ke(),i=Er(),l=Kr(),c=gt(),d=Qr();function u(p,f,m){var h=a(p),y=h||i(p)||d(p);if(f=n(f,4),m==null){var x=p&&p.constructor;y?m=h?new x:[]:c(p)?m=l(x)?t(s(p)):{}:m={}}return(y?e:r)(p,function(g,v,k){return f(m,g,v,k)}),m}return Dl=u,Dl}var Ml,Wy;function aS(){if(Wy)return Ml;Wy=1;var e=Cr(),t=Yr(),r=Ke(),n=e?e.isConcatSpreadable:void 0;function s(a){return r(a)||t(a)||!!(n&&a&&a[n])}return Ml=s,Ml}var Wl,zy;function zl(){if(zy)return Wl;zy=1;var e=Vo(),t=aS();function r(n,s,a,i,l){var c=-1,d=n.length;for(a||(a=t),l||(l=[]);++c<d;){var u=n[c];s>0&&a(u)?s>1?r(u,s-1,a,i,l):e(l,u):i||(l[l.length]=u)}return l}return Wl=r,Wl}var ql,qy;function oS(){if(qy)return ql;qy=1;function e(t,r,n){switch(n.length){case 0:return t.call(r);case 1:return t.call(r,n[0]);case 2:return t.call(r,n[0],n[1]);case 3:return t.call(r,n[0],n[1],n[2])}return t.apply(r,n)}return ql=e,ql}var Fl,Fy;function By(){if(Fy)return Fl;Fy=1;var e=oS(),t=Math.max;function r(n,s,a){return s=t(s===void 0?n.length-1:s,0),function(){for(var i=arguments,l=-1,c=t(i.length-s,0),d=Array(c);++l<c;)d[l]=i[s+l];l=-1;for(var u=Array(s+1);++l<s;)u[l]=i[l];return u[s]=a(d),e(n,this,u)}}return Fl=r,Fl}var Bl,Hy;function iS(){if(Hy)return Bl;Hy=1;var e=Si(),t=Wf(),r=mr(),n=t?function(s,a){return t(s,"toString",{configurable:!0,enumerable:!1,value:e(a),writable:!0})}:r;return Bl=n,Bl}var Hl,Jy;function lS(){if(Jy)return Hl;Jy=1;var e=800,t=16,r=Date.now;function n(s){var a=0,i=0;return function(){var l=r(),c=t-(l-i);if(i=l,c>0){if(++a>=e)return arguments[0]}else a=0;return s.apply(void 0,arguments)}}return Hl=n,Hl}var Jl,Uy;function Vy(){if(Uy)return Jl;Uy=1;var e=iS(),t=lS(),r=t(e);return Jl=r,Jl}var Ul,Ky;function ds(){if(Ky)return Ul;Ky=1;var e=mr(),t=By(),r=Vy();function n(s,a){return r(t(s,a,e),s+"")}return Ul=n,Ul}var Vl,Gy;function Yy(){if(Gy)return Vl;Gy=1;function e(t,r,n,s){for(var a=t.length,i=n+(s?1:-1);s?i--:++i<a;)if(r(t[i],i,t))return i;return-1}return Vl=e,Vl}var Kl,Xy;function cS(){if(Xy)return Kl;Xy=1;function e(t){return t!==t}return Kl=e,Kl}var Gl,Zy;function dS(){if(Zy)return Gl;Zy=1;function e(t,r,n){for(var s=n-1,a=t.length;++s<a;)if(t[s]===r)return s;return-1}return Gl=e,Gl}var Yl,Qy;function uS(){if(Qy)return Yl;Qy=1;var e=Yy(),t=cS(),r=dS();function n(s,a,i){return a===a?r(s,a,i):e(s,t,i)}return Yl=n,Yl}var Xl,eg;function pS(){if(eg)return Xl;eg=1;var e=uS();function t(r,n){var s=r==null?0:r.length;return!!s&&e(r,n,0)>-1}return Xl=t,Xl}var Zl,tg;function fS(){if(tg)return Zl;tg=1;function e(t,r,n){for(var s=-1,a=t==null?0:t.length;++s<a;)if(n(r,t[s]))return!0;return!1}return Zl=e,Zl}var Ql,rg;function mS(){if(rg)return Ql;rg=1;function e(){}return Ql=e,Ql}var ec,ng;function hS(){if(ng)return ec;ng=1;var e=Wm(),t=mS(),r=Hi(),n=1/0,s=e&&1/r(new e([,-0]))[1]==n?function(a){return new e(a)}:t;return ec=s,ec}var tc,sg;function yS(){if(sg)return tc;sg=1;var e=Th(),t=pS(),r=fS(),n=Ch(),s=hS(),a=Hi(),i=200;function l(c,d,u){var p=-1,f=t,m=c.length,h=!0,y=[],x=y;if(u)h=!1,f=r;else if(m>=i){var g=d?null:s(c);if(g)return a(g);h=!1,f=n,x=new e}else x=d?[]:y;e:for(;++p<m;){var v=c[p],k=d?d(v):v;if(v=u||v!==0?v:0,h&&k===k){for(var b=x.length;b--;)if(x[b]===k)continue e;d&&x.push(k),y.push(v)}else f(x,k,u)||(x!==y&&x.push(k),y.push(v))}return y}return tc=l,tc}var rc,ag;function og(){if(ag)return rc;ag=1;var e=$t(),t=It();function r(n){return t(n)&&e(n)}return rc=r,rc}var nc,ig;function gS(){if(ig)return nc;ig=1;var e=zl(),t=ds(),r=yS(),n=og(),s=t(function(a){return r(e(a,1,n,!0))});return nc=s,nc}var sc,lg;function xS(){if(lg)return sc;lg=1;var e=is();function t(r,n){return e(n,function(s){return r[s]})}return sc=t,sc}var ac,cg;function dg(){if(cg)return ac;cg=1;var e=xS(),t=Xt();function r(n){return n==null?[]:e(n,t(n))}return ac=r,ac}var oc,ug;function xt(){if(ug)return oc;ug=1;var e;if(typeof ma=="function")try{e={clone:jw(),constant:Si(),each:kh(),filter:gy(),has:by(),isArray:Ke(),isEmpty:Gw(),isFunction:Kr(),isUndefined:Sy(),keys:Xt(),map:Iy(),reduce:Ry(),size:nS(),transform:sS(),union:gS(),values:dg()}}catch{}return e||(e=window._),oc=e,oc}var ic,pg;function lc(){if(pg)return ic;pg=1;var e=xt();ic=s;var t="\0",r="\0",n="";function s(u){this._isDirected=e.has(u,"directed")?u.directed:!0,this._isMultigraph=e.has(u,"multigraph")?u.multigraph:!1,this._isCompound=e.has(u,"compound")?u.compound:!1,this._label=void 0,this._defaultNodeLabelFn=e.constant(void 0),this._defaultEdgeLabelFn=e.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[r]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}s.prototype._nodeCount=0,s.prototype._edgeCount=0,s.prototype.isDirected=function(){return this._isDirected},s.prototype.isMultigraph=function(){return this._isMultigraph},s.prototype.isCompound=function(){return this._isCompound},s.prototype.setGraph=function(u){return this._label=u,this},s.prototype.graph=function(){return this._label},s.prototype.setDefaultNodeLabel=function(u){return e.isFunction(u)||(u=e.constant(u)),this._defaultNodeLabelFn=u,this},s.prototype.nodeCount=function(){return this._nodeCount},s.prototype.nodes=function(){return e.keys(this._nodes)},s.prototype.sources=function(){var u=this;return e.filter(this.nodes(),function(p){return e.isEmpty(u._in[p])})},s.prototype.sinks=function(){var u=this;return e.filter(this.nodes(),function(p){return e.isEmpty(u._out[p])})},s.prototype.setNodes=function(u,p){var f=arguments,m=this;return e.each(u,function(h){f.length>1?m.setNode(h,p):m.setNode(h)}),this},s.prototype.setNode=function(u,p){return e.has(this._nodes,u)?(arguments.length>1&&(this._nodes[u]=p),this):(this._nodes[u]=arguments.length>1?p:this._defaultNodeLabelFn(u),this._isCompound&&(this._parent[u]=r,this._children[u]={},this._children[r][u]=!0),this._in[u]={},this._preds[u]={},this._out[u]={},this._sucs[u]={},++this._nodeCount,this)},s.prototype.node=function(u){return this._nodes[u]},s.prototype.hasNode=function(u){return e.has(this._nodes,u)},s.prototype.removeNode=function(u){var p=this;if(e.has(this._nodes,u)){var f=function(m){p.removeEdge(p._edgeObjs[m])};delete this._nodes[u],this._isCompound&&(this._removeFromParentsChildList(u),delete this._parent[u],e.each(this.children(u),function(m){p.setParent(m)}),delete this._children[u]),e.each(e.keys(this._in[u]),f),delete this._in[u],delete this._preds[u],e.each(e.keys(this._out[u]),f),delete this._out[u],delete this._sucs[u],--this._nodeCount}return this},s.prototype.setParent=function(u,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(e.isUndefined(p))p=r;else{p+="";for(var f=p;!e.isUndefined(f);f=this.parent(f))if(f===u)throw new Error("Setting "+p+" as parent of "+u+" would create a cycle");this.setNode(p)}return this.setNode(u),this._removeFromParentsChildList(u),this._parent[u]=p,this._children[p][u]=!0,this},s.prototype._removeFromParentsChildList=function(u){delete this._children[this._parent[u]][u]},s.prototype.parent=function(u){if(this._isCompound){var p=this._parent[u];if(p!==r)return p}},s.prototype.children=function(u){if(e.isUndefined(u)&&(u=r),this._isCompound){var p=this._children[u];if(p)return e.keys(p)}else{if(u===r)return this.nodes();if(this.hasNode(u))return[]}},s.prototype.predecessors=function(u){var p=this._preds[u];if(p)return e.keys(p)},s.prototype.successors=function(u){var p=this._sucs[u];if(p)return e.keys(p)},s.prototype.neighbors=function(u){var p=this.predecessors(u);if(p)return e.union(p,this.successors(u))},s.prototype.isLeaf=function(u){var p;return this.isDirected()?p=this.successors(u):p=this.neighbors(u),p.length===0},s.prototype.filterNodes=function(u){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var f=this;e.each(this._nodes,function(y,x){u(x)&&p.setNode(x,y)}),e.each(this._edgeObjs,function(y){p.hasNode(y.v)&&p.hasNode(y.w)&&p.setEdge(y,f.edge(y))});var m={};function h(y){var x=f.parent(y);return x===void 0||p.hasNode(x)?(m[y]=x,x):x in m?m[x]:h(x)}return this._isCompound&&e.each(p.nodes(),function(y){p.setParent(y,h(y))}),p},s.prototype.setDefaultEdgeLabel=function(u){return e.isFunction(u)||(u=e.constant(u)),this._defaultEdgeLabelFn=u,this},s.prototype.edgeCount=function(){return this._edgeCount},s.prototype.edges=function(){return e.values(this._edgeObjs)},s.prototype.setPath=function(u,p){var f=this,m=arguments;return e.reduce(u,function(h,y){return m.length>1?f.setEdge(h,y,p):f.setEdge(h,y),y}),this},s.prototype.setEdge=function(){var u,p,f,m,h=!1,y=arguments[0];typeof y=="object"&&y!==null&&"v"in y?(u=y.v,p=y.w,f=y.name,arguments.length===2&&(m=arguments[1],h=!0)):(u=y,p=arguments[1],f=arguments[3],arguments.length>2&&(m=arguments[2],h=!0)),u=""+u,p=""+p,e.isUndefined(f)||(f=""+f);var x=l(this._isDirected,u,p,f);if(e.has(this._edgeLabels,x))return h&&(this._edgeLabels[x]=m),this;if(!e.isUndefined(f)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(u),this.setNode(p),this._edgeLabels[x]=h?m:this._defaultEdgeLabelFn(u,p,f);var g=c(this._isDirected,u,p,f);return u=g.v,p=g.w,Object.freeze(g),this._edgeObjs[x]=g,a(this._preds[p],u),a(this._sucs[u],p),this._in[p][x]=g,this._out[u][x]=g,this._edgeCount++,this},s.prototype.edge=function(u,p,f){var m=arguments.length===1?d(this._isDirected,arguments[0]):l(this._isDirected,u,p,f);return this._edgeLabels[m]},s.prototype.hasEdge=function(u,p,f){var m=arguments.length===1?d(this._isDirected,arguments[0]):l(this._isDirected,u,p,f);return e.has(this._edgeLabels,m)},s.prototype.removeEdge=function(u,p,f){var m=arguments.length===1?d(this._isDirected,arguments[0]):l(this._isDirected,u,p,f),h=this._edgeObjs[m];return h&&(u=h.v,p=h.w,delete this._edgeLabels[m],delete this._edgeObjs[m],i(this._preds[p],u),i(this._sucs[u],p),delete this._in[p][m],delete this._out[u][m],this._edgeCount--),this},s.prototype.inEdges=function(u,p){var f=this._in[u];if(f){var m=e.values(f);return p?e.filter(m,function(h){return h.v===p}):m}},s.prototype.outEdges=function(u,p){var f=this._out[u];if(f){var m=e.values(f);return p?e.filter(m,function(h){return h.w===p}):m}},s.prototype.nodeEdges=function(u,p){var f=this.inEdges(u,p);if(f)return f.concat(this.outEdges(u,p))};function a(u,p){u[p]?u[p]++:u[p]=1}function i(u,p){--u[p]||delete u[p]}function l(u,p,f,m){var h=""+p,y=""+f;if(!u&&h>y){var x=h;h=y,y=x}return h+n+y+n+(e.isUndefined(m)?t:m)}function c(u,p,f,m){var h=""+p,y=""+f;if(!u&&h>y){var x=h;h=y,y=x}var g={v:h,w:y};return m&&(g.name=m),g}function d(u,p){return l(u,p.v,p.w,p.name)}return ic}var cc,fg;function vS(){return fg||(fg=1,cc="2.1.8"),cc}var dc,mg;function bS(){return mg||(mg=1,dc={Graph:lc(),version:vS()}),dc}var uc,hg;function kS(){if(hg)return uc;hg=1;var e=xt(),t=lc();uc={write:r,read:a};function r(i){var l={options:{directed:i.isDirected(),multigraph:i.isMultigraph(),compound:i.isCompound()},nodes:n(i),edges:s(i)};return e.isUndefined(i.graph())||(l.value=e.clone(i.graph())),l}function n(i){return e.map(i.nodes(),function(l){var c=i.node(l),d=i.parent(l),u={v:l};return e.isUndefined(c)||(u.value=c),e.isUndefined(d)||(u.parent=d),u})}function s(i){return e.map(i.edges(),function(l){var c=i.edge(l),d={v:l.v,w:l.w};return e.isUndefined(l.name)||(d.name=l.name),e.isUndefined(c)||(d.value=c),d})}function a(i){var l=new t(i.options).setGraph(i.value);return e.each(i.nodes,function(c){l.setNode(c.v,c.value),c.parent&&l.setParent(c.v,c.parent)}),e.each(i.edges,function(c){l.setEdge({v:c.v,w:c.w,name:c.name},c.value)}),l}return uc}var pc,yg;function wS(){if(yg)return pc;yg=1;var e=xt();pc=t;function t(r){var n={},s=[],a;function i(l){e.has(n,l)||(n[l]=!0,a.push(l),e.each(r.successors(l),i),e.each(r.predecessors(l),i))}return e.each(r.nodes(),function(l){a=[],i(l),a.length&&s.push(a)}),s}return pc}var fc,gg;function xg(){if(gg)return fc;gg=1;var e=xt();fc=t;function t(){this._arr=[],this._keyIndices={}}return t.prototype.size=function(){return this._arr.length},t.prototype.keys=function(){return this._arr.map(function(r){return r.key})},t.prototype.has=function(r){return e.has(this._keyIndices,r)},t.prototype.priority=function(r){var n=this._keyIndices[r];if(n!==void 0)return this._arr[n].priority},t.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key},t.prototype.add=function(r,n){var s=this._keyIndices;if(r=String(r),!e.has(s,r)){var a=this._arr,i=a.length;return s[r]=i,a.push({key:r,priority:n}),this._decrease(i),!0}return!1},t.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var r=this._arr.pop();return delete this._keyIndices[r.key],this._heapify(0),r.key},t.prototype.decrease=function(r,n){var s=this._keyIndices[r];if(n>this._arr[s].priority)throw new Error("New priority is greater than current priority. Key: "+r+" Old: "+this._arr[s].priority+" New: "+n);this._arr[s].priority=n,this._decrease(s)},t.prototype._heapify=function(r){var n=this._arr,s=2*r,a=s+1,i=r;s<n.length&&(i=n[s].priority<n[i].priority?s:i,a<n.length&&(i=n[a].priority<n[i].priority?a:i),i!==r&&(this._swap(r,i),this._heapify(i)))},t.prototype._decrease=function(r){for(var n=this._arr,s=n[r].priority,a;r!==0&&(a=r>>1,!(n[a].priority<s));)this._swap(r,a),r=a},t.prototype._swap=function(r,n){var s=this._arr,a=this._keyIndices,i=s[r],l=s[n];s[r]=l,s[n]=i,a[l.key]=r,a[i.key]=n},fc}var mc,vg;function bg(){if(vg)return mc;vg=1;var e=xt(),t=xg();mc=n;var r=e.constant(1);function n(a,i,l,c){return s(a,String(i),l||r,c||function(d){return a.outEdges(d)})}function s(a,i,l,c){var d={},u=new t,p,f,m=function(h){var y=h.v!==p?h.v:h.w,x=d[y],g=l(h),v=f.distance+g;if(g<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+h+" Weight: "+g);v<x.distance&&(x.distance=v,x.predecessor=p,u.decrease(y,v))};for(a.nodes().forEach(function(h){var y=h===i?0:Number.POSITIVE_INFINITY;d[h]={distance:y},u.add(h,y)});u.size()>0&&(p=u.removeMin(),f=d[p],f.distance!==Number.POSITIVE_INFINITY);)c(p).forEach(m);return d}return mc}var hc,kg;function SS(){if(kg)return hc;kg=1;var e=bg(),t=xt();hc=r;function r(n,s,a){return t.transform(n.nodes(),function(i,l){i[l]=e(n,l,s,a)},{})}return hc}var yc,wg;function Sg(){if(wg)return yc;wg=1;var e=xt();yc=t;function t(r){var n=0,s=[],a={},i=[];function l(c){var d=a[c]={onStack:!0,lowlink:n,index:n++};if(s.push(c),r.successors(c).forEach(function(f){e.has(a,f)?a[f].onStack&&(d.lowlink=Math.min(d.lowlink,a[f].index)):(l(f),d.lowlink=Math.min(d.lowlink,a[f].lowlink))}),d.lowlink===d.index){var u=[],p;do p=s.pop(),a[p].onStack=!1,u.push(p);while(c!==p);i.push(u)}}return r.nodes().forEach(function(c){e.has(a,c)||l(c)}),i}return yc}var gc,_g;function _S(){if(_g)return gc;_g=1;var e=xt(),t=Sg();gc=r;function r(n){return e.filter(t(n),function(s){return s.length>1||s.length===1&&n.hasEdge(s[0],s[0])})}return gc}var xc,jg;function jS(){if(jg)return xc;jg=1;var e=xt();xc=r;var t=e.constant(1);function r(s,a,i){return n(s,a||t,i||function(l){return s.outEdges(l)})}function n(s,a,i){var l={},c=s.nodes();return c.forEach(function(d){l[d]={},l[d][d]={distance:0},c.forEach(function(u){d!==u&&(l[d][u]={distance:Number.POSITIVE_INFINITY})}),i(d).forEach(function(u){var p=u.v===d?u.w:u.v,f=a(u);l[d][p]={distance:f,predecessor:d}})}),c.forEach(function(d){var u=l[d];c.forEach(function(p){var f=l[p];c.forEach(function(m){var h=f[d],y=u[m],x=f[m],g=h.distance+y.distance;g<x.distance&&(x.distance=g,x.predecessor=y.predecessor)})})}),l}return xc}var vc,Tg;function Ig(){if(Tg)return vc;Tg=1;var e=xt();vc=t,t.CycleException=r;function t(n){var s={},a={},i=[];function l(c){if(e.has(a,c))throw new r;e.has(s,c)||(a[c]=!0,s[c]=!0,e.each(n.predecessors(c),l),delete a[c],i.push(c))}if(e.each(n.sinks(),l),e.size(s)!==n.nodeCount())throw new r;return i}function r(){}return r.prototype=new Error,vc}var bc,Ng;function TS(){if(Ng)return bc;Ng=1;var e=Ig();bc=t;function t(r){try{e(r)}catch(n){if(n instanceof e.CycleException)return!1;throw n}return!0}return bc}var kc,Cg;function Eg(){if(Cg)return kc;Cg=1;var e=xt();kc=t;function t(n,s,a){e.isArray(s)||(s=[s]);var i=(n.isDirected()?n.successors:n.neighbors).bind(n),l=[],c={};return e.each(s,function(d){if(!n.hasNode(d))throw new Error("Graph does not have node: "+d);r(n,d,a==="post",c,i,l)}),l}function r(n,s,a,i,l,c){e.has(i,s)||(i[s]=!0,a||c.push(s),e.each(l(s),function(d){r(n,d,a,i,l,c)}),a&&c.push(s))}return kc}var wc,Rg;function IS(){if(Rg)return wc;Rg=1;var e=Eg();wc=t;function t(r,n){return e(r,n,"post")}return wc}var Sc,Og;function NS(){if(Og)return Sc;Og=1;var e=Eg();Sc=t;function t(r,n){return e(r,n,"pre")}return Sc}var _c,Pg;function CS(){if(Pg)return _c;Pg=1;var e=xt(),t=lc(),r=xg();_c=n;function n(s,a){var i=new t,l={},c=new r,d;function u(f){var m=f.v===d?f.w:f.v,h=c.priority(m);if(h!==void 0){var y=a(f);y<h&&(l[m]=d,c.decrease(m,y))}}if(s.nodeCount()===0)return i;e.each(s.nodes(),function(f){c.add(f,Number.POSITIVE_INFINITY),i.setNode(f)}),c.decrease(s.nodes()[0],0);for(var p=!1;c.size()>0;){if(d=c.removeMin(),e.has(l,d))i.setEdge(d,l[d]);else{if(p)throw new Error("Input graph is not connected: "+s);p=!0}s.nodeEdges(d).forEach(u)}return i}return _c}var jc,Ag;function ES(){return Ag||(Ag=1,jc={components:wS(),dijkstra:bg(),dijkstraAll:SS(),findCycles:_S(),floydWarshall:jS(),isAcyclic:TS(),postorder:IS(),preorder:NS(),prim:CS(),tarjan:Sg(),topsort:Ig()}),jc}var Tc,$g;function RS(){if($g)return Tc;$g=1;var e=bS();return Tc={Graph:e.Graph,json:kS(),alg:ES(),version:e.version},Tc}var Ic,Lg;function St(){if(Lg)return Ic;Lg=1;var e;if(typeof ma=="function")try{e=RS()}catch{}return e||(e=window.graphlib),Ic=e,Ic}var Nc,Dg;function OS(){if(Dg)return Nc;Dg=1;var e=ih(),t=1,r=4;function n(s){return e(s,t|r)}return Nc=n,Nc}var Cc,Mg;function us(){if(Mg)return Cc;Mg=1;var e=Nr(),t=$t(),r=rs(),n=gt();function s(a,i,l){if(!n(l))return!1;var c=typeof i;return(c=="number"?t(l)&&r(i,l.length):c=="string"&&i in l)?e(l[i],a):!1}return Cc=s,Cc}var Ec,Wg;function PS(){if(Wg)return Ec;Wg=1;var e=ds(),t=Nr(),r=us(),n=fr(),s=Object.prototype,a=s.hasOwnProperty,i=e(function(l,c){l=Object(l);var d=-1,u=c.length,p=u>2?c[2]:void 0;for(p&&r(c[0],c[1],p)&&(u=1);++d<u;)for(var f=c[d],m=n(f),h=-1,y=m.length;++h<y;){var x=m[h],g=l[x];(g===void 0||t(g,s[x])&&!a.call(l,x))&&(l[x]=f[x])}return l});return Ec=i,Ec}var Rc,zg;function AS(){if(zg)return Rc;zg=1;var e=Lt(),t=$t(),r=Xt();function n(s){return function(a,i,l){var c=Object(a);if(!t(a)){var d=e(i,3);a=r(a),i=function(p){return d(c[p],p,c)}}var u=s(a,i,l);return u>-1?c[d?a[u]:u]:void 0}}return Rc=n,Rc}var Oc,qg;function $S(){if(qg)return Oc;qg=1;var e=/\s/;function t(r){for(var n=r.length;n--&&e.test(r.charAt(n)););return n}return Oc=t,Oc}var Pc,Fg;function LS(){if(Fg)return Pc;Fg=1;var e=$S(),t=/^\s+/;function r(n){return n&&n.slice(0,e(n)+1).replace(t,"")}return Pc=r,Pc}var Ac,Bg;function DS(){if(Bg)return Ac;Bg=1;var e=LS(),t=gt(),r=Or(),n=NaN,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,i=/^0o[0-7]+$/i,l=parseInt;function c(d){if(typeof d=="number")return d;if(r(d))return n;if(t(d)){var u=typeof d.valueOf=="function"?d.valueOf():d;d=t(u)?u+"":u}if(typeof d!="string")return d===0?d:+d;d=e(d);var p=a.test(d);return p||i.test(d)?l(d.slice(2),p?2:8):s.test(d)?n:+d}return Ac=c,Ac}var $c,Hg;function Jg(){if(Hg)return $c;Hg=1;var e=DS(),t=1/0,r=17976931348623157e292;function n(s){if(!s)return s===0?s:0;if(s=e(s),s===t||s===-t){var a=s<0?-1:1;return a*r}return s===s?s:0}return $c=n,$c}var Lc,Ug;function MS(){if(Ug)return Lc;Ug=1;var e=Jg();function t(r){var n=e(r),s=n%1;return n===n?s?n-s:n:0}return Lc=t,Lc}var Dc,Vg;function WS(){if(Vg)return Dc;Vg=1;var e=Yy(),t=Lt(),r=MS(),n=Math.max;function s(a,i,l){var c=a==null?0:a.length;if(!c)return-1;var d=l==null?0:r(l);return d<0&&(d=n(c+d,0)),e(a,t(i,3),d)}return Dc=s,Dc}var Mc,Kg;function zS(){if(Kg)return Mc;Kg=1;var e=AS(),t=WS(),r=e(t);return Mc=r,Mc}var Wc,Gg;function Yg(){if(Gg)return Wc;Gg=1;var e=zl();function t(r){var n=r==null?0:r.length;return n?e(r,1):[]}return Wc=t,Wc}var zc,Xg;function qS(){if(Xg)return zc;Xg=1;var e=Ti(),t=gh(),r=fr();function n(s,a){return s==null?s:e(s,t(a),r)}return zc=n,zc}var qc,Zg;function FS(){if(Zg)return qc;Zg=1;function e(t){var r=t==null?0:t.length;return r?t[r-1]:void 0}return qc=e,qc}var Fc,Qg;function BS(){if(Qg)return Fc;Qg=1;var e=es(),t=Ni(),r=Lt();function n(s,a){var i={};return a=r(a,3),t(s,function(l,c,d){e(i,c,a(l,c,d))}),i}return Fc=n,Fc}var Bc,ex;function Hc(){if(ex)return Bc;ex=1;var e=Or();function t(r,n,s){for(var a=-1,i=r.length;++a<i;){var l=r[a],c=n(l);if(c!=null&&(d===void 0?c===c&&!e(c):s(c,d)))var d=c,u=l}return u}return Bc=t,Bc}var Jc,tx;function HS(){if(tx)return Jc;tx=1;function e(t,r){return t>r}return Jc=e,Jc}var Uc,rx;function JS(){if(rx)return Uc;rx=1;var e=Hc(),t=HS(),r=mr();function n(s){return s&&s.length?e(s,r,t):void 0}return Uc=n,Uc}var Vc,nx;function sx(){if(nx)return Vc;nx=1;var e=es(),t=Nr();function r(n,s,a){(a!==void 0&&!t(n[s],a)||a===void 0&&!(s in n))&&e(n,s,a)}return Vc=r,Vc}var Kc,ax;function US(){if(ax)return Kc;ax=1;var e=ur(),t=as(),r=It(),n="[object Object]",s=Function.prototype,a=Object.prototype,i=s.toString,l=a.hasOwnProperty,c=i.call(Object);function d(u){if(!r(u)||e(u)!=n)return!1;var p=t(u);if(p===null)return!0;var f=l.call(p,"constructor")&&p.constructor;return typeof f=="function"&&f instanceof f&&i.call(f)==c}return Kc=d,Kc}var Gc,ox;function ix(){if(ox)return Gc;ox=1;function e(t,r){if(!(r==="constructor"&&typeof t[r]=="function")&&r!="__proto__")return t[r]}return Gc=e,Gc}var Yc,lx;function VS(){if(lx)return Yc;lx=1;var e=Gr(),t=fr();function r(n){return e(n,t(n))}return Yc=r,Yc}var Xc,cx;function KS(){if(cx)return Xc;cx=1;var e=sx(),t=gm(),r=Ym(),n=vm(),s=th(),a=Yr(),i=Ke(),l=og(),c=Er(),d=Kr(),u=gt(),p=US(),f=Qr(),m=ix(),h=VS();function y(x,g,v,k,b,S,j){var _=m(x,v),w=m(g,v),I=j.get(w);if(I){e(x,v,I);return}var C=S?S(_,w,v+"",x,g,j):void 0,N=C===void 0;if(N){var O=i(w),E=!O&&c(w),R=!O&&!E&&f(w);C=w,O||E||R?i(_)?C=_:l(_)?C=n(_):E?(N=!1,C=t(w,!0)):R?(N=!1,C=r(w,!0)):C=[]:p(w)||a(w)?(C=_,a(_)?C=h(_):(!u(_)||d(_))&&(C=s(w))):N=!1}N&&(j.set(w,C),b(C,w,k,S,j),j.delete(w)),e(x,v,C)}return Xc=y,Xc}var Zc,dx;function GS(){if(dx)return Zc;dx=1;var e=Qn(),t=sx(),r=Ti(),n=KS(),s=gt(),a=fr(),i=ix();function l(c,d,u,p,f){c!==d&&r(d,function(m,h){if(f||(f=new e),s(m))n(c,d,h,u,l,p,f);else{var y=p?p(i(c,h),m,h+"",c,d,f):void 0;y===void 0&&(y=m),t(c,h,y)}},a)}return Zc=l,Zc}var Qc,ux;function YS(){if(ux)return Qc;ux=1;var e=ds(),t=us();function r(n){return e(function(s,a){var i=-1,l=a.length,c=l>1?a[l-1]:void 0,d=l>2?a[2]:void 0;for(c=n.length>3&&typeof c=="function"?(l--,c):void 0,d&&t(a[0],a[1],d)&&(c=l<3?void 0:c,l=1),s=Object(s);++i<l;){var u=a[i];u&&n(s,u,i,c)}return s})}return Qc=r,Qc}var ed,px;function XS(){if(px)return ed;px=1;var e=GS(),t=YS(),r=t(function(n,s,a){e(n,s,a)});return ed=r,ed}var td,fx;function mx(){if(fx)return td;fx=1;function e(t,r){return t<r}return td=e,td}var rd,hx;function ZS(){if(hx)return rd;hx=1;var e=Hc(),t=mx(),r=mr();function n(s){return s&&s.length?e(s,r,t):void 0}return rd=n,rd}var nd,yx;function QS(){if(yx)return nd;yx=1;var e=Hc(),t=Lt(),r=mx();function n(s,a){return s&&s.length?e(s,t(a,2),r):void 0}return nd=n,nd}var sd,gx;function e_(){if(gx)return sd;gx=1;var e=wt(),t=function(){return e.Date.now()};return sd=t,sd}var ad,xx;function t_(){if(xx)return ad;xx=1;var e=ts(),t=ls(),r=rs(),n=gt(),s=tn();function a(i,l,c,d){if(!n(i))return i;l=t(l,i);for(var u=-1,p=l.length,f=p-1,m=i;m!=null&&++u<p;){var h=s(l[u]),y=c;if(h==="__proto__"||h==="constructor"||h==="prototype")return i;if(u!=f){var x=m[h];y=d?d(x,h,m):void 0,y===void 0&&(y=n(x)?x:r(l[u+1])?[]:{})}e(m,h,y),m=m[h]}return i}return ad=a,ad}var od,vx;function r_(){if(vx)return od;vx=1;var e=cs(),t=t_(),r=ls();function n(s,a,i){for(var l=-1,c=a.length,d={};++l<c;){var u=a[l],p=e(s,u);i(p,u)&&t(d,r(u,s),p)}return d}return od=n,od}var id,bx;function n_(){if(bx)return id;bx=1;var e=r_(),t=cy();function r(n,s){return e(n,s,function(a,i){return t(n,i)})}return id=r,id}var ld,kx;function s_(){if(kx)return ld;kx=1;var e=Yg(),t=By(),r=Vy();function n(s){return r(t(s,void 0,e),s+"")}return ld=n,ld}var cd,wx;function a_(){if(wx)return cd;wx=1;var e=n_(),t=s_(),r=t(function(n,s){return n==null?{}:e(n,s)});return cd=r,cd}var dd,Sx;function o_(){if(Sx)return dd;Sx=1;var e=Math.ceil,t=Math.max;function r(n,s,a,i){for(var l=-1,c=t(e((s-n)/(a||1)),0),d=Array(c);c--;)d[i?c:++l]=n,n+=a;return d}return dd=r,dd}var ud,_x;function i_(){if(_x)return ud;_x=1;var e=o_(),t=us(),r=Jg();function n(s){return function(a,i,l){return l&&typeof l!="number"&&t(a,i,l)&&(i=l=void 0),a=r(a),i===void 0?(i=a,a=0):i=r(i),l=l===void 0?a<i?1:-1:r(l),e(a,i,l,s)}}return ud=n,ud}var pd,jx;function l_(){if(jx)return pd;jx=1;var e=i_(),t=e();return pd=t,pd}var fd,Tx;function c_(){if(Tx)return fd;Tx=1;function e(t,r){var n=t.length;for(t.sort(r);n--;)t[n]=t[n].value;return t}return fd=e,fd}var md,Ix;function d_(){if(Ix)return md;Ix=1;var e=Or();function t(r,n){if(r!==n){var s=r!==void 0,a=r===null,i=r===r,l=e(r),c=n!==void 0,d=n===null,u=n===n,p=e(n);if(!d&&!p&&!l&&r>n||l&&c&&u&&!d&&!p||a&&c&&u||!s&&u||!i)return 1;if(!a&&!l&&!p&&r<n||p&&s&&i&&!a&&!l||d&&s&&i||!c&&i||!u)return-1}return 0}return md=t,md}var hd,Nx;function u_(){if(Nx)return hd;Nx=1;var e=d_();function t(r,n,s){for(var a=-1,i=r.criteria,l=n.criteria,c=i.length,d=s.length;++a<c;){var u=e(i[a],l[a]);if(u){if(a>=d)return u;var p=s[a];return u*(p=="desc"?-1:1)}}return r.index-n.index}return hd=t,hd}var yd,Cx;function p_(){if(Cx)return yd;Cx=1;var e=is(),t=cs(),r=Lt(),n=jy(),s=c_(),a=ns(),i=u_(),l=mr(),c=Ke();function d(u,p,f){p.length?p=e(p,function(y){return c(y)?function(x){return t(x,y.length===1?y[0]:y)}:y}):p=[l];var m=-1;p=e(p,a(r));var h=n(u,function(y,x,g){var v=e(p,function(k){return k(y)});return{criteria:v,index:++m,value:y}});return s(h,function(y,x){return i(y,x,f)})}return yd=d,yd}var gd,Ex;function f_(){if(Ex)return gd;Ex=1;var e=zl(),t=p_(),r=ds(),n=us(),s=r(function(a,i){if(a==null)return[];var l=i.length;return l>1&&n(a,i[0],i[1])?i=[]:l>2&&n(i[0],i[1],i[2])&&(i=[i[0]]),t(a,e(i,1),[])});return gd=s,gd}var xd,Rx;function m_(){if(Rx)return xd;Rx=1;var e=ey(),t=0;function r(n){var s=++t;return e(n)+s}return xd=r,xd}var vd,Ox;function h_(){if(Ox)return vd;Ox=1;function e(t,r,n){for(var s=-1,a=t.length,i=r.length,l={};++s<a;){var c=s<i?r[s]:void 0;n(l,t[s],c)}return l}return vd=e,vd}var bd,Px;function y_(){if(Px)return bd;Px=1;var e=ts(),t=h_();function r(n,s){return t(n||[],s||[],e)}return bd=r,bd}var kd,Ax;function Be(){if(Ax)return kd;Ax=1;var e;if(typeof ma=="function")try{e={cloneDeep:OS(),constant:Si(),defaults:PS(),each:kh(),filter:gy(),find:zS(),flatten:Yg(),forEach:vh(),forIn:qS(),has:by(),isUndefined:Sy(),last:FS(),map:Iy(),mapValues:BS(),max:JS(),merge:XS(),min:ZS(),minBy:QS(),now:e_(),pick:a_(),range:l_(),reduce:Ry(),sortBy:f_(),uniqueId:m_(),values:dg(),zipObject:y_()}}catch{}return e||(e=window._),kd=e,kd}var wd,$x;function g_(){if($x)return wd;$x=1,wd=e;function e(){var n={};n._next=n._prev=n,this._sentinel=n}e.prototype.dequeue=function(){var n=this._sentinel,s=n._prev;if(s!==n)return t(s),s},e.prototype.enqueue=function(n){var s=this._sentinel;n._prev&&n._next&&t(n),n._next=s._next,s._next._prev=n,s._next=n,n._prev=s},e.prototype.toString=function(){for(var n=[],s=this._sentinel,a=s._prev;a!==s;)n.push(JSON.stringify(a,r)),a=a._prev;return"["+n.join(", ")+"]"};function t(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function r(n,s){if(n!=="_next"&&n!=="_prev")return s}return wd}var Sd,Lx;function x_(){if(Lx)return Sd;Lx=1;var e=Be(),t=St().Graph,r=g_();Sd=s;var n=e.constant(1);function s(d,u){if(d.nodeCount()<=1)return[];var p=l(d,u||n),f=a(p.graph,p.buckets,p.zeroIdx);return e.flatten(e.map(f,function(m){return d.outEdges(m.v,m.w)}),!0)}function a(d,u,p){for(var f=[],m=u[u.length-1],h=u[0],y;d.nodeCount();){for(;y=h.dequeue();)i(d,u,p,y);for(;y=m.dequeue();)i(d,u,p,y);if(d.nodeCount()){for(var x=u.length-2;x>0;--x)if(y=u[x].dequeue(),y){f=f.concat(i(d,u,p,y,!0));break}}}return f}function i(d,u,p,f,m){var h=m?[]:void 0;return e.forEach(d.inEdges(f.v),function(y){var x=d.edge(y),g=d.node(y.v);m&&h.push({v:y.v,w:y.w}),g.out-=x,c(u,p,g)}),e.forEach(d.outEdges(f.v),function(y){var x=d.edge(y),g=y.w,v=d.node(g);v.in-=x,c(u,p,v)}),d.removeNode(f.v),h}function l(d,u){var p=new t,f=0,m=0;e.forEach(d.nodes(),function(x){p.setNode(x,{v:x,in:0,out:0})}),e.forEach(d.edges(),function(x){var g=p.edge(x.v,x.w)||0,v=u(x),k=g+v;p.setEdge(x.v,x.w,k),m=Math.max(m,p.node(x.v).out+=v),f=Math.max(f,p.node(x.w).in+=v)});var h=e.range(m+f+3).map(function(){return new r}),y=f+1;return e.forEach(p.nodes(),function(x){c(h,y,p.node(x))}),{graph:p,buckets:h,zeroIdx:y}}function c(d,u,p){p.out?p.in?d[p.out-p.in+u].enqueue(p):d[d.length-1].enqueue(p):d[0].enqueue(p)}return Sd}var _d,Dx;function v_(){if(Dx)return _d;Dx=1;var e=Be(),t=x_();_d={run:r,undo:s};function r(a){var i=a.graph().acyclicer==="greedy"?t(a,l(a)):n(a);e.forEach(i,function(c){var d=a.edge(c);a.removeEdge(c),d.forwardName=c.name,d.reversed=!0,a.setEdge(c.w,c.v,d,e.uniqueId("rev"))});function l(c){return function(d){return c.edge(d).weight}}}function n(a){var i=[],l={},c={};function d(u){e.has(c,u)||(c[u]=!0,l[u]=!0,e.forEach(a.outEdges(u),function(p){e.has(l,p.w)?i.push(p):d(p.w)}),delete l[u])}return e.forEach(a.nodes(),d),i}function s(a){e.forEach(a.edges(),function(i){var l=a.edge(i);if(l.reversed){a.removeEdge(i);var c=l.forwardName;delete l.reversed,delete l.forwardName,a.setEdge(i.w,i.v,l,c)}})}return _d}var jd,Mx;function dt(){if(Mx)return jd;Mx=1;var e=Be(),t=St().Graph;jd={addDummyNode:r,simplify:n,asNonCompoundGraph:s,successorWeights:a,predecessorWeights:i,intersectRect:l,buildLayerMatrix:c,normalizeRanks:d,removeEmptyRanks:u,addBorderNode:p,maxRank:f,partition:m,time:h,notime:y};function r(x,g,v,k){var b;do b=e.uniqueId(k);while(x.hasNode(b));return v.dummy=g,x.setNode(b,v),b}function n(x){var g=new t().setGraph(x.graph());return e.forEach(x.nodes(),function(v){g.setNode(v,x.node(v))}),e.forEach(x.edges(),function(v){var k=g.edge(v.v,v.w)||{weight:0,minlen:1},b=x.edge(v);g.setEdge(v.v,v.w,{weight:k.weight+b.weight,minlen:Math.max(k.minlen,b.minlen)})}),g}function s(x){var g=new t({multigraph:x.isMultigraph()}).setGraph(x.graph());return e.forEach(x.nodes(),function(v){x.children(v).length||g.setNode(v,x.node(v))}),e.forEach(x.edges(),function(v){g.setEdge(v,x.edge(v))}),g}function a(x){var g=e.map(x.nodes(),function(v){var k={};return e.forEach(x.outEdges(v),function(b){k[b.w]=(k[b.w]||0)+x.edge(b).weight}),k});return e.zipObject(x.nodes(),g)}function i(x){var g=e.map(x.nodes(),function(v){var k={};return e.forEach(x.inEdges(v),function(b){k[b.v]=(k[b.v]||0)+x.edge(b).weight}),k});return e.zipObject(x.nodes(),g)}function l(x,g){var v=x.x,k=x.y,b=g.x-v,S=g.y-k,j=x.width/2,_=x.height/2;if(!b&&!S)throw new Error("Not possible to find intersection inside of the rectangle");var w,I;return Math.abs(S)*j>Math.abs(b)*_?(S<0&&(_=-_),w=_*b/S,I=_):(b<0&&(j=-j),w=j,I=j*S/b),{x:v+w,y:k+I}}function c(x){var g=e.map(e.range(f(x)+1),function(){return[]});return e.forEach(x.nodes(),function(v){var k=x.node(v),b=k.rank;e.isUndefined(b)||(g[b][k.order]=v)}),g}function d(x){var g=e.min(e.map(x.nodes(),function(v){return x.node(v).rank}));e.forEach(x.nodes(),function(v){var k=x.node(v);e.has(k,"rank")&&(k.rank-=g)})}function u(x){var g=e.min(e.map(x.nodes(),function(S){return x.node(S).rank})),v=[];e.forEach(x.nodes(),function(S){var j=x.node(S).rank-g;v[j]||(v[j]=[]),v[j].push(S)});var k=0,b=x.graph().nodeRankFactor;e.forEach(v,function(S,j){e.isUndefined(S)&&j%b!==0?--k:k&&e.forEach(S,function(_){x.node(_).rank+=k})})}function p(x,g,v,k){var b={width:0,height:0};return arguments.length>=4&&(b.rank=v,b.order=k),r(x,"border",b,g)}function f(x){return e.max(e.map(x.nodes(),function(g){var v=x.node(g).rank;if(!e.isUndefined(v))return v}))}function m(x,g){var v={lhs:[],rhs:[]};return e.forEach(x,function(k){g(k)?v.lhs.push(k):v.rhs.push(k)}),v}function h(x,g){var v=e.now();try{return g()}finally{console.log(x+" time: "+(e.now()-v)+"ms")}}function y(x,g){return g()}return jd}var Td,Wx;function b_(){if(Wx)return Td;Wx=1;var e=Be(),t=dt();Td={run:r,undo:s};function r(a){a.graph().dummyChains=[],e.forEach(a.edges(),function(i){n(a,i)})}function n(a,i){var l=i.v,c=a.node(l).rank,d=i.w,u=a.node(d).rank,p=i.name,f=a.edge(i),m=f.labelRank;if(u!==c+1){a.removeEdge(i);var h,y,x;for(x=0,++c;c<u;++x,++c)f.points=[],y={width:0,height:0,edgeLabel:f,edgeObj:i,rank:c},h=t.addDummyNode(a,"edge",y,"_d"),c===m&&(y.width=f.width,y.height=f.height,y.dummy="edge-label",y.labelpos=f.labelpos),a.setEdge(l,h,{weight:f.weight},p),x===0&&a.graph().dummyChains.push(h),l=h;a.setEdge(l,d,{weight:f.weight},p)}}function s(a){e.forEach(a.graph().dummyChains,function(i){var l=a.node(i),c=l.edgeLabel,d;for(a.setEdge(l.edgeObj,c);l.dummy;)d=a.successors(i)[0],a.removeNode(i),c.points.push({x:l.x,y:l.y}),l.dummy==="edge-label"&&(c.x=l.x,c.y=l.y,c.width=l.width,c.height=l.height),i=d,l=a.node(i)})}return Td}var Id,zx;function ps(){if(zx)return Id;zx=1;var e=Be();Id={longestPath:t,slack:r};function t(n){var s={};function a(i){var l=n.node(i);if(e.has(s,i))return l.rank;s[i]=!0;var c=e.min(e.map(n.outEdges(i),function(d){return a(d.w)-n.edge(d).minlen}));return(c===Number.POSITIVE_INFINITY||c===void 0||c===null)&&(c=0),l.rank=c}e.forEach(n.sources(),a)}function r(n,s){return n.node(s.w).rank-n.node(s.v).rank-n.edge(s).minlen}return Id}var Nd,qx;function Fx(){if(qx)return Nd;qx=1;var e=Be(),t=St().Graph,r=ps().slack;Nd=n;function n(l){var c=new t({directed:!1}),d=l.nodes()[0],u=l.nodeCount();c.setNode(d,{});for(var p,f;s(c,l)<u;)p=a(c,l),f=c.hasNode(p.v)?r(l,p):-r(l,p),i(c,l,f);return c}function s(l,c){function d(u){e.forEach(c.nodeEdges(u),function(p){var f=p.v,m=u===f?p.w:f;!l.hasNode(m)&&!r(c,p)&&(l.setNode(m,{}),l.setEdge(u,m,{}),d(m))})}return e.forEach(l.nodes(),d),l.nodeCount()}function a(l,c){return e.minBy(c.edges(),function(d){if(l.hasNode(d.v)!==l.hasNode(d.w))return r(c,d)})}function i(l,c,d){e.forEach(l.nodes(),function(u){c.node(u).rank+=d})}return Nd}var Cd,Bx;function k_(){if(Bx)return Cd;Bx=1;var e=Be(),t=Fx(),r=ps().slack,n=ps().longestPath,s=St().alg.preorder,a=St().alg.postorder,i=dt().simplify;Cd=l,l.initLowLimValues=p,l.initCutValues=c,l.calcCutValue=u,l.leaveEdge=m,l.enterEdge=h,l.exchangeEdges=y;function l(k){k=i(k),n(k);var b=t(k);p(b),c(b,k);for(var S,j;S=m(b);)j=h(b,k,S),y(b,k,S,j)}function c(k,b){var S=a(k,k.nodes());S=S.slice(0,S.length-1),e.forEach(S,function(j){d(k,b,j)})}function d(k,b,S){var j=k.node(S),_=j.parent;k.edge(S,_).cutvalue=u(k,b,S)}function u(k,b,S){var j=k.node(S),_=j.parent,w=!0,I=b.edge(S,_),C=0;return I||(w=!1,I=b.edge(_,S)),C=I.weight,e.forEach(b.nodeEdges(S),function(N){var O=N.v===S,E=O?N.w:N.v;if(E!==_){var R=O===w,L=b.edge(N).weight;if(C+=R?L:-L,g(k,S,E)){var H=k.edge(S,E).cutvalue;C+=R?-H:H}}}),C}function p(k,b){arguments.length<2&&(b=k.nodes()[0]),f(k,{},1,b)}function f(k,b,S,j,_){var w=S,I=k.node(j);return b[j]=!0,e.forEach(k.neighbors(j),function(C){e.has(b,C)||(S=f(k,b,S,C,j))}),I.low=w,I.lim=S++,_?I.parent=_:delete I.parent,S}function m(k){return e.find(k.edges(),function(b){return k.edge(b).cutvalue<0})}function h(k,b,S){var j=S.v,_=S.w;b.hasEdge(j,_)||(j=S.w,_=S.v);var w=k.node(j),I=k.node(_),C=w,N=!1;w.lim>I.lim&&(C=I,N=!0);var O=e.filter(b.edges(),function(E){return N===v(k,k.node(E.v),C)&&N!==v(k,k.node(E.w),C)});return e.minBy(O,function(E){return r(b,E)})}function y(k,b,S,j){var _=S.v,w=S.w;k.removeEdge(_,w),k.setEdge(j.v,j.w,{}),p(k),c(k,b),x(k,b)}function x(k,b){var S=e.find(k.nodes(),function(_){return!b.node(_).parent}),j=s(k,S);j=j.slice(1),e.forEach(j,function(_){var w=k.node(_).parent,I=b.edge(_,w),C=!1;I||(I=b.edge(w,_),C=!0),b.node(_).rank=b.node(w).rank+(C?I.minlen:-I.minlen)})}function g(k,b,S){return k.hasEdge(b,S)}function v(k,b,S){return S.low<=b.lim&&b.lim<=S.lim}return Cd}var Ed,Hx;function w_(){if(Hx)return Ed;Hx=1;var e=ps(),t=e.longestPath,r=Fx(),n=k_();Ed=s;function s(c){switch(c.graph().ranker){case"network-simplex":l(c);break;case"tight-tree":i(c);break;case"longest-path":a(c);break;default:l(c)}}var a=t;function i(c){t(c),r(c)}function l(c){n(c)}return Ed}var Rd,Jx;function S_(){if(Jx)return Rd;Jx=1;var e=Be();Rd=t;function t(s){var a=n(s);e.forEach(s.graph().dummyChains,function(i){for(var l=s.node(i),c=l.edgeObj,d=r(s,a,c.v,c.w),u=d.path,p=d.lca,f=0,m=u[f],h=!0;i!==c.w;){if(l=s.node(i),h){for(;(m=u[f])!==p&&s.node(m).maxRank<l.rank;)f++;m===p&&(h=!1)}if(!h){for(;f<u.length-1&&s.node(m=u[f+1]).minRank<=l.rank;)f++;m=u[f]}s.setParent(i,m),i=s.successors(i)[0]}})}function r(s,a,i,l){var c=[],d=[],u=Math.min(a[i].low,a[l].low),p=Math.max(a[i].lim,a[l].lim),f,m;f=i;do f=s.parent(f),c.push(f);while(f&&(a[f].low>u||p>a[f].lim));for(m=f,f=l;(f=s.parent(f))!==m;)d.push(f);return{path:c.concat(d.reverse()),lca:m}}function n(s){var a={},i=0;function l(c){var d=i;e.forEach(s.children(c),l),a[c]={low:d,lim:i++}}return e.forEach(s.children(),l),a}return Rd}var Od,Ux;function __(){if(Ux)return Od;Ux=1;var e=Be(),t=dt();Od={run:r,cleanup:i};function r(l){var c=t.addDummyNode(l,"root",{},"_root"),d=s(l),u=e.max(e.values(d))-1,p=2*u+1;l.graph().nestingRoot=c,e.forEach(l.edges(),function(m){l.edge(m).minlen*=p});var f=a(l)+1;e.forEach(l.children(),function(m){n(l,c,p,f,u,d,m)}),l.graph().nodeRankFactor=p}function n(l,c,d,u,p,f,m){var h=l.children(m);if(!h.length){m!==c&&l.setEdge(c,m,{weight:0,minlen:d});return}var y=t.addBorderNode(l,"_bt"),x=t.addBorderNode(l,"_bb"),g=l.node(m);l.setParent(y,m),g.borderTop=y,l.setParent(x,m),g.borderBottom=x,e.forEach(h,function(v){n(l,c,d,u,p,f,v);var k=l.node(v),b=k.borderTop?k.borderTop:v,S=k.borderBottom?k.borderBottom:v,j=k.borderTop?u:2*u,_=b!==S?1:p-f[m]+1;l.setEdge(y,b,{weight:j,minlen:_,nestingEdge:!0}),l.setEdge(S,x,{weight:j,minlen:_,nestingEdge:!0})}),l.parent(m)||l.setEdge(c,y,{weight:0,minlen:p+f[m]})}function s(l){var c={};function d(u,p){var f=l.children(u);f&&f.length&&e.forEach(f,function(m){d(m,p+1)}),c[u]=p}return e.forEach(l.children(),function(u){d(u,1)}),c}function a(l){return e.reduce(l.edges(),function(c,d){return c+l.edge(d).weight},0)}function i(l){var c=l.graph();l.removeNode(c.nestingRoot),delete c.nestingRoot,e.forEach(l.edges(),function(d){var u=l.edge(d);u.nestingEdge&&l.removeEdge(d)})}return Od}var Pd,Vx;function j_(){if(Vx)return Pd;Vx=1;var e=Be(),t=dt();Pd=r;function r(s){function a(i){var l=s.children(i),c=s.node(i);if(l.length&&e.forEach(l,a),e.has(c,"minRank")){c.borderLeft=[],c.borderRight=[];for(var d=c.minRank,u=c.maxRank+1;d<u;++d)n(s,"borderLeft","_bl",i,c,d),n(s,"borderRight","_br",i,c,d)}}e.forEach(s.children(),a)}function n(s,a,i,l,c,d){var u={width:0,height:0,rank:d,borderType:a},p=c[a][d-1],f=t.addDummyNode(s,"border",u,i);c[a][d]=f,s.setParent(f,l),p&&s.setEdge(p,f,{weight:1})}return Pd}var Ad,Kx;function T_(){if(Kx)return Ad;Kx=1;var e=Be();Ad={adjust:t,undo:r};function t(d){var u=d.graph().rankdir.toLowerCase();(u==="lr"||u==="rl")&&n(d)}function r(d){var u=d.graph().rankdir.toLowerCase();(u==="bt"||u==="rl")&&a(d),(u==="lr"||u==="rl")&&(l(d),n(d))}function n(d){e.forEach(d.nodes(),function(u){s(d.node(u))}),e.forEach(d.edges(),function(u){s(d.edge(u))})}function s(d){var u=d.width;d.width=d.height,d.height=u}function a(d){e.forEach(d.nodes(),function(u){i(d.node(u))}),e.forEach(d.edges(),function(u){var p=d.edge(u);e.forEach(p.points,i),e.has(p,"y")&&i(p)})}function i(d){d.y=-d.y}function l(d){e.forEach(d.nodes(),function(u){c(d.node(u))}),e.forEach(d.edges(),function(u){var p=d.edge(u);e.forEach(p.points,c),e.has(p,"x")&&c(p)})}function c(d){var u=d.x;d.x=d.y,d.y=u}return Ad}var $d,Gx;function I_(){if(Gx)return $d;Gx=1;var e=Be();$d=t;function t(r){var n={},s=e.filter(r.nodes(),function(d){return!r.children(d).length}),a=e.max(e.map(s,function(d){return r.node(d).rank})),i=e.map(e.range(a+1),function(){return[]});function l(d){if(!e.has(n,d)){n[d]=!0;var u=r.node(d);i[u.rank].push(d),e.forEach(r.successors(d),l)}}var c=e.sortBy(s,function(d){return r.node(d).rank});return e.forEach(c,l),i}return $d}var Ld,Yx;function N_(){if(Yx)return Ld;Yx=1;var e=Be();Ld=t;function t(n,s){for(var a=0,i=1;i<s.length;++i)a+=r(n,s[i-1],s[i]);return a}function r(n,s,a){for(var i=e.zipObject(a,e.map(a,function(f,m){return m})),l=e.flatten(e.map(s,function(f){return e.sortBy(e.map(n.outEdges(f),function(m){return{pos:i[m.w],weight:n.edge(m).weight}}),"pos")}),!0),c=1;c<a.length;)c<<=1;var d=2*c-1;c-=1;var u=e.map(new Array(d),function(){return 0}),p=0;return e.forEach(l.forEach(function(f){var m=f.pos+c;u[m]+=f.weight;for(var h=0;m>0;)m%2&&(h+=u[m+1]),m=m-1>>1,u[m]+=f.weight;p+=f.weight*h})),p}return Ld}var Dd,Xx;function C_(){if(Xx)return Dd;Xx=1;var e=Be();Dd=t;function t(r,n){return e.map(n,function(s){var a=r.inEdges(s);if(a.length){var i=e.reduce(a,function(l,c){var d=r.edge(c),u=r.node(c.v);return{sum:l.sum+d.weight*u.order,weight:l.weight+d.weight}},{sum:0,weight:0});return{v:s,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:s}})}return Dd}var Md,Zx;function E_(){if(Zx)return Md;Zx=1;var e=Be();Md=t;function t(s,a){var i={};e.forEach(s,function(c,d){var u=i[c.v]={indegree:0,in:[],out:[],vs:[c.v],i:d};e.isUndefined(c.barycenter)||(u.barycenter=c.barycenter,u.weight=c.weight)}),e.forEach(a.edges(),function(c){var d=i[c.v],u=i[c.w];!e.isUndefined(d)&&!e.isUndefined(u)&&(u.indegree++,d.out.push(i[c.w]))});var l=e.filter(i,function(c){return!c.indegree});return r(l)}function r(s){var a=[];function i(d){return function(u){u.merged||(e.isUndefined(u.barycenter)||e.isUndefined(d.barycenter)||u.barycenter>=d.barycenter)&&n(d,u)}}function l(d){return function(u){u.in.push(d),--u.indegree===0&&s.push(u)}}for(;s.length;){var c=s.pop();a.push(c),e.forEach(c.in.reverse(),i(c)),e.forEach(c.out,l(c))}return e.map(e.filter(a,function(d){return!d.merged}),function(d){return e.pick(d,["vs","i","barycenter","weight"])})}function n(s,a){var i=0,l=0;s.weight&&(i+=s.barycenter*s.weight,l+=s.weight),a.weight&&(i+=a.barycenter*a.weight,l+=a.weight),s.vs=a.vs.concat(s.vs),s.barycenter=i/l,s.weight=l,s.i=Math.min(a.i,s.i),a.merged=!0}return Md}var Wd,Qx;function R_(){if(Qx)return Wd;Qx=1;var e=Be(),t=dt();Wd=r;function r(a,i){var l=t.partition(a,function(y){return e.has(y,"barycenter")}),c=l.lhs,d=e.sortBy(l.rhs,function(y){return-y.i}),u=[],p=0,f=0,m=0;c.sort(s(!!i)),m=n(u,d,m),e.forEach(c,function(y){m+=y.vs.length,u.push(y.vs),p+=y.barycenter*y.weight,f+=y.weight,m=n(u,d,m)});var h={vs:e.flatten(u,!0)};return f&&(h.barycenter=p/f,h.weight=f),h}function n(a,i,l){for(var c;i.length&&(c=e.last(i)).i<=l;)i.pop(),a.push(c.vs),l++;return l}function s(a){return function(i,l){return i.barycenter<l.barycenter?-1:i.barycenter>l.barycenter?1:a?l.i-i.i:i.i-l.i}}return Wd}var zd,ev;function O_(){if(ev)return zd;ev=1;var e=Be(),t=C_(),r=E_(),n=R_();zd=s;function s(l,c,d,u){var p=l.children(c),f=l.node(c),m=f?f.borderLeft:void 0,h=f?f.borderRight:void 0,y={};m&&(p=e.filter(p,function(S){return S!==m&&S!==h}));var x=t(l,p);e.forEach(x,function(S){if(l.children(S.v).length){var j=s(l,S.v,d,u);y[S.v]=j,e.has(j,"barycenter")&&i(S,j)}});var g=r(x,d);a(g,y);var v=n(g,u);if(m&&(v.vs=e.flatten([m,v.vs,h],!0),l.predecessors(m).length)){var k=l.node(l.predecessors(m)[0]),b=l.node(l.predecessors(h)[0]);e.has(v,"barycenter")||(v.barycenter=0,v.weight=0),v.barycenter=(v.barycenter*v.weight+k.order+b.order)/(v.weight+2),v.weight+=2}return v}function a(l,c){e.forEach(l,function(d){d.vs=e.flatten(d.vs.map(function(u){return c[u]?c[u].vs:u}),!0)})}function i(l,c){e.isUndefined(l.barycenter)?(l.barycenter=c.barycenter,l.weight=c.weight):(l.barycenter=(l.barycenter*l.weight+c.barycenter*c.weight)/(l.weight+c.weight),l.weight+=c.weight)}return zd}var qd,tv;function P_(){if(tv)return qd;tv=1;var e=Be(),t=St().Graph;qd=r;function r(s,a,i){var l=n(s),c=new t({compound:!0}).setGraph({root:l}).setDefaultNodeLabel(function(d){return s.node(d)});return e.forEach(s.nodes(),function(d){var u=s.node(d),p=s.parent(d);(u.rank===a||u.minRank<=a&&a<=u.maxRank)&&(c.setNode(d),c.setParent(d,p||l),e.forEach(s[i](d),function(f){var m=f.v===d?f.w:f.v,h=c.edge(m,d),y=e.isUndefined(h)?0:h.weight;c.setEdge(m,d,{weight:s.edge(f).weight+y})}),e.has(u,"minRank")&&c.setNode(d,{borderLeft:u.borderLeft[a],borderRight:u.borderRight[a]}))}),c}function n(s){for(var a;s.hasNode(a=e.uniqueId("_root")););return a}return qd}var Fd,rv;function A_(){if(rv)return Fd;rv=1;var e=Be();Fd=t;function t(r,n,s){var a={},i;e.forEach(s,function(l){for(var c=r.parent(l),d,u;c;){if(d=r.parent(c),d?(u=a[d],a[d]=c):(u=i,i=c),u&&u!==c){n.setEdge(u,c);return}c=d}})}return Fd}var Bd,nv;function $_(){if(nv)return Bd;nv=1;var e=Be(),t=I_(),r=N_(),n=O_(),s=P_(),a=A_(),i=St().Graph,l=dt();Bd=c;function c(f){var m=l.maxRank(f),h=d(f,e.range(1,m+1),"inEdges"),y=d(f,e.range(m-1,-1,-1),"outEdges"),x=t(f);p(f,x);for(var g=Number.POSITIVE_INFINITY,v,k=0,b=0;b<4;++k,++b){u(k%2?h:y,k%4>=2),x=l.buildLayerMatrix(f);var S=r(f,x);S<g&&(b=0,v=e.cloneDeep(x),g=S)}p(f,v)}function d(f,m,h){return e.map(m,function(y){return s(f,y,h)})}function u(f,m){var h=new i;e.forEach(f,function(y){var x=y.graph().root,g=n(y,x,h,m);e.forEach(g.vs,function(v,k){y.node(v).order=k}),a(y,h,g.vs)})}function p(f,m){e.forEach(m,function(h){e.forEach(h,function(y,x){f.node(y).order=x})})}return Bd}var Hd,sv;function L_(){if(sv)return Hd;sv=1;var e=Be(),t=St().Graph,r=dt();Hd={positionX:h,findType1Conflicts:n,findType2Conflicts:s,addConflict:i,hasConflict:l,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:f,findSmallestWidthAlignment:p,balance:m};function n(g,v){var k={};function b(S,j){var _=0,w=0,I=S.length,C=e.last(j);return e.forEach(j,function(N,O){var E=a(g,N),R=E?g.node(E).order:I;(E||N===C)&&(e.forEach(j.slice(w,O+1),function(L){e.forEach(g.predecessors(L),function(H){var F=g.node(H),q=F.order;(q<_||R<q)&&!(F.dummy&&g.node(L).dummy)&&i(k,H,L)})}),w=O+1,_=R)}),j}return e.reduce(v,b),k}function s(g,v){var k={};function b(j,_,w,I,C){var N;e.forEach(e.range(_,w),function(O){N=j[O],g.node(N).dummy&&e.forEach(g.predecessors(N),function(E){var R=g.node(E);R.dummy&&(R.order<I||R.order>C)&&i(k,E,N)})})}function S(j,_){var w=-1,I,C=0;return e.forEach(_,function(N,O){if(g.node(N).dummy==="border"){var E=g.predecessors(N);E.length&&(I=g.node(E[0]).order,b(_,C,O,w,I),C=O,w=I)}b(_,C,_.length,I,j.length)}),_}return e.reduce(v,S),k}function a(g,v){if(g.node(v).dummy)return e.find(g.predecessors(v),function(k){return g.node(k).dummy})}function i(g,v,k){if(v>k){var b=v;v=k,k=b}var S=g[v];S||(g[v]=S={}),S[k]=!0}function l(g,v,k){if(v>k){var b=v;v=k,k=b}return e.has(g[v],k)}function c(g,v,k,b){var S={},j={},_={};return e.forEach(v,function(w){e.forEach(w,function(I,C){S[I]=I,j[I]=I,_[I]=C})}),e.forEach(v,function(w){var I=-1;e.forEach(w,function(C){var N=b(C);if(N.length){N=e.sortBy(N,function(H){return _[H]});for(var O=(N.length-1)/2,E=Math.floor(O),R=Math.ceil(O);E<=R;++E){var L=N[E];j[C]===C&&I<_[L]&&!l(k,C,L)&&(j[L]=C,j[C]=S[C]=S[L],I=_[L])}}})}),{root:S,align:j}}function d(g,v,k,b,S){var j={},_=u(g,v,k,S),w=S?"borderLeft":"borderRight";function I(O,E){for(var R=_.nodes(),L=R.pop(),H={};L;)H[L]?O(L):(H[L]=!0,R.push(L),R=R.concat(E(L))),L=R.pop()}function C(O){j[O]=_.inEdges(O).reduce(function(E,R){return Math.max(E,j[R.v]+_.edge(R))},0)}function N(O){var E=_.outEdges(O).reduce(function(L,H){return Math.min(L,j[H.w]-_.edge(H))},Number.POSITIVE_INFINITY),R=g.node(O);E!==Number.POSITIVE_INFINITY&&R.borderType!==w&&(j[O]=Math.max(j[O],E))}return I(C,_.predecessors.bind(_)),I(N,_.successors.bind(_)),e.forEach(b,function(O){j[O]=j[k[O]]}),j}function u(g,v,k,b){var S=new t,j=g.graph(),_=y(j.nodesep,j.edgesep,b);return e.forEach(v,function(w){var I;e.forEach(w,function(C){var N=k[C];if(S.setNode(N),I){var O=k[I],E=S.edge(O,N);S.setEdge(O,N,Math.max(_(g,C,I),E||0))}I=C})}),S}function p(g,v){return e.minBy(e.values(v),function(k){var b=Number.NEGATIVE_INFINITY,S=Number.POSITIVE_INFINITY;return e.forIn(k,function(j,_){var w=x(g,_)/2;b=Math.max(j+w,b),S=Math.min(j-w,S)}),b-S})}function f(g,v){var k=e.values(v),b=e.min(k),S=e.max(k);e.forEach(["u","d"],function(j){e.forEach(["l","r"],function(_){var w=j+_,I=g[w],C;if(I!==v){var N=e.values(I);C=_==="l"?b-e.min(N):S-e.max(N),C&&(g[w]=e.mapValues(I,function(O){return O+C}))}})})}function m(g,v){return e.mapValues(g.ul,function(k,b){if(v)return g[v.toLowerCase()][b];var S=e.sortBy(e.map(g,b));return(S[1]+S[2])/2})}function h(g){var v=r.buildLayerMatrix(g),k=e.merge(n(g,v),s(g,v)),b={},S;e.forEach(["u","d"],function(_){S=_==="u"?v:e.values(v).reverse(),e.forEach(["l","r"],function(w){w==="r"&&(S=e.map(S,function(O){return e.values(O).reverse()}));var I=(_==="u"?g.predecessors:g.successors).bind(g),C=c(g,S,k,I),N=d(g,S,C.root,C.align,w==="r");w==="r"&&(N=e.mapValues(N,function(O){return-O})),b[_+w]=N})});var j=p(g,b);return f(b,j),m(b,g.graph().align)}function y(g,v,k){return function(b,S,j){var _=b.node(S),w=b.node(j),I=0,C;if(I+=_.width/2,e.has(_,"labelpos"))switch(_.labelpos.toLowerCase()){case"l":C=-_.width/2;break;case"r":C=_.width/2;break}if(C&&(I+=k?C:-C),C=0,I+=(_.dummy?v:g)/2,I+=(w.dummy?v:g)/2,I+=w.width/2,e.has(w,"labelpos"))switch(w.labelpos.toLowerCase()){case"l":C=w.width/2;break;case"r":C=-w.width/2;break}return C&&(I+=k?C:-C),C=0,I}}function x(g,v){return g.node(v).width}return Hd}var Jd,av;function D_(){if(av)return Jd;av=1;var e=Be(),t=dt(),r=L_().positionX;Jd=n;function n(a){a=t.asNonCompoundGraph(a),s(a),e.forEach(r(a),function(i,l){a.node(l).x=i})}function s(a){var i=t.buildLayerMatrix(a),l=a.graph().ranksep,c=0;e.forEach(i,function(d){var u=e.max(e.map(d,function(p){return a.node(p).height}));e.forEach(d,function(p){a.node(p).y=c+u/2}),c+=u+l})}return Jd}var Ud,ov;function M_(){if(ov)return Ud;ov=1;var e=Be(),t=v_(),r=b_(),n=w_(),s=dt().normalizeRanks,a=S_(),i=dt().removeEmptyRanks,l=__(),c=j_(),d=T_(),u=$_(),p=D_(),f=dt(),m=St().Graph;Ud=h;function h(D,B){var U=B&&B.debugTiming?f.time:f.notime;U("layout",function(){var G=U(" buildLayoutGraph",function(){return I(D)});U(" runLayout",function(){y(G,U)}),U(" updateInputGraph",function(){x(D,G)})})}function y(D,B){B(" makeSpaceForEdgeLabels",function(){C(D)}),B(" removeSelfEdges",function(){A(D)}),B(" acyclic",function(){t.run(D)}),B(" nestingGraph.run",function(){l.run(D)}),B(" rank",function(){n(f.asNonCompoundGraph(D))}),B(" injectEdgeLabelProxies",function(){N(D)}),B(" removeEmptyRanks",function(){i(D)}),B(" nestingGraph.cleanup",function(){l.cleanup(D)}),B(" normalizeRanks",function(){s(D)}),B(" assignRankMinMax",function(){O(D)}),B(" removeEdgeLabelProxies",function(){E(D)}),B(" normalize.run",function(){r.run(D)}),B(" parentDummyChains",function(){a(D)}),B(" addBorderSegments",function(){c(D)}),B(" order",function(){u(D)}),B(" insertSelfEdges",function(){W(D)}),B(" adjustCoordinateSystem",function(){d.adjust(D)}),B(" position",function(){p(D)}),B(" positionSelfEdges",function(){P(D)}),B(" removeBorderNodes",function(){q(D)}),B(" normalize.undo",function(){r.undo(D)}),B(" fixupEdgeLabelCoords",function(){H(D)}),B(" undoCoordinateSystem",function(){d.undo(D)}),B(" translateGraph",function(){R(D)}),B(" assignNodeIntersects",function(){L(D)}),B(" reversePoints",function(){F(D)}),B(" acyclic.undo",function(){t.undo(D)})}function x(D,B){e.forEach(D.nodes(),function(U){var G=D.node(U),ne=B.node(U);G&&(G.x=ne.x,G.y=ne.y,B.children(U).length&&(G.width=ne.width,G.height=ne.height))}),e.forEach(D.edges(),function(U){var G=D.edge(U),ne=B.edge(U);G.points=ne.points,e.has(ne,"x")&&(G.x=ne.x,G.y=ne.y)}),D.graph().width=B.graph().width,D.graph().height=B.graph().height}var g=["nodesep","edgesep","ranksep","marginx","marginy"],v={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},k=["acyclicer","ranker","rankdir","align"],b=["width","height"],S={width:0,height:0},j=["minlen","weight","width","height","labeloffset"],_={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},w=["labelpos"];function I(D){var B=new m({multigraph:!0,compound:!0}),U=X(D.graph());return B.setGraph(e.merge({},v,$(U,g),e.pick(U,k))),e.forEach(D.nodes(),function(G){var ne=X(D.node(G));B.setNode(G,e.defaults($(ne,b),S)),B.setParent(G,D.parent(G))}),e.forEach(D.edges(),function(G){var ne=X(D.edge(G));B.setEdge(G,e.merge({},_,$(ne,j),e.pick(ne,w)))}),B}function C(D){var B=D.graph();B.ranksep/=2,e.forEach(D.edges(),function(U){var G=D.edge(U);G.minlen*=2,G.labelpos.toLowerCase()!=="c"&&(B.rankdir==="TB"||B.rankdir==="BT"?G.width+=G.labeloffset:G.height+=G.labeloffset)})}function N(D){e.forEach(D.edges(),function(B){var U=D.edge(B);if(U.width&&U.height){var G=D.node(B.v),ne=D.node(B.w),ye={rank:(ne.rank-G.rank)/2+G.rank,e:B};f.addDummyNode(D,"edge-proxy",ye,"_ep")}})}function O(D){var B=0;e.forEach(D.nodes(),function(U){var G=D.node(U);G.borderTop&&(G.minRank=D.node(G.borderTop).rank,G.maxRank=D.node(G.borderBottom).rank,B=e.max(B,G.maxRank))}),D.graph().maxRank=B}function E(D){e.forEach(D.nodes(),function(B){var U=D.node(B);U.dummy==="edge-proxy"&&(D.edge(U.e).labelRank=U.rank,D.removeNode(B))})}function R(D){var B=Number.POSITIVE_INFINITY,U=0,G=Number.POSITIVE_INFINITY,ne=0,ye=D.graph(),Q=ye.marginx||0,_e=ye.marginy||0;function ve(je){var fe=je.x,V=je.y,ee=je.width,z=je.height;B=Math.min(B,fe-ee/2),U=Math.max(U,fe+ee/2),G=Math.min(G,V-z/2),ne=Math.max(ne,V+z/2)}e.forEach(D.nodes(),function(je){ve(D.node(je))}),e.forEach(D.edges(),function(je){var fe=D.edge(je);e.has(fe,"x")&&ve(fe)}),B-=Q,G-=_e,e.forEach(D.nodes(),function(je){var fe=D.node(je);fe.x-=B,fe.y-=G}),e.forEach(D.edges(),function(je){var fe=D.edge(je);e.forEach(fe.points,function(V){V.x-=B,V.y-=G}),e.has(fe,"x")&&(fe.x-=B),e.has(fe,"y")&&(fe.y-=G)}),ye.width=U-B+Q,ye.height=ne-G+_e}function L(D){e.forEach(D.edges(),function(B){var U=D.edge(B),G=D.node(B.v),ne=D.node(B.w),ye,Q;U.points?(ye=U.points[0],Q=U.points[U.points.length-1]):(U.points=[],ye=ne,Q=G),U.points.unshift(f.intersectRect(G,ye)),U.points.push(f.intersectRect(ne,Q))})}function H(D){e.forEach(D.edges(),function(B){var U=D.edge(B);if(e.has(U,"x"))switch((U.labelpos==="l"||U.labelpos==="r")&&(U.width-=U.labeloffset),U.labelpos){case"l":U.x-=U.width/2+U.labeloffset;break;case"r":U.x+=U.width/2+U.labeloffset;break}})}function F(D){e.forEach(D.edges(),function(B){var U=D.edge(B);U.reversed&&U.points.reverse()})}function q(D){e.forEach(D.nodes(),function(B){if(D.children(B).length){var U=D.node(B),G=D.node(U.borderTop),ne=D.node(U.borderBottom),ye=D.node(e.last(U.borderLeft)),Q=D.node(e.last(U.borderRight));U.width=Math.abs(Q.x-ye.x),U.height=Math.abs(ne.y-G.y),U.x=ye.x+U.width/2,U.y=G.y+U.height/2}}),e.forEach(D.nodes(),function(B){D.node(B).dummy==="border"&&D.removeNode(B)})}function A(D){e.forEach(D.edges(),function(B){if(B.v===B.w){var U=D.node(B.v);U.selfEdges||(U.selfEdges=[]),U.selfEdges.push({e:B,label:D.edge(B)}),D.removeEdge(B)}})}function W(D){var B=f.buildLayerMatrix(D);e.forEach(B,function(U){var G=0;e.forEach(U,function(ne,ye){var Q=D.node(ne);Q.order=ye+G,e.forEach(Q.selfEdges,function(_e){f.addDummyNode(D,"selfedge",{width:_e.label.width,height:_e.label.height,rank:Q.rank,order:ye+ ++G,e:_e.e,label:_e.label},"_se")}),delete Q.selfEdges})})}function P(D){e.forEach(D.nodes(),function(B){var U=D.node(B);if(U.dummy==="selfedge"){var G=D.node(U.e.v),ne=G.x+G.width/2,ye=G.y,Q=U.x-ne,_e=G.height/2;D.setEdge(U.e,U.label),D.removeNode(B),U.label.points=[{x:ne+2*Q/3,y:ye-_e},{x:ne+5*Q/6,y:ye-_e},{x:ne+Q,y:ye},{x:ne+5*Q/6,y:ye+_e},{x:ne+2*Q/3,y:ye+_e}],U.label.x=U.x,U.label.y=U.y}})}function $(D,B){return e.mapValues(e.pick(D,B),Number)}function X(D){var B={};return e.forEach(D,function(U,G){B[G.toLowerCase()]=U}),B}return Ud}var Vd,iv;function W_(){if(iv)return Vd;iv=1;var e=Be(),t=dt(),r=St().Graph;Vd={debugOrdering:n};function n(s){var a=t.buildLayerMatrix(s),i=new r({compound:!0,multigraph:!0}).setGraph({});return e.forEach(s.nodes(),function(l){i.setNode(l,{label:l}),i.setParent(l,"layer"+s.node(l).rank)}),e.forEach(s.edges(),function(l){i.setEdge(l.v,l.w,{},l.name)}),e.forEach(a,function(l,c){var d="layer"+c;i.setNode(d,{rank:"same"}),e.reduce(l,function(u,p){return i.setEdge(u,p,{style:"invis"}),p})}),i}return Vd}var Kd,lv;function z_(){return lv||(lv=1,Kd="0.8.5"),Kd}var Gd,cv;function q_(){return cv||(cv=1,Gd={graphlib:St(),layout:M_(),debug:W_(),util:{time:dt().time,notime:dt().notime},version:z_()}),Gd}var F_=q_();const dv=m0(F_);function Pr(e,t="TB"){if(e.data?._layoutWidth&&e.data?._layoutHeight)return{width:e.data._layoutWidth,height:e.data._layoutHeight};let r=240,n=84;switch(e.type){case"decisionNode":r=164,n=164;break;case"forkNode":r=240,n=84;break;case"joinNode":r=240,n=84;break;case"dynamicPlaceholderNode":r=220,n=70;break;case"loopNode":r=320,n=200;break;case"subWorkflowNode":r=240,n=84;break;case"eventNode":r=240,n=84;break;case"default":r=240,n=40;break;case"plusNode":r=e.data.label&&e.data.label!=="+"?120:32,n=32;break;default:r=240,n=84;break}return{width:r,height:n}}function B_(e,t,r=8){const n=[];if(e.length<r)return n;const s=new Map,a={},i={};e.forEach(p=>{s.set(p.id,p),a[p.id]=[],i[p.id]=[]}),t.forEach(p=>{a[p.source]&&a[p.source].push(p.target),i[p.target]&&i[p.target].push(p.source)});const l=new Set,c=new Set(["input","output","decisionNode","forkNode","joinNode","loopNode","default","plusNode"]),d=p=>!c.has(p.type||""),u=[...e].sort((p,f)=>p.position.y-f.position.y);for(const p of u){if(l.has(p.id)||!d(p)||a[p.id].length>1)continue;const f=[p.id];let m=p,h=a[m.id];for(;h&&h.length===1;){const y=h[0],x=s.get(y);if(!x||l.has(y)||!d(x)||i[y].length!==1)break;f.push(y),m=x,h=a[m.id]}f.length>=r&&(n.push(f),f.forEach(y=>l.add(y)))}return n}function H_(e,t,r,n,s,a=5,i="view"){const l=t.find(v=>v.id===e[0]),{width:c,height:d}=Pr(l||t[0],r),u=Math.max(.7,1-(e.length-10)/80),p=i==="edit"||i==="run"?1.15:1,f=Math.min(n,Math.round(60*u*p)),m=Math.min(s,Math.round(80*u*p)),h=c+f,y=d+m;let x=0,g=0;if(r==="TB"){const v=Math.ceil(e.length/a);x=a*h-f,g=v*y-m}else x=Math.ceil(e.length/a)*h-f,g=a*y-m;return x+=40,g+=40,{width:x,height:g,gridKW:h,gridKH:y,cols:a}}const Yd=58,uv=20,J_=16;function U_(e,t,r,n){if(e.length===0)return{positionedChildren:[],containerWidth:280,containerHeight:Yd+50};const s=e.map(p=>({...p,parentId:void 0,extent:void 0})),{nodes:a}=Xd(s,t,{direction:r,mode:n,enableSnakeLayout:!1});let i=0,l=0;a.forEach(p=>{const{width:f,height:m}=Pr(p,r);i=Math.max(i,p.position.x+f),l=Math.max(l,p.position.y+m)});const c=Math.max(300,i+uv*2),d=Yd+l+J_;return{positionedChildren:a.map(p=>{const f=e.find(m=>m.id===p.id);return{...p,parentId:f.parentId,extent:f.extent,position:{x:p.position.x+uv,y:p.position.y+Yd}}}),containerWidth:c,containerHeight:d}}function Xd(e,t,r={}){const{direction:n="TB",mode:s="view",enableSnakeLayout:a=!0,snakeColumns:i=5,snakeMinChainLength:l=8,snakeMinNodeCount:c=10}=r,d=e.length,u=e.filter(C=>C.type!=="plusNode").length;let p=n==="LR"?150:120,f=n==="LR"?120:100,m=p,h=f;if(d>15){let C=Math.max(.5,1-(d-15)/50),N=Math.max(.4,1-(d-15)/40);(s==="edit"||s==="run")&&(C=1-(1-C)*.5,N=1-(1-N)*.5),m=Math.round(p*C),h=Math.round(f*N)}const y=a&&u>c?B_(e,t,l):[],x={};y.forEach((C,N)=>{C.forEach(O=>{x[O]=N})});const g=new dv.graphlib.Graph;g.setDefaultEdgeLabel(()=>({})),g.setGraph({rankdir:n,ranker:"network-simplex",ranksep:m,nodesep:h,edgesep:50,marginx:50,marginy:50});const v=new Set,k={};e.forEach(C=>{const N=x[C.id];if(N!==void 0){if(!v.has(N)){v.add(N);const O=H_(y[N],e,n,h,m,i,s);k[N]=O,g.setNode(`__CHAIN_${N}`,{width:O.width,height:O.height})}}else{const{width:O,height:E}=Pr(C,n);g.setNode(C.id,{width:O,height:E})}});const b={};t.forEach(C=>{const N=x[C.source],O=x[C.target],E=N!==void 0?`__CHAIN_${N}`:C.source,R=O!==void 0?`__CHAIN_${O}`:C.target;E!==R&&(b[R]=(b[R]||0)+1)}),t.forEach(C=>{const N=x[C.source],O=x[C.target];let E=C.source,R=C.target;if(N!==void 0&&(E=`__CHAIN_${N}`),O!==void 0&&(R=`__CHAIN_${O}`),E!==R){const L=(b[R]||0)>1;g.setEdge(E,R,{weight:L?1:2})}}),dv.layout(g);const S={};for(const C of e)S[C.id]={...C};const j=[],_=new Set;e.forEach(C=>{if(x[C.id]===void 0){const N=g.node(C.id),O=S[C.id],{width:E,height:R}=Pr(O,n);O.position={x:N.x-E/2,y:N.y-R/2},O.data={...O.data,sourcePosition:void 0,targetPosition:void 0},O.sourcePosition=n==="LR"?J.Position.Right:J.Position.Bottom,O.targetPosition=n==="LR"?J.Position.Left:J.Position.Top,j.push(O)}else _.add(C.id)}),y.forEach((C,N)=>{const O=`__CHAIN_${N}`,E=g.node(O),R=k[N],L=E.x-R.width/2+20,H=E.y-R.height/2+20,F=R.cols,q=R.gridKW,A=R.gridKH;C.forEach((W,P)=>{const $=S[W];let X=0,D=0,B,U;if(n==="TB"){const G=Math.floor(P/F),ne=P%F,ye=G%2===0,Q=Math.ceil(C.length/F),_e=G===Q-1,ve=C.length%F||F,je=_e?(F-ve)*q/2:0;let fe;ye?fe=ne*q+je:fe=(F-1-ne)*q-je;const V=G*A;X=L+fe,D=H+V;const ee=_e?ve:F;ye?(U=J.Position.Left,B=J.Position.Right,ne===ee-1&&P!==C.length-1&&(B=J.Position.Bottom),ne===0&&P!==0&&(U=J.Position.Top)):(U=J.Position.Right,B=J.Position.Left,ne===ee-1&&P!==C.length-1&&(B=J.Position.Bottom),ne===0&&P!==0&&(U=J.Position.Top)),P===0&&(U=J.Position.Top),P===C.length-1&&(B=J.Position.Bottom)}else{const G=Math.floor(P/F),ne=P%F,ye=G%2===0,Q=Math.ceil(C.length/F),_e=G===Q-1,ve=C.length%F||F,je=_e?Math.max(0,(F-ve)*A)/2:0,fe=G*q;let V;ye?V=ne*A+je:V=(F-1-ne)*A-je,X=L+fe,D=H+V;const ee=_e?ve:F;ye?(U=J.Position.Top,B=J.Position.Bottom,ne===ee-1&&P!==C.length-1&&(B=J.Position.Right),ne===0&&P!==0&&(U=J.Position.Left)):(U=J.Position.Bottom,B=J.Position.Top,ne===ee-1&&P!==C.length-1&&(B=J.Position.Right),ne===0&&P!==0&&(U=J.Position.Left)),P===0&&(U=J.Position.Left),P===C.length-1&&(B=J.Position.Right)}$.position={x:X,y:D},$.data={...$.data,sourcePosition:B,targetPosition:U},$.sourcePosition=B,$.targetPosition=U,j.push($)})});const w=j.reduce((C,N)=>({...C,[N.id]:N}),{}),I=t.map(C=>{const N=w[C.source],O=w[C.target];if(!N||!O||_.has(N.id)||N.type!=="decisionNode")return C;const{width:E,height:R}=Pr(N,n),{width:L,height:H}=Pr(O,n),F={x:N.position.x+E/2,y:N.position.y+R/2},q={x:O.position.x+L/2,y:O.position.y+H/2};let A=null;if(n==="TB"){const W=E*.25;q.x<F.x-W?A="left":q.x>F.x+W&&(A="right")}else{const W=R*.25;q.y<F.y-W?A="top":q.y>F.y+W&&(A="bottom")}return{...C,sourceHandle:A}});return{nodes:j,edges:I}}function ut(e,t,r={}){const n=r.direction||"TB",s=r.mode||"view",a=e.filter(g=>g.parentId),i=e.filter(g=>!g.parentId);if(a.length===0)return Xd(e,t,r);const l=new Map(a.map(g=>[g.id,g])),c={},d=[];t.forEach(g=>{const v=l.get(g.source),k=l.get(g.target);if(v?.parentId&&v.parentId===k?.parentId){const b=v.parentId;c[b]||(c[b]=[]),c[b].push(g)}else d.push(g)});const u={};a.forEach(g=>{const v=g.parentId;u[v]||(u[v]=[]),u[v].push(g)});const p={},f=[];for(const[g,v]of Object.entries(u)){const k=c[g]||[],{positionedChildren:b,containerWidth:S,containerHeight:j}=U_(v,k,n,s);p[g]={width:S,height:j},f.push(...b)}const m=i.map(g=>{if(g.type==="loopNode"&&p[g.id]){const{width:v,height:k}=p[g.id];return{...g,data:{...g.data,_layoutWidth:v,_layoutHeight:k},style:{...g.style,width:v,height:k}}}return g}),{nodes:h,edges:y}=Xd(m,d,r);return{nodes:[...h.map(g=>{if(g.type==="loopNode"&&p[g.id]){const{width:v,height:k}=p[g.id];return{...g,width:v,height:k,style:{...g.style,width:v,height:k}}}return g}),...f],edges:[...y,...Object.values(c).flat()]}}function et(e,t){if(!e)return null;for(const r of e){if(r.taskReferenceName===t)return r;if(r.decisionCases){for(const s of Object.keys(r.decisionCases)){const a=et(r.decisionCases[s],t);if(a)return a}const n=et(r.defaultCase,t);if(n)return n}if(r.forkTasks)for(const n of r.forkTasks){const s=et(n,t);if(s)return s}if(r.loopOver){const n=et(r.loopOver,t);if(n)return n}}return null}function Nt(e,t){if(!e)return!1;const r=e.findIndex(n=>n.taskReferenceName===t);if(r!==-1)return e.splice(r,1),!0;for(const n of e){if(n.decisionCases){for(const s of Object.keys(n.decisionCases))if(Nt(n.decisionCases[s],t))return!0;if(Nt(n.defaultCase,t))return!0}if(n.forkTasks){for(const s of n.forkTasks)if(Nt(s,t))return!0}if(n.loopOver&&Nt(n.loopOver,t))return!0}return!1}function Dt(e,t){if(!e)return null;if(e.some(r=>r.taskReferenceName===t))return e;for(const r of e){if(r.decisionCases){for(const s of Object.values(r.decisionCases)){const a=Dt(s,t);if(a)return a}const n=Dt(r.defaultCase,t);if(n)return n}if(r.forkTasks)for(const n of r.forkTasks){const s=Dt(n,t);if(s)return s}if(r.loopOver){const n=Dt(r.loopOver,t);if(n)return n}}return null}function fs(e,t){const r=e.findIndex(n=>n.taskReferenceName===t);if(r<0)return null;for(let n=r+1;n<e.length;n++)if(e[n].type==="JOIN"||e[n].type==="EXCLUSIVE_JOIN")return e[n].taskReferenceName;return null}function Zd(e,t){const r=e.findIndex(n=>n.taskReferenceName===t);if(r<0)return null;for(let n=r-1;n>=0;n--)if(e[n].type==="FORK_JOIN"||e[n].type==="FORK_JOIN_DYNAMIC")return e[n].taskReferenceName;return null}function Zt(e,t,r){if(!e)return!1;if(t==="start")return e.unshift(r),!0;const n=e.findIndex(s=>s.taskReferenceName===t);if(n!==-1)return e.splice(n+1,0,r),!0;for(const s of e){if(s.decisionCases){for(const a of Object.keys(s.decisionCases))if(Zt(s.decisionCases[a],t,r))return!0;if(Zt(s.defaultCase,t,r))return!0}if(s.forkTasks){for(const a of s.forkTasks)if(Zt(a,t,r))return!0}if(s.loopOver&&Zt(s.loopOver,t,r))return!0}return!1}function rn(e,t,r,n){for(const s of e||[]){if(s.taskReferenceName===t){if(r.branchCase==="default")return s.defaultCase||(s.defaultCase=[]),s.defaultCase.unshift(n),!0;if(r.branchCase!==void 0)return s.decisionCases||(s.decisionCases={}),s.decisionCases[r.branchCase]||(s.decisionCases[r.branchCase]=[]),s.decisionCases[r.branchCase].unshift(n),!0;if(r.forkIndex!==void 0){for(s.forkTasks||(s.forkTasks=[]);s.forkTasks.length<=r.forkIndex;)s.forkTasks.push([]);return Array.isArray(s.forkTasks[r.forkIndex])||(s.forkTasks[r.forkIndex]=[]),s.forkTasks[r.forkIndex].unshift(n),!0}else if(r.isLoopAdd)return s.loopOver||(s.loopOver=[]),s.loopOver.unshift(n),!0}if(s.decisionCases){for(const a of Object.keys(s.decisionCases))if(rn(s.decisionCases[a],t,r,n))return!0;if(rn(s.defaultCase,t,r,n))return!0}if(s.forkTasks){for(const a of s.forkTasks)if(rn(a,t,r,n))return!0}if(s.loopOver&&rn(s.loopOver,t,r,n))return!0}return!1}function it(e,t=new Set){for(const r of e||[])r&&(r.taskReferenceName&&t.add(r.taskReferenceName),r.decisionCases&&Object.values(r.decisionCases).forEach(n=>it(n,t)),r.defaultCase&&it(r.defaultCase,t),r.forkTasks&&r.forkTasks.forEach(n=>it(n,t)),r.loopOver&&it(r.loopOver,t));return t}const pv=e=>(e.forkTasks||[]).map(t=>t&&t.length>0?t[t.length-1].taskReferenceName:null);function pt(e,t){if(!e)return;const r=t?it(e):null;nn(e,t??null,r)}function nn(e,t,r){for(let n=0;n<e.length;n++){const s=e[n];s&&(s.type==="FORK_JOIN"&&n+1<e.length&&e[n+1]?.type==="JOIN"&&V_(s,e[n+1],t,r),s.decisionCases&&Object.values(s.decisionCases).forEach(a=>a&&nn(a,t,r)),s.defaultCase&&nn(s.defaultCase,t,r),s.forkTasks&&s.forkTasks.forEach(a=>a&&nn(a,t,r)),s.loopOver&&nn(s.loopOver,t,r))}}function V_(e,t,r,n){const s=pv(e),a=Array.isArray(t.joinOn)?t.joinOn:[];if(!r){a.length===0&&(t.joinOn=s.filter(p=>!!p));return}const i=et(r,e.taskReferenceName);if(!i||i.type!=="FORK_JOIN"){a.length===0&&(t.joinOn=s.filter(p=>!!p));return}const l=pv(i);if(l.length===s.length&&l.every((p,f)=>p===s[f]))return;const d=[],u=p=>{p&&!d.includes(p)&&d.push(p)};for(const p of a){const f=l.indexOf(p);f>=0?u(f<s.length?s[f]:null):(!n||n.has(p))&&u(p)}s.forEach((p,f)=>{const m=f<l.length?l[f]:null;p&&m===null&&u(p)}),t.joinOn=d}function Ar(e){for(const t of e||[]){if(!t)continue;const r=t,n=s=>{if(r[s]===void 0)return;const a=r.inputParameters&&typeof r.inputParameters=="object"?r.inputParameters:{};a[s]===void 0&&(a[s]=r[s]),r.inputParameters=a,delete r[s]};r.type==="INLINE"&&n("evaluatorType"),r.type==="FORK_JOIN_DYNAMIC"&&["forkTaskName","forkTaskType","forkTaskWorkflow","forkTaskWorkflowVersion","forkTaskInputs"].forEach(n),r.decisionCases&&Object.values(r.decisionCases).forEach(s=>Ar(s)),r.defaultCase&&Ar(r.defaultCase),r.forkTasks&&r.forkTasks.forEach(s=>Ar(s)),r.loopOver&&Ar(r.loopOver)}}function fv(e,t){const r=Dt(e,t);return r?fs(r,t):null}function Ct(e,t){if(!e||e.length===0)return[];if(typeof e[0]!="string")return e;const r=t?.inputSchema?.data&&typeof t.inputSchema.data.properties=="object"&&t.inputSchema.data.properties||{},n=Array.isArray(t?.inputSchema?.data?.required)?t.inputSchema.data.required:[],s=t?.inputTemplate||{};return e.map(a=>{const i={name:a},l=r[a];if(l&&typeof l=="object"){const c=Array.isArray(l.type)?l.type.find(d=>d!=="null"):l.type;c==="integer"?i.type="number":["string","number","boolean","object","array"].includes(c)&&(i.type=c),typeof l.description=="string"&&l.description&&(i.description=l.description),Array.isArray(l.examples)&&l.examples.length>0&&(i.example=l.examples[0])}return n.includes(a)&&(i.required=!0),s[a]!==void 0&&(i.defaultValue=s[a]),i})}const K_=e=>e.type!==void 0&&e.type!=="string"||!!e.description||!!e.required||e.example!==void 0&&e.example!=="";function G_(e,t){const r=Ct(t.inputParameters).map(c=>c.name),n=e.map(c=>c.name),s=new Set([...r,...n]),a={inputParameters:n},i={};Object.entries(t.inputTemplate||{}).forEach(([c,d])=>{s.has(c)||(i[c]=d)}),e.forEach(c=>{c.name&&c.defaultValue!==void 0&&c.defaultValue!==""&&(i[c.name]=c.defaultValue)}),(t.inputTemplate!==void 0||Object.keys(i).length>0)&&(a.inputTemplate=i);const l=t.inputSchema;if(l||e.some(K_)){const c={type:"object",...l?.data||{}},d=c.properties&&typeof c.properties=="object"?c.properties:{},u={};Object.entries(d).forEach(([m,h])=>{s.has(m)||(u[m]=h)});const f=(Array.isArray(c.required)?c.required:[]).filter(m=>!s.has(m));e.forEach(m=>{if(!m.name)return;const h={...d[m.name]||{}};h.type=m.type||"string",m.description?h.description=m.description:delete h.description,m.example!==void 0&&m.example!==""?h.examples=[m.example]:delete h.examples,u[m.name]=h,m.required&&f.push(m.name)}),c.properties=u,c.required=f,a.inputSchema={name:l?.name||`${t.name||"workflow"}_input`,version:l?.version??1,type:l?.type||"JSON",...l?.externalRef?{externalRef:l.externalRef}:{},data:c}}return a}class Y_{schemas=new Map;setSchemas(t){this.schemas.clear();for(const r of t)this.schemas.set(r.taskName,r)}get(t){return this.schemas.get(t)}getAll(){return Array.from(this.schemas.values())}hasSchemas(){return this.schemas.size>0}buildPromptSection(t){if(!this.hasSchemas())return null;const r=this.getAll(),n=t?.limit,s=n!==void 0&&r.length>n?r.slice(0,Math.max(0,Math.floor(n))):r,a=["## 任务 Schema 注册表(数据流参考)","以下任务的输入/输出字段已注册。生成 inputParameters 时请引用正确的上游输出字段(格式:`${taskRef.output.fieldName}`)。"];for(const i of s){const l=i.taskType?`(${i.taskType})`:"",c=i.description?` — ${i.description}`:"";if(a.push(`
7
+ **${i.taskName}** ${l}${c}`),i.inputSchema&&Object.keys(i.inputSchema).length>0){const d=Object.entries(i.inputSchema).map(([u,p])=>`${u}: ${p}`).join(", ");a.push(`- 输入: ${d}`)}if(i.outputSchema&&Object.keys(i.outputSchema).length>0){const d=Object.entries(i.outputSchema).map(([u,p])=>`${u}: ${p}`).join(", ");a.push(`- 输出: ${d}`)}}return s.length<r.length&&a.push(`
8
+ (另有 ${r.length-s.length} 个任务的 Schema 未在此列出,引用前可调用 search_workflow_library 查询)`),a.join(`
9
+ `)}}const mv=new Y_;function $r(e,t,r){if(t.push({task:e,isConditional:r}),e.decisionCases)for(const n of Object.values(e.decisionCases))for(const s of n||[])$r(s,t,!0);if(e.defaultCase)for(const n of e.defaultCase)$r(n,t,!0);if(e.forkTasks)for(const n of e.forkTasks)for(const s of n||[])$r(s,t,r);if(e.loopOver)for(const n of e.loopOver)$r(n,t,r)}function hv(e,t){if(!e||!Array.isArray(e.tasks))return[];const r=[];function n(a,i){for(let l=0;l<a.length;l++){const c=a[l];if(c.taskReferenceName===t)return!0;if(c.decisionCases||c.defaultCase){for(const d of Object.values(c.decisionCases||{})){const u=[];if(s(d||[],!0,u))return r.push({task:c,isConditional:i}),r.push(...u),!0}if(c.defaultCase){const d=[];if(s(c.defaultCase,!0,d))return r.push({task:c,isConditional:i}),r.push(...d),!0}}if(c.forkTasks)for(const d of c.forkTasks){const u=[];if(s(d||[],i,u))return r.push({task:c,isConditional:i}),r.push(...u),!0}if(c.loopOver){const d=[];if(s(c.loopOver,i,d))return r.push({task:c,isConditional:i}),r.push(...d),!0}$r(c,r,i)}return!1}function s(a,i,l){for(let c=0;c<a.length;c++){const d=a[c];if(d.taskReferenceName===t)return!0;if(d.decisionCases||d.defaultCase){for(const u of Object.values(d.decisionCases||{})){const p=[];if(s(u||[],!0,p))return l.push({task:d,isConditional:i}),l.push(...p),!0}if(d.defaultCase){const u=[];if(s(d.defaultCase,!0,u))return l.push({task:d,isConditional:i}),l.push(...u),!0}}if(d.forkTasks)for(const u of d.forkTasks){const p=[];if(s(u||[],i,p))return l.push({task:d,isConditional:i}),l.push(...p),!0}if(d.loopOver){const u=[];if(s(d.loopOver,i,u))return l.push({task:d,isConditional:i}),l.push(...u),!0}$r(d,l,i)}return!1}return n(e.tasks,!1),r}function ms(e,t){return hv(e,t).map(r=>r.task)}function hs(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return e.length>32?`"${e.slice(0,32)}..."`:`"${e}"`;if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e))return`Array(${e.length})`;if(typeof e=="object"){const t=Object.keys(e);return`{ ${t.slice(0,3).join(", ")}${t.length>3?", ...":""} }`}return String(e)}function Qd(e){if(e==null)return"any";if(Array.isArray(e))return"array";const t=typeof e;return t==="string"||t==="number"||t==="boolean"||t==="object"?t:"any"}function eu(e,t,r="",n=0,s=3,a=[]){if(!e||typeof e!="object"||n>s)return a;for(const[i,l]of Object.entries(e)){const c=r?`${r}.${i}`:i,d=Qd(l);a.push({path:c,expression:`\${${t}.output.${c}}`,valueType:d,sampleValue:hs(l),source:"runtime_sample"}),d==="object"&&l!==null&&Object.keys(l).length>0&&n<s?eu(l,t,c,n+1,s,a):d==="array"&&Array.isArray(l)&&l.length>0&&typeof l[0]=="object"&&l[0]!==null&&n<s&&eu(l[0],t,`${c}[0]`,n+1,s,a)}return a}function yv(e,t){const r=e.taskReferenceName,n=new Map,s=t?.[r]?.output;if(s&&typeof s=="object"){const l=eu(s,r);for(const c of l)n.set(c.path,c)}const a=mv.get(e.name);if(a?.outputSchema){for(const[l,c]of Object.entries(a.outputSchema))if(!n.has(l)){const d=c.toLowerCase(),u=d.includes("number")||d.includes("int")?"number":d.includes("bool")?"boolean":d.includes("array")||d.includes("[]")?"array":d.includes("object")?"object":"string";n.set(l,{path:l,expression:`\${${r}.output.${l}}`,valueType:u,description:c,source:"schema_registry"})}}const i=(l,c,d)=>{n.has(l)||n.set(l,{path:l,expression:`\${${r}.output.${l}}`,valueType:c,description:d,source:"task_type_contract"})};switch(e.type){case"HTTP":i("response.body","object","HTTP 响应体 JSON 数据"),i("response.statusCode","number","HTTP 状态码 (如 200)"),i("response.headers","object","HTTP 响应头");break;case"JSON_JQ_TRANSFORM":i("result","any","JQ 表达式单值计算结果"),i("resultList","array","JQ 表达式列表计算结果");break;case"DO_WHILE":i("iteration","number","当前循环迭代轮次 (从 1 开始)");break;case"SUB_WORKFLOW":i("subWorkflowId","string","子工作流实例 ID");break;case"HUMAN":i("approved","boolean","人工审批结果"),i("comment","string","审批意见备注"),i("assignee","string","实际审批人");break;default:n.size===0&&(i("result","any",`${e.name||r} 默认执行结果`),i("data","object",`${e.name||r} 业务输出对象`));break}return Array.from(n.values())}function gv(e,t,r,n){if(!e)return[];const s=[],a=Ct(e.inputParameters,e);if(a.length>0)for(const d of a){const u=n?.[d.name]??d.defaultValue;s.push({label:`workflow.input.${d.name}`,value:`\${workflow.input.${d.name}}`,category:"workflow_input",valueType:d.type==="number"?"number":d.type==="boolean"?"boolean":d.type==="object"?"object":d.type==="array"?"array":"string",sourceRef:"workflow.input",sourceLabel:"工作流输入",description:d.description||`工作流启动参数 ${d.name}`,sampleValue:u!==void 0&&u!==""?hs(u):void 0})}else if(n&&typeof n=="object")for(const[d,u]of Object.entries(n))s.push({label:`workflow.input.${d}`,value:`\${workflow.input.${d}}`,category:"workflow_input",valueType:Qd(u),sourceRef:"workflow.input",sourceLabel:"工作流输入",description:`工作流运行态输入字段 ${d}`,sampleValue:hs(u)});else s.push({label:"workflow.input.data",value:"${workflow.input.data}",category:"workflow_input",valueType:"any",sourceRef:"workflow.input",sourceLabel:"工作流输入",description:"引用工作流启动时传入的参数(可在全局设置中定义 inputParameters)"});const i=hv(e,t),l=new Set;for(let d=i.length-1;d>=0;d--){const{task:u,isConditional:p}=i[d];if(u.type==="SET_VARIABLE"&&u.inputParameters){for(const[m,h]of Object.entries(u.inputParameters))l.has(m)||(l.add(m),s.push({label:`workflow.variables.${m}`,value:`\${workflow.variables.${m}}`,category:"variable",valueType:Qd(h),sourceRef:u.taskReferenceName,sourceLabel:`变量 (${u.name||u.taskReferenceName})`,description:`由上游 SET_VARIABLE 节点 [${u.taskReferenceName}] 设置的全局变量`,sampleValue:hs(h),isConditional:p}));continue}if(u.type==="JOIN"||u.type==="TERMINATE")continue;const f=yv(u,r);for(const m of f)s.push({label:`${u.taskReferenceName}.output.${m.path}`,value:m.expression,category:"upstream",valueType:m.valueType,sourceRef:u.taskReferenceName,sourceLabel:`${u.name||u.taskReferenceName} (${u.type})`,description:m.description||`来自上游任务 [${u.name||u.taskReferenceName}] 的输出字段`,sampleValue:m.sampleValue,isConditional:p})}const c=[{key:"workflow.workflowId",desc:"当前工作流执行实例唯一 ID"},{key:"workflow.correlationId",desc:"外部业务关联 ID (Correlation ID)"},{key:"workflow.status",desc:"当前工作流状态"},{key:"workflow.version",desc:"当前工作流定义版本号"}];for(const d of c)s.push({label:d.key,value:`\${${d.key}}`,category:"system",valueType:"string",sourceRef:"workflow",sourceLabel:"系统元数据",description:d.desc});return s}function hr(e,t=[]){if(!e)return t;for(const r of e){if(t.push(r),r.decisionCases)for(const n of Object.values(r.decisionCases))hr(n,t);if(r.defaultCase&&hr(r.defaultCase,t),r.forkTasks)for(const n of r.forkTasks)hr(n,t);r.loopOver&&hr(r.loopOver,t)}return t}function Lr(e,t=[]){if(typeof e=="string"){const r=/\$\{([^}]+)\}/g;let n;for(;(n=r.exec(e))!==null;)t.push(n[1].trim())}else if(Array.isArray(e))for(const r of e)Lr(r,t);else if(e&&typeof e=="object")for(const r of Object.values(e))Lr(r,t);return t}function tu(e){if(!e||!Array.isArray(e.tasks))return{edges:[],diagnostics:[]};const t=hr(e.tasks),r=new Map,n=new Map;for(const l of t)if(r.set(l.taskReferenceName,l),l.type==="SET_VARIABLE"&&l.inputParameters)for(const c of Object.keys(l.inputParameters))n.set(c,l.taskReferenceName);const s=[],a=[],i=new Set;for(const l of t){const c=l.taskReferenceName,d=new Set(ms(e,c).map(p=>p.taskReferenceName)),u=[];Lr(l.inputParameters,u),Lr(l.httpRequest,u),l.loopCondition&&Lr(l.loopCondition,u),l.expression&&Lr(l.expression,u);for(const p of u){if(p.startsWith("workflow.input.")||p==="workflow.input")continue;if(p.startsWith("workflow.variables.")){const m=p.slice(19).split(".")[0],h=n.get(m);if(h&&h!==c){const y=d.has(h),x=`dfg-${h}->${c}-var:${m}`;i.has(x)||(i.add(x),s.push({id:x,sourceRef:h,targetRef:c,fieldPath:`variables.${m}`,expression:`\${${p}}`,sourceType:"workflow_variable",isValidUpstream:y,issue:y?void 0:"forward_ref"}))}continue}if(p.startsWith("workflow."))continue;const f=p.split(".");if(f.length>=2&&(f[1]==="output"||f[1]==="input")){const m=f[0],h=f.slice(2).join(".")||f[1];if(m===c)continue;const y=r.has(m),x=d.has(m);let g;y?x||(g="forward_ref",a.push({taskRef:c,expression:`\${${p}}`,issue:"forward_ref",message:`任务 [${c}] 引用了非上游或互斥分支任务 "${m}" 的输出`})):(g="undefined_ref",a.push({taskRef:c,expression:`\${${p}}`,issue:"undefined_ref",message:`任务 [${c}] 引用了不存在的任务 "${m}"`}));const v=`dfg-${m}->${c}-${h}`;i.has(v)||(i.add(v),s.push({id:v,sourceRef:m,targetRef:c,fieldPath:h,expression:`\${${p}}`,sourceType:"task_output",isValidUpstream:y&&x,issue:g}))}}}return{edges:s,diagnostics:a}}function ys(e,t,r){const n=t.trim(),s=r.trim();if(!n||!s||n===s)return{updatedDef:e,replacedCount:0,affectedTaskRefs:[]};const a=JSON.parse(JSON.stringify(e));let i=0;const l=new Set,c=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(`\\$\\{\\s*${c}(\\.|\\s*\\})`,"g"),u=new RegExp(`\\$\\.\\b${c}\\b`,"g");function p(m,h){if(typeof m=="string"){let y=m;return d.lastIndex=0,d.test(y)&&(y=y.replace(d,(x,g)=>(i++,l.add(h),`\${${s}${g}`))),u.lastIndex=0,u.test(y)&&(y=y.replace(u,()=>(i++,l.add(h),`$.${s}`))),y}if(Array.isArray(m))return m.map(y=>p(y,h));if(m&&typeof m=="object"){const y={};for(const[x,g]of Object.entries(m))y[x]=p(g,h);return y}return m}const f=hr(a.tasks);for(const m of f){const h=m.taskReferenceName===n?s:m.taskReferenceName;m.taskReferenceName===n&&(m.taskReferenceName=s),m.inputParameters&&(m.inputParameters=p(m.inputParameters,h)),m.httpRequest&&(m.httpRequest=p(m.httpRequest,h)),m.loopCondition&&(m.loopCondition=p(m.loopCondition,h)),m.expression&&(m.expression=p(m.expression,h)),m.caseExpression&&(m.caseExpression=p(m.caseExpression,h)),Array.isArray(m.joinOn)&&(m.joinOn=m.joinOn.map(y=>y===n?(i++,l.add(h),s):y)),Array.isArray(m.defaultExclusiveJoinTask)&&(m.defaultExclusiveJoinTask=m.defaultExclusiveJoinTask.map(y=>y===n?(i++,l.add(h),s):y))}return a.outputParameters&&(a.outputParameters=p(a.outputParameters,"__workflow_output__")),l.delete(s),{updatedDef:a,replacedCount:i,affectedTaskRefs:Array.from(l)}}const X_=/^[a-zA-Z0-9_]+$/,Z_=new Set(["workflow"]);function xv(e,t,r){const n={name:t,taskReferenceName:r,type:e||"SIMPLE",inputParameters:{}};switch(n.type){case"HTTP":n.inputParameters={http_request:{uri:"https://example.com/api",method:"GET",accept:"application/json",contentType:"application/json",headers:{}}};break;case"KAFKA_PUBLISH":n.inputParameters={kafka_request:{bootStrapServers:"localhost:9092",topic:"my_topic",key:"msg_key",value:"${workflow.input.value}",headers:{}}};break;case"JSON_JQ_TRANSFORM":n.inputParameters={queryExpression:".name",input:{}};break;case"SET_VARIABLE":n.inputParameters={variableName:"variableValue"};break;case"SUB_WORKFLOW":n.subWorkflowParam={name:"execution_workflow",version:1};break;case"EVENT":n.sink="conductor";break;case"WAIT":n.inputParameters={duration:"30s"};break;case"TERMINATE":n.inputParameters={terminationStatus:"COMPLETED",workflowOutput:{}};break;case"SWITCH":n.evaluatorType="value-param",n.expression="switchCaseValue",n.inputParameters={switchCaseValue:"${workflow.input.case}"},n.decisionCases={case1:[]},n.defaultCase=[];break;case"DECISION":n.caseValueParam="case_param",n.inputParameters={case_param:"${workflow.input.case}"},n.decisionCases={case1:[]},n.defaultCase=[];break;case"DO_WHILE":n.loopCondition=`if ($.${r}['iteration'] < 3) { true; } else { false; }`,n.loopOver=[];break;case"INLINE":n.inputParameters={evaluatorType:"graaljs",expression:`function execute(input) {
13
10
  return { result: input };
14
11
  }
15
- execute($.input);`}):d.type==="DYNAMIC"?(d.dynamicTaskNameParam="taskToExecute",d.inputParameters={taskToExecute:"${workflow.input.taskName}"}):d.type==="HUMAN"?d.humanTaskDef={userFormTemplate:"",assignmentCompletionStrategy:"LEAVE_OPEN"}:d.type==="START_WORKFLOW"?d.inputParameters={startWorkflow:{name:"",version:1,input:{},correlationId:""}}:d.type==="NOOP"&&(d.inputParameters={}),i.isWorkflowStart)u.tasks.unshift(d);else if(i.isLoopBodyStart){const b=Fe(u.tasks,n);b&&(b.loopOver||(b.loopOver=[]),b.loopOver.unshift(d))}else i.branchCase!==void 0||i.forkIndex!==void 0||i.isLoopAdd?_t(u.tasks,n,i,d):u.tasks.length===0?u.tasks.push(d):Ge(u.tasks,n,d);Le(u.tasks);const{nodes:p,edges:h,taskMap:f}=Ae(u,c,{hideEmptyBranches:t().mode!=="edit"}),{nodes:m,edges:y}=Ee(p,h,{direction:c,mode:t().mode}),g=Be(u);e({workflowDef:u,nodes:m,edges:y,taskMap:f,validationResults:g})},removeNode:r=>{const{workflowDef:n,layoutDirection:o,nodes:s}=t();if(!n)return;const i=JSON.parse(JSON.stringify(n)),l=St(i.tasks,r);if(l){const m=s.find(y=>y.id===r)?.data?.taskType;if(m==="FORK_JOIN"||m==="FORK_JOIN_DYNAMIC"){const y=Mm(l,r);y&&Ze(i.tasks,y)}else if(m==="JOIN"||m==="EXCLUSIVE_JOIN"){const y=$m(l,r);y&&Ze(i.tasks,y)}}Ze(i.tasks,r),Le(i.tasks);const{nodes:c,edges:u,taskMap:d}=Ae(i,o,{hideEmptyBranches:t().mode!=="edit"}),{nodes:p,edges:h}=Ee(c,u,{direction:o,mode:t().mode}),f=Be(i);e({workflowDef:i,nodes:p,edges:h,taskMap:d,validationResults:f})},addLoopTask:(r,n)=>{const{workflowDef:o,layoutDirection:s}=t();if(!o)return;const i=JSON.parse(JSON.stringify(o)),l=Fe(i.tasks,r);if(l&&l.type==="DO_WHILE"){l.loopOver||(l.loopOver=[]);const c={name:`new_${n.toLowerCase()}`,taskReferenceName:`${r}_sub_${Date.now()}`,type:n,inputParameters:{}};l.loopOver.push(c),Le(i.tasks);const{nodes:u,edges:d,taskMap:p}=Ae(i,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:h,edges:f}=Ee(u,d,{direction:s,mode:t().mode}),m=Be(i);e({workflowDef:i,nodes:h,edges:f,taskMap:p,validationResults:m})}},removeLoopTask:(r,n)=>{const{workflowDef:o,layoutDirection:s}=t();if(!o)return;const i=JSON.parse(JSON.stringify(o)),l=Fe(i.tasks,r);if(l&&l.type==="DO_WHILE"&&l.loopOver){const c=St(l.loopOver,n);if(c){const y=c.find(g=>g.taskReferenceName===n);if(y?.type==="FORK_JOIN"||y?.type==="FORK_JOIN_DYNAMIC"){const g=Mm(c,n);g&&Ze(l.loopOver,g)}else if(y?.type==="JOIN"||y?.type==="EXCLUSIVE_JOIN"){const g=$m(c,n);g&&Ze(l.loopOver,g)}}Ze(l.loopOver,n),Le(i.tasks);const{nodes:u,edges:d,taskMap:p}=Ae(i,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:h,edges:f}=Ee(u,d,{direction:s,mode:t().mode}),m=Be(i);e({workflowDef:i,nodes:h,edges:f,taskMap:p,validationResults:m})}},addDecisionBranch:(r,n)=>{const{workflowDef:o,layoutDirection:s}=t();if(!o)return;const i=JSON.parse(JSON.stringify(o)),l=Fe(i.tasks,r);if(l&&(l.type==="DECISION"||l.type==="SWITCH")){n==="default"?l.defaultCase||(l.defaultCase=[]):(l.decisionCases||(l.decisionCases={}),l.decisionCases[n]||(l.decisionCases[n]=[])),Le(i.tasks);const{nodes:c,edges:u,taskMap:d}=Ae(i,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:p,edges:h}=Ee(c,u,{direction:s,mode:t().mode}),f=Be(i);e({workflowDef:i,nodes:p,edges:h,taskMap:d,validationResults:f})}},removeDecisionBranch:(r,n)=>{const{workflowDef:o,layoutDirection:s}=t();if(!o)return;const i=JSON.parse(JSON.stringify(o)),l=Fe(i.tasks,r);if(l&&(l.type==="DECISION"||l.type==="SWITCH")){n==="default"?l.defaultCase=[]:l.decisionCases&&delete l.decisionCases[n],Le(i.tasks);const{nodes:c,edges:u,taskMap:d}=Ae(i,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:p,edges:h}=Ee(c,u,{direction:s,mode:t().mode}),f=Be(i);e({workflowDef:i,nodes:p,edges:h,taskMap:d,validationResults:f})}},renameDecisionBranch:(r,n,o)=>{const{workflowDef:s,layoutDirection:i}=t();if(!s||!o.trim()||n===o)return;const l=JSON.parse(JSON.stringify(s)),c=Fe(l.tasks,r);if(c&&(c.type==="DECISION"||c.type==="SWITCH")){if(!c.decisionCases||!c.decisionCases[n])return;c.decisionCases[o.trim()]=c.decisionCases[n],delete c.decisionCases[n],Le(l.tasks);const{nodes:u,edges:d,taskMap:p}=Ae(l,i,{hideEmptyBranches:t().mode!=="edit"}),{nodes:h,edges:f}=Ee(u,d,{direction:i,mode:t().mode}),m=Be(l);e({workflowDef:l,nodes:h,edges:f,taskMap:p,validationResults:m})}},addForkBranch:r=>{const{workflowDef:n,layoutDirection:o}=t();if(!n)return;const s=JSON.parse(JSON.stringify(n)),i=Fe(s.tasks,r);if(i&&i.type==="FORK_JOIN"){i.forkTasks||(i.forkTasks=[]),i.forkTasks.push([]),Le(s.tasks);const{nodes:l,edges:c,taskMap:u}=Ae(s,o,{hideEmptyBranches:t().mode!=="edit"}),{nodes:d,edges:p}=Ee(l,c,{direction:o,mode:t().mode}),h=Be(s);e({workflowDef:s,nodes:d,edges:p,taskMap:u,validationResults:h})}},copyTask:r=>e({copiedTask:r}),pasteTask:r=>{const{workflowDef:n,layoutDirection:o,selectedTask:s}=t();if(!n)return;const i=JSON.parse(JSON.stringify(n)),c=`_copy_${Date.now()}`,u=JSON.parse(JSON.stringify(r)),d=x=>{x.taskReferenceName=`${x.taskReferenceName}${c}`,x.decisionCases&&Object.values(x.decisionCases).forEach(v=>v.forEach(d)),x.defaultCase&&x.defaultCase.forEach(d),x.forkTasks&&x.forkTasks.forEach(v=>v.forEach(d)),x.loopOver&&x.loopOver.forEach(d)};d(u);const p=s?s.taskReferenceName:i.tasks.length>0?i.tasks[i.tasks.length-1].taskReferenceName:"start";if(u.type==="FORK_JOIN"){u.forkTasks||(u.forkTasks=[[],[]]);const x={name:`${u.name}_join`,taskReferenceName:`${u.taskReferenceName}_join`,type:"JOIN",joinOn:[]};i.tasks.length===0?i.tasks.push(u,x):(Ge(i.tasks,p,u),Ge(i.tasks,u.taskReferenceName,x))}else i.tasks.length===0?i.tasks.push(u):Ge(i.tasks,p,u);Le(i.tasks);const{nodes:h,edges:f,taskMap:m}=Ae(i,o,{hideEmptyBranches:t().mode!=="edit"}),{nodes:y,edges:g}=Ee(h,f,{direction:o,mode:t().mode}),b=Be(i);e({workflowDef:i,nodes:y,edges:g,taskMap:m,validationResults:b})},flashNodes:r=>{if(r.length===0)return;const n=t().__flashTimeout;n&&clearTimeout(n);const o=new Set(r),s={};t().nodes.forEach(l=>{o.has(l.id)&&(s[l.id]=l.selected??!1)}),e(l=>({nodes:l.nodes.map(c=>o.has(c.id)?{...c,selected:!0}:c)}));const i=setTimeout(()=>{e(l=>({nodes:l.nodes.map(c=>o.has(c.id)?{...c,selected:s[c.id]??!1}:c)}))},2500);t().__flashTimeout=i},setTheme:r=>e({theme:r}),setThemeColor:r=>e({themeColor:r}),setEdgeType:r=>e({edgeType:r}),setNodesLocked:r=>e({nodesLocked:r}),setViewMode:r=>e({viewMode:r}),startSimulation:()=>{const{edges:r,nodes:n,isSimRunning:o}=t();if(o)return;const s=n.filter(p=>!["plusNode","dynamicPlaceholderNode"].includes(p.type??"")).map(p=>p.id),i=r.map(p=>({source:p.source,target:p.target})),l=p1(s,i);e({isSimRunning:!0,simState:{}});const c={timer:null};t().__simHandle=c;let u=0;const d=()=>{if(u>=l.length||!t().isSimRunning){e({isSimRunning:!1});return}const p=l[u];e(h=>{const f={...h.simState};return p.forEach(m=>f[m]="running"),{simState:f}}),c.timer=setTimeout(()=>{t().isSimRunning&&(e(h=>{const f={...h.simState};return p.forEach(m=>f[m]="done"),{simState:f}}),u++,c.timer=setTimeout(d,280))},700)};d()},stopSimulation:()=>{const r=t().__simHandle;r?.timer&&clearTimeout(r.timer),e({isSimRunning:!1,simState:{}})},createBlankWorkflow:r=>{const n={name:r||"new_workflow",description:"",tasks:[],version:1,schemaVersion:2};t().setWorkflow(n),e({mode:"edit"})},applyAIGeneratedWorkflow:r=>{const{tasks:n,...o}=r,s={...o,name:r.name||"AI_Generated_Workflow",tasks:n||[],version:r.version||1,schemaVersion:2};t().setWorkflow(s)},setShowRunPanel:r=>e({showRunPanel:r}),setShowAnalysisPanel:r=>e({showAnalysisPanel:r}),setRunState:(r,n,o)=>{e({runState:r,pendingExecutionId:n!==void 0?n:t().pendingExecutionId,executionError:o!==void 0?o:t().executionError})},switchToEditAndFocusParam:(r,n)=>{const{workflowDef:o,layoutDirection:s,taskMap:i}=t();if(!o)return;e({mode:"edit",focusedParamKey:n??null});const{nodes:l,edges:c,taskMap:u}=Ae(o,s,{hideEmptyBranches:!1}),{nodes:d,edges:p}=Ee(l,c,{direction:s,mode:"edit"});e({nodes:d,edges:p,taskMap:u});const h=i[r]||u[r];h&&e({selectedTask:{...h},isDetailPanelOpen:!0,showAnalysisPanel:!1})},setShowDataLineage:r=>e({showDataLineage:r}),clearRefactorNotice:()=>e({lastRefactorNotice:null}),setShowWaterfallPanel:r=>e({showWaterfallPanel:r}),setTimeTravelTimestamp:r=>e({timeTravelTimestamp:r}),setLoopIteration:(r,n)=>e({activeLoopIterations:{...t().activeLoopIterations,[r]:n}}),runLocalSandboxDryRun:(r,n,o)=>{const{workflowDef:s}=t();if(!s)return;const i=zt(s,{workflowInput:r,taskMocks:n,maxLoopIterations:o});t().importExecutionJSON(i),e({showWaterfallPanel:!0})},setInlineCopilotTaskRef:r=>e({inlineCopilotTaskRef:r})}),{partialize:e=>({workflowDef:e.workflowDef,layoutDirection:e.layoutDirection,nodes:x1(e.nodes),graphStale:e.graphStale,edges:e.edges,taskMap:e.taskMap,theme:e.theme,themeColor:e.themeColor,mode:e.mode,edgeType:e.edgeType,nodesLocked:e.nodesLocked,copiedTask:e.copiedTask}),equality:(e,t)=>e.workflowDef===t.workflowDef?!0:JSON.stringify(e.workflowDef)===JSON.stringify(t.workflowDef),limit:100}),{name:"conductor-ui-prefs",version:1,storage:zr(()=>localStorage),migrate:(e,t)=>(t===0&&e.edgeType==="default"&&(e.edgeType="smoothstep"),e),partialize:e=>({theme:e.theme,themeColor:e.themeColor,layoutDirection:e.layoutDirection,edgeType:e.edgeType,nodesLocked:e.nodesLocked,copiedTask:e.copiedTask,viewMode:e.viewMode})})),Gm=e=>Symbol.iterator in e,Ym=e=>"entries"in e,Xm=(e,t)=>{const r=e instanceof Map?e:new Map(e.entries()),n=t instanceof Map?t:new Map(t.entries());if(r.size!==n.size)return!1;for(const[o,s]of r)if(!n.has(o)||!Object.is(s,n.get(o)))return!1;return!0},b1=(e,t)=>{const r=e[Symbol.iterator](),n=t[Symbol.iterator]();let o=r.next(),s=n.next();for(;!o.done&&!s.done;){if(!Object.is(o.value,s.value))return!1;o=r.next(),s=n.next()}return!!o.done&&!!s.done};function v1(e,t){return Object.is(e,t)?!0:typeof e!="object"||e===null||typeof t!="object"||t===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t)?!1:Gm(e)&&Gm(t)?Ym(e)&&Ym(t)?Xm(e,t):b1(e,t):Xm({entries:()=>Object.entries(e)},{entries:()=>Object.entries(t)})}function we(e){const t=I.useRef(void 0);return r=>{const n=e(r);return v1(t.current,n)?t.current:t.current=n}}const k1=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),S1=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,n)=>n?n.toUpperCase():r.toLowerCase()),Zm=e=>{const t=S1(e);return t.charAt(0).toUpperCase()+t.slice(1)},Qm=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim(),_1=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var w1={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const T1=I.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:o="",children:s,iconNode:i,...l},c)=>I.createElement("svg",{ref:c,...w1,width:t,height:t,stroke:e,strokeWidth:n?Number(r)*24/Number(t):r,className:Qm("lucide",o),...!s&&!_1(l)&&{"aria-hidden":"true"},...l},[...i.map(([u,d])=>I.createElement(u,d)),...Array.isArray(s)?s:[s]]));const Me=(e,t)=>{const r=I.forwardRef(({className:n,...o},s)=>I.createElement(T1,{ref:s,iconNode:t,className:Qm(`lucide-${k1(Zm(e))}`,`lucide-${e}`,n),...o}));return r.displayName=Zm(e),r};const eg=Me("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);const j1=Me("circle-stop",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);const I1=Me("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const tg=Me("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);const C1=Me("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);const _r=Me("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);const wr=Me("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);const N1=Me("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);const R1=Me("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);const E1=Me("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);const P1=Me("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);const O1=Me("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);const rg=Me("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);const Ol=Me("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]);const D1=Me("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);const A1=Me("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);const L1=Me("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),M1={business:["business"],standard:["business","control"],developer:["business","control","data"]},Ye=[{type:"SIMPLE",label:"任务节点 (Worker)",description:"在远程 Worker 上执行的任务",category:"CORE",icon:eg,viewCategory:"business"},{type:"SUB_WORKFLOW",label:"子工作流 (Sub Workflow)",description:"调用并执行另一个工作流",category:"CORE",icon:wr,viewCategory:"business"},{type:"START_WORKFLOW",label:"启动工作流 (Start Workflow)",description:"启动另一个工作流(不等待结果)",category:"SYSTEM",icon:P1,viewCategory:"business"},{type:"HTTP",label:"HTTP 请求",description:"发起 REST/HTTP 调用",category:"SYSTEM",icon:N1,viewCategory:"business"},{type:"INLINE",label:"内联脚本 (Inline)",description:"执行内联脚本(JS/Python/GraalJS)",category:"SYSTEM",icon:tg,viewCategory:"data"},{type:"JSON_JQ_TRANSFORM",label:"JSON 转换 (JQ)",description:"使用 JQ 表达式转换 JSON 数据",category:"SYSTEM",icon:D1,viewCategory:"data"},{type:"KAFKA_PUBLISH",label:"Kafka 推送",description:"向 Kafka 主题推送消息",category:"SYSTEM",icon:R1,viewCategory:"data"},{type:"EVENT",label:"事件 (Event)",description:"向外部队列系统发布事件",category:"SYSTEM",icon:L1,viewCategory:"data"},{type:"WAIT",label:"等待 (Wait)",description:"暂停流程,直到特定时间或时长",category:"SYSTEM",icon:I1,viewCategory:"control"},{type:"SET_VARIABLE",label:"设置变量 (Set Variable)",description:"设置工作流上下文变量",category:"SYSTEM",icon:C1,viewCategory:"data"},{type:"TERMINATE",label:"终止 (Terminate)",description:"提前结束工作流执行",category:"SYSTEM",icon:j1,viewCategory:"control"},{type:"HUMAN",label:"人工审批 (Human)",description:"等待人工审核或表单提交",category:"SYSTEM",icon:A1,viewCategory:"business"},{type:"DYNAMIC",label:"动态任务 (Dynamic)",description:"运行时动态决定任务类型",category:"SYSTEM",icon:Ol,viewCategory:"data"},{type:"NOOP",label:"空操作 (Noop)",description:"占位符任务,无实际操作",category:"SYSTEM",icon:E1,viewCategory:"data"},{type:"LAMBDA",label:"Lambda 脚本 (旧)",description:"已被 INLINE 取代",category:"SYSTEM",icon:tg,hidden:!0,viewCategory:"data"},{type:"SWITCH",label:"条件分支 (Switch)",description:"基于条件的逻辑分支 (Switch/Case)",category:"FLOW",icon:Ol,viewCategory:"control"},{type:"DECISION",label:"判断 (Decision,旧)",description:"基于条件的逻辑分支(旧版,推荐改用 Switch)",category:"FLOW",icon:Ol,hidden:!0,viewCategory:"control"},{type:"FORK_JOIN",label:"静态并行 (Fork)",description:"并行执行多个预定义任务分支",category:"FLOW",icon:_r,viewCategory:"control"},{type:"FORK_JOIN_DYNAMIC",label:"动态并行 (Dynamic Fork)",description:"运行时动态生成并行分支",category:"FLOW",icon:_r,viewCategory:"control"},{type:"DO_WHILE",label:"循环 (Do-While)",description:"循环执行直到满足条件",category:"FLOW",icon:rg,viewCategory:"control"},{type:"JOIN",label:"汇聚 (Join)",description:"等待所有并行分支执行完成",category:"FLOW",icon:wr,viewCategory:"control"}],$1=[{key:"CORE",label:"基础任务"},{key:"FLOW",label:"逻辑控制"},{key:"SYSTEM",label:"系统集成"}],ft=({message:e,onConfirm:t,onCancel:r})=>{const n=I.useRef(null),{theme:o,themeColor:s}=ie(we(i=>({theme:i.theme,themeColor:i.themeColor})));return I.useEffect(()=>{n.current?.focus({preventScroll:!0});const i=l=>{l.key==="Escape"&&r()};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[r]),Qe.createPortal(a.jsx("div",{"data-mode":o,"data-brand":s,onClick:r,style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:a.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"确认操作",onClick:i=>i.stopPropagation(),style:{backgroundColor:"var(--bg-secondary)",border:"1px solid var(--border-primary)",borderRadius:"8px",padding:"24px 28px",maxWidth:"380px",width:"90%",boxShadow:"0 8px 32px rgba(0, 0, 0, 0.18)"},children:[a.jsx("div",{style:{fontSize:"14px",color:"var(--text-primary)",marginBottom:"24px",lineHeight:"1.6",whiteSpace:"pre-wrap",maxHeight:"50vh",overflowY:"auto"},children:e}),a.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[a.jsx("button",{ref:n,onClick:r,style:{padding:"7px 18px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:500},children:"取消"}),a.jsx("button",{onClick:t,style:{padding:"7px 18px",backgroundColor:"var(--color-accent)",border:"none",borderRadius:"6px",color:"#ffffff",cursor:"pointer",fontSize:"13px",fontWeight:600},children:"确定"})]})]})}),document.body)},Ft=({children:e,nodeId:t,selected:r=!1,isStartOrEnd:n=!1,isError:o=!1,hasWarning:s=!1,isDecision:i=!1,isHighlighted:l=!1,executionStatus:c,simRunning:u=!1,simDone:d=!1,proposalStatus:p})=>{const{mode:h,removeNode:f}=ie(we(S=>({mode:S.mode,removeNode:S.removeNode}))),[m,y]=I.useState(!1),g=S=>{S.stopPropagation(),y(!0)},b=h==="edit"&&!n,v=[i?"decision-node-wrapper":"node-wrapper-glass",r?"node-wrapper-selected":"",l?"node-wrapper-highlighted":"",u?"node-sim-running":"",d?"node-sim-done":"",p?`node-proposal-${p}`:""].filter(Boolean).join(" "),k=I.useMemo(()=>{if(h!=="run")return{};if(!c)return{opacity:.4};switch(c){case"FAILED":case"FAILED_WITH_TERMINAL_ERROR":return{borderColor:"var(--status-failed)",boxShadow:"0 0 12px rgba(239, 68, 68, 0.5), 0 0 24px rgba(239, 68, 68, 0.2)"};case"TIMED_OUT":return{borderColor:"var(--status-timed-out)",boxShadow:"0 0 8px rgba(249, 115, 22, 0.4)"};case"IN_PROGRESS":case"SCHEDULED":return{borderColor:"var(--status-in-progress)",animation:"status-pulse 1.5s ease-in-out infinite"};case"COMPLETED":return{borderColor:"var(--status-completed)",opacity:.85};case"COMPLETED_WITH_ERRORS":return{borderColor:"var(--status-completed-with-errors)"};case"SKIPPED":case"CANCELED":return{opacity:.5};default:return{}}},[h,c]);return a.jsxs("div",{className:v,style:{position:"relative",...k},children:[b&&a.jsx("button",{onClick:g,"aria-label":"删除任务",style:{position:"absolute",top:"-10px",right:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#ef4444",color:"white",border:"2px solid white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:100,boxShadow:"0 2px 8px rgba(0,0,0,0.2)",animation:"popIn 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",padding:0},title:"删除任务",children:"×"}),o&&a.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#ef4444",color:"white",border:"2px solid white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"0 2px 8px rgba(0,0,0,0.2)"},title:"此节点配置有误",children:"❗"}),!o&&s&&a.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#f59e0b",color:"white",border:"2px solid white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"0 2px 8px rgba(0,0,0,0.2)"},title:"此节点有警告信息",children:"⚠️"}),p&&a.jsx("div",{className:`node-proposal-badge node-proposal-badge-${p}`,children:p==="added"?"+":p==="modified"?"~":"−"}),e,m&&a.jsx(ft,{message:"确定要删除此任务吗?",onConfirm:()=>{f(t),y(!1)},onCancel:()=>y(!1)})]})},q1=({status:e})=>{const t=()=>{switch(e){case"SCHEDULED":return{icon:"○",className:"scheduled"};case"IN_PROGRESS":return{icon:"◐",className:"in-progress"};case"COMPLETED":return{icon:"✓",className:"completed"};case"COMPLETED_WITH_ERRORS":return{icon:"⚠",className:"completed-with-errors"};case"FAILED":case"FAILED_WITH_TERMINAL_ERROR":return{icon:"✗",className:"failed"};case"TIMED_OUT":return{icon:"⏱",className:"timed-out"};case"SKIPPED":return{icon:"⤳",className:"skipped"};case"CANCELED":return{icon:"⊘",className:"canceled"};default:return{icon:"?",className:"unknown"}}},{icon:r,className:n}=t();return a.jsx("div",{className:`execution-status-badge ${n}`,title:e,children:a.jsx("span",{className:"badge-icon",children:r})})},Dl=I.memo(q1),z1=/[一-龥]/,W1=({icon:e,header:t,title:r,subTitle:n,meta:o,duration:s,color:i,status:l,isRunning:c,children:u,width:d="240px"})=>{const p=c&&l?l==="COMPLETED"?"var(--status-completed)":l==="FAILED"||l==="FAILED_WITH_TERMINAL_ERROR"?"var(--status-failed)":l==="IN_PROGRESS"||l==="SCHEDULED"?"var(--status-in-progress)":l==="TIMED_OUT"||l==="COMPLETED_WITH_ERRORS"?"var(--status-timed-out)":i:i,h=d==="240px"||d===240?"237px":d;return a.jsxs("div",{style:{display:"flex",flexDirection:"row",width:h,height:u?void 0:"81px",minHeight:"81px",boxSizing:"border-box",position:"relative",overflow:"hidden",borderRadius:"10px"},children:[a.jsx("div",{style:{width:"44px",display:"flex",alignItems:"center",justifyContent:"center",background:"color-mix(in srgb, var(--color-accent) 8%, transparent)",borderLeft:`3px solid ${p}`,borderRight:"1px solid var(--border-primary)",color:p,flexShrink:0},children:a.jsx(e,{size:18,strokeWidth:1.75})}),a.jsxs("div",{style:{flex:1,padding:"6px 12px",display:"flex",flexDirection:"column",justifyContent:"center",overflow:"hidden",minWidth:0},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",marginBottom:"2px",paddingRight:c&&l?"20px":0},children:[a.jsx("div",{style:{fontSize:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.5px",lineHeight:1.2,opacity:.85,color:i,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",...z1.test(t)&&{letterSpacing:"0.2px",fontSize:"11px"}},children:t}),c&&s&&a.jsx("span",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-tertiary)",padding:"1px 5px",borderRadius:"4px",flexShrink:0,lineHeight:1.2},children:s})]}),a.jsx("div",{style:{fontSize:"13.5px",fontWeight:600,color:"var(--text-primary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",lineHeight:1.25,marginBottom:n||o?"1px":0},title:r,children:r}),n&&n!==r&&n!==o&&a.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",lineHeight:1.25},title:n,children:n}),o&&a.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted)",lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:o,children:o}),u&&a.jsx("div",{style:{marginTop:"6px"},children:u})]}),c&&l&&a.jsx("div",{style:{position:"absolute",top:"7px",right:"7px"},children:a.jsx(Dl,{status:l})})]})},Tr=I.memo(W1),ht=e=>{const t=e.layoutDirection||"TB",r=e.sourcePosition||(t==="LR"?q.Position.Right:q.Position.Bottom),n=e.targetPosition||(t==="LR"?q.Position.Left:q.Position.Top);return{layoutDirection:t,sourcePosition:r,targetPosition:n}},jt=e=>{const{mode:t,executionData:r,workflowDef:n,activeLoopIterations:o,timeTravelTimestamp:s}=ie(we(f=>({mode:f.mode,executionData:f.executionData,workflowDef:f.workflowDef,activeLoopIterations:f.activeLoopIterations,timeTravelTimestamp:f.timeTravelTimestamp}))),i=t==="run"?r?.[e]:null,l=t==="run";let c=i?{...i}:null;if(l&&c&&c.attempts.length>1&&n?.tasks){let f=0;for(const[m,y]of Object.entries(o)){if(!y)continue;if(r?.[m]||c.attempts.some(b=>b.iteration===y)){f=y;break}}if(f>0){const m=c.attempts.find(y=>y.iteration===f)||c.attempts[f-1];m&&(c={...c,status:m.status,startTime:m.startTime,endTime:m.endTime,input:m.inputData,output:m.outputData,iteration:m.iteration??f})}}if(l&&c&&s!==null){const f=c.startTime??0,m=c.endTime??f;f>s?c={...c,status:"SCHEDULED"}:f<=s&&m>s&&(c={...c,status:"IN_PROGRESS"})}const u=c?.attempts.some(f=>f.iteration!==void 0&&f.iteration>1)??!1,d=c?.attempts[c.attempts.length-1],p=u?0:d?.retryCount??0;let h;if(l&&c?.startTime)if(s!==null&&c.startTime>s)h="待执行";else if(s!==null&&c.startTime<=s&&(c.endTime??c.startTime)>s)h=`${s-c.startTime}ms...`;else if(c.endTime&&c.endTime>=c.startTime){const f=c.endTime-c.startTime;h=f<1e3?`${f}ms`:`${(f/1e3).toFixed(2)}s`}else(c.status==="IN_PROGRESS"||c.status==="SCHEDULED")&&(h="运行中");return{mode:t,execution:c,isRunning:l,retryCount:p,durationText:h}};function ot(e,t){return e.length>t?e.slice(0,t)+"…":e}function Bt(e,t,r,n){if(r==="business")return t.task?.description?.trim()||n;if(r==="standard")return n;const o=t.task;if(!o)return n;const s=o.inputParameters||{};switch(e){case"HTTP":case"HTTP_POLL":{const i=o.httpRequest||s.http_request;if(!i)return n;const l=(i.method||"GET").toUpperCase(),c=i.uri?ot(String(i.uri),28):"";return c?`${l} ${c}`:l}case"SWITCH":{const i=o.caseExpression||s.expression,l=o.evaluatorType||s.evaluatorType;return i?ot(i,35):l||n}case"DECISION":return o.caseValueParam?`param: ${o.caseValueParam}`:n;case"SIMPLE":return o.name?`worker: ${ot(o.name,28)}`:n;case"INLINE":case"LAMBDA":{const i=o.evaluatorType||s.evaluatorType;return i?`${i} script`:n}case"SUB_WORKFLOW":{const i=o.subWorkflowParam;return i?`${i.name}${i.version?` v${i.version}`:""}`:n}case"DO_WHILE":{const i=o.loopCondition;return i?ot(i,35):n}case"JSON_JQ_TRANSFORM":{const i=s.queryExpression||s.query_expression;return i?ot(i,35):n}case"SET_VARIABLE":{const i=Object.keys(s);return i.length?`set: ${i.slice(0,2).join(", ")}${i.length>2?"…":""}`:n}case"EVENT":{const i=o.sink||s.sink;return i?`→ ${ot(i,32)}`:n}case"KAFKA_PUBLISH":{const i=s.topic||s.kafka_request?.topic;return i?`topic: ${ot(i,28)}`:n}case"START_WORKFLOW":{const i=o.startWorkflow?.name??s.startWorkflow?.name??s.start_workflow?.name;return i?`→ ${i}`:n}default:return n}}function It(e,t){if(t!=="business")return e;const r=Ye.find(n=>n.type===e);return r?r.label.replace(/\s*\([^)]+\)$/,""):e==="JOIN"?"汇聚":e==="EXCLUSIVE_JOIN"?"排他汇聚":e}const F1=({id:e,data:t,selected:r})=>{const n=t.taskType||"SIMPLE",{sourcePosition:o,targetPosition:s}=ht(t),{execution:i,isRunning:l,retryCount:c,durationText:u}=jt(t.taskReferenceName),d=ie(j=>j.viewMode),p=ie(j=>j.mode),h=ie(j=>j.setInlineCopilotTaskRef),m=q.useStore(j=>j.transform[2])>=1.15,y=I.useMemo(()=>Ye.find(j=>j.type===n),[n]),g=y?.icon||eg,b=n==="NOOP",x=t.isDynamicRuntime===!0,v=b?"var(--text-secondary)":"var(--color-accent)",k=I.useMemo(()=>{let j;return x?j=`Dynamic (${n})`:n==="SIMPLE"?j=t.label==="Worker Task"?"Execute on Worker":"Worker Task":n==="HTTP"?j="REST API Call":n==="JSON_JQ_TRANSFORM"?j="JQ Expression":n==="INLINE"||n==="LAMBDA"?j="Inline Script":n==="START_WORKFLOW"?j="Launch Workflow (no wait)":n==="DYNAMIC"?j="Dynamic Task Type":n==="HUMAN"?j="Human Approval":n==="NOOP"?j="No Operation":j=y?.label||n,Bt(n,t,d,j)},[n,y,t,d,x]),S=I.useMemo(()=>!m||!t.task?.inputParameters?[]:Object.entries(t.task.inputParameters).slice(0,2).map(([w,N])=>({key:w,val:typeof N=="object"?JSON.stringify(N).slice(0,28):String(N).slice(0,28)})),[m,t.task?.inputParameters]);return a.jsx(Ft,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isHighlighted:t.isHighlighted,executionStatus:i?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:a.jsxs("div",{style:{borderRadius:"10px",background:b?"var(--bg-tertiary)":"transparent",opacity:b?.75:1,position:"relative",outline:x?"2px dashed var(--color-accent)":"none",outlineOffset:"-2px"},children:[a.jsx(Tr,{icon:g,header:It(n,d),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:k,duration:u,color:v,status:i?.status,isRunning:l}),S.length>0&&a.jsx("div",{style:{padding:"4px 10px 6px",borderTop:"1px dashed var(--border-primary)",fontSize:"9px",fontFamily:"monospace",color:"var(--text-secondary)",display:"flex",flexDirection:"column",gap:"2px"},children:S.map(j=>a.jsxs("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[a.jsx("span",{style:{color:"#38bdf8"},children:j.key}),": ",j.val]},j.key))}),r&&p==="edit"&&a.jsx("button",{type:"button",onClick:j=>{j.stopPropagation(),h(t.taskReferenceName)},title:"在此节点触发 ⌘K 画布内联 AI 指令",style:{position:"absolute",top:"-10px",right:"20px",padding:"1px 6px",borderRadius:"999px",border:"1px solid rgba(99, 102, 241, 0.6)",background:"linear-gradient(135deg, #6366f1, #38bdf8)",color:"#fff",fontSize:"9px",fontWeight:700,cursor:"pointer",zIndex:102,boxShadow:"0 2px 6px rgba(0,0,0,0.3)"},children:"⌘K"}),l&&c>0&&a.jsxs("div",{style:{position:"absolute",bottom:"4px",right:"4px",background:"var(--status-failed, #ef4444)",color:"#fff",borderRadius:"10px",fontSize:"10px",fontWeight:"700",padding:"1px 6px",zIndex:10,lineHeight:"1.4",pointerEvents:"none"},children:["×",c]}),x&&a.jsx("div",{style:{position:"absolute",top:"4px",right:"4px",background:"var(--color-accent)",color:"#fff",borderRadius:"4px",fontSize:"9px",fontWeight:"700",padding:"1px 5px",zIndex:10,pointerEvents:"none",opacity:.9},children:"动态"}),a.jsx(q.Handle,{type:"target",position:s,style:{background:"#fff"}}),a.jsx(q.Handle,{type:"source",position:o,style:{background:"#fff"}})]})})},B1=I.memo(F1),ng=({title:e,label:t,defaultValue:r="",placeholder:n="",confirmText:o="确定",cancelText:s="取消",onConfirm:i,onCancel:l})=>{const{theme:c,themeColor:u}=ie(we(m=>({theme:m.theme,themeColor:m.themeColor}))),[d,p]=I.useState(r),h=I.useRef(null);I.useEffect(()=>{h.current&&(h.current.focus({preventScroll:!0}),h.current.select());const m=y=>{y.key==="Escape"&&(y.stopPropagation(),l())};return window.addEventListener("keydown",m,!0),()=>window.removeEventListener("keydown",m,!0)},[l]);const f=()=>{const m=d.trim();m&&i(m)};return Qe.createPortal(a.jsx("div",{"data-mode":c,"data-brand":u,onClick:l,style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:a.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":e,onClick:m=>m.stopPropagation(),style:{backgroundColor:"var(--bg-secondary)",border:"1px solid var(--border-primary)",borderRadius:"10px",padding:"24px 28px",maxWidth:"400px",width:"90%",boxShadow:"0 8px 32px rgba(0, 0, 0, 0.22)"},children:[a.jsx("div",{style:{fontSize:"15px",fontWeight:600,color:"var(--text-primary)",marginBottom:"16px"},children:e}),t&&a.jsx("div",{style:{fontSize:"12px",color:"var(--text-secondary)",marginBottom:"8px"},children:t}),a.jsx("input",{ref:h,type:"text",value:d,placeholder:n,onChange:m=>p(m.target.value),onKeyDown:m=>{m.key==="Enter"&&(m.preventDefault(),f()),m.stopPropagation()},style:{width:"100%",padding:"9px 12px",borderRadius:"6px",border:"1px solid var(--border-primary)",background:"var(--bg-tertiary)",color:"var(--text-primary)",fontSize:"13px",outline:"none",boxSizing:"border-box",marginBottom:"20px",transition:"border-color 0.15s"},onFocus:m=>{m.currentTarget.style.borderColor="var(--color-accent)"},onBlur:m=>{m.currentTarget.style.borderColor="var(--border-primary)"}}),a.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[a.jsx("button",{onClick:l,style:{padding:"7px 18px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:500},children:s}),a.jsx("button",{onClick:f,disabled:!d.trim(),style:{padding:"7px 18px",backgroundColor:d.trim()?"var(--color-accent)":"var(--bg-tertiary)",border:"none",borderRadius:"6px",color:d.trim()?"#ffffff":"var(--text-secondary)",cursor:d.trim()?"pointer":"not-allowed",fontSize:"13px",fontWeight:600,transition:"background-color 0.15s, color 0.15s"},children:o})]})]})}),document.body)},H1=({id:e,data:t,selected:r})=>{const{layoutDirection:n}=ht(t),{mode:o,execution:s,isRunning:i,durationText:l}=jt(t.taskReferenceName),{addDecisionBranch:c,removeDecisionBranch:u,renameDecisionBranch:d,viewMode:p}=ie(we(T=>({addDecisionBranch:T.addDecisionBranch,removeDecisionBranch:T.removeDecisionBranch,renameDecisionBranch:T.renameDecisionBranch,viewMode:T.viewMode}))),[h,f]=I.useState(!1),[m,y]=I.useState({type:"none"}),g=n==="LR"?q.Position.Left:q.Position.Top,b=Object.keys(t.decisionCases||t.task?.decisionCases||{}),x=()=>{f(!1),y({type:"add"})},v=(T,D)=>{T.stopPropagation(),y({type:"delete",branch:D})},k=(T,D)=>{T.stopPropagation(),f(!1),y({type:"rename",branch:D})},S=T=>{T&&c(e,T),y({type:"none"})},j=T=>{m.type==="rename"&&(T&&T!==m.branch&&d(e,m.branch,T),y({type:"none"}))},w=()=>{m.type==="delete"&&(u(e,m.branch),y({type:"none"}))},N=()=>y({type:"none"}),_=i?(T=>T&&{SCHEDULED:"execution-node-scheduled",IN_PROGRESS:"execution-node-in-progress",COMPLETED:"execution-node-completed",COMPLETED_WITH_ERRORS:"execution-node-completed-with-errors",FAILED:"execution-node-failed",FAILED_WITH_TERMINAL_ERROR:"execution-node-failed-terminal",TIMED_OUT:"execution-node-timed-out",SKIPPED:"execution-node-skipped",CANCELED:"execution-node-canceled"}[T]||"")(s?.status):"";return a.jsxs(Ft,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isDecision:!0,isHighlighted:t.isHighlighted,executionStatus:s?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:[a.jsxs("div",{style:{position:"relative",width:"164px",height:"164px",display:"flex",alignItems:"center",justifyContent:"center"},children:[a.jsx(q.Handle,{type:"target",position:g,style:{background:"#fff",[n==="LR"?"left":"top"]:"-3px",zIndex:15}}),i&&s?.status&&a.jsx("div",{style:{position:"absolute",top:"12px",right:"12px",zIndex:20},children:a.jsx(Dl,{status:s.status})}),a.jsx("div",{className:_,style:{width:"122px",height:"122px",boxSizing:"border-box",borderRadius:"10px",background:i&&s?.status?void 0:"var(--glass-bg)",backdropFilter:"var(--glass-blur)",WebkitBackdropFilter:"var(--glass-blur)",border:r?"2.5px solid var(--color-accent)":i&&s?.status?void 0:"2px solid rgba(var(--color-accent-rgb), 0.45)",transform:"rotate(45deg)",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:r?"0 8px 26px rgba(0,0,0,0.35), 0 0 0 3px var(--node-glow-color)":i&&s?.status?void 0:"var(--node-shadow)",transition:"all 0.25s ease",cursor:"pointer",flexShrink:0},onClick:()=>o==="edit"&&f(!h),children:a.jsxs("div",{style:{transform:"rotate(-45deg)",color:"#fff",textAlign:"center",padding:"6px",width:"116px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},children:[a.jsx("div",{style:{fontSize:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.5px",opacity:.85,marginBottom:"2px",color:"var(--color-accent)"},children:It(t.taskType,p)}),a.jsx("div",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-primary)",lineHeight:1.25,maxWidth:"104px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:t.taskReferenceName,children:t.taskReferenceName}),t.label&&t.label!==t.taskReferenceName&&a.jsx("div",{style:{fontSize:"10px",color:"var(--text-secondary)",maxWidth:"98px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:"1px"},title:t.label,children:t.label}),o==="edit"&&a.jsx("div",{style:{width:"18px",height:"18px",fontSize:"12px",background:"color-mix(in srgb, var(--color-accent) 18%, transparent)",border:"1px solid rgba(var(--color-accent-rgb), 0.4)",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"4px auto 0",color:"var(--color-accent)",fontWeight:700},title:"管理决策分支",children:"+"}),i&&l&&a.jsx("div",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-tertiary)",padding:"1px 5px",borderRadius:"4px",marginTop:"3px"},children:l})]})}),o==="edit"&&h&&a.jsxs("div",{className:"glass-panel",style:{position:"absolute",top:"170px",left:"50%",transform:"translateX(-50%)",backgroundColor:"var(--glass-surface)",border:"1px solid var(--glass-border)",borderRadius:"8px",padding:"8px",zIndex:1e3,minWidth:"200px",boxShadow:"0 10px 25px rgba(0,0,0,0.5)",animation:"popIn 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",backdropFilter:"blur(12px)"},children:[a.jsx("div",{style:{padding:"4px 8px 6px",fontSize:"11px",color:"var(--text-secondary)",borderBottom:"1px solid var(--glass-border)",marginBottom:"4px",fontWeight:600,letterSpacing:"0.05em"},children:"分支管理"}),b.map(T=>a.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"5px 6px",borderRadius:"4px",gap:"4px"},children:[a.jsx("span",{style:{flex:1,fontSize:"12px",color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:T}),a.jsx("button",{onClick:D=>k(D,T),style:{width:"22px",height:"22px",borderRadius:"4px",backgroundColor:"var(--color-accent)",color:"white",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"11px",padding:0,flexShrink:0,opacity:.85},title:`重命名分支 "${T}"`,children:"✏"}),a.jsx("button",{onClick:D=>v(D,T),style:{width:"22px",height:"22px",borderRadius:"50%",backgroundColor:"#ef4444",color:"white",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"13px",padding:0,flexShrink:0,opacity:.9},title:`删除分支 "${T}"`,children:"×"})]},T)),a.jsx("button",{onClick:x,style:{width:"100%",marginTop:"6px",padding:"8px",backgroundColor:"var(--color-accent)",border:"none",borderRadius:"4px",color:"#fff",cursor:"pointer",fontSize:"12px",fontWeight:"bold"},children:"+ 添加新分支"})]}),p==="developer"&&(()=>{const T=t.task?.caseExpression||t.task?.inputParameters?.expression,D=t.task?.caseValueParam;return!T&&!D?null:a.jsx("div",{style:{position:"absolute",top:"166px",left:"50%",transform:"translateX(-50%)",textAlign:"center",fontSize:10,color:"var(--text-secondary)",maxWidth:150,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",fontFamily:"var(--font-mono, monospace)"},children:T?ot(T,22):`param: ${D}`})})(),n==="TB"?a.jsxs(a.Fragment,{children:[a.jsx(q.Handle,{type:"source",position:q.Position.Bottom,style:{background:"#fff",bottom:"-3px",zIndex:15}}),a.jsx(q.Handle,{type:"source",position:q.Position.Left,id:"left",style:{background:"#fff",left:"-3px",zIndex:15}}),a.jsx(q.Handle,{type:"source",position:q.Position.Right,id:"right",style:{background:"#fff",right:"-3px",zIndex:15}})]}):a.jsxs(a.Fragment,{children:[a.jsx(q.Handle,{type:"source",position:q.Position.Right,style:{background:"#fff",right:"-3px",zIndex:15}}),a.jsx(q.Handle,{type:"source",position:q.Position.Top,id:"top",style:{background:"#fff",top:"-3px",zIndex:15}}),a.jsx(q.Handle,{type:"source",position:q.Position.Bottom,id:"bottom",style:{background:"#fff",bottom:"-3px",zIndex:15}})]})]}),m.type==="add"&&a.jsx(ng,{title:"添加新分支",label:"分支条件值(Case Value)",defaultValue:`case_${b.length+1}`,placeholder:"例如:approved、rejected、pending",confirmText:"添加",onConfirm:S,onCancel:N}),m.type==="rename"&&a.jsx(ng,{title:"重命名分支",label:`当前名称:${m.branch}`,defaultValue:m.branch,placeholder:"输入新的分支条件值",confirmText:"重命名",onConfirm:j,onCancel:N}),m.type==="delete"&&a.jsx(ft,{message:`确定要删除分支 "${m.branch}" 及其下的所有任务吗?此操作不可撤销。`,onConfirm:w,onCancel:N})]})},U1=I.memo(H1),ag="var(--color-accent)",og=I.memo(({id:e,data:t,selected:r})=>{const{layoutDirection:n,sourcePosition:o,targetPosition:s}=ht(t),{mode:i,execution:l,isRunning:c,durationText:u}=jt(t.taskReferenceName),{addForkBranch:d}=ie(we(b=>({addForkBranch:b.addForkBranch}))),p=q.useUpdateNodeInternals(),h=t.task?.forkTasks?.length||0;I.useEffect(()=>{p(e)},[h,e,p]);const f=t.isDynamic||t.taskType==="FORK_JOIN_DYNAMIC",m=ie(b=>b.viewMode),g=I.useMemo(()=>Ye.find(b=>b.type==="FORK_JOIN"),[])?.icon||_r;return a.jsx(Ft,{isHighlighted:t.isHighlighted,nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,executionStatus:l?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:a.jsxs("div",{className:`fork-node ${f?"dynamic":"static"}`,style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[a.jsx(Tr,{icon:g,header:It(f?"FORK_JOIN_DYNAMIC":"FORK_JOIN",m),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:Bt(t.taskType,t,m,f?"Dynamic Parallel Execution":"Parallel Execution"),duration:u,color:ag,status:l?.status,isRunning:c}),i==="edit"&&!f&&a.jsx("div",{style:{position:"absolute",...n==="LR"?{top:"50%",right:-12,transform:"translateY(-50%)"}:{bottom:-12,left:"50%",transform:"translateX(-50%)"},width:20,height:20,background:"var(--color-accent)",borderRadius:"50%",color:"#fff",fontSize:"14px",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",zIndex:1e3,boxShadow:"0 2px 5px rgba(0,0,0,0.2)",border:"2px solid var(--bg-primary)"},onClick:b=>{b.stopPropagation(),d(e)},title:"添加分支",children:"+"}),a.jsx(q.Handle,{type:"target",position:s,style:{background:"#fff"}}),!f&&(t.task?.forkTasks||[]).map((b,x,v)=>{if(i!=="edit"&&(!b||b.length===0))return null;const k=i!=="edit"?v.filter(N=>N&&N.length>0):v,S=k.length,w=(k.indexOf(b)+1)/(S+1)*100;return a.jsx(q.Handle,{id:`branch_${x}`,type:"source",position:o,style:{background:"#fff",[n==="LR"?"top":"left"]:`${w}%`,[n==="LR"?"left":"top"]:void 0,[n==="LR"?"right":"bottom"]:"-4px",zIndex:10}},`branch_${x}`)}),!f&&(!t.task?.forkTasks||t.task.forkTasks.length===0)&&a.jsx(q.Handle,{type:"source",position:o,style:{background:"#fff"}}),f&&a.jsx(q.Handle,{type:"source",position:o,style:{background:"#fff"}})]})})});og.displayName="ForkNode";const sg=I.memo(({id:e,data:t,selected:r})=>{const{layoutDirection:n,sourcePosition:o,targetPosition:s}=ht(t),{execution:i,isRunning:l,durationText:c}=jt(t.taskReferenceName),u=ie(h=>h.viewMode),p=I.useMemo(()=>Ye.find(h=>h.type==="JOIN"),[])?.icon||wr;return a.jsx(Ft,{isHighlighted:t.isHighlighted,nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,executionStatus:i?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:a.jsxs("div",{style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[a.jsx(Tr,{icon:p,header:It(t.taskType==="EXCLUSIVE_JOIN"?"EXCLUSIVE_JOIN":"JOIN",u),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:Bt(t.taskType,t,u,t.taskType==="EXCLUSIVE_JOIN"?"Wait for any task":"Wait for tasks"),duration:c,color:ag,status:i?.status,isRunning:l}),a.jsx(q.Handle,{type:"target",position:s,style:{background:"#fff"}}),n==="TB"&&a.jsxs(a.Fragment,{children:[a.jsx(q.Handle,{type:"target",position:q.Position.Left,id:"left",style:{background:"#fff"}}),a.jsx(q.Handle,{type:"target",position:q.Position.Right,id:"right",style:{background:"#fff"}})]}),n==="LR"&&a.jsxs(a.Fragment,{children:[a.jsx(q.Handle,{type:"target",position:q.Position.Top,id:"top",style:{background:"#fff"}}),a.jsx(q.Handle,{type:"target",position:q.Position.Bottom,id:"bottom",style:{background:"#fff"}})]}),a.jsx(q.Handle,{type:"source",position:o,style:{background:"#fff"}})]})})});sg.displayName="JoinNode";const ig={ForkNode:og,JoinNode:sg},J1=({id:e,data:t,selected:r})=>{const{sourcePosition:n,targetPosition:o}=ht(t),{execution:s,isRunning:i,durationText:l}=jt(t.taskReferenceName),{executionData:c,selectTaskAction:u,mode:d,viewMode:p,removeNode:h,activeLoopIterations:f,setLoopIteration:m}=ie(we(R=>({executionData:R.executionData,selectTaskAction:R.selectTaskAction,mode:R.mode,viewMode:R.viewMode,removeNode:R.removeNode,activeLoopIterations:R.activeLoopIterations,setLoopIteration:R.setLoopIteration}))),[y,g]=I.useState(!1),b=t.task,x=b?.loopOver||[],k=I.useMemo(()=>Ye.find(R=>R.type==="DO_WHILE"),[])?.icon||rg,S=I.useMemo(()=>{if(!i||!c)return 0;let R=s?.iteration??0;return x.forEach(A=>{const E=c[A.taskReferenceName];E?.totalIterations?R=Math.max(R,E.totalIterations):E?.attempts.some(P=>(P.iteration??0)>0)&&(R=Math.max(R,E.attempts.length))}),R},[i,c,x,s?.iteration]),j=f[t.taskReferenceName]||S,w=t.loopCondition||b?.loopCondition||"",N=I.useMemo(()=>{const R=w?w.length>35?w.slice(0,35)+"…":w:"循环直到条件满足";return Bt("DO_WHILE",t,p,R)},[t,p,w]),L=s?.status==="COMPLETED"?"var(--status-completed)":s?.status==="FAILED"||s?.status==="FAILED_WITH_TERMINAL_ERROR"?"var(--status-failed)":s?.status==="IN_PROGRESS"||s?.status==="SCHEDULED"?"var(--status-in-progress)":"var(--color-accent)",_=r?`2px solid ${L}`:`1.5px dashed ${i&&s?.status?L:"var(--color-accent)"}`,T=d==="edit",D=p==="developer"&&w;return a.jsxs("div",{style:{width:"100%",height:"100%",border:_,borderRadius:"10px",background:"transparent",display:"flex",flexDirection:"column",position:"relative",overflow:"visible",boxSizing:"border-box",pointerEvents:"none"},children:[T&&a.jsx("button",{onClick:R=>{R.stopPropagation(),g(!0)},"aria-label":"删除循环任务",style:{position:"absolute",top:"-10px",right:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#ef4444",color:"white",border:"2px solid white",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:100,boxShadow:"0 2px 8px rgba(0,0,0,0.2)",padding:0,pointerEvents:"auto"},title:"删除循环任务",children:"×"}),t.isError&&a.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#ef4444",color:"white",border:"2px solid white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"0 2px 8px rgba(0,0,0,0.2)",pointerEvents:"auto"},title:"此节点配置有误",children:"❗"}),!t.isError&&t.hasWarning&&a.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"#f59e0b",color:"white",border:"2px solid white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"0 2px 8px rgba(0,0,0,0.2)",pointerEvents:"auto"},title:"此节点有警告信息",children:"⚠️"}),t.proposalStatus&&a.jsx("div",{className:`node-proposal-badge node-proposal-badge-${t.proposalStatus}`,style:{pointerEvents:"auto"},children:t.proposalStatus==="added"?"+":t.proposalStatus==="modified"?"~":"−"}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",background:"var(--glass-surface)",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",borderBottom:"1px solid var(--border-primary)",borderRadius:"8px 8px 0 0",flexShrink:0,minHeight:"44px",pointerEvents:"auto"},children:[a.jsx("div",{style:{color:"var(--color-accent)",display:"flex",alignItems:"center",flexShrink:0},children:a.jsx(k,{size:15})}),a.jsxs("div",{style:{flex:1,minWidth:0},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[a.jsx("span",{style:{fontSize:"9px",fontWeight:700,color:"var(--color-accent)",letterSpacing:"0.08em",textTransform:"uppercase"},children:It("DO_WHILE",p)}),a.jsxs("span",{style:{fontSize:"9px",color:"var(--text-muted)"},children:["↻ ",x.length," 个子任务"]})]}),a.jsx("div",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.taskReferenceName}),(p==="business"||p==="developer")&&N&&a.jsx("div",{style:{fontSize:"9px",color:"var(--text-secondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:"1px",fontStyle:"italic"},children:N})]}),i&&l&&a.jsx("span",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-secondary)",padding:"1px 6px",borderRadius:"4px",flexShrink:0},children:l}),i&&S>0&&a.jsxs("div",{onClick:()=>u(b||null),style:{padding:"2px 8px",borderRadius:"12px",background:"var(--color-accent)",color:"#fff",fontSize:"10px",fontWeight:700,cursor:"pointer",flexShrink:0},title:`共执行 ${S} 次迭代`,children:["×",S]}),i&&s?.status&&a.jsx("div",{style:{position:"relative",width:20,height:20,flexShrink:0},children:a.jsx(Dl,{status:s.status})})]}),i&&S>1&&a.jsxs("div",{onClick:R=>R.stopPropagation(),style:{display:"flex",alignItems:"center",gap:"4px",padding:"4px 10px",background:"rgba(15, 23, 42, 0.72)",borderBottom:"1px solid var(--border-primary)",flexShrink:0,pointerEvents:"auto",overflowX:"auto"},children:[a.jsx("span",{style:{fontSize:"9px",color:"#94a3b8",fontWeight:600,marginRight:"2px"},children:"切换轮次:"}),Array.from({length:S},(R,A)=>A+1).map(R=>{const A=j===R;return a.jsxs("button",{type:"button",onClick:E=>{E.stopPropagation(),m(t.taskReferenceName,R)},style:{fontSize:"9px",padding:"1px 7px",borderRadius:"999px",border:A?"1px solid #38bdf8":"1px solid rgba(148, 163, 184, 0.25)",background:A?"rgba(56, 189, 248, 0.22)":"rgba(30, 41, 59, 0.6)",color:A?"#38bdf8":"#cbd5e1",fontWeight:A?700:500,cursor:"pointer"},children:["#",R]},R)})]}),D&&a.jsxs("div",{style:{padding:"3px 12px",fontSize:"9px",color:"var(--text-secondary)",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flexShrink:0,pointerEvents:"auto"},children:["until: ",w]}),a.jsx("div",{style:{flex:1,position:"relative",background:"var(--loop-body-bg, rgba(99,102,241,0.04))",borderRadius:"0 0 8px 8px",pointerEvents:"none"}}),a.jsx(q.Handle,{type:"target",position:o,style:{background:"var(--color-accent)",zIndex:10}}),a.jsx(q.Handle,{type:"source",position:n,style:{background:"var(--color-accent)",zIndex:10}}),y&&a.jsx(ft,{message:"确定要删除此循环任务吗?循环体内的任务也会一并删除。",onConfirm:()=>{h(e),g(!1)},onCancel:()=>g(!1)})]})},K1=I.memo(J1),V1="var(--color-accent)",G1=({id:e,data:t,selected:r})=>{const{sourcePosition:n,targetPosition:o}=ht(t),{execution:s,isRunning:i,durationText:l}=jt(t.taskReferenceName),c=ie(f=>f.viewMode),d=I.useMemo(()=>Ye.find(f=>f.type==="SUB_WORKFLOW"),[])?.icon||wr,p=t.task?.subWorkflowParam?.name||t.subWorkflowName||"Unknown",h=t.task?.subWorkflowParam?.version;return a.jsx(Ft,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isHighlighted:t.isHighlighted,executionStatus:s?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:a.jsxs("div",{style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[a.jsx(Tr,{icon:d,header:It("SUB_WORKFLOW",c),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:Bt("SUB_WORKFLOW",t,c,`Flow: ${p}${h!==void 0?` (v${h})`:""}`),duration:l,color:V1,status:s?.status,isRunning:i}),a.jsx(q.Handle,{type:"target",position:o,style:{background:"#fff"}}),a.jsx(q.Handle,{type:"source",position:n,style:{background:"#fff"}})]})})},Y1=I.memo(G1),X1=({data:e})=>{const r=(e.layoutDirection||"TB")==="LR";return a.jsxs("div",{className:"plus-node-container",style:{width:"32px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",background:"var(--bg-secondary, #1e293b)",border:"2px dashed var(--color-accent, #3b82f6)",color:"var(--color-accent, #3b82f6)",cursor:"pointer",transition:"all 0.2s ease",padding:e.label&&e.label!=="+"?"0 12px":"0",minWidth:e.label&&e.label!=="+"?"80px":"32px",gap:"4px"},children:[a.jsx(O1,{size:16}),e.label&&e.label!=="+"&&a.jsx("span",{style:{fontSize:"12px",fontWeight:500},children:e.label}),a.jsx(q.Handle,{type:"target",position:r?q.Position.Left:q.Position.Top,style:{opacity:0}}),a.jsx("style",{dangerouslySetInnerHTML:{__html:`
12
+ execute($.input);`};break;case"DYNAMIC":n.dynamicTaskNameParam="taskToExecute",n.inputParameters={taskToExecute:"${workflow.input.taskName}"};break;case"HUMAN":n.humanTaskDef={userFormTemplate:"",assignmentCompletionStrategy:"LEAVE_OPEN"};break;case"START_WORKFLOW":n.inputParameters={startWorkflow:{name:"",version:1,input:{},correlationId:""}};break;case"FORK_JOIN":n.forkTasks=[[],[]];break;case"FORK_JOIN_DYNAMIC":n.dynamicForkTasksParam="dynamicTasks",n.dynamicForkTasksInputParamName="dynamicTasksInput",n.inputParameters={dynamicTasks:"${workflow.input.dynamicTasks}",dynamicTasksInput:"${workflow.input.dynamicTasksInput}"};break}return n}function ru(e,t){let r=`${e.taskReferenceName}_join`;if(t){let s=2;for(;t.has(r);)r=`${e.taskReferenceName}_join_${s++}`}const n=e.type==="FORK_JOIN"?(e.forkTasks||[]).filter(s=>Array.isArray(s)&&s.length>0).map(s=>s[s.length-1].taskReferenceName):[];return{name:`${e.name}_join`,taskReferenceName:r,type:"JOIN",joinOn:n}}function gs(e,t,r){const n=(t??"").trim();return n?n===r?null:X_.test(n)?Z_.has(n)?`"${n}" 是表达式保留字,不能作为引用名:请换一个名称`:n.startsWith("__")?"引用名不能以两个下划线开头(编辑器内部保留):请换一个名称":it(e?.tasks).has(n)?`引用名 "${n}" 已被其他任务使用:请换一个名称`:null:`引用名 "${n}" 含有不支持的字符:只能使用字母、数字和下划线`:"引用名不能为空:请输入由字母、数字或下划线组成的名称"}function xs(e,t,r){const n=(t??"").trim();return n?r!==void 0&&n===r?null:n==="default"?'"default" 是默认分支的保留名:请换一个分支名':e?.decisionCases&&Object.prototype.hasOwnProperty.call(e.decisionCases,n)?`分支 "${n}" 已存在:请换一个分支名`:null:"分支名不能为空:请输入分支条件值"}const nu=e=>{const t=[];return e.decisionCases&&Object.values(e.decisionCases).forEach(r=>t.push(...r||[])),e.defaultCase&&t.push(...e.defaultCase),e.forkTasks&&e.forkTasks.forEach(r=>t.push(...r||[])),e.loopOver&&t.push(...e.loopOver),it(t).size};function su(e,t){const r=e?.tasks,n=et(r,t);if(!n)return{message:`删除任务 "${t}"?可以用 ⌘Z 撤销。`,removedRefs:[t]};const s=Dt(r,t)||[],a="可以用 ⌘Z 撤销。";if(n.type==="FORK_JOIN"||n.type==="FORK_JOIN_DYNAMIC"){const l=fs(s,t),c=nu(n),d=[t,...l?[l]:[],...it((n.forkTasks||[]).flat())],u=[`删除并行任务 "${t}"`];return l&&u.push(`会同时删除配对的汇合任务 "${l}"`),c>0&&u.push(`${l?"和":"会同时删除"}分支中的 ${c} 个任务`),{message:`${u.join("")}。${a}`,removedRefs:d}}if(n.type==="JOIN"||n.type==="EXCLUSIVE_JOIN"){const l=Zd(s,t),c=l?et(r,l):null;if(c){const d=nu(c),u=[t,c.taskReferenceName,...it((c.forkTasks||[]).flat())],p=d>0?`和分支中的 ${d} 个任务`:"";return{message:`删除汇合任务 "${t}" 会同时删除配对的并行任务 "${c.taskReferenceName}"${p}。${a}`,removedRefs:u}}}const i=nu(n);if(i>0){const l=n.type==="DO_WHILE"?"循环体":"分支";return{message:`删除${n.type==="DO_WHILE"?"循环":n.type==="SWITCH"||n.type==="DECISION"?"条件分支":"任务"} "${t}" 会同时删除${l}中的 ${i} 个任务。${a}`,removedRefs:Array.from(it([n]))}}return{message:`删除任务 "${t}"?${a}`,removedRefs:[t]}}function Q_(e,t,r){const n=new Set(t),s=Array.from(it([e])),a=[];s.forEach(d=>{let u=`${d}${r}`,p=2;for(;n.has(u)||s.includes(u);)u=`${d}${r}_${p++}`;n.add(u),a.push([d,u])});let i={name:"__paste__",tasks:[JSON.parse(JSON.stringify(e))]};a.sort((d,u)=>u[0].length-d[0].length).forEach(([d,u])=>{i=ys(i,d,u).updatedDef});const l=i.tasks[0];let c=null;return(l.type==="FORK_JOIN"||l.type==="FORK_JOIN_DYNAMIC")&&(l.type==="FORK_JOIN"&&!l.forkTasks&&(l.forkTasks=[[],[]]),c=ru(l,n)),{task:l,join:c}}const vv=["timeoutSeconds","retryLogic","retryDelaySeconds","timeoutPolicy"];function vs(e,t){const r=e.taskDefinition;return r&&r[t]!==void 0?r[t]:e[t]}function ej(e,t,r,n){const s={...e.taskDefinition||{}};s.name||(s.name=e.name),!s.ownerEmail&&n&&(s.ownerEmail=n),vv.forEach(l=>{s[l]===void 0&&e[l]!==void 0&&(s[l]=e[l])}),r===void 0||r===""?delete s[t]:s[t]=r;const a=s.timeoutSeconds;typeof a=="number"&&a>0&&(typeof s.responseTimeoutSeconds!="number"||s.responseTimeoutSeconds>a)&&(s.responseTimeoutSeconds=a);const i={taskDefinition:s};return vv.forEach(l=>{e[l]!==void 0&&(i[l]=void 0)}),i}function bv(e,t={}){const r=e.trim();if(!r)return t.allowEmpty?{ok:!0,value:{}}:{ok:!1,error:"内容为空:请填写 JSON,例如 {}"};try{const n=JSON.parse(r);return t.requireObject&&(n===null||typeof n!="object"||Array.isArray(n))?{ok:!1,error:'这里需要一个 JSON 对象:请用 { } 包起来,例如 {"key": "value"}'}:{ok:!0,value:n}}catch(n){return{ok:!1,error:`JSON 格式有误(${n?.message||"无法解析"}):修正后点击输入框外即可保存,未保存前画布保持原值`}}}const Qt=e=>typeof e=="string"&&e.trim()!=="",tj=[{field:"name",type:"required",message:"工作流名称 (name) 必填"},{field:"tasks",type:"min_length",value:1,message:"工作流必须包含至少一个任务"}],kv={common:[{field:"name",type:"required",message:"任务类型名称 (name) 必填"},{field:"taskReferenceName",type:"required",message:"引用名 (taskReferenceName) 必填"},{field:"taskReferenceName",type:"pattern",value:/^[a-zA-Z0-9_]+$/,message:"引用名仅允许字母、数字和下划线"},{field:"taskReferenceName",type:"unique",message:"引用名在工作流中必须唯一"}],types:{HTTP:[{field:"inputParameters.http_request.uri",type:"required",message:"HTTP 任务缺少请求地址 (uri) 配置"},{field:"inputParameters.http_request.method",type:"required",level:"warning",message:"HTTP 任务未指定 Method,建议配置"}],INLINE:[{field:"inputParameters.expression",type:"custom",validate:(e,t)=>!!(t?.inputParameters?.expression||t?.inputParameters?.scriptExpression),message:"INLINE 任务缺少脚本表达式 (expression)"},{field:"inputParameters.evaluatorType",type:"required",level:"warning",message:"INLINE 任务未在 inputParameters 中指定 evaluatorType:Conductor 需要它来选择脚本引擎,建议填 graaljs"}],LAMBDA:[{field:"inputParameters.scriptExpression",type:"required",message:"LAMBDA 任务缺少脚本表达式 (scriptExpression)"}],JSON_JQ_TRANSFORM:[{field:"inputParameters.queryExpression",type:"required",message:"JQ 任务缺少查询表达式 (queryExpression)"}],SUB_WORKFLOW:[{field:"subWorkflowParam.name",type:"required",message:"子工作流任务缺少子流程名称 (name)"}],START_WORKFLOW:[{field:"inputParameters.startWorkflow.name",type:"custom",validate:(e,t)=>!!t?.inputParameters?.startWorkflow?.name,message:"START_WORKFLOW 任务缺少目标工作流名称"}],DYNAMIC:[{field:"dynamicTaskNameParam",type:"required",message:"DYNAMIC 任务缺少 dynamicTaskNameParam 配置"}],TERMINATE:[{field:"inputParameters.terminationStatus",type:"required",level:"warning",message:"终止任务未指定状态 (terminationStatus)"},{field:"inputParameters.terminationStatus",type:"enum",value:["COMPLETED","FAILED","TERMINATED"],message:"终止状态必须为 COMPLETED、FAILED 或 TERMINATED"}],DO_WHILE:[{field:"loopCondition",type:"custom",validate:(e,t)=>!!(t?.loopCondition||t?.inputParameters?.items),message:"循环任务需要配置退出条件 (loopCondition) 或列表 (items)"}],DECISION:[{field:"decisionCases",type:"custom",validate:e=>Object.keys(e||{}).length>0,message:"决策任务必须至少包含一个分支 (decisionCases)"},{field:"decisionCases",type:"custom",validate:e=>{const t=Object.keys(e||{});return new Set(t).size===t.length},message:"决策分支条件不能重复"}],SWITCH:[{field:"decisionCases",type:"custom",validate:e=>Object.keys(e||{}).length>0,message:"Switch 任务必须至少包含一个分支"},{field:"expression",type:"custom",validate:(e,t)=>Qt(e)||Qt(t?.caseValueParam)||Qt(t?.caseExpression),message:"SWITCH 任务缺少条件表达式 (expression):value-param 模式填 inputParameters 中的参数名,脚本模式填返回分支名的脚本"},{field:"evaluatorType",type:"custom",validate:(e,t)=>Qt(e)||!Qt(t?.expression),message:"SWITCH 任务缺少评估模式 (evaluatorType):请选择 value-param、javascript 或 graaljs"},{field:"expression",type:"custom",level:"warning",validate:(e,t)=>Qt(e)||!(Qt(t?.caseValueParam)||Qt(t?.caseExpression)),message:"SWITCH 任务只配置了 caseValueParam / caseExpression(DECISION 字段),Conductor 会忽略:请在面板中设置评估模式和 expression"}],FORK_JOIN_DYNAMIC:[{field:"dynamicForkTasksParam",type:"custom",validate:(e,t)=>!!(t?.dynamicForkTasksParam||t?.inputParameters?.forkTaskType||t?.inputParameters?.forkTaskName||t?.inputParameters?.forkTaskWorkflow||t?.forkTaskType||t?.forkTaskWorkflow),message:"FORK_JOIN_DYNAMIC 任务需要配置 dynamicForkTasksParam 或 forkTaskType 或 forkTaskWorkflow",level:"warning"}]}};class rj{rules=[];setRules(t){this.rules=[...t]}getRules(){return this.rules}hasRules(){return this.rules.length>0}runAll(t){const r=[],n=[];for(const s of this.rules)try{const a=s.validate(t);for(const i of a)s.level==="warning"?n.push(i):r.push(i)}catch{r.push({type:"GLOBAL",ref:"",message:`自定义规则 "${s.id}" 执行异常`})}return{errors:r,warnings:n}}buildPromptSection(){return this.rules.length===0?null:`## 业务校验规则(必须遵守)
13
+ 以下规则由集成方定义,生成工作流时必须满足:
14
+ ${this.rules.map(r=>`- ${r.description}`).join(`
15
+ `)}`}}const au=new rj,nj=(e,t)=>t.split(".").reduce((r,n)=>r&&r[n]!==void 0?r[n]:void 0,e),ou=(e,t,r,n)=>{const{errors:s,warnings:a}=n,i=e.taskReferenceName||"GLOBAL";t.forEach(l=>{const c=nj(e,l.field);let d=!0;switch(l.type){case"required":d=c!=null&&c!=="";break;case"min_length":d=Array.isArray(c)&&c.length>=l.value;break;case"pattern":d=l.value.test(c);break;case"enum":d=l.value.includes(c);break;case"unique":l.field==="taskReferenceName"&&c&&(r.taskRefs.has(c)?d=!1:r.taskRefs.add(c));break;case"custom":typeof l.validate=="function"&&(d=l.validate(c,e,r));break}if(!d){const u={type:e.taskReferenceName?"TASK":"GLOBAL",ref:i,message:l.message};l.level==="warning"?a.push(u):s.push(u)}})},Et=e=>{const t=[],r=[],n={taskRefs:new Set,taskMap:{}};if(!e)return{isValid:!1,errors:[{type:"GLOBAL",ref:"",message:"工作流定义为空"}],warnings:[]};if(ou(e,tj,n,{errors:t,warnings:r}),!e.tasks||e.tasks.length===0)return{isValid:!1,errors:t,warnings:r};const s=new Set,a=d=>{(d||[]).forEach(u=>{u&&(u.taskReferenceName&&s.add(u.taskReferenceName),u.decisionCases&&Object.values(u.decisionCases).forEach(a),a(u.defaultCase),(u.forkTasks||[]).forEach(a),a(u.loopOver))})};a(e.tasks);const i=d=>{d.forEach((u,p)=>{if(!u)return;if(u.type==="FORK_JOIN"||u.type==="FORK_JOIN_DYNAMIC"){const m=d[p+1];(!m||m.type!=="JOIN")&&t.push({type:"TASK",ref:u.taskReferenceName,message:`并行任务 "${u.taskReferenceName}" 后面必须紧跟一个 JOIN 任务:请在它之后添加 JOIN,或删除中间插入的任务`})}Array.isArray(u.joinOn)&&u.joinOn.forEach(m=>{s.has(m)||t.push({type:"TASK",ref:u.taskReferenceName,message:`JOIN 任务 "${u.taskReferenceName}" 的 joinOn 引用了不存在的任务 "${m}":请删除该项或改成分支中实际的任务引用名`})}),ou(u,kv.common,n,{errors:t,warnings:r});const f=kv.types[u.type];f&&ou(u,f,n,{errors:t,warnings:r}),u.decisionCases&&Object.keys(u.decisionCases).forEach(m=>{i(u.decisionCases[m])}),u.defaultCase&&i(u.defaultCase),u.forkTasks&&u.forkTasks.forEach(m=>i(m)),u.loopOver&&i(u.loopOver)})};i(e.tasks);const l=new Set;tu(e).diagnostics.forEach(d=>{if(d.issue!=="undefined_ref")return;const u=`${d.taskRef}|${d.expression}`;l.has(u)||(l.add(u),t.push({type:"TASK",ref:d.taskRef,message:`任务 "${d.taskRef}" 的表达式 ${d.expression} 引用了不存在的任务:请改成已有任务的引用名,或先添加该任务`}))});const c=sj(e.tasks);if(t.push(...c),au.hasRules()){const d=au.runAll(e);t.push(...d.errors),r.push(...d.warnings)}return{isValid:t.length===0,errors:t,warnings:r}},sj=e=>{const t=[],r=new Map,n=new Set,s=u=>{for(let p=0;p<u.length;p++){const f=u[p],m=f.taskReferenceName;if(n.add(m),r.has(m)||r.set(m,[]),p<u.length-1){const h=u[p+1].taskReferenceName;f.type!=="FORK_JOIN"&&f.type!=="FORK_JOIN_DYNAMIC"&&r.get(m).push(h)}if(f.decisionCases)for(const h of Object.values(f.decisionCases))h.length>0&&(r.get(m).push(h[0].taskReferenceName),s(h));if(f.defaultCase&&f.defaultCase.length>0&&(r.get(m).push(f.defaultCase[0].taskReferenceName),s(f.defaultCase)),f.forkTasks)for(const h of f.forkTasks)h.length>0&&(r.get(m).push(h[0].taskReferenceName),s(h));if(f.loopOver)for(const h of f.loopOver)n.add(h.taskReferenceName);if(f.joinOn)for(const h of f.joinOn)r.has(h)||r.set(h,[]),r.get(h).push(m)}};s(e);const a=0,i=1,l=2,c=new Map;for(const u of n)c.set(u,a);const d=u=>{c.set(u,i);const p=r.get(u)||[];for(const f of p)if(c.has(f)){if(c.get(f)===i)return t.push({type:"GLOBAL",ref:f,message:`检测到环路:任务 "${u}" → "${f}" 形成了循环依赖`}),!0;if(c.get(f)===a&&d(f))return!0}return c.set(u,l),!1};for(const u of n)c.get(u)===a&&d(u);return t};function aj(e,t){const r=new Set(e),n={};e.forEach(l=>n[l]=0),t.forEach(l=>{r.has(l.source)&&r.has(l.target)&&(n[l.target]=(n[l.target]??0)+1)});const s=[];let a=e.filter(l=>n[l]===0);const i={...n};for(;a.length>0;){s.push([...a]);const l=[];a.forEach(c=>{t.forEach(d=>{d.source===c&&r.has(d.target)&&(i[d.target]--,i[d.target]===0&&l.push(d.target))})}),a=l}return s}class xe extends Error{constructor(t){super(t),this.name="JqError"}}const oj=new Set(["if","then","elif","else","end","as","and","or","reduce","foreach","try","catch","def","label","import","include"]);function ij(e){const t=[];let r=0;const n=a=>/[A-Za-z_]/.test(a),s=a=>/[A-Za-z0-9_]/.test(a);for(;r<e.length;){const a=e[r];if(/\s/.test(a)){r++;continue}if(a==="#"){for(;r<e.length&&e[r]!==`
16
+ `;)r++;continue}if(/[0-9]/.test(a)||a==="."&&/[0-9]/.test(e[r+1]??"")){const l=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(e.slice(r));t.push({t:"num",v:Number(l[0])}),r+=l[0].length;continue}if(a==='"'){const[l,c]=lj(e,r+1);t.push({t:"str",parts:l}),r=c;continue}if(a==="$"){let l=r+1;if(e.startsWith("__loc__",l))throw new xe("不支持 $__loc__");for(;l<e.length&&s(e[l]);)l++;if(l===r+1)throw new xe(`第 ${r+1} 个字符:$ 后缺少变量名`);t.push({t:"var",v:e.slice(r+1,l)}),r=l;continue}if(a==="."&&n(e[r+1]??"")){let l=r+1;for(;l<e.length&&s(e[l]);)l++;t.push({t:"field",v:e.slice(r+1,l)}),r=l;continue}if(n(a)){let l=r;for(;l<e.length&&(s(e[l])||e[l]===":"&&e[l+1]===":");)l+=e[l]===":"?2:1;t.push({t:"id",v:e.slice(r,l)}),r=l;continue}const i=e.slice(r,r+2);if(["==","!=","<=",">=","//","..","?/","|=","+=","-=","*=","/=","%="].includes(i)){if(i==="?/")throw new xe("不支持 ?// 运算符");if(i.endsWith("=")&&i!=="=="&&i!=="!="&&i!=="<="&&i!==">=")throw new xe(`不支持赋值运算符 ${i}`);t.push({t:"op",v:i}),r+=2;continue}if(".|,()[]{}:;+-*/%<>?=".includes(a)){if(a==="=")throw new xe("不支持赋值运算符 =,比较请用 ==");t.push({t:"op",v:a}),r++;continue}throw a==="@"?new xe("不支持 @base64 / @csv 等格式化字符串"):new xe(`第 ${r+1} 个字符 "${a}" 无法识别`)}return t.push({t:"eof"}),t}function lj(e,t){const r=[];let n="",s=t;for(;s<e.length;){const a=e[s];if(a==='"')return(n||r.length===0)&&r.push(n),[r,s+1];if(a==="\\"){const i=e[s+1];if(i==="("){let c=1,d=s+2,u=!1;for(;d<e.length&&c>0;){const p=e[d];u?p==="\\"?d++:p==='"'&&(u=!1):p==='"'?u=!0:p==="("?c++:p===")"&&c--,d++}if(c!==0)throw new xe("字符串插值 \\( 缺少右括号");n&&r.push(n),n="",r.push(wv(e.slice(s+2,d-1))),s=d;continue}const l={n:`
17
+ `,t:" ",r:"\r",b:"\b",f:"\f",'"':'"',"\\":"\\","/":"/"};if(i==="u"){n+=String.fromCharCode(parseInt(e.slice(s+2,s+6),16)),s+=6;continue}if(!(i in l))throw new xe(`字符串里的转义 \\${i} 无效`);n+=l[i],s+=2;continue}n+=a,s++}throw new xe("字符串缺少结尾的引号")}function wv(e){const t=ij(e);let r=0;const n=()=>t[r],s=w=>n().t==="op"&&n().v===w,a=w=>n().t==="id"&&n().v===w,i=w=>{if(!s(w))throw new xe(`语法错误:这里应该是 "${w}"`);r++},l=w=>{if(!a(w))throw new xe(`语法错误:这里应该是 "${w}"`);r++};function c(){let w=u();if(a("as")){r++;const I=n();if(I.t!=="var")throw new xe("as 后面应是 $变量");return r++,i("|"),{k:"as",source:w,name:I.v,body:c()}}for(;s("|");)r++,w={k:"pipe",left:w,right:d()};return w}function d(){const w=u();if(a("as")){r++;const I=n();if(I.t!=="var")throw new xe("as 后面应是 $变量");return r++,i("|"),{k:"as",source:w,name:I.v,body:c()}}return w}function u(){let w=p();for(;s(",");)r++,w={k:"comma",left:w,right:p()};return w}function p(){let w=f();for(;s("//");)r++,w={k:"bin",op:"//",left:w,right:f()};return w}function f(){let w=m();for(;a("or");)r++,w={k:"bin",op:"or",left:w,right:m()};return w}function m(){let w=h();for(;a("and");)r++,w={k:"bin",op:"and",left:w,right:h()};return w}function h(){const w=y();for(const I of["==","!=","<=",">=","<",">"])if(s(I))return r++,{k:"bin",op:I,left:w,right:y()};return w}function y(){let w=x();for(;s("+")||s("-");)w={k:"bin",op:t[r++].v,left:w,right:x()};return w}function x(){let w=g();for(;s("*")||s("/")||s("%");)w={k:"bin",op:t[r++].v,left:w,right:g()};return w}function g(){return s("-")?(r++,{k:"neg",body:g()}):v(k())}function v(w){for(;;){const I=n();if(I.t==="field")r++,w={k:"index",target:w,key:{k:"lit",v:I.v}};else if(s(".")&&t[r+1].t==="str"){r++;const C=t[r++];w={k:"index",target:w,key:{k:"str",parts:C.parts}}}else if(s(".")&&t[r+1].t==="op"&&t[r+1].v==="[")r++;else if(s("["))if(r++,s("]"))r++,w={k:"iterate",target:w};else if(s(":")){r++;const C=c();i("]"),w={k:"slice",target:w,from:null,to:C}}else{const C=c();if(s(":")){r++;const N=s("]")?null:c();i("]"),w={k:"slice",target:w,from:C,to:N}}else i("]"),w={k:"index",target:w,key:C}}else if(s("?"))r++,w={k:"optional",body:w};else return w}}function k(){const w=n();if(w.t==="num")return r++,{k:"lit",v:w.v};if(w.t==="str")return r++,{k:"str",parts:w.parts};if(w.t==="var")return r++,{k:"var",name:w.v};if(w.t==="field")return r++,{k:"index",target:{k:"identity"},key:{k:"lit",v:w.v}};if(w.t==="op"){if(w.v==="."){if(r++,n().t==="str"){const I=t[r++];return{k:"index",target:{k:"identity"},key:{k:"str",parts:I.parts}}}return{k:"identity"}}if(w.v==="..")return r++,{k:"recurse"};if(w.v==="("){r++;const I=c();return i(")"),I}if(w.v==="["){if(r++,s("]"))return r++,{k:"array",body:null};const I=c();return i("]"),{k:"array",body:I}}if(w.v==="{")return r++,b()}if(w.t==="id"){if(w.v==="true"||w.v==="false"||w.v==="null")return r++,{k:"lit",v:w.v==="null"?null:w.v==="true"};if(w.v==="if")return S();if(w.v==="reduce")return j();if(oj.has(w.v))throw new xe(`不支持 ${w.v} 语法`);r++;const I=[];if(s("(")){for(r++,I.push(c());s(";");)r++,I.push(c());i(")")}return{k:"call",name:w.v,args:I}}throw w.t==="eof"?new xe("表达式不完整"):new xe(`语法错误:意外的 "${w.v??w.t}"`)}function b(){const w=[];for(;!s("}");){const I=n();let C,N=null;if(I.t==="id"||I.t==="field"){r++;const E=(I.t==="field",I.v);C={k:"lit",v:E},N={k:"index",target:{k:"identity"},key:{k:"lit",v:E}}}else if(I.t==="var")r++,C={k:"lit",v:I.v},N={k:"var",name:I.v};else if(I.t==="str")r++,C={k:"str",parts:I.parts},N={k:"index",target:{k:"identity"},key:C};else{if(I.t==="num")throw new xe("对象的键不能是数字");if(s("("))r++,C=c(),i(")");else throw new xe("对象构造语法错误")}let O=N;if(s(":"))r++,O=p();else if(!N)throw new xe('对象的计算键后面需要 ": 值"');if(w.push({key:C,value:O}),s(","))r++;else break}return i("}"),{k:"object",entries:w}}function S(){l("if");const w=c();l("then");const I=c(),C=[];for(;a("elif");){r++;const O=c();l("then"),C.push({cond:O,then:c()})}let N=null;return a("else")&&(r++,N=c()),l("end"),{k:"if",cond:w,then:I,elifs:C,else:N}}function j(){l("reduce");const w=v(k());l("as");const I=n();if(I.t!=="var")throw new xe("reduce ... as 后面应是 $变量");r++,i("(");const C=c();i(";");const N=c();return i(")"),{k:"reduce",source:w,name:I.v,init:C,update:N}}const _=c();if(n().t!=="eof")throw new xe("表达式在末尾有多余内容");return _}const He=e=>e===null?"null":Array.isArray(e)?"array":typeof e=="object"?"object":typeof e=="number"?"number":typeof e=="string"?"string":"boolean",vt=e=>e!==null&&e!==!1&&e!==void 0,Sv={null:0,boolean:1,number:2,string:3,array:4,object:5};function Mt(e,t){const r=He(e),n=He(t);if(r!==n)return r==="boolean"&&n==="boolean"?0:Sv[r]-Sv[n];switch(r){case"null":return 0;case"boolean":return(e?1:0)-(t?1:0);case"number":return e-t;case"string":return e<t?-1:e>t?1:0;case"array":{const s=e,a=t;for(let i=0;i<Math.min(s.length,a.length);i++){const l=Mt(s[i],a[i]);if(l)return l}return s.length-a.length}default:{const s=e,a=t,i=Object.keys(s).sort(),l=Object.keys(a).sort(),c=Mt(i,l);if(c)return c;for(const d of i){const u=Mt(s[d],a[d]);if(u)return u}return 0}}}const er=(e,t)=>Mt(e,t)===0,_v=e=>e===void 0?e:JSON.parse(JSON.stringify(e));function jv(e,t){const r={...e};for(const[n,s]of Object.entries(t)){const a=r[n];r[n]=a&&s&&He(a)==="object"&&He(s)==="object"?jv(a,s):s}return r}function Tv(e,t,r){const n=He(t),s=He(r);switch(e){case"+":if(t===null)return r;if(r===null)return t;if(n==="number"&&s==="number"||n==="string"&&s==="string")return t+r;if(n==="array"&&s==="array")return[...t,...r];if(n==="object"&&s==="object")return{...t,...r};break;case"-":if(n==="number"&&s==="number")return t-r;if(n==="array"&&s==="array")return t.filter(a=>!r.some(i=>er(a,i)));break;case"*":if(n==="number"&&s==="number")return t*r;if(n==="object"&&s==="object")return jv(t,r);if(n==="string"&&s==="number")return r>0?t.repeat(Math.floor(r)):null;break;case"/":if(n==="number"&&s==="number"){if(r===0)throw new xe("除数为 0");return t/r}if(n==="string"&&s==="string")return t.split(r);break;case"%":if(n==="number"&&s==="number"){if(Math.trunc(r)===0)throw new xe("取模的除数为 0");return Math.trunc(t)%Math.trunc(r)}break}throw new xe(`${n} 和 ${s} 不能做 ${e} 运算`)}function bs(e,t){if(e===null)return null;if(typeof t=="string"){if(He(e)!=="object")throw new xe(`不能用字符串 "${t}" 索引 ${He(e)}`);const r=e[t];return r===void 0?null:r}if(typeof t=="number"){if(!Array.isArray(e))throw new xe(`不能用数字索引 ${He(e)}`);const r=Math.floor(t)<0?e.length+Math.floor(t):Math.floor(t);return e[r]===void 0?null:e[r]}throw new xe(`不能用 ${He(t)} 作为索引`)}function yr(e){if(Array.isArray(e))return e;if(e&&typeof e=="object")return Object.values(e);throw new xe(`不能遍历 ${He(e)}(.[] 只能用于数组或对象)`)}function cj(e){switch(He(e)){case"null":return 0;case"boolean":throw new xe("boolean 没有长度");case"number":return Math.abs(e);case"string":return[...e].length;case"array":return e.length;default:return Object.keys(e).length}}const sn=e=>typeof e=="string"?e:JSON.stringify(e);function ks(e,t){const r=He(e);if(r!==He(t))throw new xe(`${r} 与 ${He(t)} 不能做 contains`);return r==="string"?e.includes(t):r==="array"?t.every(n=>e.some(s=>ks(s,n)||er(s,n))):r==="object"?Object.entries(t).every(([n,s])=>n in e&&ks(e[n],s)):er(e,t)}function pe(e,t,r){switch(e.k){case"identity":return[t];case"recurse":{const n=[],s=a=>{if(n.push(a),a&&typeof a=="object")for(const i of yr(a))s(i)};return s(t),n}case"lit":return[e.v];case"str":{let n=[""];for(const s of e.parts)if(typeof s=="string")n=n.map(a=>a+s);else{const a=pe(s,t,r);n=n.flatMap(i=>a.map(l=>i+sn(l)))}return n}case"var":if(!(e.name in r))throw new xe(`变量 $${e.name} 未定义`);return[r[e.name]];case"index":return pe(e.target,t,r).flatMap(n=>pe(e.key,t,r).map(s=>bs(n,s)));case"slice":return pe(e.target,t,r).map(n=>{if(n===null)return null;const s=e.from?pe(e.from,t,r)[0]:0,a=e.to?pe(e.to,t,r)[0]:void 0;if(typeof n=="string"||Array.isArray(n))return n.slice(s??0,a??void 0);throw new xe(`不能切片 ${He(n)}`)});case"iterate":return pe(e.target,t,r).flatMap(yr);case"optional":try{return pe(e.body,t,r)}catch(n){if(n instanceof xe&&!String(n.message).startsWith("不支持"))return[];throw n}case"pipe":return pe(e.left,t,r).flatMap(n=>pe(e.right,n,r));case"comma":return[...pe(e.left,t,r),...pe(e.right,t,r)];case"neg":return pe(e.body,t,r).map(n=>{if(typeof n!="number")throw new xe(`不能对 ${He(n)} 取负`);return-n});case"bin":{if(e.op==="and"||e.op==="or")return pe(e.left,t,r).flatMap(i=>e.op==="and"&&!vt(i)?[!1]:e.op==="or"&&vt(i)?[!0]:pe(e.right,t,r).map(l=>vt(l)));if(e.op==="//"){let i=[];try{i=pe(e.left,t,r).filter(vt)}catch(l){if(!(l instanceof xe))throw l}return i.length?i:pe(e.right,t,r)}const n=pe(e.right,t,r),s=pe(e.left,t,r),a=[];for(const i of n)for(const l of s)switch(e.op){case"==":a.push(er(l,i));break;case"!=":a.push(!er(l,i));break;case"<":a.push(Mt(l,i)<0);break;case"<=":a.push(Mt(l,i)<=0);break;case">":a.push(Mt(l,i)>0);break;case">=":a.push(Mt(l,i)>=0);break;default:a.push(Tv(e.op,l,i))}return a}case"array":return[e.body?pe(e.body,t,r):[]];case"object":{let n=[{}];for(const s of e.entries){const a=pe(s.key,t,r),i=s.value?pe(s.value,t,r):[],l=[];for(const c of n)for(const d of a){if(typeof d!="string")throw new xe(`对象的键必须是字符串,得到 ${He(d)}`);for(const u of i)l.push({...c,[d]:u})}n=l}return n}case"if":return pe(e.cond,t,r).flatMap(n=>{if(vt(n))return pe(e.then,t,r);for(const s of e.elifs)if(pe(s.cond,t,r).some(vt))return pe(s.then,t,r);return e.else?pe(e.else,t,r):[t]});case"as":return pe(e.source,t,r).flatMap(n=>pe(e.body,t,{...r,[e.name]:n}));case"reduce":{let n=pe(e.init,t,r);for(const s of pe(e.source,t,r))n=n.flatMap(a=>pe(e.update,a,{...r,[e.name]:s}));return n}case"call":return ws(e.name,e.args,t,r)}}const Ue=(e,t,r)=>{const n=pe(e,t,r);if(n.length!==1)throw new xe("参数必须恰好产生一个值");return n[0]},Xe=(e,t,r)=>{if(He(e)!==t)throw new xe(`${r} 需要 ${t},得到 ${He(e)}`)};function an(e,t){return e.map((r,n)=>({v:r,k:t(r),i:n})).sort((r,n)=>Mt(r.k,n.k)||r.i-n.i).map(r=>r.v)}function ws(e,t,r,n){const s=`${e}/${t.length}`,a=i=>(Xe(r,"array",i),r);switch(s){case"empty/0":return[];case"not/0":return[!vt(r)];case"error/0":throw new xe(sn(r));case"error/1":throw new xe(sn(Ue(t[0],r,n)));case"length/0":return[cj(r)];case"type/0":return[He(r)];case"keys/0":case"keys_unsorted/0":return Array.isArray(r)?[r.map((i,l)=>l)]:(Xe(r,"object",e),[e==="keys"?Object.keys(r).sort():Object.keys(r)]);case"values/0":return r===null?[]:[r];case"has/1":{const i=Ue(t[0],r,n);return Array.isArray(r)?[typeof i=="number"&&i>=0&&i<r.length]:(Xe(r,"object","has"),[Object.prototype.hasOwnProperty.call(r,i)])}case"in/1":{const i=Ue(t[0],r,n);return ws("has",[{k:"lit",v:r}],i,n)}case"map/1":return[a("map").flatMap(i=>pe(t[0],i,n))];case"map_values/1":{if(Array.isArray(r))return[r.map(l=>pe(t[0],l,n)[0]).filter(l=>l!==void 0)];Xe(r,"object","map_values");const i={};for(const[l,c]of Object.entries(r)){const d=pe(t[0],c,n);d.length&&(i[l]=d[0])}return[i]}case"select/1":return pe(t[0],r,n).some(vt)?[r]:[];case"recurse/0":return pe({k:"recurse"},r,n);case"add/0":return[yr(r).reduce((l,c)=>l===void 0?c:Tv("+",l,c),void 0)??null];case"any/0":return[yr(r).some(vt)];case"all/0":return[yr(r).every(vt)];case"any/1":return[yr(r).some(i=>pe(t[0],i,n).some(vt))];case"all/1":return[yr(r).every(i=>pe(t[0],i,n).every(vt))];case"range/1":{const i=Ue(t[0],r,n);return Array.from({length:Math.max(0,Math.ceil(i))},(l,c)=>c)}case"range/2":{const i=Ue(t[0],r,n),l=Ue(t[1],r,n),c=[];for(let d=i;d<l;d++)c.push(d);return c}case"floor/0":return Xe(r,"number","floor"),[Math.floor(r)];case"ceil/0":return Xe(r,"number","ceil"),[Math.ceil(r)];case"round/0":return Xe(r,"number","round"),[Math.round(r)];case"sqrt/0":return Xe(r,"number","sqrt"),[Math.sqrt(r)];case"fabs/0":case"abs/0":return Xe(r,"number",e),[Math.abs(r)];case"tostring/0":return[sn(r)];case"tonumber/0":{if(typeof r=="number")return[r];const i=Number(r);if(typeof r!="string"||r.trim()===""||Number.isNaN(i))throw new xe(`无法把 ${sn(r)} 转成数字`);return[i]}case"tojson/0":return[JSON.stringify(r)];case"fromjson/0":Xe(r,"string","fromjson");try{return[JSON.parse(r)]}catch{throw new xe(`fromjson 解析失败:${r}`)}case"ascii_downcase/0":return Xe(r,"string",e),[r.toLowerCase()];case"ascii_upcase/0":return Xe(r,"string",e),[r.toUpperCase()];case"ltrimstr/1":{const i=Ue(t[0],r,n);return[typeof r=="string"&&typeof i=="string"&&r.startsWith(i)?r.slice(i.length):r]}case"rtrimstr/1":{const i=Ue(t[0],r,n);return[typeof r=="string"&&typeof i=="string"&&i&&r.endsWith(i)?r.slice(0,-i.length):r]}case"trim/0":return Xe(r,"string","trim"),[r.trim()];case"startswith/1":return Xe(r,"string",e),[r.startsWith(Ue(t[0],r,n))];case"endswith/1":return Xe(r,"string",e),[r.endsWith(Ue(t[0],r,n))];case"split/1":return Xe(r,"string","split"),[r.split(Ue(t[0],r,n))];case"join/1":{const i=Ue(t[0],r,n);return[a("join").map(l=>l===null?"":typeof l=="object"?(()=>{throw new xe("join 只能连接字符串、数字与布尔值")})():String(l)).join(i)]}case"test/1":case"test/2":{Xe(r,"string","test");const i=Ue(t[0],r,n),l=t[1]?Ue(t[1],r,n).replace(/[^gimsuy]/g,""):"";return[new RegExp(i,l.replace("g","")).test(r)]}case"sub/2":case"gsub/2":{Xe(r,"string",e);const i=new RegExp(Ue(t[0],r,n),e==="gsub"?"g":"");return[r.replace(i,Ue(t[1],r,n))]}case"contains/1":return[ks(r,Ue(t[0],r,n))];case"inside/1":return[ks(Ue(t[0],r,n),r)];case"sort/0":return[an(a("sort"),i=>i)];case"sort_by/1":return[an(a("sort_by"),i=>pe(t[0],i,n))];case"group_by/1":{const i=an(a("group_by"),d=>pe(t[0],d,n)),l=[];let c;for(const d of i){const u=pe(t[0],d,n);l.length&&er(u,c)?l[l.length-1].push(d):l.push([d]),c=u}return[l]}case"unique/0":case"unique_by/1":{const i=u=>t[0]?pe(t[0],u,n):u,l=an(a(e),i),c=[];let d;for(const u of l){const p=i(u);(!c.length||!er(p,d))&&c.push(u),d=p}return[c]}case"min/0":case"max/0":case"min_by/1":case"max_by/1":{const i=a(e);if(!i.length)return[null];const c=an(i,d=>t[0]?pe(t[0],d,n):d);return[e.startsWith("min")?c[0]:c[c.length-1]]}case"reverse/0":return typeof r=="string"?[[...r].reverse().join("")]:[r===null?[]:[...a("reverse")].reverse()];case"first/0":return[bs(r,0)];case"last/0":return[bs(r,-1)];case"first/1":return pe(t[0],r,n).slice(0,1);case"last/1":return pe(t[0],r,n).slice(-1);case"limit/2":{const i=Ue(t[0],r,n);return i<=0?[]:pe(t[1],r,n).slice(0,i)}case"nth/1":return[bs(r,Ue(t[0],r,n))];case"flatten/0":case"flatten/1":{const i=t[0]?Ue(t[0],r,n):1e9,l=(c,d)=>c.flatMap(u=>Array.isArray(u)&&d>0?l(u,d-1):[u]);return[l(a("flatten"),i)]}case"to_entries/0":return Xe(r,"object","to_entries"),[Object.entries(r).map(([i,l])=>({key:i,value:l}))];case"from_entries/0":{const i={};for(const l of a("from_entries")){const c=l.key??l.k??l.name??l.Name??l.Key??l.K;i[typeof c=="string"?c:JSON.stringify(c)]="value"in l?l.value:l.v??l.Value??null}return[i]}case"with_entries/1":{const l=ws("to_entries",[],r,n)[0].flatMap(c=>pe(t[0],c,n));return ws("from_entries",[],l,n)}case"tostream/0":case"paths/0":case"getpath/1":case"setpath/2":case"del/1":case"path/1":case"env/0":case"input/0":case"inputs/0":case"now/0":throw new xe(`不支持 ${e}(沙箱只实现了常用的 jq 子集)`);case"isnull/0":return[r===null];case"arrays/0":return Array.isArray(r)?[r]:[];case"objects/0":return He(r)==="object"?[r]:[];case"strings/0":return typeof r=="string"?[r]:[];case"numbers/0":return typeof r=="number"?[r]:[];case"booleans/0":return typeof r=="boolean"?[r]:[];case"nulls/0":return r===null?[r]:[];case"iterables/0":return Array.isArray(r)||He(r)==="object"?[r]:[];case"scalars/0":return Array.isArray(r)||He(r)==="object"?[]:[r];case"indices/1":case"index/1":case"rindex/1":{const i=Ue(t[0],r,n);let l=[];if(typeof r=="string"&&typeof i=="string"&&i)for(let c=r.indexOf(i);c>=0;c=r.indexOf(i,c+1))l.push(c);else if(Array.isArray(r))l=r.map((c,d)=>er(c,i)?d:-1).filter(c=>c>=0);else if(r===null)return[null];return e==="indices"?[l]:l.length?[e==="index"?l[0]:l[l.length-1]]:[null]}}throw new xe(`不支持函数 ${e}${t.length?`/${t.length}`:""}(沙箱只实现了常用的 jq 子集)`)}function Iv(e,t){const r=wv(e);return pe(r,_v(t),{}).map(_v)}const Nv=2e3;function dj(){const e=self,t=["fetch","XMLHttpRequest","WebSocket","EventSource","importScripts","indexedDB","caches","BroadcastChannel","MessageChannel","Worker","SharedWorker","navigator","location","Request","Response","WebTransport","RTCPeerConnection","FileReaderSync"],r=e.postMessage.bind(e);for(const n of t)try{for(let s=e;s;s=Object.getPrototypeOf(s))Object.prototype.hasOwnProperty.call(s,n)&&Object.defineProperty(s,n,{value:void 0,configurable:!1,writable:!1})}catch{}e.onmessage=n=>{const{id:s,expression:a,input:i}=n.data;try{const c=new Function("$","__src","return eval(__src);")(i,a);let d;try{d=c===void 0?null:JSON.parse(JSON.stringify(c))}catch{d=String(c)}r({id:s,ok:!0,value:d})}catch(l){r({id:s,ok:!1,error:l instanceof Error?`${l.name}: ${l.message}`:String(l)})}}}function Cv(e={}){const t=e.timeoutMs??Nv;let r=null,n=null,s=0;const a=new Map,i=()=>{r?.terminate(),r=null,n&&URL.revokeObjectURL(n),n=null},l=()=>{if(r)return r;if(typeof Worker>"u"||typeof Blob>"u"||typeof URL>"u")return"当前环境不支持 Web Worker,脚本没有执行";try{n=URL.createObjectURL(new Blob([`(${dj.toString()})();`],{type:"text/javascript"})),r=new Worker(n)}catch(d){return i(),`页面不允许创建脚本沙箱(可能是 CSP 限制了 blob: Worker),脚本没有执行:${d instanceof Error?d.message:String(d)}`}return r.onmessage=d=>{const{id:u,...p}=d.data;a.get(u)?.(p),a.delete(u)},r.onerror=d=>{const u=d.message||"脚本沙箱异常";for(const p of a.values())p({ok:!1,error:u});a.clear(),i()},r};return{evaluate:(d,u)=>new Promise(p=>{const f=l();if(typeof f=="string"){p({ok:!1,error:f,notExecuted:!0});return}const m=++s,h=setTimeout(()=>{if(a.has(m)){a.delete(m);for(const x of a.values())x({ok:!1,error:"同一沙箱中的另一个脚本超时,本脚本被一并终止"});a.clear(),i(),p({ok:!1,error:`脚本运行超过 ${t} ms 被终止(可能存在死循环)`})}},t);a.set(m,x=>{clearTimeout(h),p(x)});let y;try{y=JSON.parse(JSON.stringify(u??{}))}catch{y={}}f.postMessage({id:m,expression:d,input:y})}),dispose:i}}const uj=()=>({ok:!1,notExecuted:!0,error:"同步接口不执行脚本;请改用 executeLocalSandboxDryRunAsync()"});function pj(e){return!e||typeof e!="object"?null:e.__isMockOverride||"outputData"in e||"forceCase"in e||"durationMs"in e||"status"in e&&(e.status==="COMPLETED"||e.status==="FAILED"||e.status==="TIMED_OUT"||e.status==="COMPLETED_WITH_ERRORS")&&Object.keys(e).every(t=>["__isMockOverride","status","durationMs","forceCase","outputData","reasonForIncompletion"].includes(t))?e:{__isMockOverride:!0,outputData:e}}function fj(e){const t=[],r=/([^.[\]]+)|\[(\d+)\]|\['([^']*)'\]|\["([^"]*)"\]/g;let n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(/^\d+$/.test(n[1])?Number(n[1]):n[1]):n[2]!==void 0?t.push(Number(n[2])):t.push(n[3]??n[4]??"");return t}function iu(e,t){if(e==null||!t)return;let r=e;for(const n of fj(t)){if(r==null)return;r=r[n]}return r}function Ss(e,t,r){if(typeof e=="string"){const n=e.match(/^\$\{([^}]+)\}$/);if(n){const s=Ev(n[1].trim(),t);return s===void 0&&r?.push(n[1].trim()),s!==void 0?s:e}return e.replace(/\$\{([^}]+)\}/g,(s,a)=>{const i=Ev(a.trim(),t);return i===void 0?(r?.push(a.trim()),s):typeof i=="object"?JSON.stringify(i):String(i)})}if(Array.isArray(e))return e.map(n=>Ss(n,t,r));if(e&&typeof e=="object"){const n={};for(const[s,a]of Object.entries(e))n[s]=Ss(a,t,r);return n}return e}function Ev(e,t){if(e==="workflow.input")return t.workflowInput;if(e.startsWith("workflow.input.")||e.startsWith("workflow.input["))return iu(t.workflowInput,e.slice(14).replace(/^\./,""));if(e==="workflow.variables")return t.variables;if(e.startsWith("workflow.variables.")||e.startsWith("workflow.variables["))return iu(t.variables,e.slice(18).replace(/^\./,""));if(e==="workflow.workflowId")return"sandbox-dryrun-wf-001";if(e==="workflow.correlationId")return"corr-sandbox-9921";const r=/^([A-Za-z0-9_\-]+)\.(output|input)(.*)$/.exec(e);if(r){const[,n,s,a]=r,i=s==="output"?t.taskOutputs[n]:t.taskInputs[n];if(!i)return;if(!a)return i;if(a.startsWith(".")||a.startsWith("["))return iu(i,a.replace(/^\./,""))}}function _s(e,t={},r){switch(e.type){case"HTTP":{const n=t.http_request||e.httpRequest||t;return{response:{statusCode:200,headers:{"content-type":"application/json","x-sandbox":"true"},body:{code:0,status:"SUCCESS",message:`Simulated HTTP ${n?.method||"GET"} response for ${e.name}`,requestEcho:n?.uri||"/api/v1/resource",data:{id:`res_${e.taskReferenceName}_${r||1}`,verified:!0,score:95,items:[{id:1,name:"item-alpha"},{id:2,name:"item-beta"}]}}}}}case"JSON_JQ_TRANSFORM":return{result:{},resultList:[{}]};case"SET_VARIABLE":return{variables:{...Object.keys(t).length?t:e.inputParameters||{}}};case"INLINE":case"LAMBDA":return{result:null};case"EVENT":return{event_produced:`conductor:event:${e.sink||e.name}`,payload:t};case"WAIT":return{waited:!0,duration:t.duration||"1s"};case"TERMINATE":return{terminationStatus:t.terminationStatus||"COMPLETED",terminationReason:t.terminationReason||"Terminated in sandbox dry-run",output:t.workflowOutput||{}};default:return{code:0,status:"OK",result:`Simulated output from ${e.name}`,processedAt:new Date().toISOString(),iteration:r??1,inputEcho:t,data:{id:`${e.taskReferenceName}_out_${r||1}`,approved:!0,amount:t.amount??100}}}}const mj=e=>e!=null&&e!==!1&&e!==0&&e!=="";function*lu(e,t){return yield{expression:e,input:t}}function hj(e,t,r){t.seqCounter+=1;const n=t.seqCounter,s=t.currentTimeMs,a=s+8+n%5*4;t.currentTimeMs=a;const i=[],l=Ss(e.inputParameters||{},t,i),c=r&&r>1?`${e.taskReferenceName}__${r}`:e.taskReferenceName,d=[...new Set(i)].map(u=>`引用 \${${u}} 没有取到值(上游未执行或路径不存在)`);return t.taskInputs[e.taskReferenceName]=l,{seq:n,scheduledTime:s,startTime:a,resolvedInput:l,execRefName:c,warnings:d}}function _t(e,t,r,n,s){const a={taskId:`sandbox-task-${r.seq}`,taskType:t.type,taskDefName:t.name,referenceTaskName:r.execRefName,scheduledTime:r.scheduledTime,startTime:r.startTime,endTime:e.currentTimeMs,seq:r.seq,pollCount:1,retryCount:0,iteration:s,inputData:r.resolvedInput,workflowTask:t,...n};return r.warnings.length&&(a.sandboxWarnings=[...a.sandboxWarnings??[],...r.warnings]),e.tasks.push(a),a.outputData&&(e.taskOutputs[t.taskReferenceName]=a.outputData),a}const Rv=new Set(["FAILED","FAILED_WITH_TERMINAL_ERROR","TIMED_OUT"]);function*on(e,t,r){for(const n of e){const s=yield*gj(n,t,r);if(s==="FAILED"||s==="TERMINATED")return s}return"COMPLETED"}function*yj(e,t,r){const n=e.type==="DECISION",s=n?e.caseExpression?"javascript":"value-param":e.evaluatorType||"value-param";if(s==="value-param"){const a=n?e.caseValueParam:e.expression||e.caseValueParam;return a?(a in t||r.push(`入参里没有 "${a}",走默认分支`),{value:t[a]}):(r.push("没有配置判断参数,走默认分支"),{value:void 0})}if(s==="javascript"||s==="graaljs"){const a=n?e.caseExpression:e.expression;if(!a)return r.push("没有配置判断表达式,走默认分支"),{value:void 0};const i=yield*lu(a,t);return i.ok?{value:i.value}:i.notExecuted?(r.push(`条件脚本未执行,走默认分支:${i.error}`),{value:void 0}):{value:void 0,error:`条件脚本执行失败:${i.error}`}}return{value:void 0,error:`沙箱不支持 ${s} 求值器`}}function*gj(e,t,r){const n=hj(e,t,r),{resolvedInput:s}=n,a=pj(t.taskMocks[e.taskReferenceName]),i=m=>{t.currentTimeMs+=typeof a?.durationMs=="number"&&a.durationMs>=0?a.durationMs:m};if(e.type==="SWITCH"||e.type==="DECISION"){const m=[];let h,y;if(a?.forceCase)h=a.forceCase,m.push(`按配置台强制走分支 ${h==="__default__"?"默认":h}`);else{const g=yield*yj(e,s,m);if(g.error)return i(12),_t(t,e,n,{status:"FAILED",reasonForIncompletion:g.error,outputData:{},sandboxExecution:"executed",sandboxWarnings:m},r),"FAILED";y=g.value;const v=y==null?"":String(y);h=e.decisionCases&&v in e.decisionCases?v:"__default__"}i(12);const x=h==="__default__"?e.defaultCase||[]:e.decisionCases?.[h]||e.defaultCase||[];return _t(t,e,n,{status:"COMPLETED",inputData:{...s,case:h==="__default__"?"defaultCase":h},outputData:a?.outputData??{evaluationResult:[y===void 0?null:String(y)],selectedCase:h==="__default__"?"defaultCase":h},sandboxExecution:a?.forceCase?"mocked":"executed",sandboxWarnings:m},r),yield*on(x,t,r)}if(e.type==="FORK_JOIN"){i(10);const m=e.forkTasks||[];return _t(t,e,n,{status:"COMPLETED",outputData:{},sandboxExecution:"executed"},r),yield*Ov(m,t,r)}if(e.type==="FORK_JOIN_DYNAMIC"){i(10);const m=[],h=xj(e,s,m);return t.lastDynamicSpawn=h.map(y=>y.taskReferenceName),_t(t,e,n,{status:"COMPLETED",outputData:{},sandboxExecution:"executed",sandboxWarnings:m},r),yield*Ov(h.map(y=>[y]),t,r)}if(e.type==="JOIN"||e.type==="EXCLUSIVE_JOIN"){let m=e.joinOn||[];!m.length&&t.lastDynamicSpawn&&(m=t.lastDynamicSpawn,t.lastDynamicSpawn=null);const h={};for(const y of m)t.taskOutputs[y]&&(h[y]=t.taskOutputs[y]);return i(15),_t(t,e,n,{status:"COMPLETED",inputData:{joinOn:m},outputData:h,sandboxExecution:"executed"},r),"COMPLETED"}if(e.type==="DO_WHILE")return yield*vj(e,t,n,r);if(["INLINE","LAMBDA","JSON_JQ_TRANSFORM","SET_VARIABLE","TERMINATE","WAIT","NOOP"].includes(e.type)&&!a)return yield*bj(e,t,n,r);const c=e.type==="HTTP"?145+n.seq%4*35:e.type==="SIMPLE"?85+n.seq%5*30:28+n.seq%3*12;i(c);let d;a?.outputData?d=structuredClone(a.outputData):(d=_s(e,s,r),d.processedAt&&(d.processedAt=new Date(t.currentTimeMs).toISOString())),e.type==="SET_VARIABLE"&&Object.assign(t.variables,a?.outputData??s);const u=a?.status||"COMPLETED",p=Rv.has(u),f=e.type==="DYNAMIC"&&e.dynamicTaskNameParam&&typeof s[e.dynamicTaskNameParam]=="string"?s[e.dynamicTaskNameParam]:e.name;return _t(t,e,n,{status:u,taskDefName:f,workerId:"browser-local-sandbox-worker",outputData:d,reasonForIncompletion:p?a?.reasonForIncompletion||`沙箱人工模拟任务异常 (${u})`:void 0,sandboxExecution:"mocked"},r),p?"FAILED":"COMPLETED"}function*Ov(e,t,r){const n=t.currentTimeMs;let s=n,a="COMPLETED";for(const i of e){t.currentTimeMs=n;const l=yield*on(i,t,r);s=Math.max(s,t.currentTimeMs),l!=="COMPLETED"&&a==="COMPLETED"&&(a=l)}return t.currentTimeMs=s,a}function xj(e,t,r){const n=e.dynamicForkTasksParam;if(n){const i=t[n];if(!Array.isArray(i))return r.push(`入参 "${n}" 不是任务数组,没有生成并行任务`),[];const l=e.dynamicForkTasksInputParamName,c=l&&t[l]||{};return i.filter(d=>!!d&&typeof d=="object"&&typeof d.taskReferenceName=="string").map(d=>({...d,type:d.type||"SIMPLE",inputParameters:c[d.taskReferenceName]??d.inputParameters??{}}))}const s=t.forkTaskInputs,a=t.forkTaskName??t.forkTaskWorkflow;if(Array.isArray(s)&&a){const i=t.forkTaskType||(t.forkTaskWorkflow?"SUB_WORKFLOW":"SIMPLE");return s.map((l,c)=>({name:String(a),taskReferenceName:`${e.taskReferenceName}_${c}`,type:i,inputParameters:l&&typeof l=="object"?l:{input:l}}))}return r.push("没有找到动态任务列表(dynamicForkTasksParam 或 forkTaskName + forkTaskInputs),没有生成并行任务"),[]}function*vj(e,t,r,n){const s=e.loopOver||[],a=Math.max(1,t.maxLoopIterations),i=[],l={},c=_t(t,e,r,{status:"IN_PROGRESS",inputData:{...r.resolvedInput,loopCondition:e.loopCondition},outputData:{iteration:0},sandboxExecution:"executed"},n);c.sandboxWarnings=i;let d="COMPLETED",u="COMPLETED",p=0;for(;;){p+=1;const f=yield*on(s,t,p);if(l[String(p)]=Object.fromEntries(s.filter(y=>t.taskOutputs[y.taskReferenceName]).map(y=>[y.taskReferenceName,t.taskOutputs[y.taskReferenceName]])),c.outputData={iteration:p,...l},t.taskOutputs[e.taskReferenceName]=c.outputData,f!=="COMPLETED"){d=f==="FAILED"?"FAILED":"COMPLETED",u=f;break}if(!e.loopCondition){i.push("没有配置循环条件,只运行一轮");break}if(!t.canRunScripts){if(p===1&&i.push(`循环条件未执行(同步接口不执行脚本),按上限运行 ${a} 轮`),p>=a)break;continue}const m={...r.resolvedInput,[e.taskReferenceName]:c.outputData};for(const y of s)t.taskOutputs[y.taskReferenceName]&&(m[y.taskReferenceName]=t.taskOutputs[y.taskReferenceName]);const h=yield*lu(e.loopCondition,m);if(!h.ok){if(h.notExecuted){i.push(`循环条件未执行:${h.error}`);break}d="FAILED",u="FAILED",c.reasonForIncompletion=`循环条件执行失败:${h.error}`;break}if(!mj(h.value))break;if(p>=a){d="COMPLETED_WITH_ERRORS",c.reasonForIncompletion=`达到沙箱循环上限 ${a} 轮时条件仍为真,已停止(真实运行会继续循环)`;break}}return t.currentTimeMs+=10,c.status=d,c.endTime=t.currentTimeMs,c.iteration=p,u}function*bj(e,t,r,n){const s=r.resolvedInput,a=(l,c={error:l},d=6)=>(t.currentTimeMs+=d,_t(t,e,r,{status:"FAILED",reasonForIncompletion:l,outputData:c,sandboxExecution:"executed"},n),"FAILED"),i=(l,c,d={})=>(t.currentTimeMs+=c,_t(t,e,r,{status:"COMPLETED",outputData:l,sandboxExecution:"executed",...d},n),"COMPLETED");switch(e.type){case"INLINE":case"LAMBDA":{const l=e.type==="LAMBDA",c=l?s.scriptExpression:s.expression,d=l?"javascript":s.evaluatorType||e.evaluatorType||"javascript";if(typeof c!="string"||!c.trim())return a("没有配置脚本(inputParameters.expression)");if(d==="value-param")return i({result:s[c]??null},4);if(d!=="javascript"&&d!=="graaljs")return a(`沙箱不支持 ${d} 求值器`);const u=yield*lu(c,s);return u.ok?i({result:u.value},6):u.notExecuted?(t.currentTimeMs+=1,_t(t,e,r,{status:"SKIPPED",reasonForIncompletion:u.error,outputData:{},sandboxExecution:"not_executed"},n),"COMPLETED"):a(`脚本执行失败:${u.error}`)}case"JSON_JQ_TRANSFORM":{const l=s.queryExpression;if(typeof l!="string"||!l.trim())return a("没有配置 jq 表达式(inputParameters.queryExpression)");try{const c=Iv(l,s);return i({result:c.length?c[0]:null,resultList:c},5)}catch(c){const d=c instanceof xe?c.message:String(c);return a(`jq 执行失败:${d}`)}}case"SET_VARIABLE":return Object.assign(t.variables,s),i({variables:{...s}},3);case"WAIT":return i({},4,{sandboxWarnings:["沙箱不实际等待,WAIT 立即完成"]});case"NOOP":return i({},1);case"TERMINATE":{const l=s.terminationStatus||"COMPLETED",c={terminationStatus:l,terminationReason:s.terminationReason||"",output:s.workflowOutput||{}};return l==="FAILED"?(t.currentTimeMs+=4,_t(t,e,r,{status:"FAILED_WITH_TERMINAL_ERROR",reasonForIncompletion:s.terminationReason||"Terminated with FAILED status",outputData:c,sandboxExecution:"executed"},n),"FAILED"):(i(c,4),"TERMINATED")}}return a(`沙箱无法执行 ${e.type}`)}function ln(e){const t={};if(Array.isArray(e.inputParameters))for(const r of e.inputParameters){const n=typeof r=="string"?r:r?.name,s=typeof r=="object"&&r!==null?r.example??r.defaultValue??`sample_${n}`:`sample_${n}`;n&&!(n in t)&&(t[n]=s)}try{const r=JSON.stringify(e.tasks||[]),n=/\$\{\s*workflow\.input\.([a-zA-Z0-9_]+)/g;let s;for(;(s=n.exec(r))!==null;){const a=s[1];a&&!(a in t)&&(t[a]=`mock_${a}`)}}catch{}return t}function Pv(e,t,r){const n=Date.now()-2e3;return{ctx:{workflowInput:t.workflowInput||ln(e),variables:{},taskOutputs:{},taskInputs:{},taskMocks:t.taskMocks||{},tasks:[],currentTimeMs:n,maxLoopIterations:t.maxLoopIterations??(r?20:2),canRunScripts:r,seqCounter:0,lastDynamicSpawn:null},baseStartTime:n}}function Av(e,t,r,n){const s={};if(e.outputParameters&&Object.keys(e.outputParameters).length>0)Object.assign(s,Ss(e.outputParameters,t));else{const i=t.tasks[t.tasks.length-1];i?.outputData&&Object.assign(s,i.outputData)}const a=t.tasks.find(i=>Rv.has(i.status));return{workflowId:`sandbox-dryrun-${Date.now().toString(36)}`,workflowName:e.name||"sandbox_workflow",workflowVersion:e.version||1,status:n==="FAILED"?"FAILED":"COMPLETED",startTime:r,endTime:t.currentTimeMs,createTime:r,updateTime:t.currentTimeMs,input:t.workflowInput,output:s,variables:t.variables,tasks:t.tasks,reasonForIncompletion:n==="FAILED"?a?.reasonForIncompletion:void 0,workflowDefinition:structuredClone(e),isSandbox:!0}}async function cn(e,t={}){const{ctx:r,baseStartTime:n}=Pv(e,t,!0),s=t.scriptEvaluator?null:Cv({timeoutMs:t.scriptTimeoutMs??Nv}),a=t.scriptEvaluator??s.evaluate;try{const i=on(e.tasks||[],r);let l=i.next();for(;!l.done;){const c=await a(l.value.expression,l.value.input);l=i.next(c)}return Av(e,r,n,l.value)}finally{s?.dispose()}}function kj(e,t={}){const{ctx:r,baseStartTime:n}=Pv(e,t,!1),s=on(e.tasks||[],r);let a=s.next();for(;!a.done;)a=s.next(uj(a.value.expression));return Av(e,r,n,a.value)}const cu=new Set,du=new Set;function $v(e,t){let r;if(e.forEach(n=>{r=n}),!!r)try{r(t)}catch(n){console.warn("[reactflow-ui] 埋点观察者出错,已忽略:",n)}}function wj(e){return cu.add(e),()=>{cu.delete(e)}}function Lv(e){$v(cu,e)}function Sj(e){return du.add(e),()=>{du.delete(e)}}function _j(e){$v(du,e)}const jj=/^(.+)__(\d+)$/;function Dv(e,t){if(t[e])return{baseRef:e};const r=e.match(jj);return r&&t[r[1]]?{baseRef:r[1],iteration:parseInt(r[2],10)}:{baseRef:e}}function Mv(e,t){return(e.iteration??0)-(t.iteration??0)||(e.retryCount??0)-(t.retryCount??0)||(e.seq??0)-(t.seq??0)||(e.startTime??0)-(t.startTime??0)}function uu(e){if(!e||e.length===0)return 0;const t=new Map;for(const n of e){const s=n.iteration??0,a=t.get(s);a?a.push(n):t.set(s,[n])}let r=0;for(const n of t.values()){const s=n.reduce((a,i)=>Math.max(a,i.retryCount??0),0);r+=Math.max(s,n.length-1)}return r}function Wv(e){return e?new Set(e.map(r=>r.iteration).filter(r=>typeof r=="number"&&r>0)).size:0}function Tj(e,t){const r=e.filter(n=>n.iteration===t);if(r.length!==0)return[...r].sort(Mv)[r.length-1]}function Ij(e,t){const r=(n,s)=>{if(Array.isArray(n))for(const a of n){if(!a)continue;if(a.taskReferenceName===t)return s;const i=[];a.decisionCases&&Object.values(a.decisionCases).forEach(l=>i.push([l,s])),a.defaultCase&&i.push([a.defaultCase,s]),Array.isArray(a.forkTasks)&&a.forkTasks.forEach(l=>i.push([l,s])),Array.isArray(a.loopOver)&&i.push([a.loopOver,a.taskReferenceName??s]);for(const[l,c]of i){const d=r(l,c);if(d!==void 0)return d}}};return r(e,null)??null}function Nj(e,t,r){if(!t)return e;const n=r[t];if(!n)return e;const s=Tj(e.attempts,n);return s?{...e,status:s.status,startTime:s.startTime,endTime:s.endTime,input:s.inputData,output:s.outputData,reasonForIncompletion:s.reasonForIncompletion,iteration:s.iteration??n}:e}function Cj(e,t,r){const n={};for(const{forkRef:s,joinRef:a}of t){let i=null;e.forEach((l,c)=>{const d=l?.referenceTaskName;if(!d)return;let u;if(d===s)u="";else if(d.startsWith(`${s}__`)&&/^\d+$/.test(d.slice(s.length+2)))u=d.slice(s.length);else return;const p=`${a}${u}`;let f=-1;for(let x=c+1;x<e.length;x++)if(e[x]?.referenceTaskName===p){f=x;break}if(f<0)return;const m=new Set,h=e.slice(c+1,f).filter(x=>{const g=x?.referenceTaskName;return!g||!x.taskId||r[g]||r[Dv(g,r).baseRef]||m.has(g)?!1:(m.add(g),!0)}),y=u?parseInt(u.slice(2),10):l.iteration??0;u&&(n[`${s}${u}`]=h),(!i||y>=i.iter)&&(i={iter:y,children:h})}),i&&(n[s]=i.children)}return n}function Ej(e,t){const r={};for(const n of e){const s=n?.referenceTaskName;if(!s)continue;const{baseRef:a,iteration:i}=Dv(s,t),l=i!==void 0&&n.iteration===void 0?{...n,iteration:i}:n;r[a]||(r[a]={taskReferenceName:a,status:l.status,attempts:[]}),r[a].attempts.push(l)}for(const n of Object.values(r)){n.attempts.sort(Mv),n.attempts.some(l=>l.iteration!==void 0&&l.iteration>0)&&(n.totalIterations=n.attempts.reduce((l,c)=>Math.max(l,c.iteration??0),0));const a=n.attempts[0],i=n.attempts[n.attempts.length-1];n.startTime=a?.startTime,n.status=i.status,n.endTime=i.endTime,n.output=i.outputData,n.input=i.inputData,n.reasonForIncompletion=i.reasonForIncompletion,n.iteration=i.iteration}return r}function dn(e,t=[]){return Array.isArray(e)&&e.forEach((r,n)=>{if(r){if(r.type==="FORK_JOIN_DYNAMIC"){for(let s=n+1;s<e.length;s++)if(e[s]?.type==="JOIN"||e[s]?.type==="EXCLUSIVE_JOIN"){t.push({forkRef:r.taskReferenceName,joinRef:e[s].taskReferenceName});break}}r.decisionCases&&Object.values(r.decisionCases).forEach(s=>dn(s,t)),r.defaultCase&&dn(r.defaultCase,t),Array.isArray(r.forkTasks)&&r.forkTasks.forEach(s=>dn(s,t)),Array.isArray(r.loopOver)&&dn(r.loopOver,t)}}),t}let zv=null,pu=[];function Rj(e){return e===zv||(zv=e,pu=e.map(t=>Object.assign({},t,{selected:!1}))),pu}const Oj=100,Pj=1500;let gr=null;function fu(){const e=re.temporal;return e?e.getState():null}function Aj(e,t){const r=fu();if(!r){t();return}const n=Date.now(),s=r.pastStates[r.pastStates.length-1];if(!!e&&!!gr&&gr.key===e&&n-gr.at<Pj&&gr.anchor===s&&s!==void 0&&r.isTracking){r.pause();try{t()}finally{fu()?.resume()}gr.at=n;return}if(t(),e){const i=fu();gr={key:e,at:n,anchor:i?.pastStates[i.pastStates.length-1]}}else gr=null}function $j(e,t,r,n){if(n||!t)return null;const s=[];return Object.keys(r).sort().forEach(a=>{const i=r[a],l=t[a];if(i&&l&&typeof i=="object"&&typeof l=="object"&&!Array.isArray(i)){const c=Array.from(new Set([...Object.keys(i),...Object.keys(l)])).filter(d=>JSON.stringify(i[d])!==JSON.stringify(l[d])).sort();s.push(`${a}.${c.join("+")}`)}else s.push(a)}),`${e}:${s.join(",")}`}function xr(e,t){const{nodes:r,edges:n,taskMap:s}=yt(e,t.layoutDirection,{hideEmptyBranches:t.mode!=="edit"}),a=ut(r,n,{direction:t.layoutDirection,mode:t.mode});return{workflowDef:e,nodes:a.nodes,edges:a.edges,taskMap:s,validationResults:Et(e)}}function mu(e,t){const r=e.selectedTask?.taskReferenceName;return r&&!t[r]?{selectedTask:null,isDetailPanelOpen:!1}:{}}const re=Vn()(qp(v0((e,t)=>({mode:"view",workflowDef:null,workflowInstance:null,nodes:[],edges:[],taskMap:{},layoutDirection:"TB",selectedTask:null,selectedTaskInstance:null,isDetailPanelOpen:!1,executionData:null,dynamicRuntimeTasksByFork:{},validationResults:{isValid:!0,errors:[],warnings:[]},theme:"dark",themeColor:"blue",edgeType:"smoothstep",nodesLocked:!0,copiedTask:null,viewMode:"business",simState:{},isSimRunning:!1,workflowLoadKey:0,graphStale:!1,runState:"idle",pendingExecutionId:null,executionError:null,showRunPanel:!1,showAnalysisPanel:!1,focusedParamKey:null,showDataLineage:!1,lastRefactorNotice:null,sandboxRunning:!1,sandboxNotice:null,showWaterfallPanel:!1,timeTravelTimestamp:null,activeLoopIterations:{},inlineCopilotTaskRef:null,setWorkflow:(r,n)=>{const s=n||t().layoutDirection,a=JSON.parse(JSON.stringify(r));Ar(a.tasks),pt(a.tasks);const{nodes:i,edges:l,taskMap:c}=yt(a,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:d,edges:u}=ut(i,l,{direction:s,mode:t().mode}),p=Et(a);e({workflowDef:a,nodes:d,edges:u,taskMap:c,validationResults:p,layoutDirection:s,workflowLoadKey:t().workflowLoadKey+1,graphStale:!1})},setWorkflowDefOnly:r=>{const n=JSON.parse(JSON.stringify(r));Ar(n.tasks),pt(n.tasks),e({workflowDef:n,validationResults:Et(n),graphStale:!0})},refreshGraph:()=>{const{graphStale:r,workflowDef:n,layoutDirection:s,mode:a}=t();if(!r||!n)return;const{nodes:i,edges:l,taskMap:c}=yt(n,s,{hideEmptyBranches:a!=="edit"}),{nodes:d,edges:u}=ut(i,l,{direction:s,mode:a});e({nodes:d,edges:u,taskMap:c,graphStale:!1})},setMode:r=>{t().mode==="run"&&r!=="run"&&e({executionData:null,workflowInstance:null,dynamicRuntimeTasksByFork:{},timeTravelTimestamp:null,showWaterfallPanel:!1,activeLoopIterations:{}}),e({mode:r});const{workflowDef:s,layoutDirection:a}=t();if(s){const{nodes:i,edges:l,taskMap:c}=yt(s,a,{hideEmptyBranches:r!=="edit"}),{nodes:d,edges:u}=ut(i,l,{direction:a,mode:r});e({nodes:d,edges:u,taskMap:c,graphStale:!1})}},setExecutionData:r=>e({executionData:r,dynamicRuntimeTasksByFork:r===null?{}:t().dynamicRuntimeTasksByFork}),updateTaskStatus:(r,n)=>{const{executionData:s}=t();if(!s)return;const a={...s};a[r]&&(a[r]={...a[r],status:n},e({executionData:a}))},loadSampleExecution:async()=>{try{const n=await(await fetch("/sample-workflows/sample-execution.json")).json();t().importExecutionJSON(n)}catch(r){console.error("Failed to load sample execution:",r),alert("加载示例运行数据失败")}},importExecutionJSON:r=>{if(!r)return;let n=[],s=null,a=t().workflowDef;if(Array.isArray(r.tasks)?(n=r.tasks,r.workflowId&&r.status&&(s=r,r.workflowDefinition&&(a=r.workflowDefinition))):Array.isArray(r)&&(n=r),n.length===0)return;a&&JSON.stringify(a)!==JSON.stringify(t().workflowDef)&&t().setWorkflow(a);const i=t().taskMap,l=Ej(n,i),c=dn(t().workflowDef?.tasks||[]),d=Cj(n,c,i);e({executionData:l,dynamicRuntimeTasksByFork:d,workflowInstance:s,timeTravelTimestamp:null,activeLoopIterations:{}}),t().mode!=="run"&&t().setMode("run")},setSelectedTask:r=>e(n=>({selectedTask:r?{...r}:null,selectedTaskInstance:r&&n.selectedTask?.taskReferenceName===r.taskReferenceName?n.selectedTaskInstance:null})),setIsDetailPanelOpen:r=>e({isDetailPanelOpen:r}),selectTaskAction:(r,n=!0)=>{e({selectedTask:r?{...r}:null,isDetailPanelOpen:r?n:!1,selectedTaskInstance:null})},setSelectedTaskInstance:r=>e({selectedTaskInstance:r}),setLayoutDirection:r=>{const{workflowDef:n}=t();if(n){const{nodes:s,edges:a,taskMap:i}=yt(n,r,{hideEmptyBranches:t().mode!=="edit"}),{nodes:l,edges:c}=ut(s,a,{direction:r,mode:t().mode});e({nodes:l,edges:c,taskMap:i,layoutDirection:r})}else e({layoutDirection:r})},onNodesChange:r=>{const n=t().nodes,s=new Set(n.map(i=>i.id)),a=r.filter(i=>"id"in i&&s.has(i.id));a.length!==0&&e({nodes:J.applyNodeChanges(a,n)})},onEdgesChange:r=>{const n=t().edges,s=J.applyEdgeChanges(r,n);s!==n&&e({edges:s})},onConnect:r=>{},checkTaskRefUniqueness:(r,n)=>r===n?!0:!it(t().workflowDef?.tasks).has(r),updateTask:(r,n,s)=>{const{workflowDef:a,layoutDirection:i}=t();if(!a)return;let l=JSON.parse(JSON.stringify(a)),c=t().lastRefactorNotice;const d=typeof n=="object"?n:{[n]:s},u=Object.keys(d),p=d.taskReferenceName;let f=r;if(typeof p=="string"&&p.trim()!==r){const b=p.trim(),S=gs(l,b,r);if(S){console.warn(`[workflowStore] ${S}`);return}const j=ys(l,r,b);l=j.updatedDef,f=b,j.replacedCount>0&&(c={oldRef:r,newRef:b,replacedCount:j.replacedCount,affectedTasks:j.affectedTaskRefs,timestamp:Date.now()})}const m=JSON.parse(JSON.stringify(l.tasks)),h=et(a.tasks,r),y=et(l.tasks,f);if(!y)return;Object.assign(y,d,{taskReferenceName:f}),pt(l.tasks,m);const x=Et(l),g=new Set(["taskReferenceName","type","decisionCases","defaultCase","forkTasks","loopOver","joinOn"]),v=u.some(b=>g.has(b)&&(b!=="taskReferenceName"||f!==r)),k=$j(r,h,d,v);Aj(k,()=>{if(v){const{nodes:b,edges:S,taskMap:j}=yt(l,i,{hideEmptyBranches:t().mode!=="edit"}),{nodes:_,edges:w}=ut(b,S,{direction:i,mode:t().mode}),I=t().selectedTask?.taskReferenceName===r?y:t().selectedTask;e({workflowDef:l,nodes:_,edges:w,taskMap:j,selectedTask:I,validationResults:x,lastRefactorNotice:c})}else{const b=t().nodes.map(_=>_.data?.taskReferenceName===r?{..._,data:{..._.data,label:y.name||_.data.label,task:y,loopCondition:y.loopCondition??_.data.loopCondition,subWorkflowName:y.subWorkflowParam?.name??_.data.subWorkflowName}}:_),S={...t().taskMap,[r]:y},j=t().selectedTask?.taskReferenceName===r?y:t().selectedTask;e({workflowDef:l,nodes:b,taskMap:S,selectedTask:j,validationResults:x})}})},replaceTask:(r,n)=>{const{workflowDef:s}=t();if(!s)return"当前没有打开的工作流:请先加载或新建一个工作流";if(!n||typeof n!="object"||Array.isArray(n))return"任务 JSON 必须是一个对象:请检查最外层是否为 { ... }";let a=JSON.parse(JSON.stringify(s));const i=typeof n.taskReferenceName=="string"?n.taskReferenceName.trim():"";if(i!==r){const m=gs(a,i,r);if(m)return m;a=ys(a,r,i).updatedDef}const l=JSON.parse(JSON.stringify(a.tasks)),c=Dt(a.tasks,i),d=c?c.findIndex(m=>m.taskReferenceName===i):-1;if(!c||d<0)return`没有找到任务 "${r}":它可能已被删除,请刷新后重试`;const u={...JSON.parse(JSON.stringify(n)),taskReferenceName:i};c[d]=u,pt(a.tasks,l);const p=xr(a,t()),f=t().selectedTask;return e({...p,selectedTask:f?.taskReferenceName===r?u:f}),null},updateWorkflowProperties:r=>{const{workflowDef:n,layoutDirection:s}=t();if(!n)return;const a=JSON.parse(JSON.stringify(n));Object.assign(a,r),pt(a.tasks,n.tasks);const i=Et(a);if("tasks"in r){const{nodes:l,edges:c,taskMap:d}=yt(a,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:u,edges:p}=ut(l,c,{direction:s,mode:t().mode});e({workflowDef:a,nodes:u,edges:p,taskMap:d,validationResults:i})}else e({workflowDef:a,validationResults:i})},addNode:(r,n,s,a,i={})=>{const{workflowDef:l}=t();if(!l)return;const c=JSON.parse(JSON.stringify(l));let d=n,u=i||{};u.exitOf?(d=u.exitOf,u={}):u.branchParentRef!==void 0&&u.forkIndex!==void 0&&(d=u.branchParentRef,u={forkIndex:u.forkIndex});const p=it(c.tasks);let f=r.data.taskReferenceName;if(p.has(f)){let v=2;for(;p.has(`${f}_${v}`);)v++;f=`${f}_${v}`}const m=xv(r.data.taskType||"SIMPLE",r.data.label,f),y=m.type==="FORK_JOIN"||m.type==="FORK_JOIN_DYNAMIC"?ru(m,new Set([...p,f])):null,x=u.branchCase!==void 0||u.forkIndex!==void 0||u.isLoopAdd;if(!x&&!u.isWorkflowStart&&!u.isLoopBodyStart){const v=et(c.tasks,d);v&&(v.type==="FORK_JOIN"||v.type==="FORK_JOIN_DYNAMIC")&&(d=fv(c.tasks,d)??d)}let g=!1;if(u.isWorkflowStart)c.tasks.unshift(m),g=!0;else if(u.isLoopBodyStart){const v=et(c.tasks,d);v&&(v.loopOver||(v.loopOver=[]),v.loopOver.unshift(m),g=!0)}else x?g=rn(c.tasks,d,u,m):c.tasks.length===0?(c.tasks.push(m),g=!0):g=Zt(c.tasks,d,m);if(!g){console.warn(`[workflowStore] 未找到插入位置 "${d}",没有添加任务`);return}y&&Zt(c.tasks,m.taskReferenceName,y),pt(c.tasks,l.tasks),e(xr(c,t())),_j("builtin")},removeNode:r=>{const{workflowDef:n}=t();if(!n)return;const s=JSON.parse(JSON.stringify(n)),a=Dt(s.tasks,r);if(a){const l=a.find(c=>c.taskReferenceName===r)?.type;if(l==="FORK_JOIN"||l==="FORK_JOIN_DYNAMIC"){const c=fs(a,r);c&&Nt(s.tasks,c)}else if(l==="JOIN"||l==="EXCLUSIVE_JOIN"){const c=Zd(a,r);c&&Nt(s.tasks,c)}}if(!Nt(s.tasks,r))return;pt(s.tasks,n.tasks);const i=xr(s,t());e({...i,...mu(t(),i.taskMap)})},addLoopTask:(r,n)=>{const{workflowDef:s,layoutDirection:a}=t();if(!s)return;const i=JSON.parse(JSON.stringify(s)),l=et(i.tasks,r);if(l&&l.type==="DO_WHILE"){l.loopOver||(l.loopOver=[]);const c=xv(n,`new_${n.toLowerCase()}`,`${r}_sub_${Date.now()}`);l.loopOver.push(c),(c.type==="FORK_JOIN"||c.type==="FORK_JOIN_DYNAMIC")&&l.loopOver.push(ru(c,it(i.tasks))),pt(i.tasks,s.tasks);const{nodes:d,edges:u,taskMap:p}=yt(i,a,{hideEmptyBranches:t().mode!=="edit"}),{nodes:f,edges:m}=ut(d,u,{direction:a,mode:t().mode}),h=Et(i);e({workflowDef:i,nodes:f,edges:m,taskMap:p,validationResults:h})}},removeLoopTask:(r,n)=>{const{workflowDef:s}=t();if(!s)return;const a=JSON.parse(JSON.stringify(s)),i=et(a.tasks,r);if(i&&i.type==="DO_WHILE"&&i.loopOver){const l=Dt(i.loopOver,n);if(l){const d=l.find(u=>u.taskReferenceName===n);if(d?.type==="FORK_JOIN"||d?.type==="FORK_JOIN_DYNAMIC"){const u=fs(l,n);u&&Nt(i.loopOver,u)}else if(d?.type==="JOIN"||d?.type==="EXCLUSIVE_JOIN"){const u=Zd(l,n);u&&Nt(i.loopOver,u)}}Nt(i.loopOver,n),pt(a.tasks,s.tasks);const c=xr(a,t());e({...c,...mu(t(),c.taskMap)})}},addDecisionBranch:(r,n)=>{const{workflowDef:s,layoutDirection:a}=t();if(!s)return;const i=JSON.parse(JSON.stringify(s)),l=et(i.tasks,r);if(l&&(l.type==="DECISION"||l.type==="SWITCH")){if(n==="default")l.defaultCase||(l.defaultCase=[]);else{const h=xs(l,n);if(h){console.warn(`[workflowStore] ${h}`);return}l.decisionCases||(l.decisionCases={}),l.decisionCases[n.trim()]=[]}pt(i.tasks,s.tasks);const{nodes:c,edges:d,taskMap:u}=yt(i,a,{hideEmptyBranches:t().mode!=="edit"}),{nodes:p,edges:f}=ut(c,d,{direction:a,mode:t().mode}),m=Et(i);e({workflowDef:i,nodes:p,edges:f,taskMap:u,validationResults:m})}},removeDecisionBranch:(r,n)=>{const{workflowDef:s}=t();if(!s)return;const a=JSON.parse(JSON.stringify(s)),i=et(a.tasks,r);if(i&&(i.type==="DECISION"||i.type==="SWITCH")){n==="default"?i.defaultCase=[]:i.decisionCases&&delete i.decisionCases[n],pt(a.tasks,s.tasks);const l=xr(a,t());e({...l,...mu(t(),l.taskMap)})}},renameDecisionBranch:(r,n,s)=>{const{workflowDef:a}=t();if(!a)return!1;const i=JSON.parse(JSON.stringify(a)),l=et(i.tasks,r);if(!l||l.type!=="DECISION"&&l.type!=="SWITCH"||!l.decisionCases||!l.decisionCases[n])return!1;const c=(s??"").trim();if(c===n)return!0;const d=xs(l,c,n);if(d)return console.warn(`[workflowStore] ${d}`),!1;const u={};return Object.entries(l.decisionCases).forEach(([p,f])=>{u[p===n?c:p]=f}),l.decisionCases=u,pt(i.tasks,a.tasks),e(xr(i,t())),!0},addForkBranch:r=>{const{workflowDef:n,layoutDirection:s}=t();if(!n)return;const a=JSON.parse(JSON.stringify(n)),i=et(a.tasks,r);if(i&&i.type==="FORK_JOIN"){i.forkTasks||(i.forkTasks=[]),i.forkTasks.push([]),pt(a.tasks,n.tasks);const{nodes:l,edges:c,taskMap:d}=yt(a,s,{hideEmptyBranches:t().mode!=="edit"}),{nodes:u,edges:p}=ut(l,c,{direction:s,mode:t().mode}),f=Et(a);e({workflowDef:a,nodes:u,edges:p,taskMap:d,validationResults:f})}},copyTask:r=>e({copiedTask:r}),pasteTask:r=>{const{workflowDef:n,selectedTask:s}=t();if(!n||!r)return;const a=JSON.parse(JSON.stringify(n)),i=it(a.tasks),{task:l,join:c}=Q_(r,i,`_copy_${Date.now()}`);let d=s&&i.has(s.taskReferenceName)?s.taskReferenceName:a.tasks.length>0?a.tasks[a.tasks.length-1].taskReferenceName:"start";const u=et(a.tasks,d);u&&(u.type==="FORK_JOIN"||u.type==="FORK_JOIN_DYNAMIC")&&(d=fv(a.tasks,d)??d),a.tasks.length===0?a.tasks.push(l):Zt(a.tasks,d,l)||a.tasks.push(l),c&&Zt(a.tasks,l.taskReferenceName,c),pt(a.tasks,n.tasks),e(xr(a,t()))},flashNodes:r=>{if(r.length===0)return;const n=t().__flashTimeout;n&&clearTimeout(n);const s=new Set(r),a={};t().nodes.forEach(l=>{s.has(l.id)&&(a[l.id]=l.selected??!1)}),e(l=>({nodes:l.nodes.map(c=>s.has(c.id)?{...c,selected:!0}:c)}));const i=setTimeout(()=>{e(l=>({nodes:l.nodes.map(c=>s.has(c.id)?{...c,selected:a[c.id]??!1}:c)}))},2500);t().__flashTimeout=i},setTheme:r=>e({theme:r}),setThemeColor:r=>e({themeColor:r}),setEdgeType:r=>e({edgeType:r}),setNodesLocked:r=>e({nodesLocked:r}),setViewMode:r=>e({viewMode:r}),startSimulation:()=>{const{edges:r,nodes:n,isSimRunning:s}=t();if(s)return;const a=n.filter(p=>!["plusNode","dynamicPlaceholderNode"].includes(p.type??"")).map(p=>p.id),i=r.map(p=>({source:p.source,target:p.target})),l=aj(a,i);e({isSimRunning:!0,simState:{}});const c={timer:null};t().__simHandle=c;let d=0;const u=()=>{if(d>=l.length||!t().isSimRunning){e({isSimRunning:!1,simState:{}});return}const p=l[d];e(f=>{const m={...f.simState};return p.forEach(h=>m[h]="running"),{simState:m}}),c.timer=setTimeout(()=>{t().isSimRunning&&(e(f=>{const m={...f.simState};return p.forEach(h=>m[h]="done"),{simState:m}}),d++,c.timer=setTimeout(u,280))},700)};u()},stopSimulation:()=>{const r=t().__simHandle;r?.timer&&clearTimeout(r.timer),e({isSimRunning:!1,simState:{}})},createBlankWorkflow:r=>{const n={name:r||"new_workflow",description:"",tasks:[],version:1,schemaVersion:2};t().setWorkflow(n),e({mode:"edit"})},applyAIGeneratedWorkflow:r=>{const{tasks:n,...s}=r,a={...s,name:r.name||"AI_Generated_Workflow",tasks:n||[],version:r.version||1,schemaVersion:2};t().setWorkflow(a)},setShowRunPanel:r=>e({showRunPanel:r}),setShowAnalysisPanel:r=>e({showAnalysisPanel:r}),setRunState:(r,n,s)=>{e({runState:r,pendingExecutionId:n!==void 0?n:t().pendingExecutionId,executionError:s!==void 0?s:t().executionError})},switchToEditAndFocusParam:(r,n)=>{const{workflowDef:s,layoutDirection:a,taskMap:i}=t();if(!s)return;e({mode:"edit",focusedParamKey:n??null});const{nodes:l,edges:c,taskMap:d}=yt(s,a,{hideEmptyBranches:!1}),{nodes:u,edges:p}=ut(l,c,{direction:a,mode:"edit"});e({nodes:u,edges:p,taskMap:d});const f=i[r]||d[r];f&&e({selectedTask:{...f},isDetailPanelOpen:!0,showAnalysisPanel:!1})},setShowDataLineage:r=>e({showDataLineage:r}),clearRefactorNotice:()=>e({lastRefactorNotice:null}),setShowWaterfallPanel:r=>e({showWaterfallPanel:r}),setTimeTravelTimestamp:r=>e({timeTravelTimestamp:r}),setLoopIteration:(r,n)=>e({activeLoopIterations:{...t().activeLoopIterations,[r]:n}}),clearSandboxNotice:()=>e({sandboxNotice:null}),runLocalSandboxDryRun:async(r,n,s)=>{const{workflowDef:a,sandboxRunning:i}=t();if(!a||i)return;if(!a.tasks?.length){e({sandboxNotice:{text:"流程里还没有步骤,先添加步骤再试运行",type:"error",timestamp:Date.now()}});return}e({sandboxRunning:!0,sandboxNotice:null});let l;try{l=await cn(a,{workflowInput:r,taskMocks:n,maxLoopIterations:s})}catch(c){const d=c instanceof Error?c.message:String(c);e({sandboxRunning:!1,sandboxNotice:{text:`沙箱试运行出错:${d}。检查流程定义和模拟数据后再试`,type:"error",timestamp:Date.now()}}),Lv("error");return}e({sandboxRunning:!1}),t().importExecutionJSON(l),e({showWaterfallPanel:!0}),Lv(String(l.status))},setInlineCopilotTaskRef:r=>e({inlineCopilotTaskRef:r})}),{partialize:e=>({workflowDef:e.workflowDef,nodes:Rj(e.nodes),edges:e.edges,taskMap:e.taskMap,graphStale:e.graphStale}),equality:(e,t)=>e.workflowDef===t.workflowDef?!0:JSON.stringify(e.workflowDef)===JSON.stringify(t.workflowDef),limit:Oj}),{name:"conductor-ui-prefs",version:1,storage:ua(()=>localStorage),migrate:(e,t)=>(t===0&&e.edgeType==="default"&&(e.edgeType="smoothstep"),e),partialize:e=>({theme:e.theme,themeColor:e.themeColor,layoutDirection:e.layoutDirection,edgeType:e.edgeType,nodesLocked:e.nodesLocked,copiedTask:e.copiedTask,viewMode:e.viewMode})}));let qv=null;re.subscribe(e=>{if(e.taskMap===qv||(qv=e.taskMap,e.mode!=="edit"||e.graphStale||!e.selectedTask))return;const t=e.taskMap[e.selectedTask.taskReferenceName];t?t!==e.selectedTask&&JSON.stringify(t)!==JSON.stringify(e.selectedTask)&&re.setState({selectedTask:{...t}}):re.setState({selectedTask:null,isDetailPanelOpen:!1})});const Fv=e=>Symbol.iterator in e,Bv=e=>"entries"in e,Hv=(e,t)=>{const r=e instanceof Map?e:new Map(e.entries()),n=t instanceof Map?t:new Map(t.entries());if(r.size!==n.size)return!1;for(const[s,a]of r)if(!n.has(s)||!Object.is(a,n.get(s)))return!1;return!0},Lj=(e,t)=>{const r=e[Symbol.iterator](),n=t[Symbol.iterator]();let s=r.next(),a=n.next();for(;!s.done&&!a.done;){if(!Object.is(s.value,a.value))return!1;s=r.next(),a=n.next()}return!!s.done&&!!a.done};function Dj(e,t){return Object.is(e,t)?!0:typeof e!="object"||e===null||typeof t!="object"||t===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t)?!1:Fv(e)&&Fv(t)?Bv(e)&&Bv(t)?Hv(e,t):Lj(e,t):Hv({entries:()=>Object.entries(e)},{entries:()=>Object.entries(t)})}function $e(e){const t=T.useRef(void 0);return r=>{const n=e(r);return Dj(t.current,n)?t.current:t.current=n}}const Mj=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Wj=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,n)=>n?n.toUpperCase():r.toLowerCase()),Jv=e=>{const t=Wj(e);return t.charAt(0).toUpperCase()+t.slice(1)},Uv=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim(),zj=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var qj={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Fj=T.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:s="",children:a,iconNode:i,...l},c)=>T.createElement("svg",{ref:c,...qj,width:t,height:t,stroke:e,strokeWidth:n?Number(r)*24/Number(t):r,className:Uv("lucide",s),...!a&&!zj(l)&&{"aria-hidden":"true"},...l},[...i.map(([d,u])=>T.createElement(d,u)),...Array.isArray(a)?a:[a]]));const Y=(e,t)=>{const r=T.forwardRef(({className:n,...s},a)=>T.createElement(Fj,{ref:a,iconNode:t,className:Uv(`lucide-${Mj(Jv(e))}`,`lucide-${e}`,n),...s}));return r.displayName=Jv(e),r};const hu=Y("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);const Bj=Y("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);const Hj=Y("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);const Jj=Y("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);const yu=Y("ban",[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const Uj=Y("bell-ring",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}]]);const Vj=Y("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);const Kj=Y("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);const Vv=Y("braces",[["path",{d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1",key:"ezmyqa"}],["path",{d:"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1",key:"e1hn23"}]]);const Kv=Y("chart-column",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);const Gj=Y("chart-gantt",[["path",{d:"M10 6h8",key:"zvc2xc"}],["path",{d:"M12 16h6",key:"yi5mkt"}],["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M8 11h7",key:"wz2hg0"}]]);const Wt=Y("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);const Gv=Y("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);const Yj=Y("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);const zt=Y("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);const gu=Y("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);const Xj=Y("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const Zj=Y("circle-slash",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"9",x2:"15",y1:"15",y2:"9",key:"1dfufj"}]]);const xu=Y("circle-stop",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);const Yv=Y("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);const vu=Y("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const bu=Y("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);const Xv=Y("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const Qj=Y("cloud",[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]]);const ku=Y("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);const eT=Y("compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const tT=Y("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);const rT=Y("corner-down-left",[["path",{d:"M20 4v7a4 4 0 0 1-4 4H4",key:"6o5b7l"}],["path",{d:"m9 10-5 5 5 5",key:"1kshq7"}]]);const nT=Y("corner-down-right",[["path",{d:"m15 10 5 5-5 5",key:"qqa56n"}],["path",{d:"M4 4v7a4 4 0 0 0 4 4h12",key:"z08zvw"}]]);const sT=Y("credit-card",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);const Zv=Y("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);const aT=Y("eraser",[["path",{d:"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",key:"g5wo59"}],["path",{d:"m5.082 11.09 8.828 8.828",key:"1wx5vj"}]]);const Qv=Y("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);const oT=Y("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]);const wu=Y("flame",[["path",{d:"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4",key:"1slcih"}]]);const js=Y("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);const eb=Y("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);const vr=Y("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);const un=Y("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);const Ts=Y("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);const tb=Y("hammer",[["path",{d:"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9",key:"1hayfq"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"15ts47"}]]);const iT=Y("hard-drive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);const lT=Y("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);const Su=Y("hourglass",[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]]);const cT=Y("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);const rb=Y("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);const dT=Y("layout-list",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["path",{d:"M14 4h7",key:"3xa0d5"}],["path",{d:"M14 9h7",key:"1icrd9"}],["path",{d:"M14 15h7",key:"1mj8o2"}],["path",{d:"M14 20h7",key:"11slyb"}]]);const uT=Y("layout-template",[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]]);const nb=Y("library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);const Is=Y("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);const _u=Y("link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);const ju=Y("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);const pT=Y("loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]);const fT=Y("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);const sb=Y("mail",[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]]);const mT=Y("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);const ab=Y("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);const hT=Y("megaphone",[["path",{d:"M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z",key:"q8bfy3"}],["path",{d:"M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14",key:"1853fq"}],["path",{d:"M8 6v8",key:"15ugcq"}]]);const ob=Y("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);const ib=Y("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);const yT=Y("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const gT=Y("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]);const xT=Y("mouse-pointer-click",[["path",{d:"M14 4.1 12 6",key:"ita8i4"}],["path",{d:"m5.1 8-2.9-.8",key:"1go3kf"}],["path",{d:"m6 12-1.9 2",key:"mnht97"}],["path",{d:"M7.2 2.2 8 5.1",key:"1cfko1"}],["path",{d:"M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z",key:"s0h3yz"}]]);const vT=Y("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);const lb=Y("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);const cb=Y("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]);const pn=Y("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);const fn=Y("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);const db=Y("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]);const tr=Y("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);const bT=Y("puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);const kT=Y("radio",[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);const wT=Y("redo-2",[["path",{d:"m15 14 5-5-5-5",key:"12vg1m"}],["path",{d:"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13",key:"6uklza"}]]);const Ns=Y("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);const Dr=Y("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);const mn=Y("rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]);const ST=Y("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);const _T=Y("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);const jT=Y("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);const Tu=Y("scale",[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"m19 8 3 8a5 5 0 0 1-6 0zV7",key:"zcdpyk"}],["path",{d:"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1",key:"1yorad"}],["path",{d:"m5 8 3 8a5 5 0 0 1-6 0zV7",key:"eua70x"}],["path",{d:"M7 21h10",key:"1b0cd5"}]]);const TT=Y("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]);const Iu=Y("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);const ub=Y("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);const IT=Y("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);const pb=Y("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);const NT=Y("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);const fb=Y("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);const Mr=Y("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]);const mb=Y("skip-forward",[["path",{d:"M21 4v16",key:"7j8fe9"}],["path",{d:"M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z",key:"zs4d6"}]]);const hb=Y("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]);const CT=Y("smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);const Rt=Y("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);const Nu=Y("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);const yb=Y("stethoscope",[["path",{d:"M11 2v2",key:"1539x4"}],["path",{d:"M5 2v2",key:"1yf1q8"}],["path",{d:"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1",key:"rb5t3r"}],["path",{d:"M8 15a6 6 0 0 0 12 0v-3",key:"x18d4x"}],["circle",{cx:"20",cy:"10",r:"2",key:"ts1r5v"}]]);const ET=Y("sunrise",[["path",{d:"M12 2v8",key:"1q4o3n"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);const Cs=Y("tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);const RT=Y("target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);const gb=Y("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);const Cu=Y("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);const Es=Y("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);const tt=Y("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const xb=Y("undo-2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);const vb=Y("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);const Eu=Y("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);const OT=Y("waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);const PT=Y("waypoints",[["circle",{cx:"12",cy:"4.5",r:"2.5",key:"r5ysbb"}],["path",{d:"m10.2 6.3-3.9 3.9",key:"1nzqf6"}],["circle",{cx:"4.5",cy:"12",r:"2.5",key:"jydg6v"}],["path",{d:"M7 12h10",key:"b7w52i"}],["circle",{cx:"19.5",cy:"12",r:"2.5",key:"1piiel"}],["path",{d:"m13.8 17.7 3.9-3.9",key:"1wyg1y"}],["circle",{cx:"12",cy:"19.5",r:"2.5",key:"13o1pw"}]]);const AT=Y("workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);const bb=Y("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]);const Le=Y("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);const Ot=Y("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),$T={business:["business"],standard:["business","control"],developer:["business","control","data"]},Pt=[{type:"SIMPLE",label:"任务节点 (Worker)",description:"在远程 Worker 上执行的任务",category:"CORE",icon:hu,viewCategory:"business"},{type:"SUB_WORKFLOW",label:"子工作流 (Sub Workflow)",description:"调用并执行另一个工作流",category:"CORE",icon:un,viewCategory:"business"},{type:"START_WORKFLOW",label:"启动工作流 (Start Workflow)",description:"启动另一个工作流(不等待结果)",category:"SYSTEM",icon:fn,viewCategory:"business"},{type:"HTTP",label:"HTTP 请求",description:"发起 REST/HTTP 调用",category:"SYSTEM",icon:Ts,viewCategory:"business"},{type:"INLINE",label:"内联脚本 (Inline)",description:"执行内联脚本(JS/Python/GraalJS)",category:"SYSTEM",icon:ku,viewCategory:"data"},{type:"JSON_JQ_TRANSFORM",label:"JSON 转换 (JQ)",description:"使用 JQ 表达式转换 JSON 数据",category:"SYSTEM",icon:gb,viewCategory:"data"},{type:"KAFKA_PUBLISH",label:"Kafka 推送",description:"向 Kafka 主题推送消息",category:"SYSTEM",icon:ob,viewCategory:"data"},{type:"EVENT",label:"事件 (Event)",description:"向外部队列系统发布事件",category:"SYSTEM",icon:Ot,viewCategory:"data"},{type:"WAIT",label:"等待 (Wait)",description:"暂停流程,直到特定时间或时长",category:"SYSTEM",icon:Xv,viewCategory:"control"},{type:"SET_VARIABLE",label:"设置变量 (Set Variable)",description:"设置工作流上下文变量",category:"SYSTEM",icon:Zv,viewCategory:"data"},{type:"TERMINATE",label:"终止 (Terminate)",description:"提前结束工作流执行",category:"SYSTEM",icon:xu,viewCategory:"control"},{type:"HUMAN",label:"人工审批 (Human)",description:"等待人工审核或表单提交",category:"SYSTEM",icon:Eu,viewCategory:"business"},{type:"DYNAMIC",label:"动态任务 (Dynamic)",description:"运行时动态决定任务类型",category:"SYSTEM",icon:Mr,viewCategory:"data"},{type:"NOOP",label:"空操作 (Noop)",description:"占位符任务,无实际操作",category:"SYSTEM",icon:ib,viewCategory:"data"},{type:"LAMBDA",label:"Lambda 脚本 (旧)",description:"已被 INLINE 取代",category:"SYSTEM",icon:ku,hidden:!0,viewCategory:"data"},{type:"SWITCH",label:"条件分支 (Switch)",description:"基于条件的逻辑分支 (Switch/Case)",category:"FLOW",icon:Mr,viewCategory:"control"},{type:"DECISION",label:"判断 (Decision,旧)",description:"基于条件的逻辑分支(旧版,推荐改用 Switch)",category:"FLOW",icon:Mr,hidden:!0,viewCategory:"control"},{type:"FORK_JOIN",label:"静态并行 (Fork)",description:"并行执行多个预定义任务分支",category:"FLOW",icon:vr,viewCategory:"control"},{type:"FORK_JOIN_DYNAMIC",label:"动态并行 (Dynamic Fork)",description:"运行时动态生成并行分支",category:"FLOW",icon:vr,viewCategory:"control"},{type:"DO_WHILE",label:"循环 (Do-While)",description:"循环执行直到满足条件",category:"FLOW",icon:Dr,viewCategory:"control"},{type:"JOIN",label:"汇聚 (Join)",description:"等待所有并行分支执行完成",category:"FLOW",icon:un,viewCategory:"control"}],LT=[{key:"CORE",label:"基础任务"},{key:"FLOW",label:"逻辑控制"},{key:"SYSTEM",label:"系统集成"}],qt=({message:e,onConfirm:t,onCancel:r,confirmLabel:n="确定"})=>{const s=T.useRef(null),{theme:a,themeColor:i}=re($e(l=>({theme:l.theme,themeColor:l.themeColor})));return T.useEffect(()=>{s.current?.focus({preventScroll:!0});const l=c=>{c.key==="Escape"&&r()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[r]),kt.createPortal(o.jsx("div",{"data-mode":a,"data-brand":i,onClick:r,style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"var(--cm-overlay)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:o.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"确认操作",onClick:l=>l.stopPropagation(),style:{backgroundColor:"var(--bg-secondary)",border:"1px solid var(--border-primary)",borderRadius:"8px",padding:"24px 28px",maxWidth:"380px",width:"90%",boxShadow:"var(--cm-shadow-float)"},children:[o.jsx("div",{style:{fontSize:"14px",color:"var(--text-primary)",marginBottom:"24px",lineHeight:"1.6",whiteSpace:"pre-wrap",maxHeight:"50vh",overflowY:"auto"},children:e}),o.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[o.jsx("button",{ref:s,onClick:r,style:{padding:"7px 18px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:500},children:"取消"}),o.jsx("button",{onClick:t,style:{padding:"7px 18px",backgroundColor:"var(--color-accent)",border:"none",borderRadius:"6px",color:"var(--color-on-accent)",cursor:"pointer",fontSize:"13px",fontWeight:600},children:n})]})]})}),document.body)},hn=({children:e,nodeId:t,selected:r=!1,isStartOrEnd:n=!1,isError:s=!1,hasWarning:a=!1,isDecision:i=!1,isHighlighted:l=!1,executionStatus:c,simRunning:d=!1,simDone:u=!1,proposalStatus:p})=>{const{mode:f,removeNode:m}=re($e(S=>({mode:S.mode,removeNode:S.removeNode}))),[h,y]=T.useState(!1),x=S=>{S.stopPropagation(),y(!0)},g=f==="edit"&&!n,k=[i?"decision-node-wrapper":"node-wrapper-glass",r?"node-wrapper-selected":"",l?"node-wrapper-highlighted":"",d?"node-sim-running":"",u?"node-sim-done":"",p?`node-proposal-${p}`:""].filter(Boolean).join(" "),b=T.useMemo(()=>{if(f!=="run")return{};if(!c)return{opacity:.4};switch(c){case"FAILED":case"FAILED_WITH_TERMINAL_ERROR":return{borderColor:"var(--status-failed)",boxShadow:"0 0 12px color-mix(in srgb, var(--cm-status-failed) 50%, transparent), 0 0 24px color-mix(in srgb, var(--cm-status-failed) 20%, transparent)"};case"TIMED_OUT":return{borderColor:"var(--status-timed-out)",boxShadow:"0 0 8px color-mix(in srgb, var(--color-accent) 40%, transparent)"};case"IN_PROGRESS":case"SCHEDULED":return{borderColor:"var(--status-in-progress)",animation:"status-pulse 1.5s ease-in-out infinite"};case"COMPLETED":return{borderColor:"var(--status-completed)",opacity:.85};case"COMPLETED_WITH_ERRORS":return{borderColor:"var(--status-completed-with-errors)"};case"SKIPPED":case"CANCELED":return{opacity:.5};default:return{}}},[f,c]);return o.jsxs("div",{className:k,style:{position:"relative",...b},children:[g&&o.jsx("button",{onClick:x,"aria-label":"删除任务",style:{position:"absolute",top:"-10px",right:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-failed)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:100,boxShadow:"var(--cm-shadow-card)",animation:"popIn 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",padding:0},title:"删除任务",children:"×"}),s&&o.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-failed)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"var(--cm-shadow-card)"},title:"此节点配置有误",children:o.jsx(zt,{size:14,strokeWidth:2,"aria-hidden":"true"})}),!s&&a&&o.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-warning)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"var(--cm-shadow-card)"},title:"此节点有警告信息",children:o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),p&&o.jsx("div",{className:`node-proposal-badge node-proposal-badge-${p}`,children:p==="added"?"+":p==="modified"?"~":"−"}),e,h&&o.jsx(qt,{message:su(re.getState().workflowDef,t).message,onConfirm:()=>{m(t),y(!1)},onCancel:()=>y(!1)})]})},DT={pending:"var(--cm-status-pending)",running:"var(--cm-status-running)",success:"var(--cm-status-success)",warning:"var(--cm-status-warning)",failed:"var(--cm-status-failed)",skipped:"var(--cm-status-skipped)",muted:"var(--cm-text-muted)"};function ft(e,t,r,n,s){return{label:e,icon:t,iconName:r,tone:n,color:DT[n],terminal:s.terminal,isFailure:!!s.isFailure,isActive:!s.terminal}}const kb={SCHEDULED:ft("等待中",vu,"circle","pending",{terminal:!1}),IN_PROGRESS:ft("运行中",ju,"loader","running",{terminal:!1}),RUNNING:ft("运行中",ju,"loader","running",{terminal:!1}),PAUSED:ft("已暂停",cb,"pause","warning",{terminal:!1}),COMPLETED:ft("成功",Wt,"check","success",{terminal:!0}),COMPLETED_WITH_ERRORS:ft("带错完成",tt,"alert","warning",{terminal:!0}),FAILED:ft("失败",Le,"x","failed",{terminal:!0,isFailure:!0}),FAILED_WITH_TERMINAL_ERROR:ft("失败(不可重试)",Le,"x","failed",{terminal:!0,isFailure:!0}),TIMED_OUT:ft("已超时",Cu,"timer","warning",{terminal:!0,isFailure:!0}),SKIPPED:ft("已跳过",mb,"skip","skipped",{terminal:!0}),CANCELED:ft("已取消",yu,"ban","muted",{terminal:!0}),TERMINATED:ft("已终止",xu,"stop","failed",{terminal:!0,isFailure:!0})},MT=ft("未知",Xj,"help","muted",{terminal:!1});function rt(e){const t=String(e??"").trim().toUpperCase();return{...kb[t]??MT,status:t||"UNKNOWN",className:(kb[t]?t:"UNKNOWN").toLowerCase().replace(/_/g,"-")}}function WT(e){return rt(e).label}const zT=({status:e})=>{const{icon:t,className:r,label:n}=rt(e);return o.jsx("div",{className:`execution-status-badge ${r}`,title:`${n}(${e})`,role:"img","aria-label":`状态:${n}`,children:o.jsx("span",{className:"badge-icon",children:o.jsx(t,{size:12,strokeWidth:2.25,"aria-hidden":"true"})})})},Ru=T.memo(zT),qT=/[一-龥]/,FT=({icon:e,header:t,title:r,subTitle:n,meta:s,duration:a,color:i,status:l,isRunning:c,children:d,width:u="240px"})=>{const p=c&&l?l==="COMPLETED"?"var(--status-completed)":l==="FAILED"||l==="FAILED_WITH_TERMINAL_ERROR"?"var(--status-failed)":l==="IN_PROGRESS"||l==="SCHEDULED"?"var(--status-in-progress)":l==="TIMED_OUT"||l==="COMPLETED_WITH_ERRORS"?"var(--status-timed-out)":i:i,f=u==="240px"||u===240?"237px":u;return o.jsxs("div",{style:{display:"flex",flexDirection:"row",width:f,height:d?void 0:"81px",minHeight:"81px",boxSizing:"border-box",position:"relative",overflow:"hidden",borderRadius:"10px"},children:[o.jsx("div",{style:{width:"44px",display:"flex",alignItems:"center",justifyContent:"center",background:"color-mix(in srgb, var(--color-accent) 8%, transparent)",borderLeft:`3px solid ${p}`,borderRight:"1px solid var(--border-primary)",color:p,flexShrink:0},children:o.jsx(e,{size:18,strokeWidth:1.75})}),o.jsxs("div",{style:{flex:1,padding:"6px 12px",display:"flex",flexDirection:"column",justifyContent:"center",overflow:"hidden",minWidth:0},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",marginBottom:"2px",paddingRight:c&&l?"20px":0},children:[o.jsx("div",{style:{fontSize:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.5px",lineHeight:1.2,opacity:.85,color:i,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",...qT.test(t)&&{letterSpacing:"0.2px",fontSize:"11px"}},children:t}),c&&a&&o.jsx("span",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-tertiary)",padding:"1px 5px",borderRadius:"4px",flexShrink:0,lineHeight:1.2},children:a})]}),o.jsx("div",{style:{fontSize:"13.5px",fontWeight:600,color:"var(--text-primary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",lineHeight:1.25,marginBottom:n||s?"1px":0},title:r,children:r}),n&&n!==r&&n!==s&&o.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",lineHeight:1.25},title:n,children:n}),s&&o.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted)",lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:s,children:s}),d&&o.jsx("div",{style:{marginTop:"6px"},children:d})]}),c&&l&&o.jsx("div",{style:{position:"absolute",top:"7px",right:"7px"},children:o.jsx(Ru,{status:l})})]})},Rs=T.memo(FT),br=e=>{const t=e.layoutDirection||"TB",r=e.sourcePosition||(t==="LR"?J.Position.Right:J.Position.Bottom),n=e.targetPosition||(t==="LR"?J.Position.Left:J.Position.Top);return{layoutDirection:t,sourcePosition:r,targetPosition:n}},Wr=e=>{const{mode:t,executionData:r,workflowDef:n,activeLoopIterations:s,timeTravelTimestamp:a}=re($e(m=>({mode:m.mode,executionData:m.executionData,workflowDef:m.workflowDef,activeLoopIterations:m.activeLoopIterations,timeTravelTimestamp:m.timeTravelTimestamp}))),i=t==="run"?r?.[e]:null,l=t==="run";let c=i?{...i}:null;if(l&&c&&c.attempts.length>1&&n?.tasks){const m=Ij(n.tasks,e);c=Nj(c,m,s)}if(l&&c&&a!==null){const m=c.startTime??0,h=c.endTime??m;m>a?c={...c,status:"SCHEDULED"}:m<=a&&h>a&&(c={...c,status:"IN_PROGRESS"})}const d=c?.iteration,u=c?d!==void 0?c.attempts.filter(m=>m.iteration===d):c.attempts:[],p=uu(u);let f;if(l&&c?.startTime)if(a!==null&&c.startTime>a)f="待执行";else if(a!==null&&c.startTime<=a&&(c.endTime??c.startTime)>a)f=`${a-c.startTime}ms...`;else if(c.endTime&&c.endTime>=c.startTime){const m=c.endTime-c.startTime;f=m<1e3?`${m}ms`:`${(m/1e3).toFixed(2)}s`}else(c.status==="IN_PROGRESS"||c.status==="SCHEDULED")&&(f="运行中");return{mode:t,execution:c,isRunning:l,retryCount:p,durationText:f}};function rr(e,t){return e.length>t?e.slice(0,t)+"…":e}function yn(e,t,r,n){if(r==="business")return t.task?.description?.trim()||n;if(r==="standard")return n;const s=t.task;if(!s)return n;const a=s.inputParameters||{};switch(e){case"HTTP":case"HTTP_POLL":{const i=s.httpRequest||a.http_request;if(!i)return n;const l=(i.method||"GET").toUpperCase(),c=i.uri?rr(String(i.uri),28):"";return c?`${l} ${c}`:l}case"SWITCH":{const i=s.expression||s.caseExpression||a.expression,l=s.evaluatorType||a.evaluatorType;return i?rr(i,35):l||n}case"DECISION":return s.caseValueParam?`param: ${s.caseValueParam}`:n;case"SIMPLE":return s.name?`worker: ${rr(s.name,28)}`:n;case"INLINE":case"LAMBDA":{const i=a.evaluatorType||s.evaluatorType;return i?`${i} script`:n}case"SUB_WORKFLOW":{const i=s.subWorkflowParam;return i?`${i.name}${i.version?` v${i.version}`:""}`:n}case"DO_WHILE":{const i=s.loopCondition;return i?rr(i,35):n}case"JSON_JQ_TRANSFORM":{const i=a.queryExpression||a.query_expression;return i?rr(i,35):n}case"SET_VARIABLE":{const i=Object.keys(a);return i.length?`set: ${i.slice(0,2).join(", ")}${i.length>2?"…":""}`:n}case"EVENT":{const i=s.sink||a.sink;return i?`→ ${rr(i,32)}`:n}case"KAFKA_PUBLISH":{const i=a.topic||a.kafka_request?.topic;return i?`topic: ${rr(i,28)}`:n}case"START_WORKFLOW":{const i=s.startWorkflow?.name??a.startWorkflow?.name??a.start_workflow?.name;return i?`→ ${i}`:n}default:return n}}function zr(e,t){if(t!=="business")return e;const r=Pt.find(n=>n.type===e);return r?r.label.replace(/\s*\([^)]+\)$/,""):e==="JOIN"?"汇聚":e==="EXCLUSIVE_JOIN"?"排他汇聚":e}const BT=({id:e,data:t,selected:r})=>{const n=t.taskType||"SIMPLE",{sourcePosition:s,targetPosition:a}=br(t),{execution:i,isRunning:l,retryCount:c,durationText:d}=Wr(t.taskReferenceName),u=re(j=>j.viewMode),p=re(j=>j.mode),f=re(j=>j.setInlineCopilotTaskRef),h=J.useStore(j=>j.transform[2])>=1.15,y=T.useMemo(()=>Pt.find(j=>j.type===n),[n]),x=y?.icon||hu,g=n==="NOOP",v=t.isDynamicRuntime===!0,k=g?"var(--text-secondary)":"var(--color-accent)",b=T.useMemo(()=>{let j;return v?j=`Dynamic (${n})`:n==="SIMPLE"?j=t.label==="Worker Task"?"Execute on Worker":"Worker Task":n==="HTTP"?j="REST API Call":n==="JSON_JQ_TRANSFORM"?j="JQ Expression":n==="INLINE"||n==="LAMBDA"?j="Inline Script":n==="START_WORKFLOW"?j="Launch Workflow (no wait)":n==="DYNAMIC"?j="Dynamic Task Type":n==="HUMAN"?j="Human Approval":n==="NOOP"?j="No Operation":j=y?.label||n,yn(n,t,u,j)},[n,y,t,u,v]),S=T.useMemo(()=>!h||!t.task?.inputParameters?[]:Object.entries(t.task.inputParameters).slice(0,2).map(([_,w])=>({key:_,val:typeof w=="object"?JSON.stringify(w).slice(0,28):String(w).slice(0,28)})),[h,t.task?.inputParameters]);return o.jsx(hn,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isHighlighted:t.isHighlighted,executionStatus:i?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:o.jsxs("div",{style:{borderRadius:"10px",background:g?"var(--bg-tertiary)":"transparent",opacity:g?.75:1,position:"relative",outline:v?"2px dashed var(--color-accent)":"none",outlineOffset:"-2px"},children:[o.jsx(Rs,{icon:x,header:zr(n,u),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:b,duration:d,color:k,status:i?.status,isRunning:l}),S.length>0&&o.jsx("div",{style:{padding:"4px 10px 6px",borderTop:"1px dashed var(--border-primary)",fontSize:"9px",fontFamily:"monospace",color:"var(--text-secondary)",display:"flex",flexDirection:"column",gap:"2px"},children:S.map(j=>o.jsxs("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[o.jsx("span",{style:{color:"var(--cm-data)"},children:j.key}),": ",j.val]},j.key))}),r&&p==="edit"&&o.jsx("button",{type:"button",onClick:j=>{j.stopPropagation(),f(t.taskReferenceName)},title:"在此节点触发 ⌘K 画布内联 AI 指令",style:{position:"absolute",top:"-10px",right:"20px",padding:"1px 6px",borderRadius:"999px",border:"1px solid color-mix(in srgb, var(--cm-ai) 60%, transparent)",background:"linear-gradient(135deg, var(--cm-ai), var(--cm-data))",color:"var(--text-primary)",fontSize:"9px",fontWeight:700,cursor:"pointer",zIndex:102,boxShadow:"var(--cm-shadow-card)"},children:"⌘K"}),l&&c>0&&o.jsxs("div",{style:{position:"absolute",bottom:"4px",right:"4px",background:"var(--status-failed)",color:"var(--cm-on-danger)",borderRadius:"10px",fontSize:"10px",fontWeight:"700",padding:"1px 6px",zIndex:10,lineHeight:"1.4",pointerEvents:"none"},children:["×",c]}),v&&o.jsx("div",{style:{position:"absolute",top:"4px",right:"4px",background:"var(--color-accent)",color:"var(--color-on-accent)",borderRadius:"4px",fontSize:"9px",fontWeight:"700",padding:"1px 5px",zIndex:10,pointerEvents:"none",opacity:.9},children:"动态"}),o.jsx(J.Handle,{type:"target",position:a,style:{background:"var(--cm-surface-1)"}}),o.jsx(J.Handle,{type:"source",position:s,style:{background:"var(--cm-surface-1)"}})]})})},HT=T.memo(BT),wb=({title:e,label:t,defaultValue:r="",placeholder:n="",confirmText:s="确定",cancelText:a="取消",onConfirm:i,onCancel:l,validate:c})=>{const{theme:d,themeColor:u}=re($e(g=>({theme:g.theme,themeColor:g.themeColor}))),[p,f]=T.useState(r),m=T.useRef(null);T.useEffect(()=>{m.current&&(m.current.focus({preventScroll:!0}),m.current.select());const g=v=>{v.key==="Escape"&&(v.stopPropagation(),l())};return window.addEventListener("keydown",g,!0),()=>window.removeEventListener("keydown",g,!0)},[l]);const h=c?c(p.trim()):null,y=!!p.trim()&&!h,x=()=>{const g=p.trim();g&&!h&&i(g)};return kt.createPortal(o.jsx("div",{"data-mode":d,"data-brand":u,onClick:l,style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"var(--cm-overlay)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3},children:o.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":e,onClick:g=>g.stopPropagation(),style:{backgroundColor:"var(--bg-secondary)",border:"1px solid var(--border-primary)",borderRadius:"10px",padding:"24px 28px",maxWidth:"400px",width:"90%",boxShadow:"var(--cm-shadow-float)"},children:[o.jsx("div",{style:{fontSize:"15px",fontWeight:600,color:"var(--text-primary)",marginBottom:"16px"},children:e}),t&&o.jsx("div",{style:{fontSize:"12px",color:"var(--text-secondary)",marginBottom:"8px"},children:t}),o.jsx("input",{ref:m,type:"text",value:p,placeholder:n,onChange:g=>f(g.target.value),onKeyDown:g=>{g.key==="Enter"&&(g.preventDefault(),x()),g.stopPropagation()},style:{width:"100%",padding:"9px 12px",borderRadius:"6px",border:"1px solid var(--border-primary)",background:"var(--bg-tertiary)",color:"var(--text-primary)",fontSize:"13px",outline:"none",boxSizing:"border-box",marginBottom:h?"8px":"20px",transition:"border-color 0.15s"},onFocus:g=>{g.currentTarget.style.borderColor="var(--color-accent)"},onBlur:g=>{g.currentTarget.style.borderColor="var(--border-primary)"}}),h&&o.jsxs("div",{role:"alert",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"12px",color:"var(--cm-status-failed)",marginBottom:"16px"},children:[o.jsx(zt,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:h})]}),o.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[o.jsx("button",{onClick:l,style:{padding:"7px 18px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:500},children:a}),o.jsx("button",{onClick:x,disabled:!y,style:{padding:"7px 18px",backgroundColor:y?"var(--color-accent)":"var(--bg-tertiary)",border:"none",borderRadius:"6px",color:y?"var(--color-on-accent)":"var(--text-secondary)",cursor:y?"pointer":"not-allowed",fontSize:"13px",fontWeight:600,transition:"background-color 0.15s, color 0.15s"},children:s})]})]})}),document.body)},JT=({id:e,data:t,selected:r})=>{const{layoutDirection:n}=br(t),{mode:s,execution:a,isRunning:i,durationText:l}=Wr(t.taskReferenceName),{addDecisionBranch:c,removeDecisionBranch:d,renameDecisionBranch:u,viewMode:p}=re($e(N=>({addDecisionBranch:N.addDecisionBranch,removeDecisionBranch:N.removeDecisionBranch,renameDecisionBranch:N.renameDecisionBranch,viewMode:N.viewMode}))),[f,m]=T.useState(!1),[h,y]=T.useState({type:"none"}),x=n==="LR"?J.Position.Left:J.Position.Top,g=Object.keys(t.decisionCases||t.task?.decisionCases||{}),v=()=>{m(!1),y({type:"add"})},k=(N,O)=>{N.stopPropagation(),y({type:"delete",branch:O})},b=(N,O)=>{N.stopPropagation(),m(!1),y({type:"rename",branch:O})},S=N=>{N&&c(e,N),y({type:"none"})},j=N=>{h.type==="rename"&&(N&&N!==h.branch&&u(e,h.branch,N),y({type:"none"}))},_=()=>{h.type==="delete"&&(d(e,h.branch),y({type:"none"}))},w=()=>y({type:"none"}),C=i?(N=>N&&{SCHEDULED:"execution-node-scheduled",IN_PROGRESS:"execution-node-in-progress",COMPLETED:"execution-node-completed",COMPLETED_WITH_ERRORS:"execution-node-completed-with-errors",FAILED:"execution-node-failed",FAILED_WITH_TERMINAL_ERROR:"execution-node-failed-terminal",TIMED_OUT:"execution-node-timed-out",SKIPPED:"execution-node-skipped",CANCELED:"execution-node-canceled"}[N]||"")(a?.status):"";return o.jsxs(hn,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isDecision:!0,isHighlighted:t.isHighlighted,executionStatus:a?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:[o.jsxs("div",{style:{position:"relative",width:"164px",height:"164px",display:"flex",alignItems:"center",justifyContent:"center"},children:[o.jsx(J.Handle,{type:"target",position:x,style:{background:"var(--cm-surface-1)",[n==="LR"?"left":"top"]:"-3px",zIndex:15}}),i&&a?.status&&o.jsx("div",{style:{position:"absolute",top:"12px",right:"12px",zIndex:20},children:o.jsx(Ru,{status:a.status})}),o.jsx("div",{className:C,style:{width:"122px",height:"122px",boxSizing:"border-box",borderRadius:"10px",background:i&&a?.status?void 0:"var(--glass-bg)",backdropFilter:"var(--glass-blur)",WebkitBackdropFilter:"var(--glass-blur)",border:r?"2.5px solid var(--color-accent)":i&&a?.status?void 0:"2px solid rgba(var(--color-accent-rgb), 0.45)",transform:"rotate(45deg)",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:r?"var(--node-shadow-hover), 0 0 0 3px var(--node-glow-color)":i&&a?.status?void 0:"var(--node-shadow)",transition:"all 0.25s ease",cursor:"pointer",flexShrink:0},onClick:()=>s==="edit"&&m(!f),children:o.jsxs("div",{style:{transform:"rotate(-45deg)",color:"var(--text-primary)",textAlign:"center",padding:"6px",width:"116px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},children:[o.jsx("div",{style:{fontSize:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.5px",opacity:.85,marginBottom:"2px",color:"var(--color-accent)"},children:zr(t.taskType,p)}),o.jsx("div",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-primary)",lineHeight:1.25,maxWidth:"104px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:t.taskReferenceName,children:t.taskReferenceName}),t.label&&t.label!==t.taskReferenceName&&o.jsx("div",{style:{fontSize:"10px",color:"var(--text-secondary)",maxWidth:"98px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:"1px"},title:t.label,children:t.label}),s==="edit"&&o.jsx("div",{style:{width:"18px",height:"18px",fontSize:"12px",background:"color-mix(in srgb, var(--color-accent) 18%, transparent)",border:"1px solid rgba(var(--color-accent-rgb), 0.4)",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"4px auto 0",color:"var(--color-accent)",fontWeight:700},title:"管理决策分支",children:"+"}),i&&l&&o.jsx("div",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-tertiary)",padding:"1px 5px",borderRadius:"4px",marginTop:"3px"},children:l})]})}),s==="edit"&&f&&o.jsxs("div",{className:"glass-panel",style:{position:"absolute",top:"170px",left:"50%",transform:"translateX(-50%)",backgroundColor:"var(--glass-surface)",border:"1px solid var(--glass-border)",borderRadius:"8px",padding:"8px",zIndex:1e3,minWidth:"200px",boxShadow:"var(--cm-shadow-float)",animation:"popIn 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",backdropFilter:"blur(12px)"},children:[o.jsx("div",{style:{padding:"4px 8px 6px",fontSize:"11px",color:"var(--text-secondary)",borderBottom:"1px solid var(--glass-border)",marginBottom:"4px",fontWeight:600,letterSpacing:"0.05em"},children:"分支管理"}),g.map(N=>o.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"5px 6px",borderRadius:"4px",gap:"4px"},children:[o.jsx("span",{style:{flex:1,fontSize:"12px",color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:N}),o.jsx("button",{onClick:O=>b(O,N),style:{width:"22px",height:"22px",borderRadius:"4px",backgroundColor:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"11px",padding:0,flexShrink:0,opacity:.85},title:`重命名分支 "${N}"`,children:o.jsx(pn,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("button",{onClick:O=>k(O,N),style:{width:"22px",height:"22px",borderRadius:"50%",backgroundColor:"var(--cm-status-failed)",color:"var(--cm-on-danger)",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"13px",padding:0,flexShrink:0,opacity:.9},title:`删除分支 "${N}"`,children:"×"})]},N)),o.jsx("button",{onClick:v,style:{width:"100%",marginTop:"6px",padding:"8px",backgroundColor:"var(--color-accent)",border:"none",borderRadius:"4px",color:"var(--color-on-accent)",cursor:"pointer",fontSize:"12px",fontWeight:"bold"},children:"+ 添加新分支"})]}),p==="developer"&&(()=>{const N=(t.task?.type==="SWITCH"?t.task?.expression:void 0)||t.task?.caseExpression||t.task?.inputParameters?.expression,O=t.task?.caseValueParam;return!N&&!O?null:o.jsx("div",{style:{position:"absolute",top:"166px",left:"50%",transform:"translateX(-50%)",textAlign:"center",fontSize:10,color:"var(--text-secondary)",maxWidth:150,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",fontFamily:"var(--font-mono, monospace)"},children:N?rr(N,22):`param: ${O}`})})(),n==="TB"?o.jsxs(o.Fragment,{children:[o.jsx(J.Handle,{type:"source",position:J.Position.Bottom,style:{background:"var(--cm-surface-1)",bottom:"-3px",zIndex:15}}),o.jsx(J.Handle,{type:"source",position:J.Position.Left,id:"left",style:{background:"var(--cm-surface-1)",left:"-3px",zIndex:15}}),o.jsx(J.Handle,{type:"source",position:J.Position.Right,id:"right",style:{background:"var(--cm-surface-1)",right:"-3px",zIndex:15}})]}):o.jsxs(o.Fragment,{children:[o.jsx(J.Handle,{type:"source",position:J.Position.Right,style:{background:"var(--cm-surface-1)",right:"-3px",zIndex:15}}),o.jsx(J.Handle,{type:"source",position:J.Position.Top,id:"top",style:{background:"var(--cm-surface-1)",top:"-3px",zIndex:15}}),o.jsx(J.Handle,{type:"source",position:J.Position.Bottom,id:"bottom",style:{background:"var(--cm-surface-1)",bottom:"-3px",zIndex:15}})]})]}),h.type==="add"&&o.jsx(wb,{title:"添加新分支",label:"分支条件值(Case Value)",defaultValue:`case_${g.length+1}`,placeholder:"例如:approved、rejected、pending",confirmText:"添加",validate:N=>xs(t.task,N),onConfirm:S,onCancel:w}),h.type==="rename"&&o.jsx(wb,{title:"重命名分支",label:`当前名称:${h.branch}`,defaultValue:h.branch,placeholder:"输入新的分支条件值",confirmText:"重命名",validate:N=>xs(t.task,N,h.branch),onConfirm:j,onCancel:w}),h.type==="delete"&&o.jsx(qt,{message:`确定要删除分支 "${h.branch}" 及其下的所有任务吗?此操作不可撤销。`,onConfirm:_,onCancel:w})]})},UT=T.memo(JT),Sb="var(--color-accent)",_b=T.memo(({id:e,data:t,selected:r})=>{const{layoutDirection:n,sourcePosition:s,targetPosition:a}=br(t),{mode:i,execution:l,isRunning:c,durationText:d}=Wr(t.taskReferenceName),{addForkBranch:u}=re($e(g=>({addForkBranch:g.addForkBranch}))),p=J.useUpdateNodeInternals(),f=t.task?.forkTasks?.length||0;T.useEffect(()=>{p(e)},[f,e,p]);const m=t.isDynamic||t.taskType==="FORK_JOIN_DYNAMIC",h=re(g=>g.viewMode),x=T.useMemo(()=>Pt.find(g=>g.type==="FORK_JOIN"),[])?.icon||vr;return o.jsx(hn,{isHighlighted:t.isHighlighted,nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,executionStatus:l?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:o.jsxs("div",{className:`fork-node ${m?"dynamic":"static"}`,style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[o.jsx(Rs,{icon:x,header:zr(m?"FORK_JOIN_DYNAMIC":"FORK_JOIN",h),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:yn(t.taskType,t,h,m?"Dynamic Parallel Execution":"Parallel Execution"),duration:d,color:Sb,status:l?.status,isRunning:c}),i==="edit"&&!m&&o.jsx("div",{style:{position:"absolute",...n==="LR"?{top:"50%",right:-12,transform:"translateY(-50%)"}:{bottom:-12,left:"50%",transform:"translateX(-50%)"},width:20,height:20,background:"var(--color-accent)",borderRadius:"50%",color:"var(--color-on-accent)",fontSize:"14px",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",zIndex:1e3,boxShadow:"var(--cm-shadow-card)",border:"2px solid var(--bg-primary)"},onClick:g=>{g.stopPropagation(),u(e)},title:"添加分支",children:"+"}),o.jsx(J.Handle,{type:"target",position:a,style:{background:"var(--cm-surface-1)"}}),!m&&(t.task?.forkTasks||[]).map((g,v,k)=>{if(i!=="edit"&&(!g||g.length===0))return null;const b=i!=="edit"?k.filter(w=>w&&w.length>0):k,S=b.length,_=(b.indexOf(g)+1)/(S+1)*100;return o.jsx(J.Handle,{id:`branch_${v}`,type:"source",position:s,style:{background:"var(--cm-surface-1)",[n==="LR"?"top":"left"]:`${_}%`,[n==="LR"?"left":"top"]:void 0,[n==="LR"?"right":"bottom"]:"-4px",zIndex:10}},`branch_${v}`)}),!m&&(!t.task?.forkTasks||t.task.forkTasks.length===0)&&o.jsx(J.Handle,{type:"source",position:s,style:{background:"var(--cm-surface-1)"}}),m&&o.jsx(J.Handle,{type:"source",position:s,style:{background:"var(--cm-surface-1)"}})]})})});_b.displayName="ForkNode";const jb=T.memo(({id:e,data:t,selected:r})=>{const{layoutDirection:n,sourcePosition:s,targetPosition:a}=br(t),{execution:i,isRunning:l,durationText:c}=Wr(t.taskReferenceName),d=re(f=>f.viewMode),p=T.useMemo(()=>Pt.find(f=>f.type==="JOIN"),[])?.icon||un;return o.jsx(hn,{isHighlighted:t.isHighlighted,nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,executionStatus:i?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:o.jsxs("div",{style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[o.jsx(Rs,{icon:p,header:zr(t.taskType==="EXCLUSIVE_JOIN"?"EXCLUSIVE_JOIN":"JOIN",d),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:yn(t.taskType,t,d,t.taskType==="EXCLUSIVE_JOIN"?"Wait for any task":"Wait for tasks"),duration:c,color:Sb,status:i?.status,isRunning:l}),o.jsx(J.Handle,{type:"target",position:a,style:{background:"var(--cm-surface-1)"}}),n==="TB"&&o.jsxs(o.Fragment,{children:[o.jsx(J.Handle,{type:"target",position:J.Position.Left,id:"left",style:{background:"var(--cm-surface-1)"}}),o.jsx(J.Handle,{type:"target",position:J.Position.Right,id:"right",style:{background:"var(--cm-surface-1)"}})]}),n==="LR"&&o.jsxs(o.Fragment,{children:[o.jsx(J.Handle,{type:"target",position:J.Position.Top,id:"top",style:{background:"var(--cm-surface-1)"}}),o.jsx(J.Handle,{type:"target",position:J.Position.Bottom,id:"bottom",style:{background:"var(--cm-surface-1)"}})]}),o.jsx(J.Handle,{type:"source",position:s,style:{background:"var(--cm-surface-1)"}})]})})});jb.displayName="JoinNode";const Tb={ForkNode:_b,JoinNode:jb},VT=({id:e,data:t,selected:r})=>{const{sourcePosition:n,targetPosition:s}=br(t),{execution:a,isRunning:i,durationText:l}=Wr(t.taskReferenceName),{executionData:c,selectTaskAction:d,mode:u,viewMode:p,removeNode:f,activeLoopIterations:m,setLoopIteration:h}=re($e(E=>({executionData:E.executionData,selectTaskAction:E.selectTaskAction,mode:E.mode,viewMode:E.viewMode,removeNode:E.removeNode,activeLoopIterations:E.activeLoopIterations,setLoopIteration:E.setLoopIteration}))),[y,x]=T.useState(!1),g=t.task,v=g?.loopOver||[],b=T.useMemo(()=>Pt.find(E=>E.type==="DO_WHILE"),[])?.icon||Dr,S=T.useMemo(()=>{if(!i||!c)return 0;let E=a?.iteration??0;return v.forEach(R=>{const L=c[R.taskReferenceName];L?.totalIterations?E=Math.max(E,L.totalIterations):L?.attempts.some(H=>(H.iteration??0)>0)&&(E=Math.max(E,L.attempts.length))}),E},[i,c,v,a?.iteration]),j=m[t.taskReferenceName]||S,_=t.loopCondition||g?.loopCondition||"",w=T.useMemo(()=>{const E=_?_.length>35?_.slice(0,35)+"…":_:"循环直到条件满足";return yn("DO_WHILE",t,p,E)},[t,p,_]),I=a?.status==="COMPLETED"?"var(--status-completed)":a?.status==="FAILED"||a?.status==="FAILED_WITH_TERMINAL_ERROR"?"var(--status-failed)":a?.status==="IN_PROGRESS"||a?.status==="SCHEDULED"?"var(--status-in-progress)":"var(--color-accent)",C=r?`2px solid ${I}`:`1.5px dashed ${i&&a?.status?I:"var(--color-accent)"}`,N=u==="edit",O=p==="developer"&&_;return o.jsxs("div",{style:{width:"100%",height:"100%",border:C,borderRadius:"10px",background:"transparent",display:"flex",flexDirection:"column",position:"relative",overflow:"visible",boxSizing:"border-box",pointerEvents:"none"},children:[N&&o.jsx("button",{onClick:E=>{E.stopPropagation(),x(!0)},"aria-label":"删除循环任务",style:{position:"absolute",top:"-10px",right:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-failed)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:100,boxShadow:"var(--cm-shadow-card)",padding:0,pointerEvents:"auto"},title:"删除循环任务",children:"×"}),t.isError&&o.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-failed)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"var(--cm-shadow-card)",pointerEvents:"auto"},title:"此节点配置有误",children:o.jsx(zt,{size:14,strokeWidth:2,"aria-hidden":"true"})}),!t.isError&&t.hasWarning&&o.jsx("div",{style:{position:"absolute",top:"-10px",left:"-10px",width:"24px",height:"24px",borderRadius:"50%",backgroundColor:"var(--cm-status-warning)",color:"var(--cm-on-danger)",border:"2px solid var(--cm-surface-1)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"14px",zIndex:101,boxShadow:"var(--cm-shadow-card)",pointerEvents:"auto"},title:"此节点有警告信息",children:o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),t.proposalStatus&&o.jsx("div",{className:`node-proposal-badge node-proposal-badge-${t.proposalStatus}`,style:{pointerEvents:"auto"},children:t.proposalStatus==="added"?"+":t.proposalStatus==="modified"?"~":"−"}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",background:"var(--glass-surface)",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",borderBottom:"1px solid var(--border-primary)",borderRadius:"8px 8px 0 0",flexShrink:0,minHeight:"44px",pointerEvents:"auto"},children:[o.jsx("div",{style:{color:"var(--color-accent)",display:"flex",alignItems:"center",flexShrink:0},children:o.jsx(b,{size:15})}),o.jsxs("div",{style:{flex:1,minWidth:0},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[o.jsx("span",{style:{fontSize:"9px",fontWeight:700,color:"var(--color-accent)",letterSpacing:"0.08em",textTransform:"uppercase"},children:zr("DO_WHILE",p)}),o.jsxs("span",{style:{fontSize:"9px",color:"var(--text-muted)"},children:[o.jsx(_T,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),v.length," 个子任务"]})]}),o.jsx("div",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.taskReferenceName}),(p==="business"||p==="developer")&&w&&o.jsx("div",{style:{fontSize:"9px",color:"var(--text-secondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:"1px",fontStyle:"italic"},children:w})]}),i&&l&&o.jsx("span",{style:{fontSize:"10px",fontFamily:"var(--font-mono, monospace)",color:"var(--text-secondary)",background:"var(--bg-secondary)",padding:"1px 6px",borderRadius:"4px",flexShrink:0},children:l}),i&&S>0&&o.jsxs("div",{onClick:()=>d(g||null),style:{padding:"2px 8px",borderRadius:"12px",background:"var(--color-accent)",color:"var(--color-on-accent)",fontSize:"10px",fontWeight:700,cursor:"pointer",flexShrink:0},title:`共执行 ${S} 次迭代`,children:["×",S]}),i&&a?.status&&o.jsx("div",{style:{position:"relative",width:20,height:20,flexShrink:0},children:o.jsx(Ru,{status:a.status})})]}),i&&S>1&&o.jsxs("div",{onClick:E=>E.stopPropagation(),style:{display:"flex",alignItems:"center",gap:"4px",padding:"4px 10px",background:"var(--cm-overlay)",borderBottom:"1px solid var(--border-primary)",flexShrink:0,pointerEvents:"auto",overflowX:"auto"},children:[o.jsx("span",{style:{fontSize:"9px",color:"var(--text-muted)",fontWeight:600,marginRight:"2px"},children:"切换轮次:"}),Array.from({length:S},(E,R)=>R+1).map(E=>{const R=j===E;return o.jsxs("button",{type:"button",onClick:L=>{L.stopPropagation(),h(t.taskReferenceName,E)},style:{fontSize:"9px",padding:"1px 7px",borderRadius:"999px",border:R?"1px solid var(--cm-data)":"1px solid var(--border-primary)",background:R?"color-mix(in srgb, var(--cm-data) 22%, transparent)":"var(--bg-tertiary)",color:R?"var(--cm-data)":"var(--text-secondary)",fontWeight:R?700:500,cursor:"pointer"},children:["#",E]},E)})]}),O&&o.jsxs("div",{style:{padding:"3px 12px",fontSize:"9px",color:"var(--text-secondary)",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flexShrink:0,pointerEvents:"auto"},children:["until: ",_]}),o.jsx("div",{style:{flex:1,position:"relative",background:"var(--loop-body-bg, color-mix(in srgb, var(--cm-ai) 4%, transparent))",borderRadius:"0 0 8px 8px",pointerEvents:"none"}}),o.jsx(J.Handle,{type:"target",position:s,style:{background:"var(--color-accent)",zIndex:10}}),o.jsx(J.Handle,{type:"source",position:n,style:{background:"var(--color-accent)",zIndex:10}}),y&&o.jsx(qt,{message:su(re.getState().workflowDef,e).message,onConfirm:()=>{f(e),x(!1)},onCancel:()=>x(!1)})]})},KT=T.memo(VT),GT="var(--color-accent)",YT=({id:e,data:t,selected:r})=>{const{sourcePosition:n,targetPosition:s}=br(t),{execution:a,isRunning:i,durationText:l}=Wr(t.taskReferenceName),c=re(m=>m.viewMode),u=T.useMemo(()=>Pt.find(m=>m.type==="SUB_WORKFLOW"),[])?.icon||un,p=t.task?.subWorkflowParam?.name||t.subWorkflowName||"Unknown",f=t.task?.subWorkflowParam?.version;return o.jsx(hn,{nodeId:e,selected:r,isError:t.isError,hasWarning:t.hasWarning,isHighlighted:t.isHighlighted,executionStatus:a?.status,simRunning:t.simRunning,simDone:t.simDone,proposalStatus:t.proposalStatus,children:o.jsxs("div",{style:{borderRadius:"10px",background:"transparent",position:"relative"},children:[o.jsx(Rs,{icon:u,header:zr("SUB_WORKFLOW",c),title:t.taskReferenceName,subTitle:t.label&&t.label!==t.taskReferenceName?t.label:void 0,meta:yn("SUB_WORKFLOW",t,c,`Flow: ${p}${f!==void 0?` (v${f})`:""}`),duration:l,color:GT,status:a?.status,isRunning:i}),o.jsx(J.Handle,{type:"target",position:s,style:{background:"var(--cm-surface-1)"}}),o.jsx(J.Handle,{type:"source",position:n,style:{background:"var(--cm-surface-1)"}})]})})},XT=T.memo(YT),ZT=({data:e})=>{const r=(e.layoutDirection||"TB")==="LR";return o.jsxs("div",{className:"plus-node-container",style:{width:"32px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",background:"var(--bg-secondary)",border:"2px dashed var(--color-accent)",color:"var(--color-accent)",cursor:"pointer",transition:"all 0.2s ease",padding:e.label&&e.label!=="+"?"0 12px":"0",minWidth:e.label&&e.label!=="+"?"80px":"32px",gap:"4px"},children:[o.jsx(tr,{size:16}),e.label&&e.label!=="+"&&o.jsx("span",{style:{fontSize:"12px",fontWeight:500},children:e.label}),o.jsx(J.Handle,{type:"target",position:r?J.Position.Left:J.Position.Top,style:{opacity:0}}),o.jsx(J.Handle,{type:"source",position:r?J.Position.Right:J.Position.Bottom,style:{opacity:0},isConnectable:!1}),o.jsx("style",{dangerouslySetInnerHTML:{__html:`
16
18
  .plus-node-container:hover {
17
19
  transform: scale(1.1);
18
20
  background: var(--color-accent);
19
- color: #fff;
21
+ color: var(--color-on-accent);
20
22
  border-style: solid;
21
23
  box-shadow: 0 0 10px var(--color-accent);
22
24
  }
23
- `}})]})},Z1=I.memo(X1),Q1=({data:e})=>{const{sourcePosition:t,targetPosition:r}=ht(e);return a.jsxs("div",{style:{width:"220px",height:"70px",border:"2px dashed var(--color-accent)",borderRadius:"8px",background:"var(--bg-secondary)",opacity:.75,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"4px",cursor:"default",userSelect:"none"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[a.jsx(_r,{size:14,style:{color:"var(--color-accent)"}}),a.jsx("span",{style:{fontSize:"13px",fontWeight:600,color:"var(--color-accent)"},children:"动态分支"})]}),a.jsx("span",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"运行时生成"}),a.jsx(q.Handle,{type:"target",position:r,style:{background:"var(--color-accent)",width:8,height:8}}),a.jsx(q.Handle,{type:"source",position:t,style:{background:"var(--color-accent)",width:8,height:8}})]})},ek=I.memo(Q1),tk=({onSelect:e,onCancel:t})=>{const[r,n]=I.useState("CORE");I.useEffect(()=>{const s=i=>{i.key==="Escape"&&t()};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[t]);const o=Ye.filter(s=>s.category===r&&!s.hidden);return a.jsxs("div",{style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0,0,0,0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3,backdropFilter:"blur(4px)",animation:"fadeIn 0.2s ease-out"},onClick:t,children:[a.jsxs("div",{className:"glass-panel",style:{backgroundColor:"var(--glass-surface)",borderRadius:"16px",padding:"0",width:"600px",height:"500px",boxShadow:"0 20px 50px rgba(0,0,0,0.4)",border:"1px solid var(--glass-border)",display:"flex",flexDirection:"column",overflow:"hidden"},onClick:s=>s.stopPropagation(),children:[a.jsxs("div",{style:{padding:"20px 24px 0",borderBottom:"1px solid var(--border-primary)",backgroundColor:"var(--bg-secondary)"},children:[a.jsx("h3",{style:{marginTop:0,marginBottom:"16px",color:"var(--text-primary)",fontSize:"18px",fontWeight:"600"},children:"添加任务"}),a.jsx("div",{style:{display:"flex",gap:"24px"},children:$1.map(s=>a.jsx("button",{onClick:()=>n(s.key),style:{background:"none",border:"none",padding:"0 0 12px 0",fontSize:"14px",fontWeight:r===s.key?"600":"500",color:r===s.key?"var(--color-accent)":"var(--text-secondary)",borderBottom:r===s.key?"2px solid var(--color-accent)":"2px solid transparent",cursor:"pointer",transition:"all 0.2s"},children:s.label},s.key))})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",padding:"24px",backgroundColor:"var(--bg-primary)"},children:a.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"12px"},children:o.map(s=>{const i=s.icon;return a.jsxs("button",{onClick:()=>e(s.type),style:{display:"flex",alignItems:"flex-start",gap:"16px",padding:"16px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"12px",cursor:"pointer",textAlign:"left",transition:"all 0.2s",color:"var(--text-primary)",position:"relative",overflow:"hidden"},onMouseEnter:l=>{l.currentTarget.style.borderColor="var(--color-accent)",l.currentTarget.style.backgroundColor="var(--bg-highlight)",l.currentTarget.style.transform="translateY(-2px)",l.currentTarget.style.boxShadow="0 4px 12px rgba(0,0,0,0.1)"},onMouseLeave:l=>{l.currentTarget.style.borderColor="var(--border-primary)",l.currentTarget.style.backgroundColor="var(--bg-tertiary)",l.currentTarget.style.transform="translateY(0)",l.currentTarget.style.boxShadow="none"},children:[a.jsx("div",{style:{padding:"10px",borderRadius:"8px",backgroundColor:"var(--bg-secondary)",color:"var(--color-accent)",display:"flex",alignItems:"center",justifyContent:"center"},children:a.jsx(i,{size:24,strokeWidth:1.5})}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:"600",fontSize:"14px",marginBottom:"4px"},children:s.label}),a.jsx("div",{style:{fontSize:"12px",color:"var(--text-secondary)",lineHeight:"1.4"},children:s.description})]})]},s.type)})})}),a.jsx("div",{style:{padding:"16px 24px",borderTop:"1px solid var(--border-primary)",backgroundColor:"var(--bg-secondary)",display:"flex",justifyContent:"flex-end"},children:a.jsx("button",{onClick:t,style:{padding:"8px 24px",backgroundColor:"transparent",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:"500",transition:"all 0.2s"},onMouseEnter:s=>s.currentTarget.style.backgroundColor="var(--bg-tertiary)",onMouseLeave:s=>s.currentTarget.style.backgroundColor="transparent",children:"取消"})})]}),a.jsx("style",{children:`
25
+ `}})]})},QT=T.memo(ZT),eI=({data:e})=>{const{sourcePosition:t,targetPosition:r}=br(e);return o.jsxs("div",{style:{width:"220px",height:"70px",border:"2px dashed var(--color-accent)",borderRadius:"8px",background:"var(--bg-secondary)",opacity:.75,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"4px",cursor:"default",userSelect:"none"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[o.jsx(vr,{size:14,style:{color:"var(--color-accent)"}}),o.jsx("span",{style:{fontSize:"13px",fontWeight:600,color:"var(--color-accent)"},children:"动态分支"})]}),o.jsx("span",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"运行时生成"}),o.jsx(J.Handle,{type:"target",position:r,style:{background:"var(--color-accent)",width:8,height:8}}),o.jsx(J.Handle,{type:"source",position:t,style:{background:"var(--color-accent)",width:8,height:8}})]})},tI=T.memo(eI),rI=({onSelect:e,onCancel:t})=>{const[r,n]=T.useState("CORE");T.useEffect(()=>{const a=i=>{i.key==="Escape"&&t()};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[t]);const s=Pt.filter(a=>a.category===r&&!a.hidden);return o.jsxs("div",{style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"var(--cm-overlay)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:2e3,backdropFilter:"blur(4px)",animation:"fadeIn 0.2s ease-out"},onClick:t,children:[o.jsxs("div",{className:"glass-panel",style:{backgroundColor:"var(--glass-surface)",borderRadius:"16px",padding:"0",width:"600px",height:"500px",boxShadow:"var(--cm-shadow-float)",border:"1px solid var(--glass-border)",display:"flex",flexDirection:"column",overflow:"hidden"},onClick:a=>a.stopPropagation(),children:[o.jsxs("div",{style:{padding:"20px 24px 0",borderBottom:"1px solid var(--border-primary)",backgroundColor:"var(--bg-secondary)"},children:[o.jsx("h3",{style:{marginTop:0,marginBottom:"16px",color:"var(--text-primary)",fontSize:"18px",fontWeight:"600"},children:"添加任务"}),o.jsx("div",{style:{display:"flex",gap:"24px"},children:LT.map(a=>o.jsx("button",{onClick:()=>n(a.key),style:{background:"none",border:"none",padding:"0 0 12px 0",fontSize:"14px",fontWeight:r===a.key?"600":"500",color:r===a.key?"var(--color-accent)":"var(--text-secondary)",borderBottom:r===a.key?"2px solid var(--color-accent)":"2px solid transparent",cursor:"pointer",transition:"all 0.2s"},children:a.label},a.key))})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",padding:"24px",backgroundColor:"var(--bg-primary)"},children:o.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"12px"},children:s.map(a=>{const i=a.icon;return o.jsxs("button",{onClick:()=>e(a.type),style:{display:"flex",alignItems:"flex-start",gap:"16px",padding:"16px",backgroundColor:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",borderRadius:"12px",cursor:"pointer",textAlign:"left",transition:"all 0.2s",color:"var(--text-primary)",position:"relative",overflow:"hidden"},onMouseEnter:l=>{l.currentTarget.style.borderColor="var(--color-accent)",l.currentTarget.style.backgroundColor="var(--bg-highlight)",l.currentTarget.style.transform="translateY(-2px)",l.currentTarget.style.boxShadow="var(--cm-shadow-card)"},onMouseLeave:l=>{l.currentTarget.style.borderColor="var(--border-primary)",l.currentTarget.style.backgroundColor="var(--bg-tertiary)",l.currentTarget.style.transform="translateY(0)",l.currentTarget.style.boxShadow="none"},children:[o.jsx("div",{style:{padding:"10px",borderRadius:"8px",backgroundColor:"var(--bg-secondary)",color:"var(--color-accent)",display:"flex",alignItems:"center",justifyContent:"center"},children:o.jsx(i,{size:24,strokeWidth:1.5})}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:"600",fontSize:"14px",marginBottom:"4px"},children:a.label}),o.jsx("div",{style:{fontSize:"12px",color:"var(--text-secondary)",lineHeight:"1.4"},children:a.description})]})]},a.type)})})}),o.jsx("div",{style:{padding:"16px 24px",borderTop:"1px solid var(--border-primary)",backgroundColor:"var(--bg-secondary)",display:"flex",justifyContent:"flex-end"},children:o.jsx("button",{onClick:t,style:{padding:"8px 24px",backgroundColor:"transparent",border:"1px solid var(--border-primary)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"13px",fontWeight:"500",transition:"all 0.2s"},onMouseEnter:a=>a.currentTarget.style.backgroundColor="var(--bg-tertiary)",onMouseLeave:a=>a.currentTarget.style.backgroundColor="transparent",children:"取消"})})]}),o.jsx("style",{children:`
24
26
  @keyframes fadeIn {
25
27
  from { opacity: 0; }
26
28
  to { opacity: 1; }
27
29
  }
28
- `})]})},rk=()=>{const{executionData:e,loadSampleExecution:t,importExecutionJSON:r,workflowInstance:n,setSelectedTask:o,nodes:s}=ie(we(m=>({executionData:m.executionData,loadSampleExecution:m.loadSampleExecution,importExecutionJSON:m.importExecutionJSON,workflowInstance:m.workflowInstance,setSelectedTask:m.setSelectedTask,nodes:m.nodes}))),{fitView:i}=q.useReactFlow(),l=m=>{const y=m.target.files?.[0];if(y){const g=new FileReader;g.onload=b=>{try{const x=JSON.parse(b.target?.result);r(x)}catch(x){console.error("Failed to parse execution JSON:",x)}},g.readAsText(y)}};if(!e)return a.jsxs("div",{className:"execution-status-bar",children:[a.jsx("input",{type:"file",id:"execution-json-upload",accept:".json",onChange:l,style:{display:"none"}}),a.jsx("div",{className:"status-item",children:a.jsx("span",{className:"status-label",children:"准备就绪"})}),a.jsxs("div",{style:{display:"flex",gap:"8px"},children:[a.jsx("button",{onClick:t,style:{background:"var(--color-accent)",color:"#fff",border:"none",padding:"6px 14px",borderRadius:"8px",cursor:"pointer",fontSize:"13px",fontWeight:"600",boxShadow:"0 4px 12px rgba(0,0,0,0.2)",transition:"all 0.2s ease"},children:"🚀 加载示例运行"}),a.jsx("button",{onClick:()=>document.getElementById("execution-json-upload")?.click(),title:"上传 Conductor 运行态 JSON",style:{background:"rgba(255,255,255,0.1)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",padding:"6px 14px",borderRadius:"8px",cursor:"pointer",fontSize:"13px",fontWeight:"500",transition:"all 0.2s ease"},children:"📁 导入执行 JSON"})]})]});const c=Object.values(e),u=c.filter(m=>m.status==="COMPLETED").length,d=c.filter(m=>m.status==="FAILED"||m.status==="FAILED_WITH_TERMINAL_ERROR"||m.status==="TIMED_OUT"),p=d.length,h=c.filter(m=>m.status==="IN_PROGRESS"||m.status==="SCHEDULED").length,f=I.useCallback(()=>{if(p===0)return;const m=new Set(d.map(g=>g.taskReferenceName)),y=s.filter(g=>m.has(g.data?.taskReferenceName)).map(g=>g.id);y.length>0&&i({nodes:y.map(g=>({id:g})),duration:500,padding:.3})},[d,s,i,p]);return a.jsxs("div",{className:"execution-status-bar",children:[n&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"status-item",children:[a.jsx("span",{className:"status-label",children:" Workflow ID:"}),a.jsx("span",{className:"status-value highlight",style:{color:"var(--text-primary)",opacity:.8},children:n.workflowId})]}),a.jsx("div",{className:"status-divider"})]}),a.jsxs("div",{className:"status-item",children:[a.jsx("span",{className:"status-label",children:"状态:"}),a.jsx("span",{className:"status-value highlight",style:{color:n?.status==="COMPLETED"?"var(--status-completed)":"var(--status-in-progress)"},children:n?.status||"运行中"})]}),a.jsx("div",{className:"status-divider"}),a.jsxs("div",{className:"status-item",children:[a.jsx("span",{className:"status-label",children:"已完成:"}),a.jsx("span",{className:"status-value",children:u})]}),a.jsxs("div",{className:"status-item",onClick:p>0?f:void 0,style:{cursor:p>0?"pointer":"default",borderRadius:"4px",padding:"2px 6px",transition:"background 0.2s",...p>0?{background:"rgba(239, 68, 68, 0.1)"}:{}},title:p>0?"点击聚焦失败节点":void 0,children:[a.jsx("span",{className:"status-label",style:{color:"var(--status-failed)"},children:"失败:"}),a.jsx("span",{className:"status-value",style:{color:"var(--status-failed)"},children:p})]}),a.jsxs("div",{className:"status-item",children:[a.jsx("span",{className:"status-label",style:{color:"var(--status-in-progress)"},children:"处理中:"}),a.jsx("span",{className:"status-value",style:{color:"var(--status-in-progress)"},children:h})]}),a.jsx("div",{className:"status-divider"}),a.jsx("div",{style:{display:"flex",gap:"8px"},children:a.jsx("button",{onClick:()=>{o({name:"Workflow Global Data",taskReferenceName:"__workflow_global__",type:"SIMPLE"})},style:{background:"rgba(255,255,255,0.05)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",padding:"4px 10px",borderRadius:"6px",cursor:"pointer",fontSize:"11px",fontWeight:"600"},children:"🔍 全局 I/O"})})]})},nk=({isOpen:e,onClose:t,theme:r="dark",onTaskSelect:n})=>{const{validationResults:o,setSelectedTask:s,taskMap:i}=ie(we(m=>({validationResults:m.validationResults,setSelectedTask:m.setSelectedTask,taskMap:m.taskMap}))),{errors:l,warnings:c}=o||{errors:[],warnings:[]},u=m=>{if(m&&m!=="UNKNOWN"){const y=i[m];y&&(n?n(y):s(y))}},d="var(--glass-surface)",p="var(--text-primary)",h="var(--glass-border)",f="var(--text-secondary)";return e?a.jsxs("div",{style:{position:"absolute",top:"80px",right:"24px",width:"320px",maxHeight:"500px",backgroundColor:d,border:`1px solid ${h}`,borderRadius:"12px",boxShadow:"0 10px 25px rgba(0,0,0,0.2)",zIndex:1100,display:"flex",flexDirection:"column",overflow:"hidden",animation:"fadeInSlide 0.2s ease-out"},children:[a.jsx("style",{children:`
30
+ `})]})},nI=()=>{const{executionData:e,loadSampleExecution:t,importExecutionJSON:r,workflowInstance:n,setSelectedTask:s,nodes:a,runState:i,executionError:l}=re($e(v=>({runState:v.runState,executionError:v.executionError,executionData:v.executionData,loadSampleExecution:v.loadSampleExecution,importExecutionJSON:v.importExecutionJSON,workflowInstance:v.workflowInstance,setSelectedTask:v.setSelectedTask,nodes:v.nodes}))),{fitView:c}=J.useReactFlow(),d=v=>{const k=v.target.files?.[0];if(k){const b=new FileReader;b.onload=S=>{try{const j=JSON.parse(S.target?.result);r(j)}catch(j){console.error("Failed to parse execution JSON:",j)}},b.readAsText(k)}},{completedCount:u,failedRefs:p,inProgressCount:f}=T.useMemo(()=>{const v=Object.values(e??{});return{completedCount:v.filter(k=>k.status==="COMPLETED").length,failedRefs:v.filter(k=>rt(k.status).isFailure),inProgressCount:v.filter(k=>rt(k.status).isActive).length}},[e]),m=p.length,h=T.useCallback(()=>{if(m===0)return;const v=new Set(p.map(b=>b.taskReferenceName)),k=a.filter(b=>v.has(b.data?.taskReferenceName)).map(b=>b.id);k.length>0&&c({nodes:k.map(b=>({id:b})),duration:500,padding:.3})},[p,a,c,m]),y=i==="error"&&l?o.jsxs("div",{className:"status-item",role:"alert",style:{color:"var(--cm-status-failed)",display:"inline-flex",alignItems:"center",gap:4,maxWidth:420},title:l,children:[o.jsx(zt,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l})]}):null;if(!e)return o.jsxs("div",{className:"execution-status-bar",children:[o.jsx("input",{type:"file",id:"execution-json-upload",accept:".json",onChange:d,style:{display:"none"}}),o.jsx("div",{className:"status-item",children:o.jsx("span",{className:"status-label",children:i==="polling"?"已发起运行,正在获取状态…":"准备就绪"})}),y,o.jsxs("div",{style:{display:"flex",gap:"8px"},children:[o.jsxs("button",{onClick:t,style:{background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",padding:"6px 14px",borderRadius:"8px",cursor:"pointer",fontSize:"13px",fontWeight:"600",boxShadow:"var(--cm-shadow-card)",transition:"all 0.2s ease"},children:[o.jsx(fn,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"加载示例运行"]}),o.jsxs("button",{onClick:()=>document.getElementById("execution-json-upload")?.click(),title:"上传 Conductor 运行态 JSON",style:{background:"var(--bg-highlight)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",padding:"6px 14px",borderRadius:"8px",cursor:"pointer",fontSize:"13px",fontWeight:"500",transition:"all 0.2s ease"},children:[o.jsx(eb,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"导入执行 JSON"]})]})]});const x=rt(n?.status??"RUNNING"),g=x.icon;return o.jsxs("div",{className:"execution-status-bar",children:[n&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"status-item",children:[o.jsx("span",{className:"status-label",children:"运行 ID:"}),o.jsx("span",{className:"status-value highlight",style:{color:"var(--text-primary)",opacity:.8},children:n.workflowId})]}),o.jsx("div",{className:"status-divider"})]}),o.jsxs("div",{className:"status-item",children:[o.jsx("span",{className:"status-label",children:"状态:"}),o.jsxs("span",{className:"status-value highlight",style:{color:x.color,display:"inline-flex",alignItems:"center",gap:4},title:n?.status,children:[o.jsx(g,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),x.label]})]}),o.jsx("div",{className:"status-divider"}),o.jsxs("div",{className:"status-item",children:[o.jsx("span",{className:"status-label",children:"已完成:"}),o.jsx("span",{className:"status-value",children:u})]}),o.jsxs("div",{className:"status-item",onClick:m>0?h:void 0,style:{cursor:m>0?"pointer":"default",borderRadius:"4px",padding:"2px 6px",transition:"background 0.2s",...m>0?{background:"color-mix(in srgb, var(--cm-status-failed) 10%, transparent)"}:{}},title:m>0?"点击聚焦失败节点":void 0,children:[o.jsx("span",{className:"status-label",style:{color:"var(--status-failed)"},children:"失败:"}),o.jsx("span",{className:"status-value",style:{color:"var(--status-failed)"},children:m})]}),o.jsxs("div",{className:"status-item",children:[o.jsx("span",{className:"status-label",style:{color:"var(--status-in-progress)"},children:"处理中:"}),o.jsx("span",{className:"status-value",style:{color:"var(--status-in-progress)"},children:f})]}),y,o.jsx("div",{className:"status-divider"}),o.jsx("div",{style:{display:"flex",gap:"8px"},children:o.jsxs("button",{onClick:()=>{s({name:"Workflow Global Data",taskReferenceName:"__workflow_global__",type:"SIMPLE"})},style:{background:"var(--bg-highlight)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",padding:"4px 10px",borderRadius:"6px",cursor:"pointer",fontSize:"11px",fontWeight:"600"},children:[o.jsx(Iu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"全局 I/O"]})})]})},sI=({isOpen:e,onClose:t,theme:r="dark",onTaskSelect:n})=>{const{validationResults:s,setSelectedTask:a,taskMap:i}=re($e(h=>({validationResults:h.validationResults,setSelectedTask:h.setSelectedTask,taskMap:h.taskMap}))),{errors:l,warnings:c}=s||{errors:[],warnings:[]},d=h=>{if(h&&h!=="UNKNOWN"){const y=i[h];y&&(n?n(y):a(y))}},u="var(--glass-surface)",p="var(--text-primary)",f="var(--glass-border)",m="var(--text-secondary)";return e?o.jsxs("div",{style:{position:"absolute",top:"80px",right:"24px",width:"320px",maxHeight:"500px",backgroundColor:u,border:`1px solid ${f}`,borderRadius:"12px",boxShadow:"var(--cm-shadow-float)",zIndex:1100,display:"flex",flexDirection:"column",overflow:"hidden",animation:"fadeInSlide 0.2s ease-out"},children:[o.jsx("style",{children:`
29
31
  @keyframes fadeInSlide {
30
32
  from { opacity: 0; transform: translateY(-10px); }
31
33
  to { opacity: 1; transform: translateY(0); }
32
34
  }
33
35
  .health-item:hover {
34
- background-color: ${r==="light"?"#f1f5f9":"rgba(255,255,255,0.05)"};
36
+ background-color: ${r==="light"?"var(--text-primary)":"var(--text-muted)"};
35
37
  }
36
- `}),a.jsxs("div",{style:{padding:"16px",borderBottom:`1px solid ${h}`,display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"rgba(0,0,0,0.02)"},children:[a.jsxs("div",{style:{fontWeight:"bold",fontSize:"14px",display:"flex",alignItems:"center",gap:"8px"},children:[a.jsx("span",{children:"🩺"})," 工作流体检报告"]}),a.jsx("button",{onClick:t,style:{background:"none",border:"none",color:f,cursor:"pointer",fontSize:"18px"},children:"✕"})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:l.length===0&&c.length===0?a.jsxs("div",{style:{padding:"32px 16px",textAlign:"center",color:"#10b981"},children:[a.jsx("div",{style:{fontSize:"32px",marginBottom:"12px"},children:"✅"}),a.jsx("div",{style:{fontWeight:"bold"},children:"未发现问题"}),a.jsx("div",{style:{fontSize:"12px",opacity:.7,marginTop:"4px"},children:"工作流逻辑看起来很完美"})]}):a.jsxs(a.Fragment,{children:[l.map((m,y)=>a.jsxs("div",{className:"health-item",role:"button",tabIndex:m.ref?0:void 0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&u(m.ref)},onClick:()=>u(m.ref),style:{padding:"12px",borderRadius:"8px",marginBottom:"4px",cursor:m.ref?"pointer":"default",borderLeft:"4px solid #ef4444",transition:"background 0.2s"},children:[a.jsxs("div",{style:{fontSize:"12px",color:"#ef4444",fontWeight:"bold",marginBottom:"2px"},children:["ERROR ",m.ref!=="UNKNOWN"&&`[${m.ref}]`]}),a.jsx("div",{style:{fontSize:"13px",color:p},children:m.message})]},`err-${y}`)),c.map((m,y)=>a.jsxs("div",{className:"health-item",role:"button",tabIndex:m.ref?0:void 0,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&u(m.ref)},onClick:()=>u(m.ref),style:{padding:"12px",borderRadius:"8px",marginBottom:"4px",cursor:m.ref?"pointer":"default",borderLeft:"4px solid #f59e0b",transition:"background 0.2s"},children:[a.jsxs("div",{style:{fontSize:"12px",color:"#f59e0b",fontWeight:"bold",marginBottom:"2px"},children:["WARNING ",m.ref!=="UNKNOWN"&&`[${m.ref}]`]}),a.jsx("div",{style:{fontSize:"13px",color:p},children:m.message})]},`warn-${y}`))]})}),a.jsxs("div",{style:{padding:"12px 16px",fontSize:"11px",color:f,borderTop:`1px solid ${h}`,backgroundColor:"rgba(0,0,0,0.02)",display:"flex",justifyContent:"space-between"},children:[a.jsxs("span",{children:["共 ",l.length," 个错误, ",c.length," 个警告"]}),l.length>0&&a.jsx("span",{style:{color:"#ef4444"},children:"无法保存/导出"})]})]}):null},ak=({id:e,source:t,target:r,sourceX:n,sourceY:o,targetX:s,targetY:i,sourcePosition:l,targetPosition:c,style:u={},markerEnd:d,data:p})=>{const[h,f]=I.useState(!1),m=I.useRef(null),y=()=>{const _=p?.edgeType||"default",T={sourceX:n,sourceY:o,sourcePosition:l,targetX:s,targetY:i,targetPosition:c};switch(_){case"step":case"smoothstep":return q.getSmoothStepPath(T);case"straight":return q.getStraightPath(T);default:return q.getBezierPath(T)}},[g,b,x]=y(),v=_=>{_.stopPropagation(),_.preventDefault();const T=new CustomEvent("edgeAddNode",{detail:{id:e,source:t,target:r,edgeData:p}});window.dispatchEvent(T)},k=()=>{m.current&&clearTimeout(m.current),f(!0)},S=()=>{m.current=setTimeout(()=>{f(!1)},100)},j=!!(p?.isAddable??p?.mode==="edit"),w=!!p?.label,N=typeof u?.strokeWidth=="number"?u.strokeWidth:2.2,L=typeof u?.opacity=="number"?u.opacity:1;return a.jsxs(a.Fragment,{children:[a.jsx(q.BaseEdge,{path:g,markerEnd:d,style:{...u,strokeWidth:j&&h?N+1.4:N,stroke:j&&h?"var(--color-accent)":u?.stroke,transition:"stroke 0.2s ease, stroke-width 0.2s ease, opacity 0.25s ease",pointerEvents:"none"}}),j&&a.jsx("path",{d:g,fill:"none",stroke:"transparent",strokeWidth:22,style:{cursor:"pointer",pointerEvents:"all"},onMouseEnter:k,onMouseLeave:S}),(w||j&&h)&&a.jsx(q.EdgeLabelRenderer,{children:a.jsxs("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${b}px,${x}px)`,fontSize:12,pointerEvents:j?"all":"none",zIndex:h?2e3:10,display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",opacity:h?1:L,transition:"opacity 0.2s ease"},className:"nodrag nopan",onMouseEnter:j?k:void 0,onMouseLeave:j?S:void 0,children:[w&&a.jsx("div",{style:{background:"var(--glass-bg-accent)",backdropFilter:"var(--glass-blur)",WebkitBackdropFilter:"var(--glass-blur)",color:"var(--text-primary)",padding:"2px 8px",borderRadius:"999px",fontSize:"11px",fontWeight:600,border:`1px solid ${h?"var(--color-accent)":"var(--border-secondary)"}`,boxShadow:"0 2px 8px rgba(0, 0, 0, 0.22)",whiteSpace:"nowrap",letterSpacing:"0.3px",lineHeight:1.4},children:p.label}),j&&h&&a.jsx("button",{style:{width:"28px",height:"28px",backgroundColor:"var(--color-accent)",color:"#fff",border:"2px solid rgba(255,255,255,0.85)",borderRadius:"50%",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontWeight:700,fontSize:"18px",lineHeight:1,boxShadow:"0 4px 14px rgba(var(--color-accent-rgb), 0.5)",transition:"all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",padding:0},className:"edge-add-button",onClick:v,onMouseDown:_=>_.stopPropagation(),title:"在此处添加任务",children:"+"})]})})]})},Oe=({onClick:e,icon:t,label:r,title:n,disabled:o=!1,active:s=!1,variant:i="default",style:l})=>{let c="var(--bg-tertiary)",u="var(--text-primary)",d="1px solid var(--border-primary)";return i==="primary"?(c="var(--color-accent)",u="#fff",d="none"):i==="danger"?(c=o?"rgba(239, 68, 68, 0.1)":"var(--status-failed)",u=o?"var(--text-secondary)":"#fff",d="none"):s&&(c="var(--bg-secondary)",u="var(--color-accent)",d="1px solid var(--color-accent)"),a.jsxs("button",{onClick:e,disabled:o,title:n,"aria-label":n||r,"aria-pressed":s,"aria-disabled":o,style:{display:"flex",alignItems:"center",justifyContent:"center",gap:r?"6px":"0",background:c,color:u,border:d,borderRadius:"7px",padding:r?"4px 10px":"6px",cursor:o?"not-allowed":"pointer",opacity:o?.45:1,fontSize:"12px",fontWeight:500,transition:"all 0.18s",minWidth:r?"auto":"30px",height:"30px",whiteSpace:"nowrap",boxShadow:i==="default"?"0 1px 2px rgba(0,0,0,0.05)":"none",...l},children:[t&&a.jsx("span",{style:{fontSize:"13px",display:"flex",alignItems:"center"},children:t}),r&&a.jsx("span",{children:r})]})},ok=()=>{const{zoomIn:e,zoomOut:t,fitView:r}=q.useReactFlow();return a.jsx("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"10px"},children:a.jsxs("div",{style:{display:"flex",background:"var(--bg-tertiary)",padding:"4px",borderRadius:"8px",border:"1px solid var(--border-primary)",gap:"4px",boxShadow:"0 2px 5px rgba(0,0,0,0.05)"},children:[a.jsx(Oe,{icon:"➕",title:"放大",onClick:()=>e()}),a.jsx(Oe,{icon:"➖",title:"缩小",onClick:()=>t()}),a.jsx(Oe,{icon:"⤢",title:"适应屏幕",onClick:()=>r({duration:600})})]})})},lg={enabled:!1,status:"COMPLETED",durationMs:"",forceCase:"",reasonForIncompletion:"",outputJsonText:""},sk=({isOpen:e,onClose:t})=>{const{workflowDef:r,theme:n,themeColor:o,runLocalSandboxDryRun:s}=ie(we($=>({workflowDef:$.workflowDef,theme:$.theme,themeColor:$.themeColor,runLocalSandboxDryRun:$.runLocalSandboxDryRun}))),i=n==="light",[l,c]=I.useState("input"),[u,d]=I.useState(""),[p,h]=I.useState(null),[f,m]=I.useState({}),[y,g]=I.useState(""),[b,x]=I.useState(null),[v,k]=I.useState(2),S=I.useMemo(()=>r?.tasks?pt(r.tasks):[],[r]),j=I.useMemo(()=>`sandbox_mock_cfg_${r?.name||"default"}`,[r?.name]);I.useEffect(()=>{if(!e||!r)return;const $=qt(r);let C=!1;try{const G=sessionStorage.getItem(j);if(G){const Q=JSON.parse(G);Q.inputJsonText?d(Q.inputJsonText):d(JSON.stringify($,null,2)),Q.taskDrafts&&typeof Q.taskDrafts=="object"&&m(Q.taskDrafts),typeof Q.maxLoopIterations=="number"&&k(Q.maxLoopIterations),C=!0}}catch{}C||(d(JSON.stringify($,null,2)),m({}),k(2)),h(null),x(null),S.length>0&&!y&&g(S[0].taskReferenceName)},[e,r,j]),I.useEffect(()=>{S.length>0&&!S.some($=>$.taskReferenceName===y)&&g(S[0].taskReferenceName)},[S,y]);const w=I.useMemo(()=>{const $=[];for(const C of S)if(C.type==="SWITCH"||C.type==="DECISION"){const G=Object.keys(C.decisionCases||{});if(G.length===0)continue;const Q=C.caseValueParam||"case_value",F=String(C.inputParameters?.[Q]??C.expression??"").match(/\$\{\s*workflow\.input\.([a-zA-Z0-9_]+)\s*\}/);$.push({switchRef:C.taskReferenceName,switchName:C.name||C.taskReferenceName,inputField:F?F[1]:null,cases:G})}return $},[S]);if(!e||!r||typeof document>"u")return null;const N=S.find($=>$.taskReferenceName===y)||S[0]||null,L=N&&f[N.taskReferenceName]||lg,_=$=>{if(!N)return;const C=N.taskReferenceName,Q={...f[C]||{...lg,outputJsonText:JSON.stringify(kr(N),null,2)},...$,enabled:$.enabled!==void 0?$.enabled:!0};m(M=>({...M,[C]:Q})),x(null)},T=Object.values(f).filter($=>$.enabled).length,D=($,C)=>{try{const G=JSON.parse(u||"{}");G[$]=C,d(JSON.stringify(G,null,2)),h(null)}catch{h("请先修复当前 JSON 语法错误后再点击快捷赋值")}},R=()=>{let $={};try{if($=u.trim()?JSON.parse(u):{},typeof $!="object"||Array.isArray($)||$===null){h("workflow.input 必须是一个 JSON 对象 {...}"),c("input");return}}catch(G){h(`JSON 语法错误: ${G?.message||"格式不合法"}`),c("input");return}const C={};for(const[G,Q]of Object.entries(f)){if(!Q.enabled)continue;let M;if(Q.outputJsonText.trim())try{M=JSON.parse(Q.outputJsonText)}catch(H){g(G),c("tasks"),x(`节点 [${G}] 的自定义输出 JSON 语法有误: ${H?.message||""}`);return}const F=Q.durationMs.trim()!==""&&!Number.isNaN(Number(Q.durationMs))?Number(Q.durationMs):void 0;C[G]={__isMockOverride:!0,status:Q.status,durationMs:F,forceCase:Q.forceCase||void 0,reasonForIncompletion:Q.reasonForIncompletion.trim()||void 0,outputData:M}}try{sessionStorage.setItem(j,JSON.stringify({inputJsonText:u,taskDrafts:f,maxLoopIterations:v}))}catch{}s($,C,v),t()},A=i?"#ffffff":"#0f172a",E=i?"#f8fafc":"#1e293b",P=i?"#f1f5f9":"#020617",z=i?"#0f172a":"#f8fafc",J=i?"#64748b":"#94a3b8",B=i?"rgba(148, 163, 184, 0.3)":"rgba(148, 163, 184, 0.18)";return Qe.createPortal(a.jsx("div",{"data-mode":n,"data-brand":o,style:{position:"fixed",inset:0,zIndex:9500,background:"rgba(2, 6, 23, 0.65)",backdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",padding:20},onClick:t,children:a.jsxs("div",{style:{width:"min(920px, 96vw)",height:"min(660px, 90vh)",background:A,color:z,borderRadius:14,border:`1px solid ${B}`,boxShadow:"0 24px 64px rgba(0, 0, 0, 0.5)",display:"flex",flexDirection:"column",overflow:"hidden"},onClick:$=>$.stopPropagation(),children:[a.jsxs("div",{style:{padding:"16px 20px",borderBottom:`1px solid ${B}`,display:"flex",alignItems:"center",justifyContent:"space-between",background:E},children:[a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:15,fontWeight:700},children:[a.jsx("span",{children:"🧪 本地沙箱试运行 · 人工模拟数据控制台"}),a.jsx("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:999,background:"rgba(16, 185, 129, 0.14)",color:"#10b981",fontWeight:600},children:"0ms 确定性求值"})]}),a.jsxs("div",{style:{fontSize:12,color:J,marginTop:4},children:["自定义工作流启动入参 (",a.jsx("code",{children:"workflow.input"}),")、指定任意节点的 Mock 输出、模拟节点异常中断或强制切换 ",a.jsx("code",{children:"SWITCH"})," 分支走向"]})]}),a.jsx("button",{type:"button",onClick:t,style:{background:"none",border:"none",color:J,fontSize:18,cursor:"pointer",padding:"4px 8px"},children:"✕"})]}),a.jsx("div",{style:{display:"flex",gap:8,padding:"10px 20px",borderBottom:`1px solid ${B}`,background:A},children:[{id:"input",label:"📥 1. 工作流启动入参 (workflow.input)"},{id:"tasks",label:`🎯 2. 节点级人工 Mock & 故障注入 ${T>0?`(${T} 个已启用)`:""}`},{id:"engine",label:`⚙️ 3. 循环轮次与引擎参数 (${v} 轮)`}].map($=>{const C=l===$.id;return a.jsx("button",{type:"button",onClick:()=>c($.id),style:{padding:"7px 14px",borderRadius:8,border:C?"1px solid #3b82f6":`1px solid ${B}`,background:C?"rgba(59, 130, 246, 0.14)":"transparent",color:C?"#3b82f6":J,fontSize:12,fontWeight:C?700:500,cursor:"pointer"},children:$.label},$.id)})}),a.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",overflow:"hidden"},children:[l==="input"&&a.jsxs("div",{style:{flex:1,padding:20,display:"flex",flexDirection:"column",gap:12,overflowY:"auto"},children:[w.length>0&&a.jsxs("div",{style:{padding:"10px 14px",borderRadius:10,background:"rgba(59, 130, 246, 0.08)",border:"1px solid rgba(59, 130, 246, 0.25)",display:"flex",flexDirection:"column",gap:8},children:[a.jsx("div",{style:{fontSize:12,fontWeight:700,color:"#38bdf8"},children:"🧭 条件分支 (SWITCH) 快速路由切换器"}),w.map($=>a.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,fontSize:12},children:[a.jsxs("span",{style:{color:J},children:["节点 ",a.jsx("b",{children:$.switchName})," (",a.jsx("code",{children:$.switchRef}),")",$.inputField?` 绑定入参字段 "${$.inputField}" — 点击一键切换分支:`:" 可选分支 (可在 Tab 2 强制指定):"]}),$.cases.map(C=>a.jsx("button",{type:"button",onClick:()=>{$.inputField?D($.inputField,C):(g($.switchRef),c("tasks"))},style:{padding:"2px 9px",borderRadius:999,border:"1px solid rgba(56, 189, 248, 0.45)",background:"rgba(56, 189, 248, 0.14)",color:"#38bdf8",fontSize:11,fontFamily:"monospace",fontWeight:600,cursor:"pointer"},children:$.inputField?`${$.inputField} = "${C}"`:`走分支: ${C}`},C))]},$.switchRef))]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("span",{style:{fontSize:12,fontWeight:600,color:J},children:["编辑 ",a.jsx("code",{children:"workflow.input"})," JSON(所有节点的 ",a.jsx("code",{children:"${workflow.input.*}"})," 将实时读取此处的值):"]}),a.jsx("button",{type:"button",onClick:()=>{const $=qt(r);d(JSON.stringify($,null,2)),h(null)},style:{fontSize:11,padding:"4px 10px",borderRadius:6,border:`1px solid ${B}`,background:E,color:J,cursor:"pointer"},children:"↺ 重置为默认推导值"})]}),p&&a.jsxs("div",{style:{padding:"8px 12px",borderRadius:8,background:"rgba(239, 68, 68, 0.14)",border:"1px solid rgba(239, 68, 68, 0.4)",color:"#f87171",fontSize:12},children:["⚠️ ",p]}),a.jsx("textarea",{value:u,onChange:$=>{d($.target.value),h(null)},spellCheck:!1,style:{flex:1,minHeight:240,width:"100%",boxSizing:"border-box",padding:14,borderRadius:10,border:`1px solid ${p?"#ef4444":B}`,background:P,color:z,fontFamily:"monospace",fontSize:13,lineHeight:1.55,resize:"none",outline:"none"}})]}),l==="tasks"&&a.jsxs("div",{style:{flex:1,display:"grid",gridTemplateColumns:"260px 1fr",minHeight:0},children:[a.jsxs("div",{style:{borderRight:`1px solid ${B}`,overflowY:"auto",padding:"10px 8px",background:E,display:"flex",flexDirection:"column",gap:4},children:[a.jsxs("div",{style:{fontSize:11,fontWeight:700,color:J,padding:"4px 8px 8px",textTransform:"uppercase"},children:["选择要定制 Mock 的节点 (",S.length,")"]}),S.map($=>{const C=$.taskReferenceName,G=N?.taskReferenceName===C,Q=f[C],M=!!Q?.enabled;return a.jsxs("div",{onClick:()=>{g(C),x(null)},style:{padding:"8px 10px",borderRadius:8,cursor:"pointer",background:G?"rgba(59, 130, 246, 0.16)":"transparent",border:G?"1px solid rgba(59, 130, 246, 0.45)":"1px solid transparent",display:"flex",alignItems:"center",justifyContent:"space-between",gap:6},children:[a.jsxs("div",{style:{minWidth:0},children:[a.jsx("div",{style:{fontSize:12,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:$.name||C}),a.jsxs("div",{style:{fontSize:10,color:J,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[C," · ",$.type]})]}),M&&a.jsx("span",{style:{fontSize:10,padding:"2px 6px",borderRadius:999,background:Q.status==="FAILED"||Q.status==="TIMED_OUT"?"rgba(239, 68, 68, 0.2)":"rgba(16, 185, 129, 0.2)",color:Q.status==="FAILED"||Q.status==="TIMED_OUT"?"#f87171":"#34d399",fontWeight:700,flexShrink:0},children:Q.status==="COMPLETED"?"已定制":Q.status})]},C)})]}),N?a.jsxs("div",{style:{padding:18,overflowY:"auto",display:"flex",flexDirection:"column",gap:14},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:10,borderBottom:`1px solid ${B}`},children:[a.jsxs("div",{children:[a.jsxs("div",{style:{fontSize:14,fontWeight:700},children:[N.name||N.taskReferenceName," ",a.jsxs("code",{style:{fontSize:12,color:"#38bdf8",fontWeight:500},children:["(",N.taskReferenceName,")"]})]}),a.jsxs("div",{style:{fontSize:11,color:J,marginTop:2},children:["节点类型: ",a.jsx("b",{children:N.type})]})]}),a.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,fontSize:12,fontWeight:700,cursor:"pointer",padding:"6px 12px",borderRadius:8,background:L.enabled?"rgba(16, 185, 129, 0.14)":E,border:`1px solid ${L.enabled?"#10b981":B}`,color:L.enabled?"#10b981":J},children:[a.jsx("input",{type:"checkbox",checked:L.enabled,onChange:$=>_({enabled:$.target.checked})}),"启用该节点人工 Mock"]})]}),a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 200px",gap:12},children:[a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:J,marginBottom:6},children:"模拟执行状态 (可注入异常以测试断路与错误诊断)"}),a.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[{id:"COMPLETED",label:"✅ 正常成功"},{id:"FAILED",label:"❌ 失败中断 (FAILED)"},{id:"TIMED_OUT",label:"⏱️ 超时中断 (TIMED_OUT)"},{id:"COMPLETED_WITH_ERRORS",label:"⚠️ 带错完成"}].map($=>{const C=L.status===$.id;return a.jsx("button",{type:"button",onClick:()=>_({status:$.id}),style:{padding:"5px 10px",borderRadius:6,fontSize:11,fontWeight:C?700:500,cursor:"pointer",border:C?"1px solid #38bdf8":`1px solid ${B}`,background:C?"rgba(56, 189, 248, 0.16)":E,color:C?"#38bdf8":z},children:$.label},$.id)})})]}),a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:J,marginBottom:6},children:"模拟耗时 (ms,可制造并发瓶颈)"}),a.jsx("input",{type:"number",min:0,placeholder:"默认自动耗时 (如 120)",value:L.durationMs,onChange:$=>_({durationMs:$.target.value}),style:{width:"100%",boxSizing:"border-box",padding:"6px 10px",borderRadius:6,border:`1px solid ${B}`,background:P,color:z,fontSize:12}})]})]}),(L.status==="FAILED"||L.status==="TIMED_OUT")&&a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:"#f87171",marginBottom:6},children:"模拟异常原因 (reasonForIncompletion)"}),a.jsx("input",{type:"text",placeholder:"例如: Connection refused to upstream payment gateway (502)",value:L.reasonForIncompletion,onChange:$=>_({reasonForIncompletion:$.target.value}),style:{width:"100%",boxSizing:"border-box",padding:"7px 10px",borderRadius:6,border:"1px solid rgba(239, 68, 68, 0.45)",background:P,color:z,fontSize:12}})]}),(N.type==="SWITCH"||N.type==="DECISION")&&a.jsxs("div",{style:{padding:"10px 12px",borderRadius:8,background:"rgba(245, 158, 11, 0.1)",border:"1px solid rgba(245, 158, 11, 0.35)"},children:[a.jsx("label",{style:{display:"block",fontSize:11,fontWeight:700,color:"#fbbf24",marginBottom:6},children:"🔀 强制指定 SWITCH 路由分支 (无视入参表达式直接走指定分支)"}),a.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[a.jsx("button",{type:"button",onClick:()=>_({forceCase:""}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,cursor:"pointer",border:L.forceCase?`1px solid ${B}`:"1px solid #fbbf24",background:L.forceCase?E:"rgba(245, 158, 11, 0.2)",color:L.forceCase?J:"#fbbf24",fontWeight:L.forceCase?500:700},children:"🔄 根据入参自动求值"}),Object.keys(N.decisionCases||{}).map($=>{const C=L.forceCase===$;return a.jsxs("button",{type:"button",onClick:()=>_({forceCase:$}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,fontFamily:"monospace",cursor:"pointer",border:C?"1px solid #fbbf24":`1px solid ${B}`,background:C?"rgba(245, 158, 11, 0.22)":E,color:C?"#fbbf24":z,fontWeight:C?700:500},children:["分支: ",$]},$)}),N.defaultCase&&a.jsx("button",{type:"button",onClick:()=>_({forceCase:"__default__"}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,fontFamily:"monospace",cursor:"pointer",border:L.forceCase==="__default__"?"1px solid #fbbf24":`1px solid ${B}`,background:L.forceCase==="__default__"?"rgba(245, 158, 11, 0.22)":E,color:L.forceCase==="__default__"?"#fbbf24":z},children:"默认分支 (defaultCase)"})]})]}),a.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("label",{style:{fontSize:11,fontWeight:600,color:J},children:["自定义节点输出数据 (",a.jsx("code",{children:`\${${N.taskReferenceName}.output.*}`})," 将读取此 JSON):"]}),a.jsx("button",{type:"button",onClick:()=>{const $=kr(N);_({outputJsonText:JSON.stringify($,null,2)})},style:{fontSize:11,padding:"3px 9px",borderRadius:6,border:`1px solid ${B}`,background:E,color:"#38bdf8",cursor:"pointer",fontWeight:600},children:"📋 填入默认合成输出模板"})]}),b&&a.jsxs("div",{style:{padding:"6px 10px",borderRadius:6,background:"rgba(239, 68, 68, 0.14)",border:"1px solid rgba(239, 68, 68, 0.4)",color:"#f87171",fontSize:11},children:["⚠️ ",b]}),a.jsx("textarea",{value:L.outputJsonText,placeholder:`留空则自动按 ${N.type} 类型合成输出,或点击右上角「填入默认合成输出模板」进行修改...`,onChange:$=>_({outputJsonText:$.target.value}),spellCheck:!1,style:{flex:1,minHeight:160,width:"100%",boxSizing:"border-box",padding:12,borderRadius:8,border:`1px solid ${b?"#ef4444":B}`,background:P,color:z,fontFamily:"monospace",fontSize:12,lineHeight:1.5,resize:"vertical",outline:"none"}})]})]}):a.jsx("div",{style:{padding:32,color:J},children:"当前工作流暂无任务节点"})]}),l==="engine"&&a.jsx("div",{style:{flex:1,padding:24,display:"flex",flexDirection:"column",gap:18},children:a.jsxs("div",{style:{padding:16,borderRadius:10,border:`1px solid ${B}`,background:E,display:"flex",flexDirection:"column",gap:10},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{children:[a.jsx("div",{style:{fontSize:13,fontWeight:700},children:"🔄 DO_WHILE 循环容器最大模拟迭代轮次"}),a.jsxs("div",{style:{fontSize:12,color:J,marginTop:2},children:["控制沙箱遇到 ",a.jsx("code",{children:"DO_WHILE"})," 节点时自动展开执行的循环轮次数(可在画布循环容器头部切换查看每一轮的子任务状态)"]})]}),a.jsxs("span",{style:{fontSize:16,fontWeight:800,color:"#38bdf8",fontFamily:"monospace"},children:[v," 轮"]})]}),a.jsx("input",{type:"range",min:1,max:8,value:v,onChange:$=>k(Number($.target.value)),style:{width:"100%",accentColor:"#38bdf8",cursor:"pointer"}}),a.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,color:J},children:[a.jsx("span",{children:"1 轮 (单次验证)"}),a.jsx("span",{children:"2 轮 (默认推荐)"}),a.jsx("span",{children:"5 轮"}),a.jsx("span",{children:"8 轮 (压测多轮轨迹)"})]})]})})]}),a.jsxs("div",{style:{padding:"12px 20px",borderTop:`1px solid ${B}`,background:E,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("button",{type:"button",onClick:()=>{m({});const $=qt(r);d(JSON.stringify($,null,2)),k(2),sessionStorage.removeItem(j)},style:{padding:"7px 12px",borderRadius:8,border:`1px solid ${B}`,background:"transparent",color:J,fontSize:12,cursor:"pointer"},children:"🧹 清空全部人工 Mock 配置"}),a.jsxs("div",{style:{display:"flex",gap:10},children:[a.jsx("button",{type:"button",onClick:t,style:{padding:"8px 16px",borderRadius:8,border:`1px solid ${B}`,background:"transparent",color:z,fontSize:12,fontWeight:600,cursor:"pointer"},children:"取消"}),a.jsx("button",{type:"button",onClick:R,style:{padding:"8px 20px",borderRadius:8,border:"none",background:"linear-gradient(135deg, #2563eb, #0284c7)",color:"#ffffff",fontSize:12,fontWeight:700,cursor:"pointer",boxShadow:"0 4px 14px rgba(37, 99, 235, 0.35)"},children:"⚡ 应用模拟数据并启动沙箱试运行"})]})]})]})}),document.body)},Al=()=>a.jsx("div",{style:{width:"1px",height:"18px",background:"var(--border-primary)",margin:"0 2px",alignSelf:"center",flexShrink:0}}),ik=({onShowHealthCheck:e,showHealthCheck:t,onShowSettings:r,executionActions:n})=>{const{mode:o,setMode:s,validationResults:i,workflowInstance:l,workflowDef:c,showDataLineage:u,setShowDataLineage:d,showWaterfallPanel:p,setShowWaterfallPanel:h,runLocalSandboxDryRun:f,inlineCopilotTaskRef:m,setInlineCopilotTaskRef:y,selectedTask:g}=ie(we($=>({mode:$.mode,setMode:$.setMode,validationResults:$.validationResults,workflowInstance:$.workflowInstance,workflowDef:$.workflowDef,showDataLineage:$.showDataLineage,setShowDataLineage:$.setShowDataLineage,showWaterfallPanel:$.showWaterfallPanel,setShowWaterfallPanel:$.setShowWaterfallPanel,runLocalSandboxDryRun:$.runLocalSandboxDryRun,inlineCopilotTaskRef:$.inlineCopilotTaskRef,setInlineCopilotTaskRef:$.setInlineCopilotTaskRef,selectedTask:$.selectedTask}))),b=ie.temporal,{undo:x,redo:v,pastStates:k,futureStates:S}=$r(b,$=>$),[j,w]=I.useState(!1),[N,L]=I.useState(!1),_=I.useRef(null);I.useEffect(()=>{if(!j)return;const $=C=>{_.current&&!_.current.contains(C.target)&&w(!1)};return document.addEventListener("mousedown",$),()=>document.removeEventListener("mousedown",$)},[j]);const T=(i?.errors?.length||0)>0,D=l?.status,R=l?.workflowId??"",A=D==="RUNNING",E=D==="PAUSED",P=D==="FAILED"||D==="TIMED_OUT"||D==="TERMINATED",z=D==="COMPLETED",J=c?.restartable===!0&&(P||z),B=n?.allowOperations!==!1;return a.jsxs("div",{className:"action-bar",style:{display:"flex",gap:"6px",alignItems:"center",flexWrap:"wrap",padding:"5px 8px",borderRadius:"10px",background:"var(--bg-secondary)",backdropFilter:"blur(14px)",border:"1px solid var(--border-primary)",boxShadow:"0 6px 24px rgba(0, 0, 0, 0.18)"},children:[c&&a.jsxs(a.Fragment,{children:[a.jsx(Oe,{icon:"🔗",label:"数据血缘",title:"W-LSP 数据流血缘图谱 (Data Flow Graph)",onClick:()=>d(!u),active:u}),o==="edit"&&a.jsx(Oe,{icon:"⌘K",label:"AI微调",title:"画布内联 AI 指令栏 (Cmd+K)",onClick:()=>y(m?null:g?.taskReferenceName||"__canvas_root__"),active:!!m})]}),o==="edit"&&a.jsxs(a.Fragment,{children:[a.jsx(Al,{}),a.jsxs("div",{style:{display:"inline-flex",gap:"3px",alignItems:"center"},children:[a.jsx(Oe,{icon:"↺",title:"撤销 (Cmd+Z)",onClick:()=>x(),disabled:k.length===0}),a.jsx(Oe,{icon:"↻",title:"重做 (Cmd+Shift+Z)",onClick:()=>v(),disabled:S.length===0})]}),a.jsx(Oe,{icon:"🩺",label:T?`错误 (${i.errors.length})`:"诊断",title:"流程健康检查",onClick:e,active:t,variant:T?"danger":"secondary"}),a.jsx(Oe,{icon:"⚙️",label:"配置",title:"工作流全局配置",onClick:()=>r?.()})]}),c&&o!=="run"&&a.jsxs(a.Fragment,{children:[a.jsx(Al,{}),a.jsxs("div",{style:{display:"inline-flex",alignItems:"center"},children:[a.jsx(Oe,{icon:"⚡",label:"沙箱试运行",title:"一键启动浏览器本地确定性沙箱试运行 (0ms Dry-Run)",onClick:()=>f(),variant:"primary",style:{borderRadius:"7px 0 0 7px",borderRight:"1px solid rgba(255, 255, 255, 0.25)"}}),a.jsx(Oe,{icon:"🧪",title:"人工模拟数据配置台 (自定义 workflow.input / 节点 Mock 输出 / 故障注入 / 分支路由)",onClick:()=>L(!0),variant:"primary",style:{borderRadius:"0 7px 7px 0",padding:"4px 7px",minWidth:"26px"}})]})]}),o==="run"&&a.jsxs(a.Fragment,{children:[a.jsx(Al,{}),a.jsx(Oe,{icon:"🧪",label:"模拟数据重跑",title:"打开沙箱人工模拟数据配置台,调整入参、分支或注入节点故障后重跑",onClick:()=>L(!0)}),a.jsx(Oe,{icon:"📊",label:"瀑布流回放",title:"并发甘特瀑布流与时间旅行调试器 (Time-Travel)",onClick:()=>h(!p),active:p}),a.jsx(Oe,{icon:"✏️",label:"返回编辑",title:"退出试跑/运行态视图,返回工作流编排画布",onClick:()=>s("edit")})]}),a.jsx(sk,{isOpen:N,onClose:()=>L(!1)}),o==="run"&&l&&n&&a.jsxs(a.Fragment,{children:[E&&n.onResume&&a.jsx(Oe,{icon:a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("path",{d:"M4 3l9 5-9 5z"})}),label:"继续",title:B?"继续执行工作流":"操作权限受限",onClick:()=>B&&n.onResume(R),disabled:!B,variant:"primary"}),A&&n.onPause&&a.jsx(Oe,{icon:a.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:[a.jsx("rect",{x:"4",y:"3",width:"3",height:"10",rx:"1"}),a.jsx("rect",{x:"9",y:"3",width:"3",height:"10",rx:"1"})]}),label:"暂停",title:B?"暂停工作流执行":"操作权限受限",onClick:()=>B&&n.onPause(R),disabled:!B}),(A||E)&&n.onTerminate&&a.jsx(Oe,{icon:a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"1"})}),label:"终止",title:B?"终止工作流执行":"操作权限受限",onClick:()=>B&&n.onTerminate(R),disabled:!B,variant:"danger"}),P&&n.onRetry&&a.jsx(Oe,{icon:a.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[a.jsx("path",{d:"M13 2v4h-4"}),a.jsx("path",{d:"M13 6A7 7 0 1 1 9.5 2.5"})]}),label:"重试",title:B?"重试失败的工作流":"操作权限受限",onClick:()=>B&&n.onRetry(R),disabled:!B,variant:"primary"}),J&&n.onRestart&&a.jsxs("div",{ref:_,style:{position:"relative",display:"flex"},children:[a.jsxs("button",{disabled:!B,onClick:()=>B&&n.onRestart(R,{useLatestDef:!0}),title:B?"使用当前最新定义版本重新运行":"操作权限受限",style:{display:"flex",alignItems:"center",gap:"6px",background:"var(--bg-tertiary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRight:"none",borderRadius:"6px 0 0 6px",padding:"6px 10px",cursor:B?"pointer":"not-allowed",opacity:B?1:.5,fontSize:"13px",fontWeight:500,height:"32px"},children:[a.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[a.jsx("path",{d:"M3 14v-4h4"}),a.jsx("path",{d:"M3 10A7 7 0 1 1 6.5 13.5"})]}),"重启"]}),a.jsx("button",{disabled:!B,onClick:()=>B&&w($=>!$),title:B?"展开重启版本选项":"操作权限受限",style:{display:"flex",alignItems:"center",justifyContent:"center",background:B&&j?"var(--bg-secondary)":"var(--bg-tertiary)",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",borderRadius:"0 6px 6px 0",padding:"6px 6px",cursor:B?"pointer":"not-allowed",opacity:B?1:.5,height:"32px",width:"22px",fontSize:"10px"},children:a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:a.jsx("path",{d:"M1 3l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})})}),j&&a.jsxs("div",{style:{position:"absolute",top:"36px",right:0,background:"var(--glass-surface)",backdropFilter:"blur(12px)",border:"1px solid var(--glass-border)",borderRadius:"10px",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",zIndex:2e3,minWidth:"180px",overflow:"hidden"},children:[a.jsx("div",{style:{padding:"6px 12px 4px",fontSize:"11px",color:"var(--text-secondary)",fontWeight:600,letterSpacing:"0.5px",textTransform:"uppercase"},children:"选择版本"}),a.jsxs("button",{onClick:()=>{n.onRestart(R,{useLatestDef:!0}),w(!1)},style:cg,onMouseEnter:$=>$.currentTarget.style.background="var(--bg-secondary)",onMouseLeave:$=>$.currentTarget.style.background="transparent",children:[a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("circle",{cx:"8",cy:"8",r:"6"}),a.jsx("path",{d:"M8 5v3l2 1"})]}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,fontSize:"13px"},children:"当前版本"}),a.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"使用最新工作流定义"})]})]}),a.jsxs("button",{onClick:()=>{n.onRestart(R,{useLatestDef:!1}),w(!1)},style:cg,onMouseEnter:$=>$.currentTarget.style.background="var(--bg-secondary)",onMouseLeave:$=>$.currentTarget.style.background="transparent",children:[a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("rect",{x:"3",y:"2",width:"10",height:"12",rx:"1"}),a.jsx("path",{d:"M6 6h4M6 9h3"})]}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,fontSize:"13px"},children:"执行版本"}),a.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"使用本次运行时的定义"})]})]})]})]})]})]})},cg={display:"flex",alignItems:"center",gap:"10px",width:"100%",padding:"8px 12px",background:"transparent",border:"none",cursor:"pointer",textAlign:"left",color:"var(--text-primary)",transition:"background 0.15s"},lk=[{id:"basic",label:"基本信息"},{id:"timeout",label:"超时与容错"},{id:"params",label:"参数配置"},{id:"advanced",label:"高级设置"}],ck=({isOpen:e,onClose:t})=>{const{workflowDef:r,updateWorkflowProperties:n,mode:o}=ie(we(R=>({workflowDef:R.workflowDef,updateWorkflowProperties:R.updateWorkflowProperties,mode:R.mode}))),[s,i]=I.useState(r),[l,c]=I.useState("basic"),u=o!=="edit";I.useEffect(()=>{r&&i(r)},[r,e]);const d=I.useCallback(R=>{R.key==="Escape"&&t()},[t]);if(I.useEffect(()=>{if(e)return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[e,d]),!e||!s)return null;const p="var(--text-primary)",h="var(--glass-border)",f="var(--bg-tertiary)",m="var(--text-secondary)",y=(R,A)=>{if(!s||u)return;const E={...s,[R]:A};i(E),n({[R]:A})},g=(R,A,E)=>{if(!s||u)return;const z={...s[R]||{},[A]:E};i(J=>({...J,[R]:z})),n({[R]:z})},b=(R,A)=>{if(!(!s||u))try{const E=JSON.parse(A),P={...s,[R]:E};i(P),n({[R]:E})}catch{i(E=>({...E,[`_${R}_str`]:A}))}},x={width:"100%",padding:"10px 14px",borderRadius:"8px",border:`1px solid ${h}`,background:f,color:p,fontSize:"14px",outline:"none",boxSizing:"border-box"},v={display:"block",fontSize:"11px",color:m,marginBottom:"8px",fontWeight:600},k=(R,A,E="text",P)=>a.jsxs("div",{style:{marginBottom:"20px"},children:[a.jsx("label",{style:v,children:R.toUpperCase()}),a.jsx("input",{className:"wsp-input",type:E,value:s?.[A]??"",onChange:z=>y(A,E==="number"?z.target.value===""?0:parseInt(z.target.value):z.target.value),disabled:u||P?.readOnly,placeholder:P?.placeholder,style:{...x,opacity:u||P?.readOnly?.6:1}})]}),S=(R,A,E=!1,P=6)=>{const z=s?.[`_${A}_str`]!==void 0?s[`_${A}_str`]:typeof s?.[A]=="object"?JSON.stringify(s[A],null,2):s?.[A];return a.jsxs("div",{style:{marginBottom:"20px"},children:[a.jsxs("label",{style:v,children:[R.toUpperCase()," ",E&&"(JSON)"]}),a.jsx("textarea",{className:"wsp-input",value:z||"",onChange:J=>E?b(A,J.target.value):y(A,J.target.value),rows:P,disabled:u,style:{...x,fontSize:"13px",fontFamily:E?"var(--font-mono)":"inherit",resize:"vertical",opacity:u?.6:1}})]})},j=(R,A,E)=>a.jsxs("div",{style:{marginBottom:"20px"},children:[a.jsx("label",{style:v,children:R.toUpperCase()}),a.jsx("select",{className:"wsp-input",value:s?.[A]??E[0]?.value,onChange:P=>y(A,P.target.value),disabled:u,style:{...x,opacity:u?.6:1,cursor:u?"not-allowed":"pointer"},children:E.map(P=>a.jsx("option",{value:P.value,children:P.label},P.value))})]}),w=(R,A)=>{const E=!!s?.[A];return a.jsxs("div",{style:{marginBottom:"20px",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("label",{style:{fontSize:"13px",color:p},children:R}),a.jsx("button",{type:"button",role:"switch","aria-checked":E,onClick:()=>!u&&y(A,!E),disabled:u,style:{width:"44px",height:"24px",borderRadius:"12px",border:"none",background:E?"var(--color-accent)":"var(--border-primary)",position:"relative",cursor:u?"not-allowed":"pointer",transition:"background 0.2s",opacity:u?.6:1,flexShrink:0},children:a.jsx("span",{style:{position:"absolute",top:"2px",left:E?"22px":"2px",width:"20px",height:"20px",borderRadius:"50%",background:"var(--text-inverse)",transition:"left 0.2s",boxShadow:"0 1px 3px rgba(0,0,0,0.2)"}})})]})},N=()=>a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"3fr 1fr",gap:"20px"},children:[k("工作流名称","name"),k("版本号","version","number")]}),S("描述信息","description",!1,3),k("负责人邮箱","ownerEmail","text",{placeholder:"owner@example.com"}),k("Schema 版本","schemaVersion","number",{readOnly:!0})]}),L=()=>a.jsxs(a.Fragment,{children:[j("超时策略","timeoutPolicy",[{value:"ALERT_ONLY",label:"ALERT_ONLY — 仅告警"},{value:"TIME_OUT_WF",label:"TIME_OUT_WF — 超时终止"}]),a.jsxs("div",{children:[k("超时秒数","timeoutSeconds","number",{placeholder:"0 表示不超时"}),s?.timeoutPolicy==="ALERT_ONLY"&&a.jsx("p",{style:{fontSize:"11px",color:m,marginTop:"-12px",marginBottom:"20px"},children:"当前策略为 ALERT_ONLY,超时仅触发告警,不会终止工作流。"})]}),k("失败补偿工作流","failureWorkflow","text",{placeholder:"输入补偿工作流名称"}),w("允许重启 (restartable)","restartable")]}),_=()=>{const R=at(s?.inputParameters),A=B=>{u||y("inputParameters",B)},E=()=>{const B=[...R,{name:`param_${R.length+1}`,type:"string",required:!1}];A(B)},P=B=>{const $=R.filter((C,G)=>G!==B);A($)},z=(B,$,C)=>{const G=R.map((Q,M)=>M===B?{...Q,[$]:C}:Q);A(G)},J={padding:"6px 10px",borderRadius:"6px",border:`1px solid ${h}`,background:f,color:p,fontSize:"12px",outline:"none",fontFamily:"inherit"};return a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:{marginBottom:"20px"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"12px"},children:[a.jsx("label",{style:v,children:"入参声明 (INPUT PARAMETERS)"}),!u&&a.jsx("button",{onClick:E,style:{background:"var(--color-accent)",color:"var(--text-inverse)",border:"none",borderRadius:"6px",padding:"5px 12px",fontSize:"12px",fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:"+ 添加参数"})]}),R.length===0?a.jsx("p",{style:{fontSize:"12px",color:m,margin:0,padding:"12px",background:"var(--bg-secondary)",borderRadius:"8px",border:`1px solid ${h}`},children:'暂无入参声明。点击"+ 添加参数"来定义工作流的输入参数,这些参数将在执行验证时作为表单字段展示。'}):a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px"},children:R.map((B,$)=>a.jsxs("div",{style:{background:"var(--bg-secondary)",border:`1px solid ${h}`,borderRadius:"10px",padding:"12px"},children:[a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"2fr 1fr auto auto",gap:"8px",alignItems:"center"},children:[a.jsx("input",{style:J,placeholder:"参数名",value:B.name,onChange:C=>z($,"name",C.target.value),disabled:u}),a.jsx("select",{style:{...J,cursor:u?"not-allowed":"pointer"},value:B.type??"string",onChange:C=>z($,"type",C.target.value),disabled:u,children:["string","number","boolean","object","array"].map(C=>a.jsx("option",{value:C,children:C},C))}),a.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"4px",fontSize:"12px",color:m,cursor:u?"not-allowed":"pointer",whiteSpace:"nowrap"},children:[a.jsx("input",{type:"checkbox",checked:!!B.required,onChange:C=>z($,"required",C.target.checked),disabled:u,style:{accentColor:"var(--color-accent)"}}),"必填"]}),!u&&a.jsx("button",{onClick:()=>P($),style:{background:"none",border:"none",color:"var(--status-failed)",cursor:"pointer",fontSize:"16px",padding:"0 4px",opacity:.7,lineHeight:1},children:"✕"})]}),a.jsxs("div",{style:{marginTop:"8px",display:"flex",flexDirection:"column",gap:"6px"},children:[a.jsx("input",{style:J,placeholder:"说明(可选)",value:B.description??"",onChange:C=>z($,"description",C.target.value),disabled:u}),a.jsx("input",{style:J,placeholder:`示例值(如 ${B.type==="number"?"42":B.type==="boolean"?"true":'"value"'})`,value:B.example!==void 0?typeof B.example=="object"?JSON.stringify(B.example):String(B.example):"",onChange:C=>{let G=C.target.value;try{G=JSON.parse(C.target.value)}catch{}z($,"example",G)},disabled:u})]})]},$))})]}),S("输出参数映射 (outputParameters)","outputParameters",!0),S("默认输入模板 (inputTemplate)","inputTemplate",!0),S("工作流级变量 (variables)","variables",!0)]})},T=()=>a.jsxs(a.Fragment,{children:[w("启用状态监听 (workflowStatusListenerEnabled)","workflowStatusListenerEnabled"),s?.workflowStatusListenerEnabled&&k("状态事件目标 (Listener Sink)","workflowStatusListenerSink","text",{placeholder:"conductor:workflow_status_event"}),a.jsxs("div",{style:{borderTop:`1px solid ${h}`,marginTop:"8px",paddingTop:"20px"},children:[w("强制 Schema 校验 (enforceSchema)","enforceSchema"),s?.enforceSchema&&a.jsxs(a.Fragment,{children:[S("输入 Schema (inputSchema)","inputSchema",!0,4),S("输出 Schema (outputSchema)","outputSchema",!0,4)]})]}),a.jsxs("div",{style:{borderTop:`1px solid ${h}`,marginTop:"8px",paddingTop:"20px"},children:[a.jsx("label",{style:{...v,marginBottom:"16px"},children:"并发限流 (RATE LIMIT)"}),a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"2fr 1fr",gap:"20px"},children:[a.jsxs("div",{children:[a.jsx("label",{style:v,children:"RATE LIMIT KEY"}),a.jsx("input",{className:"wsp-input",type:"text",value:s?.rateLimitConfig?.rateLimitKey??"",onChange:R=>g("rateLimitConfig","rateLimitKey",R.target.value),disabled:u,placeholder:"限流键",style:{...x,opacity:u?.6:1}})]}),a.jsxs("div",{children:[a.jsx("label",{style:v,children:"并发上限"}),a.jsx("input",{className:"wsp-input",type:"number",value:s?.rateLimitConfig?.concurrentExecLimit??"",onChange:R=>g("rateLimitConfig","concurrentExecLimit",R.target.value===""?0:parseInt(R.target.value)),disabled:u,placeholder:"0",style:{...x,opacity:u?.6:1}})]})]})]})]}),D=()=>{switch(l){case"basic":return N();case"timeout":return L();case"params":return _();case"advanced":return T()}};return a.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"工作流全局配置",onClick:t,style:{position:"fixed",left:0,top:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0,0,0,0.5)",zIndex:1300,display:"flex",justifyContent:"center",alignItems:"center",backdropFilter:"blur(4px)",animation:"fadeIn 0.2s ease"},children:a.jsxs("div",{onClick:R=>R.stopPropagation(),style:{width:"680px",maxHeight:"85vh",background:"var(--glass-surface)",borderRadius:"16px",boxShadow:"0 25px 50px -12px rgba(0, 0, 0, 0.5)",display:"flex",flexDirection:"column",overflow:"hidden",animation:"slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)",border:`1px solid ${h}`,backdropFilter:"blur(20px)"},children:[a.jsxs("div",{style:{padding:"24px 32px 0 32px",background:"var(--bg-highlight)"},children:[a.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"20px"},children:[a.jsxs("div",{children:[a.jsx("h2",{style:{margin:0,fontSize:"20px",color:p},children:"工作流全局配置"}),a.jsx("p",{style:{margin:"4px 0 0 0",fontSize:"12px",color:m},children:u?"当前为只读模式":"配置工作流级属性,所有更改将实时保存"})]}),a.jsx("button",{className:"wsp-close",onClick:t,"aria-label":"关闭",style:{background:"none",border:"none",color:p,fontSize:"24px",cursor:"pointer",opacity:.6},children:"✕"})]}),a.jsx("div",{style:{display:"flex",borderBottom:`1px solid ${h}`},children:lk.map(R=>a.jsx("button",{className:"wsp-tab",onClick:()=>c(R.id),style:{padding:"10px 20px",fontSize:"13px",fontWeight:l===R.id?600:400,color:l===R.id?"var(--color-accent)":m,background:"none",border:"none",borderBottom:l===R.id?"2px solid var(--color-accent)":"2px solid transparent",cursor:"pointer",transition:"all 0.2s",marginBottom:"-1px"},children:R.label},R.id))})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",padding:"28px 32px"},children:D()}),a.jsx("div",{style:{padding:"20px 32px",borderTop:`1px solid ${h}`,background:"var(--bg-highlight)",display:"flex",justifyContent:"flex-end"},children:a.jsx("button",{className:"wsp-footer-btn",onClick:t,style:{padding:"12px 32px",background:"var(--color-accent)",color:"var(--text-inverse)",border:"none",borderRadius:"12px",fontWeight:"bold",cursor:"pointer",boxShadow:"0 4px 12px var(--color-accent-bg)"},children:"完成并关闭"})})]})})},dk=({size:e=26,className:t,style:r})=>{const n=I.useId().replace(/:/g,"");return a.jsxs("svg",{width:e,height:e,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:t,style:{flexShrink:0,display:"inline-block",verticalAlign:"middle",...r},"aria-label":"Conductor Workflow IDE Logo",children:[a.jsxs("defs",{children:[a.jsxs("linearGradient",{id:`bg-${n}`,x1:"0",y1:"0",x2:"32",y2:"32",gradientUnits:"userSpaceOnUse",children:[a.jsx("stop",{offset:"0%",stopColor:"#11172B"}),a.jsx("stop",{offset:"100%",stopColor:"#090D18"})]}),a.jsxs("linearGradient",{id:`bd-${n}`,x1:"0",y1:"0",x2:"32",y2:"32",gradientUnits:"userSpaceOnUse",children:[a.jsx("stop",{offset:"0%",stopColor:"#6366F1",stopOpacity:"0.8"}),a.jsx("stop",{offset:"100%",stopColor:"#06B6D4",stopOpacity:"0.5"})]}),a.jsxs("linearGradient",{id:`top-${n}`,x1:"9",y1:"16",x2:"23",y2:"10",gradientUnits:"userSpaceOnUse",children:[a.jsx("stop",{offset:"0%",stopColor:"#818CF8"}),a.jsx("stop",{offset:"100%",stopColor:"#22D3EE"})]}),a.jsxs("linearGradient",{id:`bot-${n}`,x1:"9",y1:"16",x2:"23",y2:"22",gradientUnits:"userSpaceOnUse",children:[a.jsx("stop",{offset:"0%",stopColor:"#6366F1"}),a.jsx("stop",{offset:"100%",stopColor:"#34D399"})]})]}),a.jsx("rect",{x:"1.25",y:"1.25",width:"29.5",height:"29.5",rx:"8",fill:`url(#bg-${n})`,stroke:`url(#bd-${n})`,strokeWidth:"1.5"}),a.jsx("path",{d:"M 9.5 16 C 15 16, 15.5 10, 22.5 10",stroke:`url(#top-${n})`,strokeWidth:"2.4",strokeLinecap:"round"}),a.jsx("path",{d:"M 9.5 16 C 15 16, 15.5 22, 22.5 22",stroke:`url(#bot-${n})`,strokeWidth:"2.4",strokeLinecap:"round"}),a.jsx("circle",{cx:"9.5",cy:"16",r:"3.4",fill:"#6366F1"}),a.jsx("circle",{cx:"9.5",cy:"16",r:"1.4",fill:"#F8FAFC"}),a.jsx("circle",{cx:"22.5",cy:"10",r:"2.7",fill:"#22D3EE"}),a.jsx("circle",{cx:"22.5",cy:"22",r:"2.7",fill:"#34D399"})]})},uk=({onRequestImport:e})=>{const{createBlankWorkflow:t}=ie(we(i=>({createBlankWorkflow:i.createBlankWorkflow}))),[r,n]=I.useState(""),o=()=>{t(r||void 0),ie.temporal.getState().clear()},s=()=>{t(r||void 0),ie.temporal.getState().clear(),window.dispatchEvent(new CustomEvent("open-ai-chat"))};return a.jsxs("div",{className:"empty-state-panel",children:[a.jsx("div",{style:{marginBottom:12},children:a.jsx(dk,{size:46})}),a.jsx("h2",{className:"empty-state-title",children:"创建新工作流"}),a.jsx("p",{className:"empty-state-subtitle",children:"从空白画布开始设计,或让 AI 帮你生成完整流程"}),a.jsx("input",{className:"empty-state-name-input",type:"text",placeholder:"工作流名称(可选)",value:r,onChange:i=>n(i.target.value),onKeyDown:i=>{i.key==="Enter"&&o()}}),a.jsxs("div",{className:"empty-state-actions",children:[a.jsxs("button",{className:"empty-state-btn primary",onClick:o,children:[a.jsx("span",{className:"empty-state-btn-icon",children:"📄"}),"空白工作流"]}),a.jsxs("button",{className:"empty-state-btn",onClick:s,children:[a.jsx("span",{className:"empty-state-btn-icon",children:"✨"}),"AI 生成"]}),e&&a.jsxs("button",{className:"empty-state-btn",onClick:e,children:[a.jsx("span",{className:"empty-state-btn-icon",children:"📤"}),"导入 JSON"]})]})]})},pk={success:{bg:"#10b981",text:"#fff"},error:{bg:"#ef4444",text:"#fff"},info:{bg:"var(--color-accent)",text:"#fff"}},fk=({messages:e,onDismiss:t})=>e.length===0?null:a.jsx("div",{style:{position:"fixed",bottom:"24px",left:"50%",transform:"translateX(-50%)",zIndex:3e3,display:"flex",flexDirection:"column",gap:"8px",pointerEvents:"none"},children:e.map(r=>a.jsx(hk,{message:r,onDismiss:t},r.id))}),hk=({message:e,onDismiss:t})=>{const r=pk[e.type||"info"];return I.useEffect(()=>{const n=setTimeout(()=>t(e.id),2500);return()=>clearTimeout(n)},[e.id,t]),a.jsx("div",{role:"status","aria-live":"polite",style:{backgroundColor:r.bg,color:r.text,padding:"10px 20px",borderRadius:"8px",fontSize:"13px",fontWeight:500,boxShadow:"0 4px 16px rgba(0,0,0,0.2)",animation:"toastSlideUp 0.3s ease-out",pointerEvents:"auto",cursor:"pointer",whiteSpace:"nowrap"},onClick:()=>t(e.id),children:e.text})},dg=["shift","alt","meta","mod","ctrl","control"],mk={esc:"escape",return:"enter",left:"arrowleft",right:"arrowright",up:"arrowup",down:"arrowdown",ShiftLeft:"shift",ShiftRight:"shift",AltLeft:"alt",AltRight:"alt",MetaLeft:"meta",MetaRight:"meta",OSLeft:"meta",OSRight:"meta",ControlLeft:"ctrl",ControlRight:"ctrl"};function st(e){return(mk[e.trim()]||e.trim()).toLowerCase().replace(/key|digit|numpad/,"")}function ug(e){return dg.includes(e)}function Ll(e,t=","){return e.toLowerCase().split(t)}function Ml(e,t="+",r=">",n=!1,o){let s=[],i=!1;e=e.trim(),e.includes(r)?(i=!0,s=e.toLocaleLowerCase().split(r).map(u=>st(u))):s=e.toLocaleLowerCase().split(t).map(u=>st(u));const l={alt:s.includes("alt"),ctrl:s.includes("ctrl")||s.includes("control"),shift:s.includes("shift"),meta:s.includes("meta"),mod:s.includes("mod"),useKey:n},c=s.filter(u=>!dg.includes(u));return{...l,keys:c,description:o,isSequence:i,hotkey:e}}typeof document<"u"&&(document.addEventListener("keydown",e=>{e.code!==void 0&&pg([st(e.code)])}),document.addEventListener("keyup",e=>{e.code!==void 0&&fg([st(e.code)])})),typeof window<"u"&&(window.addEventListener("blur",()=>{rt.clear()}),window.addEventListener("contextmenu",()=>{setTimeout(()=>{rt.clear()},0)}));const rt=new Set;function $l(e){return Array.isArray(e)}function gk(e,t=","){return($l(e)?e:e.split(t)).every(r=>rt.has(r.trim().toLowerCase()))}function pg(e){const t=Array.isArray(e)?e:[e];rt.has("meta")&&rt.forEach(r=>!ug(r)&&rt.delete(r.toLowerCase())),t.forEach(r=>rt.add(r.toLowerCase()))}function fg(e){const t=Array.isArray(e)?e:[e];e==="meta"?rt.clear():t.forEach(r=>rt.delete(r.toLowerCase()))}function yk(e,t,r){(typeof r=="function"&&r(e,t)||r===!0)&&e.preventDefault()}function xk(e,t,r){return typeof r=="function"?r(e,t):r===!0||r===void 0}const bk=["input","textarea","select","searchbox","slider","spinbutton","menuitem","menuitemcheckbox","menuitemradio","option","radio","textbox"];function vk(e){return hg(e,bk)}function hg(e,t=!1){const{target:r,composed:n}=e;let o,s;return kk(r)&&n?(o=e.composedPath()[0]&&e.composedPath()[0].tagName,s=e.composedPath()[0]&&e.composedPath()[0].role):(o=r&&r.tagName,s=r&&r.role),$l(t)?!!(o&&t&&t.some(i=>i.toLowerCase()===o.toLowerCase()||i===s)):!!(o&&t&&t)}function kk(e){return!!e.tagName&&!e.tagName.startsWith("-")&&e.tagName.includes("-")}function Sk(e,t){return e.length===0&&t?(console.warn('A hotkey has the "scopes" option set, however no active scopes were found. If you want to use the global scopes feature, you need to wrap your app in a <HotkeysProvider>'),!0):t?e.some(r=>t.includes(r))||e.includes("*"):!0}const _k=(e,t,r=!1)=>{const{alt:n,meta:o,mod:s,shift:i,ctrl:l,keys:c,useKey:u}=t,{code:d,key:p,ctrlKey:h,metaKey:f,shiftKey:m,altKey:y}=e,g=st(d);if(u&&c?.length===1&&c.includes(p))return!0;if(!c?.includes(g)&&!["ctrl","control","unknown","meta","alt","shift","os"].includes(g))return!1;if(!r){if(n!==y&&g!=="alt"||i!==m&&g!=="shift")return!1;if(s){if(!f&&!h)return!1}else if(o!==f&&g!=="meta"&&g!=="os"||l!==h&&g!=="ctrl"&&g!=="control")return!1}return c&&c.length===1&&c.includes(g)?!0:c?gk(c):!c},wk=I.createContext(void 0),Tk=()=>I.useContext(wk);function mg(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce((r,n)=>r&&mg(e[n],t[n]),!0):e===t}const jk=I.createContext({hotkeys:[],activeScopes:[],toggleScope:()=>{},enableScope:()=>{},disableScope:()=>{}}),Ik=()=>I.useContext(jk);function Ck(e){const t=I.useRef(void 0);return mg(t.current,e)||(t.current=e),t.current}const gg=e=>{e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation()},Nk=typeof window<"u"?I.useLayoutEffect:I.useEffect;function Ct(e,t,r,n){const o=I.useRef(null),s=I.useRef(!1),i=Array.isArray(r)?Array.isArray(n)?void 0:n:r,l=$l(e)?e.join(i?.delimiter):e,c=Array.isArray(r)?r:Array.isArray(n)?n:void 0,u=I.useCallback(t,c??[]),d=I.useRef(u);c?d.current=u:d.current=t;const p=Ck(i),{activeScopes:h}=Ik(),f=Tk();return Nk(()=>{if(p?.enabled===!1||!Sk(h,p?.scopes))return;let m=[],y;const g=(k,S=!1)=>{if(!(vk(k)&&!hg(k,p?.enableOnFormTags))){if(o.current!==null){const j=o.current.getRootNode();if((j instanceof Document||j instanceof ShadowRoot)&&j.activeElement!==o.current&&!o.current.contains(j.activeElement)){gg(k);return}}k.target?.isContentEditable&&!p?.enableOnContentEditable||Ll(l,p?.delimiter).forEach(j=>{if(j.includes(p?.splitKey??"+")&&j.includes(p?.sequenceSplitKey??">")){console.warn(`Hotkey ${j} contains both ${p?.splitKey??"+"} and ${p?.sequenceSplitKey??">"} which is not supported.`);return}const w=Ml(j,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description);if(w.isSequence){y=setTimeout(()=>{m=[]},p?.sequenceTimeoutMs??1e3);const N=w.useKey?k.key:st(k.code);if(ug(N.toLowerCase()))return;m.push(N);const L=w.keys?.[m.length-1];if(N!==L){m=[],y&&clearTimeout(y);return}m.length===w.keys?.length&&(d.current(k,w),y&&clearTimeout(y),m=[])}else if(_k(k,w,p?.ignoreModifiers)||w.keys?.includes("*")){if(p?.ignoreEventWhen?.(k)||S&&s.current)return;if(yk(k,w,p?.preventDefault),!xk(k,w,p?.enabled)){gg(k);return}d.current(k,w),S||(s.current=!0)}})}},b=k=>{k.code!==void 0&&(pg(st(k.code)),(p?.keydown===void 0&&p?.keyup!==!0||p?.keydown)&&g(k))},x=k=>{k.code!==void 0&&(fg(st(k.code)),s.current=!1,p?.keyup&&g(k,!0))},v=o.current||i?.document||document;return v.addEventListener("keyup",x,i?.eventListenerOptions),v.addEventListener("keydown",b,i?.eventListenerOptions),f&&Ll(l,p?.delimiter).forEach(k=>f.addHotkey(Ml(k,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description))),()=>{v.removeEventListener("keyup",x,i?.eventListenerOptions),v.removeEventListener("keydown",b,i?.eventListenerOptions),f&&Ll(l,p?.delimiter).forEach(k=>f.removeHotkey(Ml(k,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description))),m=[],y&&clearTimeout(y)}},[l,p,h]),o}const Rk=e=>{const{mode:t,removeNode:r,selectedTask:n,pasteTask:o}=ie(we(h=>({mode:h.mode,removeNode:h.removeNode,selectedTask:h.selectedTask,pasteTask:h.pasteTask}))),s=ie.temporal,{undo:i,redo:l}=$r(s,h=>h),c=e?.confirm||(h=>Promise.resolve(window.confirm(h))),u=e?.showToast,d=h=>{const f=h.target;return f.tagName==="INPUT"||f.tagName==="TEXTAREA"||f.isContentEditable},p=()=>{requestAnimationFrame(()=>{const h=ie.getState(),{nodes:f,edges:m}=Ee(h.nodes,h.edges,{direction:h.layoutDirection,mode:h.mode});ie.setState({nodes:f,edges:m})})};return Ct("mod+z",h=>{t==="edit"&&(d(h)||(h.preventDefault(),i(),p()))},[t,i]),Ct(["mod+shift+z","mod+y"],h=>{t==="edit"&&(d(h)||(h.preventDefault(),l(),p()))},[t,l]),Ct("delete, backspace",h=>{t!=="edit"||!n||d(h)||(h.preventDefault(),c("确定要删除此任务吗?").then(f=>{f&&r(n.taskReferenceName)}))},[t,n,r,c]),Ct("mod+c",h=>{if(!(t!=="edit"||!n)&&!d(h)){if(n.type==="JOIN"){u?.("JOIN 任务不能独立复制","error");return}h.preventDefault();try{localStorage.setItem("conductor-clipboard",JSON.stringify(n)),u?.("任务已复制","success")}catch{u?.("复制失败","error")}}},[t,n,u]),Ct("mod+v",h=>{if(t==="edit"&&!d(h)){h.preventDefault();try{const f=localStorage.getItem("conductor-clipboard");if(f){const m=JSON.parse(f);o(m),u?.("任务已粘贴","success")}}catch{u?.("粘贴失败","error")}}},[t,o,u]),Ct("mod+s",h=>{h.preventDefault();const f=ie.getState().workflowDef;f&&e?.onSave&&e.onSave(f)},[e?.onSave]),{}},jr=()=>{const[e,t]=I.useState(null),r=I.useCallback(s=>new Promise(i=>{t({message:s,resolve:i})}),[]),n=I.useCallback(()=>{e?.resolve(!0),t(null)},[e]),o=I.useCallback(()=>{e?.resolve(!1),t(null)},[e]);return{confirm:r,confirmState:e,handleConfirm:n,handleCancel:o}},Ek=()=>{const[e,t]=I.useState([]),r=I.useCallback((o,s="info")=>{const i=Date.now().toString();t(l=>[...l,{id:i,text:o,type:s}])},[]),n=I.useCallback(o=>{t(s=>s.filter(i=>i.id!==o))},[]);return{toasts:e,showToast:r,dismissToast:n}},ql={id:"welcome",role:"assistant",content:`你好!我是 AI 工作流助手。
38
+ `}),o.jsxs("div",{style:{padding:"16px",borderBottom:`1px solid ${f}`,display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"var(--cm-surface-0)"},children:[o.jsxs("div",{style:{fontWeight:"bold",fontSize:"14px",display:"flex",alignItems:"center",gap:"8px"},children:[o.jsx("span",{children:o.jsx(yb,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})," 工作流体检报告"]}),o.jsx("button",{onClick:t,style:{background:"none",border:"none",color:m,cursor:"pointer",fontSize:"18px"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:l.length===0&&c.length===0?o.jsxs("div",{style:{padding:"32px 16px",textAlign:"center",color:"var(--cm-status-success)"},children:[o.jsx("div",{style:{fontSize:"32px",marginBottom:"12px"},children:o.jsx(gu,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("div",{style:{fontWeight:"bold"},children:"未发现问题"}),o.jsx("div",{style:{fontSize:"12px",opacity:.7,marginTop:"4px"},children:"工作流逻辑看起来很完美"})]}):o.jsxs(o.Fragment,{children:[l.map((h,y)=>o.jsxs("div",{className:"health-item",role:"button",tabIndex:h.ref?0:void 0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&d(h.ref)},onClick:()=>d(h.ref),style:{padding:"12px",borderRadius:"8px",marginBottom:"4px",cursor:h.ref?"pointer":"default",borderLeft:"4px solid var(--cm-status-failed)",transition:"background 0.2s"},children:[o.jsxs("div",{style:{fontSize:"12px",color:"var(--cm-status-failed)",fontWeight:"bold",marginBottom:"2px"},children:["ERROR ",h.ref!=="UNKNOWN"&&`[${h.ref}]`]}),o.jsx("div",{style:{fontSize:"13px",color:p},children:h.message})]},`err-${y}`)),c.map((h,y)=>o.jsxs("div",{className:"health-item",role:"button",tabIndex:h.ref?0:void 0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&d(h.ref)},onClick:()=>d(h.ref),style:{padding:"12px",borderRadius:"8px",marginBottom:"4px",cursor:h.ref?"pointer":"default",borderLeft:"4px solid var(--cm-status-warning)",transition:"background 0.2s"},children:[o.jsxs("div",{style:{fontSize:"12px",color:"var(--cm-status-warning)",fontWeight:"bold",marginBottom:"2px"},children:["WARNING ",h.ref!=="UNKNOWN"&&`[${h.ref}]`]}),o.jsx("div",{style:{fontSize:"13px",color:p},children:h.message})]},`warn-${y}`))]})}),o.jsxs("div",{style:{padding:"12px 16px",fontSize:"11px",color:m,borderTop:`1px solid ${f}`,backgroundColor:"var(--cm-surface-0)",display:"flex",justifyContent:"space-between"},children:[o.jsxs("span",{children:["共 ",l.length," 个错误, ",c.length," 个警告"]}),l.length>0&&o.jsx("span",{style:{color:"var(--cm-status-failed)"},children:"无法保存/导出"})]})]}):null},aI=({id:e,source:t,target:r,sourceX:n,sourceY:s,targetX:a,targetY:i,sourcePosition:l,targetPosition:c,style:d={},markerEnd:u,data:p})=>{const[f,m]=T.useState(!1),h=T.useRef(null),y=()=>{const C=p?.edgeType||"default",N={sourceX:n,sourceY:s,sourcePosition:l,targetX:a,targetY:i,targetPosition:c};switch(C){case"step":case"smoothstep":return J.getSmoothStepPath(N);case"straight":return J.getStraightPath(N);default:return J.getBezierPath(N)}},[x,g,v]=y(),k=C=>{C.stopPropagation(),C.preventDefault();const N=new CustomEvent("edgeAddNode",{detail:{id:e,source:t,target:r,edgeData:p}});window.dispatchEvent(N)},b=()=>{h.current&&clearTimeout(h.current),m(!0)},S=()=>{h.current=setTimeout(()=>{m(!1)},100)},j=!!(p?.isAddable??p?.mode==="edit"),_=!!p?.label,w=typeof d?.strokeWidth=="number"?d.strokeWidth:2.2,I=typeof d?.opacity=="number"?d.opacity:1;return o.jsxs(o.Fragment,{children:[o.jsx(J.BaseEdge,{path:x,markerEnd:u,style:{...d,strokeWidth:j&&f?w+1.4:w,stroke:j&&f?"var(--color-accent)":d?.stroke,transition:"stroke 0.2s ease, stroke-width 0.2s ease, opacity 0.25s ease",pointerEvents:"none"}}),j&&o.jsx("path",{d:x,fill:"none",stroke:"transparent",strokeWidth:22,style:{cursor:"pointer",pointerEvents:"all"},onMouseEnter:b,onMouseLeave:S}),(_||j&&f)&&o.jsx(J.EdgeLabelRenderer,{children:o.jsxs("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${g}px,${v}px)`,fontSize:12,pointerEvents:j?"all":"none",zIndex:f?2e3:10,display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",opacity:f?1:I,transition:"opacity 0.2s ease"},className:"nodrag nopan",onMouseEnter:j?b:void 0,onMouseLeave:j?S:void 0,children:[_&&o.jsx("div",{style:{background:"var(--glass-bg-accent)",backdropFilter:"var(--glass-blur)",WebkitBackdropFilter:"var(--glass-blur)",color:"var(--text-primary)",padding:"2px 8px",borderRadius:"999px",fontSize:"11px",fontWeight:600,border:`1px solid ${f?"var(--color-accent)":"var(--border-secondary)"}`,boxShadow:"var(--cm-shadow-card)",whiteSpace:"nowrap",letterSpacing:"0.3px",lineHeight:1.4},children:p.label}),j&&f&&o.jsx("button",{style:{width:"28px",height:"28px",backgroundColor:"var(--color-accent)",color:"var(--color-on-accent)",border:"2px solid var(--border-primary)",borderRadius:"50%",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontWeight:700,fontSize:"18px",lineHeight:1,boxShadow:"0 4px 14px rgba(var(--color-accent-rgb), 0.5)",transition:"all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)",padding:0},className:"edge-add-button",onClick:k,onMouseDown:C=>C.stopPropagation(),title:"在此处添加任务",children:"+"})]})})]})},nt=({onClick:e,icon:t,label:r,title:n,disabled:s=!1,active:a=!1,variant:i="default",style:l})=>{let c="var(--bg-tertiary)",d="var(--text-primary)",u="1px solid var(--border-primary)";return i==="primary"?(c="var(--color-accent)",d="var(--color-on-accent)",u="none"):i==="danger"?(c=s?"var(--cm-failed-tint)":"var(--status-failed)",d=s?"var(--text-secondary)":"var(--color-on-danger)",u="none"):a&&(c="var(--bg-secondary)",d="var(--color-accent)",u="1px solid var(--color-accent)"),o.jsxs("button",{onClick:e,disabled:s,title:n,"aria-label":n||r,"aria-pressed":a,"aria-disabled":s,style:{display:"flex",alignItems:"center",justifyContent:"center",gap:r?"6px":"0",background:c,color:d,border:u,borderRadius:"7px",padding:r?"4px 10px":"6px",cursor:s?"not-allowed":"pointer",opacity:s?.45:1,fontSize:"12px",fontWeight:500,transition:"all 0.18s",minWidth:r?"auto":"30px",height:"30px",whiteSpace:"nowrap",boxShadow:i==="default"?"var(--cm-shadow-card)":"none",...l},children:[t&&o.jsx("span",{style:{fontSize:"13px",display:"flex",alignItems:"center"},children:t}),r&&o.jsx("span",{children:r})]})},oI=()=>{const{zoomIn:e,zoomOut:t,fitView:r}=J.useReactFlow();return o.jsx("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"10px"},children:o.jsxs("div",{style:{display:"flex",background:"var(--bg-tertiary)",padding:"4px",borderRadius:"8px",border:"1px solid var(--border-primary)",gap:"4px",boxShadow:"var(--cm-shadow-card)"},children:[o.jsx(nt,{icon:o.jsx(tr,{size:15,strokeWidth:1.75,"aria-hidden":"true"}),title:"放大",onClick:()=>e()}),o.jsx(nt,{icon:o.jsx(ib,{size:15,strokeWidth:1.75,"aria-hidden":"true"}),title:"缩小",onClick:()=>t()}),o.jsx(nt,{icon:"⤢",title:"适应屏幕",onClick:()=>r({duration:600})})]})})},Os=20,Ib={enabled:!1,status:"COMPLETED",durationMs:"",forceCase:"",reasonForIncompletion:"",outputJsonText:""},iI=({isOpen:e,onClose:t})=>{const{workflowDef:r,theme:n,themeColor:s,runLocalSandboxDryRun:a}=re($e(A=>({workflowDef:A.workflowDef,theme:A.theme,themeColor:A.themeColor,runLocalSandboxDryRun:A.runLocalSandboxDryRun}))),[i,l]=T.useState("input"),[c,d]=T.useState(""),[u,p]=T.useState(null),[f,m]=T.useState({}),[h,y]=T.useState(""),[x,g]=T.useState(null),[v,k]=T.useState(Os),b=T.useMemo(()=>r?.tasks?hr(r.tasks):[],[r]),S=T.useMemo(()=>`sandbox_mock_cfg_${r?.name||"default"}`,[r?.name]);T.useEffect(()=>{if(!e||!r)return;const A=ln(r);let W=!1;try{const P=sessionStorage.getItem(S);if(P){const $=JSON.parse(P);$.inputJsonText?d($.inputJsonText):d(JSON.stringify(A,null,2)),$.taskDrafts&&typeof $.taskDrafts=="object"&&m($.taskDrafts),typeof $.loopSafetyLimit=="number"?k($.loopSafetyLimit):k(Os),W=!0}}catch{}W||(d(JSON.stringify(A,null,2)),m({}),k(Os)),p(null),g(null),b.length>0&&!h&&y(b[0].taskReferenceName)},[e,r,S]),T.useEffect(()=>{b.length>0&&!b.some(A=>A.taskReferenceName===h)&&y(b[0].taskReferenceName)},[b,h]);const j=T.useMemo(()=>{const A=[];for(const W of b)if(W.type==="SWITCH"||W.type==="DECISION"){const P=Object.keys(W.decisionCases||{});if(P.length===0)continue;const $=W.caseValueParam||"case_value",D=String(W.inputParameters?.[$]??W.expression??"").match(/\$\{\s*workflow\.input\.([a-zA-Z0-9_]+)\s*\}/);A.push({switchRef:W.taskReferenceName,switchName:W.name||W.taskReferenceName,inputField:D?D[1]:null,cases:P})}return A},[b]);if(!e||!r||typeof document>"u")return null;const _=b.find(A=>A.taskReferenceName===h)||b[0]||null,w=_&&f[_.taskReferenceName]||Ib,I=A=>{if(!_)return;const W=_.taskReferenceName,$={...f[W]||{...Ib,outputJsonText:JSON.stringify(_s(_),null,2)},...A,enabled:A.enabled!==void 0?A.enabled:!0};m(X=>({...X,[W]:$})),g(null)},C=Object.values(f).filter(A=>A.enabled).length,N=(A,W)=>{try{const P=JSON.parse(c||"{}");P[A]=W,d(JSON.stringify(P,null,2)),p(null)}catch{p("请先修复当前 JSON 语法错误后再点击快捷赋值")}},O=()=>{let A={};try{if(A=c.trim()?JSON.parse(c):{},typeof A!="object"||Array.isArray(A)||A===null){p("workflow.input 必须是一个 JSON 对象 {...}"),l("input");return}}catch(P){p(`JSON 语法错误: ${P?.message||"格式不合法"}`),l("input");return}const W={};for(const[P,$]of Object.entries(f)){if(!$.enabled)continue;let X;if($.outputJsonText.trim())try{X=JSON.parse($.outputJsonText)}catch(B){y(P),l("tasks"),g(`节点 [${P}] 的自定义输出 JSON 语法有误: ${B?.message||""}`);return}const D=$.durationMs.trim()!==""&&!Number.isNaN(Number($.durationMs))?Number($.durationMs):void 0;W[P]={__isMockOverride:!0,status:$.status,durationMs:D,forceCase:$.forceCase||void 0,reasonForIncompletion:$.reasonForIncompletion.trim()||void 0,outputData:X}}try{sessionStorage.setItem(S,JSON.stringify({inputJsonText:c,taskDrafts:f,loopSafetyLimit:v}))}catch{}a(A,W,v),t()},E="var(--cm-surface-1)",R="var(--cm-surface-3)",L="var(--cm-surface-0)",H="var(--text-primary)",F="var(--text-muted)",q="var(--border-primary)";return kt.createPortal(o.jsx("div",{"data-mode":n,"data-brand":s,style:{position:"fixed",inset:0,zIndex:9500,background:"var(--cm-overlay)",backdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",padding:20},onClick:t,children:o.jsxs("div",{style:{width:"min(920px, 96vw)",height:"min(660px, 90vh)",background:E,color:H,borderRadius:14,border:`1px solid ${q}`,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},onClick:A=>A.stopPropagation(),children:[o.jsxs("div",{style:{padding:"16px 20px",borderBottom:`1px solid ${q}`,display:"flex",alignItems:"center",justifyContent:"space-between",background:R},children:[o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:15,fontWeight:700},children:[o.jsxs("span",{children:[o.jsx(js,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"本地沙箱试运行 · 人工模拟数据控制台"]}),o.jsx("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:999,background:"color-mix(in srgb, var(--cm-status-success) 14%, transparent)",color:"var(--cm-status-success)",fontWeight:600},children:"0ms 确定性求值"})]}),o.jsxs("div",{style:{fontSize:12,color:F,marginTop:4},children:["自定义工作流启动入参 (",o.jsx("code",{children:"workflow.input"}),")、指定任意节点的 Mock 输出、模拟节点异常中断或强制切换 ",o.jsx("code",{children:"SWITCH"})," 分支走向"]})]}),o.jsx("button",{type:"button",onClick:t,style:{background:"none",border:"none",color:F,fontSize:18,cursor:"pointer",padding:"4px 8px"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{display:"flex",gap:8,padding:"10px 20px",borderBottom:`1px solid ${q}`,background:E},children:[{id:"input",label:"1. 工作流启动入参 (workflow.input)"},{id:"tasks",label:`2. 节点级人工 Mock & 故障注入 ${C>0?`(${C} 个已启用)`:""}`},{id:"engine",label:`3. 循环上限 (${v} 轮)`}].map(A=>{const W=i===A.id;return o.jsx("button",{type:"button",onClick:()=>l(A.id),style:{padding:"7px 14px",borderRadius:8,border:W?"1px solid var(--color-accent)":`1px solid ${q}`,background:W?"color-mix(in srgb, var(--color-accent) 14%, transparent)":"transparent",color:W?"var(--color-accent)":F,fontSize:12,fontWeight:W?700:500,cursor:"pointer"},children:A.label},A.id)})}),o.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",overflow:"hidden"},children:[i==="input"&&o.jsxs("div",{style:{flex:1,padding:20,display:"flex",flexDirection:"column",gap:12,overflowY:"auto"},children:[j.length>0&&o.jsxs("div",{style:{padding:"10px 14px",borderRadius:10,background:"color-mix(in srgb, var(--color-accent) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--color-accent) 25%, transparent)",display:"flex",flexDirection:"column",gap:8},children:[o.jsxs("div",{style:{fontSize:12,fontWeight:700,color:"var(--cm-data)"},children:[o.jsx(eT,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"条件分支 (SWITCH) 快速路由切换器"]}),j.map(A=>o.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,fontSize:12},children:[o.jsxs("span",{style:{color:F},children:["节点 ",o.jsx("b",{children:A.switchName})," (",o.jsx("code",{children:A.switchRef}),")",A.inputField?` 绑定入参字段 "${A.inputField}" — 点击一键切换分支:`:" 可选分支 (可在 Tab 2 强制指定):"]}),A.cases.map(W=>o.jsx("button",{type:"button",onClick:()=>{A.inputField?N(A.inputField,W):(y(A.switchRef),l("tasks"))},style:{padding:"2px 9px",borderRadius:999,border:"1px solid color-mix(in srgb, var(--cm-data) 45%, transparent)",background:"color-mix(in srgb, var(--cm-data) 14%, transparent)",color:"var(--cm-data)",fontSize:11,fontFamily:"monospace",fontWeight:600,cursor:"pointer"},children:A.inputField?`${A.inputField} = "${W}"`:`走分支: ${W}`},W))]},A.switchRef))]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("span",{style:{fontSize:12,fontWeight:600,color:F},children:["编辑 ",o.jsx("code",{children:"workflow.input"})," JSON(所有节点的 ",o.jsx("code",{children:"${workflow.input.*}"})," 将实时读取此处的值):"]}),o.jsxs("button",{type:"button",onClick:()=>{const A=ln(r);d(JSON.stringify(A,null,2)),p(null)},style:{fontSize:11,padding:"4px 10px",borderRadius:6,border:`1px solid ${q}`,background:R,color:F,cursor:"pointer"},children:[o.jsx(ST,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"重置为默认推导值"]})]}),u&&o.jsxs("div",{style:{padding:"8px 12px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-failed) 14%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-failed) 40%, transparent)",color:"var(--cm-status-failed)",fontSize:12},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),u]}),o.jsx("textarea",{value:c,onChange:A=>{d(A.target.value),p(null)},spellCheck:!1,style:{flex:1,minHeight:240,width:"100%",boxSizing:"border-box",padding:14,borderRadius:10,border:`1px solid ${u?"var(--cm-status-failed)":q}`,background:L,color:H,fontFamily:"monospace",fontSize:13,lineHeight:1.55,resize:"none",outline:"none"}})]}),i==="tasks"&&o.jsxs("div",{style:{flex:1,display:"grid",gridTemplateColumns:"260px 1fr",minHeight:0},children:[o.jsxs("div",{style:{borderRight:`1px solid ${q}`,overflowY:"auto",padding:"10px 8px",background:R,display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{fontSize:11,fontWeight:700,color:F,padding:"4px 8px 8px",textTransform:"uppercase"},children:["选择要定制 Mock 的节点 (",b.length,")"]}),b.map(A=>{const W=A.taskReferenceName,P=_?.taskReferenceName===W,$=f[W],X=!!$?.enabled;return o.jsxs("div",{onClick:()=>{y(W),g(null)},style:{padding:"8px 10px",borderRadius:8,cursor:"pointer",background:P?"color-mix(in srgb, var(--color-accent) 16%, transparent)":"transparent",border:P?"1px solid color-mix(in srgb, var(--color-accent) 45%, transparent)":"1px solid transparent",display:"flex",alignItems:"center",justifyContent:"space-between",gap:6},children:[o.jsxs("div",{style:{minWidth:0},children:[o.jsx("div",{style:{fontSize:12,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:A.name||W}),o.jsxs("div",{style:{fontSize:10,color:F,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[W," · ",A.type]})]}),X&&o.jsx("span",{style:{fontSize:10,padding:"2px 6px",borderRadius:999,background:$.status==="FAILED"||$.status==="TIMED_OUT"?"color-mix(in srgb, var(--cm-status-failed) 20%, transparent)":"color-mix(in srgb, var(--cm-status-success) 20%, transparent)",color:$.status==="FAILED"||$.status==="TIMED_OUT"?"var(--cm-status-failed)":"var(--cm-status-success)",fontWeight:700,flexShrink:0},children:$.status==="COMPLETED"?"已定制":$.status})]},W)})]}),_?o.jsxs("div",{style:{padding:18,overflowY:"auto",display:"flex",flexDirection:"column",gap:14},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:10,borderBottom:`1px solid ${q}`},children:[o.jsxs("div",{children:[o.jsxs("div",{style:{fontSize:14,fontWeight:700},children:[_.name||_.taskReferenceName," ",o.jsxs("code",{style:{fontSize:12,color:"var(--cm-data)",fontWeight:500},children:["(",_.taskReferenceName,")"]})]}),o.jsxs("div",{style:{fontSize:11,color:F,marginTop:2},children:["节点类型: ",o.jsx("b",{children:_.type})]})]}),o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,fontSize:12,fontWeight:700,cursor:"pointer",padding:"6px 12px",borderRadius:8,background:w.enabled?"color-mix(in srgb, var(--cm-status-success) 14%, transparent)":R,border:`1px solid ${w.enabled?"var(--cm-status-success)":q}`,color:w.enabled?"var(--cm-status-success)":F},children:[o.jsx("input",{type:"checkbox",checked:w.enabled,onChange:A=>I({enabled:A.target.checked})}),"启用该节点人工 Mock"]})]}),o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 200px",gap:12},children:[o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:F,marginBottom:6},children:"模拟执行状态 (可注入异常以测试断路与错误诊断)"}),o.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[{id:"COMPLETED",label:"正常成功"},{id:"FAILED",label:"失败中断 (FAILED)"},{id:"TIMED_OUT",label:"超时中断 (TIMED_OUT)"},{id:"COMPLETED_WITH_ERRORS",label:"带错完成"}].map(A=>{const W=w.status===A.id;return o.jsx("button",{type:"button",onClick:()=>I({status:A.id}),style:{padding:"5px 10px",borderRadius:6,fontSize:11,fontWeight:W?700:500,cursor:"pointer",border:W?"1px solid var(--cm-data)":`1px solid ${q}`,background:W?"color-mix(in srgb, var(--cm-data) 16%, transparent)":R,color:W?"var(--cm-data)":H},children:A.label},A.id)})})]}),o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:F,marginBottom:6},children:"模拟耗时 (ms,可制造并发瓶颈)"}),o.jsx("input",{type:"number",min:0,placeholder:"默认自动耗时 (如 120)",value:w.durationMs,onChange:A=>I({durationMs:A.target.value}),style:{width:"100%",boxSizing:"border-box",padding:"6px 10px",borderRadius:6,border:`1px solid ${q}`,background:L,color:H,fontSize:12}})]})]}),(w.status==="FAILED"||w.status==="TIMED_OUT")&&o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:11,fontWeight:600,color:"var(--cm-status-failed)",marginBottom:6},children:"模拟异常原因 (reasonForIncompletion)"}),o.jsx("input",{type:"text",placeholder:"例如: Connection refused to upstream payment gateway (502)",value:w.reasonForIncompletion,onChange:A=>I({reasonForIncompletion:A.target.value}),style:{width:"100%",boxSizing:"border-box",padding:"7px 10px",borderRadius:6,border:"1px solid color-mix(in srgb, var(--cm-status-failed) 45%, transparent)",background:L,color:H,fontSize:12}})]}),(_.type==="SWITCH"||_.type==="DECISION")&&o.jsxs("div",{style:{padding:"10px 12px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-warning) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-warning) 35%, transparent)"},children:[o.jsxs("label",{style:{display:"block",fontSize:11,fontWeight:700,color:"var(--cm-status-warning)",marginBottom:6},children:[o.jsx(Mr,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"强制指定 SWITCH 路由分支 (无视入参表达式直接走指定分支)"]}),o.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[o.jsxs("button",{type:"button",onClick:()=>I({forceCase:""}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,cursor:"pointer",border:w.forceCase?`1px solid ${q}`:"1px solid var(--cm-status-warning)",background:w.forceCase?R:"color-mix(in srgb, var(--cm-status-warning) 20%, transparent)",color:w.forceCase?F:"var(--cm-status-warning)",fontWeight:w.forceCase?500:700},children:[o.jsx(Ns,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"根据入参自动求值"]}),Object.keys(_.decisionCases||{}).map(A=>{const W=w.forceCase===A;return o.jsxs("button",{type:"button",onClick:()=>I({forceCase:A}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,fontFamily:"monospace",cursor:"pointer",border:W?"1px solid var(--cm-status-warning)":`1px solid ${q}`,background:W?"color-mix(in srgb, var(--cm-status-warning) 22%, transparent)":R,color:W?"var(--cm-status-warning)":H,fontWeight:W?700:500},children:["分支: ",A]},A)}),_.defaultCase&&o.jsx("button",{type:"button",onClick:()=>I({forceCase:"__default__"}),style:{padding:"4px 10px",borderRadius:6,fontSize:11,fontFamily:"monospace",cursor:"pointer",border:w.forceCase==="__default__"?"1px solid var(--cm-status-warning)":`1px solid ${q}`,background:w.forceCase==="__default__"?"color-mix(in srgb, var(--cm-status-warning) 22%, transparent)":R,color:w.forceCase==="__default__"?"var(--cm-status-warning)":H},children:"默认分支 (defaultCase)"})]})]}),o.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("label",{style:{fontSize:11,fontWeight:600,color:F},children:["自定义节点输出数据 (",o.jsx("code",{children:`\${${_.taskReferenceName}.output.*}`})," 将读取此 JSON):"]}),o.jsxs("button",{type:"button",onClick:()=>{const A=_s(_);I({outputJsonText:JSON.stringify(A,null,2)})},style:{fontSize:11,padding:"3px 9px",borderRadius:6,border:`1px solid ${q}`,background:R,color:"var(--cm-data)",cursor:"pointer",fontWeight:600},children:[o.jsx(bu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"填入默认合成输出模板"]})]}),x&&o.jsxs("div",{style:{padding:"6px 10px",borderRadius:6,background:"color-mix(in srgb, var(--cm-status-failed) 14%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-failed) 40%, transparent)",color:"var(--cm-status-failed)",fontSize:11},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),x]}),o.jsx("textarea",{value:w.outputJsonText,placeholder:`留空则自动按 ${_.type} 类型合成输出,或点击右上角「填入默认合成输出模板」进行修改...`,onChange:A=>I({outputJsonText:A.target.value}),spellCheck:!1,style:{flex:1,minHeight:160,width:"100%",boxSizing:"border-box",padding:12,borderRadius:8,border:`1px solid ${x?"var(--cm-status-failed)":q}`,background:L,color:H,fontFamily:"monospace",fontSize:12,lineHeight:1.5,resize:"vertical",outline:"none"}})]})]}):o.jsx("div",{style:{padding:32,color:F},children:"当前工作流暂无任务节点"})]}),i==="engine"&&o.jsx("div",{style:{flex:1,padding:24,display:"flex",flexDirection:"column",gap:18},children:o.jsxs("div",{style:{padding:16,borderRadius:10,border:`1px solid ${q}`,background:R,display:"flex",flexDirection:"column",gap:10},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{children:[o.jsxs("div",{style:{fontSize:13,fontWeight:700},children:[o.jsx(Ns,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"DO_WHILE 循环安全上限"]}),o.jsxs("div",{style:{fontSize:12,color:F,marginTop:2},children:["循环何时结束由 ",o.jsx("code",{children:"loopCondition"})," 决定;到达上限时条件仍为真,沙箱停止循环并标记为部分完成,防止死循环(可在画布循环容器头部切换查看每一轮的子任务状态)"]})]}),o.jsxs("span",{style:{fontSize:16,fontWeight:800,color:"var(--cm-data)",fontFamily:"monospace"},children:[v," 轮"]})]}),o.jsx("input",{type:"range",min:1,max:50,value:v,onChange:A=>k(Number(A.target.value)),style:{width:"100%",accentColor:"var(--cm-data)",cursor:"pointer"}}),o.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,color:F},children:[o.jsx("span",{children:"1 轮"}),o.jsx("span",{children:"20 轮(默认)"}),o.jsx("span",{children:"50 轮"})]})]})})]}),o.jsxs("div",{style:{padding:"12px 20px",borderTop:`1px solid ${q}`,background:R,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("button",{type:"button",onClick:()=>{m({});const A=ln(r);d(JSON.stringify(A,null,2)),k(Os),sessionStorage.removeItem(S)},style:{padding:"7px 12px",borderRadius:8,border:`1px solid ${q}`,background:"transparent",color:F,fontSize:12,cursor:"pointer"},children:[o.jsx(aT,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"清空全部人工 Mock 配置"]}),o.jsxs("div",{style:{display:"flex",gap:10},children:[o.jsx("button",{type:"button",onClick:t,style:{padding:"8px 16px",borderRadius:8,border:`1px solid ${q}`,background:"transparent",color:H,fontSize:12,fontWeight:600,cursor:"pointer"},children:"取消"}),o.jsxs("button",{type:"button",onClick:O,style:{padding:"8px 20px",borderRadius:8,border:"none",background:"linear-gradient(135deg, var(--color-accent), var(--cm-data))",color:"var(--text-primary)",fontSize:12,fontWeight:700,cursor:"pointer",boxShadow:"0 4px 14px color-mix(in srgb, var(--color-accent) 35%, transparent)"},children:[o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"应用模拟数据并启动沙箱试运行"]})]})]})]})}),document.body)},bt=({as:e})=>o.jsx(e,{size:15,strokeWidth:1.75,"aria-hidden":"true"}),Ou=()=>o.jsx("div",{style:{width:"1px",height:"18px",background:"var(--border-primary)",margin:"0 2px",alignSelf:"center",flexShrink:0}}),lI=({onShowHealthCheck:e,showHealthCheck:t,onShowSettings:r,executionActions:n})=>{const{mode:s,setMode:a,validationResults:i,workflowInstance:l,workflowDef:c,showDataLineage:d,setShowDataLineage:u,showWaterfallPanel:p,setShowWaterfallPanel:f,runLocalSandboxDryRun:m,sandboxRunning:h,inlineCopilotTaskRef:y,setInlineCopilotTaskRef:x,selectedTask:g}=re($e($=>({mode:$.mode,setMode:$.setMode,validationResults:$.validationResults,workflowInstance:$.workflowInstance,workflowDef:$.workflowDef,showDataLineage:$.showDataLineage,setShowDataLineage:$.setShowDataLineage,showWaterfallPanel:$.showWaterfallPanel,setShowWaterfallPanel:$.setShowWaterfallPanel,runLocalSandboxDryRun:$.runLocalSandboxDryRun,sandboxRunning:$.sandboxRunning,inlineCopilotTaskRef:$.inlineCopilotTaskRef,setInlineCopilotTaskRef:$.setInlineCopilotTaskRef,selectedTask:$.selectedTask}))),v=re.temporal,{undo:k,redo:b,pastStates:S,futureStates:j}=da(v,$=>$),[_,w]=T.useState(!1),[I,C]=T.useState(!1),N=T.useRef(null);T.useEffect(()=>{if(!_)return;const $=X=>{N.current&&!N.current.contains(X.target)&&w(!1)};return document.addEventListener("mousedown",$),()=>document.removeEventListener("mousedown",$)},[_]);const O=(i?.errors?.length||0)>0,E=l?.status,R=l?.workflowId??"",L=E==="RUNNING",H=E==="PAUSED",F=E==="FAILED"||E==="TIMED_OUT"||E==="TERMINATED",q=E==="COMPLETED",A=l?.isSandbox===!0,W=c?.restartable===!0&&(F||q),P=n?.allowOperations!==!1;return o.jsxs("div",{className:"action-bar",style:{display:"flex",gap:"6px",alignItems:"center",flexWrap:"wrap",padding:"5px 8px",borderRadius:"10px",background:"var(--bg-secondary)",backdropFilter:"blur(14px)",border:"1px solid var(--border-primary)",boxShadow:"var(--cm-shadow-float)"},children:[c&&o.jsxs(o.Fragment,{children:[o.jsx(nt,{icon:o.jsx(bt,{as:PT}),label:"数据血缘",title:"W-LSP 数据流血缘图谱 (Data Flow Graph)",onClick:()=>u(!d),active:d}),s==="edit"&&o.jsx(nt,{icon:o.jsx(bt,{as:Rt}),label:"AI微调",title:"画布内联 AI 指令栏 (Cmd+K)",onClick:()=>x(y?null:g?.taskReferenceName||"__canvas_root__"),active:!!y})]}),s==="edit"&&o.jsxs(o.Fragment,{children:[o.jsx(Ou,{}),o.jsxs("div",{style:{display:"inline-flex",gap:"3px",alignItems:"center"},children:[o.jsx(nt,{icon:o.jsx(bt,{as:xb}),title:"撤销 (Cmd+Z)",onClick:()=>k(),disabled:S.length===0}),o.jsx(nt,{icon:o.jsx(bt,{as:wT}),title:"重做 (Cmd+Shift+Z)",onClick:()=>b(),disabled:j.length===0})]}),o.jsx(nt,{icon:o.jsx(bt,{as:yb}),label:O?`错误 (${i.errors.length})`:"诊断",title:"流程健康检查",onClick:e,active:t,variant:O?"danger":"secondary"}),o.jsx(nt,{icon:o.jsx(bt,{as:NT}),label:"配置",title:"工作流全局配置",onClick:()=>r?.()})]}),c&&s!=="run"&&o.jsxs(o.Fragment,{children:[o.jsx(Ou,{}),o.jsxs("div",{style:{display:"inline-flex",alignItems:"center"},children:[o.jsx(nt,{icon:o.jsx(bt,{as:js}),label:h?"试运行中":"沙箱试运行",title:"在浏览器里试运行:INLINE、JQ、SWITCH、DO_WHILE 等任务真实执行,HTTP 等调用外部系统的任务使用模拟数据",onClick:()=>{m()},disabled:h,variant:"primary",style:{borderRadius:"7px 0 0 7px",borderRight:"1px solid color-mix(in srgb, var(--color-on-accent) 25%, transparent)"}}),o.jsx(nt,{icon:o.jsx(bt,{as:hb}),title:"人工模拟数据配置台 (自定义 workflow.input / 节点 Mock 输出 / 故障注入 / 分支路由)",onClick:()=>C(!0),variant:"primary",style:{borderRadius:"0 7px 7px 0",padding:"4px 7px",minWidth:"26px"}})]})]}),s==="run"&&o.jsxs(o.Fragment,{children:[o.jsx(Ou,{}),A&&o.jsxs("span",{role:"note",title:"这是浏览器沙箱的试运行结果,不是服务端的真实执行;调用外部系统的任务使用了模拟数据",style:{display:"inline-flex",alignItems:"center",gap:"6px",height:"28px",padding:"0 10px",borderRadius:"var(--cm-radius-sm)",border:"1px solid color-mix(in srgb, var(--cm-data) 45%, transparent)",background:"var(--cm-data-tint)",color:"var(--cm-data)",fontSize:"12px",fontWeight:600,whiteSpace:"nowrap"},children:[o.jsx(bt,{as:js}),"沙箱试运行 · 模拟数据"]}),o.jsx(nt,{icon:o.jsx(bt,{as:hb}),label:"模拟数据重跑",title:"打开沙箱人工模拟数据配置台,调整入参、分支或注入节点故障后重跑",onClick:()=>C(!0)}),o.jsx(nt,{icon:o.jsx(bt,{as:Gj}),label:"瀑布流回放",title:"并发甘特瀑布流与时间旅行调试器 (Time-Travel)",onClick:()=>f(!p),active:p}),o.jsx(nt,{icon:o.jsx(bt,{as:pn}),label:"返回编辑",title:"退出试跑/运行态视图,返回工作流编排画布",onClick:()=>a("edit")})]}),o.jsx(iI,{isOpen:I,onClose:()=>C(!1)}),s==="run"&&l&&n&&!A&&o.jsxs(o.Fragment,{children:[H&&n.onResume&&o.jsx(nt,{icon:o.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("path",{d:"M4 3l9 5-9 5z"})}),label:"继续",title:P?"继续执行工作流":"操作权限受限",onClick:()=>P&&n.onResume(R),disabled:!P,variant:"primary"}),L&&n.onPause&&o.jsx(nt,{icon:o.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:[o.jsx("rect",{x:"4",y:"3",width:"3",height:"10",rx:"1"}),o.jsx("rect",{x:"9",y:"3",width:"3",height:"10",rx:"1"})]}),label:"暂停",title:P?"暂停工作流执行":"操作权限受限",onClick:()=>P&&n.onPause(R),disabled:!P}),(L||H)&&n.onTerminate&&o.jsx(nt,{icon:o.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("rect",{x:"3",y:"3",width:"10",height:"10",rx:"1"})}),label:"终止",title:P?"终止工作流执行":"操作权限受限",onClick:()=>P&&n.onTerminate(R),disabled:!P,variant:"danger"}),F&&n.onRetry&&o.jsx(nt,{icon:o.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[o.jsx("path",{d:"M13 2v4h-4"}),o.jsx("path",{d:"M13 6A7 7 0 1 1 9.5 2.5"})]}),label:"重试",title:P?"重试失败的工作流":"操作权限受限",onClick:()=>P&&n.onRetry(R),disabled:!P,variant:"primary"}),W&&n.onRestart&&o.jsxs("div",{ref:N,style:{position:"relative",display:"flex"},children:[o.jsxs("button",{disabled:!P,onClick:()=>P&&n.onRestart(R,{useLatestDef:!0}),title:P?"使用当前最新定义版本重新运行":"操作权限受限",style:{display:"flex",alignItems:"center",gap:"6px",background:"var(--bg-tertiary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRight:"none",borderRadius:"6px 0 0 6px",padding:"6px 10px",cursor:P?"pointer":"not-allowed",opacity:P?1:.5,fontSize:"13px",fontWeight:500,height:"32px"},children:[o.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[o.jsx("path",{d:"M3 14v-4h4"}),o.jsx("path",{d:"M3 10A7 7 0 1 1 6.5 13.5"})]}),"重启"]}),o.jsx("button",{disabled:!P,onClick:()=>P&&w($=>!$),title:P?"展开重启版本选项":"操作权限受限",style:{display:"flex",alignItems:"center",justifyContent:"center",background:P&&_?"var(--bg-secondary)":"var(--bg-tertiary)",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",borderRadius:"0 6px 6px 0",padding:"6px 6px",cursor:P?"pointer":"not-allowed",opacity:P?1:.5,height:"32px",width:"22px",fontSize:"10px"},children:o.jsx("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"currentColor",children:o.jsx("path",{d:"M1 3l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})})}),_&&o.jsxs("div",{style:{position:"absolute",top:"36px",right:0,background:"var(--glass-surface)",backdropFilter:"blur(12px)",border:"1px solid var(--glass-border)",borderRadius:"10px",boxShadow:"var(--cm-shadow-float)",zIndex:2e3,minWidth:"180px",overflow:"hidden"},children:[o.jsx("div",{style:{padding:"6px 12px 4px",fontSize:"11px",color:"var(--text-secondary)",fontWeight:600,letterSpacing:"0.5px",textTransform:"uppercase"},children:"选择版本"}),o.jsxs("button",{onClick:()=>{n.onRestart(R,{useLatestDef:!0}),w(!1)},style:Nb,onMouseEnter:$=>$.currentTarget.style.background="var(--bg-secondary)",onMouseLeave:$=>$.currentTarget.style.background="transparent",children:[o.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("circle",{cx:"8",cy:"8",r:"6"}),o.jsx("path",{d:"M8 5v3l2 1"})]}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,fontSize:"13px"},children:"当前版本"}),o.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"使用最新工作流定义"})]})]}),o.jsxs("button",{onClick:()=>{n.onRestart(R,{useLatestDef:!1}),w(!1)},style:Nb,onMouseEnter:$=>$.currentTarget.style.background="var(--bg-secondary)",onMouseLeave:$=>$.currentTarget.style.background="transparent",children:[o.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("rect",{x:"3",y:"2",width:"10",height:"12",rx:"1"}),o.jsx("path",{d:"M6 6h4M6 9h3"})]}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,fontSize:"13px"},children:"执行版本"}),o.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:"使用本次运行时的定义"})]})]})]})]})]})]})},Nb={display:"flex",alignItems:"center",gap:"10px",width:"100%",padding:"8px 12px",background:"transparent",border:"none",cursor:"pointer",textAlign:"left",color:"var(--text-primary)",transition:"background 0.15s"},cI=[{id:"basic",label:"基本信息"},{id:"timeout",label:"超时与容错"},{id:"params",label:"参数配置"},{id:"advanced",label:"高级设置"}],dI=({isOpen:e,onClose:t})=>{const{workflowDef:r,updateWorkflowProperties:n,mode:s}=re($e(E=>({workflowDef:E.workflowDef,updateWorkflowProperties:E.updateWorkflowProperties,mode:E.mode}))),[a,i]=T.useState(r),[l,c]=T.useState("basic"),d=s!=="edit";T.useEffect(()=>{r&&i(r)},[r,e]);const u=T.useCallback(E=>{E.key==="Escape"&&t()},[t]);if(T.useEffect(()=>{if(e)return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[e,u]),!e||!a)return null;const p="var(--text-primary)",f="var(--glass-border)",m="var(--bg-tertiary)",h="var(--text-secondary)",y=(E,R)=>{if(!a||d)return;const L={...a,[E]:R};i(L),n({[E]:R})},x=(E,R,L)=>{if(!a||d)return;const F={...a[E]||{},[R]:L};i(q=>({...q,[E]:F})),n({[E]:F})},g=(E,R)=>{if(!(!a||d))try{const L=JSON.parse(R),H={...a,[E]:L};i(H),n({[E]:L})}catch{i(L=>({...L,[`_${E}_str`]:R}))}},v={width:"100%",padding:"10px 14px",borderRadius:"8px",border:`1px solid ${f}`,background:m,color:p,fontSize:"14px",outline:"none",boxSizing:"border-box"},k={display:"block",fontSize:"11px",color:h,marginBottom:"8px",fontWeight:600},b=(E,R,L="text",H)=>o.jsxs("div",{style:{marginBottom:"20px"},children:[o.jsx("label",{style:k,children:E.toUpperCase()}),o.jsx("input",{className:"wsp-input",type:L,value:a?.[R]??"",onChange:F=>y(R,L==="number"?F.target.value===""?0:parseInt(F.target.value):F.target.value),disabled:d||H?.readOnly,placeholder:H?.placeholder,style:{...v,opacity:d||H?.readOnly?.6:1}})]}),S=(E,R,L=!1,H=6)=>{const F=a?.[`_${R}_str`]!==void 0?a[`_${R}_str`]:typeof a?.[R]=="object"?JSON.stringify(a[R],null,2):a?.[R];return o.jsxs("div",{style:{marginBottom:"20px"},children:[o.jsxs("label",{style:k,children:[E.toUpperCase()," ",L&&"(JSON)"]}),o.jsx("textarea",{className:"wsp-input",value:F||"",onChange:q=>L?g(R,q.target.value):y(R,q.target.value),rows:H,disabled:d,style:{...v,fontSize:"13px",fontFamily:L?"var(--font-mono)":"inherit",resize:"vertical",opacity:d?.6:1}})]})},j=(E,R,L)=>o.jsxs("div",{style:{marginBottom:"20px"},children:[o.jsx("label",{style:k,children:E.toUpperCase()}),o.jsx("select",{className:"wsp-input",value:a?.[R]??L[0]?.value,onChange:H=>y(R,H.target.value),disabled:d,style:{...v,opacity:d?.6:1,cursor:d?"not-allowed":"pointer"},children:L.map(H=>o.jsx("option",{value:H.value,children:H.label},H.value))})]}),_=(E,R)=>{const L=!!a?.[R];return o.jsxs("div",{style:{marginBottom:"20px",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsx("label",{style:{fontSize:"13px",color:p},children:E}),o.jsx("button",{type:"button",role:"switch","aria-checked":L,onClick:()=>!d&&y(R,!L),disabled:d,style:{width:"44px",height:"24px",borderRadius:"12px",border:"none",background:L?"var(--color-accent)":"var(--border-primary)",position:"relative",cursor:d?"not-allowed":"pointer",transition:"background 0.2s",opacity:d?.6:1,flexShrink:0},children:o.jsx("span",{style:{position:"absolute",top:"2px",left:L?"22px":"2px",width:"20px",height:"20px",borderRadius:"50%",background:"var(--text-inverse)",transition:"left 0.2s",boxShadow:"var(--cm-shadow-card)"}})})]})},w=()=>o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"3fr 1fr",gap:"20px"},children:[b("工作流名称","name"),b("版本号","version","number")]}),S("描述信息","description",!1,3),b("负责人邮箱","ownerEmail","text",{placeholder:"owner@example.com"}),b("Schema 版本","schemaVersion","number",{readOnly:!0})]}),I=()=>o.jsxs(o.Fragment,{children:[j("超时策略","timeoutPolicy",[{value:"ALERT_ONLY",label:"ALERT_ONLY — 仅告警"},{value:"TIME_OUT_WF",label:"TIME_OUT_WF — 超时终止"}]),o.jsxs("div",{children:[b("超时秒数","timeoutSeconds","number",{placeholder:"0 表示不超时"}),a?.timeoutPolicy==="ALERT_ONLY"&&o.jsx("p",{style:{fontSize:"11px",color:h,marginTop:"-12px",marginBottom:"20px"},children:"当前策略为 ALERT_ONLY,超时仅触发告警,不会终止工作流。"})]}),b("失败补偿工作流","failureWorkflow","text",{placeholder:"输入补偿工作流名称"}),_("允许重启 (restartable)","restartable")]}),C=()=>{const E=Ct(a?.inputParameters,a),R=A=>{if(d||!a)return;const W=G_(A,a);i({...a,...W}),n(W)},L=()=>{const A=[...E,{name:`param_${E.length+1}`,type:"string",required:!1}];R(A)},H=A=>{const W=E.filter((P,$)=>$!==A);R(W)},F=(A,W,P)=>{const $=E.map((X,D)=>D===A?{...X,[W]:P}:X);R($)},q={padding:"6px 10px",borderRadius:"6px",border:`1px solid ${f}`,background:m,color:p,fontSize:"12px",outline:"none",fontFamily:"inherit"};return o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{marginBottom:"20px"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"12px"},children:[o.jsx("label",{style:k,children:"入参声明 (INPUT PARAMETERS)"}),!d&&o.jsx("button",{onClick:L,style:{background:"var(--color-accent)",color:"var(--text-inverse)",border:"none",borderRadius:"6px",padding:"5px 12px",fontSize:"12px",fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:"+ 添加参数"})]}),E.length===0?o.jsx("p",{style:{fontSize:"12px",color:h,margin:0,padding:"12px",background:"var(--bg-secondary)",borderRadius:"8px",border:`1px solid ${f}`},children:'暂无入参声明。点击"+ 添加参数"来定义工作流的输入参数,这些参数将在执行验证时作为表单字段展示。'}):o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px"},children:E.map((A,W)=>o.jsxs("div",{style:{background:"var(--bg-secondary)",border:`1px solid ${f}`,borderRadius:"10px",padding:"12px"},children:[o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"2fr 1fr auto auto",gap:"8px",alignItems:"center"},children:[o.jsx("input",{style:q,placeholder:"参数名",value:A.name,onChange:P=>F(W,"name",P.target.value),disabled:d}),o.jsx("select",{style:{...q,cursor:d?"not-allowed":"pointer"},value:A.type??"string",onChange:P=>F(W,"type",P.target.value),disabled:d,children:["string","number","boolean","object","array"].map(P=>o.jsx("option",{value:P,children:P},P))}),o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"4px",fontSize:"12px",color:h,cursor:d?"not-allowed":"pointer",whiteSpace:"nowrap"},children:[o.jsx("input",{type:"checkbox",checked:!!A.required,onChange:P=>F(W,"required",P.target.checked),disabled:d,style:{accentColor:"var(--color-accent)"}}),"必填"]}),!d&&o.jsx("button",{onClick:()=>H(W),style:{background:"none",border:"none",color:"var(--status-failed)",cursor:"pointer",fontSize:"16px",padding:"0 4px",opacity:.7,lineHeight:1},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{marginTop:"8px",display:"flex",flexDirection:"column",gap:"6px"},children:[o.jsx("input",{style:q,placeholder:"说明(可选)",value:A.description??"",onChange:P=>F(W,"description",P.target.value),disabled:d}),o.jsx("input",{style:q,placeholder:`示例值(如 ${A.type==="number"?"42":A.type==="boolean"?"true":'"value"'})`,value:A.example!==void 0?typeof A.example=="object"?JSON.stringify(A.example):String(A.example):"",onChange:P=>{let $=P.target.value;try{$=JSON.parse(P.target.value)}catch{}F(W,"example",$)},disabled:d})]})]},W))})]}),S("输出参数映射 (outputParameters)","outputParameters",!0),S("默认输入模板 (inputTemplate)","inputTemplate",!0),S("工作流级变量 (variables)","variables",!0)]})},N=()=>o.jsxs(o.Fragment,{children:[_("启用状态监听 (workflowStatusListenerEnabled)","workflowStatusListenerEnabled"),a?.workflowStatusListenerEnabled&&b("状态事件目标 (Listener Sink)","workflowStatusListenerSink","text",{placeholder:"conductor:workflow_status_event"}),o.jsxs("div",{style:{borderTop:`1px solid ${f}`,marginTop:"8px",paddingTop:"20px"},children:[_("强制 Schema 校验 (enforceSchema)","enforceSchema"),a?.enforceSchema&&o.jsxs(o.Fragment,{children:[S("输入 Schema (inputSchema)","inputSchema",!0,4),S("输出 Schema (outputSchema)","outputSchema",!0,4)]})]}),o.jsxs("div",{style:{borderTop:`1px solid ${f}`,marginTop:"8px",paddingTop:"20px"},children:[o.jsx("label",{style:{...k,marginBottom:"16px"},children:"并发限流 (RATE LIMIT)"}),o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"2fr 1fr",gap:"20px"},children:[o.jsxs("div",{children:[o.jsx("label",{style:k,children:"RATE LIMIT KEY"}),o.jsx("input",{className:"wsp-input",type:"text",value:a?.rateLimitConfig?.rateLimitKey??"",onChange:E=>x("rateLimitConfig","rateLimitKey",E.target.value),disabled:d,placeholder:"限流键",style:{...v,opacity:d?.6:1}})]}),o.jsxs("div",{children:[o.jsx("label",{style:k,children:"并发上限"}),o.jsx("input",{className:"wsp-input",type:"number",value:a?.rateLimitConfig?.concurrentExecLimit??"",onChange:E=>x("rateLimitConfig","concurrentExecLimit",E.target.value===""?0:parseInt(E.target.value)),disabled:d,placeholder:"0",style:{...v,opacity:d?.6:1}})]})]})]})]}),O=()=>{switch(l){case"basic":return w();case"timeout":return I();case"params":return C();case"advanced":return N()}};return o.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"工作流全局配置",onClick:t,style:{position:"fixed",left:0,top:0,width:"100vw",height:"100vh",backgroundColor:"var(--cm-overlay)",zIndex:1300,display:"flex",justifyContent:"center",alignItems:"center",backdropFilter:"blur(4px)",animation:"fadeIn 0.2s ease"},children:o.jsxs("div",{onClick:E=>E.stopPropagation(),style:{width:"680px",maxHeight:"85vh",background:"var(--glass-surface)",borderRadius:"16px",boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden",animation:"slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)",border:`1px solid ${f}`,backdropFilter:"blur(20px)"},children:[o.jsxs("div",{style:{padding:"24px 32px 0 32px",background:"var(--bg-highlight)"},children:[o.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"20px"},children:[o.jsxs("div",{children:[o.jsx("h2",{style:{margin:0,fontSize:"20px",color:p},children:"工作流全局配置"}),o.jsx("p",{style:{margin:"4px 0 0 0",fontSize:"12px",color:h},children:d?"当前为只读模式":"配置工作流级属性,所有更改将实时保存"})]}),o.jsx("button",{className:"wsp-close",onClick:t,"aria-label":"关闭",style:{background:"none",border:"none",color:p,fontSize:"24px",cursor:"pointer",opacity:.6},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{display:"flex",borderBottom:`1px solid ${f}`},children:cI.map(E=>o.jsx("button",{className:"wsp-tab",onClick:()=>c(E.id),style:{padding:"10px 20px",fontSize:"13px",fontWeight:l===E.id?600:400,color:l===E.id?"var(--color-accent)":h,background:"none",border:"none",borderBottom:l===E.id?"2px solid var(--color-accent)":"2px solid transparent",cursor:"pointer",transition:"all 0.2s",marginBottom:"-1px"},children:E.label},E.id))})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",padding:"28px 32px"},children:O()}),o.jsx("div",{style:{padding:"20px 32px",borderTop:`1px solid ${f}`,background:"var(--bg-highlight)",display:"flex",justifyContent:"flex-end"},children:o.jsx("button",{className:"wsp-footer-btn",onClick:t,style:{padding:"12px 32px",background:"var(--color-accent)",color:"var(--text-inverse)",border:"none",borderRadius:"12px",fontWeight:"bold",cursor:"pointer",boxShadow:"0 4px 12px var(--color-accent-bg)"},children:"完成并关闭"})})]})})},Ps="#ff6a13",uI=({size:e=26,className:t,style:r})=>o.jsxs("svg",{width:e,height:e,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",className:t,style:{flexShrink:0,display:"inline-block",verticalAlign:"middle",...r},role:"img","aria-label":"CMASTER",children:[o.jsxs("g",{stroke:Ps,strokeWidth:"3",opacity:"0.7",children:[o.jsx("line",{x1:"50",y1:"50",x2:"75.5",y2:"24.5"}),o.jsx("line",{x1:"50",y1:"50",x2:"14",y2:"50"}),o.jsx("line",{x1:"50",y1:"50",x2:"75.5",y2:"75.5"})]}),o.jsx("path",{d:"M75.46 24.54A36 36 0 1 0 75.46 75.46",fill:"none",stroke:Ps,strokeWidth:"9",strokeLinecap:"round"}),o.jsxs("g",{stroke:Ps,strokeWidth:"5",style:{fill:"var(--cm-surface-1)"},children:[o.jsx("circle",{cx:"75.46",cy:"24.54",r:"7"}),o.jsx("circle",{cx:"14",cy:"50",r:"7"}),o.jsx("circle",{cx:"75.46",cy:"75.46",r:"7"})]}),o.jsx("circle",{cx:"50",cy:"50",r:"10",fill:Ps})]}),pI=({onRequestImport:e})=>{const{createBlankWorkflow:t}=re($e(i=>({createBlankWorkflow:i.createBlankWorkflow}))),[r,n]=T.useState(""),s=()=>{t(r||void 0),re.temporal.getState().clear()},a=()=>{t(r||void 0),re.temporal.getState().clear(),window.dispatchEvent(new CustomEvent("open-ai-chat"))};return o.jsxs("div",{className:"empty-state-panel",children:[o.jsx("div",{style:{marginBottom:12},children:o.jsx(uI,{size:46})}),o.jsx("h2",{className:"empty-state-title",children:"创建新工作流"}),o.jsx("p",{className:"empty-state-subtitle",children:"从空白画布开始设计,或让 AI 帮你生成完整流程"}),o.jsx("input",{className:"empty-state-name-input",type:"text",placeholder:"工作流名称(可选)",value:r,onChange:i=>n(i.target.value),onKeyDown:i=>{i.key==="Enter"&&s()}}),o.jsxs("div",{className:"empty-state-actions",children:[o.jsxs("button",{className:"empty-state-btn primary",onClick:s,children:[o.jsx("span",{className:"empty-state-btn-icon",children:o.jsx(Qv,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),"空白工作流"]}),o.jsxs("button",{className:"empty-state-btn",onClick:a,children:[o.jsx("span",{className:"empty-state-btn-icon",children:o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),"AI 生成"]}),e&&o.jsxs("button",{className:"empty-state-btn",onClick:e,children:[o.jsx("span",{className:"empty-state-btn-icon",children:o.jsx(vb,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),"导入 JSON"]})]})]})},fI={success:{bg:"var(--cm-status-success)",text:"var(--text-primary)"},error:{bg:"var(--cm-status-failed)",text:"var(--text-primary)"},info:{bg:"var(--color-accent)",text:"var(--text-primary)"}},mI=({messages:e,onDismiss:t})=>e.length===0?null:o.jsx("div",{style:{position:"fixed",bottom:"24px",left:"50%",transform:"translateX(-50%)",zIndex:3e3,display:"flex",flexDirection:"column",gap:"8px",pointerEvents:"none"},children:e.map(r=>o.jsx(hI,{message:r,onDismiss:t},r.id))}),hI=({message:e,onDismiss:t})=>{const r=fI[e.type||"info"];return T.useEffect(()=>{const n=setTimeout(()=>t(e.id),2500);return()=>clearTimeout(n)},[e.id,t]),o.jsx("div",{role:"status","aria-live":"polite",style:{backgroundColor:r.bg,color:r.text,padding:"10px 20px",borderRadius:"8px",fontSize:"13px",fontWeight:500,boxShadow:"var(--cm-shadow-float)",animation:"toastSlideUp 0.3s ease-out",pointerEvents:"auto",cursor:"pointer",whiteSpace:"nowrap"},onClick:()=>t(e.id),children:e.text})},Cb=["shift","alt","meta","mod","ctrl","control"],yI={esc:"escape",return:"enter",left:"arrowleft",right:"arrowright",up:"arrowup",down:"arrowdown",ShiftLeft:"shift",ShiftRight:"shift",AltLeft:"alt",AltRight:"alt",MetaLeft:"meta",MetaRight:"meta",OSLeft:"meta",OSRight:"meta",ControlLeft:"ctrl",ControlRight:"ctrl"};function nr(e){return(yI[e.trim()]||e.trim()).toLowerCase().replace(/key|digit|numpad/,"")}function Eb(e){return Cb.includes(e)}function Pu(e,t=","){return e.toLowerCase().split(t)}function Au(e,t="+",r=">",n=!1,s){let a=[],i=!1;e=e.trim(),e.includes(r)?(i=!0,a=e.toLocaleLowerCase().split(r).map(d=>nr(d))):a=e.toLocaleLowerCase().split(t).map(d=>nr(d));const l={alt:a.includes("alt"),ctrl:a.includes("ctrl")||a.includes("control"),shift:a.includes("shift"),meta:a.includes("meta"),mod:a.includes("mod"),useKey:n},c=a.filter(d=>!Cb.includes(d));return{...l,keys:c,description:s,isSequence:i,hotkey:e}}typeof document<"u"&&(document.addEventListener("keydown",e=>{e.code!==void 0&&Rb([nr(e.code)])}),document.addEventListener("keyup",e=>{e.code!==void 0&&Ob([nr(e.code)])})),typeof window<"u"&&(window.addEventListener("blur",()=>{Ft.clear()}),window.addEventListener("contextmenu",()=>{setTimeout(()=>{Ft.clear()},0)}));const Ft=new Set;function $u(e){return Array.isArray(e)}function gI(e,t=","){return($u(e)?e:e.split(t)).every(r=>Ft.has(r.trim().toLowerCase()))}function Rb(e){const t=Array.isArray(e)?e:[e];Ft.has("meta")&&Ft.forEach(r=>!Eb(r)&&Ft.delete(r.toLowerCase())),t.forEach(r=>Ft.add(r.toLowerCase()))}function Ob(e){const t=Array.isArray(e)?e:[e];e==="meta"?Ft.clear():t.forEach(r=>Ft.delete(r.toLowerCase()))}function xI(e,t,r){(typeof r=="function"&&r(e,t)||r===!0)&&e.preventDefault()}function vI(e,t,r){return typeof r=="function"?r(e,t):r===!0||r===void 0}const bI=["input","textarea","select","searchbox","slider","spinbutton","menuitem","menuitemcheckbox","menuitemradio","option","radio","textbox"];function kI(e){return Pb(e,bI)}function Pb(e,t=!1){const{target:r,composed:n}=e;let s,a;return wI(r)&&n?(s=e.composedPath()[0]&&e.composedPath()[0].tagName,a=e.composedPath()[0]&&e.composedPath()[0].role):(s=r&&r.tagName,a=r&&r.role),$u(t)?!!(s&&t&&t.some(i=>i.toLowerCase()===s.toLowerCase()||i===a)):!!(s&&t&&t)}function wI(e){return!!e.tagName&&!e.tagName.startsWith("-")&&e.tagName.includes("-")}function SI(e,t){return e.length===0&&t?(console.warn('A hotkey has the "scopes" option set, however no active scopes were found. If you want to use the global scopes feature, you need to wrap your app in a <HotkeysProvider>'),!0):t?e.some(r=>t.includes(r))||e.includes("*"):!0}const _I=(e,t,r=!1)=>{const{alt:n,meta:s,mod:a,shift:i,ctrl:l,keys:c,useKey:d}=t,{code:u,key:p,ctrlKey:f,metaKey:m,shiftKey:h,altKey:y}=e,x=nr(u);if(d&&c?.length===1&&c.includes(p))return!0;if(!c?.includes(x)&&!["ctrl","control","unknown","meta","alt","shift","os"].includes(x))return!1;if(!r){if(n!==y&&x!=="alt"||i!==h&&x!=="shift")return!1;if(a){if(!m&&!f)return!1}else if(s!==m&&x!=="meta"&&x!=="os"||l!==f&&x!=="ctrl"&&x!=="control")return!1}return c&&c.length===1&&c.includes(x)?!0:c?gI(c):!c},jI=T.createContext(void 0),TI=()=>T.useContext(jI);function Ab(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce((r,n)=>r&&Ab(e[n],t[n]),!0):e===t}const II=T.createContext({hotkeys:[],activeScopes:[],toggleScope:()=>{},enableScope:()=>{},disableScope:()=>{}}),NI=()=>T.useContext(II);function CI(e){const t=T.useRef(void 0);return Ab(t.current,e)||(t.current=e),t.current}const $b=e=>{e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation()},EI=typeof window<"u"?T.useLayoutEffect:T.useEffect;function qr(e,t,r,n){const s=T.useRef(null),a=T.useRef(!1),i=Array.isArray(r)?Array.isArray(n)?void 0:n:r,l=$u(e)?e.join(i?.delimiter):e,c=Array.isArray(r)?r:Array.isArray(n)?n:void 0,d=T.useCallback(t,c??[]),u=T.useRef(d);c?u.current=d:u.current=t;const p=CI(i),{activeScopes:f}=NI(),m=TI();return EI(()=>{if(p?.enabled===!1||!SI(f,p?.scopes))return;let h=[],y;const x=(b,S=!1)=>{if(!(kI(b)&&!Pb(b,p?.enableOnFormTags))){if(s.current!==null){const j=s.current.getRootNode();if((j instanceof Document||j instanceof ShadowRoot)&&j.activeElement!==s.current&&!s.current.contains(j.activeElement)){$b(b);return}}b.target?.isContentEditable&&!p?.enableOnContentEditable||Pu(l,p?.delimiter).forEach(j=>{if(j.includes(p?.splitKey??"+")&&j.includes(p?.sequenceSplitKey??">")){console.warn(`Hotkey ${j} contains both ${p?.splitKey??"+"} and ${p?.sequenceSplitKey??">"} which is not supported.`);return}const _=Au(j,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description);if(_.isSequence){y=setTimeout(()=>{h=[]},p?.sequenceTimeoutMs??1e3);const w=_.useKey?b.key:nr(b.code);if(Eb(w.toLowerCase()))return;h.push(w);const I=_.keys?.[h.length-1];if(w!==I){h=[],y&&clearTimeout(y);return}h.length===_.keys?.length&&(u.current(b,_),y&&clearTimeout(y),h=[])}else if(_I(b,_,p?.ignoreModifiers)||_.keys?.includes("*")){if(p?.ignoreEventWhen?.(b)||S&&a.current)return;if(xI(b,_,p?.preventDefault),!vI(b,_,p?.enabled)){$b(b);return}u.current(b,_),S||(a.current=!0)}})}},g=b=>{b.code!==void 0&&(Rb(nr(b.code)),(p?.keydown===void 0&&p?.keyup!==!0||p?.keydown)&&x(b))},v=b=>{b.code!==void 0&&(Ob(nr(b.code)),a.current=!1,p?.keyup&&x(b,!0))},k=s.current||i?.document||document;return k.addEventListener("keyup",v,i?.eventListenerOptions),k.addEventListener("keydown",g,i?.eventListenerOptions),m&&Pu(l,p?.delimiter).forEach(b=>m.addHotkey(Au(b,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description))),()=>{k.removeEventListener("keyup",v,i?.eventListenerOptions),k.removeEventListener("keydown",g,i?.eventListenerOptions),m&&Pu(l,p?.delimiter).forEach(b=>m.removeHotkey(Au(b,p?.splitKey,p?.sequenceSplitKey,p?.useKey,p?.description))),h=[],y&&clearTimeout(y)}},[l,p,f]),s}const RI=e=>{const{mode:t,removeNode:r,selectedTask:n,pasteTask:s}=re($e(f=>({mode:f.mode,removeNode:f.removeNode,selectedTask:f.selectedTask,pasteTask:f.pasteTask}))),a=re.temporal,{undo:i,redo:l}=da(a,f=>f),c=e?.confirm||(f=>Promise.resolve(window.confirm(f))),d=e?.showToast,u=f=>{const m=f.target;return m.tagName==="INPUT"||m.tagName==="TEXTAREA"||m.isContentEditable},p=()=>{requestAnimationFrame(()=>{const f=re.getState(),{nodes:m,edges:h}=ut(f.nodes,f.edges,{direction:f.layoutDirection,mode:f.mode});re.setState({nodes:m,edges:h})})};return qr("mod+z",f=>{t==="edit"&&(u(f)||(f.preventDefault(),i(),p()))},[t,i]),qr(["mod+shift+z","mod+y"],f=>{t==="edit"&&(u(f)||(f.preventDefault(),l(),p()))},[t,l]),qr("delete, backspace",f=>{if(t!=="edit"||!n||u(f))return;f.preventDefault();const m=n.taskReferenceName,{message:h}=su(re.getState().workflowDef,m);c(h).then(y=>{y&&r(m)})},[t,n,r,c]),qr("mod+c",f=>{if(!(t!=="edit"||!n)&&!u(f)){if(n.type==="JOIN"){d?.("JOIN 任务不能独立复制","error");return}f.preventDefault();try{localStorage.setItem("conductor-clipboard",JSON.stringify(n)),d?.("任务已复制","success")}catch{d?.("复制失败","error")}}},[t,n,d]),qr("mod+v",f=>{if(t==="edit"&&!u(f)){f.preventDefault();try{const m=localStorage.getItem("conductor-clipboard");if(m){const h=JSON.parse(m);s(h),d?.("任务已粘贴","success")}}catch{d?.("粘贴失败","error")}}},[t,s,d]),qr("mod+s",f=>{f.preventDefault();const m=re.getState().workflowDef;if(!m){d?.("没有可保存的工作流:请先打开或新建一个工作流","info");return}if(!e?.onSave){d?.("当前页面没有接入保存(未提供 onSave):修改只保留在画布中,请导出 JSON 保存","info");return}try{e.onSave(m),d?.("已交给宿主保存","success")}catch(h){d?.(`保存失败:${h?.message||"宿主保存回调出错"},请稍后重试`,"error")}},{enableOnFormTags:!0,enableOnContentEditable:!0},[e?.onSave,d]),{}},gn=()=>{const[e,t]=T.useState(null),r=T.useCallback((a,i)=>new Promise(l=>{t({message:a,confirmLabel:i,resolve:l})}),[]),n=T.useCallback(()=>{e?.resolve(!0),t(null)},[e]),s=T.useCallback(()=>{e?.resolve(!1),t(null)},[e]);return{confirm:r,confirmState:e,handleConfirm:n,handleCancel:s}},OI=()=>{const[e,t]=T.useState([]),r=T.useCallback((s,a="info")=>{const i=Date.now().toString();t(l=>[...l,{id:i,text:s,type:a}])},[]),n=T.useCallback(s=>{t(a=>a.filter(i=>i.id!==s))},[]);return{toasts:e,showToast:r,dismissToast:n}},Lu={id:"welcome",role:"assistant",content:`你好!我是 AI 工作流助手。
37
39
 
38
40
  我可以帮你:
39
- - 🆕 **从零创建**工作流(描述业务场景即可)
40
- - ➕ **添加/修改/删除**任务节点
41
- - 🔀 **重构拓扑**(如串行改并行)
42
- - 🔍 **诊断问题**和优化建议
41
+ - **从零创建**工作流(描述业务场景即可)
42
+ - **添加 / 修改 / 删除**任务节点
43
+ - **重构拓扑**(如串行改并行)
44
+ - **诊断问题**和优化建议
45
+
46
+ 直接告诉我你想做什么吧!`,timestamp:Date.now()},PI=()=>(e,t)=>({config:{provider:"auto",apiKey:""},messages:[Lu],isStreaming:!1,streamingText:"",chatPanelOpen:!0,pendingProposal:null,pendingPlan:null,pendingRepair:null,followUpChips:null,undoStack:[],pendingClarification:null,pendingRecommendation:null,pendingAutoSend:null,toolStatus:"",retryInput:null,timelineEntries:[],synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null,metrics:{totalProposals:0,acceptedProposals:0,rejectedProposals:0,totalPromptTokens:0,totalCompletionTokens:0},setConfig:r=>e(n=>({config:{...n.config,...r}})),addMessage:r=>{const n=`msg_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,s={...r,id:n,timestamp:Date.now()};return e(a=>({messages:[...a.messages,s]})),n},updateMessage:(r,n)=>e(s=>({messages:s.messages.map(a=>a.id===r?{...a,content:n}:a)})),setStreaming:r=>e({isStreaming:r}),setStreamingText:r=>e({streamingText:r}),appendStreamingText:r=>e(n=>({streamingText:n.streamingText+r})),clearMessages:()=>e({messages:[Lu],streamingText:"",isStreaming:!1,pendingProposal:null,pendingPlan:null,pendingRepair:null,followUpChips:null,pendingClarification:null,pendingRecommendation:null,pendingAutoSend:null,toolStatus:"",retryInput:null,timelineEntries:[],synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null}),setChatPanelOpen:r=>e({chatPanelOpen:r}),toggleChatPanel:()=>e(r=>({chatPanelOpen:!r.chatPanelOpen})),setProposal:r=>{const n=`prop_${Date.now()}`,s=re.getState().workflowDef,a=JSON.stringify(s);return e(i=>({pendingProposal:{...r,id:n,baselineHash:a},metrics:{...i.metrics,totalProposals:i.metrics.totalProposals+1}})),n},clearProposal:()=>e({pendingProposal:null}),recordAccept:()=>e(r=>({metrics:{...r.metrics,acceptedProposals:r.metrics.acceptedProposals+1},pendingProposal:null,synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null})),recordReject:()=>e(r=>({metrics:{...r.metrics,rejectedProposals:r.metrics.rejectedProposals+1},pendingProposal:null,synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null})),getMetrics:()=>t().metrics,recordUsage:r=>e(n=>({metrics:{...n.metrics,totalPromptTokens:n.metrics.totalPromptTokens+(r.promptTokens??0),totalCompletionTokens:n.metrics.totalCompletionTokens+(r.completionTokens??0)}})),setFollowUpChips:r=>e({followUpChips:r}),clearFollowUpChips:()=>e({followUpChips:null}),setPlan:r=>{const n=`plan_${Date.now()}`;return e({pendingPlan:{...r,id:n}}),n},clearPlan:()=>e({pendingPlan:null}),setRepair:r=>{const n=`repair_${Date.now()}`;return e({pendingRepair:{...r,id:n}}),n},clearRepair:()=>e({pendingRepair:null}),pushUndo:r=>e(n=>({undoStack:[...n.undoStack.slice(-4),r]})),popUndo:()=>{const r=t().undoStack;if(r.length===0)return null;const n=r[r.length-1];return e({undoStack:r.slice(0,-1)}),n},clearUndo:()=>e({undoStack:[]}),canUndo:()=>t().undoStack.length>0,setClarification:r=>{const n=`clarif_${Date.now()}`;return e({pendingClarification:{...r,id:n}}),n},clearClarification:()=>e({pendingClarification:null}),setRecommendation:r=>{const n=`rec_${Date.now()}`;return e({pendingRecommendation:{...r,id:n}}),n},clearRecommendation:()=>e({pendingRecommendation:null}),setPendingAutoSend:r=>e({pendingAutoSend:r}),setToolStatus:r=>e({toolStatus:r}),setRetryInput:r=>e({retryInput:r}),addTimelineEntry:(r,n="done")=>e(s=>({timelineEntries:[...s.timelineEntries,{id:`tl_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,label:r,icon:n}]})),clearTimeline:()=>e({timelineEntries:[]}),setSynthesisStage:(r,n)=>e(s=>({synthesisPhase:r,workingDraft:n!==void 0?n:s.workingDraft})),saveCheckpoint:r=>e({durableCheckpoint:r}),clearCheckpoint:()=>e({durableCheckpoint:null,synthesisPhase:"idle",workingDraft:null}),hydrateFromDraft:(r,n,s)=>e({messages:r.length>0?r:[Lu],pendingProposal:n,durableCheckpoint:s?s.status==="running"?{...s,status:"paused"}:s:null,synthesisPhase:s?.phase??"idle",workingDraft:s?.workingDraft??null})});function Lb(e){const t={};return!e||typeof e!="object"||((e.provider==="openai"||e.provider==="anthropic"||e.provider==="auto")&&(t.provider=e.provider),typeof e.baseUrl=="string"&&e.baseUrl&&(t.baseUrl=e.baseUrl),typeof e.model=="string"&&e.model&&(t.model=e.model)),t}function AI(e,t){const r=e??{};return{...t,config:{...t.config,...Lb(r.config)},metrics:r.metrics?{...t.metrics,...r.metrics}:t.metrics}}function $I(e="ai-workflow-config"){const t=PI();return e===!1?Vn()(t):Vn()(qp(t,{name:e,storage:ua(()=>localStorage),partialize:r=>({config:Lb(r.config),metrics:r.metrics}),merge:(r,n)=>AI(r,n)}))}const xn=$I(),LI=T.createContext(null);function Db(){return T.useContext(LI)}const DI=()=>{const{mode:e,showWaterfallPanel:t,setShowWaterfallPanel:r,workflowInstance:n,executionData:s,taskMap:a,selectedTask:i,setSelectedTask:l,setSelectedTaskInstance:c,timeTravelTimestamp:d,setTimeTravelTimestamp:u}=re($e(v=>({mode:v.mode,showWaterfallPanel:v.showWaterfallPanel,setShowWaterfallPanel:v.setShowWaterfallPanel,workflowInstance:v.workflowInstance,executionData:v.executionData,taskMap:v.taskMap,selectedTask:v.selectedTask,setSelectedTask:v.setSelectedTask,setSelectedTaskInstance:v.setSelectedTaskInstance,timeTravelTimestamp:v.timeTravelTimestamp,setTimeTravelTimestamp:v.setTimeTravelTimestamp}))),p=T.useMemo(()=>{const v=n?.tasks?.length?n.tasks:s?Object.values(s).flatMap(C=>C.attempts):[];if(v.length===0)return null;const k=v.filter(C=>C.startTime||C.scheduledTime);if(k.length===0)return null;const b=Math.min(...k.map(C=>C.scheduledTime||C.startTime||Date.now())),S=Math.max(...k.map(C=>C.endTime||C.startTime||C.scheduledTime||b+100)),j=Math.max(S-b,50),_=k.filter(C=>!["FORK_JOIN","JOIN","DO_WHILE","SWITCH","DECISION"].includes(C.taskType)).map(C=>Math.max((C.endTime||S)-(C.startTime||C.scheduledTime||b),0)).sort((C,N)=>N-C),w=_.length>0?Math.max(_[Math.floor(_.length*.25)]||80,50):100,I=k.map((C,N)=>{const O=C.scheduledTime||C.startTime||b,E=C.startTime||O,R=C.endTime||S,L=Math.max(E-O,0),H=Math.max(R-E,1),F=!["FORK_JOIN","JOIN","DO_WHILE","SWITCH","DECISION"].includes(C.taskType)&&H>=w,q=(O-b)/j*100,A=L/j*100,W=(E-b)/j*100,P=Math.max(H/j*100,1.2);return{key:C.taskId||`${C.referenceTaskName}-${N}`,task:C,sched:O,start:E,end:R,queueMs:L,execMs:H,isCritical:F,queueLeftPct:q,queueWidthPct:A,execLeftPct:W,execWidthPct:P}});return{minTime:b,maxTime:S,totalSpanMs:j,rows:I}},[n,s]);if(e!=="run"||!t||!p)return null;const{minTime:f,totalSpanMs:m,rows:h}=p,y=d!==null?d-f:m,x=Math.min(Math.max(y/m*100,0),100),g=v=>rt(v).color;return o.jsxs("div",{style:{position:"absolute",left:16,right:i?466:16,bottom:16,height:255,zIndex:1100,background:"color-mix(in srgb, var(--cm-surface-1) 95%, transparent)",backdropFilter:"blur(16px)",border:"1px solid color-mix(in srgb, var(--cm-data) 30%, transparent)",borderRadius:12,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden",transition:"right 0.25s ease"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"8px 14px",borderBottom:"1px solid var(--border-primary)",background:"var(--cm-overlay)",flexShrink:0},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsxs("span",{style:{fontSize:12,fontWeight:700,color:"var(--text-primary)"},children:[o.jsx(Kv,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"并发执行瀑布流 & 时间旅行调试器"]}),o.jsxs("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:999,background:"color-mix(in srgb, var(--cm-data) 14%, transparent)",color:"var(--cm-data)",fontFamily:"monospace",fontWeight:600},children:["总跨度 ",m,"ms · ",h.length," 个任务步"]}),o.jsxs("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:999,background:"color-mix(in srgb, var(--color-accent) 15%, transparent)",color:"var(--color-accent)",fontWeight:600},children:[o.jsx(wu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"关键路径耗时瓶颈高亮"]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flex:1,maxWidth:420},children:[o.jsxs("span",{style:{fontSize:10,color:"var(--text-muted)",whiteSpace:"nowrap"},children:[o.jsx(lT,{size:12,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"时间旅行指针:"]}),o.jsx("input",{type:"range",min:0,max:m,value:y,onChange:v=>{const k=Number(v.target.value);k>=m?u(null):u(f+k)},style:{flex:1,cursor:"pointer",accentColor:"var(--cm-data)"}}),o.jsx("span",{style:{fontSize:11,fontFamily:"monospace",color:d!==null?"var(--cm-status-warning)":"var(--cm-status-success)",fontWeight:700,minWidth:74,textAlign:"right"},children:d!==null?`+${y}ms`:"最新态 (Live)"}),d!==null&&o.jsx("button",{type:"button",onClick:()=>u(null),style:{fontSize:10,padding:"2px 7px",borderRadius:4,border:"1px solid color-mix(in srgb, var(--cm-status-warning) 40%, transparent)",background:"color-mix(in srgb, var(--cm-status-warning) 12%, transparent)",color:"var(--cm-status-warning)",cursor:"pointer"},children:"重置"})]}),o.jsx("button",{type:"button",onClick:()=>r(!1),style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:15,padding:"2px 6px"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",position:"relative",padding:"6px 0"},children:h.map(v=>{const k=v.task.referenceTaskName.replace(/__\d+$/,""),b=i?.taskReferenceName===k,S=d!==null&&v.start>d,j=d!==null&&v.start<=d&&v.end>d;return o.jsxs("div",{onClick:()=>{const _=a[k]||v.task.workflowTask;_&&(l(_),c(v.task))},style:{display:"grid",gridTemplateColumns:"210px 1fr 90px",alignItems:"center",gap:8,padding:"4px 14px",cursor:"pointer",background:b?"color-mix(in srgb, var(--cm-data) 14%, transparent)":"transparent",opacity:S?.35:1,borderLeft:b?"3px solid var(--cm-data)":"3px solid transparent"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},children:[(()=>{const _=rt(j?"IN_PROGRESS":v.task.status),w=_.icon;return o.jsx("span",{role:"img","aria-label":`状态:${_.label}`,title:_.label,style:{display:"inline-flex",color:_.color,flexShrink:0},children:o.jsx(w,{size:12,strokeWidth:1.75,"aria-hidden":"true"})})})(),o.jsx("span",{style:{fontSize:11,fontFamily:"monospace",color:"var(--text-primary)",fontWeight:b?700:500,overflow:"hidden",textOverflow:"ellipsis"},title:v.task.referenceTaskName,children:v.task.referenceTaskName}),v.isCritical&&o.jsxs("span",{title:"关键路径耗时瓶颈节点",style:{fontSize:9,padding:"1px 4px",borderRadius:4,background:"color-mix(in srgb, var(--color-accent) 20%, transparent)",color:"var(--color-accent)",fontWeight:700,flexShrink:0},children:[o.jsx(wu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"瓶颈"]})]}),o.jsxs("div",{style:{position:"relative",height:14,background:"var(--cm-overlay)",borderRadius:4,overflow:"hidden",border:"1px solid var(--border-primary)"},children:[v.queueWidthPct>.3&&o.jsx("div",{title:`排队等待: ${v.queueMs}ms`,style:{position:"absolute",left:`${v.queueLeftPct}%`,width:`${v.queueWidthPct}%`,top:3,bottom:3,background:"color-mix(in srgb, var(--cm-text-muted) 35%, transparent)",borderRadius:"2px 0 0 2px"}}),o.jsx("div",{title:`执行耗时: ${v.execMs}ms (排队 ${v.queueMs}ms)`,style:{position:"absolute",left:`${v.execLeftPct}%`,width:`${v.execWidthPct}%`,top:2,bottom:2,borderRadius:3,background:v.isCritical?"linear-gradient(90deg, var(--color-accent), var(--cm-status-failed))":g(v.task.status),boxShadow:j?"0 0 8px color-mix(in srgb, var(--cm-data) 80%, transparent)":void 0}}),d!==null&&o.jsx("div",{style:{position:"absolute",left:`${x}%`,top:0,bottom:0,width:2,background:"var(--cm-status-warning)",pointerEvents:"none"}})]}),o.jsxs("div",{style:{fontSize:10,fontFamily:"monospace",color:v.isCritical?"var(--color-accent)":"var(--text-muted)",textAlign:"right",fontWeight:v.isCritical?700:400},children:[v.task.status!=="COMPLETED"&&!j?o.jsx("span",{style:{color:g(v.task.status),marginRight:4},children:rt(v.task.status).label}):null,v.execMs,"ms",v.queueMs>0?o.jsxs("span",{style:{opacity:.6,fontSize:9},children:[" (+",v.queueMs,"q)"]}):null]})]},v.key)})})]})};function MI(){return Vn(e=>({items:[],setLibrary:t=>e({items:t}),clearLibrary:()=>e({items:[]})}))}const WI=MI();function Du(e){return(Array.isArray(e.type)?e.type.find(r=>r!=="null"):e.type)||"string"}function Mu(e){if(!e||e.type&&e.type!=="JSON")return null;const t=e.data;if(!t||typeof t!="object")return null;const r=t.properties;return!r||typeof r!="object"?null:{properties:r,required:Array.isArray(t.required)?t.required:[]}}function zI(e,t,r,n){const s=Du(t),a={key:e,label:t.title||e,type:"text",help:t.description,required:r,defaultValue:t.default!==void 0?t.default:n,placeholder:Array.isArray(t.examples)&&t.examples.length>0?String(t.examples[0]):void 0,acceptsPills:!0};return Array.isArray(t.enum)&&t.enum.length>0?{...a,type:"select",options:t.enum.map(i=>({label:String(i),value:i})),acceptsPills:!0}:s==="boolean"?{...a,type:"boolean",acceptsPills:!1}:s==="number"||s==="integer"?{...a,type:"number"}:s==="object"||s==="array"?{...a,type:"textarea",help:[t.description,"JSON 格式"].filter(Boolean).join(";")}:t.format==="textarea"||typeof t.maxLength=="number"&&t.maxLength>200?{...a,type:"textarea"}:a}function As(e,t,r){const n=Mu(e);return n?Object.entries(n.properties).map(([a,i])=>zI(a,i||{},n.required.includes(a),r?.[a])):Array.from(new Set([...t,...Object.keys(r||{})])).map(a=>({key:a,label:a,type:"text",defaultValue:r?.[a],acceptsPills:!0}))}function qI(e){return Array.isArray(e)?"array":typeof e=="number"?"number":typeof e=="boolean"?"boolean":e&&typeof e=="object"?"object":"string"}function Wu(e){switch(e){case"number":return 0;case"boolean":return!0;case"array":return[];case"object":return{};default:return"sample"}}function vn(e,t,r){const n=Mu(e);return n?Object.entries(n.properties).map(([a,i])=>{const l=Du(i||{}),c=l==="integer"?"number":["string","number","boolean","object","array"].includes(l)?l:"string";return{key:a,label:i?.title||a,type:c,description:i?.description,example:Array.isArray(i?.examples)&&i.examples.length>0?i.examples[0]:Wu(c)}}):Array.from(new Set([...t,...Object.keys(r||{})])).map(a=>{const i=r?.[a],l=typeof i=="string"&&i.includes("${"),c=l||i===void 0?"string":qI(i);return{key:a,label:a,type:c,example:l||i===void 0?Wu(c):i}})}function $s(e,t){return t?e.map(r=>t[r.key]?{...r,...t[r.key],key:r.key}:r):e}function Mb(e,t,r){const n={},s=new Set(t.map(a=>a.key));for(const[a,i]of Object.entries(e||{})){if(!s.has(a)||typeof i!="string"||i.includes("${")){n[a]=i;continue}const l=r[a];if(l==="number"||l==="integer")n[a]=i.trim()!==""&&!Number.isNaN(Number(i))?Number(i):i;else if(l==="object"||l==="array")try{n[a]=JSON.parse(i)}catch{n[a]=i}else n[a]=i}return n}function Wb(e){const t=Mu(e),r={};if(t)for(const[n,s]of Object.entries(t.properties))r[n]=Du(s||{});return r}function zb(e){const t={};for(const r of e)t[r.key]=r.example!==void 0?r.example:Wu(r.type);return t}function zu(e,t={}){if(t.hidden)return null;const r=Ct(e.inputParameters).map(l=>l.name),n=$s(As(e.inputSchema,r,e.inputTemplate),t.fieldOverrides),s=$s(vn(e.outputSchema,[],e.outputParameters),t.outputOverrides),a=Wb(e.inputSchema),i=e.version??1;return{id:`wf.${e.name}`,name:t.label||e.name,category:t.category||"custom",icon:t.icon||"puzzle",description:t.description||e.description||"",connector:t.connector,kind:"workflow",workflowRef:{name:e.name,version:i},level:t.level,...t.domain?{domain:t.domain}:{},tags:t.tags,ownerEmail:e.ownerEmail,riskLevel:t.riskLevel||"safe",fields:n,outputs:s,compile:(l,c)=>{const d=c.libraryRef?.name===e.name?c.libraryRef.version:void 0;return{name:e.name,taskReferenceName:c.taskReferenceName,type:"SUB_WORKFLOW",description:t.label||e.description,inputParameters:Mb(l,n,a),subWorkflowParam:{name:e.name,...d!==void 0?{version:d}:{}}}},decompile:l=>l.type==="SUB_WORKFLOW"&&l.subWorkflowParam?.name===e.name?{...l.inputParameters||{}}:null,mockOutput:()=>zb(s)}}function qu(e,t={}){if(t.hidden)return null;const r=$s(As(e.inputSchema,e.inputKeys||[],e.inputTemplate),t.fieldOverrides),n=$s(vn(e.outputSchema,e.outputKeys||[]),t.outputOverrides),s=Wb(e.inputSchema);return{id:`task.${e.name}`,name:t.label||e.name,category:t.category||"custom",icon:t.icon||"settings",description:t.description||e.description||"",connector:t.connector,kind:"task",level:t.level,...t.domain?{domain:t.domain}:{},tags:t.tags,ownerEmail:e.ownerEmail,riskLevel:t.riskLevel||"safe",fields:r,outputs:n,compile:(a,i)=>({name:e.name,taskReferenceName:i.taskReferenceName,type:"SIMPLE",description:t.label||e.description,inputParameters:Mb(a,r,s)}),decompile:a=>a.type==="SIMPLE"&&a.name===e.name?{...a.inputParameters||{}}:null,mockOutput:()=>zb(n)}}function FI(e){return e.map(t=>zu(t.workflowDef,t.extension)).filter(t=>t!==null)}function BI(e){return e.map(t=>qu(t.taskDef,t.extension)).filter(t=>t!==null)}const qb={L1:1,L2:2,L3:3};function Fb(e,t){return!e||!t?!0:qb[t]<=qb[e]}const HI=["compute","storage","network","monitor","notify","logic","human","custom"];function Fu(e){if(!e)return{};const t=HI.includes(e.category)?e.category:void 0;return{...e.displayName?{label:e.displayName}:{},...t?{category:t}:{},...e.icon?{icon:e.icon}:{},...e.level?{level:e.level}:{},...e.domain?{domain:e.domain}:{},...e.tags?{tags:e.tags}:{},...e.action??{}}}function Bb(e){const t=[];for(const r of e.entries()){if(r.source!=="provider")continue;const n={...r.record.def,version:r.version},s=zu(n,{...r.level?{level:r.level}:{},...r.domain?{domain:r.domain}:{},...Fu(r.record.extension)});s&&t.push(r.deprecated?{...s,deprecated:!0}:s)}for(const r of e.tasks()){const n=qu(r.def,Fu(r.extension));n&&t.push(n)}return t}function Hb(e){if(!e||typeof e!="object")return"string";if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(r=>String(r)).join("|");const t=Array.isArray(e.type)?e.type.find(r=>r!=="null"):e.type;return t==="array"?`${e.items&&typeof e.items=="object"?Hb(e.items):"any"}[]`:t||"string"}function bn(e){if(!e||e.type&&e.type!=="JSON")return;const t=e.data&&typeof e.data=="object"?e.data.properties:void 0;if(!t||typeof t!="object")return;const r={};for(const[n,s]of Object.entries(t))r[n]=Hb(s);return Object.keys(r).length>0?r:void 0}function Ls(e){const t=Array.from(new Set(e));if(t.length!==0)return Object.fromEntries(t.map(r=>[r,"string"]))}function JI(e){const t=[];for(const s of e.tasks()){const a=s.def;t.push({taskName:a.name,taskType:"SIMPLE",description:a.description,inputSchema:bn(a.inputSchema)??Ls([...a.inputKeys??[],...Object.keys(a.inputTemplate??{})]),outputSchema:bn(a.outputSchema)??Ls(a.outputKeys??[])})}for(const s of e.entries()){if(s.source!=="provider"||s.deprecated)continue;const a=s.record.def;t.push({taskName:s.name,taskType:"SUB_WORKFLOW",description:a.description,inputSchema:bn(a.inputSchema)??Ls(Ct(a.inputParameters).map(i=>i.name)),outputSchema:bn(a.outputSchema)??Ls(Object.keys(a.outputParameters??{}))})}const r=new Set(t.map(s=>s.taskName));return[...e.staticTaskSchemas().filter(s=>!r.has(s.taskName)),...t]}function UI(e){return Bu(e.entries())}function Bu(e){return e.filter(t=>!t.deprecated).map(t=>({workflowName:t.name,workflowLevel:t.level??"L1",version:t.source==="static"?t.versionLabel??String(t.version):String(t.version),...t.domain?{domain:t.domain}:{},description:t.description??"",tags:t.tags}))}function Jb(e,t={}){return e.filter(r=>!(r.deprecated||t.currentLevel&&r.kind==="workflow"&&!Fb(t.currentLevel,r.level)))}const Ds="其他";function Ms(e){return e.domain?e.domain:e.kind==="workflow"?Ds:null}function Ub(e){if(!e.some(n=>!!n.domain))return[];const t=[];let r=!1;for(const n of e){const s=Ms(n);s!==null&&(s===Ds?r=!0:t.includes(s)||t.push(s))}return r?[...t,Ds]:t}function VI(e){return e?.name==="AbortError"?"请求已取消":e instanceof TypeError?"无法连接 AI 代理服务,请检查网络或 endpoint 配置":e?.message||"请求失败"}async function*KI(e,t,r){let n;try{n=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",...e.headers??{}},body:JSON.stringify(t),signal:r})}catch(c){yield{type:"error",message:VI(c)},yield{type:"done"};return}if(!n.ok){const c=await n.text().catch(()=>"");let d=`HTTP ${n.status}`;try{const u=JSON.parse(c),p=u.error?.message||u.message;p&&(d=`${d}: ${p}`)}catch{}yield{type:"error",message:d},yield{type:"done"};return}const s=n.body?.getReader();if(!s){yield{type:"error",message:"ReadableStream not supported"},yield{type:"done"};return}const a=new TextDecoder;let i="";try{for(;;){const{done:c,value:d}=await s.read();if(c)break;i+=a.decode(d,{stream:!0});const u=i.split(`
47
+
48
+ `);i=u.pop()??"";for(const p of u){const f=p.trim();if(!f.startsWith("data:"))continue;const m=f.slice(5).trim();if(m)try{yield JSON.parse(m)}catch{}}}}finally{s.cancel().catch(()=>{})}const l=i.trim();if(l.startsWith("data:")){const c=l.slice(5).trim();if(c)try{yield JSON.parse(c)}catch{}}}const Vb="DIRECT_FETCH_FAILED";function Ws(e,t={}){const r=e||"未知错误",n=r.toLowerCase(),a=(t.mode??"direct")==="direct";return/\b401\b/.test(r)||n.includes("unauthorized")||n.includes("invalid api key")||n.includes("incorrect api key")||n.includes("invalid x-api-key")||n.includes("authentication fail")||n.includes("authentication_error")||n.includes("invalid_api_key")?{display:a?"API Key 无效或已过期,AI 服务拒绝了请求。请在 AI 设置中检查 API Key 是否完整、是否属于当前服务商(Base URL),然后重试。":"AI 代理服务未通过鉴权。请联系管理员检查代理服务的登录状态或鉴权配置。",raw:r}:/\b402\b/.test(r)||n.includes("insufficient balance")||n.includes("insufficient_quota")||n.includes("exceeded your current quota")||n.includes("credit balance is too low")||n.includes("余额不足")?{display:a?"AI 服务账户余额或额度不足。请到服务商控制台充值或提高额度,或在 AI 设置中换一个可用的 API Key。":"AI 服务账户余额或额度不足。请联系管理员为代理服务使用的账户充值。",raw:r}:n.includes("model_not_found")||/model .*(does not exist|not found)/.test(n)||/the model .* does not exist/.test(n)||n.includes("not_found_error")&&n.includes("model")||/\bmodel:\s/.test(n)||n.includes("unknown model")||n.includes("model not exist")?{display:a?"找不到所配置的模型,或当前 API Key 无权使用它。请在 AI 设置中检查模型名称(留空则使用服务商默认模型)。":"代理服务找不到所配置的模型。请联系管理员检查代理服务的模型配置。",raw:r}:/\b404\b/.test(r)?{display:a?"AI 服务地址不存在(404)。请在 AI 设置中检查 Base URL 是否正确(OpenAI 兼容服务通常以 /v1 结尾)。":"AI 代理服务地址不存在(404)。请联系管理员检查 endpoint 配置。",raw:r}:n.includes("temperature")&&(n.includes("unsupported")||n.includes("not support")||n.includes("does not support"))?{display:"当前模型不支持自定义 temperature 参数。请在 AI 设置中换用其他模型;如使用代理服务,请让管理员在代理中去掉该参数。",raw:r}:/\b403\b/.test(r)||n.includes("forbidden")||n.includes("permission_error")?{display:a?"AI 服务拒绝了此次请求(没有权限)。请确认 API Key 有权访问该模型和地区,或在 AI 设置中更换 API Key。":"AI 代理服务拒绝了此次请求。请联系管理员检查你的使用权限。",raw:r}:/\b429\b/.test(r)||n.includes("rate limit")||n.includes("too many requests")||n.includes("rate_limit")?{display:"请求过于频繁,AI 服务暂时限流。请等待片刻后点击重试。",raw:r}:n.includes("timeout")||n.includes("timed out")?{display:"连接 AI 服务超时。请检查网络后重试。",raw:r}:r.startsWith(Vb)?{display:"浏览器无法连接到 AI 服务:可能是网络不通、Base URL 填写有误,或该服务不允许浏览器直接访问(跨域 CORS 限制)。请检查 Base URL 与网络;若服务不支持浏览器直连,请改用集成方后端代理(transport: endpoint)。",raw:r}:n.includes("failed to fetch")||n.includes("networkerror")||n.includes("network error")||n.includes("无法连接")||n.includes("load failed")?{display:a?"无法连接 AI 服务:可能是网络不通,或该服务不允许浏览器直接访问(跨域 CORS 限制)。请检查网络和 Base URL 后重试。":"无法连接 AI 代理服务。请检查网络后重试;如持续出现,请联系管理员确认代理服务地址。",raw:r}:/\b5\d{2}\b/.test(r)||n.includes("internal server error")||n.includes("bad gateway")||n.includes("service unavailable")||n.includes("overloaded")?{display:"AI 服务暂时不可用。请稍后点击重试。",raw:r}:{display:"AI 服务返回了无法识别的错误。请点击重试;如持续出现,请联系管理员并提供错误时间。",raw:r}}const GI={openai:{baseUrl:"https://api.openai.com/v1",model:"gpt-4o"},anthropic:{baseUrl:"https://api.anthropic.com",model:"claude-sonnet-4-6"}};function Hu(e){let t;!e.provider||e.provider==="auto"?t=e.baseUrl?.includes("anthropic")?"anthropic":"openai":t=e.provider;const r=GI[t];return{provider:t,apiKey:e.apiKey,baseUrl:e.baseUrl?.replace(/\/$/,"")||r.baseUrl,model:e.model||r.model,resolvedProvider:t}}function YI(e){return!/(^|\/)(o\d|gpt-5)/i.test(e.trim())}async function Kb(e){const t=await e.text().catch(()=>"");let r="";try{const n=JSON.parse(t);r=n?.error?.message||n?.message||(typeof n?.error=="string"?n.error:"")||(n?.error?.type?String(n.error.type):"")}catch{r=t.slice(0,300)}return r||(r=e.statusText),`HTTP ${e.status}${r?`: ${r}`:""}`}async function Gb(e,t){try{return await fetch(e,t)}catch(r){if(r?.name==="AbortError")throw r;return{failed:`${Vb}: ${r?.message??String(r)}`}}}function XI(e){return e.map(t=>{if(t.role==="assistant"&&t.tool_calls?.length)return{role:"assistant",content:t.content||null,tool_calls:t.tool_calls.map(n=>({id:n.id,type:"function",function:{name:n.name,arguments:JSON.stringify(n.args)}}))};const r={role:t.role,content:t.content};return t.tool_call_id&&(r.tool_call_id=t.tool_call_id),r})}function ZI(e){const t=e.filter(s=>s.role!=="system").map(s=>{if(s.role==="tool")return{_kind:"tool_result",tool_use_id:s.tool_call_id??"",content:s.content};if(s.role==="assistant"&&s.tool_calls?.length){const a=[];return s.content&&a.push({type:"text",text:s.content}),s.tool_calls.forEach(i=>a.push({type:"tool_use",id:i.id,name:i.name,input:i.args})),{_kind:"msg",role:"assistant",content:a}}return{_kind:"msg",role:s.role==="assistant"?"assistant":"user",content:s.content}}),r=[];let n=0;for(;n<t.length;){const s=t[n];if(s._kind==="tool_result"){const a=[{type:"tool_result",tool_use_id:s.tool_use_id,content:s.content}];for(;n+1<t.length&&t[n+1]._kind==="tool_result";){n++;const i=t[n];a.push({type:"tool_result",tool_use_id:i.tool_use_id,content:i.content})}r.push({role:"user",content:a})}else r.push({role:s.role,content:s.content});n++}return r}async function*QI(e,t,r,n){const s=Hu(r),a={model:s.model,messages:XI(e),stream:!0,stream_options:{include_usage:!0}};YI(s.model)&&(a.temperature=.7),t.length>0&&(a.tools=t,a.tool_choice="auto");const i=await Gb(`${s.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s.apiKey}`},body:JSON.stringify(a),signal:n});if("failed"in i){yield{type:"error",message:i.failed};return}if(!i.ok){yield{type:"error",message:await Kb(i)};return}const l=i.body?.getReader();if(!l){yield{type:"error",message:"ReadableStream not supported"};return}const c=new TextDecoder,d={};let u="";try{for(;;){const{done:p,value:f}=await l.read();if(p)break;const m=c.decode(f,{stream:!0}),h=(u+m).split(`
49
+ `);u=h.pop()??"";let y=!1;for(const x of h){const g=x.trim();if(!g.startsWith("data: "))continue;const v=g.slice(6);if(v==="[DONE]"){y=!0;break}try{const k=JSON.parse(v);k.usage&&(yield{type:"usage",promptTokens:k.usage.prompt_tokens,completionTokens:k.usage.completion_tokens});const b=k.choices?.[0]?.delta;if(!b)continue;if(b.content&&(yield{type:"text",content:b.content}),b.tool_calls)for(const S of b.tool_calls){const j=S.index??0;d[j]||(d[j]={id:S.id||"",name:"",args:""}),S.id&&(d[j].id=S.id),S.function?.name&&(d[j].name+=S.function.name),S.function?.arguments&&(d[j].args+=S.function.arguments)}}catch{}}if(y)break}}finally{l.cancel().catch(()=>{})}if(u.trim().startsWith("data: ")){const p=u.trim().slice(6);if(p&&p!=="[DONE]")try{const m=JSON.parse(p).choices?.[0]?.delta;if(m?.tool_calls)for(const h of m.tool_calls){const y=h.index??0;d[y]||(d[y]={id:h.id||"",name:"",args:""}),h.id&&(d[y].id=h.id),h.function?.name&&(d[y].name+=h.function.name),h.function?.arguments&&(d[y].args+=h.function.arguments)}}catch{}}for(const p of Object.values(d)){let f;try{f=JSON.parse(p.args||"{}")}catch{console.warn(`[streamOpenAI] truncated JSON for tool "${p.name}":`,p.args?.slice(0,200)),f={__truncated__:!0}}yield{type:"tool_call",id:p.id,name:p.name,args:f}}yield{type:"done"}}async function*eN(e,t,r,n){const s=Hu(r),a=e.find(g=>g.role==="system"),i=ZI(e),l=t.map(g=>({name:g.function.name,description:g.function.description,input_schema:g.function.parameters})),c={model:s.model,max_tokens:16e3,messages:i,stream:!0};a&&(c.system=a.content),l.length>0&&(c.tools=l);const d=await Gb(`${s.baseUrl}/messages`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":s.apiKey,"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"},body:JSON.stringify(c),signal:n});if("failed"in d){yield{type:"error",message:d.failed};return}if(!d.ok){yield{type:"error",message:await Kb(d)};return}const u=d.body?.getReader();if(!u){yield{type:"error",message:"ReadableStream not supported"};return}const p=new TextDecoder;let f="",m="",h="",y="",x;try{for(;;){const{done:g,value:v}=await u.read();if(g)break;const k=p.decode(v,{stream:!0}),b=(y+k).split(`
50
+ `);y=b.pop()??"";for(const S of b){const j=S.trim();if(j.startsWith("data: "))try{const _=JSON.parse(j.slice(6));switch(_.type){case"message_start":x=_.message?.usage?.input_tokens;break;case"message_delta":_.usage?.output_tokens!==void 0&&(yield{type:"usage",promptTokens:x,completionTokens:_.usage.output_tokens});break;case"content_block_start":_.content_block?.type==="tool_use"&&(f=_.content_block.id,m=_.content_block.name,h="");break;case"content_block_delta":_.delta?.type==="text_delta"?yield{type:"text",content:_.delta.text}:_.delta?.type==="input_json_delta"&&(h+=_.delta.partial_json);break;case"content_block_stop":if(m){let w;try{w=JSON.parse(h||"{}")}catch{console.warn(`[streamAnthropic] truncated JSON for tool "${m}":`,h?.slice(0,200)),w={__truncated__:!0}}yield{type:"tool_call",id:f,name:m,args:w},m="",f="",h=""}break}}catch{}}}}finally{u.cancel().catch(()=>{})}yield{type:"done"}}async function*Yb(e,t,r,n){if(r.transport?.type==="endpoint"){yield*KI(r.transport,{messages:e,tools:t},n);return}if(r.transport?.type==="custom"){const a=n??new AbortController().signal;yield*r.transport.stream({messages:e,tools:t},a);return}if(!r.apiKey){yield{type:"error",message:"未配置 API Key。请在 AI 设置中填写 API Key 后重试。"},yield{type:"done"};return}Hu(r).resolvedProvider==="anthropic"?yield*eN(e,t,r,n):yield*QI(e,t,r,n)}const Xb=[{type:"function",function:{name:"init_workflow_blueprint",description:"【阶段 1/4:定义工作流蓝图与元信息】在创建或大范围重构复杂工作流时,首先调用此工具定义工作流名称、描述、版本、超时策略及工作流级输入/输出参数契约。调用后请继续调用 scaffold_workflow_topology 编排任务拓扑。",parameters:{type:"object",properties:{name:{type:"string",description:"工作流唯一英文标识名(如 order_fulfillment_flow)"},description:{type:"string",description:"工作流业务目标与场景描述(中文)"},version:{type:"number",description:"版本号,默认 1"},ownerEmail:{type:"string",description:"负责人邮箱(如 team@example.com)"},timeoutPolicy:{type:"string",enum:["TIME_OUT_WF","ALERT_ONLY"],description:"超时策略(默认 ALERT_ONLY)"},timeoutSeconds:{type:"number",description:"工作流整体超时时间(秒,默认 3600)"},failureWorkflow:{type:"string",description:"失败补偿子工作流名称(可选)"},inputParameters:{type:"array",items:{type:"string"},description:'工作流期望接收的输入参数字段名列表(如 ["orderId", "userId", "amount"])'},outputParameters:{type:"object",description:"工作流输出参数映射(可选,也可在阶段 3 补充)"}},required:["name","description"]}}},{type:"function",function:{name:"scaffold_workflow_topology",description:"【阶段 2/4:设计整体任务编排拓扑】在定义工作流蓝图后调用,构建完整的任务节点拓扑骨架(包含顺序节点、SWITCH 条件分支、FORK_JOIN 并行与 JOIN 汇合、DO_WHILE 循环等结构)。此阶段专注任务划分、唯一 taskReferenceName 和控制流拓扑正确性;详细参数可在阶段 3 补充。",parameters:{type:"object",properties:{tasks:{type:"array",description:"按执行顺序排列的顶层 TaskDef 数组(可包含嵌套的 decisionCases / defaultCase / forkTasks / loopOver)",items:{type:"object"}}},required:["tasks"]}}},{type:"function",function:{name:"configure_workflow_tasks",description:"【阶段 3/4:逐项或分批补充任务配置与数据流】对已编排好拓扑的任务补充具体配置(inputParameters 数据流引用 ${workflow.input.x} / ${upstream_ref.output.y}、HTTP 请求配置、SUB_WORKFLOW 引用、timeoutSeconds、retryCount 等)。支持一次配置全部或分多次按模块配置,完成后调用 commit_workflow_proposal 整体验证。",parameters:{type:"object",properties:{configurations:{type:"array",description:"每个任务的详细配置项列表",items:{type:"object",properties:{ref:{type:"string",description:"目标任务的 taskReferenceName(支持顶层或分支/循环内嵌套任务)"},name:{type:"string",description:"任务显示名称(可选更新)"},description:{type:"string",description:"任务业务说明"},inputParameters:{type:"object",description:'任务输入参数及上下游数据流引用(如 { "orderId": "${workflow.input.orderId}" })'},httpRequest:{type:"object",description:"[HTTP 任务] 请求配置 { uri, method, headers, body },会自动规范化到 inputParameters.http_request"},subWorkflowParam:{type:"object",description:"[SUB_WORKFLOW 任务] 子工作流配置 { name, version }"},timeoutSeconds:{type:"number",description:"任务超时秒数"},retryCount:{type:"number",description:"失败重试次数"},retryLogic:{type:"string",enum:["FIXED","EXPONENTIAL_BACKOFF","LINEAR_BACKOFF"],description:"重试退避策略"},optional:{type:"boolean",description:"是否为可选任务(失败不中断主流程)"},caseValueParam:{type:"string",description:"[SWITCH/DECISION] 分支判断参数名"},caseExpression:{type:"string",description:"[SWITCH] 分支评估表达式"},loopCondition:{type:"string",description:"[DO_WHILE] 循环继续条件表达式"},joinOn:{type:"array",items:{type:"string"},description:"[JOIN] 等待汇合的分支末尾 taskReferenceName 列表"}},required:["ref"]}},outputParameters:{type:"object",description:'工作流最终输出参数映射(如 { "result": "${final_task.output.data}" })'}},required:["configurations"]}}},{type:"function",function:{name:"commit_workflow_proposal",description:"【阶段 4/4:整体验证配置并提交方案】对当前工作流草稿执行全量语义、控制流与上下游数据流引用校验。校验通过后正式生成变更方案展示给用户;若发现问题将返回精确诊断供你修正。",parameters:{type:"object",properties:{summary:{type:"string",description:"本次工作流设计或重构的架构摘要说明(可选)"}}}}},{type:"function",function:{name:"replace_workflow",description:"用完整的工作流 JSON 替换当前画布。适用于:极简工作流(1-2 个节点)快速创建,或直接提交完整 WorkflowDef。对于 3 个及以上节点或含分支/并行的复杂流程,请优先使用四阶段渐进工具(init_workflow_blueprint -> scaffold_workflow_topology -> configure_workflow_tasks -> commit_workflow_proposal)。",parameters:{type:"object",properties:{workflow:{type:"object",description:"完整的 Conductor 工作流定义(包含 name, tasks[] 等字段)"}},required:["workflow"]}}},{type:"function",function:{name:"patch_workflow",description:"对当前工作流进行局部修改(增/改/删任务,修改工作流属性)。适用于小范围变更,比 replace_workflow 更精准。",parameters:{type:"object",properties:{ops:{type:"array",description:"操作列表,按顺序执行",items:{type:"object",properties:{op:{type:"string",enum:["add_task","update_task","remove_task","update_props","add_switch_branch","add_fork_branch"],description:"操作类型"},task:{type:"object",description:"[add_task] 完整的 TaskDef 对象(必须有 name, taskReferenceName, type)"},afterRef:{type:"string",description:"[add_task] 插入到哪个任务之后(支持顶层或嵌套分支内的 taskReferenceName)。不传则追加到末尾"},parentRef:{type:"string",description:"[add_task] 可选:插入到指定容器节点内部(SWITCH / FORK_JOIN / DO_WHILE 的 taskReferenceName)"},branchName:{type:"string",description:'[add_task] 可选:当 parentRef 为 SWITCH 时指定分支名(或 "default");当为 FORK_JOIN 时指定分支索引(如 "0", "1")'},ref:{type:"string",description:"[update_task / remove_task / add_switch_branch / add_fork_branch] 目标任务的 taskReferenceName"},changes:{type:"object",description:"[update_task] 要修改的字段(仅传入需要变更的字段)"},props:{type:"object",description:"[update_props] 工作流级别属性(name, description, timeoutSeconds, ownerEmail 等)"},caseName:{type:"string",description:'[add_switch_branch] 新分支名称(如 "approved", "rejected", "default")'}},required:["op"]}}},required:["ops"]}}},{type:"function",function:{name:"get_workflow_state",description:"获取当前工作流的完整状态(任务列表、拓扑、校验结果)。在需要了解当前流程再做决策时调用。",parameters:{type:"object",properties:{includeFull:{type:"boolean",description:"是否包含完整 JSON(默认 false,仅返回摘要)"}}}}},{type:"function",function:{name:"validate_workflow",description:"校验当前工作流的合法性,返回错误和警告详情。在提交前或排查问题时调用。",parameters:{type:"object",properties:{}}}},{type:"function",function:{name:"ask_clarification",description:"当用户意图模糊时,向用户提出澄清问题。提供 2-4 个可选选项帮助用户表达真实意图。调用后停止等待用户回复,不要继续执行其他操作。",parameters:{type:"object",properties:{question:{type:"string",description:"澄清问题,简洁明了(不超过 30 字)"},context:{type:"string",description:"你对用户需求的初步理解(1句话)"},options:{type:"array",description:"2-4 个选项",items:{type:"object",properties:{id:{type:"string"},label:{type:"string",description:"简短标签(≤12字)"},description:{type:"string",description:"一句话说明这个选项的含义"}},required:["id","label","description"]},minItems:2,maxItems:4}},required:["question","options"]}}},{type:"function",function:{name:"recommend_workflow",description:"在创建新工作流之前,向用户推荐库中已有的相似工作流。调用后等待用户选择,不要直接创建。只在库中有相关工作流时使用。",parameters:{type:"object",properties:{userIntent:{type:"string",description:"用户意图摘要"},recommendations:{type:"array",description:"推荐的工作流列表(1-3个)",items:{type:"object",properties:{workflowName:{type:"string"},matchReason:{type:"string",description:"为什么推荐这个"},matchScore:{type:"string",enum:["exact","partial","similar"]}},required:["workflowName","matchReason","matchScore"]},minItems:1,maxItems:3}},required:["userIntent","recommendations"]}}},{type:"function",function:{name:"propose_repair",description:"为运行态失败的任务提出修复方案(仅在运行模式下可用)。分析失败原因后,提供可直接执行的修复操作列表供用户选择。",parameters:{type:"object",properties:{diagnosis:{type:"string",description:"根本原因分析:用 2-3 句话说明为什么失败、数据问题还是配置问题还是依赖问题"},actions:{type:"array",description:"修复操作列表(按推荐优先级排序)",items:{type:"object",properties:{id:{type:"string",description:'操作唯一 ID(如 "rerun_1")'},label:{type:"string",description:'操作名称(如"从 send_email 重新运行")'},type:{type:"string",enum:["rerun_from","skip","retry_workflow","modify_def"],description:"rerun_from=从某任务重新运行,skip=跳过该任务,retry_workflow=重试整个工作流,modify_def=修改工作流定义"},taskRef:{type:"string",description:"[rerun_from/skip] 目标任务的 taskReferenceName"},risk:{type:"string",enum:["low","medium","high"],description:"操作风险等级"},description:{type:"string",description:"操作详细说明及预期结果"}},required:["id","label","type"]}}},required:["diagnosis","actions"]}}},{type:"function",function:{name:"propose_plan",description:'向用户展示即将执行的多步操作计划,在执行前获得确认。适用于:大范围重构、多工具联动操作、复杂拓扑变更。调用此工具后停止,等待用户点击"执行方案"再继续。',parameters:{type:"object",properties:{title:{type:"string",description:'计划标题,简洁描述目标(如"将串行流程重构为并行执行")'},steps:{type:"array",description:"执行步骤列表(按顺序),每步说明将调用的工具和操作内容",items:{type:"object",properties:{step:{type:"number",description:"步骤序号(从 1 开始)"},action:{type:"string",description:"该步骤的操作描述"},tool:{type:"string",description:"将使用的工具名称(如 patch_workflow、replace_workflow)"}},required:["step","action"]}},summary:{type:"string",description:"方案摘要,描述最终效果(可选)"}},required:["title","steps"]}}},{type:"function",function:{name:"search_workflow_library",description:"搜索已有的 L1/L2/L3 子工作流库。当 system prompt 中的库列表不完整,或需要根据业务描述精确匹配子工作流时调用。",parameters:{type:"object",properties:{query:{type:"string",description:"搜索关键词(业务描述、功能名称、标签等)。多个关键词用空格分开,任一命中即返回,按命中数排序"},level:{type:"string",enum:["L1","L2","L3"],description:"按层级过滤(不传则搜索全部层级)"},domain:{type:"string",description:"按业务域过滤(如「通知协助」,需与目录中显示的业务域完全一致;不传则不限业务域)"}},required:["query"]}}},{type:"function",function:{name:"load_library_workflow",description:'加载流程库中已有的工作流并生成变更方案(等待用户确认)。用户选择"直接使用"某个已有工作流时调用:mode=open 把该工作流的完整定义作为方案(替换当前画布内容);mode=reference 在当前流程末尾以 SUB_WORKFLOW 步骤引用它。',parameters:{type:"object",properties:{name:{type:"string",description:"流程库中的工作流名称(与目录完全一致)"},version:{type:"number",description:"版本号(不传则使用流程库当前版本)"},mode:{type:"string",enum:["open","reference"],description:"open=打开完整定义(缺省);reference=作为子流程步骤引用"}},required:["name"]}}}];function Bt(e=[]){const t=[],r=n=>{for(const s of n)if(s){if(t.push(s),s.decisionCases&&typeof s.decisionCases=="object")for(const a of Object.values(s.decisionCases))Array.isArray(a)&&r(a);if(Array.isArray(s.defaultCase)&&r(s.defaultCase),Array.isArray(s.forkTasks))for(const a of s.forkTasks)Array.isArray(a)&&r(a);Array.isArray(s.loopOver)&&r(s.loopOver)}};return r(e),t}function Zb(e,t,r){const n={...e},s=r.resolveLatestVersion,a=!r.existingRefs?.has(n.taskReferenceName);if(n.subWorkflowParam?.name){if(s&&a&&n.subWorkflowParam.version===void 0){const i=s(n.subWorkflowParam.name);i!==void 0?(n.subWorkflowParam={...n.subWorkflowParam,version:i},t.push(`将子工作流任务「${n.taskReferenceName}」固定为流程库当前版本 v${i}`)):t.push(`子工作流「${n.subWorkflowParam.name}」不在流程库目录中,版本未能固定,请确认其是否存在`)}}else{const i=n.workflowName||n.inputParameters?.workflowName||n.inputParameters?.subWorkflowName;if(i){let l=n.subWorkflowParam?.version;if(l===void 0){const c=a?s?.(i):void 0;c!==void 0?(l=c,t.push(`将子工作流任务「${n.taskReferenceName}」固定为流程库当前版本 v${c}`)):(l=n.version??1,s&&a&&t.push(`子工作流「${i}」不在流程库目录中,版本未能固定(暂用 v${l}),请确认该版本是否存在`))}n.subWorkflowParam={name:i,version:l,...n.subWorkflowParam??{}},t.push(`将子工作流任务「${n.taskReferenceName}」的流程名规范化至 subWorkflowParam.name`)}}return n}function Fr(e,t=[],r={}){const n={...e},s=n.taskReferenceName||n.name||"unnamed_task";if(n.taskReferenceName||(n.taskReferenceName=String(s).replace(/[^a-zA-Z0-9_]/g,"_"),t.push(`为任务「${n.name||s}」自动生成引用名 ${n.taskReferenceName}`)),n.name||(n.name=n.taskReferenceName),n.type||(n.type="SIMPLE"),n.type==="HTTP"){const a={...n.inputParameters??{}};if(a.http_request)a.http_request.method||(a.http_request={...a.http_request,method:"GET"});else if(n.httpRequest&&typeof n.httpRequest=="object")a.http_request={method:"GET",...n.httpRequest},t.push(`将 HTTP 任务「${n.taskReferenceName}」的 httpRequest 规范化至 inputParameters.http_request`);else if(a.uri||a.url){const{uri:i,url:l,method:c,headers:d,body:u,...p}=a;a.http_request={uri:i||l,method:c||"GET",...d?{headers:d}:{},...u!==void 0?{body:u}:{}};for(const f of["uri","url","method","headers","body"])delete p[f];Object.assign(a,p),t.push(`将 HTTP 任务「${n.taskReferenceName}」的请求参数规范化至 inputParameters.http_request`)}n.inputParameters=a}if(n.type==="SUB_WORKFLOW"&&Object.assign(n,Zb(n,t,r)),n.type==="TERMINATE"){const a={...n.inputParameters??{}};a.terminationStatus||(a.terminationStatus=n.terminationStatus||"COMPLETED",n.inputParameters=a)}if(n.type==="SWITCH"||n.type==="DECISION"){(!n.decisionCases||typeof n.decisionCases!="object")&&(n.decisionCases={default_branch:[]});const a={};for(const[i,l]of Object.entries(n.decisionCases))a[i]=Array.isArray(l)?l.map(c=>Fr(c,t,r)):[];if(n.decisionCases=a,Array.isArray(n.defaultCase)&&(n.defaultCase=n.defaultCase.map(i=>Fr(i,t,r))),n.type==="SWITCH"&&!n.evaluatorType&&(n.evaluatorType=n.caseExpression?"javascript":"value-param"),!n.caseValueParam&&!n.caseExpression&&!n.expression){const i=n.inputParameters?Object.keys(n.inputParameters)[0]:void 0;n.caseValueParam=i||"switchCaseValue",(!n.inputParameters||Object.keys(n.inputParameters).length===0)&&(n.inputParameters={[n.caseValueParam]:`\${workflow.input.${n.caseValueParam}}`})}}return n.type==="FORK_JOIN"&&Array.isArray(n.forkTasks)&&(n.forkTasks=n.forkTasks.map(a=>Array.isArray(a)?a.map(i=>Fr(i,t,r)):[])),n.type==="DO_WHILE"&&Array.isArray(n.loopOver)&&(n.loopOver=n.loopOver.map(a=>Fr(a,t,r)),n.loopCondition||(n.loopCondition=`if ($.${n.taskReferenceName}['iteration'] < 3) { true; } else { false; }`,t.push(`为循环任务「${n.taskReferenceName}」补充默认退出条件 loopCondition`))),n}function kn(e,t,r={}){const n=[];for(let s=0;s<e.length;s++){const a=Fr(e[s],t,r);if(a.decisionCases){const i={};for(const[l,c]of Object.entries(a.decisionCases))i[l]=kn(c,t,r);a.decisionCases=i}if(a.defaultCase&&(a.defaultCase=kn(a.defaultCase,t,r)),a.forkTasks&&(a.forkTasks=a.forkTasks.map(i=>kn(i,t,r))),a.loopOver&&(a.loopOver=kn(a.loopOver,t,r)),n.push(a),a.type==="FORK_JOIN"&&Array.isArray(a.forkTasks)){const i=a.forkTasks.filter(c=>Array.isArray(c)&&c.length>0).map(c=>c[c.length-1].taskReferenceName),l=e[s+1];if(l&&(l.type==="JOIN"||l.type==="EXCLUSIVE_JOIN"))(Array.isArray(l.joinOn)?l.joinOn:[]).length===0&&i.length>0&&(e[s+1]={...l,joinOn:i},t.push(`为汇合节点「${l.taskReferenceName}」自动补全 joinOn: [${i.join(", ")}]`));else if(i.length>0){const c=`${a.taskReferenceName}_join`;n.push({name:c,taskReferenceName:c,type:"JOIN",joinOn:i}),t.push(`为并行节点「${a.taskReferenceName}」自动补充配对的 JOIN 节点「${c}」`)}}}return n}function Ju(e){const t=[],r=/\$\{([^}]+)\}/g,n=s=>{if(typeof s=="string"){let a;for(r.lastIndex=0;(a=r.exec(s))!==null;)t.push(a[1].trim())}else Array.isArray(s)?s.forEach(n):s&&typeof s=="object"&&Object.values(s).forEach(n)};return n(e),t}function Uu(e,t={}){const r=[],n=kn(e.tasks??[],r,t),s=Array.isArray(e.inputParameters)?e.inputParameters:[],a=new Set(s.map(c=>typeof c=="string"?c:c.name).filter(Boolean)),i=Bt(n);for(const c of i){const d=Ju(c.inputParameters);for(const u of d)if(u.startsWith("workflow.input.")){const p=u.slice(15).split(".")[0];p&&!a.has(p)&&a.add(p)}}return{workflow:{...e,name:e.name||"untitled_workflow",version:e.version??1,schemaVersion:e.schemaVersion??2,timeoutPolicy:e.timeoutPolicy??"ALERT_ONLY",tasks:n,inputParameters:Array.from(a)},autoFixed:r}}function Qb(e,t){const r=[],n=s=>s.map(a=>{let i=a;if(i.type==="SUB_WORKFLOW"&&(i=Zb(i,r,t)),i.decisionCases){const l={};for(const[c,d]of Object.entries(i.decisionCases))l[c]=n(d);i={...i,decisionCases:l}}return i.defaultCase&&(i={...i,defaultCase:n(i.defaultCase)}),i.forkTasks&&(i={...i,forkTasks:i.forkTasks.map(n)}),i.loopOver&&(i={...i,loopOver:n(i.loopOver)}),i});return{workflow:{...e,tasks:n(e.tasks??[])},autoFixed:r}}function tN(e,t){return{name:t.name||e?.name||"new_workflow",description:t.description??e?.description??"",version:t.version??e?.version??1,schemaVersion:2,ownerEmail:t.ownerEmail??e?.ownerEmail,timeoutPolicy:t.timeoutPolicy??e?.timeoutPolicy??"ALERT_ONLY",timeoutSeconds:t.timeoutSeconds??e?.timeoutSeconds??3600,failureWorkflow:t.failureWorkflow??e?.failureWorkflow,inputParameters:t.inputParameters??e?.inputParameters??[],outputParameters:t.outputParameters??e?.outputParameters??{},tasks:e?.tasks??[]}}function rN(e,t,r={}){return Uu({...e??{name:"new_workflow",version:1,schemaVersion:2,tasks:[]},tasks:t.tasks??[]},r)}function nN(e,t,r={}){const n=new Map;for(const f of t.configurations??[]){const m=f?.ref||f?.taskReferenceName;m&&n.set(m,{...f,ref:m})}const s=[],a=[],i=f=>f.map(m=>{let h={...m};const y=n.get(m.taskReferenceName);if(y&&(s.push(m.taskReferenceName),y.name!==void 0&&(h.name=y.name),y.description!==void 0&&(h.description=y.description),y.inputParameters!==void 0&&(h.inputParameters={...h.inputParameters??{},...y.inputParameters}),y.httpRequest!==void 0&&(h.httpRequest=y.httpRequest),y.subWorkflowParam!==void 0&&(h.subWorkflowParam={...h.subWorkflowParam??{name:""},...y.subWorkflowParam}),y.timeoutSeconds!==void 0&&(h.timeoutSeconds=y.timeoutSeconds),y.retryCount!==void 0&&(h.retryCount=y.retryCount),y.retryLogic!==void 0&&(h.retryLogic=y.retryLogic),y.retryDelaySeconds!==void 0&&(h.retryDelaySeconds=y.retryDelaySeconds),y.optional!==void 0&&(h.optional=y.optional),y.caseValueParam!==void 0&&(h.caseValueParam=y.caseValueParam),y.caseExpression!==void 0&&(h.caseExpression=y.caseExpression),y.loopCondition!==void 0&&(h.loopCondition=y.loopCondition),y.joinOn!==void 0&&(h.joinOn=y.joinOn),y.dynamicForkTasksParam!==void 0&&(h.dynamicForkTasksParam=y.dynamicForkTasksParam),y.dynamicForkTasksInputParamName!==void 0&&(h.dynamicForkTasksInputParamName=y.dynamicForkTasksInputParamName),h=Fr(h,a,r)),h.decisionCases){const x={};for(const[g,v]of Object.entries(h.decisionCases))x[g]=i(v);h.decisionCases=x}return h.defaultCase&&(h.defaultCase=i(h.defaultCase)),h.forkTasks&&(h.forkTasks=h.forkTasks.map(x=>i(x))),h.loopOver&&(h.loopOver=i(h.loopOver)),h}),l=i(e.tasks??[]),c=Array.from(n.keys()).filter(f=>!s.includes(f)),d=(e.inputParameters??[]).map(f=>typeof f=="string"?f:f.name),u={...e,tasks:l,...t.outputParameters?{outputParameters:{...e.outputParameters??{},...t.outputParameters}}:{},...t.inputParameters?{inputParameters:Array.from(new Set([...d,...t.inputParameters]))}:{}},p=Uu(u);return{workflow:p.workflow,configuredRefs:s,missingRefs:c,autoFixed:[...a,...p.autoFixed]}}function sr(e,t=[]){const r=Et(e),n=[...r.errors],s=[...r.warnings],a=Bt(e.tasks??[]),i=new Set(a.map(u=>u.taskReferenceName)),l=new Set;let c=0,d=0;for(const u of a){const p=u.taskReferenceName,f=u.inputParameters&&Object.keys(u.inputParameters).length>0,m=u.type==="JOIN"||u.type==="EXCLUSIVE_JOIN"||u.type==="FORK_JOIN"||u.type==="SWITCH"||u.type==="DECISION"||u.type==="DO_WHILE"||u.type==="SUB_WORKFLOW";(f||m||u.timeoutSeconds||u.retryCount!==void 0)&&c++;const h=Ju(u.inputParameters);for(const y of h){if(d++,y.startsWith("workflow.input.")||y.startsWith("workflow."))continue;const x=y.split(".")[0];x&&(i.has(x)?x===p?n.push({type:"TASK",ref:p,message:`任务「${p}」的参数不能自引用自身输出(表达式: \${${y}})`}):l.has(x)||n.push({type:"TASK",ref:p,message:`任务「${p}」引用了下游尚未执行的任务 "${x}"(表达式: \${${y}})`}):n.push({type:"TASK",ref:p,message:`任务「${p}」的参数引用了不存在的任务 "${x}"(表达式: \${${y}})`}))}if((u.type==="JOIN"||u.type==="EXCLUSIVE_JOIN")&&Array.isArray(u.joinOn)){u.joinOn.length===0&&s.push({type:"TASK",ref:p,message:`汇合节点「${p}」未配置 joinOn 等待列表`});for(const y of u.joinOn)i.has(y)||n.push({type:"TASK",ref:p,message:`汇合节点「${p}」的 joinOn 引用了不存在的任务 "${y}"`})}l.add(p)}if(e.outputParameters){const u=Ju(e.outputParameters);for(const p of u){if(d++,p.startsWith("workflow."))continue;const f=p.split(".")[0];f&&!i.has(f)&&n.push({type:"GLOBAL",ref:"GLOBAL",message:`工作流 outputParameters 引用了不存在的任务 "${f}"(表达式: \${${p}})`})}}return{isValid:n.length===0,totalTasks:a.length,configuredTasks:c,dataFlowLinks:d,autoFixed:t,errors:n,warnings:s}}const e1=50;function wn(e){return{resolveLatestVersion:e.resolveLatestVersion,existingRefs:new Set(Bt(e.workflowDef?.tasks??[]).map(t=>t.taskReferenceName))}}function Ht(e,t,r){const n=[];for(const s of e)if(t(s)){const a=r(s);a!==null&&n.push(a)}else{let a=s;if(s.forkTasks&&Array.isArray(s.forkTasks)&&(a={...a,forkTasks:s.forkTasks.map(i=>Ht(i,t,r))}),s.decisionCases&&typeof s.decisionCases=="object"){const i={};for(const[l,c]of Object.entries(s.decisionCases))i[l]=Ht(c,t,r);a={...a,decisionCases:i}}s.defaultCase&&Array.isArray(s.defaultCase)&&(a={...a,defaultCase:Ht(s.defaultCase,t,r)}),s.loopOver&&Array.isArray(s.loopOver)&&(a={...a,loopOver:Ht(s.loopOver,t,r)}),n.push(a)}return n}function Sn(e,t,r){const n=e.findIndex(i=>i.taskReferenceName===t);if(n>=0)return{tasks:[...e.slice(0,n+1),r,...e.slice(n+1)],inserted:!0};let s=!1;return{tasks:e.map(i=>{if(s)return i;let l=i;if(i.decisionCases&&typeof i.decisionCases=="object"){const c={};for(const[d,u]of Object.entries(i.decisionCases))if(!s&&Array.isArray(u)){const p=Sn(u,t,r);c[d]=p.tasks,p.inserted&&(s=!0)}else c[d]=u;s&&(l={...l,decisionCases:c})}if(!s&&Array.isArray(i.defaultCase)){const c=Sn(i.defaultCase,t,r);c.inserted&&(s=!0,l={...l,defaultCase:c.tasks})}if(!s&&Array.isArray(i.forkTasks)){const c=i.forkTasks.map(d=>{if(s||!Array.isArray(d))return d;const u=Sn(d,t,r);return u.inserted&&(s=!0),u.tasks});s&&(l={...l,forkTasks:c})}if(!s&&Array.isArray(i.loopOver)){const c=Sn(i.loopOver,t,r);c.inserted&&(s=!0,l={...l,loopOver:c.tasks})}return l}),inserted:s}}function sN(e){switch(e.op){case"add_task":{const t=e.parentRef?`parentRef=${e.parentRef}`:e.afterRef?`afterRef=${e.afterRef}`:"";return`add_task(${e.task?.taskReferenceName??"?"}${t?`, ${t}`:""})`}case"update_task":return`update_task(${e.ref})`;case"remove_task":return`remove_task(${e.ref})`;case"add_switch_branch":return`add_switch_branch(${e.ref}, ${e.caseName})`;case"add_fork_branch":return`add_fork_branch(${e.ref})`;default:return String(e.op??"unknown")}}function t1(e,t){let r={...e,tasks:[...e.tasks??[]]};const n=[],s=(a,i)=>n.push(`${sN(a)}:${i}`);for(const a of t)switch(a.op){case"add_task":{const i=a.task;if(!i||typeof i!="object"){s(a,"缺少 task 定义");break}if(a.parentRef){let l=!1,c=!0;r.tasks=Ht(r.tasks,d=>d.taskReferenceName===a.parentRef,d=>{if(l=!0,d.type==="SWITCH"||d.type==="DECISION"){const u=a.branchName||Object.keys(d.decisionCases??{})[0]||"default";if(u==="default")return{...d,defaultCase:[...d.defaultCase??[],i]};const p={...d.decisionCases??{}};return p[u]=[...p[u]??[],i],{...d,decisionCases:p}}if(d.type==="FORK_JOIN"){const u=[...d.forkTasks??[]],p=a.branchName!==void 0?parseInt(a.branchName,10):0,f=Number.isNaN(p)?0:Math.max(0,p);for(;u.length<=f;)u.push([]);return u[f]=[...u[f],i],{...d,forkTasks:u}}return d.type==="DO_WHILE"?{...d,loopOver:[...d.loopOver??[],i]}:(c=!1,d)}),l?c||s(a,`父任务 ${a.parentRef} 不是 SWITCH / FORK_JOIN / DO_WHILE,不能放入子任务`):s(a,`找不到父任务 ${a.parentRef}`)}else if(a.afterRef){const l=Sn(r.tasks,a.afterRef,i);l.inserted?r.tasks=l.tasks:s(a,`找不到 afterRef 指向的任务 ${a.afterRef}`)}else r.tasks=[...r.tasks,i];break}case"update_task":{let i=!1;r.tasks=Ht(r.tasks,l=>l.taskReferenceName===a.ref,l=>(i=!0,{...l,...a.changes})),i||s(a,`找不到任务 ${a.ref}`);break}case"remove_task":{let i=!1;r.tasks=Ht(r.tasks,l=>l.taskReferenceName===a.ref,()=>(i=!0,null)),i||s(a,`找不到任务 ${a.ref}`);break}case"update_props":{const{tasks:i,...l}=a.props??{};r={...r,...l};break}case"add_switch_branch":{let i=!1,l=!0;r.tasks=Ht(r.tasks,c=>c.taskReferenceName===a.ref,c=>{if(i=!0,c.type!=="SWITCH"&&c.type!=="DECISION")return l=!1,c;if(a.caseName==="default")return c.defaultCase?c:{...c,defaultCase:[]};const d={...c.decisionCases??{}};return d[a.caseName]?c:(d[a.caseName]=[],{...c,decisionCases:d})}),i?l||s(a,`任务 ${a.ref} 不是 SWITCH,不能添加分支`):s(a,`找不到 SWITCH 任务 ${a.ref}`);break}case"add_fork_branch":{let i=!1,l=!0;r.tasks=Ht(r.tasks,c=>c.taskReferenceName===a.ref,c=>{if(i=!0,c.type!=="FORK_JOIN")return l=!1,c;const d=c.forkTasks??[],u=`${a.ref}_branch_${d.length+1}`;return{...c,forkTasks:[...d,[{name:u,taskReferenceName:u,type:"SIMPLE"}]]}}),i?l||s(a,`任务 ${a.ref} 不是 FORK_JOIN,不能添加并行分支`):s(a,`找不到 FORK_JOIN 任务 ${a.ref}`);break}default:s(a,"不支持的操作类型")}return{workflow:r,unmatched:n}}function aN(e,t){return t1(e,t).workflow}function r1(e){if(!e)return"未设置";if(e<60)return`${e} 秒`;const t=Math.floor(e/60),r=e%60;return r>0?`${t} 分 ${r} 秒`:`${t} 分钟`}function oN(e,t){const r=[];if(e.name!==t.name&&r.push(`名称:「${e.name}」→「${t.name}」`),e.type!==t.type&&r.push(`类型:${e.type} → ${t.type}`),e.timeoutSeconds!==t.timeoutSeconds&&r.push(`超时:${r1(e.timeoutSeconds)} → ${r1(t.timeoutSeconds)}`),(e.retryCount??0)!==(t.retryCount??0)){const n=e.retryCount??0,s=t.retryCount??0;r.push(s>n?`新增失败重试(${s} 次)`:s===0?"移除了失败重试":`重试次数:${n} → ${s}`)}return JSON.stringify(e.inputParameters??{})!==JSON.stringify(t.inputParameters??{})&&r.push("输入参数已调整"),JSON.stringify(e.decisionCases)!==JSON.stringify(t.decisionCases)&&r.push("分支条件已调整"),JSON.stringify(e.forkTasks)!==JSON.stringify(t.forkTasks)&&r.push("并行分支已调整"),r.length===0&&r.push("配置已调整"),r}function n1(e){const t=n=>(n??[]).map(s=>s?.taskReferenceName),r={...e};return e.decisionCases&&typeof e.decisionCases=="object"&&(r.decisionCases=Object.fromEntries(Object.entries(e.decisionCases).map(([n,s])=>[n,t(s)]))),Array.isArray(e.defaultCase)&&(r.defaultCase=t(e.defaultCase)),Array.isArray(e.forkTasks)&&(r.forkTasks=e.forkTasks.map(n=>t(n))),Array.isArray(e.loopOver)&&(r.loopOver=t(e.loopOver)),r}function _n(e,t){const r=t.tasks??[],n=Bt(r);if(!e)return{added:n.map(g=>g.taskReferenceName),modified:[],removed:[],propsChanged:!1};const s=Bt(e.tasks??[]),a=new Map(s.map(g=>[g.taskReferenceName,g])),i=new Map(n.map(g=>[g.taskReferenceName,g])),l=[],c=[],d=[],u=[];for(const[g,v]of i)if(!a.has(g))l.push(g);else{const k=n1(a.get(g)),b=n1(v);JSON.stringify(b)!==JSON.stringify(k)&&(c.push(g),u.push({ref:g,changes:oN(k,b)}))}for(const g of a.keys())i.has(g)||d.push(g);const p=e.name!==t.name||e.description!==t.description||e.timeoutSeconds!==t.timeoutSeconds||e.version!==t.version||e.ownerEmail!==t.ownerEmail||e.failureWorkflow!==t.failureWorkflow||JSON.stringify(e.inputParameters)!==JSON.stringify(t.inputParameters)||JSON.stringify(e.outputParameters)!==JSON.stringify(t.outputParameters),f=new Set(r.map(g=>g.taskReferenceName)),m=new Set((e.tasks??[]).map(g=>g.taskReferenceName)),h=(e.tasks??[]).filter(g=>f.has(g.taskReferenceName)).map(g=>g.taskReferenceName),y=r.filter(g=>m.has(g.taskReferenceName)).map(g=>g.taskReferenceName),x=h.join(",")!==y.join(",");return{added:l,modified:c,removed:d,propsChanged:p,reordered:x,modifiedDetails:u}}function jn(e,t){if(t.length===0)return{inferredLevel:null,violations:[]};const r=new Map(t.map(c=>[c.workflowName,c])),n=Bt(e.tasks??[]).filter(c=>c.type==="SUB_WORKFLOW");if(n.length===0)return{inferredLevel:"L1",violations:[]};const s=[];if(n.forEach(c=>{const d=c.subWorkflowParam?.name??c.workflowName;if(!d)return;const u=r.get(d);u&&s.push(u.workflowLevel)}),s.length===0)return{inferredLevel:null,violations:[]};const a={L1:1,L2:2,L3:3},i=s.reduce((c,d)=>a[d]>a[c]?d:c,"L1");return{inferredLevel:i==="L3"||i==="L2"?"L3":"L2",violations:[]}}function Tn(e,t,r){if(t.__truncated__)return{type:"error",text:"工具调用参数被截断(输出超出 token 限制)。请将工作流拆分为更小的步骤,或先创建骨架工作流再通过 patch_workflow 逐步完善。"};const n=r.workflowDef,s=r.workingDraft??n;switch(e){case"init_workflow_blueprint":{if(!t.name)return{type:"error",text:"init_workflow_blueprint 缺少必填的 name 字段"};const a=tN(s,{name:t.name,description:t.description,version:t.version,ownerEmail:t.ownerEmail,timeoutPolicy:t.timeoutPolicy,timeoutSeconds:t.timeoutSeconds,failureWorkflow:t.failureWorkflow,inputParameters:t.inputParameters,outputParameters:t.outputParameters}),i=a.inputParameters?.length??0,l=i>0?`(含 ${i} 项输入契约:${a.inputParameters.join(", ")})`:"";return{type:"stage",phase:"blueprint",workingDraft:a,timelineLabel:`阶段 1/4:已定义工作流「${a.name}」元信息${l}`,text:`✅ 阶段 1 完成:工作流「${a.name}」蓝图已初始化${l}。请继续调用 scaffold_workflow_topology 设计整体任务编排拓扑。`}}case"scaffold_workflow_topology":{if(!Array.isArray(t.tasks)||t.tasks.length===0)return{type:"error",text:"scaffold_workflow_topology 需要提供非空的 tasks 数组"};const{workflow:a,autoFixed:i}=rN(s,{tasks:t.tasks},wn(r)),l=Bt(a.tasks),c=l.map(u=>`${u.taskReferenceName}(${u.type})`).join(" → "),d=i.length>0?`
51
+ 自动规范化:${i.join(";")}`:"";return{type:"stage",phase:"topology",workingDraft:a,timelineLabel:`阶段 2/4:已编排任务拓扑 · 共 ${l.length} 个节点`,text:`✅ 阶段 2 完成:已编排 ${l.length} 个任务节点(${c})。${d}
52
+ 请继续调用 configure_workflow_tasks 为各任务补充详细参数与上下游数据流引用。`}}case"configure_workflow_tasks":{if(!s||!s.tasks||s.tasks.length===0)return{type:"error",text:"当前尚未构建工作流任务拓扑,请先调用 init_workflow_blueprint 和 scaffold_workflow_topology。"};if(!Array.isArray(t.configurations)||t.configurations.length===0)return{type:"error",text:"configure_workflow_tasks 的 configurations 数组不能为空"};const{workflow:a,configuredRefs:i,missingRefs:l,autoFixed:c}=nN(s,{configurations:t.configurations,outputParameters:t.outputParameters,inputParameters:t.inputParameters},wn(r)),d=Bt(a.tasks),u=l.length>0?`
53
+ ⚠️ 以下 ref 未在拓扑中找到,请检查拼写:${l.join(", ")}`:"",p=c.length>0?`
54
+ 自动规范化:${c.join(";")}`:"";return{type:"stage",phase:"configure",workingDraft:a,timelineLabel:`阶段 3/4:已补充 ${i.length}/${d.length} 个任务配置与数据流`,text:`✅ 阶段 3 进展:已更新 ${i.length} 个任务配置(${i.join(", ")})。${u}${p}
55
+ 若所有关键任务均已配置完毕,请调用 commit_workflow_proposal 执行整体校验并提交方案。`}}case"commit_workflow_proposal":{if(!s||!s.tasks||s.tasks.length===0)return{type:"error",text:"当前没有可提交的工作流草稿,请先编排任务后再提交。"};const{workflow:a,autoFixed:i}=Uu(s,wn(r)),l=sr(a,i),c=_n(n,a),{inferredLevel:d}=jn(a,r.libraryItems);return{type:"propose",proposed:a,diff:c,inferredLevel:d??void 0,verification:l}}case"replace_workflow":{let a=t.workflow;if(!a&&t.name&&Array.isArray(t.tasks)&&(a=t),!a)return{type:"error",text:'工具调用未包含 workflow 字段。请重新生成并确保参数结构为 { workflow: { name: "...", tasks: [...] } }'};if(!a.name)return{type:"error",text:"工作流定义缺少 name 字段,请补充后重新调用"};if(!Array.isArray(a.tasks))return{type:"error",text:"工作流定义缺少 tasks 数组,请提供包含 tasks 字段的完整工作流定义"};a.version===void 0&&(a={...a,version:1});const i=Qb(a,wn(r));a=i.workflow;const l=_n(n,a),{inferredLevel:c}=jn(a,r.libraryItems),d=sr(a,i.autoFixed);return{type:"propose",proposed:a,diff:l,inferredLevel:c??void 0,verification:d}}case"patch_workflow":{const a=t.ops;if(!a?.length)return{type:"error",text:"操作列表为空"};const i=s??n;if(!i)return{type:"error",text:"当前没有加载工作流,请先创建或加载一个工作流"};const{workflow:l,unmatched:c}=t1(i,a);if(c.length>0)return{type:"error",text:`patch_workflow 有 ${c.length} 个操作没有生效,本次变更未提交:
56
+ `+c.map(h=>`- ${h}`).join(`
57
+ `)+`
58
+ 请用 get_workflow_state 核对任务引用名(taskReferenceName)后,重新调用 patch_workflow 提交全部操作。`};const d=Qb(l,wn(r)),u=d.workflow,p=_n(n,u),{inferredLevel:f}=jn(u,r.libraryItems),m=sr(u,d.autoFixed);return{type:"propose",proposed:u,diff:p,inferredLevel:f??void 0,verification:m}}case"get_workflow_state":{const a=s??n;if(!a)return{type:"info",text:"当前没有加载任何工作流,画布为空。"};if(t.includeFull)return{type:"info",text:`工作流「${a.name}」完整定义:
59
+ \`\`\`json
60
+ ${JSON.stringify(a,null,2)}
61
+ \`\`\``};const i=a.tasks.map(c=>{const d=[`**${c.taskReferenceName}** (${c.type})`];return c.timeoutSeconds&&d.push(`超时: ${c.timeoutSeconds}s`),c.retryCount!==void 0&&d.push(`重试: ${c.retryCount}`),c.inputParameters&&Object.keys(c.inputParameters).length>0&&d.push(`inputParameters: ${JSON.stringify(c.inputParameters)}`),c.type==="HTTP"&&c.httpRequest&&d.push(`HTTP: ${c.httpRequest.method} ${c.httpRequest.uri}`),c.type==="SWITCH"&&(d.push(`caseValueParam: ${c.caseValueParam||c.caseExpression}`),d.push(`分支: ${Object.keys(c.decisionCases??{}).join(", ")}`)),d.join(" | ")}),l=r.validationResults.errors.length>0?`
62
+
63
+ 校验错误:${r.validationResults.errors.map(c=>c.message).join(";")}`:"";return{type:"info",text:`工作流「${a.name}」各任务详情:
64
+ ${i.join(`
65
+ `)}${l}`}}case"validate_workflow":{const a=s??n;if(!a)return{type:"info",text:"当前没有加载工作流,无法校验。"};const i=sr(a);if(i.isValid&&i.warnings.length===0)return{type:"info",text:`✅ 工作流校验通过(共 ${i.totalTasks} 个任务,${i.configuredTasks} 个已配置参数,${i.dataFlowLinks} 处数据流引用),没有错误或警告。`};const l=[];return i.errors.forEach(c=>l.push(`❌ [${c.ref||"GLOBAL"}] ${c.message}`)),i.warnings.forEach(c=>l.push(`⚠️ [${c.ref||"GLOBAL"}] ${c.message}`)),{type:"info",text:`校验结果:
66
+ ${l.join(`
67
+ `)}`}}case"search_workflow_library":{const a=r.libraryItems,i=String(t.query??"").toLowerCase().split(/[\s,,、;;|/]+/).map(x=>x.trim()).filter(Boolean),l=t.level,c=typeof t.domain=="string"&&t.domain.trim()?t.domain.trim():void 0,d=r.librarySearchResults;if(!d&&a.length===0)return{type:"info",text:"当前没有配置工作流库,无法搜索。"};const u=x=>{if(i.length===0)return 1;const g=[x.workflowName.toLowerCase(),(x.description??"").toLowerCase(),...(x.tags??[]).map(v=>v.toLowerCase())];return i.filter(v=>g.some(k=>k.includes(v))).length},f=(d??a.filter(x=>!l||x.workflowLevel===l).filter(x=>!c||x.domain===c).map(x=>({item:x,hits:u(x)})).filter(x=>x.hits>0).sort((x,g)=>g.hits-x.hits).map(x=>x.item)).filter(x=>!c||x.domain===c);if(f.length===0)return{type:"info",text:`未找到与「${t.query}」相关的子工作流。`};const m=f.slice(0,e1),h={L3:[],L2:[],L1:[]};m.forEach(x=>h[x.workflowLevel].push(x));const y=[`找到 ${f.length} 个相关工作流:`];return["L3","L2","L1"].forEach(x=>{h[x].length!==0&&(y.push(`
68
+ **${x}**`),h[x].forEach(g=>{y.push(`- \`${g.workflowName}\` (v${g.version}): ${g.description??""} [${(g.tags??[]).join(", ")}]${g.domain?` [业务域: ${g.domain}]`:""}`)}))}),f.length>m.length&&y.push(`
69
+ (仅显示前 ${m.length} 个,请用更具体的关键词或指定层级缩小范围)`),{type:"info",text:y.join(`
70
+ `)}}case"load_library_workflow":return lN(t,r);default:return{type:"error",text:`未知工具: ${e}`}}}function iN(e,t){const r=e.replace(/[^a-zA-Z0-9_]/g,"_")||"sub_workflow";let n=`${r}_ref`,s=2;for(;t.has(n);)n=`${r}_ref_${s++}`;return n}function lN(e,t){const r=typeof e.name=="string"?e.name.trim():"";if(!r)return{type:"error",text:"load_library_workflow 缺少 name(流程库中的工作流名称)"};const n=t.libraryItems.find(x=>x.workflowName===r),s=t.libraryWorkflowDef&&Array.isArray(t.libraryWorkflowDef.tasks)&&t.libraryWorkflowDef.tasks.length>0?t.libraryWorkflowDef:null;if(!n&&!s)return{type:"error",text:`流程库中没有名为「${r}」的工作流。请先用 search_workflow_library 确认名称后重试。`};const a=e.mode==="reference"?"reference":"open",i=t.workflowDef;if(a==="open"){if(!s)return{type:"error",text:`流程库只提供了「${r}」的摘要,没有完整定义,无法直接打开。可改用 mode=reference 以子流程步骤引用它。`};const x={...s,tasks:[...s.tasks]},g=_n(i,x),{inferredLevel:v}=jn(x,t.libraryItems),k=sr(x);return{type:"propose",proposed:x,diff:g,inferredLevel:n?.workflowLevel??v??void 0,verification:k}}const l=t.workingDraft??i??{name:"new_workflow",version:1,schemaVersion:2,tasks:[]},c=new Set(Bt(l.tasks??[]).map(x=>x.taskReferenceName)),d=n?parseInt(String(n.version),10):NaN,u=typeof e.version=="number"?e.version:t.resolveLatestVersion?.(r)??s?.version??(Number.isNaN(d)?void 0:d),p={name:n?.description||r,taskReferenceName:iN(r,c),type:"SUB_WORKFLOW",subWorkflowParam:{name:r,...u!==void 0?{version:u}:{}}},f=aN(l,[{op:"add_task",task:p}]),m=_n(i,f),{inferredLevel:h}=jn(f,t.libraryItems),y=sr(f);return{type:"propose",proposed:f,diff:m,inferredLevel:h??void 0,verification:y}}function In(e){const t=[];return e.added.length>0&&t.push(`新增 ${e.added.length} 个任务(${e.added.join(", ")})`),e.modified.length>0&&t.push(`修改 ${e.modified.length} 个任务(${e.modified.join(", ")})`),e.removed.length>0&&t.push(`删除 ${e.removed.length} 个任务(${e.removed.join(", ")})`),e.reordered&&t.push("调整了任务顺序"),e.propsChanged&&t.push("修改了工作流属性"),t.length>0?t.join(","):"无实质性变更"}function cN(e,t){const r=e.workflowDef;if(!r)return{summary:"当前没有加载任何工作流。画布为空。",topology:"",tasks:[],validationIssues:[]};const n=r.tasks.map(y=>({ref:y.taskReferenceName,name:y.name,type:y.type})),s=e.edges,a={};s.forEach(y=>{a[y.source]||(a[y.source]=[]),a[y.source].push(y.target)});const i=[];s.forEach(y=>{const x=y.label?` [${y.label}]`:"";i.push(`${y.source} → ${y.target}${x}`)});const l=i.length>0?i.join(`
71
+ `):r.tasks.map(y=>y.taskReferenceName).join(" → "),c=new Map;r.tasks.forEach(y=>c.set(y.type,(c.get(y.type)||0)+1));const d=Array.from(c.entries()).map(([y,x])=>`${x}×${y}`).join(", "),u=`工作流「${r.name}」包含 ${r.tasks.length} 个任务 (${d})。`;let p;if(e.selectedTask){const y=e.selectedTask.taskReferenceName,x=s.filter(k=>k.target===y).map(k=>k.source),g=s.filter(k=>k.source===y).map(k=>k.target),v=e.executionData?.[y];p={task:{ref:y,name:e.selectedTask.name,type:e.selectedTask.type,inputParameters:e.selectedTask.inputParameters},upstreamRefs:x,downstreamRefs:g,executionStatus:v?.status,executionFailureReason:v?.reasonForIncompletion}}const f=[];e.validationResults.errors.forEach(y=>f.push(`❌ ${y.message}`)),e.validationResults.warnings.forEach(y=>f.push(`⚠️ ${y.message}`));let m;if(e.mode==="run"&&e.executionData){const y=e.executionData,x=Object.keys(y),g=x.filter(b=>y[b].status==="FAILED"||y[b].status==="FAILED_WITH_TERMINAL_ERROR"||y[b].status==="TIMED_OUT").map(b=>({ref:b,type:e.taskMap[b]?.type??"UNKNOWN",reason:y[b].reasonForIncompletion})),v=x.filter(b=>y[b].status==="IN_PROGRESS"||y[b].status==="SCHEDULED"),k=x.filter(b=>y[b].status==="COMPLETED"||y[b].status==="COMPLETED_WITH_ERRORS");m={instanceId:e.workflowInstance?.workflowId?.slice(0,16),workflowStatus:e.workflowInstance?.status,failedTasks:g,inProgressTasks:v,completedCount:k.length,totalCount:r.tasks.length}}const h={summary:u,topology:l,tasks:n,focusTask:p,validationIssues:f,execution:m};return t?.includeFull&&(h.fullDef=r),h}function dN(e){const t=[];if(t.push(`## 当前工作流状态(实时读取,以此为准)
72
+ > ⚠️ 以下数据直接从画布实时获取,若与对话历史中的工作流描述有冲突,**以此处为准**。
73
+
74
+ ${e.summary}`),e.tasks.length>0&&t.push(`### 任务列表
75
+ ${e.tasks.map(r=>`- ${r.ref} (${r.type}): ${r.name}`).join(`
76
+ `)}`),e.topology&&t.push(`### 拓扑关系
77
+ ${e.topology}`),e.focusTask){const r=e.focusTask,n=r.executionStatus?`
78
+ - 执行状态: ${r.executionStatus}${r.executionFailureReason?`(原因: ${r.executionFailureReason})`:""}`:"";t.push(`### 当前选中任务
79
+ - 引用名: ${r.task.ref}
80
+ - 类型: ${r.task.type}
81
+ - 上游: ${r.upstreamRefs.join(", ")||"无"}
82
+ - 下游: ${r.downstreamRefs.join(", ")||"无"}`+n+(r.task.inputParameters?`
83
+ - 参数: ${JSON.stringify(r.task.inputParameters)}`:""))}if(e.validationIssues.length>0&&t.push(`### 当前校验问题
84
+ ${e.validationIssues.join(`
85
+ `)}`),e.fullDef&&t.push(`### 画布工作流完整 JSON(以此为权威数据源,生成流程图或分析必须基于此)
86
+ \`\`\`json
87
+ ${JSON.stringify(e.fullDef,null,2)}
88
+ \`\`\``),e.execution){const r=e.execution,n=r.workflowStatus?`工作流状态:**${r.workflowStatus}**`:"",s=`完成 ${r.completedCount}/${r.totalCount} 个任务`,a=r.failedTasks.length>0?`
89
+ **失败任务(${r.failedTasks.length}个):**
90
+ `+r.failedTasks.map(l=>`- ${l.ref} (${l.type})${l.reason?`:${l.reason}`:""}`).join(`
91
+ `):"",i=r.inProgressTasks.length>0?`
92
+ **进行中:** ${r.inProgressTasks.join(", ")}`:"";t.push(`## 运行态执行信息(实时)
93
+ `+[n,s].filter(Boolean).join(" ")+a+i)}return t.join(`
94
+
95
+ `)}const s1=[{intent:"CREATE",keywords:[],patterns:[/^(请)?(帮我)?(从零)?(创建|新建|设计|搭建|构建)/]},{intent:"VISUALIZE",keywords:["流程图","mermaid","图表","可视化","业务视图","展示流程","画图","画出"],patterns:[/流程图/,/mermaid/i,/可视化/,/展示.*业务/,/业务.*展示/,/画.*图/,/图.*展示/]},{intent:"DEBUG",keywords:["失败","错误","为什么","报错","异常","不工作","问题","修复","排查","诊断"],patterns:[/为什么.*失败/,/出[了]?错/,/报错/,/不[工作|运行]/,/怎么回事/,/修复/]},{intent:"REFACTOR",keywords:["重构","并行","串行","拆分","合并","改成并行","改成串行"],patterns:[/改成并行/,/改成串行/,/改为并行/,/改为串行/,/拆分/,/合并/,/重构/]},{intent:"DELETE",keywords:["删除","移除","去掉","删掉","干掉"],patterns:[/删[除掉]/,/移除/,/去掉/]},{intent:"ADD",keywords:["添加","加一个","新增","插入","追加"],patterns:[/加.*任务/,/添加.*节点/,/插入.*后面/,/增加/]},{intent:"MODIFY",keywords:["修改","更改","设置","把…改","调整","配置","设为","改为","改成"],patterns:[/[改设].*为/,/[改设].*成/,/修改/,/超时/,/重试/]},{intent:"CREATE",keywords:["创建","新建","设计","搭建","构建","组合"],patterns:[/创建.*流程/,/生成.*工作流/,/设计.*workflow/,/从零/]},{intent:"OPTIMIZE",keywords:["优化","改进","提升","性能","最佳实践","建议"],patterns:[/优化/,/改进/,/有什么建议/,/最佳实践/]},{intent:"EXPLAIN",keywords:["解释","解读","说明","什么意思","怎么理解","是什么","做什么","介绍","讲解","分析","描述","详细","字段","作用","干嘛","有哪些","告诉我","总结","摘要","报告","对比","查看","进度"],patterns:[/解释/,/什么意思/,/干什么/,/是什么/,/怎么[理解工作]/,/介绍.*[流程任务]/,/详细.*[介绍说明参数]/,/[参数字段].*[是什么有哪些]/,/这个.*[是干做]/,/有什么[参数字段属性]/,/对比/,/总结/,/摘要/]}],a1=["帮我","做一个","来个","弄个","需要一个"],o1=["流程","工作流","自动化"];function uN(e){const t=e.toLowerCase().trim();for(const s of s1)if(s.patterns){for(const a of s.patterns)if(a.test(t))return s.intent}for(const s of s1)for(const a of s.keywords)if(t.includes(a))return s.intent;if(t.length<12)return"VAGUE";if(a1.some(s=>t.includes(s))){const s=a1.reduce((i,l)=>i.replace(l,""),t).trim();if(o1.some(i=>s===i||s===i+"。"||s===i+"?")||s.length<=4)return"VAGUE"}return o1.some(s=>t===s||t===`一个${s}`||t===`个${s}`)?"VAGUE":"GENERAL"}function pN(e){switch(e){case"CREATE":return{includeFull:!1};case"REFACTOR":case"OPTIMIZE":case"DEBUG":case"VISUALIZE":return{includeFull:!0};case"VAGUE":return{includeFull:!1};default:return{includeFull:!1}}}const fN="你是 Netflix Conductor 工作流建模专家 AI 助手。帮助用户通过自然语言设计和编辑高可靠性的 Conductor JSON 工作流。\n\n## 核心工作流生成策略(自适应复杂度路由)\n\n### 策略 A:四阶段渐进式构建策略(适用于:从零创建工作流、3+ 节点流程、含分支/并行/循环或大范围重构)\n为了保证高准确性、数据流一致性与配置完整度,**请严格按以下 4 个阶段依次调用工具演进构建**(可在一次或连续多步工具调用中完成):\n1. **阶段 1 — 定义工作流蓝图 (`init_workflow_blueprint`)**:\n - 定义工作流 `name`(英文下划线)、中文 `description`、`timeoutPolicy`、`timeoutSeconds` 及工作流级 `inputParameters` 契约(如 `[\"orderId\", \"userId\", \"amount\"]`)。\n2. **阶段 2 — 设计整体任务编排拓扑 (`scaffold_workflow_topology`)**:\n - 专注整体任务编排逻辑与控制流(顺序、`SWITCH` 条件分支 `decisionCases`/`defaultCase`、`FORK_JOIN` 并行 `forkTasks` 与配对的 `JOIN` `joinOn`、`DO_WHILE` 循环 `loopOver`/`loopCondition`)。\n - 确保每个任务的 `taskReferenceName` 唯一、命名规范且拓扑闭环。\n3. **阶段 3 — 逐项/分批补充任务配置与数据流 (`configure_workflow_tasks`)**:\n - 为各任务补充详细的 `inputParameters`(严格对齐上下游数据流:`${workflow.input.xxx}` 或 `${upstream_ref.output.yyy}`)、HTTP 请求配置(`httpRequest`)、子工作流配置(`subWorkflowParam`)、超时(`timeoutSeconds`)与重试策略(`retryCount` / `retryLogic`),以及工作流 `outputParameters`。\n4. **阶段 4 — 整体验证配置并提交 (`commit_workflow_proposal`)**:\n - 触发全量结构、控制流与数据流引用校验。若校验报告指出引用错误或配置缺失,请用 `configure_workflow_tasks` 修正后再调用 `commit_workflow_proposal`。\n\n### 策略 B:轻量单步修改策略(适用于:局部增/改/删单个任务或修改属性)\n- **patch_workflow** — 用于局部精准修改。ops 支持:\n - `{ op: 'add_task', task: TaskDef, afterRef?: string, parentRef?: string, branchName?: string }` — 新增任务(支持通过 `afterRef` 插入到任意顶层/嵌套任务之后,或通过 `parentRef` + `branchName` 插入到 SWITCH/FORK_JOIN/DO_WHILE 内部)\n - `{ op: 'update_task', ref: string, changes: Partial<TaskDef> }` — 修改任务字段\n - `{ op: 'remove_task', ref: string }` — 删除任务\n - `{ op: 'update_props', props: Partial<WorkflowDef> }` — 修改工作流属性\n - `{ op: 'add_switch_branch', ref: string, caseName: string }` — 添加 SWITCH 分支\n - `{ op: 'add_fork_branch', ref: string }` — 添加 FORK_JOIN 并行分支\n- **replace_workflow** — 仅用于 1-2 个节点的极简流程快速替换。\n\n### 辅助与交互工具\n- **get_workflow_state** — 仅在 system prompt 的工作流上下文不足以回答时才调用(read-only)。\n- **validate_workflow** — 校验当前工作流或草稿的合法性与数据流完整性(read-only)。\n- **propose_plan** — 在执行超大规模破坏性重构前,可先向用户展示计划并等待确认。\n- **ask_clarification** — 当用户意图模糊时调用,展示 2-4 个选项帮助用户精确表达需求。调用后停止,等待用户选择。\n- **recommend_workflow** — 在执行 CREATE 之前,若库中有相似工作流,先推荐给用户。调用后停止等待选择。\n- **不要**在回复正文中直接输出工作流 JSON 代码块,所有变更必须通过工具执行。\n\n## 回复规范\n- 用中文回答,简洁明了\n- 回复正文与流程图标签中不使用 emoji 或装饰符号(界面已有图标)\n- **解释性、介绍性、分析性问题:直接文本回答,不要调用工具**\n- 回答时不要将 system prompt 中的上下文信息(如任务列表、拓扑关系)原文复述——直接聚焦在用户的具体问题上\n- 需要操作工作流时,先简短说明设计思路,再通过工具执行\n- 用户意图模糊时(如\"帮我做个流程\"),先调用 ask_clarification 挖掘真实需求,不要直接创建\n- 创建新工作流前,检查库中是否有相似的,优先推荐已有流程(使用 recommend_workflow)\n\n## Conductor 标准任务类型与建模规范\n- 支持类型:SIMPLE, HTTP, SWITCH, FORK_JOIN, FORK_JOIN_DYNAMIC, DO_WHILE, SUB_WORKFLOW, EVENT, WAIT, HUMAN, INLINE, TERMINATE, SET_VARIABLE, KAFKA_PUBLISH, JSON_JQ_TRANSFORM, START_WORKFLOW, DYNAMIC, NOOP\n- 每个任务必须有唯一的 `taskReferenceName`(仅限英文、数字、下划线,如 `verify_payment`)\n- 下游任务通过 `${upstream_ref.output.field}` 引用上游输出,严禁引用尚未执行的下游任务\n- SWITCH 需要 `caseValueParam` 或 `caseExpression`,以及 `decisionCases` 键值对\n- FORK_JOIN 需要 `forkTasks`(二维数组)和紧随其后的 `JOIN` 任务(`joinOn` 包含各并行分支最后一个任务的 `taskReferenceName`)\n- DO_WHILE 需要 `loopCondition` 和 `loopOver` 数组\n- HTTP 任务必须配置 `inputParameters.http_request`(含 `uri` 和 `method`),建议设置 `timeoutSeconds` 和 `retryCount`\n\n## 业务流程图(Mermaid)\n当用户要求展示流程图、可视化或 Mermaid 图时:\n- 必须基于 system prompt 注入的\"画布工作流完整 JSON\",不凭记忆生成\n- 输出 ```mermaid 代码块,不调用任何工具\n- 过滤纯技术节点(SET_VARIABLE、JSON_JQ_TRANSFORM、INLINE、NOOP),上下游直连\n- 节点标签用中文业务语言,禁止直接使用 taskReferenceName\n- SWITCH 用菱形 {},FORK_JOIN 用并行路径,HUMAN 标注「人工」";function mN(e,t,r,n){const{systemPrompt:s,systemPromptExtra:a,viewMode:i,pendingProposalDef:l,promptCatalogLimit:c,promptSchemaLimit:d}=n??{},u=uN(e),p=pN(u),f=cN(t,p),m=dN(f),h=[s??fN];l&&h.push(`## 待确认的变更方案
96
+ 用户当前有一份尚未确认(未接受也未拒绝)的变更方案,画布上仍是旧版本。本轮的 patch_workflow、get_workflow_state、validate_workflow 等工具都以这份方案为起点(不是画布),新方案的差异仍相对画布计算,因此方案里已有的改动会保留。如果用户是在此方案基础上继续调整,用 patch_workflow 只提交新增的修改即可;只有用户提出全新需求时才用 replace_workflow 重新生成完整方案。
97
+
98
+ \`\`\`json
99
+ ${JSON.stringify(l,null,2)}
100
+ \`\`\``);const y=au.buildPromptSection();y&&h.push(y);const x=mv.buildPromptSection(d!==void 0?{limit:d}:void 0);x&&h.push(x);const g=yN(r,c);if(g&&h.push(g),m&&h.push(m),!s){const v=xN(u);v&&h.push(`## 当前请求类型提示
101
+ ${v}`)}if(!s){const v=gN(i);v&&h.push(v)}return a&&h.push(`## 补充说明
102
+ ${a}`),h.join(`
103
+
104
+ `)}const hN=50;function yN(e,t=hN){if(e.length===0)return null;const r=Math.max(0,Math.floor(t));let n=e,s=0;if(e.length>r){const c={L3:0,L2:1,L1:2};n=e.map((d,u)=>({item:d,idx:u})).sort((d,u)=>c[d.item.workflowLevel]-c[u.item.workflowLevel]||d.idx-u.idx).slice(0,r).map(d=>d.item),s=e.length-n.length}const a={L3:n.filter(c=>c.workflowLevel==="L3"),L2:n.filter(c=>c.workflowLevel==="L2"),L1:n.filter(c=>c.workflowLevel==="L1")},i=c=>`- \`${c.workflowName}\` (v${c.version}): ${c.description}`+(c.domain?` [业务域: ${c.domain}]`:"")+(c.tags.length>0?` [${c.tags.join(", ")}]`:""),l=[];if(l.push(`## 可用子工作流库(优先复用,勿重复造轮子)
105
+
106
+ **分层调用规范**
107
+ - L3(端到端)可调用 L2/L1 及同层 L3
108
+ - L2(业务场景)可调用 L1 及同层 L2
109
+ - L1(原子操作)只能调用同层 L1
110
+ - 禁止反向跨层调用(L1 不可调用 L2/L3,L2 不可调用 L3)
111
+
112
+ **引用方式**:使用 SUB_WORKFLOW 任务,把下方名称填入 \`subWorkflowParam.name\`(如 \`"subWorkflowParam": { "name": "create_vm" }\`);版本号可省略,系统会固定为流程库当前版本。
113
+
114
+ **使用策略**
115
+ 1. 用户需求完全匹配已有工作流时:直接推荐使用,无需新建
116
+ 2. 部分匹配时:用 SUB_WORKFLOW 复用已有模块,仅新增差异部分
117
+ 3. 确需新建时:最大化引用已有子工作流作为步骤,同时标注新工作流层级`),a.L3.length>0&&l.push(`### L3 端到端场景
118
+ ${a.L3.map(i).join(`
119
+ `)}`),a.L2.length>0&&l.push(`### L2 业务场景
120
+ ${a.L2.map(i).join(`
121
+ `)}`),a.L1.length>0)if(a.L1.length<=25)l.push(`### L1 原子操作
122
+ ${a.L1.map(i).join(`
123
+ `)}`);else{const c=a.L1.slice(0,10).map(i).join(`
124
+ `);l.push(`### L1 原子操作(共 ${a.L1.length} 个,以下为部分示例)
125
+ ${c}
126
+ ...
127
+ (使用 search_workflow_library 工具搜索完整 L1 列表)`)}return s>0&&l.push(`另有 ${s} 个子工作流未在此列出,请调用 \`search_workflow_library\` 按关键词或层级检索后再引用。`),l.join(`
128
+
129
+ `)}function gN(e){return!e||e==="standard"?null:e==="business"?`## 语言风格(业务视图)
130
+ 当前用户使用**业务视图**——他们可能不熟悉 Conductor 技术细节。请:
131
+ - 用业务语言描述变更,例如「在支付验证后增加了人工审批环节」而非「在 payment_verify 后新增了 taskReferenceName=manual_approve 的 HUMAN 任务」
132
+ - 避免在回复正文中提及 taskReferenceName、inputParameters、timeoutSeconds 等字段名,除非用户主动问到
133
+ - 把工作流步骤描述成"业务动作"(如"发送通知"、"等待审批"),而非"节点类型"
134
+ - 如需解释结构,用"流程分支"替代"SWITCH","并行步骤"替代"FORK_JOIN","人工步骤"替代"HUMAN"`:e==="developer"?`## 语言风格(开发者视图)
135
+ 当前用户使用**开发者视图**——他们熟悉 Conductor 技术细节。请:
136
+ - 可直接使用 taskReferenceName、inputParameters、patch ops 等技术术语
137
+ - 解释类问题可提供实现细节,例如 inputParameters 引用格式、retryCount 配置等
138
+ - 涉及变更时可描述具体的 patch ops(如 add_task with afterRef)
139
+ - 如涉及数据流,可引用具体的 \${ref.output.field} 表达式`:null}function xN(e){switch(e){case"CREATE":return"用户要创建新工作流。对于 3 个及以上任务或含分支/并行的业务流程,请优先使用四阶段渐进式策略:1. init_workflow_blueprint 定义元信息与输入契约 -> 2. scaffold_workflow_topology 编排整体拓扑 -> 3. configure_workflow_tasks 补充任务参数与上下游数据流 -> 4. commit_workflow_proposal 整体验证并提交。";case"ADD":return"用户要添加任务。优先用 patch_workflow + add_task,指定正确的 afterRef(或 parentRef + branchName 插入到分支/循环内)。";case"MODIFY":return"用户要修改现有任务。用 patch_workflow + update_task,只传需要变更的字段。";case"DELETE":return"用户要删除任务。用 patch_workflow + remove_task。";case"REFACTOR":return"用户要重构拓扑。对于小幅调整可用 patch_workflow;对于大范围重构可依次通过 scaffold_workflow_topology 重排拓扑 -> configure_workflow_tasks 校准参数与数据流 -> commit_workflow_proposal 整体验证提交。";case"EXPLAIN":return"用户在提问/请求解释。直接文本回答,不要调用任何工具。不要重复任务列表——如需引用任务,只提名称和关键点,不要逐条列出。";case"DEBUG":return"用户在排查问题。先用 validate_workflow 和 get_workflow_state 了解现状,分析后给出诊断。";case"OPTIMIZE":return"用户要优化流程。先分析,再提出方案并执行。";case"VISUALIZE":return`用户要查看工作流的业务流程图。**必须严格基于 system prompt 中注入的"画布工作流完整 JSON"生成**,不允许凭记忆或对话历史构造节点。
140
+
141
+ 数据来源要求:
142
+ - 所有节点和边必须来自注入的完整 JSON,不允许增加不存在的节点
143
+ - 不允许省略业务节点
43
144
 
44
- 直接告诉我你想做什么吧!`,timestamp:Date.now()},Pk=()=>(e,t)=>({config:{provider:"auto",apiKey:""},messages:[ql],isStreaming:!1,streamingText:"",chatPanelOpen:!0,pendingProposal:null,pendingPlan:null,pendingRepair:null,followUpChips:null,undoStack:[],pendingClarification:null,pendingRecommendation:null,pendingAutoSend:null,toolStatus:"",retryInput:null,timelineEntries:[],synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null,metrics:{totalProposals:0,acceptedProposals:0,rejectedProposals:0,totalPromptTokens:0,totalCompletionTokens:0},setConfig:r=>e(n=>({config:{...n.config,...r}})),addMessage:r=>{const n=`msg_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,o={...r,id:n,timestamp:Date.now()};return e(s=>({messages:[...s.messages,o]})),n},updateMessage:(r,n)=>e(o=>({messages:o.messages.map(s=>s.id===r?{...s,content:n}:s)})),setStreaming:r=>e({isStreaming:r}),setStreamingText:r=>e({streamingText:r}),appendStreamingText:r=>e(n=>({streamingText:n.streamingText+r})),clearMessages:()=>e({messages:[ql],streamingText:"",isStreaming:!1,pendingProposal:null,pendingPlan:null,pendingRepair:null,followUpChips:null,pendingClarification:null,pendingRecommendation:null,pendingAutoSend:null,toolStatus:"",retryInput:null,timelineEntries:[],synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null}),setChatPanelOpen:r=>e({chatPanelOpen:r}),toggleChatPanel:()=>e(r=>({chatPanelOpen:!r.chatPanelOpen})),setProposal:r=>{const n=`prop_${Date.now()}`,o=ie.getState().workflowDef,s=JSON.stringify(o);return e(i=>({pendingProposal:{...r,id:n,baselineHash:s},metrics:{...i.metrics,totalProposals:i.metrics.totalProposals+1}})),n},clearProposal:()=>e({pendingProposal:null}),recordAccept:()=>e(r=>({metrics:{...r.metrics,acceptedProposals:r.metrics.acceptedProposals+1},pendingProposal:null,synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null})),recordReject:()=>e(r=>({metrics:{...r.metrics,rejectedProposals:r.metrics.rejectedProposals+1},pendingProposal:null,synthesisPhase:"idle",workingDraft:null,durableCheckpoint:null})),getMetrics:()=>t().metrics,recordUsage:r=>e(n=>({metrics:{...n.metrics,totalPromptTokens:n.metrics.totalPromptTokens+(r.promptTokens??0),totalCompletionTokens:n.metrics.totalCompletionTokens+(r.completionTokens??0)}})),setFollowUpChips:r=>e({followUpChips:r}),clearFollowUpChips:()=>e({followUpChips:null}),setPlan:r=>{const n=`plan_${Date.now()}`;return e({pendingPlan:{...r,id:n}}),n},clearPlan:()=>e({pendingPlan:null}),setRepair:r=>{const n=`repair_${Date.now()}`;return e({pendingRepair:{...r,id:n}}),n},clearRepair:()=>e({pendingRepair:null}),pushUndo:r=>e(n=>({undoStack:[...n.undoStack.slice(-4),r]})),popUndo:()=>{const r=t().undoStack;if(r.length===0)return null;const n=r[r.length-1];return e({undoStack:r.slice(0,-1)}),n},clearUndo:()=>e({undoStack:[]}),canUndo:()=>t().undoStack.length>0,setClarification:r=>{const n=`clarif_${Date.now()}`;return e({pendingClarification:{...r,id:n}}),n},clearClarification:()=>e({pendingClarification:null}),setRecommendation:r=>{const n=`rec_${Date.now()}`;return e({pendingRecommendation:{...r,id:n}}),n},clearRecommendation:()=>e({pendingRecommendation:null}),setPendingAutoSend:r=>e({pendingAutoSend:r}),setToolStatus:r=>e({toolStatus:r}),setRetryInput:r=>e({retryInput:r}),addTimelineEntry:(r,n="done")=>e(o=>({timelineEntries:[...o.timelineEntries,{id:`tl_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,label:r,icon:n}]})),clearTimeline:()=>e({timelineEntries:[]}),setSynthesisStage:(r,n)=>e(o=>({synthesisPhase:r,workingDraft:n!==void 0?n:o.workingDraft})),saveCheckpoint:r=>e({durableCheckpoint:r}),clearCheckpoint:()=>e({durableCheckpoint:null,synthesisPhase:"idle",workingDraft:null}),hydrateFromDraft:(r,n,o)=>e({messages:r.length>0?r:[ql],pendingProposal:n,durableCheckpoint:o??null,synthesisPhase:o?.phase??"idle",workingDraft:o?.workingDraft??null})});function Ok(e="ai-workflow-config"){const t=Pk();return e===!1?qr()(t):qr()(pc(t,{name:e,storage:zr(()=>localStorage),partialize:r=>({config:{...r.config,apiKey:""},metrics:r.metrics})}))}const yg=Ok(),Dk=I.createContext(null);function xg(){return I.useContext(Dk)}const Ak=()=>{const{mode:e,showWaterfallPanel:t,setShowWaterfallPanel:r,workflowInstance:n,executionData:o,taskMap:s,selectedTask:i,setSelectedTask:l,setSelectedTaskInstance:c,timeTravelTimestamp:u,setTimeTravelTimestamp:d}=ie(we(x=>({mode:x.mode,showWaterfallPanel:x.showWaterfallPanel,setShowWaterfallPanel:x.setShowWaterfallPanel,workflowInstance:x.workflowInstance,executionData:x.executionData,taskMap:x.taskMap,selectedTask:x.selectedTask,setSelectedTask:x.setSelectedTask,setSelectedTaskInstance:x.setSelectedTaskInstance,timeTravelTimestamp:x.timeTravelTimestamp,setTimeTravelTimestamp:x.setTimeTravelTimestamp}))),p=I.useMemo(()=>{const x=n?.tasks?.length?n.tasks:o?Object.values(o).flatMap(_=>_.attempts):[];if(x.length===0)return null;const v=x.filter(_=>_.startTime||_.scheduledTime);if(v.length===0)return null;const k=Math.min(...v.map(_=>_.scheduledTime||_.startTime||Date.now())),S=Math.max(...v.map(_=>_.endTime||_.startTime||_.scheduledTime||k+100)),j=Math.max(S-k,50),w=v.filter(_=>!["FORK_JOIN","JOIN","DO_WHILE","SWITCH","DECISION"].includes(_.taskType)).map(_=>Math.max((_.endTime||S)-(_.startTime||_.scheduledTime||k),0)).sort((_,T)=>T-_),N=w.length>0?Math.max(w[Math.floor(w.length*.25)]||80,50):100,L=v.map((_,T)=>{const D=_.scheduledTime||_.startTime||k,R=_.startTime||D,A=_.endTime||S,E=Math.max(R-D,0),P=Math.max(A-R,1),z=!["FORK_JOIN","JOIN","DO_WHILE","SWITCH","DECISION"].includes(_.taskType)&&P>=N,J=(D-k)/j*100,B=E/j*100,$=(R-k)/j*100,C=Math.max(P/j*100,1.2);return{key:_.taskId||`${_.referenceTaskName}-${T}`,task:_,sched:D,start:R,end:A,queueMs:E,execMs:P,isCritical:z,queueLeftPct:J,queueWidthPct:B,execLeftPct:$,execWidthPct:C}});return{minTime:k,maxTime:S,totalSpanMs:j,rows:L}},[n,o]);if(e!=="run"||!t||!p)return null;const{minTime:h,totalSpanMs:f,rows:m}=p,y=u!==null?u-h:f,g=Math.min(Math.max(y/f*100,0),100),b=x=>{switch(x){case"COMPLETED":return"#10b981";case"FAILED":case"FAILED_WITH_TERMINAL_ERROR":case"TIMED_OUT":return"#ef4444";case"IN_PROGRESS":return"#38bdf8";default:return"#94a3b8"}};return a.jsxs("div",{style:{position:"absolute",left:16,right:i?466:16,bottom:16,height:255,zIndex:1100,background:"rgba(15, 23, 42, 0.95)",backdropFilter:"blur(16px)",border:"1px solid rgba(56, 189, 248, 0.3)",borderRadius:12,boxShadow:"0 16px 40px rgba(0, 0, 0, 0.45)",display:"flex",flexDirection:"column",overflow:"hidden",transition:"right 0.25s ease"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"8px 14px",borderBottom:"1px solid rgba(148, 163, 184, 0.16)",background:"rgba(2, 6, 23, 0.55)",flexShrink:0},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#f8fafc"},children:"📊 并发执行瀑布流 & 时间旅行调试器"}),a.jsxs("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:999,background:"rgba(56, 189, 248, 0.14)",color:"#38bdf8",fontFamily:"monospace",fontWeight:600},children:["总跨度 ",f,"ms · ",m.length," 个任务步"]}),a.jsx("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:999,background:"rgba(249, 115, 22, 0.15)",color:"#fb923c",fontWeight:600},children:"🔥 关键路径耗时瓶颈高亮"})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flex:1,maxWidth:420},children:[a.jsx("span",{style:{fontSize:10,color:"#94a3b8",whiteSpace:"nowrap"},children:"⏪ 时间旅行指针:"}),a.jsx("input",{type:"range",min:0,max:f,value:y,onChange:x=>{const v=Number(x.target.value);v>=f?d(null):d(h+v)},style:{flex:1,cursor:"pointer",accentColor:"#38bdf8"}}),a.jsx("span",{style:{fontSize:11,fontFamily:"monospace",color:u!==null?"#fbbf24":"#34d399",fontWeight:700,minWidth:74,textAlign:"right"},children:u!==null?`+${y}ms`:"最新态 (Live)"}),u!==null&&a.jsx("button",{type:"button",onClick:()=>d(null),style:{fontSize:10,padding:"2px 7px",borderRadius:4,border:"1px solid rgba(251, 191, 36, 0.4)",background:"rgba(251, 191, 36, 0.12)",color:"#fbbf24",cursor:"pointer"},children:"重置"})]}),a.jsx("button",{type:"button",onClick:()=>r(!1),style:{background:"none",border:"none",color:"#94a3b8",cursor:"pointer",fontSize:15,padding:"2px 6px"},children:"✕"})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",position:"relative",padding:"6px 0"},children:m.map(x=>{const v=x.task.referenceTaskName.replace(/__\d+$/,""),k=i?.taskReferenceName===v,S=u!==null&&x.start>u,j=u!==null&&x.start<=u&&x.end>u;return a.jsxs("div",{onClick:()=>{const w=s[v]||x.task.workflowTask;w&&(l(w),c(x.task))},style:{display:"grid",gridTemplateColumns:"210px 1fr 90px",alignItems:"center",gap:8,padding:"4px 14px",cursor:"pointer",background:k?"rgba(56, 189, 248, 0.14)":"transparent",opacity:S?.35:1,borderLeft:k?"3px solid #38bdf8":"3px solid transparent"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},children:[a.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:j?"#38bdf8":b(x.task.status),flexShrink:0}}),a.jsx("span",{style:{fontSize:11,fontFamily:"monospace",color:"#e2e8f0",fontWeight:k?700:500,overflow:"hidden",textOverflow:"ellipsis"},title:x.task.referenceTaskName,children:x.task.referenceTaskName}),x.isCritical&&a.jsx("span",{title:"关键路径耗时瓶颈节点",style:{fontSize:9,padding:"1px 4px",borderRadius:4,background:"rgba(249, 115, 22, 0.2)",color:"#fb923c",fontWeight:700,flexShrink:0},children:"🔥瓶颈"})]}),a.jsxs("div",{style:{position:"relative",height:14,background:"rgba(15, 23, 42, 0.65)",borderRadius:4,overflow:"hidden",border:"1px solid rgba(148, 163, 184, 0.1)"},children:[x.queueWidthPct>.3&&a.jsx("div",{title:`排队等待: ${x.queueMs}ms`,style:{position:"absolute",left:`${x.queueLeftPct}%`,width:`${x.queueWidthPct}%`,top:3,bottom:3,background:"rgba(148, 163, 184, 0.35)",borderRadius:"2px 0 0 2px"}}),a.jsx("div",{title:`执行耗时: ${x.execMs}ms (排队 ${x.queueMs}ms)`,style:{position:"absolute",left:`${x.execLeftPct}%`,width:`${x.execWidthPct}%`,top:2,bottom:2,borderRadius:3,background:x.isCritical?"linear-gradient(90deg, #f97316, #ef4444)":b(x.task.status),boxShadow:j?"0 0 8px rgba(56, 189, 248, 0.8)":void 0}}),u!==null&&a.jsx("div",{style:{position:"absolute",left:`${g}%`,top:0,bottom:0,width:2,background:"#fbbf24",pointerEvents:"none"}})]}),a.jsxs("div",{style:{fontSize:10,fontFamily:"monospace",color:x.isCritical?"#fb923c":"#94a3b8",textAlign:"right",fontWeight:x.isCritical?700:400},children:[x.execMs,"ms",x.queueMs>0?a.jsxs("span",{style:{opacity:.6,fontSize:9},children:[" (+",x.queueMs,"q)"]}):null]})]},x.key)})})]})};function bg(e){if(!e)return"未设置";if(e<60)return`${e} 秒`;const t=Math.floor(e/60),r=e%60;return r>0?`${t} 分 ${r} 秒`:`${t} 分钟`}function Lk(e,t){const r=[];if(e.name!==t.name&&r.push(`名称:「${e.name}」→「${t.name}」`),e.type!==t.type&&r.push(`类型:${e.type} → ${t.type}`),e.timeoutSeconds!==t.timeoutSeconds&&r.push(`超时:${bg(e.timeoutSeconds)} → ${bg(t.timeoutSeconds)}`),(e.retryCount??0)!==(t.retryCount??0)){const n=e.retryCount??0,o=t.retryCount??0;r.push(o>n?`新增失败重试(${o} 次)`:o===0?"移除了失败重试":`重试次数:${n} → ${o}`)}return JSON.stringify(e.inputParameters??{})!==JSON.stringify(t.inputParameters??{})&&r.push("输入参数已调整"),JSON.stringify(e.decisionCases)!==JSON.stringify(t.decisionCases)&&r.push("分支条件已调整"),JSON.stringify(e.forkTasks)!==JSON.stringify(t.forkTasks)&&r.push("并行分支已调整"),r.length===0&&r.push("配置已调整"),r}function Mk(e,t){const r=t.tasks??[];if(!e)return{added:r.map(f=>f.taskReferenceName),modified:[],removed:[],propsChanged:!1};const n=new Map((e.tasks??[]).map(f=>[f.taskReferenceName,f])),o=new Map(r.map(f=>[f.taskReferenceName,f])),s=[],i=[],l=[],c=[];for(const[f,m]of o)if(!n.has(f))s.push(f);else{const y=n.get(f);JSON.stringify(m)!==JSON.stringify(y)&&(i.push(f),c.push({ref:f,changes:Lk(y,m)}))}for(const f of n.keys())o.has(f)||l.push(f);const u=e.name!==t.name||e.description!==t.description||e.timeoutSeconds!==t.timeoutSeconds||e.version!==t.version||e.ownerEmail!==t.ownerEmail||e.failureWorkflow!==t.failureWorkflow||JSON.stringify(e.inputParameters)!==JSON.stringify(t.inputParameters)||JSON.stringify(e.outputParameters)!==JSON.stringify(t.outputParameters),d=(e.tasks??[]).filter(f=>o.has(f.taskReferenceName)).map(f=>f.taskReferenceName),p=r.filter(f=>n.has(f.taskReferenceName)).map(f=>f.taskReferenceName),h=d.join(",")!==p.join(",");return{added:s,modified:i,removed:l,propsChanged:u,reordered:h,modifiedDetails:c}}const vg={apiKey:"",baseUrl:"https://api.openai.com/v1",model:"gpt-4o"},zl=async(e,t={},r)=>{const n={...vg,...t};if(!n.apiKey)throw new Error("Please configure AI API Key in settings.");const o=await fetch(`${n.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n.apiKey}`},body:JSON.stringify({model:n.model,messages:e,temperature:.7,stream:!1}),signal:r});if(!o.ok){const i=await o.json();throw new Error(i.error?.message||"AI request failed")}return(await o.json()).choices[0].message.content},$k=async(e,t={},r,n,o)=>{const s={...vg,...t};if(!s.apiKey)throw new Error("Please configure AI API Key in settings.");const i=await fetch(`${s.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s.apiKey}`},body:JSON.stringify({model:s.model,messages:e,temperature:.7,stream:!0}),signal:o});if(!i.ok){const d=await i.json();throw new Error(d.error?.message||"AI request failed")}const l=i.body?.getReader();if(!l)throw new Error("ReadableStream not supported");const c=new TextDecoder;let u="";for(;;){const{done:d,value:p}=await l.read();if(d)break;const f=c.decode(p,{stream:!0}).split(`
45
- `).filter(m=>m.trim()!=="");for(const m of f)if(m.startsWith("data: ")){const y=m.slice(6);if(y==="[DONE]")return u;try{const b=JSON.parse(y).choices?.[0]?.delta?.content;b&&(u+=b,r(b))}catch{console.warn("[AI SSE] malformed chunk:",y)}}}return u},qk=(e,t,r,n,o)=>`
145
+ 业务节点过滤(核心规则):
146
+ - 保留(有业务含义):SIMPLE、HTTP、HUMAN、SUB_WORKFLOW、START_WORKFLOW、EVENT、WAIT、DO_WHILE、FORK_JOIN、SWITCH、DECISION
147
+ - 跳过(纯数据处理、无业务含义):SET_VARIABLE、JSON_JQ_TRANSFORM、INLINE、NOOP
148
+ - 跳过节点后,将其上游和下游直接相连,保持流程连通性
149
+
150
+ 节点标签规则:
151
+ - 优先使用 task 的 name 字段;若 name 是技术命名则改写为中文业务语言
152
+ - HUMAN 节点:标签加「人工」
153
+ - SUB_WORKFLOW 节点:标签加「子流程」
154
+ - 禁止在节点标签中使用 taskReferenceName
155
+
156
+ 控制流规则:
157
+ - SWITCH/DECISION:用菱形节点 {条件},用 decisionCases 的 key 作为各分支的边标签
158
+ - FORK_JOIN:并行分支用多条路径,对应 JOIN 节点用「汇合」标注
159
+ - DO_WHILE:画成循环,用 loopCondition 描述循环条件
160
+
161
+ 输出格式:
162
+ - 输出 \`\`\`mermaid 代码块,步骤 ≤ 8 用 flowchart TD,否则用 LR
163
+ - 代码块前一句话描述流程主旨,代码块后可加简短解读
164
+ - 不要调用任何工具`;case"VAGUE":return"用户意图模糊。调用 ask_clarification 提出 2-4 个选项,帮助用户精确表达需求。不要直接创建工作流。";default:return null}}const vN=Xb.filter(e=>["get_workflow_state","validate_workflow","search_workflow_library","propose_repair"].includes(e.function.name)),bN=new Set(["propose_repair"]),i1=6,l1=10,kN=2,wN={init_workflow_blueprint:"阶段 1/4:正在定义工作流元信息与参数契约…",scaffold_workflow_topology:"阶段 2/4:正在编排整体任务拓扑与控制流…",configure_workflow_tasks:"阶段 3/4:正在补充任务参数与上下游数据流…",commit_workflow_proposal:"阶段 4/4:正在执行整体语义与数据流校验…",get_workflow_state:"正在读取工作流状态…",search_workflow_library:"正在搜索工作流库…",validate_workflow:"正在校验工作流…",replace_workflow:"正在生成新工作流…",patch_workflow:"正在应用变更…",propose_plan:"正在生成执行计划…",load_library_workflow:"正在加载流程库中的工作流…"},SN={get_workflow_state:"已读取工作流状态",search_workflow_library:"已搜索工作流库",validate_workflow:"已校验工作流"};class _N extends Error{constructor(t){super(t),this.name="AiStreamError"}}const c1=e=>`${e.ref??""}|${e.message}`;function jN(){const e=re.getState();return{workflowDef:e.workflowDef,edges:e.edges,selectedTask:e.selectedTask,executionData:e.executionData,mode:e.mode,workflowInstance:e.workflowInstance,taskMap:e.taskMap,validationResults:e.validationResults}}class TN{constructor(t,r){this.getOptions=t,this.stores=r}controller=null;generation=0;abort(){this.controller?.abort()}reset(){this.generation++,this.controller?.abort(),this.controller=null}transportMode(){return this.stores.aiStore.getState().config.transport?.type??"direct"}toolExecutionContext(t){const r=re.getState();return{workflowDef:r.workflowDef,workingDraft:t??this.stores.aiStore.getState().workingDraft,validationResults:r.validationResults,libraryItems:this.stores.libraryStore.getState().items,resolveLatestVersion:this.latestVersionResolver()}}latestVersionResolver(){const t=this.stores.libraryCatalog;if(t)return r=>t.latest(r)?.version}buildHistory(t,r){const{systemPrompt:n,systemPromptExtra:s,promptCatalogLimit:a,promptSchemaLimit:i}=this.getOptions(),l=re.getState().viewMode,c=this.stores.aiStore.getState().pendingProposal?.proposedDef,u=[{role:"system",content:mN(t,jN(),this.stores.libraryStore.getState().items,{systemPrompt:n,systemPromptExtra:s,viewMode:l,pendingProposalDef:c,promptCatalogLimit:a,promptSchemaLimit:i})}],p=r.slice(-20);for(const f of p)f.id!=="welcome"&&u.push({role:f.role==="assistant"?"assistant":"user",content:f.content});return u.push({role:"user",content:t}),u}async serverLibrarySearch(t){const r=this.stores.libraryCatalog;if(r?.hasServerSearch())try{const n=await r.search(String(t.query??""),{level:t.level,domain:typeof t.domain=="string"&&t.domain.trim()?t.domain.trim():void 0,limit:e1},this.controller?.signal);return n?Bu(n):void 0}catch{if(this.controller?.signal.aborted)return;this.stores.aiStore.getState().addTimelineEntry("服务端检索失败,已改用本地目录匹配","warning");return}}async fetchLibraryDefinition(t,r,n){const s=this.stores.libraryCatalog;if(!s||!t)return null;const a=r??s.latest(t)?.version;if(a===void 0)return null;try{return(await s.getVersion(t,a,n))?.def??null}catch{return null}}publishProposal(t,r){this.stores.aiStore.getState().setProposal({proposedDef:t.proposed,diff:t.diff,inferredLevel:t.inferredLevel,verification:t.verification,messageId:r}),this.getOptions().onAiEvent?.({type:"proposal:created",timestamp:Date.now(),diff:{added:t.diff.added.length,modified:t.diff.modified.length,removed:t.diff.removed.length},inferredLevel:t.inferredLevel})}async useLibraryWorkflow(t){const r=this.stores.aiStore;if(r.getState().isStreaming)return!1;const{aiPermissions:n}=this.getOptions();if(n?.canEdit===!1)return r.getState().addMessage({role:"assistant",content:"AI 当前处于只读模式,不能把流程库中的工作流加入画布。"}),!1;r.getState().addMessage({role:"user",content:`直接使用流程库中的「${t}」`});const s=await this.fetchLibraryDefinition(t),a={...this.toolExecutionContext(r.getState().pendingProposal?.proposedDef??null),libraryWorkflowDef:s};let i=Tn("load_library_workflow",{name:t,mode:"open"},a),l="open";if(i.type!=="propose"&&(i=Tn("load_library_workflow",{name:t,mode:"reference"},a),l="reference"),i.type==="propose"&&i.proposed&&i.diff){const c=l==="open"?`已打开流程库中的「${t}」作为变更方案:${In(i.diff)}。`:`流程库只提供了「${t}」的摘要,已在流程末尾以子流程步骤引用它:${In(i.diff)}。`,d=r.getState().addMessage({role:"assistant",content:`${c}
165
+ 请在下方应用或拒绝此变更。`});return this.publishProposal({proposed:i.proposed,diff:i.diff,inferredLevel:i.inferredLevel,verification:i.verification},d),!0}return r.getState().addMessage({role:"assistant",content:i.text??`无法加载「${t}」。请在工作流库标签页确认它是否存在。`}),!1}commitDraftNow(){const t=this.stores.aiStore,r=t.getState().workingDraft??t.getState().durableCheckpoint?.workingDraft;if(!r||!Array.isArray(r.tasks)||r.tasks.length===0)return!1;const n=Tn("commit_workflow_proposal",{},this.toolExecutionContext(r));if(n.type==="propose"&&n.proposed&&n.diff){const a=[...t.getState().messages].reverse().find(i=>i.role==="assistant"&&i.id!=="welcome")?.id??t.getState().addMessage({role:"assistant",content:"已采用当前阶段的工作流草稿。"});return this.publishProposal({proposed:n.proposed,diff:n.diff,inferredLevel:n.inferredLevel,verification:n.verification},a),t.getState().saveCheckpoint(null),t.getState().setSynthesisStage("completed",null),!0}return!1}async resume(t){const r=this.stores.aiStore,n=r.getState(),s=n.durableCheckpoint;if(!s||n.isStreaming)return;const{onAiEvent:a}=this.getOptions();a?.({type:"session:resumed",timestamp:Date.now(),phase:s.phase});const i=[...s.agentHistory];let l=s.assistantMsgId;t&&t.trim()?(n.addMessage({role:"user",content:t.trim()}),i.push({role:"user",content:t.trim()}),l=n.addMessage({role:"assistant",content:""})):n.messages.some(c=>c.id===l)||(l=n.addMessage({role:"assistant",content:""})),n.setRetryInput(null),await this.runDurableLoop({sessionId:s.sessionId,userPrompt:s.userPrompt,assistantMsgId:l,agentHistory:i,initialDraft:s.workingDraft,baseDraft:r.getState().pendingProposal?.proposedDef??null,initialPhase:s.phase,startStep:s.stepIndex,initialSelfHealCount:s.selfHealCount})}async send(t,r={}){const n=this.stores.aiStore,s=n.getState();if(!t.trim()||s.isStreaming)return;const a=r.modelText?.trim()?r.modelText:t,i=s.messages;s.addMessage({role:"user",content:t}),s.setRetryInput(null),s.clearFollowUpChips(),s.setStreaming(!0),s.setStreamingText(""),s.setToolStatus(""),s.clearTimeline(),s.setSynthesisStage("idle",null),s.saveCheckpoint(null);const l=n.getState().config;if(!l.apiKey&&!l.transport){s.addMessage({role:"assistant",content:"未配置 API Key。请点击对话面板右上角的设置按钮配置 AI 服务后重试。"}),s.setStreaming(!1);return}const c=s.addMessage({role:"assistant",content:""}),d=this.buildHistory(a,i);await this.runDurableLoop({sessionId:`sess_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,userPrompt:a,assistantMsgId:c,agentHistory:d,initialDraft:null,baseDraft:n.getState().pendingProposal?.proposedDef??null,initialPhase:"idle",startStep:0,initialSelfHealCount:0})}async runDurableLoop(t){const r=this.stores.aiStore,n=this.stores.toolRegistry,{aiPermissions:s,onAiEvent:a}=this.getOptions(),i=r.getState().config,l=this.transportMode();this.controller?.abort();const c=new AbortController;this.controller=c;const{signal:d}=c,u=this.generation,p=()=>u===this.generation;r.getState().setStreaming(!0),r.getState().setStreamingText(""),r.getState().setToolStatus("");const{sessionId:f,userPrompt:m,assistantMsgId:h,agentHistory:y}=t;let x=t.initialDraft??t.baseDraft,g=t.initialPhase,v=t.initialSelfHealCount,k=t.startStep,b=t.initialDraft!==null,S=!1,j=!1,_="",w="";const I=re.getState().workflowDef,C=new Set(I&&Array.isArray(I.tasks)&&I.tasks.length>0?sr(I).errors.map(c1):[]);(t.initialDraft||g!=="idle")&&r.getState().setSynthesisStage(g,x);const N=(R,L)=>{if(p()){if(R==="completed"){r.getState().saveCheckpoint(null);return}r.getState().saveCheckpoint({sessionId:f,userPrompt:m,assistantMsgId:h,phase:g,workingDraft:b?x:null,agentHistory:[...y],stepIndex:k,selfHealCount:v,status:R,lastError:L,updatedAt:Date.now()})}},O=()=>b||k>t.startStep||t.startStep>0,E=R=>{w+=(w?`
166
+
167
+ `:"")+R};try{const R=n.getDefinitions(),L=re.getState().mode,H=s?.canEdit!==!1,F=s?.canRepair!==!1;let q=L==="run"||!H?vN:[...Xb.filter($=>!bN.has($.function.name)),...R];F||(q=q.filter($=>$.function.name!=="propose_repair")),w=r.getState().messages.find($=>$.id===h)?.content??"";for(let $=t.startStep;;$++){const X=b||g!=="idle"?l1:i1;if(d.aborted)break;if($-t.startStep>=X){j=!0;break}k=$,r.getState().setStreamingText(""),$>0&&g==="idle"&&r.getState().setToolStatus(`步骤 ${$+1}…`);const D=[];_="";for await(const Q of Yb(y,q,i,d)){if(d.aborted)break;switch(Q.type){case"text":_+=Q.content,r.getState().appendStreamingText(Q.content);break;case"tool_call":D.push({id:Q.id,name:Q.name,args:Q.args});break;case"error":throw new _N(Q.message);case"usage":r.getState().recordUsage({promptTokens:Q.promptTokens,completionTokens:Q.completionTokens});break}}const B=_;if(_="",B&&E(B),!D.length||d.aborted)break;y.push({role:"assistant",content:B,tool_calls:D});const U=[];let G=null,ne=null;for(const Q of D){if(d.aborted)break;if(r.getState().setToolStatus(wN[Q.name]??`执行 ${Q.name}…`),a?.({type:"tool:called",timestamp:Date.now(),tool:Q.name}),Q.name==="propose_repair"){U.push({role:"tool",content:"修复方案已展示给用户,等待用户执行操作。",tool_call_id:Q.id}),r.getState().setRepair({diagnosis:Q.args.diagnosis??"未提供诊断信息",actions:Q.args.actions??[],messageId:h}),r.getState().addTimelineEntry("已生成修复方案"),a?.({type:"repair:proposed",timestamp:Date.now()});break}if(Q.name==="ask_clarification"){U.push({role:"tool",content:"澄清问题已展示给用户,等待用户回复。",tool_call_id:Q.id}),r.getState().setClarification({question:Q.args.question??"请告诉我更多详情",context:Q.args.context,options:Q.args.options??[],messageId:h}),r.getState().addTimelineEntry("准备澄清问题");break}if(Q.name==="recommend_workflow"){U.push({role:"tool",content:"已向用户展示相似工作流推荐,等待用户选择。",tool_call_id:Q.id}),r.getState().setRecommendation({userIntent:Q.args.userIntent??"",recommendations:Q.args.recommendations??[],messageId:h}),r.getState().addTimelineEntry("已匹配推荐工作流");break}if(Q.name==="propose_plan"){ne={title:Q.args.title??"执行计划",steps:Q.args.steps??[],summary:Q.args.summary},U.push({role:"tool",content:"计划已展示给用户,等待确认后执行。",tool_call_id:Q.id}),r.getState().addTimelineEntry("已生成执行计划");break}const _e=n.get(Q.name);if(_e){let fe;try{fe=await Promise.resolve(_e.execute(Q.args)),r.getState().addTimelineEntry(`已执行 ${Q.name}`)}catch(V){fe=`工具执行失败:${V.message??"未知错误"}`,r.getState().addTimelineEntry(`${Q.name} 执行失败`,"warning")}U.push({role:"tool",content:fe,tool_call_id:Q.id});continue}let ve;try{const fe=this.toolExecutionContext(x);Q.name==="search_workflow_library"&&(fe.librarySearchResults=await this.serverLibrarySearch(Q.args)),Q.name==="load_library_workflow"&&(fe.libraryWorkflowDef=await this.fetchLibraryDefinition(String(Q.args.name??""),typeof Q.args.version=="number"?Q.args.version:void 0,d)),ve=Tn(Q.name,Q.args,fe)}catch(fe){U.push({role:"tool",content:`工具执行出错:${fe?.message??"未知错误"}`,tool_call_id:Q.id}),r.getState().addTimelineEntry(`${Q.name} 执行出错`,"warning");continue}let je;if(ve.type==="stage")ve.workingDraft&&(x=ve.workingDraft,b=!0),ve.phase&&(g=ve.phase),r.getState().setSynthesisStage(g,x),ve.timelineLabel&&r.getState().addTimelineEntry(ve.timelineLabel,"done"),a?.({type:"stage:completed",timestamp:Date.now(),phase:g}),je=ve.text??"阶段已完成。";else if(ve.type==="propose"&&ve.proposed&&ve.diff){const fe=ve.verification??sr(ve.proposed),V=fe.errors.filter(ee=>!C.has(c1(ee)));if(V.length>0&&v<kN){v++,x=ve.proposed,b=!0,g="verify",r.getState().setSynthesisStage("verify",x);const ee=V.map(z=>`• [${z.ref||"GLOBAL"}] ${z.message}`).join(`
168
+ `);je=`工作流已生成,但整体校验发现 ${V.length} 个新引入的错误,请通过 configure_workflow_tasks、patch_workflow 或 replace_workflow 修复后重新提交:
169
+ ${ee}`,r.getState().addTimelineEntry(`发现 ${V.length} 处校验问题,正在自动修正…`,"warning")}else{x=ve.proposed,b=!0,g="completed",r.getState().setSynthesisStage("completed",x),G={proposed:ve.proposed,diff:ve.diff,inferredLevel:ve.inferredLevel,verification:fe};const ee=In(ve.diff);je=`变更方案已生成${fe.errors.length>0?`(含 ${fe.errors.length} 个校验错误)`:""}:${ee}。等待用户确认。`;const Ie=fe.totalTasks||(ve.proposed.tasks?.length??0);r.getState().addTimelineEntry(`已生成方案 · 共 ${Ie} 个步骤`,fe.errors.length>0?"warning":"done")}}else ve.type==="info"?(je=ve.text??"",r.getState().addTimelineEntry(SN[Q.name]??`已执行 ${Q.name}`)):(je=`错误:${ve.text??"未知错误"}`,r.getState().addTimelineEntry(`${Q.name} 执行出错`,"warning"));U.push({role:"tool",content:je,tool_call_id:Q.id})}const ye=new Set(U.map(Q=>Q.tool_call_id));for(const Q of D)ye.has(Q.id)||U.push({role:"tool",content:"操作已中止,等待用户确认后继续。",tool_call_id:Q.id});if(y.push(...U),k=$+1,N("running"),r.getState().pendingRepair?.messageId===h){E("我已诊断出故障原因并准备了修复方案,请查看下方修复卡片。");break}if(r.getState().pendingClarification?.messageId===h||r.getState().pendingRecommendation?.messageId===h)break;if(ne){r.getState().setPlan({title:ne.title,steps:ne.steps,summary:ne.summary,messageId:h}),a?.({type:"plan:created",timestamp:Date.now()}),E("我已为你准备了一个执行计划,请查看下方方案并决定是否执行。");break}if(G){this.publishProposal(G,h),S=!0;const Q=In(G.diff),_e=G.inferredLevel?` · ${G.inferredLevel}`:"";w+=`
170
+
171
+ ---
172
+ **已生成变更方案${_e}**:${Q}
173
+ 请在下方应用或拒绝此变更。`;break}}const W=r.getState(),P=W.pendingClarification?.messageId===h||W.pendingPlan?.messageId===h||W.pendingRecommendation?.messageId===h||W.pendingRepair?.messageId===h;if(p()&&!d.aborted&&!j&&!P&&!S&&b&&x&&Array.isArray(x.tasks)&&x.tasks.length>0){const $=Tn("commit_workflow_proposal",{},this.toolExecutionContext(x));if($.type==="propose"&&$.proposed&&$.diff){g="completed",r.getState().setSynthesisStage("completed",$.proposed),r.getState().addTimelineEntry(`阶段 4/4:已完成整体校验并生成方案 · 共 ${$.verification?.totalTasks??$.proposed.tasks.length} 个步骤`,$.verification&&!$.verification.isValid?"warning":"done"),this.publishProposal({proposed:$.proposed,diff:$.diff,inferredLevel:$.inferredLevel,verification:$.verification},h),S=!0;const X=In($.diff),D=$.inferredLevel?` · ${$.inferredLevel}`:"";w+=`
174
+
175
+ ---
176
+ **已生成变更方案${D}**:${X}
177
+ 请在下方应用或拒绝此变更。`}}if(!p())return;if(d.aborted)O()&&N("paused"),r.getState().updateMessage(h,this.abortedText(w,_));else if(j&&!S){const $=b||g!=="idle"?l1:i1;N("paused",`已达到单轮 ${$} 步上限`),r.getState().setToolStatus(""),E(`**已暂停**:本轮已用完 ${$} 步的上限,AI 停在这里,还没有生成变更方案。点击下方"从断点继续生成"让 AI 接着完成;或把需求拆成更小的步骤重新发送。`),r.getState().updateMessage(h,w.trim())}else N("completed"),r.getState().setToolStatus(""),r.getState().updateMessage(h,w.trim()||(P||S?"请查看下方卡片。":"AI 没有返回任何内容。请换个说法重新发送;如持续出现,请在 AI 设置中检查模型配置。"))}catch(R){if(!p())return;if(r.getState().setToolStatus(""),R?.name!=="AbortError"){const L=Ws(R?.message,{mode:l}),H=[w,_].filter(F=>F&&F.trim()).join(`
178
+
179
+ `).trim();r.getState().updateMessage(h,`${H?`${H}
180
+
181
+ `:""}**出错了**:${L.display}`),a?.({type:"ai:error",timestamp:Date.now(),rawMessage:L.raw}),O()?N("failed",L.display):r.getState().setRetryInput(m)}else O()&&N("paused"),r.getState().updateMessage(h,this.abortedText(w,_))}finally{p()&&(r.getState().setStreaming(!1),r.getState().setStreamingText(""),r.getState().setToolStatus(""))}}abortedText(t,r){const n=[t,r].filter(s=>s&&s.trim()).join(`
182
+
183
+ `).trim();return n?`${n}
184
+
185
+ (已中止)`:"(已中止)"}}class IN{tools=new Map;register(t){this.tools.set(t.definition.function.name,t)}unregister(t){this.tools.delete(t)}get(t){return this.tools.get(t)}getAll(){return Array.from(this.tools.values())}getDefinitions(){return this.getAll().map(t=>t.definition)}setTools(t){this.tools.clear();for(const r of t)this.tools.set(r.definition.function.name,r)}has(t){return this.tools.has(t)}}const NN=new IN,Nn="未配置 AI 服务。请先填写 API Key(集成方通过 aiConfig 传入,或在 AI 设置中填写)后重试。";function Cn(e){return!!(e?.transport||e?.apiKey?.trim())}async function d1(e,t,r,n){if(!Cn(t))throw new Error(Nn);const s={provider:"auto",...t,apiKey:t.apiKey??""},a=s.transport?.type??"direct";let i="";for await(const l of Yb(e,[],s,n))if(l.type==="text")i+=l.content,r?.(l.content);else if(l.type==="error"){const c=new Error(Ws(l.message,{mode:a}).display);throw c.raw=l.message,c}return i}const u1=async(e,t={},r)=>{try{return await d1(e,t,void 0,r)}catch(n){throw n?.name==="AbortError"||n?.message===Nn||n?.raw?n:new Error(Ws(n?.message,{mode:t.transport?.type??"direct"}).display)}},CN=async(e,t={},r,n,s)=>{try{const a=await d1(e,t,r,s);return n?.(),a}catch(a){throw a?.name==="AbortError"||a?.message===Nn||a?.raw?a:new Error(Ws(a?.message,{mode:t.transport?.type??"direct"}).display)}},EN=(e,t,r,n,s)=>`
46
186
  You are a Netflix Conductor expert. Generate a complete "inputParameters" JSON object for the following task.
47
187
 
48
188
  Task Type: ${e}
49
189
  Task Reference Name: ${t}
50
- Current inputParameters (may be incomplete): ${JSON.stringify(o,null,2)}
190
+ Current inputParameters (may be incomplete): ${JSON.stringify(s,null,2)}
51
191
 
52
192
  Available workflow input parameters (accessible via \${workflow.input.XXX}):
53
- ${r.length>0?r.map(s=>` - ${s}`).join(`
193
+ ${r.length>0?r.map(a=>` - ${a}`).join(`
54
194
  `):" (none defined)"}
55
195
 
56
196
  Upstream tasks (accessible via \${taskRef.output.XXX}):
57
- ${n.length>0?n.map(s=>` - ${s.ref} (type: ${s.type})`).join(`
197
+ ${n.length>0?n.map(a=>` - ${a.ref} (type: ${a.type})`).join(`
58
198
  `):" (no upstream tasks)"}
59
199
 
60
200
  Rules:
@@ -66,7 +206,7 @@ Rules:
66
206
  6. Return ONLY the JSON object (no explanation, no markdown code block).
67
207
 
68
208
  Return format: { "paramKey": "paramValue", ... }
69
- `,zk=async(e,t,r,n,o,s={})=>{const i=qk(e,t,r,n,o),c=(await zl([{role:"system",content:"You are a Conductor expert. Return only valid JSON objects, no markdown."},{role:"user",content:i}],s)).replace(/```json\n?/g,"").replace(/```\n?/g,"").trim();return JSON.parse(c)},Wk=`
209
+ `,RN=async(e,t,r,n,s,a={})=>{const i=EN(e,t,r,n,s),c=(await u1([{role:"system",content:"You are a Conductor expert. Return only valid JSON objects, no markdown."},{role:"user",content:i}],a)).replace(/```json\n?/g,"").replace(/```\n?/g,"").trim();try{return JSON.parse(c)}catch{throw new Error("AI 返回的内容不是有效的 JSON 参数。请重试,或在 AI 设置中换用更强的模型。")}},ON=`
70
210
  You are an expert in Netflix Conductor Workflow modeling.
71
211
  Your goal is to help users design JSON-based workflows.
72
212
 
@@ -78,12 +218,8 @@ CONSTRANTS:
78
218
  5. For FORK_JOIN, ensure a corresponding JOIN task follows.
79
219
 
80
220
  Provide clear, enterprise-grade logic with proper error handling paths.
81
- `,Fk=[{label:"➕ 在下方插入 HTTP 请求",type:"HTTP",name:"http_call_task"},{label:"⚖️ 在下方插入条件分支 (SWITCH)",type:"SWITCH",name:"switch_router"},{label:"🔍 在下方插入 JQ 转换节点",type:"JSON_JQ_TRANSFORM",name:"jq_transform_task"},{label:"🛡️ 为当前节点开启自动重试与容错",action:"retry_hardening"}],Bk=({aiConfig:e})=>{const{inlineCopilotTaskRef:t,setInlineCopilotTaskRef:r,selectedTask:n,workflowDef:o,taskMap:s,addNode:i,updateTask:l,selectTaskAction:c}=ie(we(w=>({inlineCopilotTaskRef:w.inlineCopilotTaskRef,setInlineCopilotTaskRef:w.setInlineCopilotTaskRef,selectedTask:w.selectedTask,workflowDef:w.workflowDef,taskMap:w.taskMap,addNode:w.addNode,updateTask:w.updateTask,selectTaskAction:w.selectTaskAction}))),d=(xg()?.aiStore??yg)(w=>w.setProposal),[p,h]=I.useState(""),[f,m]=I.useState(!1),[y,g]=I.useState(null),b=I.useRef(null),x=t||n?.taskReferenceName||null,v=x?s[x]:null;if(I.useEffect(()=>{const w=N=>{if((N.metaKey||N.ctrlKey)&&N.key.toLowerCase()==="k"){N.preventDefault();const L=ie.getState();if(L.inlineCopilotTaskRef)L.setInlineCopilotTaskRef(null);else{const _=L.selectedTask?.taskReferenceName||L.workflowDef?.tasks?.[L.workflowDef.tasks.length-1]?.taskReferenceName||"__canvas_root__";L.setInlineCopilotTaskRef(_)}}else N.key==="Escape"&&t&&r(null)};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[t,r]),I.useEffect(()=>{t&&(g(null),setTimeout(()=>b.current?.focus(),40))},[t]),!t)return null;const k=o&&x&&x!=="__canvas_root__"?Nl(o,x):[],S=w=>{if(!(!x||x==="__canvas_root__")){if(w.action==="retry_hardening"&&v){l(x,{retryCount:3,retryLogic:"EXPONENTIAL_BACKOFF",retryDelaySeconds:2,timeoutSeconds:60}),g("✅ 已为当前节点开启指数退避重试 (3次) 与 60s 超时保护"),setTimeout(()=>r(null),900);return}if(w.type){const N=Ye.find(_=>_.type===w.type),L=`${w.name}_${Date.now().toString(36).slice(-4)}`;i({data:{label:N?.label||w.name,taskName:w.name,taskReferenceName:L,taskType:w.type}},x,"",`inline-cmdk-${L}`,{}),g(`✅ 已在 ${x} 后插入 ${w.type} 节点`),setTimeout(()=>r(null),700)}}},j=async w=>{w.preventDefault();const N=p.trim();if(!N||!o)return;const L=e?.apiKey||localStorage.getItem("AI_API_KEY")||"";if(!L){const _=N.toLowerCase(),T=x&&x!=="__canvas_root__"?x:o.tasks[o.tasks.length-1]?.taskReferenceName;if(T){let D="SIMPLE";_.includes("http")||_.includes("接口")||_.includes("请求")?D="HTTP":_.includes("switch")||_.includes("分支")||_.includes("判断")?D="SWITCH":_.includes("loop")||_.includes("循环")?D="DO_WHILE":_.includes("jq")||_.includes("转换")?D="JSON_JQ_TRANSFORM":(_.includes("wait")||_.includes("等待"))&&(D="WAIT");const R=Ye.find(E=>E.type===D),A=`${D.toLowerCase()}_${Date.now().toString(36).slice(-4)}`;i({data:{label:N.slice(0,24)||R?.label||D,taskName:A,taskReferenceName:A,taskType:D}},T,"",`inline-cmdk-${A}`,{}),h(""),r(null);return}}m(!0),g("🤖 正在基于当前节点拓扑上下文生成 Shadow Graph 变更提案...");try{const _=e?.baseUrl||localStorage.getItem("AI_BASE_URL")||"",T=e?.model||localStorage.getItem("AI_MODEL")||"",D={apiKey:L};_&&(D.baseUrl=_),T&&(D.model=T);const R=`You are a Conductor Workflow Architect. The user is invoking inline Cmd+K on task "${x}" (type: ${v?.type||"ROOT"}).
82
- Upstream tasks in scope: ${k.map(P=>P.taskReferenceName).join(", ")||"none"}.
83
- Current workflow JSON:
84
- ${JSON.stringify(o,null,2)}
85
-
86
- Return ONLY the updated full WorkflowDef JSON object (wrapped in \`\`\`json ... \`\`\`) that fulfills the user's instruction.`,A=await zl([{role:"system",content:R},{role:"user",content:N}],D),E=A.match(/```(?:json)?\s*([\s\S]*?)```/)||A.match(/(\{[\s\S]*\})/);if(E){const P=JSON.parse(E[1]);if(P&&Array.isArray(P.tasks)){const z=Mk(o,P);d({proposedDef:P,diff:z,messageId:`inline-cmdk-${Date.now()}`}),h(""),r(null);return}}g("⚠️ 未能解析 AI 返回的工作流 JSON,请重试")}catch(_){g(`❌ 调用失败: ${_?.message||"未知错误"}`)}finally{m(!1)}};return a.jsxs("div",{style:{position:"absolute",top:68,left:"50%",transform:"translateX(-50%)",width:540,maxWidth:"calc(100vw - 40px)",zIndex:2200,background:"rgba(15, 23, 42, 0.96)",backdropFilter:"blur(20px)",border:"1px solid rgba(99, 102, 241, 0.45)",borderRadius:14,boxShadow:"0 24px 60px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(99, 102, 241, 0.15)",overflow:"hidden"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 14px",background:"linear-gradient(90deg, rgba(99, 102, 241, 0.18), rgba(56, 189, 248, 0.1))",borderBottom:"1px solid rgba(148, 163, 184, 0.15)"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontSize:10,fontWeight:700,padding:"2px 7px",borderRadius:5,background:"#6366f1",color:"#fff"},children:"⌘K 画布内联指令"}),a.jsxs("span",{style:{fontSize:11,color:"#cbd5e1",fontFamily:"monospace"},children:["锚点:"," ",a.jsx("strong",{style:{color:"#38bdf8"},children:v?`${v.name} (${v.taskReferenceName})`:"画布全局"})]}),k.length>0&&a.jsxs("span",{style:{fontSize:10,color:"#94a3b8"},children:["· 可见上游 ",k.length," 个节点"]})]}),a.jsx("button",{type:"button",onClick:()=>r(null),style:{background:"none",border:"none",color:"#94a3b8",cursor:"pointer",fontSize:13},children:"ESC ✕"})]}),a.jsxs("form",{onSubmit:j,style:{display:"flex",padding:"10px 14px",gap:8},children:[a.jsx("input",{ref:b,type:"text",value:p,onChange:w=>h(w.target.value),disabled:f,placeholder:"输入自然语言指令,如:在此节点后加一个风控 HTTP 校验并判断状态码...",style:{flex:1,padding:"9px 12px",borderRadius:8,border:"1px solid rgba(148, 163, 184, 0.25)",background:"rgba(2, 6, 23, 0.65)",color:"#f8fafc",fontSize:13,outline:"none"}}),a.jsx("button",{type:"submit",disabled:f||!p.trim(),style:{padding:"0 16px",borderRadius:8,border:"none",background:"linear-gradient(135deg, #6366f1, #38bdf8)",color:"#fff",fontSize:12,fontWeight:700,cursor:f||!p.trim()?"not-allowed":"pointer",opacity:f||!p.trim()?.6:1},children:f?"生成中...":"执行 ↵"})]}),v&&a.jsxs("div",{style:{padding:"6px 14px 12px",display:"flex",flexWrap:"wrap",gap:6},children:[Fk.map(w=>a.jsx("button",{type:"button",onClick:()=>S(w),style:{fontSize:11,padding:"4px 10px",borderRadius:999,border:"1px solid rgba(148, 163, 184, 0.2)",background:"rgba(30, 41, 59, 0.65)",color:"#cbd5e1",cursor:"pointer"},children:w.label},w.label)),a.jsx("button",{type:"button",onClick:()=>{c(v,!0),r(null)},style:{fontSize:11,padding:"4px 10px",borderRadius:999,border:"1px solid rgba(56, 189, 248, 0.3)",background:"rgba(56, 189, 248, 0.1)",color:"#38bdf8",cursor:"pointer"},children:"⚙️ 打开属性抽屉"})]}),y&&a.jsx("div",{style:{padding:"6px 14px 10px",fontSize:11,color:"#38bdf8",borderTop:"1px solid rgba(148, 163, 184, 0.1)"},children:y})]})},Hk={taskNode:B1,decisionNode:U1,forkNode:ig.ForkNode,joinNode:ig.JoinNode,loopNode:K1,subWorkflowNode:Y1,plusNode:Z1,dynamicPlaceholderNode:ek},Uk={addableEdge:ak},Jk=({onNodeClick:e,searchQuery:t="",onSave:r,onRequestImport:n,executionActions:o})=>{const{nodes:s,edges:i,onNodesChange:l,onEdgesChange:c,onConnect:u,mode:d,viewMode:p,selectedTask:h,setSelectedTask:f,selectTaskAction:m,theme:y,edgeType:g,addNode:b,nodesLocked:x,executionData:v,validationResults:k,isDetailPanelOpen:S,setIsDetailPanelOpen:j,workflowDef:w,setWorkflow:N,dynamicRuntimeTasksByFork:L,layoutDirection:_,simState:T,isSimRunning:D,workflowLoadKey:R,showDataLineage:A}=ie(we(V=>({nodes:V.nodes,edges:V.edges,onNodesChange:V.onNodesChange,onEdgesChange:V.onEdgesChange,onConnect:V.onConnect,mode:V.mode,viewMode:V.viewMode,selectedTask:V.selectedTask,setSelectedTask:V.setSelectedTask,selectTaskAction:V.selectTaskAction,theme:V.theme,edgeType:V.edgeType,addNode:V.addNode,nodesLocked:V.nodesLocked,executionData:V.executionData,validationResults:V.validationResults,isDetailPanelOpen:V.isDetailPanelOpen,setIsDetailPanelOpen:V.setIsDetailPanelOpen,workflowDef:V.workflowDef,setWorkflow:V.setWorkflow,dynamicRuntimeTasksByFork:V.dynamicRuntimeTasksByFork,layoutDirection:V.layoutDirection,simState:V.simState,isSimRunning:V.isSimRunning,workflowLoadKey:V.workflowLoadKey,showDataLineage:V.showDataLineage}))),E=I.useMemo(()=>{if(p==="developer")return new Set(s.map(ne=>ne.id));const V=M1[p],X=new Set;return s.forEach(ne=>{if(ne.type==="dynamicPlaceholderNode"){X.add(ne.id);return}if(ne.type==="plusNode"){d==="edit"&&(!ne.data?.parentRef||X.has(ne.data.parentRef))&&X.add(ne.id);return}if(d==="run"&&v){const ue=v[ne.id]?.status;if(ue==="FAILED"||ue==="FAILED_WITH_TERMINAL_ERROR"||ue==="TIMED_OUT"||ue==="IN_PROGRESS"){X.add(ne.id);return}}if(ne.parentId)return;const Y=Ye.find(ue=>ue.type===ne.data.taskType)?.viewCategory??"business";V.includes(Y)&&X.add(ne.id)}),s.forEach(ne=>{if(ne.parentId&&X.has(ne.parentId)){if(ne.type==="plusNode"){d==="edit"&&X.add(ne.id);return}const Y=Ye.find(ue=>ue.type===ne.data.taskType)?.viewCategory??"business";V.includes(Y)&&X.add(ne.id)}}),X},[s,p,d,v]),P=I.useCallback(V=>{if(E.size===s.length)return V;const X={};V.forEach(Y=>{X[Y.source]||(X[Y.source]=[]),X[Y.source].push(Y)});const ne=[],fe=new Set;return V.forEach(Y=>{if(!E.has(Y.source))return;if(E.has(Y.target)){const K=`${Y.source}->${Y.target}`;fe.has(K)||(fe.add(K),ne.push(Y));return}const ue=[{to:Y.target,label:Y.label}],O=new Set;for(;ue.length;){const K=ue.shift();if(!O.has(K.to)){if(O.add(K.to),E.has(K.to)){const le=`${Y.source}->${K.to}`;fe.has(le)||(fe.add(le),ne.push({...Y,id:le,target:K.to,label:K.label??Y.label}));continue}(X[K.to]??[]).forEach(le=>ue.push({to:le.target,label:K.label??le.label}))}}}),ne},[E,s.length]),J=xg()?.aiStore??yg,B=J(V=>V.pendingProposal),$=J(V=>V.clearProposal),C=J(V=>V.recordAccept),G=J(V=>V.recordReject),Q=J(V=>V.pushUndo),M=I.useMemo(()=>{if(!B)return null;try{const{nodes:V,edges:X}=Ae(B.proposedDef,_,{hideEmptyBranches:!1}),{nodes:ne,edges:fe}=Ee(V,X,{direction:_,mode:"edit"}),Y=new Set(B.diff.added),ue=new Set(B.diff.modified),O=new Set(B.diff.removed),K=new Map(s.map(te=>[te.data?.taskReferenceName,te])),le=ne.filter(te=>te.type!=="plusNode").map(te=>{const ke=te.data?.taskReferenceName,Se=Y.has(ke)?"added":ue.has(ke)?"modified":void 0;return{...te,draggable:!1,selectable:!1,data:{...te.data,proposalStatus:Se,layoutDirection:_}}}),oe=[...O].map(te=>K.get(te)).filter(te=>te!=null).map(te=>({...te,draggable:!1,selectable:!1,data:{...te.data,proposalStatus:"removed"}}));return{nodes:[...le,...oe],edges:fe}}catch{return null}},[B,s,_]),{fitView:F}=q.useReactFlow(),[H,U]=I.useState(!1),[ee,ce]=I.useState(null),[de,Te]=I.useState(!1),[Ce,W]=I.useState(!1),{confirm:xe,confirmState:re,handleConfirm:me,handleCancel:ae}=jr(),{toasts:je,showToast:pe,dismissToast:ge}=Ek();Rk({confirm:xe,showToast:pe,onSave:r}),I.useEffect(()=>{if(h){const V=s.find(X=>X.data.taskReferenceName===h.taskReferenceName);V&&F({nodes:[V],duration:800,padding:.5})}},[h?.taskReferenceName,F]),I.useEffect(()=>{const V=()=>{F({duration:800})};return window.addEventListener("workflow-zoom-to-fit",V),()=>window.removeEventListener("workflow-zoom-to-fit",V)},[F]),I.useEffect(()=>{if(R===0)return;const V=setTimeout(()=>{F({duration:600,padding:.12})},50);return()=>clearTimeout(V)},[R,F]),I.useEffect(()=>{const V=fe=>{e&&fe.detail&&fe.detail.task&&e(fe.detail.task)},X=fe=>{if(d==="edit"){const{loopId:Y,afterRef:ue}=fe.detail;ce(ue?{sourceId:ue,edgeData:{}}:{sourceId:Y,edgeData:{isLoopAdd:!0}}),U(!0)}},ne=fe=>{d==="edit"&&(ce({sourceId:fe.detail.source,targetId:fe.detail.target,edgeId:fe.detail.id,edgeData:fe.detail.edgeData}),U(!0))};return document.addEventListener("miniTaskClick",V),document.addEventListener("loopAddNodeRequested",X),window.addEventListener("edgeAddNode",ne),()=>{document.removeEventListener("miniTaskClick",V),document.removeEventListener("loopAddNodeRequested",X),window.removeEventListener("edgeAddNode",ne)}},[d,e]);const We=I.useCallback(V=>{if(ee){const{sourceId:X,targetId:ne,edgeId:fe,edgeData:Y}=ee;b({data:{label:`New ${V}`,taskReferenceName:`${V.toLowerCase()}_${Date.now()}`,taskType:V}},X,ne,fe,Y)}U(!1),ce(null)},[ee,b]),_e=I.useMemo(()=>{const V={layoutedNodes:null,extraNodes:[],extraEdges:[],removedEdgeIds:new Set,removedNodeIds:new Set};if(d!=="run")return V;const X=s.filter(K=>K.type==="forkNode"&&K.data.taskType==="FORK_JOIN_DYNAMIC");if(!X.length)return V;const ne=[],fe=[],Y=new Set,ue=new Set;for(const K of X){const le=L[K.id]||[],oe=`${K.id}_dynamic_placeholder`,te=i.find(he=>he.target===oe),ke=i.find(he=>he.source===oe);let Se,ye;if(ke)Se=ke.target,ye=s.find(he=>he.id===Se);else{const he=s.indexOf(K);if(ye=s.slice(he).find(Ne=>Ne.type==="joinNode"),!ye)continue;Se=ye.id}ye&&(ke&&Y.add(ke.id),te&&Y.add(te.id),ue.add(oe),le.length&&le.forEach(he=>{const Ne=`dynamic_rt_${he.referenceTaskName}`;ne.push({id:Ne,type:"taskNode",data:{label:he.taskDefName||he.referenceTaskName,task:{name:he.taskDefName||he.referenceTaskName,taskReferenceName:he.referenceTaskName,type:he.taskType||"SIMPLE"},taskReferenceName:he.referenceTaskName,taskType:he.taskType||"SIMPLE",isDynamicRuntime:!0,layoutDirection:_},position:{x:0,y:0}}),fe.push({id:`e-${K.id}-${Ne}`,source:K.id,target:Ne,style:{strokeDasharray:"4,4"}}),fe.push({id:`e-${Ne}-${Se}`,source:Ne,target:Se,style:{strokeDasharray:"4,4"}})}))}let O=null;if(ne.length>0){const K=[...s.filter(te=>!ue.has(te.id)),...ne],le=[...i.filter(te=>!Y.has(te.id)),...fe];O=Ee(K,le,{direction:_,mode:"run"}).nodes}return{layoutedNodes:O,extraNodes:ne,extraEdges:fe,removedEdgeIds:Y,removedNodeIds:ue}},[d,L,s,i,_]),be=I.useMemo(()=>{const X=[...P(i.filter(Y=>!_e.removedEdgeIds.has(Y.id))),..._e.extraEdges],ne=D||Object.keys(T).length>0,fe=Y=>Y.startsWith("dynamic_rt_")?Y.slice(11):Y;return X.map(Y=>{const ue=Y.id.includes("loop-back"),O=Y.source.startsWith("dynamic_rt_")||Y.target.startsWith("dynamic_rt_"),K=y==="light"?"#64748b":"#94a3b8";let oe={...{...Y.style,stroke:K,strokeWidth:2.2,strokeDasharray:ue?"5,5":O?"4,4":void 0}},te=!1;if(d==="run"&&v){const he=fe(Y.source),Ne=fe(Y.target),$e=v[he]?.status,De=v[Ne]?.status,Je=$e==="COMPLETED"||$e==="COMPLETED_WITH_ERRORS";Je&&(De==="COMPLETED"||De==="COMPLETED_WITH_ERRORS")?(oe={...oe,stroke:"var(--status-completed)",strokeWidth:3.2,opacity:1},te=!1):Je&&(De==="IN_PROGRESS"||De==="SCHEDULED")?(oe={...oe,stroke:"var(--status-in-progress)",strokeWidth:3.5,opacity:1},te=!0):Je&&(De==="FAILED"||De==="FAILED_WITH_TERMINAL_ERROR")?(oe={...oe,stroke:"var(--status-failed)",strokeWidth:3.5,opacity:1},te=!1):Je&&De==="TIMED_OUT"?(oe={...oe,stroke:"var(--status-timed-out)",strokeWidth:3.5,opacity:1},te=!1):(oe={...oe,stroke:K,strokeWidth:1.8,opacity:.28},te=!1)}else if(ne){const he=T[Y.source],Ne=T[Y.target];he==="done"&&Ne==="done"?(oe={...oe,stroke:"var(--status-completed)",strokeWidth:3.2},te=!1):he==="done"&&Ne==="running"&&(oe={...oe,stroke:"var(--status-in-progress)",strokeWidth:3.5},te=!0)}const ke=Y.source.endsWith("_dynamic_placeholder")||Y.target.endsWith("_dynamic_placeholder"),Se=Y.source==="__workflow_start__"||Y.source.startsWith("__loop_start__")||Y.target.startsWith("__loop_end__")||Y.target.includes("_empty_"),ye=d==="edit"&&!ue&&!ke&&!Se;return{...Y,type:"addableEdge",data:{...Y.data,mode:d,isAddable:ye,edgeType:g,label:Y.label},markerEnd:{type:q.MarkerType.ArrowClosed,width:18,height:18,color:String(oe.stroke||K)},style:oe,animated:te}})},[i,g,y,d,v,_e,P,D,T]),se=I.useMemo(()=>{if(!A||!w)return[];const V=Hm(w),X=h?.taskReferenceName,ne=[],fe=new Set;return V.edges.forEach((Y,ue)=>{if(!E.has(Y.sourceRef)||!E.has(Y.targetRef)||X&&Y.sourceRef!==X&&Y.targetRef!==X)return;const O=`${Y.sourceRef}->${Y.targetRef}:${Y.fieldPath}`;fe.has(O)||(fe.add(O),ne.push({id:`wlsp-dfg-${ue}-${O}`,source:Y.sourceRef,target:Y.targetRef,type:"addableEdge",animated:!0,label:`🔗 ${Y.fieldPath}`,data:{mode:"view",isAddable:!1,edgeType:"default",label:`🔗 ${Y.fieldPath}`},markerEnd:{type:q.MarkerType.ArrowClosed,width:16,height:16,color:"#38bdf8"},style:{stroke:"#38bdf8",strokeWidth:2.4,strokeDasharray:"6,4",opacity:.95}}))}),ne},[A,w,E,h?.taskReferenceName]),ve="var(--bg-secondary)",qe=I.useMemo(()=>s.filter(V=>V.type!=="plusNode").length,[s]);return a.jsxs("div",{style:{width:"100%",height:"100%",position:"relative",background:ve},children:[a.jsxs(q,{nodes:I.useMemo(()=>{if(M)return M.nodes;const V=new Set(k.errors.filter(Y=>Y.type==="TASK").map(Y=>Y.ref)),X=new Set(k.warnings.filter(Y=>Y.type==="TASK").map(Y=>Y.ref)),ne=t.toLowerCase();return(_e.layoutedNodes?_e.layoutedNodes.filter(Y=>Y.id.startsWith("dynamic_rt_")||E.has(Y.id)):s.filter(Y=>!_e.removedNodeIds.has(Y.id)&&E.has(Y.id)).concat(_e.extraNodes)).map(Y=>{const ue=Y.data.taskReferenceName,O=T[ue];return{...Y,selected:h?.taskReferenceName===ue,data:{...Y.data,isError:d==="edit"&&V.has(ue),hasWarning:d==="edit"&&X.has(ue),isHighlighted:t?(Y.data.label||"").toLowerCase().includes(ne)||(Y.data.taskReferenceName||"").toLowerCase().includes(ne):!1,simRunning:O==="running",simDone:O==="done"}}})},[s,k,t,h,_e,E,T,d,M]),edges:M?.edges??[...be,...se],onNodesChange:l,onEdgesChange:c,onConnect:u,nodeTypes:Hk,edgeTypes:Uk,onNodeClick:(V,X)=>{if(X.type==="plusNode"){ce({sourceId:X.data.parentRef,edgeData:X.data.edgeData||{}}),U(!0);return}if(X.type==="loopNode"){const fe=X.data.task||null;f(fe),e&&e(fe);return}const ne=X.data.task||null;f(ne),e&&e(ne)},onPaneClick:()=>{f(null),d!=="run"&&j(!1)},fitView:!0,nodesDraggable:!x,nodesConnectable:!x,elementsSelectable:!0,minZoom:.2,maxZoom:2,children:[a.jsx(q.Background,{color:"var(--border-primary)",gap:20}),a.jsx(q.Panel,{position:"bottom-left",style:{marginBottom:"20px",marginLeft:"20px",zIndex:1e3},children:a.jsx(ok,{})}),qe>=5&&!S&&!de&&a.jsx(q.MiniMap,{position:"bottom-right",pannable:!0,zoomable:!0,style:{marginBottom:20,marginRight:20,width:160,height:110,backgroundColor:"var(--glass-surface)"},maskColor:y==="light"?"rgba(241, 245, 249, 0.7)":"rgba(15, 23, 42, 0.7)",nodeColor:V=>{if(V.type==="plusNode")return"transparent";if(d==="run"&&v){const X=V.data?.taskReferenceName,ne=v[X]?.status;return ne==="COMPLETED"?"#10b981":ne==="FAILED"||ne==="FAILED_WITH_TERMINAL_ERROR"?"#ef4444":ne==="IN_PROGRESS"||ne==="SCHEDULED"?"#3b82f6":ne==="TIMED_OUT"||ne==="COMPLETED_WITH_ERRORS"?"#f59e0b":"#64748b"}return V.type==="decisionNode"?"#f59e0b":V.type==="forkNode"||V.type==="joinNode"?"#10b981":V.type==="loopNode"?"#8b5cf6":"#3b82f6"}}),d==="run"&&a.jsx(q.Panel,{position:"bottom-center",children:a.jsx(rk,{})}),a.jsx(nk,{isOpen:de,onClose:()=>Te(!1),theme:y,onTaskSelect:V=>{m(V,!0)}}),B&&a.jsx(q.Panel,{position:"top-left",style:{marginTop:"14px",marginLeft:"16px",zIndex:1500},children:a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",padding:"8px 16px",borderRadius:"999px",background:"rgba(15, 23, 42, 0.94)",backdropFilter:"blur(16px)",border:"1px solid rgba(99, 102, 241, 0.45)",boxShadow:"0 12px 32px rgba(0, 0, 0, 0.4)",color:"#f8fafc",fontSize:"12px"},children:[a.jsx("span",{style:{fontWeight:700,color:"#a5b4fc"},children:"👻 Shadow Graph 架构变更预览"}),a.jsxs("div",{style:{display:"flex",gap:"8px",fontFamily:"monospace",fontSize:"11px"},children:[B.diff.added.length>0&&a.jsxs("span",{style:{color:"#34d399",fontWeight:700},children:["+",B.diff.added.length," 新增"]}),B.diff.modified.length>0&&a.jsxs("span",{style:{color:"#fbbf24",fontWeight:700},children:["~",B.diff.modified.length," 修改"]}),B.diff.removed.length>0&&a.jsxs("span",{style:{color:"#f87171",fontWeight:700},children:["-",B.diff.removed.length," 移除"]})]}),a.jsxs("div",{style:{display:"flex",gap:"6px"},children:[a.jsx("button",{type:"button",onClick:()=>{w&&Q(w),N(B.proposedDef),C(),$()},style:{padding:"4px 12px",borderRadius:"999px",border:"none",background:"#10b981",color:"#fff",fontSize:"11px",fontWeight:700,cursor:"pointer"},children:"✓ 采纳上屏"}),a.jsx("button",{type:"button",onClick:()=>{G(),$()},style:{padding:"4px 10px",borderRadius:"999px",border:"1px solid rgba(248, 113, 113, 0.4)",background:"rgba(239, 68, 68, 0.14)",color:"#f87171",fontSize:"11px",fontWeight:600,cursor:"pointer"},children:"✕ 拒绝"})]})]})}),a.jsx("div",{style:{position:"absolute",top:14,right:16,zIndex:1e3},children:a.jsx(ik,{onShowHealthCheck:()=>Te(!de),showHealthCheck:de,onShowSettings:()=>W(!0),executionActions:o})})]}),a.jsx(Ak,{}),a.jsx(Bk,{}),!w&&!B&&a.jsx(uk,{onRequestImport:n}),w&&s.length===0&&d==="edit"&&a.jsx("div",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:10,display:"flex",flexDirection:"column",alignItems:"center",gap:"12px"},children:a.jsxs("button",{className:"empty-state-btn primary",style:{padding:"12px 24px",borderRadius:"8px",cursor:"pointer",display:"flex",alignItems:"center",gap:"8px",fontSize:"16px",fontWeight:500,boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)"},onClick:()=>{ce({sourceId:"start",targetId:"end",edgeId:"new",edgeData:{}}),U(!0)},children:[a.jsx("span",{style:{fontSize:"20px",lineHeight:1},children:"+"}),"添加第一个任务"]})}),H&&a.jsx(tk,{theme:y,onSelect:We,onCancel:()=>U(!1)}),a.jsx(ck,{isOpen:Ce,onClose:()=>W(!1)}),re&&a.jsx(ft,{message:re.message,onConfirm:me,onCancel:ae}),a.jsx(fk,{messages:je,onDismiss:ge})]})},Kk=(e,t)=>{const r=t?`当前工作流(JSON):
221
+ `;function PN(e,t,r){if(!t)return`【⌘K 画布指令】${e}`;const n=r.length>0?`;可引用的上游任务:${r.join(", ")}`:"";return`【⌘K 画布指令 · 锚点任务 ${t.ref}${t.type?`(${t.type})`:""}${n}】${e}
222
+ 请在锚点任务附近修改,并生成变更方案供我确认。`}const AN=[{label:"在下方插入 HTTP 请求",icon:Ts,type:"HTTP",name:"http_call_task"},{label:"在下方插入条件分支 (SWITCH)",icon:vr,type:"SWITCH",name:"switch_router"},{label:"在下方插入 JQ 转换节点",icon:Vv,type:"JSON_JQ_TRANSFORM",name:"jq_transform_task"},{label:"为当前节点开启自动重试与容错",icon:fb,action:"retry_hardening"}],p1={success:{icon:gu,color:"var(--cm-status-success)"},warning:{icon:tt,color:"var(--cm-status-warning)"},failed:{icon:Yv,color:"var(--cm-status-failed)"},working:{icon:pT,color:"var(--cm-ai)"}},f1={size:14,strokeWidth:1.75,"aria-hidden":!0},m1="var(--cm-surface-0)",$N=({aiConfig:e})=>{const{inlineCopilotTaskRef:t,setInlineCopilotTaskRef:r,selectedTask:n,workflowDef:s,taskMap:a,addNode:i,updateTask:l,selectTaskAction:c}=re($e(N=>({inlineCopilotTaskRef:N.inlineCopilotTaskRef,setInlineCopilotTaskRef:N.setInlineCopilotTaskRef,selectedTask:N.selectedTask,workflowDef:N.workflowDef,taskMap:N.taskMap,addNode:N.addNode,updateTask:N.updateTask,selectTaskAction:N.selectTaskAction}))),d=Db(),u=d?.aiStore??xn,p=u(N=>N.config),f=u(N=>N.isStreaming),m=re(N=>N.mode),h=T.useRef(null);T.useEffect(()=>()=>{h.current?.abort()},[]);const[y,x]=T.useState(""),[g,v]=T.useState(!1),[k,b]=T.useState(null),S=T.useRef(null),j=t||n?.taskReferenceName||null,_=j?a[j]:null;if(T.useEffect(()=>{const N=O=>{if((O.metaKey||O.ctrlKey)&&O.key.toLowerCase()==="k"){O.preventDefault();const E=re.getState();if(E.inlineCopilotTaskRef)E.setInlineCopilotTaskRef(null);else{const R=E.selectedTask?.taskReferenceName||E.workflowDef?.tasks?.[E.workflowDef.tasks.length-1]?.taskReferenceName||"__canvas_root__";E.setInlineCopilotTaskRef(R)}}else O.key==="Escape"&&t&&r(null)};return window.addEventListener("keydown",N),()=>window.removeEventListener("keydown",N)},[t,r]),T.useEffect(()=>{t&&(b(null),setTimeout(()=>S.current?.focus(),40))},[t]),!t)return null;const w=s&&j&&j!=="__canvas_root__"?ms(s,j):[],I=N=>{if(!(!j||j==="__canvas_root__")){if(m==="run"){b({tone:"warning",text:"运行视图下不能修改流程。请切换到编辑模式后再试。"});return}if(N.action==="retry_hardening"&&_){l(j,{retryCount:3,retryLogic:"EXPONENTIAL_BACKOFF",retryDelaySeconds:2,timeoutSeconds:60}),b({tone:"success",text:"已为当前节点开启指数退避重试(3 次)与 60s 超时保护"}),setTimeout(()=>r(null),900);return}if(N.type&&N.name){const O=Pt.find(R=>R.type===N.type),E=`${N.name}_${Date.now().toString(36).slice(-4)}`;i({data:{label:O?.label||N.name,taskName:N.name,taskReferenceName:E,taskType:N.type}},j,"",`inline-cmdk-${E}`,{}),b({tone:"success",text:`已在 ${j} 后插入 ${N.type} 节点`}),setTimeout(()=>r(null),700)}}},C=async N=>{N.preventDefault();const O=y.trim();if(!O||!s)return;const E={...p,...e??{}};if(!Cn(E)){b({tone:"warning",text:d?"未配置 AI 服务。请点击 AI 对话面板右上角的设置按钮填写 API Key 后重试。":Nn});return}if(f){b({tone:"warning",text:"AI 正在处理上一条指令,请等它完成后再发送。"});return}const R=j&&j!=="__canvas_root__"?j:null,L=PN(O,R?{ref:R,name:_?.name,type:_?.type}:null,w.map(F=>F.taskReferenceName));if(d){d.aiStore.getState().setPendingAutoSend(L),x(""),b({tone:"success",text:"已发送给 AI 助手。方案生成后会在画布上等待你确认,可在对话面板查看进度。"}),setTimeout(()=>r(null),1200);return}e&&u.getState().setConfig({...e});const H=h.current??new TN(()=>({aiPermissions:{canEdit:re.getState().mode!=="run"}}),{aiStore:xn,libraryStore:WI,toolRegistry:NN});h.current=H,v(!0),b({tone:"working",text:"正在基于当前节点上下文生成变更方案…"});try{const F=xn.getState().pendingProposal?.id;await H.send(L);const q=xn.getState();if(q.pendingProposal&&q.pendingProposal.id!==F)x(""),b({tone:"success",text:"已生成变更方案,请在画布上方确认应用或放弃。"}),setTimeout(()=>r(null),1200);else{const W=([...q.messages].reverse().find($=>$.role==="assistant")?.content??"").replace(/\*\*/g,"").trim(),P=W.includes("出错了");b({tone:P?"failed":"warning",text:W?W.slice(0,160):"AI 没有生成变更方案。请换个说法重试。"})}}finally{v(!1)}};return o.jsxs("div",{style:{position:"absolute",top:68,left:"50%",transform:"translateX(-50%)",width:540,maxWidth:"calc(100vw - 40px)",zIndex:2200,background:"color-mix(in srgb, var(--cm-surface-1) 96%, transparent)",backdropFilter:"blur(20px)",border:"1px solid color-mix(in srgb, var(--cm-ai) 45%, transparent)",borderRadius:14,boxShadow:"var(--cm-shadow-float), 0 0 0 1px color-mix(in srgb, var(--cm-ai) 15%, transparent)",overflow:"hidden"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 14px",background:"linear-gradient(90deg, color-mix(in srgb, var(--cm-ai) 18%, transparent), transparent)",borderBottom:"1px solid var(--cm-border-subtle)"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{style:{fontSize:10,fontWeight:700,padding:"2px 7px",borderRadius:5,background:"var(--cm-ai)",color:m1},children:"⌘K 画布内联指令"}),o.jsxs("span",{style:{fontSize:11,color:"var(--cm-text-secondary)",fontFamily:"var(--cm-font-mono)"},children:["锚点:"," ",o.jsx("strong",{style:{color:"var(--cm-data)"},children:_?`${_.name} (${_.taskReferenceName})`:"画布全局"})]}),w.length>0&&o.jsxs("span",{style:{fontSize:10,color:"var(--cm-text-muted)"},children:["· 可见上游 ",w.length," 个节点"]})]}),o.jsxs("button",{type:"button",onClick:()=>r(null),style:{background:"none",border:"none",color:"var(--cm-text-muted)",cursor:"pointer",fontSize:12,display:"inline-flex",alignItems:"center",gap:4},"aria-label":"关闭内联指令(Esc)",children:["Esc ",o.jsx(Le,{...f1})]})]}),o.jsxs("form",{onSubmit:C,style:{display:"flex",padding:"10px 14px",gap:8},children:[o.jsx("input",{ref:S,type:"text",value:y,onChange:N=>x(N.target.value),disabled:g,placeholder:"输入自然语言指令,如:在此节点后加一个风控 HTTP 校验并判断状态码...",style:{flex:1,padding:"9px 12px",borderRadius:8,border:"1px solid var(--cm-border-default)",background:"var(--cm-surface-0)",color:"var(--cm-text-primary)",fontSize:13,outline:"none"}}),o.jsx("button",{type:"submit",disabled:g||!y.trim(),style:{padding:"0 16px",borderRadius:8,border:"none",background:"var(--cm-ai)",color:m1,display:"inline-flex",alignItems:"center",gap:4,fontSize:12,fontWeight:700,cursor:g||!y.trim()?"not-allowed":"pointer",opacity:g||!y.trim()?.6:1},children:g?"生成中…":o.jsxs(o.Fragment,{children:["运行 ",o.jsx(rT,{...f1})]})})]}),_&&o.jsxs("div",{style:{padding:"6px 14px 12px",display:"flex",flexWrap:"wrap",gap:6},children:[AN.map(N=>o.jsxs("button",{type:"button",onClick:()=>I(N),style:{fontSize:11,padding:"4px 10px",borderRadius:999,border:"1px solid var(--cm-border-default)",background:"var(--cm-surface-2)",color:"var(--cm-text-secondary)",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(N.icon,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),N.label]},N.label)),o.jsxs("button",{type:"button",onClick:()=>{c(_,!0),r(null)},style:{fontSize:11,padding:"4px 10px",borderRadius:999,border:"1px solid var(--cm-border-default)",background:"var(--cm-surface-2)",color:"var(--cm-text-secondary)",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(pb,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),"打开属性抽屉"]})]}),k&&o.jsxs("div",{style:{padding:"6px 14px 10px",fontSize:11,color:p1[k.tone].color,borderTop:"1px solid var(--cm-border-subtle)",display:"flex",alignItems:"center",gap:6},role:"status",children:[T.createElement(p1[k.tone].icon,{size:12,strokeWidth:1.75,"aria-hidden":!0}),k.text]})]})},LN={taskNode:HT,decisionNode:UT,forkNode:Tb.ForkNode,joinNode:Tb.JoinNode,loopNode:KT,subWorkflowNode:XT,plusNode:QT,dynamicPlaceholderNode:tI},DN={addableEdge:aI},MN=({onNodeClick:e,searchQuery:t="",onSave:r,onRequestImport:n,executionActions:s})=>{const{nodes:a,edges:i,onNodesChange:l,onEdgesChange:c,mode:d,viewMode:u,selectedTask:p,setSelectedTask:f,selectTaskAction:m,theme:h,edgeType:y,addNode:x,nodesLocked:g,executionData:v,validationResults:k,isDetailPanelOpen:b,setIsDetailPanelOpen:S,workflowDef:j,setWorkflow:_,dynamicRuntimeTasksByFork:w,layoutDirection:I,simState:C,isSimRunning:N,workflowLoadKey:O,showDataLineage:E}=re($e(Z=>({nodes:Z.nodes,edges:Z.edges,onNodesChange:Z.onNodesChange,onEdgesChange:Z.onEdgesChange,mode:Z.mode,viewMode:Z.viewMode,selectedTask:Z.selectedTask,setSelectedTask:Z.setSelectedTask,selectTaskAction:Z.selectTaskAction,theme:Z.theme,edgeType:Z.edgeType,addNode:Z.addNode,nodesLocked:Z.nodesLocked,executionData:Z.executionData,validationResults:Z.validationResults,isDetailPanelOpen:Z.isDetailPanelOpen,setIsDetailPanelOpen:Z.setIsDetailPanelOpen,workflowDef:Z.workflowDef,setWorkflow:Z.setWorkflow,dynamicRuntimeTasksByFork:Z.dynamicRuntimeTasksByFork,layoutDirection:Z.layoutDirection,simState:Z.simState,isSimRunning:Z.isSimRunning,workflowLoadKey:Z.workflowLoadKey,showDataLineage:Z.showDataLineage}))),R=T.useMemo(()=>{if(u==="developer")return new Set(a.map(ie=>ie.id));const Z=$T[u],oe=new Set;return a.forEach(ie=>{if(ie.type==="dynamicPlaceholderNode"){oe.add(ie.id);return}if(ie.type==="plusNode"){d==="edit"&&(!ie.data?.parentRef||oe.has(ie.data.parentRef))&&oe.add(ie.id);return}if(d==="run"&&v){const me=v[ie.id]?.status;if(me==="FAILED"||me==="FAILED_WITH_TERMINAL_ERROR"||me==="TIMED_OUT"||me==="IN_PROGRESS"){oe.add(ie.id);return}}if(ie.parentId)return;const te=Pt.find(me=>me.type===ie.data.taskType)?.viewCategory??"business";Z.includes(te)&&oe.add(ie.id)}),a.forEach(ie=>{if(ie.parentId&&oe.has(ie.parentId)){if(ie.type==="plusNode"){d==="edit"&&oe.add(ie.id);return}const te=Pt.find(me=>me.type===ie.data.taskType)?.viewCategory??"business";Z.includes(te)&&oe.add(ie.id)}}),oe},[a,u,d,v]),L=T.useCallback(Z=>{if(R.size===a.length)return Z;const oe={};Z.forEach(te=>{oe[te.source]||(oe[te.source]=[]),oe[te.source].push(te)});const ie=[],ge=new Set;return Z.forEach(te=>{if(!R.has(te.source))return;if(R.has(te.target)){const we=`${te.source}->${te.target}`;ge.has(we)||(ge.add(we),ie.push(te));return}const me=[{to:te.target,label:te.label}],Re=new Set;for(;me.length;){const we=me.shift();if(!Re.has(we.to)){if(Re.add(we.to),R.has(we.to)){const ze=`${te.source}->${we.to}`;ge.has(ze)||(ge.add(ze),ie.push({...te,id:ze,target:we.to,label:we.label??te.label}));continue}(oe[we.to]??[]).forEach(ze=>me.push({to:ze.target,label:we.label??ze.label}))}}}),ie},[R,a.length]),F=Db()?.aiStore??xn,q=F(Z=>Z.pendingProposal),A=F(Z=>Z.clearProposal),W=F(Z=>Z.recordAccept),P=F(Z=>Z.recordReject),$=F(Z=>Z.pushUndo),X=T.useMemo(()=>{if(!q)return null;try{const{nodes:Z,edges:oe}=yt(q.proposedDef,I,{hideEmptyBranches:!1}),{nodes:ie,edges:ge}=ut(Z,oe,{direction:I,mode:"edit"}),te=new Set(q.diff.added),me=new Set(q.diff.modified),Re=new Set(q.diff.removed),we=new Map(a.map(Ee=>[Ee.data?.taskReferenceName,Ee])),ze=ie.filter(Ee=>Ee.type!=="plusNode").map(Ee=>{const De=Ee.data?.taskReferenceName,ct=te.has(De)?"added":me.has(De)?"modified":void 0;return{...Ee,draggable:!1,selectable:!1,data:{...Ee.data,proposalStatus:ct,layoutDirection:I}}}),Oe=[...Re].map(Ee=>we.get(Ee)).filter(Ee=>Ee!=null).map(Ee=>({...Ee,draggable:!1,selectable:!1,data:{...Ee.data,proposalStatus:"removed"}}));return{nodes:[...ze,...Oe],edges:ge}}catch{return null}},[q,a,I]),{fitView:D}=J.useReactFlow(),[B,U]=T.useState(!1),[G,ne]=T.useState(null),[ye,Q]=T.useState(!1),[_e,ve]=T.useState(!1),{confirm:je,confirmState:fe,handleConfirm:V,handleCancel:ee}=gn(),{toasts:z,showToast:Ie,dismissToast:ke}=OI();RI({confirm:je,showToast:Ie,onSave:r});const Ne=re(Z=>Z.sandboxNotice);T.useEffect(()=>{Ne&&(Ie(Ne.text,Ne.type),re.getState().clearSandboxNotice())},[Ne,Ie]),T.useEffect(()=>{if(p){const Z=a.find(oe=>oe.data.taskReferenceName===p.taskReferenceName);Z&&D({nodes:[Z],duration:800,padding:.5})}},[p?.taskReferenceName,D]),T.useEffect(()=>{const Z=()=>{D({duration:800})};return window.addEventListener("workflow-zoom-to-fit",Z),()=>window.removeEventListener("workflow-zoom-to-fit",Z)},[D]),T.useEffect(()=>{if(O===0)return;const Z=setTimeout(()=>{D({duration:600,padding:.12})},50);return()=>clearTimeout(Z)},[O,D]),T.useEffect(()=>{const Z=ge=>{e&&ge.detail&&ge.detail.task&&e(ge.detail.task)},oe=ge=>{if(d==="edit"){const{loopId:te,afterRef:me}=ge.detail;ne(me?{sourceId:me,edgeData:{}}:{sourceId:te,edgeData:{isLoopAdd:!0}}),U(!0)}},ie=ge=>{d==="edit"&&(ne({sourceId:ge.detail.source,targetId:ge.detail.target,edgeId:ge.detail.id,edgeData:ge.detail.edgeData}),U(!0))};return document.addEventListener("miniTaskClick",Z),document.addEventListener("loopAddNodeRequested",oe),window.addEventListener("edgeAddNode",ie),()=>{document.removeEventListener("miniTaskClick",Z),document.removeEventListener("loopAddNodeRequested",oe),window.removeEventListener("edgeAddNode",ie)}},[d,e]);const Te=T.useCallback(Z=>{if(G){const{sourceId:oe,targetId:ie,edgeId:ge,edgeData:te}=G;x({data:{label:`New ${Z}`,taskReferenceName:`${Z.toLowerCase()}_${Date.now()}`,taskType:Z}},oe,ie,ge,te)}U(!1),ne(null)},[G,x]),Se=T.useMemo(()=>{const Z={layoutedNodes:null,extraNodes:[],extraEdges:[],removedEdgeIds:new Set,removedNodeIds:new Set};if(d!=="run")return Z;const oe=a.filter(we=>we.type==="forkNode"&&we.data.taskType==="FORK_JOIN_DYNAMIC");if(!oe.length)return Z;const ie=[],ge=[],te=new Set,me=new Set;for(const we of oe){const ze=w[we.id]||[],Oe=`${we.id}_dynamic_placeholder`,Ee=i.find(de=>de.target===Oe),De=i.find(de=>de.source===Oe);let ct,st;if(De)ct=De.target,st=a.find(de=>de.id===ct);else{const de=a.indexOf(we);if(st=a.slice(de).find(Ye=>Ye.type==="joinNode"),!st)continue;ct=st.id}st&&(De&&te.add(De.id),Ee&&te.add(Ee.id),me.add(Oe),ze.length&&ze.forEach(de=>{const Ye=`dynamic_rt_${de.referenceTaskName}`;ie.push({id:Ye,type:"taskNode",data:{label:de.taskDefName||de.referenceTaskName,task:{name:de.taskDefName||de.referenceTaskName,taskReferenceName:de.referenceTaskName,type:de.taskType||"SIMPLE"},taskReferenceName:de.referenceTaskName,taskType:de.taskType||"SIMPLE",isDynamicRuntime:!0,layoutDirection:I},position:{x:0,y:0}}),ge.push({id:`e-${we.id}-${Ye}`,source:we.id,target:Ye,style:{strokeDasharray:"4,4"}}),ge.push({id:`e-${Ye}-${ct}`,source:Ye,target:ct,style:{strokeDasharray:"4,4"}})}))}let Re=null;if(ie.length>0){const we=[...a.filter(Ee=>!me.has(Ee.id)),...ie],ze=[...i.filter(Ee=>!te.has(Ee.id)),...ge];Re=ut(we,ze,{direction:I,mode:"run"}).nodes}return{layoutedNodes:Re,extraNodes:ie,extraEdges:ge,removedEdgeIds:te,removedNodeIds:me}},[d,w,a,i,I]),le=T.useMemo(()=>{const oe=[...L(i.filter(te=>!Se.removedEdgeIds.has(te.id))),...Se.extraEdges],ie=N||Object.keys(C).length>0,ge=te=>te.startsWith("dynamic_rt_")?te.slice(11):te;return oe.map(te=>{const me=te.id.includes("loop-back"),Re=te.source.startsWith("dynamic_rt_")||te.target.startsWith("dynamic_rt_"),we="var(--cm-edge-default)";let Oe={...{...te.style,stroke:we,strokeWidth:2.2,strokeDasharray:me?"5,5":Re?"4,4":void 0}},Ee=!1;if(d==="run"&&v){const de=ge(te.source),Ye=ge(te.target),se=v[de]?.status,Ae=v[Ye]?.status,qe=se==="COMPLETED"||se==="COMPLETED_WITH_ERRORS";qe&&(Ae==="COMPLETED"||Ae==="COMPLETED_WITH_ERRORS")?(Oe={...Oe,stroke:"var(--status-completed)",strokeWidth:3.2,opacity:1},Ee=!1):qe&&(Ae==="IN_PROGRESS"||Ae==="SCHEDULED")?(Oe={...Oe,stroke:"var(--status-in-progress)",strokeWidth:3.5,opacity:1},Ee=!0):qe&&(Ae==="FAILED"||Ae==="FAILED_WITH_TERMINAL_ERROR")?(Oe={...Oe,stroke:"var(--status-failed)",strokeWidth:3.5,opacity:1},Ee=!1):qe&&Ae==="TIMED_OUT"?(Oe={...Oe,stroke:"var(--status-timed-out)",strokeWidth:3.5,opacity:1},Ee=!1):(Oe={...Oe,stroke:we,strokeWidth:1.8,opacity:.28},Ee=!1)}else if(ie){const de=C[te.source],Ye=C[te.target];de==="done"&&Ye==="done"?(Oe={...Oe,stroke:"var(--status-completed)",strokeWidth:3.2},Ee=!1):de==="done"&&Ye==="running"&&(Oe={...Oe,stroke:"var(--status-in-progress)",strokeWidth:3.5},Ee=!0)}const De=te.source.endsWith("_dynamic_placeholder")||te.target.endsWith("_dynamic_placeholder"),ct=te.source==="__workflow_start__"||te.source.startsWith("__loop_start__")||te.target.startsWith("__loop_end__")||te.target.includes("_empty_"),st=d==="edit"&&!me&&!De&&!ct;return{...te,type:"addableEdge",data:{...te.data,mode:d,isAddable:st,edgeType:y,label:te.label},markerEnd:{type:J.MarkerType.ArrowClosed,width:18,height:18,color:String(Oe.stroke||we)},style:Oe,animated:Ee}})},[i,y,h,d,v,Se,L,N,C]),Ce=T.useMemo(()=>{if(!E||!j)return[];const Z=tu(j),oe=p?.taskReferenceName,ie=[],ge=new Set;return Z.edges.forEach((te,me)=>{if(!R.has(te.sourceRef)||!R.has(te.targetRef)||oe&&te.sourceRef!==oe&&te.targetRef!==oe)return;const Re=`${te.sourceRef}->${te.targetRef}:${te.fieldPath}`;ge.has(Re)||(ge.add(Re),ie.push({id:`wlsp-dfg-${me}-${Re}`,source:te.sourceRef,target:te.targetRef,type:"addableEdge",animated:!0,label:te.fieldPath,data:{mode:"view",isAddable:!1,edgeType:"default",label:te.fieldPath},markerEnd:{type:J.MarkerType.ArrowClosed,width:16,height:16,color:"var(--cm-data)"},style:{stroke:"var(--cm-data)",strokeWidth:2.4,strokeDasharray:"6,4",opacity:.95}}))}),ie},[E,j,R,p?.taskReferenceName]),Me="var(--bg-secondary)",Ve=T.useMemo(()=>a.filter(Z=>Z.type!=="plusNode").length,[a]);return o.jsxs("div",{style:{width:"100%",height:"100%",position:"relative",background:Me},children:[o.jsxs(J,{nodes:T.useMemo(()=>{if(X)return X.nodes;const Z=new Set(k.errors.filter(te=>te.type==="TASK").map(te=>te.ref)),oe=new Set(k.warnings.filter(te=>te.type==="TASK").map(te=>te.ref)),ie=t.toLowerCase();return(Se.layoutedNodes?Se.layoutedNodes.filter(te=>te.id.startsWith("dynamic_rt_")||R.has(te.id)):a.filter(te=>!Se.removedNodeIds.has(te.id)&&R.has(te.id)).concat(Se.extraNodes)).map(te=>{const me=te.data.taskReferenceName,Re=C[me];return{...te,selected:p?.taskReferenceName===me,data:{...te.data,isError:d==="edit"&&Z.has(me),hasWarning:d==="edit"&&oe.has(me),isHighlighted:t?(te.data.label||"").toLowerCase().includes(ie)||(te.data.taskReferenceName||"").toLowerCase().includes(ie):!1,simRunning:Re==="running",simDone:Re==="done"}}})},[a,k,t,p,Se,R,C,d,X]),edges:X?.edges??[...le,...Ce],onNodesChange:l,onEdgesChange:c,nodeTypes:LN,edgeTypes:DN,onNodeClick:(Z,oe)=>{if(oe.type==="plusNode"){ne({sourceId:oe.data.parentRef,edgeData:oe.data.edgeData||{}}),U(!0);return}if(oe.type==="loopNode"){const ge=oe.data.task||null;f(ge),e&&e(ge);return}const ie=oe.data.task||null;f(ie),e&&e(ie)},onPaneClick:()=>{f(null),d!=="run"&&S(!1)},fitView:!0,nodesDraggable:!g,nodesConnectable:!1,deleteKeyCode:null,elementsSelectable:!0,minZoom:.2,maxZoom:2,children:[o.jsx(J.Background,{color:"var(--border-primary)",gap:20}),o.jsx(J.Panel,{position:"bottom-left",style:{marginBottom:"20px",marginLeft:"20px",zIndex:1e3},children:o.jsx(oI,{})}),Ve>=5&&!b&&!ye&&o.jsx(J.MiniMap,{position:"bottom-right",pannable:!0,zoomable:!0,style:{marginBottom:20,marginRight:20,width:160,height:110,backgroundColor:"var(--glass-surface)"},maskColor:"color-mix(in srgb, var(--cm-surface-0) 70%, transparent)",nodeColor:Z=>{if(Z.type==="plusNode")return"transparent";if(d==="run"&&v){const oe=Z.data?.taskReferenceName,ie=v[oe]?.status;return ie==="COMPLETED"?"var(--cm-status-success)":ie==="FAILED"||ie==="FAILED_WITH_TERMINAL_ERROR"?"var(--cm-status-failed)":ie==="IN_PROGRESS"||ie==="SCHEDULED"?"var(--cm-status-running)":ie==="TIMED_OUT"||ie==="COMPLETED_WITH_ERRORS"?"var(--cm-status-warning)":"var(--cm-status-pending)"}return Z.type==="decisionNode"?"var(--cm-status-warning)":Z.type==="forkNode"||Z.type==="joinNode"?"var(--cm-status-success)":Z.type==="loopNode"?"var(--cm-ai)":"var(--color-accent)"}}),d==="run"&&o.jsx(J.Panel,{position:"bottom-center",children:o.jsx(nI,{})}),o.jsx(sI,{isOpen:ye,onClose:()=>Q(!1),theme:h,onTaskSelect:Z=>{m(Z,!0)}}),q&&o.jsx(J.Panel,{position:"top-left",style:{marginTop:"14px",marginLeft:"16px",zIndex:1500},children:o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",padding:"8px 16px",borderRadius:"999px",background:"color-mix(in srgb, var(--cm-surface-1) 94%, transparent)",backdropFilter:"blur(16px)",border:"1px solid color-mix(in srgb, var(--cm-ai) 45%, transparent)",boxShadow:"var(--cm-shadow-float)",color:"var(--text-primary)",fontSize:"12px"},children:[o.jsxs("span",{style:{fontWeight:700,color:"var(--cm-ai)"},children:[o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"AI 提案预览(Shadow Graph)"]}),o.jsxs("div",{style:{display:"flex",gap:"8px",fontFamily:"monospace",fontSize:"11px"},children:[q.diff.added.length>0&&o.jsxs("span",{style:{color:"var(--cm-diff-added)",fontWeight:700},children:["+",q.diff.added.length," 新增"]}),q.diff.modified.length>0&&o.jsxs("span",{style:{color:"var(--cm-diff-modified)",fontWeight:700},children:["~",q.diff.modified.length," 修改"]}),q.diff.removed.length>0&&o.jsxs("span",{style:{color:"var(--cm-diff-removed)",fontWeight:700},children:["-",q.diff.removed.length," 移除"]})]}),o.jsxs("div",{style:{display:"flex",gap:"6px"},children:[o.jsxs("button",{type:"button",onClick:()=>{j&&$(j),_(q.proposedDef),W(),A()},style:{padding:"4px 12px",borderRadius:"999px",border:"none",background:"var(--cm-status-success)",color:"var(--cm-on-danger)",fontSize:"11px",fontWeight:700,cursor:"pointer"},children:[o.jsx(Wt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"全部采纳"]}),o.jsxs("button",{type:"button",onClick:()=>{P(),A()},style:{padding:"4px 10px",borderRadius:"999px",border:"1px solid color-mix(in srgb, var(--cm-status-failed) 40%, transparent)",background:"color-mix(in srgb, var(--cm-status-failed) 14%, transparent)",color:"var(--cm-status-failed)",fontSize:"11px",fontWeight:600,cursor:"pointer"},children:[o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"放弃"]})]})]})}),o.jsx("div",{style:{position:"absolute",top:14,right:16,zIndex:1e3},children:o.jsx(lI,{onShowHealthCheck:()=>Q(!ye),showHealthCheck:ye,onShowSettings:()=>ve(!0),executionActions:s})})]}),o.jsx(DI,{}),o.jsx($N,{}),!j&&!q&&o.jsx(pI,{onRequestImport:n}),j&&a.length===0&&d==="edit"&&o.jsx("div",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:10,display:"flex",flexDirection:"column",alignItems:"center",gap:"12px"},children:o.jsxs("button",{className:"empty-state-btn primary",style:{padding:"12px 24px",borderRadius:"8px",cursor:"pointer",display:"flex",alignItems:"center",gap:"8px",fontSize:"16px",fontWeight:500,boxShadow:"var(--cm-shadow-card)"},onClick:()=>{ne({sourceId:"start",targetId:"end",edgeId:"new",edgeData:{}}),U(!0)},children:[o.jsx("span",{style:{fontSize:"20px",lineHeight:1},children:"+"}),"添加第一个任务"]})}),B&&o.jsx(rI,{theme:h,onSelect:Te,onCancel:()=>U(!1)}),o.jsx(dI,{isOpen:_e,onClose:()=>ve(!1)}),fe&&o.jsx(qt,{message:fe.message,onConfirm:V,onCancel:ee}),o.jsx(mI,{messages:z,onDismiss:ke})]})},WN=(e,t)=>{const r=t?`当前工作流(JSON):
87
223
  ${JSON.stringify({name:t.name,tasks:t.tasks.map(n=>({ref:n.taskReferenceName,type:n.type,name:n.name}))},null,2)}`:"当前工作流:尚未定义。";return`
88
224
  用户请求:${e}
89
225
 
@@ -114,7 +250,7 @@ ${r}
114
250
 
115
251
  如果是全量生成新工作流,使用 kind="replace" 并在 diff-json 中加入 "payload": {...完整工作流JSON...}。
116
252
  如果不涉及工作流变更(仅解释/回答),则不需要输出 diff-json 块。
117
- `},Vk=(e,t)=>`
253
+ `},zN=(e,t)=>`
118
254
  Context: I am configuring a Conductor task in a workflow.
119
255
  Task Reference Name: ${e.taskReferenceName}
120
256
  Task Type: ${e.type}
@@ -124,12 +260,30 @@ ${JSON.stringify(t,null,2)}
124
260
 
125
261
  Requirement: Suggest 3 meaningful 'inputParameters' or JSONPath expressions for this task based on the workflow context.
126
262
  Return the suggestions as a JSON array of objects with { label, value, description }.
127
- `,Gk={string:"#38bdf8",number:"#a78bfa",boolean:"#f472b6",object:"#fbbf24",array:"#34d399",any:"#94a3b8"},Yk=({isOpen:e,onClose:t,onSelect:r,suggestions:n,wlspItems:o=[],anchorRect:s,onRequestAiHint:i,aiLoading:l=!1})=>{const c=ie(E=>E.theme),u=ie(E=>E.themeColor),[d,p]=I.useState("all"),[h,f]=I.useState(""),[m,y]=I.useState(0),g=I.useRef(null);I.useEffect(()=>{e&&(f(""),y(0),setTimeout(()=>g.current?.focus(),30))},[e]);const b=I.useMemo(()=>{const E=o.map(z=>({label:z.label,value:z.value,description:z.description,category:z.category,valueType:z.valueType,sourceLabel:z.sourceLabel,sampleValue:z.sampleValue,isConditional:z.isConditional})),P=new Set(E.map(z=>z.value));for(const z of n)P.has(z.value)||(P.add(z.value),E.push({...z,category:z.category||"ai"}));return E},[o,n]),x=I.useMemo(()=>b.filter(E=>{if(d!=="all"&&E.category!==d&&E.category!=="ai")return!1;if(!h.trim())return!0;const P=h.toLowerCase();return E.label.toLowerCase().includes(P)||E.value.toLowerCase().includes(P)||E.description.toLowerCase().includes(P)||E.sourceLabel&&E.sourceLabel.toLowerCase().includes(P)}),[b,d,h]);if(I.useEffect(()=>{y(0)},[d,h]),!e||!s||typeof document>"u")return null;const v=typeof window<"u"?window.innerHeight:800,k=typeof window<"u"?window.innerWidth:1280,S=Math.min(380,k-32),j=s.width>=160?s.left:s.right-S,w=Math.min(Math.max(16,j),k-S-16),N=v-s.bottom-16,L=s.top-16,_=N<260&&L>N,T=_?Math.min(400,Math.max(200,L)):Math.min(400,Math.max(200,N)),D=c==="light",R={position:"fixed",..._?{bottom:`${v-s.top+6}px`}:{top:`${s.bottom+6}px`},left:`${w}px`,width:`${S}px`,maxHeight:`${T}px`,zIndex:9999,background:D?"rgba(255, 255, 255, 0.98)":"rgba(15, 23, 42, 0.96)",color:D?"#0f172a":"#f8fafc",borderColor:D?"rgba(148, 163, 184, 0.35)":"rgba(56, 189, 248, 0.28)"},A=E=>{E.key==="ArrowDown"?(E.preventDefault(),y(P=>x.length>0?(P+1)%x.length:0)):E.key==="ArrowUp"?(E.preventDefault(),y(P=>x.length>0?(P-1+x.length)%x.length:0)):E.key==="Enter"&&x[m]?(E.preventDefault(),r(x[m].value),t()):E.key==="Escape"&&(E.preventDefault(),t())};return Qe.createPortal(a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"suggester-overlay",onClick:t}),a.jsxs("div",{className:`parameter-suggester-popover glass-panel ${D?"theme-light":"theme-dark"}`,"data-mode":c,"data-brand":u,style:R,onKeyDown:A,children:[a.jsxs("div",{className:"suggester-header",children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{className:"sparkle-icon",children:"⚡"}),a.jsx("span",{children:"W-LSP 上下文变量补全"}),a.jsxs("span",{style:{fontSize:10,opacity:.65,fontWeight:500},children:["(",x.length,")"]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i&&a.jsx("button",{type:"button",className:"suggester-ai-btn",onClick:i,disabled:l,title:"调用 AI 推理更多上下文表达式",children:l?"AI 思考中...":"✨ AI 推荐"}),a.jsx("button",{type:"button",onClick:t,title:"关闭 (Esc)",style:{background:"none",border:"none",color:"inherit",opacity:.55,cursor:"pointer",padding:"2px 4px",fontSize:12,lineHeight:1},children:"✕"})]})]}),a.jsx("div",{className:"suggester-search-bar",children:a.jsx("input",{ref:g,type:"text",className:"suggester-search-input",placeholder:"搜索上游任务、输出字段或输入参数 (↑↓选择, Enter插入)...",value:h,onChange:E=>f(E.target.value)})}),a.jsx("div",{className:"suggester-tabs",children:[{id:"all",label:"全部"},{id:"upstream",label:"🔗 上游输出"},{id:"workflow_input",label:"📥 工作流输入"},{id:"variable",label:"📦 全局变量"},{id:"system",label:"⚙️ 系统"}].map(E=>a.jsx("button",{type:"button",className:`suggester-tab ${d===E.id?"active":""}`,onClick:()=>p(E.id),children:E.label},E.id))}),a.jsx("div",{className:"suggester-list",children:x.length===0?a.jsx("div",{className:"suggester-empty",children:"没有匹配的上下文变量"}):x.map((E,P)=>{const z=Gk[E.valueType||"any"]||"#94a3b8";return a.jsxs("div",{className:`suggestion-item ${P===m?"active":""}`,onMouseEnter:()=>y(P),onClick:()=>{r(E.value),t()},children:[a.jsxs("div",{className:"suggestion-top-row",children:[a.jsx("span",{className:"suggestion-label",children:E.label}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[E.isConditional&&a.jsx("span",{className:"suggestion-cond-badge",title:"来自条件分支,可能未执行",children:"条件分支"}),E.valueType&&a.jsx("span",{className:"suggestion-type-badge",style:{color:z,borderColor:`${z}44`,background:`${z}15`},children:E.valueType})]})]}),a.jsxs("div",{className:"suggestion-value-row",children:[a.jsx("code",{className:"suggestion-value",children:E.value}),E.sampleValue!==void 0&&a.jsxs("span",{className:"suggestion-sample",title:`真实样本值: ${E.sampleValue}`,children:["= ",E.sampleValue]})]}),a.jsxs("div",{className:"suggestion-desc",children:[E.sourceLabel?`[${E.sourceLabel}] `:"",E.description]})]},`${E.value}-${P}`)})})]})]}),document.body)},Xk=({title:e,value:t,language:r="text",placeholder:n="",onSave:o,onClose:s})=>{const{theme:i,themeColor:l}=ie(we(f=>({theme:f.theme,themeColor:f.themeColor}))),[c,u]=I.useState(t),d=I.useRef(null);I.useEffect(()=>{d.current?.focus();const f=m=>{m.key==="Escape"&&(m.stopPropagation(),s()),(m.ctrlKey||m.metaKey)&&m.key==="s"&&(m.preventDefault(),m.stopPropagation(),o(c))};return window.addEventListener("keydown",f,!0),()=>window.removeEventListener("keydown",f,!0)},[c,o,s]);const h={javascript:"#f7df1e",js:"#f7df1e",json:"#89b4fa",jq:"#a6e3a1",groovy:"#4ec994",python:"#3572A5",text:"var(--text-secondary)"}[r.toLowerCase()]??"var(--text-secondary)";return Qe.createPortal(a.jsxs("div",{"data-mode":i,"data-brand":l,style:{position:"fixed",inset:0,zIndex:3e3,display:"flex",flexDirection:"column",background:"var(--bg-primary)"},onClick:f=>f.stopPropagation(),children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",padding:"10px 20px",background:"var(--bg-secondary)",borderBottom:"1px solid var(--glass-border)",flexShrink:0},children:[a.jsx("span",{style:{fontSize:"11px",fontWeight:700,color:h,background:`${h}18`,border:`1px solid ${h}44`,padding:"2px 8px",borderRadius:"4px",fontFamily:"monospace",letterSpacing:"0.5px",textTransform:"uppercase",flexShrink:0},children:r}),a.jsx("span",{style:{fontSize:"13px",fontWeight:600,color:"var(--text-primary)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),a.jsx("span",{style:{fontSize:"11px",color:"var(--text-secondary)",flexShrink:0},children:"Ctrl+S 保存 · Esc 取消"}),a.jsx("button",{onClick:s,style:{padding:"6px 14px",background:"var(--bg-tertiary)",border:"1px solid var(--glass-border)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"12px",fontWeight:500,flexShrink:0},children:"取消"}),a.jsx("button",{onClick:()=>o(c),style:{padding:"6px 16px",background:"var(--color-accent)",border:"none",borderRadius:"6px",color:"#fff",cursor:"pointer",fontSize:"12px",fontWeight:600,flexShrink:0},children:"应用"})]}),a.jsx("textarea",{ref:d,value:c,placeholder:n,onChange:f=>u(f.target.value),onKeyDown:f=>f.stopPropagation(),spellCheck:!1,style:{flex:1,width:"100%",padding:"20px 24px",background:"var(--bg-primary)",color:r==="javascript"||r==="js"||r==="groovy"?"var(--color-accent)":"var(--text-primary)",border:"none",outline:"none",resize:"none",fontFamily:'var(--font-mono, "Fira Code", "Cascadia Code", Consolas, monospace)',fontSize:"14px",lineHeight:"1.7",boxSizing:"border-box",caretColor:"var(--color-accent)"}}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",padding:"5px 20px",background:"var(--bg-secondary)",borderTop:"1px solid var(--glass-border)",flexShrink:0,fontSize:"11px",color:"var(--text-secondary)"},children:[a.jsxs("span",{children:[c.split(`
128
- `).length," 行"]}),a.jsxs("span",{children:[c.length," 字符"]}),c!==t&&a.jsx("span",{style:{color:"#f59e0b",fontWeight:600},children:"● 未保存"})]})]}),document.body)},Zk=[{label:"工作流输入",value:"${workflow.input.fieldName}",desc:"引用工作流启动时传入的参数"},{label:"上游任务输出",value:"${taskRef.output.result}",desc:"引用上游任务的输出字段"},{label:"工作流变量",value:"${workflow.variables.varName}",desc:"引用 SET_VARIABLE 设置的变量"},{label:"工作流 ID",value:"${workflow.workflowId}",desc:"当前工作流实例 ID"},{label:"关联 ID",value:"${workflow.correlationId}",desc:"工作流关联 ID"},{label:"工作流状态",value:"${workflow.status}",desc:"当前工作流状态"}],Qk=({task:e,isOpen:t=!0,onClose:r,aiConfig:n})=>{const{mode:o,updateTask:s,checkTaskRefUniqueness:i,workflowDef:l,executionData:c,workflowInstance:u,lastRefactorNotice:d,clearRefactorNotice:p}=ie(we(O=>({mode:O.mode,updateTask:O.updateTask,checkTaskRefUniqueness:O.checkTaskRefUniqueness,workflowDef:O.workflowDef,executionData:O.executionData,workflowInstance:O.workflowInstance,lastRefactorNotice:O.lastRefactorNotice,clearRefactorNotice:O.clearRefactorNotice}))),[h,f]=I.useState(e),[m,y]=I.useState(e?.taskReferenceName??null),[g,b]=I.useState(null),[x,v]=I.useState(!1),[k,S]=I.useState(null),[j,w]=I.useState(()=>e?.type==="WAIT"&&e.inputParameters?.until?"until":"duration"),[N,L]=I.useState(()=>e?.type==="DO_WHILE"&&e.inputParameters?.items?"items":"condition"),[_,T]=I.useState(()=>!e||e.type!=="FORK_JOIN_DYNAMIC"?"classic":e.forkTaskWorkflow?"workflow":e.forkTaskType?"task":"classic"),[D,R]=I.useState(!1),[A,E]=I.useState(),[P,z]=I.useState([]),[J,B]=I.useState(()=>()=>{}),$=e?.taskReferenceName||h?.taskReferenceName||"",C=I.useMemo(()=>!l||!$?[]:Bm(l,$,c,u?.input),[l,$,c,u?.input]),[G,Q]=I.useState(null),[M,F]=I.useState(!1),[H,U]=I.useState(null),ee=(O,K,le,oe)=>{Q({title:O,value:K,language:le,onSave:oe})},ce=[{label:"引用工作流输入",value:"${workflow.input.data}",description:"引用工作流启动时传入的原始数据"},{label:"引用前序任务输出",value:"${previous_task.output.result}",description:"引用上一个节点的计算结果"},{label:"环境变量",value:"${workflow.variables.api_key}",description:"引用工作流定义的全局变量"}],de=async()=>{const O=n?.apiKey||localStorage.getItem("AI_API_KEY")||"";if(!O){alert("请先在设置中配置 AI API Key");return}if(Ce){F(!0);try{const{workflowDef:K,taskMap:le}=ie.getState(),oe=at(K?.inputParameters).map(ye=>ye.name),te=Object.values(le).filter(ye=>ye.taskReferenceName!==Ce.taskReferenceName).map(ye=>({ref:ye.taskReferenceName,type:ye.type,name:ye.name})).slice(0,10),ke={apiKey:O};n?.baseUrl&&(ke.baseUrl=n.baseUrl),n?.model&&(ke.model=n.model);const Se=await zk(Ce.type,Ce.taskReferenceName,oe,te,Ce.inputParameters??{},ke);U({generated:Se,original:Ce.inputParameters??{}})}catch(K){alert(`AI 生成失败:${K?.message||"未知错误"}`)}finally{F(!1)}}},Te=async(O,K)=>{const le=O.currentTarget.getBoundingClientRect();if(E(le),B(()=>K),R(!0),C.length>0)return;z([]);const oe=n?.apiKey||localStorage.getItem("AI_API_KEY")||"";if(!oe){z(ce);return}try{const te=n?.baseUrl||localStorage.getItem("AI_BASE_URL")||"",ke=n?.model||localStorage.getItem("AI_MODEL")||"",Se={apiKey:oe};te&&(Se.baseUrl=te),ke&&(Se.model=ke);const{workflowDef:ye}=ie.getState(),he=Vk(Ce,ye),$e=(await zl([{role:"system",content:"You are a Conductor workflow expert. Return only valid JSON."},{role:"user",content:he}],Se)).match(/\[[\s\S]*\]/);if($e){const De=JSON.parse($e[0]);z(De)}else z(ce)}catch{z(ce)}};if(I.useEffect(()=>{e&&(f(e),y(e.taskReferenceName),b(null),e.type==="WAIT"&&w(e.inputParameters?.until?"until":"duration"),e.type==="DO_WHILE"&&L(e.inputParameters?.items?"items":"condition"),e.type==="FORK_JOIN_DYNAMIC"&&(e.forkTaskWorkflow?T("workflow"):e.forkTaskType?T("task"):T("classic")))},[e]),!e&&!h)return null;const Ce=e||h,W=h&&e&&m===e.taskReferenceName?h:Ce,xe=t&&e?"panel-enter-active":"panel-exit",re=o==="edit",me="var(--text-primary)",ae="var(--glass-border)",je="var(--bg-tertiary)",pe="var(--text-secondary)",ge=(O,K)=>{const le={...W,[O]:K};f(le),s(W.taskReferenceName,{[O]:K})},We=(O,K,le)=>{const te={...W[O]||{},[K]:le},ke={...W,[O]:te};f(ke),s(W.taskReferenceName,{[O]:te})},_e=(O,K)=>{const le=W.inputParameters||{},te={...le.http_request||W.httpRequest||{},[O]:K},Se={inputParameters:{...le,http_request:te}};W.httpRequest&&(Se.httpRequest=te);const ye={...W,...Se};f(ye),s(W.taskReferenceName,Se)},be=(O,K)=>{const oe={inputParameters:{...W.inputParameters,[O]:K}},te={...W,...oe};f(te),s(W.taskReferenceName,oe)},se=O=>{if(!k)return;const K=k.selectionStart??0,le=k.selectionEnd??0,oe=k.value,te=oe.substring(0,K)+O+oe.substring(le),ke=k.getAttribute("data-field");ke&&ge(ke,te),v(!1)},ve=(O,K,le,oe)=>a.jsxs("div",{style:{marginBottom:"24px",padding:"16px",borderRadius:"12px",background:`${le}10`,border:`1px solid ${le}30`,boxShadow:"0 4px 12px rgba(0,0,0,0.05)"},children:[a.jsxs("div",{style:{fontSize:"12px",fontWeight:"bold",marginBottom:"16px",color:le,display:"flex",alignItems:"center",gap:"8px"},children:[a.jsx("span",{children:K})," ",O]}),oe]}),qe=(O,K,le="text",oe)=>{const te=K==="taskReferenceName",ke=te&&g!==null?g:W[K]??"",Se=te&&!i(ke,W.taskReferenceName);return a.jsxs("div",{style:{marginBottom:"16px"},children:[a.jsxs("label",{style:{display:"block",fontSize:"11px",color:pe,marginBottom:"6px",fontWeight:"600",textTransform:"uppercase"},children:[O,te&&Se&&a.jsx("span",{style:{color:"#ef4444",marginLeft:"8px",textTransform:"none"},children:"⚠️ 已存在相同引用名"})]}),a.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[a.jsx("input",{type:le,value:ke,placeholder:oe,onChange:ye=>{const he=ye.target.value;if(te)b(he);else{ge(K,le==="number"?he===""?void 0:Number(he):he);const Ne=ye.target.selectionStart??0;if(le==="text"&&Ne>=2&&he.slice(Ne-2,Ne)==="${"){const $e=ye.target.getBoundingClientRect();E($e),B(()=>De=>{const Je=he.slice(0,Ne-2),sc=he.slice(Ne);ge(K,Je+De+sc)}),R(!0)}}},onFocus:te?()=>{g===null&&b(W.taskReferenceName??"")}:void 0,onBlur:te?ye=>{const he=ye.target.value.trim();b(null),he&&he!==W.taskReferenceName&&ge("taskReferenceName",he)}:void 0,onKeyDown:te?ye=>{ye.key==="Enter"&&ye.currentTarget.blur(),ye.stopPropagation()}:void 0,disabled:!re,style:{width:"100%",padding:`8px ${re&&!te?"32px":"12px"} 8px 12px`,borderRadius:"6px",border:`1px solid ${Se?"#ef4444":ae}`,background:je,color:me,fontSize:"13px",outline:"none",opacity:re?1:.8,fontFamily:te?"monospace":"inherit"}}),re&&!te&&a.jsx("button",{className:"ai-hint-trigger",onClick:ye=>Te(ye,he=>ge(K,he)),title:"AI 智能提示",style:{position:"absolute",right:"8px",background:"none",border:"none",cursor:"pointer",fontSize:"14px",padding:"4px",opacity:.6,display:"flex",alignItems:"center",justifyContent:"center"},children:"✨"})]})]})},V=(O,K,le,oe={})=>{const{rows:te=5,language:ke="text",style:Se,placeholder:ye,"data-field":he}=oe,Ne={width:"100%",padding:"12px",borderRadius:"8px",border:`1px solid ${ae}`,background:je,color:me,fontSize:"12px",fontFamily:"monospace",lineHeight:"1.5",resize:"vertical",...Se};return a.jsxs("div",{style:{marginBottom:"8px"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"4px"},children:[a.jsx("label",{style:{fontSize:"10px",color:pe},children:O}),re&&a.jsx("button",{onClick:()=>ee(O,K,ke,$e=>{le($e),Q(null)}),title:"全屏编辑",style:{background:"none",border:"none",cursor:"pointer",fontSize:"14px",padding:"2px 4px",color:"var(--text-secondary)",opacity:.7,lineHeight:1},children:"⛶"})]}),a.jsx("textarea",{value:K,placeholder:ye,onChange:$e=>{const De=$e.target.value;le(De);const Je=$e.target.selectionStart??0;if(Je>=2&&De.slice(Je-2,Je)==="${"){const sc=$e.target.getBoundingClientRect();E(sc),B(()=>z0=>{const W0=De.slice(0,Je-2),F0=De.slice(Je);le(W0+z0+F0)}),R(!0)}},disabled:!re,rows:te,"data-field":he,onFocus:$e=>S($e.currentTarget),style:Ne})]})},X=(O,K,le,oe="text",te)=>a.jsxs("div",{style:{marginBottom:"12px"},children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:O}),a.jsx("input",{type:oe,value:K??"",placeholder:te,onChange:ke=>{const Se=ke.target.value;le(oe==="number"?Se===""?void 0:Number(Se):Se);const ye=ke.target.selectionStart??0;if(oe==="text"&&ye>=2&&Se.slice(ye-2,ye)==="${"){const he=ke.target.getBoundingClientRect();E(he),B(()=>Ne=>{const $e=Se.slice(0,ye-2),De=Se.slice(ye);le($e+Ne+De)}),R(!0)}},disabled:!re,style:{width:"100%",padding:"8px 10px",borderRadius:"6px",border:`1px solid ${ae}`,background:je,color:me,fontSize:"12px",outline:"none"}})]}),ne=(O,K,le,oe)=>a.jsxs("div",{style:{marginBottom:"12px"},children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:O}),a.jsx("select",{value:le,onChange:te=>oe(te.target.value),disabled:!re,style:{width:"100%",padding:"8px 10px",borderRadius:"6px",border:`1px solid ${ae}`,background:je,color:me,fontSize:"12px",outline:"none",cursor:"pointer"},children:K.map(te=>a.jsx("option",{value:te,children:te},te))})]}),fe=(O,K,le)=>a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"12px"},children:[a.jsx("span",{style:{fontSize:"11px",color:pe},children:O}),a.jsx("button",{onClick:()=>le(!K),disabled:!re,style:{width:"36px",height:"20px",borderRadius:"10px",border:"none",cursor:"pointer",background:K?"var(--color-accent)":ae,position:"relative",transition:"background 0.2s"},children:a.jsx("span",{style:{position:"absolute",top:"2px",left:K?"18px":"2px",width:"16px",height:"16px",borderRadius:"50%",background:"#fff",transition:"left 0.2s"}})})]}),Y=(O,K,le)=>a.jsx("div",{style:{display:"flex",gap:"6px",marginBottom:"12px"},children:O.map(oe=>a.jsx("button",{onClick:()=>le(oe.key),disabled:!re,style:{flex:1,padding:"6px",borderRadius:"6px",border:`1px solid ${ae}`,cursor:"pointer",fontSize:"11px",fontWeight:K===oe.key?"bold":"normal",background:K===oe.key?"var(--color-accent)":je,color:K===oe.key?"#fff":me},children:oe.label},oe.key))}),ue=W.inputParameters?.http_request||W.httpRequest||{};return a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:`detail-panel-container ${xe}`,style:{position:"absolute",right:0,top:0,bottom:0,width:"450px",zIndex:1200,display:"flex",flexDirection:"column",background:"var(--bg-primary)",borderLeft:`1px solid ${ae}`,boxShadow:"-10px 0 30px rgba(0, 0, 0, 0.2)",overflowY:"hidden"},children:[a.jsxs("div",{style:{padding:"24px",borderBottom:`1px solid ${ae}`,background:"var(--bg-secondary)",flexShrink:0},children:[a.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"},children:[a.jsx("div",{style:{background:"var(--color-accent)",color:"#fff",padding:"2px 8px",borderRadius:"4px",fontSize:"10px",fontWeight:"bold",letterSpacing:"1px"},children:W.type||"TASK"}),a.jsx("button",{onClick:r,style:{background:"none",border:"none",color:me,cursor:"pointer",fontSize:"20px"},children:"✕"})]}),re?a.jsx("input",{value:W.name||"",onChange:O=>ge("name",O.target.value),placeholder:"任务名称",style:{display:"block",width:"100%",fontSize:"22px",fontWeight:"bold",background:"transparent",border:"none",color:me,outline:"none",borderBottom:"2px dashed var(--color-accent)"}}):a.jsx("div",{style:{fontSize:"22px",fontWeight:"bold"},children:W.name}),a.jsxs("div",{style:{fontSize:"12px",color:pe,marginTop:"8px",fontFamily:"monospace",opacity:.8},children:["REF: ",W.taskReferenceName]})]}),a.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"24px",background:"var(--bg-primary)"},children:[W.type==="HTTP"&&ve("HTTP 请求配置","🌐","var(--color-accent)",a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:{display:"flex",gap:"8px",marginBottom:"12px"},children:[a.jsx("select",{value:ue.method||"GET",onChange:O=>_e("method",O.target.value),disabled:!re,style:{width:"90px",padding:"10px",borderRadius:"8px",background:je,color:me,border:`1px solid ${ae}`,cursor:"pointer"},children:["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].map(O=>a.jsx("option",{value:O,children:O},O))}),a.jsx("input",{placeholder:"URI (支持 ${workflow.input.uri})",value:ue.uri||"",onChange:O=>_e("uri",O.target.value),disabled:!re,style:{flex:1,padding:"10px",borderRadius:"8px",background:je,color:me,border:`1px solid ${ae}`}})]}),a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px",marginBottom:"12px"},children:[a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"CONTENT-TYPE"}),a.jsx("input",{placeholder:"application/json",value:ue.contentType||"",onChange:O=>_e("contentType",O.target.value),disabled:!re,style:{width:"100%",padding:"8px",borderRadius:"6px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"12px"}})]}),a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"ACCEPT"}),a.jsx("input",{placeholder:"application/json",value:ue.accept||"",onChange:O=>_e("accept",O.target.value),disabled:!re,style:{width:"100%",padding:"8px",borderRadius:"6px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"12px"}})]})]}),a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px",marginBottom:"12px"},children:[a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"连接超时 (ms)"}),a.jsx("input",{type:"number",placeholder:"3000",value:ue.connectionTimeOut??"",onChange:O=>_e("connectionTimeOut",O.target.value===""?void 0:Number(O.target.value)),disabled:!re,style:{width:"100%",padding:"8px",borderRadius:"6px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"12px"}})]}),a.jsxs("div",{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"读取超时 (ms)"}),a.jsx("input",{type:"number",placeholder:"3000",value:ue.readTimeOut??"",onChange:O=>_e("readTimeOut",O.target.value===""?void 0:Number(O.target.value)),disabled:!re,style:{width:"100%",padding:"8px",borderRadius:"6px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"12px"}})]})]}),a.jsxs("div",{style:{marginBottom:"12px"},children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"HEADERS (JSON)"}),a.jsx("textarea",{value:typeof ue.headers=="object"?JSON.stringify(ue.headers,null,2):"{}",onChange:O=>{try{_e("headers",JSON.parse(O.target.value))}catch{}},disabled:!re,rows:3,style:{width:"100%",padding:"8px",borderRadius:"8px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"11px",fontFamily:"monospace"}})]}),a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"BODY (RAW/JSON)"}),a.jsx("textarea",{value:typeof ue.body=="object"?JSON.stringify(ue.body,null,2):ue.body||"",onChange:O=>{let K=O.target.value;try{K=JSON.parse(O.target.value)}catch{}_e("body",K)},disabled:!re,rows:4,style:{width:"100%",padding:"8px",borderRadius:"8px",background:je,color:me,border:`1px solid ${ae}`,fontSize:"11px",fontFamily:"monospace"}})]})),(W.type==="INLINE"||W.type==="LAMBDA")&&ve("内联脚本配置 (Inline)","📜","var(--color-accent)",a.jsxs(a.Fragment,{children:[ne("脚本引擎",["graaljs","javascript","value-param","python"],W.evaluatorType||"graaljs",O=>ge("evaluatorType",O)),V(`EXPRESSION ${W.evaluatorType==="value-param"?"(值引用)":"(脚本)"}`,W.inputParameters?.expression||W.inputParameters?.scriptExpression||"",O=>{const K=W.inputParameters?.scriptExpression!==void 0?"scriptExpression":"expression";be(K,O)},{rows:10,language:W.evaluatorType||"javascript",style:{background:"#000",color:"var(--color-accent)",border:"1px solid var(--color-accent)"}}),a.jsx("div",{style:{marginTop:"8px",fontSize:"10px",color:pe,fontStyle:"italic"},children:"提示: 使用 $.input.key 访问输入参数,返回值作为任务输出。"})]})),W.type==="JSON_JQ_TRANSFORM"&&ve("JQ 数据转换","🔍","var(--color-accent)",a.jsxs(a.Fragment,{children:[V("JQ QUERY EXPRESSION",W.inputParameters?.queryExpression||"",O=>be("queryExpression",O),{rows:6,language:"jq",style:{color:"var(--color-accent)"}}),a.jsx("div",{style:{marginTop:"8px",fontSize:"10px",color:pe},children:"输出字段: result(首个结果)、resultList(完整列表)"})]})),W.type==="SUB_WORKFLOW"&&ve("子工作流配置","🏗️","var(--color-accent)",a.jsxs(a.Fragment,{children:[X("WORKFLOW NAME *",W.subWorkflowParam?.name||"",O=>We("subWorkflowParam","name",O),"text","e.g. my_workflow"),X("VERSION",W.subWorkflowParam?.version??"",O=>We("subWorkflowParam","version",O?parseInt(O):void 0),"number","1"),V("INPUT PARAMETERS MAPPING (JSON)",typeof W.inputParameters=="object"&&W.inputParameters!==null?JSON.stringify(W.inputParameters,null,2):"{}",O=>{try{ge("inputParameters",JSON.parse(O))}catch{}},{rows:5,language:"json"}),a.jsxs("div",{style:{fontSize:"10px",color:pe,marginTop:"4px"},children:["传递给子工作流的参数,支持 ","${workflow.input.xxx}"," 表达式"]})]})),W.type==="START_WORKFLOW"&&ve("启动工作流配置","▶️","var(--color-accent)",a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:{fontSize:"11px",color:pe,marginBottom:"12px",padding:"8px",borderRadius:"6px",background:"rgba(255,165,0,0.1)",border:"1px solid rgba(255,165,0,0.3)"},children:["⚡ 注意:此任务启动目标工作流后立即继续,",a.jsx("b",{children:"不等待"}),"目标工作流完成。"]}),X("WORKFLOW NAME *",W.inputParameters?.startWorkflow?.name||"",O=>{const K={...W.inputParameters?.startWorkflow||{},name:O};be("startWorkflow",K)},"text","e.g. target_workflow"),X("VERSION",W.inputParameters?.startWorkflow?.version??"",O=>{const K={...W.inputParameters?.startWorkflow||{},version:O?parseInt(O):void 0};be("startWorkflow",K)},"number","1"),X("CORRELATION ID",W.inputParameters?.startWorkflow?.correlationId||"",O=>{const K={...W.inputParameters?.startWorkflow||{},correlationId:O};be("startWorkflow",K)},"text","${workflow.correlationId}"),V("WORKFLOW INPUT (JSON)",typeof W.inputParameters?.startWorkflow?.input=="object"?JSON.stringify(W.inputParameters.startWorkflow.input,null,2):"{}",O=>{try{const K={...W.inputParameters?.startWorkflow||{},input:JSON.parse(O)};be("startWorkflow",K)}catch{}},{rows:4,language:"json"})]})),W.type==="TERMINATE"&&ve("终止状态配置","⏹️","var(--color-accent)",a.jsxs(a.Fragment,{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"TERMINATION STATUS"}),a.jsx("div",{style:{display:"flex",gap:"8px",marginBottom:"16px"},children:["COMPLETED","FAILED"].map(O=>a.jsx("button",{onClick:()=>be("terminationStatus",O),disabled:!re,style:{flex:1,padding:"8px",borderRadius:"6px",cursor:"pointer",background:(W.inputParameters?.terminationStatus||"COMPLETED")===O?"var(--color-accent)":je,color:(W.inputParameters?.terminationStatus||"COMPLETED")===O?"#fff":me,border:`1px solid ${ae}`,fontWeight:"bold",fontSize:"11px"},children:O},O))}),X("TERMINATION REASON",W.inputParameters?.terminationReason||"",O=>be("terminationReason",O),"text","终止原因..."),V("WORKFLOW OUTPUT (JSON)",typeof W.inputParameters?.workflowOutput=="object"?JSON.stringify(W.inputParameters.workflowOutput,null,2):"{}",O=>{try{be("workflowOutput",JSON.parse(O))}catch{}},{rows:3,language:"json"})]})),W.type==="EVENT"&&ve("事件发送配置","✉️","var(--color-accent)",a.jsxs(a.Fragment,{children:[X("EVENT SINK *",W.sink||"",O=>ge("sink",O),"text","e.g. sqs:queue_name 或 conductor"),a.jsx("div",{style:{fontSize:"10px",color:pe,marginTop:"4px",marginBottom:"8px"},children:"支持前缀: conductor | sqs | kafka | amqp | nats"}),fe("异步完成 (asyncComplete)",!!W.asyncComplete,O=>ge("asyncComplete",O))]})),W.type==="WAIT"&&ve("等待状态配置","⏳","var(--color-accent)",a.jsxs(a.Fragment,{children:[Y([{key:"duration",label:"等待时长"},{key:"until",label:"等待到指定时间"}],j,O=>w(O)),j==="duration"?X("DURATION",W.inputParameters?.duration||"",O=>be("duration",O),"text","e.g. 30s, 10m, 2 hours"):X("UNTIL (时间点)",W.inputParameters?.until||"",O=>be("until",O),"text","e.g. 2025-06-15 09:00 GMT+00:00"),a.jsxs("div",{style:{fontSize:"11px",color:pe,lineHeight:"1.6",marginTop:"8px"},children:["此任务会使工作流进入 ",a.jsx("b",{children:"IN_PROGRESS"})," 状态,直到时间满足或外部 API 触发完成。"]})]})),(W.type==="DECISION"||W.type==="SWITCH")&&ve("条件分支配置","⚖️","var(--color-accent)",a.jsxs(a.Fragment,{children:[ne("评估模式 (evaluatorType)",["value-param","javascript"],W.evaluatorType||"value-param",O=>ge("evaluatorType",O)),(W.evaluatorType||"value-param")==="value-param"?X("CASE VALUE PARAM (参数名)",W.caseValueParam||"",O=>ge("caseValueParam",O),"text","e.g. status"):a.jsx(a.Fragment,{children:V("CASE EXPRESSION (JS)",W.caseExpression||"",O=>ge("caseExpression",O),{rows:4,language:"javascript",style:{color:"var(--color-accent)"}})}),a.jsx("div",{style:{fontSize:"10px",color:pe,marginTop:"8px"},children:'分支可在图中通过右键节点→"添加分支"进行管理'})]})),W.type==="DO_WHILE"&&ve("循环逻辑配置","🔄","var(--color-accent)",a.jsxs(a.Fragment,{children:[Y([{key:"condition",label:"条件循环"},{key:"items",label:"列表迭代"}],N,O=>L(O)),N==="condition"?a.jsxs(a.Fragment,{children:[V("LOOP CONDITION (JS) *",W.loopCondition||"",O=>ge("loopCondition",O),{rows:4,language:"javascript",style:{color:"var(--color-accent)"}}),a.jsx("div",{style:{fontSize:"10px",color:pe,marginTop:"4px"},children:"条件为 true 时继续循环,false 时退出"})]}):a.jsxs(a.Fragment,{children:[a.jsx("label",{style:{display:"block",fontSize:"10px",color:pe,marginBottom:"4px"},children:"ITEMS (列表表达式)"}),a.jsx("input",{value:W.inputParameters?.items||"",onChange:O=>be("items",O.target.value),disabled:!re,placeholder:"${workflow.input.myList}",style:{width:"100%",padding:"8px",borderRadius:"6px",border:`1px solid ${ae}`,background:je,color:me,fontSize:"12px",outline:"none"}}),a.jsx("div",{style:{fontSize:"10px",color:pe,marginTop:"4px"},children:"引用一个数组,对每个元素执行一次循环体"})]}),a.jsx("div",{style:{marginTop:"12px"},children:X("KEEP LAST N 次迭代",W.keepLastN??"",O=>ge("keepLastN",O?parseInt(O):void 0),"number","0 = 保留全部")})]})),W.type==="FORK_JOIN_DYNAMIC"&&ve("动态并行配置","⚡","var(--color-accent)",a.jsxs(a.Fragment,{children:[Y([{key:"classic",label:"经典模式"},{key:"task",label:"任务简化"},{key:"workflow",label:"工作流简化"}],_,O=>T(O)),_==="classic"&&a.jsxs(a.Fragment,{children:[X("DYNAMIC_FORK_TASKS_PARAM",W.dynamicForkTasksParam||"",O=>ge("dynamicForkTasksParam",O),"text","e.g. dynamic_tasks"),X("DYNAMIC_FORK_TASKS_INPUT_PARAM",W.dynamicForkTasksInputParamName||"",O=>ge("dynamicForkTasksInputParamName",O),"text","e.g. input"),a.jsx("div",{style:{fontSize:"10px",color:pe},children:"经典模式:通过 inputParameters 传入 dynamicTasks 数组和 dynamicTasksInput 映射"})]}),_==="task"&&a.jsxs(a.Fragment,{children:[X("FORK TASK TYPE *",W.forkTaskType||"",O=>ge("forkTaskType",O),"text","e.g. HTTP"),X("FORK TASK NAME (仅 SIMPLE 任务)",W.forkTaskName||"",O=>ge("forkTaskName",O),"text","e.g. my_task"),X("FORK TASK INPUTS PARAM",W.forkTaskInputs||"",O=>ge("forkTaskInputs",O),"text","e.g. inputs"),a.jsx("div",{style:{fontSize:"10px",color:pe},children:"所有分支执行相同任务类型,每个元素作为一个分支输入"})]}),_==="workflow"&&a.jsxs(a.Fragment,{children:[X("FORK WORKFLOW NAME *",W.forkTaskWorkflow||"",O=>ge("forkTaskWorkflow",O),"text","e.g. sub_workflow"),X("WORKFLOW VERSION",W.forkTaskWorkflowVersion||"",O=>ge("forkTaskWorkflowVersion",O),"text","1"),X("FORK TASK INPUTS PARAM",W.forkTaskInputs||"",O=>ge("forkTaskInputs",O),"text","e.g. inputs"),a.jsx("div",{style:{fontSize:"10px",color:pe},children:"所有分支执行相同子工作流,每个元素作为一个子工作流输入"})]})]})),W.type==="DYNAMIC"&&ve("动态任务配置","🎯","var(--color-accent)",a.jsxs(a.Fragment,{children:[X("DYNAMIC TASK NAME PARAM *",W.dynamicTaskNameParam||"",O=>ge("dynamicTaskNameParam",O),"text","e.g. taskToExecute"),a.jsx("div",{style:{fontSize:"10px",color:pe,marginTop:"4px"},children:'运行时从 inputParameters 的指定键中读取实际任务类型名(如 "HTTP"、"SIMPLE")'})]})),W.type==="HUMAN"&&ve("人工审批配置","👤","var(--color-accent)",a.jsxs(a.Fragment,{children:[X("表单模板名 (userFormTemplate)",W.humanTaskDef?.userFormTemplate||"",O=>We("humanTaskDef","userFormTemplate",O),"text","e.g. approval_form"),ne("分配策略 (assignmentCompletionStrategy)",["LEAVE_OPEN","TERMINATE"],W.humanTaskDef?.assignmentCompletionStrategy||"LEAVE_OPEN",O=>We("humanTaskDef","assignmentCompletionStrategy",O)),X("显示名称 (displayName)",W.humanTaskDef?.displayName||"",O=>We("humanTaskDef","displayName",O),"text","审批任务")]})),W.type==="KAFKA_PUBLISH"&&ve("Kafka 推送配置","📨","var(--color-accent)",a.jsxs(a.Fragment,{children:[X("BOOTSTRAP SERVERS *",W.inputParameters?.bootStrapServers||"",O=>be("bootStrapServers",O),"text","localhost:9092"),X("TOPIC *",W.inputParameters?.topic||"",O=>be("topic",O),"text","my_topic"),X("KEY (消息分区键)",W.inputParameters?.key||"",O=>be("key",O),"text",""),V("VALUE (消息内容)",typeof W.inputParameters?.value=="object"?JSON.stringify(W.inputParameters.value,null,2):W.inputParameters?.value||"",O=>{let K=O;try{K=JSON.parse(O)}catch{}be("value",K)},{rows:4,language:"json"}),V("HEADERS (JSON)",typeof W.inputParameters?.headers=="object"?JSON.stringify(W.inputParameters.headers,null,2):"{}",O=>{try{be("headers",JSON.parse(O))}catch{}},{rows:3,language:"json"})]})),W.type==="SET_VARIABLE"&&ve("变量配置","📦","var(--color-accent)",a.jsxs(a.Fragment,{children:[a.jsxs("div",{style:{fontSize:"11px",color:pe,marginBottom:"12px"},children:["在 inputParameters 中定义要设置的变量名和值,后续任务通过 ","${workflow.variables.varName}"," 访问。"]}),V("VARIABLES (JSON)",typeof W.inputParameters=="object"&&W.inputParameters!==null?JSON.stringify(W.inputParameters,null,2):"{}",O=>{try{ge("inputParameters",JSON.parse(O))}catch{}},{rows:6,language:"json"})]})),a.jsxs("div",{style:{marginTop:"32px",borderTop:`1px solid ${ae}`,paddingTop:"24px"},children:[a.jsx("div",{style:{fontSize:"11px",fontWeight:"bold",marginBottom:"16px",opacity:.6,textTransform:"uppercase",letterSpacing:"1px"},children:"通用参数与属性"}),qe("任务唯一引用名 (Reference Name)","taskReferenceName"),d&&d.newRef===W.taskReferenceName&&a.jsxs("div",{style:{marginBottom:"16px",padding:"10px 12px",borderRadius:"8px",background:"rgba(16, 185, 129, 0.12)",border:"1px solid rgba(16, 185, 129, 0.35)",display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"8px"},children:[a.jsxs("div",{style:{fontSize:"11px",color:"#34d399",lineHeight:1.5},children:[a.jsx("b",{children:"🔗 W-LSP 全图级联重构已生效"}),a.jsx("br",{}),"引用名 ",a.jsx("code",{children:d.oldRef})," → ",a.jsx("code",{children:d.newRef}),",已自动同步 ",a.jsx("b",{children:d.replacedCount})," 处下游表达式(涉及节点:",d.affectedTasks.join(", "),")"]}),a.jsx("button",{onClick:p,style:{background:"none",border:"none",color:"#34d399",cursor:"pointer",fontSize:"12px",padding:"2px"},children:"✕"})]}),qe("任务描述","description"),a.jsxs("div",{style:{marginBottom:"16px"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"6px",gap:"6px"},children:[a.jsxs("label",{style:{fontSize:"11px",color:pe,fontWeight:"600",textTransform:"uppercase",flex:1},children:["输入参数 (inputParameters) ",a.jsxs("span",{style:{opacity:.5,fontWeight:"normal"},children:["(JSON / 输入 $","{"," 自动补全)"]})]}),re&&a.jsxs("div",{style:{display:"flex",gap:"6px"},children:[a.jsx("button",{onClick:O=>{const K=O.currentTarget.getBoundingClientRect();E(K),B(()=>le=>{if(k)se(le);else{const oe=typeof W.inputParameters=="object"&&W.inputParameters!==null?{...W.inputParameters}:{};oe[`param_${Object.keys(oe).length+1}`]=le,ge("inputParameters",oe)}}),R(!0)},title:"打开 W-LSP 上游变量与 Schema 零延迟补全器",style:{fontSize:"11px",background:"rgba(56, 189, 248, 0.14)",border:"1px solid rgba(56, 189, 248, 0.35)",borderRadius:"4px",padding:"2px 8px",cursor:"pointer",color:"#38bdf8",fontWeight:600,display:"flex",alignItems:"center",gap:"4px"},children:"⚡ 变量补全"}),a.jsxs("button",{onClick:de,disabled:M,title:"AI 根据上下文自动生成 inputParameters",style:{fontSize:"11px",background:"linear-gradient(135deg, #6366f1, #8b5cf6)",border:"none",borderRadius:"4px",padding:"2px 8px",cursor:M?"not-allowed":"pointer",color:"#fff",fontWeight:600,display:"flex",alignItems:"center",gap:"4px",opacity:M?.7:1},children:[M?"⏳":"✨"," AI 填充"]}),a.jsxs("button",{onClick:()=>v(!x),title:"快捷表达式",style:{fontSize:"11px",background:x?"var(--color-accent)":"none",border:`1px solid ${ae}`,borderRadius:"4px",padding:"2px 6px",cursor:"pointer",color:x?"#fff":pe},children:["{}"," 片段"]})]})]}),x&&a.jsx("div",{style:{marginBottom:"8px",padding:"8px",borderRadius:"6px",border:`1px solid ${ae}`,background:"var(--bg-secondary)",display:"flex",flexWrap:"wrap",gap:"6px"},children:Zk.map(O=>a.jsx("button",{onClick:()=>se(O.value),title:O.desc,style:{fontSize:"10px",padding:"3px 8px",borderRadius:"4px",border:`1px solid ${ae}`,background:je,color:me,cursor:"pointer",fontFamily:"monospace"},children:O.label},O.value))}),H&&a.jsxs("div",{style:{marginBottom:"8px",borderRadius:"8px",border:"1px solid #6366f130",background:"#6366f108",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"8px 12px",background:"#6366f118",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("span",{style:{fontSize:"11px",fontWeight:700,color:"#6366f1"},children:"✨ AI 建议的 inputParameters"}),a.jsxs("div",{style:{display:"flex",gap:"6px"},children:[a.jsx("button",{onClick:()=>{ge("inputParameters",H.generated),U(null)},style:{fontSize:"11px",background:"#6366f1",color:"#fff",border:"none",borderRadius:"4px",padding:"3px 10px",cursor:"pointer",fontWeight:600,fontFamily:"inherit"},children:"应用"}),a.jsx("button",{onClick:()=>U(null),style:{fontSize:"11px",background:"none",color:pe,border:`1px solid ${ae}`,borderRadius:"4px",padding:"3px 8px",cursor:"pointer",fontFamily:"inherit"},children:"取消"})]})]}),a.jsx("pre",{style:{margin:0,padding:"10px 12px",fontSize:"12px",fontFamily:"var(--font-mono)",overflowX:"auto",color:me,maxHeight:"180px",overflowY:"auto"},children:JSON.stringify(H.generated,null,2)})]}),V("",typeof W.inputParameters=="object"&&W.inputParameters!==null?JSON.stringify(W.inputParameters,null,2):W.inputParameters??"",O=>{try{ge("inputParameters",JSON.parse(O))}catch{f(K=>({...K,inputParameters:O}))}},{rows:5,language:"json","data-field":"inputParameters",style:{outline:"none"}})]}),a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"12px"},children:[qe("重试次数","retryCount","number"),qe("超时限制 (秒)","timeoutSeconds","number")]}),a.jsxs("details",{style:{marginTop:"16px"},children:[a.jsx("summary",{style:{fontSize:"11px",cursor:"pointer",color:pe,userSelect:"none",fontWeight:"600"},children:"▸ 执行控制(高级)"}),a.jsxs("div",{style:{marginTop:"12px"},children:[ne("重试策略 (retryLogic)",["FIXED","EXPONENTIAL_BACKOFF","LINEAR_BACKOFF"],W.retryLogic||"FIXED",O=>ge("retryLogic",O)),X("重试延迟 (秒)",W.retryDelaySeconds??"",O=>ge("retryDelaySeconds",O?parseInt(O):void 0),"number","0"),ne("超时策略 (timeoutPolicy)",["TIME_OUT_WF","ALERT_ONLY","RETRY","FAIL_WORKFLOW"],W.timeoutPolicy||"TIME_OUT_WF",O=>ge("timeoutPolicy",O)),X("启动延迟 (秒)",W.startDelay??"",O=>ge("startDelay",O?parseInt(O):void 0),"number","0"),fe("可选任务 (optional) — 失败不影响工作流",!!W.optional,O=>ge("optional",O)),fe("异步完成 (asyncComplete)",!!W.asyncComplete,O=>ge("asyncComplete",O))]})]})]}),a.jsx("div",{style:{marginTop:"48px",opacity:.6},children:a.jsxs("details",{children:[a.jsx("summary",{style:{fontSize:"11px",cursor:"pointer",marginBottom:"8px"},children:"查看完整 JSON (只读)"}),a.jsx("pre",{style:{background:"rgba(0,0,0,0.2)",padding:"16px",borderRadius:"8px",fontSize:"10px",overflow:"auto",border:`1px solid ${ae}`,color:pe},children:JSON.stringify(W,null,2)})]})})]}),re&&a.jsxs("div",{style:{padding:"24px",borderTop:`1px solid ${ae}`,background:"var(--bg-secondary)",display:"flex",gap:"12px",flexShrink:0},children:[a.jsx("div",{style:{flex:1,fontSize:"11px",color:pe,display:"flex",alignItems:"center"},children:"✅ 所有修改已实时同步"}),a.jsx("button",{onClick:r,style:{padding:"10px 24px",background:"var(--color-accent)",color:"#fff",border:"none",borderRadius:"8px",fontWeight:"bold",cursor:"pointer",boxShadow:"0 4px 12px var(--color-accent-bg)"},children:"完成退出"})]}),a.jsx(Yk,{isOpen:D,onClose:()=>R(!1),onSelect:J,suggestions:P,wlspItems:C,anchorRect:A})]}),G&&a.jsx(Xk,{title:G.title,value:G.value,language:G.language,onSave:G.onSave,onClose:()=>Q(null)})]})},e0=I.memo(Qk),kg=({keyName:e,value:t,path:r,depth:n,defaultExpanded:o,forceExpandAll:s,searchQuery:i,onCopyExpr:l,copiedPath:c,buildExpr:u})=>{const d=t!==null&&typeof t=="object",p=Array.isArray(t),[h,f]=I.useState(o),m=s!==null?s:h,y=u(r);if(!I.useMemo(()=>{if(!i.trim())return!0;const S=i.toLowerCase();if(e!==void 0&&String(e).toLowerCase().includes(S))return!0;try{return JSON.stringify(t).toLowerCase().includes(S)}catch{return!1}},[e,t,i]))return null;if(!d){let S="#e2e8f0",j=String(t);return typeof t=="string"?(S="#34d399",j=`"${t}"`):typeof t=="number"?S="#fbbf24":typeof t=="boolean"?S="#f472b6":t==null&&(S="#94a3b8",j="null"),a.jsxs("div",{className:"sjson-row",style:{paddingLeft:`${n*14}px`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",paddingTop:"2px",paddingBottom:"2px",borderRadius:"4px",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:[a.jsxs("div",{style:{wordBreak:"break-all",lineHeight:1.45},children:[e!==void 0&&a.jsxs("span",{style:{color:"#93c5fd"},children:[typeof e=="number"?`[${e}]`:`"${e}"`,a.jsx("span",{style:{color:"#64748b"},children:": "})]}),a.jsx("span",{style:{color:S},children:j})]}),y&&a.jsx("button",{type:"button",onClick:w=>{w.stopPropagation(),l(y)},title:`复制表达式 ${y}`,style:{flexShrink:0,fontSize:"10px",padding:"1px 6px",borderRadius:"4px",border:"1px solid rgba(56, 189, 248, 0.3)",background:c===y?"rgba(16, 185, 129, 0.2)":"rgba(56, 189, 248, 0.08)",color:c===y?"#34d399":"#38bdf8",cursor:"pointer",opacity:.85,fontFamily:"inherit"},children:c===y?"✓ 已复制":"${} 引用"})]})}const b=p?t.map((S,j)=>[j,S]):Object.entries(t),x=p?"[":"{",v=p?"]":"}",k=p?`${b.length} items`:`${b.length} keys`;return a.jsxs("div",{children:[a.jsxs("div",{onClick:()=>f(!m),style:{paddingLeft:`${n*14}px`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",paddingTop:"2px",paddingBottom:"2px",cursor:"pointer",userSelect:"none",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[a.jsx("span",{style:{fontSize:"9px",color:"#64748b",width:"10px",display:"inline-block"},children:m?"▼":"▶"}),e!==void 0&&a.jsxs("span",{style:{color:"#93c5fd"},children:[typeof e=="number"?`[${e}]`:`"${e}"`,a.jsx("span",{style:{color:"#64748b"},children:": "})]}),a.jsxs("span",{style:{color:"#94a3b8"},children:[x,!m&&a.jsx("span",{style:{fontSize:"10px",color:"#64748b",margin:"0 4px"},children:k}),!m&&v]})]}),y&&r&&a.jsx("button",{type:"button",onClick:S=>{S.stopPropagation(),l(y)},title:`复制对象引用 ${y}`,style:{flexShrink:0,fontSize:"10px",padding:"1px 6px",borderRadius:"4px",border:"1px solid rgba(56, 189, 248, 0.25)",background:c===y?"rgba(16, 185, 129, 0.2)":"rgba(56, 189, 248, 0.06)",color:c===y?"#34d399":"#38bdf8",cursor:"pointer",opacity:.75,fontFamily:"inherit"},children:c===y?"✓ 已复制":"${} 引用"})]}),m&&a.jsxs("div",{children:[b.map(([S,j])=>{const w=typeof S=="number"?`${r}[${S}]`:r?`${r}.${S}`:String(S);return a.jsx(kg,{keyName:S,value:j,path:w,depth:n+1,defaultExpanded:n<1,forceExpandAll:s,searchQuery:i,onCopyExpr:l,copiedPath:c,buildExpr:u},String(S))}),a.jsx("div",{style:{paddingLeft:`${n*14+14}px`,color:"#94a3b8",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:v})]})]})},Sg=({data:e,taskReferenceName:t,expressionScope:r="output",maxHeight:n="420px"})=>{const[o,s]=I.useState(""),[i,l]=I.useState(null),[c,u]=I.useState(null),[d,p]=I.useState(!1),h=y=>y?r==="workflow.input"?`\${workflow.input.${y}}`:t?`\${${t}.${r}.${y}}`:null:null,f=y=>{navigator.clipboard.writeText(y),u(y),setTimeout(()=>u(null),1600)};return e==null||typeof e=="object"&&Object.keys(e).length===0?a.jsx("div",{style:{padding:"20px",textAlign:"center",color:"var(--text-secondary)",fontSize:"12px",background:"rgba(15, 23, 42, 0.35)",borderRadius:"8px",border:"1px solid var(--border-primary)"},children:"暂无数据 (Empty Payload)"}):a.jsxs("div",{style:{borderRadius:"8px",border:"1px solid var(--border-primary)",background:"rgba(15, 23, 42, 0.55)",overflow:"hidden"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",padding:"6px 10px",borderBottom:"1px solid rgba(148, 163, 184, 0.14)",background:"rgba(15, 23, 42, 0.4)"},children:[a.jsx("input",{type:"text",value:o,onChange:y=>s(y.target.value),placeholder:"🔍 检索字段名或值...",style:{flex:1,padding:"4px 8px",borderRadius:"5px",border:"1px solid rgba(148, 163, 184, 0.2)",background:"rgba(2, 6, 23, 0.5)",color:"#f8fafc",fontSize:"11px",outline:"none"}}),a.jsx("button",{type:"button",onClick:()=>l(!0),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid rgba(148, 163, 184, 0.2)",background:"transparent",color:"#cbd5e1",cursor:"pointer"},children:"全部展开"}),a.jsx("button",{type:"button",onClick:()=>l(!1),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid rgba(148, 163, 184, 0.2)",background:"transparent",color:"#cbd5e1",cursor:"pointer"},children:"折叠"}),a.jsx("button",{type:"button",onClick:()=>p(!d),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid rgba(148, 163, 184, 0.2)",background:d?"rgba(56, 189, 248, 0.18)":"transparent",color:d?"#38bdf8":"#cbd5e1",cursor:"pointer"},children:d?"树形视图":"RAW"})]}),a.jsx("div",{style:{padding:"10px 12px",maxHeight:n,overflowY:"auto",overflowX:"auto"},children:d?a.jsx("pre",{style:{margin:0,fontSize:"11px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace",color:"#e2e8f0",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(e,null,2)}):a.jsx(kg,{value:e,path:"",depth:0,defaultExpanded:!0,forceExpandAll:i,searchQuery:o,onCopyExpr:f,copiedPath:c,buildExpr:h})})]})},t0={COMPLETED:"var(--status-completed)",FAILED:"var(--status-failed)",FAILED_WITH_TERMINAL_ERROR:"var(--status-failed-terminal)",IN_PROGRESS:"var(--status-in-progress)",SCHEDULED:"var(--status-scheduled)",TIMED_OUT:"var(--status-timed-out)",CANCELED:"var(--status-canceled)",SKIPPED:"var(--status-skipped)"},Ht=e=>t0[e??""]??"var(--text-secondary)",r0=(e,t)=>{if(!e)return"-";const r=(t??Date.now())-e;return r<1e3?`${r}ms`:`${(r/1e3).toFixed(2)}s`},_g=e=>e?new Date(e).toLocaleTimeString():"-",n0=({executionActions:e})=>{const{selectedTask:t,selectedTaskInstance:r,setSelectedTask:n,setSelectedTaskInstance:o,executionData:s,workflowInstance:i}=ie(we(P=>({selectedTask:P.selectedTask,selectedTaskInstance:P.selectedTaskInstance,setSelectedTask:P.setSelectedTask,setSelectedTaskInstance:P.setSelectedTaskInstance,executionData:P.executionData,workflowInstance:P.workflowInstance}))),[l,c]=I.useState("summary"),u=I.useRef(null);I.useEffect(()=>{u.current?.scrollTo({top:0})},[l,t?.taskReferenceName]),I.useEffect(()=>{c("summary")},[t?.taskReferenceName]);const d=t?.taskReferenceName==="__workflow_global__",p=t?s?.[t.taskReferenceName]:null;if(!t||!p&&!d)return null;const h=p?.attempts??[],f=r??h[h.length-1],m=i?.workflowId??"",y=i?.status,g=p?.status,b=d?y:f?.status??g,x=d?i?.startTime:f?.startTime,v=d?i?.endTime:f?.endTime,k=d?i?.reasonForIncompletion:f?.reasonForIncompletion,S=d?i?.workflowId:f?.taskId,j=d?i?.input:f?.inputData,w=d?i?.output:f?.outputData,N=!d&&e?.onSkipTask&&(g==="SCHEDULED"||g==="IN_PROGRESS")&&(y==="RUNNING"||y==="PAUSED"),L=!d&&e?.onRerunFromTask&&(y==="FAILED"||y==="TERMINATED"||y==="COMPLETED"||y==="TIMED_OUT"),_=N||L,T=e?.allowOperations!==!1,D=()=>{n(null),o(null)},R="var(--glass-border)",A="var(--text-secondary)",E="var(--bg-tertiary)";return a.jsxs("div",{className:"detail-panel-container panel-enter-active",style:{position:"absolute",right:0,top:0,bottom:0,width:450,zIndex:1200,display:"flex",flexDirection:"column",background:"var(--bg-primary)",borderLeft:`1px solid ${R}`,boxShadow:"-10px 0 30px rgba(0,0,0,0.2)",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"20px 24px",borderBottom:`1px solid ${R}`,background:"var(--bg-secondary)",flexShrink:0},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[a.jsx("div",{style:{background:"var(--color-accent)",color:"#fff",padding:"2px 8px",borderRadius:4,fontSize:10,fontWeight:"bold",letterSpacing:"1px",flexShrink:0},children:d?"WORKFLOW":t.type||"TASK"}),b&&a.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:5,padding:"2px 8px",borderRadius:4,fontSize:10,fontWeight:700,background:`${Ht(b)}18`,color:Ht(b),letterSpacing:"0.5px",flexShrink:0},children:["● ",b]}),a.jsx("div",{style:{flex:1}}),a.jsx("button",{onClick:D,style:{background:"none",border:"none",color:A,cursor:"pointer",fontSize:20,lineHeight:1,padding:4},children:"✕"})]}),a.jsx("div",{style:{fontSize:20,fontWeight:700,color:"var(--text-primary)",lineHeight:1.3},children:d?"工作流全局数据":t.name}),a.jsxs("div",{style:{fontSize:12,color:A,marginTop:6,fontFamily:"monospace",opacity:.8},children:["REF: ",t.taskReferenceName]})]}),h.length>1&&a.jsxs("div",{style:{padding:"12px 24px",borderBottom:`1px solid ${R}`,background:"var(--bg-secondary)",flexShrink:0},children:[a.jsxs("div",{style:{fontSize:11,fontWeight:600,color:A,marginBottom:8,textTransform:"uppercase",letterSpacing:"0.5px"},children:["执行记录(",h.length," 次",h.some(P=>P.iteration)?" / 迭代":"尝试",")"]}),a.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:h.map((P,z)=>{const J=f?.taskId===P.taskId;return a.jsx("button",{onClick:()=>o(P),style:{padding:"4px 12px",borderRadius:20,fontSize:12,cursor:"pointer",border:`1px solid ${J?"var(--color-accent)":R}`,background:J?"var(--color-accent)":"var(--bg-tertiary)",color:J?"#fff":"var(--text-primary)",fontFamily:"inherit",transition:"all 0.15s"},children:P.iteration?`迭代 ${P.iteration}`:`尝试 ${z+1}`},P.taskId)})})]}),a.jsx("div",{style:{display:"flex",borderBottom:`1px solid ${R}`,background:"var(--bg-secondary)",flexShrink:0},children:["summary","input","output"].map(P=>{const z={summary:"概览",input:"输入 JSON",output:"输出 JSON"},J=l===P;return a.jsx("button",{onClick:()=>c(P),style:{padding:"10px 20px",background:"none",border:"none",borderBottom:`2px solid ${J?"var(--color-accent)":"transparent"}`,color:J?"var(--color-accent)":A,cursor:"pointer",fontSize:13,fontWeight:J?600:400,fontFamily:"inherit",transition:"all 0.15s"},children:z[P]},P)})}),a.jsxs("div",{ref:u,style:{flex:1,overflowY:"auto",padding:24,background:"var(--bg-primary)"},children:[l==="summary"&&a.jsxs(a.Fragment,{children:[a.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,marginBottom:24},children:[{label:"总耗时",value:r0(x,v)},{label:"开始时间",value:_g(x)},{label:"结束时间",value:_g(v)},{label:d?"Workflow ID":"Task ID",value:a.jsx("span",{style:{fontSize:10,fontFamily:"monospace",opacity:.7,wordBreak:"break-all"},children:S??"-"})}].map(({label:P,value:z})=>a.jsxs("div",{style:{padding:"12px 14px",background:E,borderRadius:10,border:`1px solid ${R}`},children:[a.jsx("div",{style:{fontSize:10,color:A,textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:6,fontWeight:600},children:P}),a.jsx("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:13},children:z})]},P))}),h.length>1&&a.jsxs("div",{style:{marginBottom:20,padding:"10px 14px",background:`${Ht(g)}10`,border:`1px solid ${Ht(g)}30`,borderRadius:8,fontSize:12,color:Ht(g),display:"flex",alignItems:"center",gap:8},children:[a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("path",{d:"M13 2v4h-4"}),a.jsx("path",{d:"M13 6A7 7 0 1 1 9.5 2.5"})]}),"已重试 ",h.length-1," 次,共 ",h.length," 次尝试"]}),!d&&f?.workerId&&a.jsxs("div",{style:{marginBottom:20},children:[a.jsx("div",{style:{fontSize:10,color:A,textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:4,fontWeight:600},children:"Worker"}),a.jsx("div",{style:{fontSize:12,fontFamily:"monospace",color:"var(--text-primary)",opacity:.8},children:f.workerId})]}),k&&a.jsxs("div",{style:{padding:14,background:"rgba(239,68,68,0.08)",borderLeft:"3px solid var(--status-failed)",borderRadius:"0 8px 8px 0",fontSize:12,color:"var(--status-failed)",lineHeight:1.6},children:[a.jsx("strong",{children:"异常信息"}),a.jsx("div",{style:{marginTop:6,opacity:.9},children:k})]}),_&&a.jsxs("div",{style:{marginTop:24,paddingTop:20,borderTop:`1px solid ${R}`},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[a.jsx("div",{style:{fontSize:11,fontWeight:600,color:A,textTransform:"uppercase",letterSpacing:"0.5px"},children:"任务操作"}),!T&&a.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 7px",borderRadius:4,background:"rgba(239,68,68,0.08)",border:"1px solid rgba(239,68,68,0.25)",color:"var(--status-failed)",fontSize:10,fontWeight:600},children:[a.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[a.jsx("circle",{cx:"8",cy:"8",r:"6"}),a.jsx("path",{d:"M8 5v3M8 11v.5"})]}),"操作权限受限"]})]}),a.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[L&&a.jsxs("button",{disabled:!T,onClick:()=>T&&e.onRerunFromTask(m,t.taskReferenceName,f?.taskId),title:T?`从任务 ${t.taskReferenceName} 处重新运行工作流`:"操作权限受限",style:T?mt:wg,onMouseEnter:P=>!T||Object.assign(P.currentTarget.style,a0),onMouseLeave:P=>!T||Object.assign(P.currentTarget.style,mt),children:[a.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("path",{d:"M3 14v-4h4"}),a.jsx("path",{d:"M3 10A7 7 0 1 1 6.5 13.5"})]}),"从此处重新运行"]}),N&&a.jsxs("button",{disabled:!T,onClick:()=>T&&e.onSkipTask(m,t.taskReferenceName,f?.taskId),title:T?`跳过任务 ${t.taskReferenceName}`:"操作权限受限",style:T?mt:wg,onMouseEnter:P=>!T||Object.assign(P.currentTarget.style,o0),onMouseLeave:P=>!T||Object.assign(P.currentTarget.style,mt),children:[a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:a.jsx("path",{d:"M4 4l8 8M12 4l-8 8"})}),"跳过此任务"]})]})]})]}),l==="input"&&a.jsx(Sg,{data:j,taskReferenceName:d?void 0:t.taskReferenceName,expressionScope:d?"workflow.input":"input",maxHeight:"calc(100vh - 280px)"}),l==="output"&&a.jsx(Sg,{data:w,taskReferenceName:d?void 0:t.taskReferenceName,expressionScope:"output",maxHeight:"calc(100vh - 280px)"})]})]})},mt={display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",borderRadius:8,fontSize:12,fontWeight:500,cursor:"pointer",border:"1px solid var(--border-primary)",background:"var(--bg-secondary)",color:"var(--text-primary)",fontFamily:"inherit",transition:"all 0.15s"},a0={...mt,borderColor:"var(--color-accent)",color:"var(--color-accent)",background:"var(--bg-primary)"},o0={...mt,borderColor:"var(--status-failed)",color:"var(--status-failed)",background:"rgba(239,68,68,0.08)"},wg={...mt,opacity:.45,cursor:"not-allowed",border:"1px solid var(--border-primary)",background:"var(--bg-secondary)",color:"var(--text-secondary)"},s0={add:"新增",mod:"修改",del:"删除",replace:"替换"},i0={add:"+",mod:"~",del:"−"};function l0({diff:e,applied:t,onApply:r,onUndo:n}){const o=e.kind==="replace"?"add":e.kind;return a.jsxs("div",{className:"diff-card",children:[a.jsxs("div",{className:"diff-head",children:[a.jsx("span",{className:`diff-badge ${o}`,children:s0[e.kind]??e.kind}),a.jsx("span",{className:"diff-summary",children:e.summary})]}),e.rows&&e.rows.length>0&&a.jsx("div",{className:"diff-list",children:e.rows.map((s,i)=>a.jsxs("div",{className:`diff-row ${s.kind}`,children:[a.jsx("div",{className:"diff-marker",children:i0[s.kind]??"·"}),a.jsx("div",{className:"diff-desc",children:s.desc})]},i))}),a.jsx("div",{className:"diff-actions",children:t?a.jsxs(a.Fragment,{children:[a.jsxs("button",{className:"diff-btn applied",disabled:!0,children:[a.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:a.jsx("path",{d:"M3 8l3.5 3.5L13 5",strokeLinecap:"round",strokeLinejoin:"round"})}),"已应用"]}),a.jsxs("button",{className:"diff-btn undo",onClick:n,children:[a.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("path",{d:"M3.5 8a4.5 4.5 0 1 1 1.4 3.3",strokeLinecap:"round"}),a.jsx("path",{d:"M3 4.5L4.5 8L7 6.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),"撤销"]})]}):a.jsxs("button",{className:"diff-btn apply",onClick:r,children:[a.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:a.jsx("path",{d:"M3 8l3.5 3.5L13 5",strokeLinecap:"round",strokeLinejoin:"round"})}),"应用更改"]})})]})}function Tg(e,t){const r=JSON.parse(JSON.stringify(e));if(t.kind==="replace"&&t.payload)return{next:JSON.parse(JSON.stringify(t.payload)),inverse:{kind:"replace",summary:"撤销替换",rows:[],payload:e}};if(t.kind==="add"&&t.payload)return{next:JSON.parse(JSON.stringify(t.payload)),inverse:{kind:"replace",summary:"撤销生成",rows:[],payload:e}};if(!t.patch)return{next:r,inverse:{kind:t.kind,summary:"(无变更)",rows:[]}};const n=[],o=[];for(const s of t.patch)if(s.op==="patchTask"){const i=r.tasks.find(c=>c.taskReferenceName===s.ref);if(!i)continue;const l={};for(const c of Object.keys(s.set))l[c]=i[c];Object.assign(i,s.set),n.push({op:"patchTask",ref:s.ref,set:l}),o.push({kind:"mod",desc:`还原 ${s.ref} 属性`})}else if(s.op==="addEdge")r.edges=r.edges??[],r.edges.push({from:s.from,to:s.to,label:s.label}),n.push({op:"removeEdge",from:s.from,to:s.to}),o.push({kind:"del",desc:`移除边 ${s.from} → ${s.to}`});else if(s.op==="removeEdge")r.edges=(r.edges??[]).filter(i=>!(i.from===s.from&&i.to===s.to)),n.push({op:"addEdge",from:s.from,to:s.to}),o.push({kind:"add",desc:`恢复边 ${s.from} → ${s.to}`});else if(s.op==="addTask")r.tasks.push(s.task),r.edges=r.edges??[],s.removeEdges&&s.removeEdges.forEach(i=>{r.edges=r.edges.filter(l=>!(l.from===i.from&&l.to===i.to))}),s.extraEdges&&s.extraEdges.forEach(i=>r.edges.push(i)),n.push({op:"removeTask",ref:s.task.taskReferenceName}),o.push({kind:"del",desc:`移除 ${s.task.taskReferenceName}`});else if(s.op==="removeTask"){const i=r.tasks.findIndex(u=>u.taskReferenceName===s.ref);if(i<0)continue;const[l]=r.tasks.splice(i,1),c=(r.edges??[]).filter(u=>u.from===s.ref||u.to===s.ref);r.edges=(r.edges??[]).filter(u=>u.from!==s.ref&&u.to!==s.ref),n.push({op:"addTask",task:l,extraEdges:c}),o.push({kind:"add",desc:`恢复 ${s.ref}`})}else if(s.op==="insertAfter"){r.tasks.push(s.task),r.edges=r.edges??[];const i=r.edges.findIndex(l=>l.from===s.after&&l.to===s.edgeTo);i>=0&&r.edges.splice(i,1),r.edges.push({from:s.after,to:s.task.taskReferenceName}),r.edges.push({from:s.task.taskReferenceName,to:s.edgeTo}),n.push({op:"removeTask",ref:s.task.taskReferenceName}),o.push({kind:"del",desc:`移除 ${s.task.taskReferenceName}(恢复直连边)`})}else if(s.op==="insertBefore"){r.tasks.push(s.task),r.edges=r.edges??[];const i=r.edges.filter(l=>l.to===s.before);r.edges=r.edges.filter(l=>l.to!==s.before),i.forEach(l=>r.edges.push({from:l.from,to:s.task.taskReferenceName,label:l.label})),r.edges.push({from:s.task.taskReferenceName,to:s.before}),n.push({op:"removeTask",ref:s.task.taskReferenceName}),o.push({kind:"del",desc:`移除 ${s.task.taskReferenceName}(恢复原有入边)`})}return{next:r,inverse:{kind:t.kind,summary:`撤销:${t.summary}`,rows:o,patch:n.reverse()}}}function c0(e){const t=e.match(/```diff-json\n([\s\S]*?)\n```/);if(!t)return null;try{const r=JSON.parse(t[1]);return!r.kind||!r.summary?null:r}catch{return null}}const jg={id:"1",role:"ai",content:"你好!我是您的流程助手。我可以帮你生成工作流框架、优化逻辑或提供参数配置建议。你想实现什么样的流程?"},Ig=e=>e.split(/(```[\s\S]*?```)/).map((r,n)=>{if(r.startsWith("```")&&r.endsWith("```")){const o=r.slice(3,-3),s=o.indexOf(`
129
- `),i=s>=0?o.slice(s+1):o;return a.jsx("pre",{children:a.jsx("code",{children:i})},n)}return a.jsx("span",{children:d0(r)},n)}),d0=e=>{const t=[],r=/(\*\*[^*]+\*\*|`[^`]+`|\n)/g;let n=0,o;for(;(o=r.exec(e))!==null;){o.index>n&&t.push(e.slice(n,o.index));const s=o[0];s.startsWith("**")&&s.endsWith("**")?t.push(a.jsx("strong",{children:s.slice(2,-2)},o.index)):s.startsWith("`")&&s.endsWith("`")?t.push(a.jsx("code",{children:s.slice(1,-1)},o.index)):s===`
130
- `&&t.push(a.jsx("br",{},o.index)),n=o.index+s.length}return n<e.length&&t.push(e.slice(n)),t},u0=({aiConfig:e})=>{const{workflowDef:t,setWorkflow:r,mode:n}=ie(we(A=>({workflowDef:A.workflowDef,setWorkflow:A.setWorkflow,mode:A.mode}))),[o,s]=I.useState(!1),[i,l]=I.useState(""),[c,u]=I.useState(!1),[d,p]=I.useState([jg]),[h,f]=I.useState(""),[m,y]=I.useState(null),g=I.useRef(null),b=I.useRef(null),x=I.useRef(null),v=I.useCallback(A=>{if(!A.diff||A.applied||!t)return;const{next:E,inverse:P}=Tg(t,A.diff);r(E),p(z=>z.map(J=>J.id===A.id?{...J,applied:!0,inverse:P}:J))},[t,r]),k=I.useCallback(A=>{if(!A.inverse||!A.applied||!t)return;const{next:E}=Tg(t,A.inverse);r(E),p(P=>P.map(z=>z.id===A.id?{...z,applied:!1,inverse:void 0}:z))},[t,r]),S=()=>{const A=b.current;A&&(A.style.height="auto",A.style.height=Math.min(A.scrollHeight,120)+"px")},j=()=>{const A=b.current;A&&(A.style.height="auto")};I.useEffect(()=>()=>{x.current?.abort()},[]),I.useEffect(()=>{const A=()=>s(!0);return window.addEventListener("open-ai-chat",A),()=>window.removeEventListener("open-ai-chat",A)},[]);const w=()=>{g.current?.scrollIntoView({behavior:"smooth"})};I.useEffect(()=>{o&&w()},[d,o,h]);const N=I.useCallback(A=>{const E=[{role:"system",content:Wk}];for(const z of d)z.role==="user"&&z.content?E.push({role:"user",content:z.content}):z.role==="ai"&&z.content&&!z.thinking&&E.push({role:"assistant",content:z.content});const P=Kk(A,t);return E.push({role:"user",content:P}),E},[d,t]),L=async A=>{const E=i.trim();if(!E||c)return;x.current?.abort();const P=new AbortController;x.current=P;const z={id:Date.now().toString(),role:"user",content:E};p(J=>[...J,z]),l(""),j(),u(!0),f("");try{const J=e?.apiKey||localStorage.getItem("AI_API_KEY")||"",B=e?.baseUrl||localStorage.getItem("AI_BASE_URL")||"",$=e?.model||localStorage.getItem("AI_MODEL")||"";if(!J){setTimeout(()=>{if(P.signal.aborted)return;const U={name:"demo_approval_workflow",description:"演示审批流程",tasks:[{name:"submit_request",taskReferenceName:"submit_request",type:"SIMPLE",inputParameters:{}},{name:"human_approval",taskReferenceName:"human_approval",type:"HUMAN",inputParameters:{}},{name:"process_result",taskReferenceName:"process_result",type:"SIMPLE",inputParameters:{}}]},ee={id:(Date.now()+1).toString(),role:"ai",content:"**演示模式**:未检测到 API Key,以下是一个示例审批流程供体验。请在标题栏 🤖 按钮中配置真实 API Key 以启用 AI 功能。",diff:{kind:"replace",summary:"生成三步审批流程(演示)",rows:[{kind:"add",desc:"submit_request — 提交申请任务"},{kind:"add",desc:"human_approval — 人工审批任务"},{kind:"add",desc:"process_result — 处理审批结果"}],payload:U}};p(ce=>[...ce,ee]),u(!1)},800);return}const C={apiKey:J};B&&(C.baseUrl=B),$&&(C.model=$);const G=N(E),Q=await $k(G,C,U=>{f(ee=>ee+U)},()=>{},P.signal);let F=c0(Q);if(!F){const U=Q.match(/```json\n([\s\S]*?)\n```/);if(U)try{const ee=JSON.parse(U[1]);F={kind:"replace",summary:"应用 AI 生成的工作流",rows:[{kind:"add",desc:"全量替换为 AI 生成的工作流定义"}],payload:ee}}catch{}}const H={id:(Date.now()+1).toString(),role:"ai",content:Q,diff:F??void 0,applied:!1};p(U=>[...U,H]),f("")}catch(J){if(J.name==="AbortError")f(B=>{if(B){const $={id:(Date.now()+1).toString(),role:"ai",content:B};p(C=>[...C,$])}return""});else{const B={id:Date.now().toString(),role:"ai",content:`抱歉,目前无法连接到 AI 服务: ${J.message}`};p($=>[...$,B]),f("")}}finally{u(!1)}},_=()=>{x.current?.abort()},T=()=>{x.current?.abort(),p([jg]),f(""),u(!1)},D=A=>{navigator.clipboard.writeText(A.content??""),y(A.id),setTimeout(()=>y(null),1500)},R=A=>{A.nativeEvent.isComposing||A.keyCode===229||A.key==="Enter"&&!A.shiftKey&&(A.preventDefault(),L())};return n!=="edit"?null:o?a.jsxs("div",{className:"ai-chat-panel",children:[a.jsxs("div",{className:"ai-header",children:[a.jsxs("div",{className:"ai-title",children:[a.jsx("span",{className:"ai-sparkles",children:"✨"}),"AI 助手"]}),a.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[a.jsx("button",{className:"ai-close",onClick:T,title:"清空对话",children:"🗑"}),a.jsx("button",{className:"ai-close",onClick:()=>s(!1),children:"×"})]})]}),a.jsxs("div",{className:"ai-messages",children:[d.map(A=>a.jsxs("div",{className:`message ${A.role}`,children:[a.jsx("div",{className:"message-content",children:A.thinking?a.jsxs("div",{className:"thinking-skeleton",children:[a.jsx("div",{className:"skeleton-line",style:{width:"80%"}}),a.jsx("div",{className:"skeleton-line",style:{width:"60%"}})]}):A.role==="ai"?Ig(A.content??""):A.content}),A.diff&&!A.thinking&&a.jsx(l0,{diff:A.diff,applied:A.applied??!1,onApply:()=>v(A),onUndo:()=>k(A)}),A.role==="ai"&&A.content&&a.jsx("button",{className:"copy-btn",onClick:()=>D(A),title:"复制",children:m===A.id?"✓":"📋"})]},A.id)),c&&h&&a.jsxs("div",{className:"message ai",style:{opacity:.9},children:[a.jsx("div",{className:"message-content",children:Ig(h)}),a.jsx("span",{className:"streaming-cursor",children:"▊"})]}),c&&!h&&a.jsxs("div",{className:"message ai thinking-skeleton",children:[a.jsx("div",{className:"skeleton-line",style:{width:"80%"}}),a.jsx("div",{className:"skeleton-line",style:{width:"60%"}}),a.jsx("div",{className:"skeleton-line",style:{width:"70%"}})]}),a.jsx("div",{ref:g})]}),a.jsx("div",{className:"ai-input-area",children:a.jsxs("div",{className:"ai-input-container",children:[a.jsx("textarea",{ref:b,className:"ai-input",placeholder:c?"AI 正在响应...":"描述您的需求…(Shift+Enter 换行)",value:i,onChange:A=>l(A.target.value),onInput:S,onKeyDown:R,disabled:c,rows:2}),c?a.jsx("button",{className:"ai-send stop",onClick:_,title:"停止生成",children:"⏹"}):a.jsx("button",{className:"ai-send",onClick:()=>L(),title:"发送",children:"🚀"})]})})]}):a.jsx("div",{className:"ai-chat-panel collapsed",onClick:()=>s(!0),children:a.jsx("div",{className:"ai-header",style:{borderBottom:"none"},children:a.jsxs("div",{className:"ai-title",children:[a.jsx("span",{className:"ai-sparkles",children:"✨"}),"AI 助手"]})})})},p0=new Set(["COMPLETED","FAILED","TIMED_OUT","TERMINATED"]),f0=({onTriggerExecution:e,onPollExecution:t,executionPollInterval:r=3e3})=>{const{workflowDef:n,showRunPanel:o,setShowRunPanel:s,setRunState:i,importExecutionJSON:l,setMode:c}=ie(we(T=>({workflowDef:T.workflowDef,showRunPanel:T.showRunPanel,setShowRunPanel:T.setShowRunPanel,setRunState:T.setRunState,importExecutionJSON:T.importExecutionJSON,setMode:T.setMode}))),[u,d]=I.useState("form"),[p,h]=I.useState({}),[f,m]=I.useState("{}"),[y,g]=I.useState(""),[b,x]=I.useState(!1),[v,k]=I.useState(""),S=at(n?.inputParameters);I.useEffect(()=>{o&&(h({}),m("{}"),g(""),k(""),x(!1))},[o]);const j=I.useCallback(()=>{try{const T={};S.forEach(D=>{const R=p[D.name];if(R!==void 0&&R!=="")if(D.type==="number")T[D.name]=Number(R);else if(D.type==="boolean")T[D.name]=R==="true";else if(D.type==="object"||D.type==="array")try{T[D.name]=JSON.parse(R)}catch{T[D.name]=R}else T[D.name]=R;else D.defaultValue!==void 0&&(T[D.name]=D.defaultValue)}),m(JSON.stringify(T,null,2))}catch{}d("json")},[p,S]),w=I.useCallback(()=>{try{const T=JSON.parse(f),D={};S.forEach(R=>{const A=T[R.name];A!==void 0&&(D[R.name]=typeof A=="object"?JSON.stringify(A,null,2):String(A))}),h(D),g("")}catch{g("JSON 格式有误,无法切换为表单模式")}d("form")},[f,S]),N=I.useCallback(()=>{if(u==="json")try{return JSON.parse(f)}catch{return g("JSON 格式有误,请检查后重试"),null}const T={};return S.forEach(D=>{const R=p[D.name]??(D.defaultValue!==void 0?String(D.defaultValue):"");if(!(R===""&&!D.required))if(D.type==="number")T[D.name]=Number(R);else if(D.type==="boolean")T[D.name]=R==="true";else if(D.type==="object"||D.type==="array")try{T[D.name]=JSON.parse(R)}catch{T[D.name]=R}else T[D.name]=R}),T},[u,f,p,S]),L=I.useCallback(async()=>{if(!e||!n)return;const T=N();if(T===null)return;const D=S.filter(R=>R.required&&(T[R.name]===void 0||T[R.name]===""));if(D.length>0){k(`必填参数未填写:${D.map(R=>R.name).join(", ")}`);return}x(!0),k(""),i("triggering");try{const{workflowId:R}=await e(n.name,n.version??1,T);if(i("polling",R),s(!1),c("run"),!t)return;let A=r;const E=15e3;let P;const z=async()=>{try{const J=await t(R);if(J&&(l(J),p0.has(J.status))){i("done",R);return}}catch{}A=Math.min(A*1.5,E),P=setTimeout(z,A)};P=setTimeout(z,A),ie.getState().__pollTimer=P}catch(R){const A=R?.message||"执行触发失败,请检查配置后重试";i("error",null,A),k(A),x(!1)}},[e,t,n,N,S,i,s,l,c,r]);if(!o||!n)return null;const _=S.length>0;return a.jsx("div",{className:"wrp-overlay",onClick:()=>s(!1),children:a.jsxs("div",{className:"wrp-panel",onClick:T=>T.stopPropagation(),children:[a.jsxs("div",{className:"wrp-header",children:[a.jsxs("div",{className:"wrp-header-title",children:[a.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",style:{color:"var(--status-completed)"},children:a.jsx("path",{d:"M4 3l9 5-9 5z"})}),"执行验证"]}),a.jsxs("div",{className:"wrp-workflow-name",children:[n.name," ",a.jsxs("span",{className:"wrp-version",children:["v",n.version??1]})]}),a.jsx("button",{className:"wrp-close",onClick:()=>s(!1),children:"✕"})]}),a.jsxs("div",{className:"wrp-content",children:[a.jsxs("div",{className:"wrp-section-label",children:["工作流输入参数",_&&a.jsxs("div",{className:"wrp-mode-toggle",children:[a.jsx("button",{className:u==="form"?"active":"",onClick:u==="json"?w:void 0,children:"表单模式"}),a.jsx("button",{className:u==="json"?"active":"",onClick:u==="form"?j:void 0,children:"JSON 编辑器"})]})]}),!_&&u==="form"&&a.jsxs("p",{className:"wrp-hint",children:["该工作流未声明输入参数。你可以在 ",a.jsx("strong",{children:"工作流设置 → 参数配置"})," 中添加,也可以直接在 JSON 编辑器中手动填写。"]}),u==="form"?a.jsxs("div",{className:"wrp-form",children:[S.map(T=>a.jsxs("div",{className:"wrp-field",children:[a.jsxs("label",{className:"wrp-field-label",children:[T.name,T.required&&a.jsx("span",{className:"wrp-required",children:"*"}),T.type&&a.jsx("span",{className:"wrp-type",children:T.type})]}),T.description&&a.jsx("p",{className:"wrp-field-desc",children:T.description}),T.type==="object"||T.type==="array"?a.jsx("textarea",{className:"wrp-input",rows:3,placeholder:T.example?JSON.stringify(T.example,null,2):"{}",value:p[T.name]??"",onChange:D=>h(R=>({...R,[T.name]:D.target.value}))}):T.type==="boolean"?a.jsxs("select",{className:"wrp-input",value:p[T.name]??(T.defaultValue!==void 0?String(T.defaultValue):""),onChange:D=>h(R=>({...R,[T.name]:D.target.value})),children:[a.jsx("option",{value:"",children:"请选择"}),a.jsx("option",{value:"true",children:"true"}),a.jsx("option",{value:"false",children:"false"})]}):a.jsx("input",{className:"wrp-input",type:T.type==="number"?"number":"text",placeholder:T.example!==void 0?String(T.example):T.defaultValue!==void 0?String(T.defaultValue):"",value:p[T.name]??"",onChange:D=>h(R=>({...R,[T.name]:D.target.value}))})]},T.name)),!_&&a.jsx("button",{className:"wrp-switch-json",onClick:j,children:"切换为 JSON 编辑器手动填写"})]}):a.jsxs("div",{className:"wrp-json-editor",children:[a.jsx("textarea",{className:"wrp-input wrp-json",rows:12,value:f,onChange:T=>{m(T.target.value),g("")},spellCheck:!1,placeholder:'{\\n "key": "value"\\n}'}),y&&a.jsx("p",{className:"wrp-error",children:y})]}),v&&a.jsx("p",{className:"wrp-error wrp-submit-error",children:v})]}),a.jsxs("div",{className:"wrp-footer",children:[a.jsx("button",{className:"wrp-btn wrp-btn-cancel",onClick:()=>s(!1),children:"取消"}),e?a.jsx("button",{className:"wrp-btn wrp-btn-execute",onClick:L,disabled:b,children:b?a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"wrp-spinner"}),"执行中..."]}):a.jsxs(a.Fragment,{children:[a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("path",{d:"M4 3l9 5-9 5z"})}),"发起执行"]})}):a.jsx("span",{className:"wrp-hint-inline",children:"未配置 onTriggerExecution 回调"})]})]})})},h0=[{pattern:/NullPointerException|null.*inputData|inputData.*null/i,category:"parameter",title:"参数引用为空",explanation:"某个 inputParameters 字段引用的上游任务输出为 null。请检查 JSONPath 表达式,确认前序任务确实返回了对应字段。",suggestEditParam:"inputParameters"},{pattern:/PathNotFoundException|No results for path|path not found/i,category:"parameter",title:"JSONPath 路径不存在",explanation:"参数中的 JSONPath 表达式(如 ${task.output.field})在实际执行数据中找不到对应路径。请核查前序任务的实际输出结构。",suggestEditParam:"inputParameters"},{pattern:/ClassCastException|cannot cast|type mismatch/i,category:"parameter",title:"参数类型不匹配",explanation:"输入参数的数据类型与任务期望不符(如将字符串传给了数字类型参数)。请检查参数值的类型。",suggestEditParam:"inputParameters"},{pattern:/Connection refused|connect.*timeout|SocketException/i,category:"network",title:"网络连接失败",explanation:"无法连接到目标服务器。请检查 HTTP 任务的 uri 是否正确,以及目标服务是否可访问。",suggestEditParam:"uri"},{pattern:/HTTP.*4\d\d|status.*4\d\d|4\d\d.*status/i,category:"network",title:"HTTP 客户端错误",explanation:"HTTP 请求返回 4xx 错误,通常由请求参数、认证或权限问题引起。请检查 uri、headers、body 配置。",suggestEditParam:"inputParameters"},{pattern:/HTTP.*5\d\d|status.*5\d\d|5\d\d.*status/i,category:"network",title:"HTTP 服务端错误",explanation:"目标服务返回 5xx 错误,服务端发生异常。可尝试重试,或检查传入的请求体是否符合服务端期望。",suggestEditParam:"inputParameters"},{pattern:/Unauthorized|401|authentication|auth.*failed/i,category:"auth",title:"认证失败",explanation:"请求被拒绝,认证信息无效或缺失。请检查 headers 中的 Authorization 或 token 参数配置。",suggestEditParam:"inputParameters"},{pattern:/timeout|timed.?out|TIMED_OUT/i,category:"timeout",title:"任务超时",explanation:"任务执行时间超过配置的超时阈值。可考虑增大 timeoutSeconds,或优化被调用服务的响应速度。",suggestEditParam:"timeoutSeconds"},{pattern:/loopCondition|loop.*condition|condition.*false/i,category:"logic",title:"循环条件配置问题",explanation:"DO_WHILE 的 loopCondition 表达式可能无法正常求值。请检查条件表达式引用的变量是否正确。",suggestEditParam:"loopCondition"},{pattern:/expression.*error|script.*error|evaluator.*failed/i,category:"logic",title:"脚本表达式错误",explanation:"INLINE/LAMBDA 任务的脚本表达式执行时出错。请检查 expression 或 scriptExpression 的语法和逻辑。",suggestEditParam:"inputParameters"}];function m0(e,t){const r=t[e];if(!r)return[];const n=r.reasonForIncompletion||"";if(!n)return[];const o=[];for(const s of h0)s.pattern.test(n)&&o.push({category:s.category,title:s.title,explanation:s.explanation,suggestEditParam:s.suggestEditParam});return o.length===0&&n.length>0&&o.push({category:"logic",title:"执行异常",explanation:`任务执行失败,原因:${n.slice(0,200)}${n.length>200?"...":""}`}),o}function g0(e,t){const r=Object.values(e).map(f=>{const m=f.startTime&&f.endTime?f.endTime-f.startTime:void 0,y=Math.max(0,(f.attempts?.length??1)-1);return{taskRef:f.taskReferenceName,status:f.status,startTime:f.startTime,endTime:f.endTime,durationMs:m,retryCount:y,reasonForIncompletion:f.reasonForIncompletion,diagnostics:m0(f.taskReferenceName,e)}}).sort((f,m)=>(f.startTime??0)-(m.startTime??0)),n=["FAILED","FAILED_WITH_TERMINAL_ERROR","TIMED_OUT"],o=r.filter(f=>f.status==="COMPLETED"||f.status==="COMPLETED_WITH_ERRORS").length,s=r.filter(f=>n.includes(f.status)).length,i=r.filter(f=>f.status==="SKIPPED").length,l=r.flatMap(f=>[f.startTime,f.endTime]).filter(f=>!!f),c=l.length?Math.min(...l):0,d=(l.length?Math.max(...l):0)-c,p=t?.status,h=p==="FAILED"||p==="TIMED_OUT"||p==="TERMINATED"||s>0;return{totalTasks:r.length,completedTasks:o,failedTasks:s,skippedTasks:i,totalDurationMs:d,steps:r,hasFailed:h}}function Cg(e){return e===void 0||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.round(e%6e4/1e3)}s`}function y0(e){return{parameter:"⚙️",timeout:"⏱️",auth:"🔐",network:"🌐",logic:"🔧"}[e]??"⚠️"}function x0(e){return{parameter:"#f59e0b",timeout:"#8b5cf6",auth:"#ef4444",network:"#3b82f6",logic:"#10b981"}[e]??"#6b7280"}const it={CREDENTIAL_KEY:/(token|secret|password|passwd|authorization|apikey|api_key|webhook|access_key|private_key|auth)/i,PRIVATE_IP:/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/,PHONE:/\b1[3-9]\d{9}\b/,EMAIL:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,CLOUD_RESOURCE_ID:/\b(i|d|s|vpc|vsw|sg|disk|snap)-[a-z0-9]{8,24}\b/i};function Ir(e,t,r,n=[]){if(!e||typeof e!="object")return n;for(const[o,s]of Object.entries(e)){if(o==="_actionId"||o==="actionName")continue;const i=`${r}.${o}`;if(s!=null)if(typeof s=="string"){if(it.CREDENTIAL_KEY.test(o)&&s.length>5){n.push({id:`finding_${n.length+1}`,kind:"credential",path:i,taskRef:t,keyName:o,rawValue:s,maskedValue:"",suggestedVarName:`${o}_凭证密钥`,action:"variable"});continue}if(it.PRIVATE_IP.test(s)){n.push({id:`finding_${n.length+1}`,kind:"network",path:i,taskRef:t,keyName:o,rawValue:s,maskedValue:s.replace(it.PRIVATE_IP,"172.16.0.42"),suggestedVarName:`${o}_内网IP`,action:"mask"});continue}if(it.PHONE.test(s)){n.push({id:`finding_${n.length+1}`,kind:"pii",path:i,taskRef:t,keyName:o,rawValue:s,maskedValue:s.replace(it.PHONE,"13800138000"),suggestedVarName:"通知联系手机",action:"mask"});continue}if(it.EMAIL.test(s)){n.push({id:`finding_${n.length+1}`,kind:"pii",path:i,taskRef:t,keyName:o,rawValue:s,maskedValue:s.replace(it.EMAIL,"ops-notify@example.com"),suggestedVarName:"接收人邮箱",action:"mask"});continue}if(it.CLOUD_RESOURCE_ID.test(s)&&!s.includes("${")){n.push({id:`finding_${n.length+1}`,kind:"resourceId",path:i,taskRef:t,keyName:o,rawValue:s,maskedValue:"i-bp18a9z3j42m09a",suggestedVarName:`${o}_云资源ID`,action:"variable"});continue}}else typeof s=="object"&&Ir(s,t,i,n)}return n}function Ng(e){const t=[];return(e.tasks||[]).forEach((r,n)=>{const o=`tasks[${n}].inputParameters`;r.inputParameters&&Ir(r.inputParameters,r.taskReferenceName,o,t),r.httpRequest&&Ir(r.httpRequest,r.taskReferenceName,`tasks[${n}].httpRequest`,t)}),t}const Rg=/(debug|fallback|compensate|retry|temporary|temp|log_dump|tracer)/i;function Eg(e,t){const r=[],n=e.tasks||[];for(const o of n){if(Rg.test(o.name)||Rg.test(o.taskReferenceName)){r.push({taskReferenceName:o.taskReferenceName,taskName:o.name,taskType:o.type,reason:"检测到任务名称含调试/单次补偿/临时特征,建议从公共通用模板中剔除。",selected:!0});continue}if(t){const s=t.tasks.find(i=>i.referenceTaskName===o.taskReferenceName);s&&s.status==="SKIPPED"&&r.push({taskReferenceName:o.taskReferenceName,taskName:o.name,taskType:o.type,reason:"该任务在生产历史执行中被判定跳过 (SKIPPED),通常属于特殊条件下的低频补偿分支。",selected:!1})}}return r}function Pg(e,t){const r=structuredClone(e);return r.tasks=(r.tasks||[]).filter(n=>!t.has(n.taskReferenceName)),r}function Cr(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(Cr);const t={};for(const[r,n]of Object.entries(e))typeof n=="string"?/(token|secret|password|authorization|apikey)/i.test(r)&&n.length>5?t[r]="":/\b1[3-9]\d{9}\b/.test(n)?t[r]=n.replace(/\b1[3-9]\d{9}\b/,"13800138000"):/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/.test(n)?t[r]=n.replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,"ops-notify@example.com"):/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/.test(n)?t[r]=n.replace(/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/,"172.16.0.42"):t[r]=n:typeof n=="object"&&n!==null?t[r]=Cr(n):t[r]=n;return t}function Og(e){const{instance:t,title:r,category:n,valueProposition:o,author:s}=e,i=t.workflowDefinition?structuredClone(t.workflowDefinition):{name:t.workflowName||"extracted_workflow",tasks:t.tasks.map(k=>k.workflowTask||{name:k.taskDefName||k.referenceTaskName,taskReferenceName:k.referenceTaskName,type:k.taskType||"SIMPLE",inputParameters:k.inputData})},l=Ng(i),c=Eg(i,t),u=new Set(c.filter(k=>k.selected).map(k=>k.taskReferenceName)),d=Pg(i,u),p=[],h=structuredClone(d);for(const k of l)if(k.action==="variable"){const S=`var_${k.keyName}_${Date.now().toString(36).slice(-3)}`;p.push({key:S,label:k.suggestedVarName||k.keyName,type:typeof k.rawValue=="number"?"number":"text",defaultValue:k.maskedValue||k.rawValue,required:!0,bindings:[k.path]})}const f={};for(const k of t.tasks)k.outputData&&!u.has(k.referenceTaskName)&&(f[k.referenceTaskName]=Cr(k.outputData));const m={name:"生产真实运行数据脱敏样本",description:`基于实例 ${t.workflowId} 真实执行产物自动生成的高保真无害化数据集`,workflowInput:Cr(t.input||{}),taskOutputs:f},y=`tpl_extracted_${Date.now().toString(36)}`,g=r||`${i.name||"业务流"} (实战萃取模板)`,b=n||"ops",x=o||`源于真实执行实例 ${t.workflowId},已完成自动化脱敏与参数提取。`;return{template:{id:y,version:"1.0.0",title:g,category:b,icon:"💎",valueProposition:x,description:i.description||"由管理员从高频成功的生产运行记录中提炼而成的标准化黄金模板。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:25,typicalRunsPerWeek:10,popularityCount:1},difficulty:"intermediate",variables:p,definition:h,mockDataset:{scenarios:[m]},provenance:{source:"extracted",author:s||"Platform Admin",publishedAt:new Date().toISOString(),extractedFromWorkflowId:t.workflowId}},findings:l,prunedTasks:c,report:{extractedAt:new Date().toISOString(),totalTasksScanned:i.tasks?.length??0,sensitiveItemsCount:l.length,credentialsRedactedCount:l.filter(k=>k.kind==="credential").length,variablesCreatedCount:p.length}}}const Dg=[{id:"tpl_ecs_auto_provision",version:"1.0.0",title:"云主机自动化交付与环境配置",category:"compute",icon:"🚀",valueProposition:"一键完成主机创建、运行时环境自动化部署、基线快照与交付群通知,单次节省 35 分钟手工操作。",description:"面向新业务系统上线场景,自动根据指定规格在云平台创建云主机,通过远程免密脚本自动安装 Docker 与运行时依赖,并在验证就绪后自动归档基线快照向运维协同群发送交付卡片。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:35,typicalRunsPerWeek:12,popularityCount:1420},difficulty:"starter",variables:[{key:"instanceName",label:"新主机名称",type:"text",defaultValue:"app-service-prod",required:!0,placeholder:"例如: app-service-prod",bindings:["tasks[0].inputParameters.instanceName"]},{key:"regionId",label:"目标地域",type:"select",defaultValue:"cn-hangzhou",required:!0,options:[{label:"华东 1 (杭州)",value:"cn-hangzhou"},{label:"华北 2 (北京)",value:"cn-beijing"},{label:"华南 1 (深圳)",value:"cn-shenzhen"}],bindings:["tasks[0].inputParameters.regionId"]},{key:"notifyChannel",label:"交付通知渠道",type:"select",defaultValue:"webhook_dingtalk",required:!0,options:[{label:"钉钉运维机器人 (DingTalk)",value:"webhook_dingtalk"},{label:"企业微信机器人 (WeCom)",value:"webhook_wecom"},{label:"飞书群机器人 (Feishu/Lark)",value:"webhook_feishu"}],bindings:["tasks[4].inputParameters.channel"]}],definition:{name:"ecs_auto_provision_flow",description:"云主机全自动交付与运行时环境部署",version:1,tasks:[{name:"ecs_create_instance",taskReferenceName:"create_node",type:"HTTP",description:"创建计算型云主机",inputParameters:{_actionId:"ecs.create_instance",instanceName:"app-service-prod",regionId:"cn-hangzhou",instanceType:"ecs.c7.xlarge",imageId:"image-alilinux-3",systemDiskSize:120}},{name:"wait_for_network",taskReferenceName:"wait_network_ready",type:"WAIT",description:"等待网络与底层系统完成自检",inputParameters:{_actionId:"control.wait",duration:"10s"}},{name:"ecs_run_command",taskReferenceName:"install_runtime",type:"HTTP",description:"免密下发初始化命令: 安装 Docker 与守护进程",inputParameters:{_actionId:"ecs.run_command",instanceId:"${create_node.output.instanceId}",commandContent:"yum update -y && systemctl start docker && docker info",commandType:"RunShellScript",timeoutSeconds:60}},{name:"ecs_create_snapshot",taskReferenceName:"create_baseline_snap",type:"HTTP",description:"创建系统盘基线快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"${create_node.output.instanceId}",snapshotName:"baseline-init-snapshot",retentionDays:30}},{name:"send_operation_notification",taskReferenceName:"notify_devops",type:"EVENT",description:"向运维协同群发送交付卡片",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【交付就绪】新云主机已部署完成",content:"云主机 ${create_node.output.instanceId} 已创建并完成 Docker 运行时初始化与安全基线快照,内网IP: ${create_node.output.privateIp}。"}}]},mockDataset:{scenarios:[{name:"标准交付场景",description:"模拟一次完整的 4C8G 主机自动交付与脚本安装过程",workflowInput:{},taskOutputs:{create_node:{instanceId:"i-bp18a9z3j42m09a",instanceName:"app-service-prod",privateIp:"172.16.0.42",status:"RUNNING",createdAt:"2026-10-20T14:00:00Z"},wait_network_ready:{waited:!0,duration:"10s"},install_runtime:{exitCode:0,status:"SUCCESS",output:"Docker version 24.0.5 installed and running"},create_baseline_snap:{snapshotId:"s-bp199042",status:"ACCOMPLISHED"},notify_devops:{messageId:"msg-9921",sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_daily_snapshot_backup",version:"1.0.0",title:"核心云主机每日定时快照备份",category:"security",icon:"💾",valueProposition:"每日自动化创建增量快照并自动清理超期备份,防勒索防误删,单次节省 15 分钟人工检查。",description:"自动对生产数据库或核心应用所在的云主机创建带时间戳的增量快照,保留 14 天自动循环轮转,并在完成备份后发送健康汇报。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:15,typicalRunsPerWeek:7,popularityCount:2310},difficulty:"starter",variables:[{key:"instanceId",label:"目标云主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,placeholder:"例如: i-bp18a9z3j42m09a",bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]},{key:"retentionDays",label:"快照保留天数",type:"number",defaultValue:14,required:!0,bindings:["tasks[1].inputParameters.retentionDays"]}],definition:{name:"ecs_daily_snapshot_backup_flow",description:"核心云主机每日定时增量备份",version:1,tasks:[{name:"ecs_query_instance",taskReferenceName:"check_host",type:"HTTP",description:"检查主机运行健康状态",inputParameters:{_actionId:"ecs.query_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"ecs_create_snapshot",taskReferenceName:"create_daily_snap",type:"HTTP",description:"执行云盘增量备份快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"auto-daily-backup",retentionDays:14}},{name:"send_operation_notification",taskReferenceName:"notify_result",type:"EVENT",description:"发送备份执行简报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【快照备份成功】每日例行备份完成",content:"云主机 ${check_host.output.instanceId} (${check_host.output.status}) 增量快照已生成,快照ID: ${create_daily_snap.output.snapshotId}。"}}]},mockDataset:{scenarios:[{name:"定时备份成功场景",workflowInput:{},taskOutputs:{check_host:{instanceId:"i-bp18a9z3j42m09a",status:"RUNNING",osName:"Alibaba Cloud Linux 3"},create_daily_snap:{snapshotId:"s-bp188201",snapshotName:"auto-daily-backup",status:"ACCOMPLISHED"},notify_result:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_high_load_autoscale",version:"1.0.0",title:"主机高负载告警与在线自动升配",category:"ops",icon:"⚡",valueProposition:"检测到 CPU 利用率超标时自动发起升配流程,内置人工审批安全网,秒级在线完成 4C8G -> 8C16G 弹性扩容。",description:"自动轮询主机性能指标,一旦触发瓶颈阈值,系统即刻生成规格变更提案并向架构师推送一键审批卡片,审批后自动在线变配,保障大促不卡顿。",connectors:["cloud_host","dingtalk","approval"],roi:{minutesSavedPerRun:40,typicalRunsPerWeek:5,popularityCount:980},difficulty:"intermediate",variables:[{key:"instanceId",label:"监控主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]},{key:"targetSpec",label:"目标扩容规格",type:"select",defaultValue:"ecs.c7.2xlarge",required:!0,options:[{label:"提升至 计算型 8C16G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"},{label:"提升至 内存型 8C32G (ecs.r7.2xlarge)",value:"ecs.r7.2xlarge"}],bindings:["tasks[2].inputParameters.targetSpec"]}],definition:{name:"ecs_high_load_autoscale_flow",description:"云主机高负载自动熔断与在线变配",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"fetch_metrics",type:"HTTP",description:"采集 CPU 与内存利用率",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:60}},{name:"human_operation_approval",taskReferenceName:"approve_spec_upgrade",type:"HUMAN",description:"高危硬件配置变更审批",inputParameters:{_actionId:"human.approval",assigneeRole:"architect",promptMessage:"云主机 ${fetch_metrics.output.instanceId} 当前 CPU 利用率达到 ${fetch_metrics.output.cpuUsagePercent}%,申请在线升配。",timeoutMinutes:30}},{name:"ecs_modify_spec",taskReferenceName:"apply_spec_change",type:"HTTP",description:"执行在线规格扩容变更",inputParameters:{_actionId:"ecs.modify_spec",instanceId:"i-bp18a9z3j42m09a",targetSpec:"ecs.c7.2xlarge"}},{name:"send_operation_notification",taskReferenceName:"notify_upgrade_done",type:"EVENT",description:"发送变配完成汇报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【升配成功】云主机硬件规格已在线提升",content:"云主机 ${fetch_metrics.output.instanceId} 已成功从 ${apply_spec_change.output.oldSpec} 变更为 ${apply_spec_change.output.newSpec}。"}}]},mockDataset:{scenarios:[{name:"高负载升配成功场景",workflowInput:{},taskOutputs:{fetch_metrics:{instanceId:"i-bp18a9z3j42m09a",cpuUsagePercent:88.5,isOverloaded:!0},approve_spec_upgrade:{approved:!0,reviewer:"architect@internal.cloud"},apply_spec_change:{oldSpec:"ecs.c7.xlarge",newSpec:"ecs.c7.2xlarge",status:"SUCCESS"},notify_upgrade_done:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_vulnerability_patch",version:"1.0.0",title:"生产主机一键漏洞巡检与修复",category:"security",icon:"🛡️",valueProposition:"修补前自动创建保护快照,免密下发 OS 补丁脚本,带审批确认软重启,消除系统 CVE 高危隐患。",description:"解决企业 Linux 主机补丁升级流程繁琐、缺少回滚预案的问题。流程自动先对磁盘建立防护快照,执行补丁更新后通知责任人确认软重启。",connectors:["cloud_host","dingtalk","approval"],roi:{minutesSavedPerRun:45,typicalRunsPerWeek:4,popularityCount:760},difficulty:"intermediate",variables:[{key:"instanceId",label:"目标主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId","tasks[3].inputParameters.instanceId"]}],definition:{name:"ecs_vulnerability_patch_flow",description:"带快照防护的操作系统漏洞巡检与修复流程",version:1,tasks:[{name:"ecs_create_snapshot",taskReferenceName:"patch_safeguard_snap",type:"HTTP",description:"建立补丁前安全还原快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"pre-patch-safeguard",retentionDays:7}},{name:"ecs_run_command",taskReferenceName:"apply_cve_patches",type:"HTTP",description:"下发漏洞热补丁脚本",inputParameters:{_actionId:"ecs.run_command",instanceId:"i-bp18a9z3j42m09a",commandContent:"yum update-minimal --security -y",commandType:"RunShellScript",timeoutSeconds:120}},{name:"human_operation_approval",taskReferenceName:"confirm_soft_reboot",type:"HUMAN",description:"责任人确认重启",inputParameters:{_actionId:"human.approval",assigneeRole:"devops_lead",promptMessage:"补丁更新已完成,请确认是否即刻安排主机软重启以使内核生效。",timeoutMinutes:60}},{name:"ecs_restart_instance",taskReferenceName:"reboot_host",type:"HTTP",description:"软重启生效补丁",inputParameters:{_actionId:"ecs.restart_instance",instanceId:"i-bp18a9z3j42m09a",forceRestart:!1}},{name:"send_operation_notification",taskReferenceName:"report_patch_result",type:"EVENT",description:"发送合规汇报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【补丁更新成功】系统漏洞修复完成",content:"云主机 ${patch_safeguard_snap.output.instanceId} 补丁更新完成,主机已完成重启并恢复在线。"}}]},mockDataset:{scenarios:[{name:"补丁升级全流程演示",workflowInput:{},taskOutputs:{patch_safeguard_snap:{snapshotId:"s-bp1904",status:"ACCOMPLISHED"},apply_cve_patches:{exitCode:0,output:"3 security packages updated",status:"SUCCESS"},confirm_soft_reboot:{approved:!0,reviewer:"devops_lead@internal.cloud"},reboot_host:{status:"RUNNING"},report_patch_result:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_night_idle_shutdown",version:"1.0.0",title:"非生产环境夜间定时关机降本",category:"cost",icon:"🌙",valueProposition:"工作日 21:00 自动停止闲置研发测试主机,次日晨自动开机,降低约 65% 计算资源账单。",description:"自动在夜间巡检开发测试集群,若无活跃计算任务,则下发优雅安全关机指令,并在协同群汇报当晚关机台数与预计节约的算力金额。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:20,typicalRunsPerWeek:5,popularityCount:3100},difficulty:"starter",variables:[{key:"instanceId",label:"测试环境主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]},{key:"forceStop",label:"超时是否强制关机",type:"boolean",defaultValue:!1,bindings:["tasks[1].inputParameters.forceStop"]}],definition:{name:"ecs_night_idle_shutdown_flow",description:"测试环境夜间自动关机降本",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"check_idle_state",type:"HTTP",description:"核实主机是否处于闲置低负载",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:300}},{name:"ecs_stop_instance",taskReferenceName:"shutdown_host",type:"HTTP",description:"执行优雅关机",inputParameters:{_actionId:"ecs.stop_instance",instanceId:"i-bp18a9z3j42m09a",forceStop:!1}},{name:"send_operation_notification",taskReferenceName:"notify_cost_saving",type:"EVENT",description:"发送夜间节能降本简报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【夜间节能】测试主机已自动进入休眠",content:"测试主机 ${check_idle_state.output.instanceId} (CPU ${check_idle_state.output.cpuUsagePercent}%) 已于 21:00 完成关机,预计今夜节约 11 小时按量费用。"}}]},mockDataset:{scenarios:[{name:"闲置关机场景",workflowInput:{},taskOutputs:{check_idle_state:{instanceId:"i-bp18a9z3j42m09a",cpuUsagePercent:2.1,isOverloaded:!1},shutdown_host:{status:"STOPPED"},notify_cost_saving:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_morning_boot",version:"1.0.0",title:"测试环境工作日早晨定时自动开机",category:"cost",icon:"🌅",valueProposition:"工作日 08:30 自动唤醒测试主机,自检网络并广播就绪通知,研发开工即可联调无需等待。",description:"与夜间关机模板形成完整的节能闭环,在工作日上班前 30 分钟定时批量启动主机,校验网络联通性后发送早报。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:15,typicalRunsPerWeek:5,popularityCount:2890},difficulty:"starter",variables:[{key:"instanceId",label:"测试环境主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]}],definition:{name:"ecs_morning_boot_flow",description:"测试环境早间自动唤醒开机",version:1,tasks:[{name:"ecs_start_instance",taskReferenceName:"boot_host",type:"HTTP",description:"执行主机开机启动",inputParameters:{_actionId:"ecs.start_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"wait_boot_ready",taskReferenceName:"wait_boot",type:"WAIT",description:"等待操作系统内核引导就绪",inputParameters:{_actionId:"control.wait",duration:"10s"}},{name:"ecs_query_instance",taskReferenceName:"verify_network",type:"HTTP",description:"核实网络与运行状态",inputParameters:{_actionId:"ecs.query_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"send_operation_notification",taskReferenceName:"notify_team_ready",type:"EVENT",description:"向研发测试群发送环境就绪广播",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【环境就绪】测试云主机已唤醒开机",content:"测试主机 ${verify_network.output.instanceId} 已启动 (${verify_network.output.status}),内网IP: ${verify_network.output.privateIp},开发人员可正常开始联调。"}}]},mockDataset:{scenarios:[{name:"晨间开机唤醒演示",workflowInput:{},taskOutputs:{boot_host:{instanceId:"i-bp18a9z3j42m09a",currentStatus:"STARTING"},wait_boot:{waited:!0},verify_network:{instanceId:"i-bp18a9z3j42m09a",status:"RUNNING",privateIp:"172.16.0.42"},notify_team_ready:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_disk_expansion",version:"1.0.0",title:"磁盘容量告警与在线自动扩容",category:"ops",icon:"💽",valueProposition:"磁盘利用率超 85% 自动快照并在线扩充云盘容量,免停机扩展文件系统,杜绝业务写爆宕机。",description:"自动对磁盘快满的主机执行保护性快照,随后免停机远程下发 growpart 与 resize2fs 脚本刷新空间,最后在运维群反馈扩容结果。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:30,typicalRunsPerWeek:6,popularityCount:1650},difficulty:"intermediate",variables:[{key:"instanceId",label:"目标主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]}],definition:{name:"ecs_disk_expansion_flow",description:"云主机磁盘在线自动扩容与自愈",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"check_disk_usage",type:"HTTP",description:"检测磁盘利用率",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:60}},{name:"ecs_create_snapshot",taskReferenceName:"pre_expand_snap",type:"HTTP",description:"扩容前创建磁盘保护快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"pre-disk-expansion",retentionDays:7}},{name:"ecs_run_command",taskReferenceName:"grow_filesystem",type:"HTTP",description:"在线扩展分区与文件系统",inputParameters:{_actionId:"ecs.run_command",instanceId:"i-bp18a9z3j42m09a",commandContent:"growpart /dev/vda 1 && resize2fs /dev/vda1 && df -h",commandType:"RunShellScript",timeoutSeconds:60}},{name:"send_operation_notification",taskReferenceName:"notify_expand_done",type:"EVENT",description:"发送扩容完成通知",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【自愈成功】云盘空间已在线扩容",content:"云主机 ${check_disk_usage.output.instanceId} 磁盘扩容完毕,当前文件系统状态正常。"}}]},mockDataset:{scenarios:[{name:"磁盘扩容自愈演示",workflowInput:{},taskOutputs:{check_disk_usage:{instanceId:"i-bp18a9z3j42m09a",diskUsagePercent:89.2},pre_expand_snap:{snapshotId:"s-bp1449",status:"ACCOMPLISHED"},grow_filesystem:{exitCode:0,output:"CHANGED: partition=1, size expanded to 200GB"},notify_expand_done:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_emergency_isolation",version:"1.0.0",title:"突发入侵应急响应与快照取证",category:"security",icon:"🚨",valueProposition:"发生高危网络入侵威胁时,秒级冻结证据快照并强制关机隔离,将安全暴露面降至最低。",description:"面对勒索病毒、WebShell 或异常爆破入侵时,自动对受害主机创建取证快照保存现场内存与日志,随后强制关机切断危害,并向 SecOps 安全小组发送紧急红色通知。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:60,typicalRunsPerWeek:1,popularityCount:890},difficulty:"advanced",variables:[{key:"instanceId",label:"受害云主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]}],definition:{name:"ecs_emergency_isolation_flow",description:"安全事件突发应急取证与快速隔离",version:1,tasks:[{name:"ecs_create_snapshot",taskReferenceName:"forensics_snapshot",type:"HTTP",description:"紧急创建现场取证快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"security-forensics-evidence",retentionDays:90}},{name:"ecs_stop_instance",taskReferenceName:"isolate_victim_node",type:"HTTP",description:"强制切断关机隔离",inputParameters:{_actionId:"ecs.stop_instance",instanceId:"i-bp18a9z3j42m09a",forceStop:!0}},{name:"send_operation_notification",taskReferenceName:"alert_secops_incident",type:"EVENT",description:"发送安全应急处置最高级别预警",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"🚨【紧急安全通报】入侵主机已隔离取证",content:"受害主机 ${forensics_snapshot.output.instanceId} 已完成现场留证快照 (${forensics_snapshot.output.snapshotId}) 并被强制关机隔离,请 SecOps 立即启动应急调查。"}}]},mockDataset:{scenarios:[{name:"应急阻断演示",workflowInput:{},taskOutputs:{forensics_snapshot:{snapshotId:"s-forensics-911",status:"ACCOMPLISHED"},isolate_victim_node:{status:"STOPPED",forceStop:!0},alert_secops_incident:{sentStatus:"DELIVERED"}}}]}}];class Ag{templates=new Map;constructor(t=[]){this.registerAll(t)}register(t){this.templates.set(t.id,t)}registerAll(t){for(const r of t)this.register(r)}getAllTemplates(){return Array.from(this.templates.values())}getTemplateById(t){return this.templates.get(t)}search(t,r="all"){let n=this.getAllTemplates();if(r&&r!=="all"&&(n=n.filter(o=>o.category===r)),t&&t.trim()){const o=t.toLowerCase().trim();n=n.filter(s=>s.title.toLowerCase().includes(o)||s.valueProposition.toLowerCase().includes(o)||s.description.toLowerCase().includes(o))}return n}}const Wl=new Ag(Dg),Lg=({isOpen:e,instance:t,onClose:r,onPublished:n})=>{const{theme:o,themeColor:s}=ie(we(N=>({theme:N.theme,themeColor:N.themeColor}))),i=I.useMemo(()=>Og({instance:t,title:`${t.workflowName||"云平台工作流"} (实战提炼)`,category:"ops",valueProposition:`基于实例 ${t.workflowId} 的成功运行萃取,已通过自动化脱敏与参数提取。`,author:"系统管理员"}),[t]),[l,c]=I.useState(i.template.title),[u,d]=I.useState(i.template.category),[p,h]=I.useState(i.template.valueProposition),[f,m]=I.useState(i.template.roi.minutesSavedPerRun),[y,g]=I.useState(()=>{const N={};for(const L of i.prunedTasks)N[L.taskReferenceName]=L.selected;return N}),[b,x]=I.useState(!1),[v,k]=I.useState(!1);if(!e||typeof document>"u")return null;const S=N=>{g(L=>({...L,[N]:!L[N]}))},j=()=>{x(!0);try{const N={...i.template,title:l,category:u,valueProposition:p,roi:{...i.template.roi,minutesSavedPerRun:f}};Wl.register(N),n&&n(N),k(!0),setTimeout(()=>{r()},1500)}catch(N){alert(`发布模板出错: ${N.message}`)}finally{x(!1)}},w=i.findings;return Qe.createPortal(a.jsx("div",{"data-mode":o,"data-brand":s,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"rgba(0, 0, 0, 0.72)",backdropFilter:"blur(6px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit"},onClick:r,children:a.jsxs("div",{onClick:N=>N.stopPropagation(),style:{width:980,maxWidth:"calc(100vw - 48px)",height:720,maxHeight:"calc(100vh - 48px)",background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:14,boxShadow:"0 28px 72px rgba(0, 0, 0, 0.5)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"14px 20px",borderBottom:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary, #0f172a)"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:22},children:"🛠️"}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,fontSize:15,color:"var(--text-primary, #f8fafc)"},children:"生产工作流一键提炼与脱敏工作台 (管理员)"}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)"},children:["基于执行实例 #",t.workflowId," 自动识别敏感信息并生成高保真模板"]})]})]}),a.jsx("button",{onClick:r,style:{background:"none",border:"none",color:"var(--text-muted, #94a3b8)",cursor:"pointer",fontSize:16},children:"✕"})]}),a.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"18px 20px",display:"grid",gridTemplateColumns:"1fr 1.2fr 1fr",gap:16},children:[a.jsxs("div",{style:{background:"var(--bg-primary, #0f172a)",borderRadius:10,border:"1px solid var(--border-primary, rgba(255,255,255,0.1))",padding:14,display:"flex",flexDirection:"column",gap:10},children:[a.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary, #f8fafc)"},children:"1. 骨架拓扑剪枝建议"}),a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)"},children:"自动识别并建议剔除特定的临时调试、重试与低频孤立分支:"}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginTop:4},children:i.template.definition.tasks?.map((N,L)=>{const _=!!y[N.taskReferenceName];return a.jsxs("div",{style:{padding:"8px 10px",borderRadius:6,background:_?"rgba(239, 68, 68, 0.08)":"rgba(255,255,255,0.03)",border:`1px solid ${_?"rgba(239, 68, 68, 0.25)":"rgba(255,255,255,0.08)"}`,display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:12,opacity:_?.6:1},children:[a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsxs("span",{style:{color:"var(--color-accent, #3b82f6)",fontWeight:600},children:["#",L+1]}),a.jsx("span",{style:{color:_?"#fca5a5":"var(--text-primary, #f8fafc)"},children:N.description||N.name})]}),a.jsx("div",{style:{fontSize:10,color:"var(--text-muted, #94a3b8)",fontFamily:"monospace"},children:N.taskReferenceName})]}),a.jsx("button",{onClick:()=>S(N.taskReferenceName),style:{padding:"2px 6px",borderRadius:4,background:_?"rgba(239, 68, 68, 0.2)":"rgba(255,255,255,0.08)",border:"none",color:_?"#f87171":"var(--text-muted, #94a3b8)",fontSize:11,cursor:"pointer"},children:_?"已剪枝剔除":"保留"})]},N.taskReferenceName)})})]}),a.jsxs("div",{style:{background:"var(--bg-primary, #0f172a)",borderRadius:10,border:"1px solid var(--border-primary, rgba(255,255,255,0.1))",padding:14,display:"flex",flexDirection:"column",gap:10},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary, #f8fafc)"},children:"2. 敏感项扫描与变量提取"}),a.jsxs("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"rgba(16, 185, 129, 0.15)",color:"#34d399",fontWeight:600},children:["已扫描 ",w.length," 项"]})]}),a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)"},children:"命中规则的生产密钥已强制置空,真实 IP/ID 推荐转为填空变量:"}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginTop:4},children:w.length===0?a.jsx("div",{style:{padding:"24px 12px",textAlign:"center",color:"var(--text-muted, #94a3b8)",fontSize:12},children:"✓ 未发现任何硬编码的高危凭据或敏感信息"}):w.map(N=>a.jsxs("div",{style:{padding:"8px 10px",borderRadius:6,background:"rgba(255,255,255,0.03)",border:"1px solid var(--border-primary, rgba(255,255,255,0.08))",display:"flex",flexDirection:"column",gap:4,fontSize:11},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsx("span",{style:{padding:"1px 5px",borderRadius:3,fontSize:10,fontWeight:600,background:N.kind==="credential"?"rgba(239, 68, 68, 0.2)":N.kind==="network"?"rgba(59, 130, 246, 0.2)":"rgba(245, 158, 11, 0.2)",color:N.kind==="credential"?"#f87171":N.kind==="network"?"#60a5fa":"#fbbf24"},children:N.kind==="credential"?"🔑 密钥凭据":N.kind==="network"?"🌐 内网地址":N.kind==="pii"?"📱 个人隐私":"🖥️ 云资源ID"}),a.jsxs("span",{style:{color:"var(--text-muted, #94a3b8)"},children:["建议处理: ",N.action==="variable"?"提取为向导变量":"自动掩码脱敏"]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:2},children:[a.jsx("span",{style:{color:"var(--text-secondary, #b0bec5)"},children:"字段:"}),a.jsx("span",{style:{color:"var(--text-primary, #f8fafc)",fontFamily:"monospace"},children:N.keyName})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[a.jsx("span",{style:{color:"var(--text-secondary, #b0bec5)"},children:"脱敏后:"}),a.jsx("span",{style:{color:"#34d399",fontFamily:"monospace"},children:N.maskedValue?String(N.maskedValue):"(强制置空并由用户填入)"})]})]},N.id))})]}),a.jsxs("div",{style:{background:"var(--bg-primary, #0f172a)",borderRadius:10,border:"1px solid var(--border-primary, rgba(255,255,255,0.1))",padding:14,display:"flex",flexDirection:"column",gap:12},children:[a.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary, #f8fafc)"},children:"3. 模板货架信息配置"}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("label",{style:{fontSize:12,color:"var(--text-secondary, #b0bec5)"},children:"模板中文标题"}),a.jsx("input",{type:"text",value:l,onChange:N=>c(N.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:12,outline:"none"}})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("label",{style:{fontSize:12,color:"var(--text-secondary, #b0bec5)"},children:"业务分类"}),a.jsxs("select",{value:u,onChange:N=>d(N.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:12,outline:"none"},children:[a.jsx("option",{value:"compute",children:"🖥️ 交付与计算"}),a.jsx("option",{value:"security",children:"💾 安全与容灾"}),a.jsx("option",{value:"ops",children:"⚡ 运维与自愈"}),a.jsx("option",{value:"cost",children:"🌙 节能与降本"})]})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("label",{style:{fontSize:12,color:"var(--text-secondary, #b0bec5)"},children:"一句话业务价值"}),a.jsx("textarea",{rows:2,value:p,onChange:N=>h(N.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:12,outline:"none",resize:"none"}})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx("label",{style:{fontSize:12,color:"var(--text-secondary, #b0bec5)"},children:"单次预估节省 (分钟)"}),a.jsx("input",{type:"number",value:f,onChange:N=>m(Number(N.target.value)),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:12,outline:"none"}})]}),a.jsx("div",{style:{marginTop:6,padding:"8px 10px",borderRadius:6,background:"rgba(16, 185, 129, 0.08)",border:"1px solid rgba(16, 185, 129, 0.2)",fontSize:11,color:"#34d399"},children:"✓ 已自动从该运行实例生成无害化保真沙盒数据集,上架后支持其他用户零授权一键试跑。"})]})]}),a.jsxs("div",{style:{padding:"12px 20px",borderTop:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"var(--bg-primary, #0f172a)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{fontSize:12,color:"var(--text-muted, #94a3b8)"},children:["审计报告: 扫描 ",i.report.totalTasksScanned," 个任务 · 脱敏凭证"," ",i.report.credentialsRedactedCount," 项 · 生成模板变量"," ",i.report.variablesCreatedCount," 项"]}),a.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[v&&a.jsx("span",{style:{fontSize:12,color:"#34d399",fontWeight:600},children:"✓ 已成功上架到模板中心!"}),a.jsx("button",{onClick:r,style:{padding:"6px 14px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-secondary, #b0bec5)",fontSize:12,cursor:"pointer"},children:"取消"}),a.jsxs("button",{onClick:j,disabled:b||v,style:{padding:"6px 18px",borderRadius:6,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontSize:12,fontWeight:600,cursor:b||v?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"🚀"}),a.jsx("span",{children:b?"发布中...":"注册并发布到模板中心"})]})]})]})]})}),document.body)},Mg={COMPLETED:"完成",COMPLETED_WITH_ERRORS:"完成(含错误)",FAILED:"失败",FAILED_WITH_TERMINAL_ERROR:"终态失败",IN_PROGRESS:"执行中",SCHEDULED:"等待中",TIMED_OUT:"超时",SKIPPED:"跳过",CANCELED:"已取消"},$g={COMPLETED:"var(--status-completed)",COMPLETED_WITH_ERRORS:"var(--status-completed)",FAILED:"var(--status-failed)",FAILED_WITH_TERMINAL_ERROR:"var(--status-failed)",IN_PROGRESS:"var(--status-running)",SCHEDULED:"var(--status-scheduled)",TIMED_OUT:"var(--status-failed)",SKIPPED:"var(--status-skipped, #6b7280)",CANCELED:"var(--status-failed)"},b0=()=>{const[e,t]=I.useState(!1),{executionData:r,workflowInstance:n,showAnalysisPanel:o,setShowAnalysisPanel:s,switchToEditAndFocusParam:i,selectTaskAction:l,taskMap:c}=ie(we(v=>({executionData:v.executionData,workflowInstance:v.workflowInstance,showAnalysisPanel:v.showAnalysisPanel,setShowAnalysisPanel:v.setShowAnalysisPanel,switchToEditAndFocusParam:v.switchToEditAndFocusParam,selectTaskAction:v.selectTaskAction,taskMap:v.taskMap}))),u=I.useMemo(()=>r?g0(r,n??null):null,[r,n]);if(!o||!u)return null;const{totalTasks:d,completedTasks:p,failedTasks:h,skippedTasks:f,totalDurationMs:m,steps:y}=u,g=d>0?Math.round(p/d*100):0,b=n?.status,x=b?$g[b]??"var(--text-secondary)":"var(--text-secondary)";return a.jsxs("div",{className:"esp-panel glass-panel",children:[a.jsxs("div",{className:"esp-header",children:[a.jsxs("div",{className:"esp-title",children:[a.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),a.jsx("path",{d:"M5 8h6M5 5h3M5 11h4"})]}),"执行分析"]}),b&&a.jsx("span",{className:"esp-wf-status",style:{color:x},children:Mg[b]??b}),n&&a.jsxs("button",{onClick:()=>t(!0),style:{padding:"3px 8px",borderRadius:5,background:"color-mix(in srgb, var(--color-brand-blue) 18%, transparent)",border:"1px solid color-mix(in srgb, var(--color-brand-blue) 40%, transparent)",color:"var(--color-brand-blue)",fontSize:11,cursor:"pointer",fontWeight:600,display:"inline-flex",alignItems:"center",gap:4,marginLeft:"auto",marginRight:6},title:"将本次执行实例脱敏并提炼为公共标准化模板",children:[a.jsx("span",{children:"🛠️"}),a.jsx("span",{children:"提取为模板"})]}),a.jsx("button",{className:"esp-close",onClick:()=>s(!1),children:"✕"})]}),a.jsxs("div",{className:"esp-content",children:[a.jsxs("div",{className:"esp-overview",children:[a.jsxs("div",{className:"esp-card",children:[a.jsx("span",{className:"esp-card-value",children:d}),a.jsx("span",{className:"esp-card-label",children:"总任务数"})]}),a.jsxs("div",{className:"esp-card esp-card-success",children:[a.jsx("span",{className:"esp-card-value",style:{color:"var(--status-completed)"},children:p}),a.jsx("span",{className:"esp-card-label",children:"已完成"})]}),a.jsxs("div",{className:"esp-card esp-card-failed",children:[a.jsx("span",{className:"esp-card-value",style:{color:h>0?"var(--status-failed)":"var(--text-secondary)"},children:h}),a.jsx("span",{className:"esp-card-label",children:"失败"})]}),a.jsxs("div",{className:"esp-card",children:[a.jsx("span",{className:"esp-card-value",children:Cg(m)}),a.jsx("span",{className:"esp-card-label",children:"总耗时"})]})]}),a.jsx("div",{className:"esp-progress-bar",children:a.jsx("div",{className:"esp-progress-fill",style:{width:`${g}%`,background:h>0?"var(--status-failed)":"var(--status-completed)"},title:`成功率 ${g}%`})}),a.jsxs("div",{className:"esp-progress-label",children:[g,"% 成功率",f>0?`,${f} 个任务已跳过`:""]}),y.filter(v=>v.diagnostics.length>0).map(v=>a.jsxs("div",{className:"esp-diagnostic-card",children:[a.jsxs("div",{className:"esp-diag-task-ref",children:[a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",style:{color:"var(--status-failed)",flexShrink:0},children:a.jsx("path",{d:"M8 1a7 7 0 100 14A7 7 0 008 1zm-.75 4a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0V5zm.75 7a1 1 0 110-2 1 1 0 010 2z"})}),v.taskRef]}),v.diagnostics.map((k,S)=>a.jsxs("div",{className:"esp-diag-item",style:{borderLeftColor:x0(k.category)},children:[a.jsxs("div",{className:"esp-diag-title",children:[a.jsx("span",{children:y0(k.category)}),k.title]}),a.jsx("p",{className:"esp-diag-explanation",children:k.explanation}),a.jsxs("button",{className:"esp-fix-btn",onClick:()=>i(v.taskRef,k.suggestEditParam),children:["去修复",a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:a.jsx("path",{d:"M5 8h6M9 5l3 3-3 3"})})]})]},S))]},v.taskRef)),a.jsx("div",{className:"esp-section-label",children:"步骤执行时序"}),a.jsxs("div",{className:"esp-steps-table",children:[a.jsxs("div",{className:"esp-steps-header",children:[a.jsx("span",{children:"#"}),a.jsx("span",{children:"任务引用名"}),a.jsx("span",{children:"状态"}),a.jsx("span",{children:"耗时"}),a.jsx("span",{children:"重试"})]}),y.map((v,k)=>{const S=$g[v.status]??"var(--text-secondary)",j=c[v.taskRef];return a.jsxs("button",{className:"esp-step-row",onClick:()=>j&&l(j,!0),title:v.reasonForIncompletion||v.taskRef,children:[a.jsx("span",{className:"esp-step-idx",children:k+1}),a.jsx("span",{className:"esp-step-ref",children:v.taskRef}),a.jsxs("span",{className:"esp-step-status",style:{color:S},children:[a.jsx("span",{className:"esp-status-dot",style:{background:S}}),Mg[v.status]??v.status]}),a.jsx("span",{className:"esp-step-duration",children:Cg(v.durationMs)}),a.jsx("span",{className:"esp-step-retry",style:{color:v.retryCount>0?"var(--status-failed)":"var(--text-secondary)"},children:v.retryCount>0?`${v.retryCount}次`:"-"})]},v.taskRef)})]})]}),e&&n&&a.jsx(Lg,{isOpen:e,instance:n,onClose:()=>t(!1),onPublished:()=>{console.log("[ExecutionSummaryPanel] 模板已成功发布到场景中心")}})]})},qg=[{id:"ecs.create_instance",name:"创建云主机",category:"compute",icon:"🖥️",description:"在指定可用区根据镜像与规格创建并初始化一台新的云主机实例",connector:"cloud_host",riskLevel:"safe",fields:[{key:"regionId",label:"所属地域",type:"select",required:!0,defaultValue:"cn-hangzhou",options:[{label:"华东 1 (杭州)",value:"cn-hangzhou"},{label:"华北 2 (北京)",value:"cn-beijing"},{label:"华南 1 (深圳)",value:"cn-shenzhen"},{label:"亚太东南 1 (新加坡)",value:"ap-southeast-1"}],acceptsPills:!0},{key:"instanceType",label:"计算规格",type:"select",required:!0,defaultValue:"ecs.c7.xlarge",options:[{label:"通用型 2C4G (ecs.g7.large)",value:"ecs.g7.large"},{label:"计算型 4C8G (ecs.c7.xlarge)",value:"ecs.c7.xlarge"},{label:"内存型 4C16G (ecs.r7.xlarge)",value:"ecs.r7.xlarge"},{label:"高性能 8C32G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"}],acceptsPills:!0},{key:"imageId",label:"操作系统镜像",type:"select",required:!0,defaultValue:"image-alilinux-3",options:[{label:"Alibaba Cloud Linux 3.2104 LTS 64位",value:"image-alilinux-3"},{label:"Ubuntu 22.04 LTS 64位",value:"image-ubuntu-22"},{label:"CentOS 7.9 64位",value:"image-centos-7"},{label:"Debian 12 64位",value:"image-debian-12"}],acceptsPills:!0},{key:"instanceName",label:"主机名称",type:"text",placeholder:"例如: web-prod-01",required:!0,defaultValue:"app-server-node",acceptsPills:!0},{key:"systemDiskSize",label:"系统盘容量 (GB)",type:"number",defaultValue:100,required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"instanceName",label:"主机名称",type:"string",example:"app-server-node"},{key:"privateIp",label:"内网IP",type:"string",example:"172.16.0.42"},{key:"status",label:"实例状态",type:"string",example:"RUNNING"},{key:"createdAt",label:"创建时间",type:"string",example:"2026-10-20T14:00:00Z"}],compile:(e,t)=>({name:"ecs_create_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`创建云主机: ${e.instanceName||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.create_instance",actionName:"创建云主机",regionId:e.regionId??"cn-hangzhou",instanceType:e.instanceType??"ecs.c7.xlarge",imageId:e.imageId??"image-alilinux-3",instanceName:e.instanceName??"app-node",systemDiskSize:Number(e.systemDiskSize??100),http_request:{uri:"https://ecs.internal.cloud/api/v2/instances",method:"POST",body:{regionId:e.regionId,instanceType:e.instanceType,imageId:e.imageId,instanceName:e.instanceName,systemDiskSize:e.systemDiskSize}}}}),decompile:e=>{if(e.inputParameters?._actionId==="ecs.create_instance"){const t=e.inputParameters;return{regionId:t.regionId??"cn-hangzhou",instanceType:t.instanceType??"ecs.c7.xlarge",imageId:t.imageId??"image-alilinux-3",instanceName:t.instanceName??e.taskReferenceName,systemDiskSize:t.systemDiskSize??100}}return null},mockOutput:e=>({instanceId:`i-bp1${Math.random().toString(36).substring(2,9)}`,instanceName:e.instanceName||"app-server-node",privateIp:"172.16.0."+Math.floor(10+Math.random()*200),status:"RUNNING",regionId:e.regionId||"cn-hangzhou",instanceType:e.instanceType||"ecs.c7.xlarge",createdAt:new Date().toISOString()})},{id:"ecs.query_instance",name:"查询云主机详情",category:"compute",icon:"🔍",description:"根据主机实例 ID 查询其实时运行状态、配置规格与网络 IP",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"例如: i-bp18a9z3j42m09a 或绑定上游胶囊",required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"运行状态",type:"string",example:"RUNNING"},{key:"cpu",label:"CPU核心数",type:"number",example:4},{key:"memoryGb",label:"内存(GB)",type:"number",example:8},{key:"privateIp",label:"内网IP",type:"string",example:"172.16.0.42"},{key:"publicIp",label:"公网IP",type:"string",example:"47.98.112.23"},{key:"osName",label:"操作系统",type:"string",example:"Alibaba Cloud Linux 3"}],compile:(e,t)=>({name:"ecs_query_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`查询云主机状态: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.query_instance",actionName:"查询云主机详情",instanceId:e.instanceId,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}`,method:"GET"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.query_instance"?{instanceId:e.inputParameters.instanceId??""}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RUNNING",cpu:4,memoryGb:8,privateIp:"172.16.0.42",publicIp:"47.98.112.23",osName:"Alibaba Cloud Linux 3.2104",uptimeHours:360})},{id:"ecs.start_instance",name:"启动云主机",category:"compute",icon:"▶️",description:"将处于关机/停止状态的云主机实例开机启动",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"选择或填入要开机的主机 ID",required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"previousStatus",label:"变更前状态",type:"string",example:"STOPPED"},{key:"currentStatus",label:"当前状态",type:"string",example:"STARTING"},{key:"startedAt",label:"开机时间",type:"string",example:"2026-10-20T14:15:00Z"}],compile:(e,t)=>({name:"ecs_start_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`开机启动云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.start_instance",actionName:"启动云主机",instanceId:e.instanceId,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/start`,method:"POST"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.start_instance"?{instanceId:e.inputParameters.instanceId??""}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",previousStatus:"STOPPED",currentStatus:"RUNNING",startedAt:new Date().toISOString()})},{id:"ecs.stop_instance",name:"停止云主机",category:"compute",icon:"⏹️",description:"安全关机或强制关机运行中的云主机实例",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"选择或填入要关机的主机 ID",required:!0,acceptsPills:!0},{key:"forceStop",label:"是否强制关机",type:"boolean",defaultValue:!1,help:"默认安全优雅关机,开启后若超时将直接切断电源"}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"当前状态",type:"string",example:"STOPPED"},{key:"stoppedAt",label:"关机完成时间",type:"string",example:"2026-10-20T14:20:00Z"}],compile:(e,t)=>({name:"ecs_stop_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`停止云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.stop_instance",actionName:"停止云主机",instanceId:e.instanceId,forceStop:!!e.forceStop,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/stop`,method:"POST",body:{forceStop:e.forceStop}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.stop_instance"?{instanceId:e.inputParameters.instanceId??"",forceStop:!!e.inputParameters.forceStop}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"STOPPED",forceStop:!!e.forceStop,stoppedAt:new Date().toISOString()})},{id:"ecs.restart_instance",name:"重启云主机",category:"compute",icon:"🔄",description:"重新启动运行中的云主机(支持软重启与强制硬重启)",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"例如: i-bp18a9z3j42m09a",required:!0,acceptsPills:!0},{key:"forceRestart",label:"强制重启 (硬重启)",type:"boolean",defaultValue:!1}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"状态",type:"string",example:"REBOOTING"},{key:"restartedAt",label:"重启时间",type:"string",example:"2026-10-20T14:22:00Z"}],compile:(e,t)=>({name:"ecs_restart_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`重启云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.restart_instance",actionName:"重启云主机",instanceId:e.instanceId,forceRestart:!!e.forceRestart}}),decompile:e=>e.inputParameters?._actionId==="ecs.restart_instance"?{instanceId:e.inputParameters.instanceId??"",forceRestart:!!e.inputParameters.forceRestart}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RUNNING",restartedAt:new Date().toISOString()})},{id:"ecs.modify_spec",name:"变更实例规格 (升降配)",category:"compute",icon:"⚡",description:"在线或离线升级/降低云主机 CPU 与内存硬件配置",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"targetSpec",label:"目标规格配置",type:"select",required:!0,defaultValue:"ecs.c7.2xlarge",options:[{label:"提升至 计算型 8C16G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"},{label:"提升至 内存型 8C32G (ecs.r7.2xlarge)",value:"ecs.r7.2xlarge"},{label:"降低至 通用型 2C4G (ecs.g7.large)",value:"ecs.g7.large"}],acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"oldSpec",label:"变更前规格",type:"string",example:"ecs.c7.xlarge"},{key:"newSpec",label:"新规格",type:"string",example:"ecs.c7.2xlarge"},{key:"status",label:"变配状态",type:"string",example:"SUCCESS"}],compile:(e,t)=>({name:"ecs_modify_spec",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`云主机变配为 ${e.targetSpec||""}`,inputParameters:{_actionId:"ecs.modify_spec",actionName:"变更实例规格",instanceId:e.instanceId,targetSpec:e.targetSpec}}),decompile:e=>e.inputParameters?._actionId==="ecs.modify_spec"?{instanceId:e.inputParameters.instanceId??"",targetSpec:e.inputParameters.targetSpec??"ecs.c7.2xlarge"}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",oldSpec:"ecs.c7.xlarge",newSpec:e.targetSpec||"ecs.c7.2xlarge",status:"SUCCESS",effectiveImmediately:!0})},{id:"ecs.create_snapshot",name:"创建云盘快照",category:"storage",icon:"💾",description:"为云主机的系统盘或数据盘创建实时快照,用于容灾备份或回滚",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"snapshotName",label:"快照名称/备注",type:"text",defaultValue:"backup-auto-snapshot",acceptsPills:!0},{key:"retentionDays",label:"自动保留天数",type:"number",defaultValue:7,help:"过期后自动清理释放,0 为永久保留"}],outputs:[{key:"snapshotId",label:"快照ID",type:"string",example:"s-bp14209938"},{key:"snapshotName",label:"快照名称",type:"string",example:"backup-auto-snapshot"},{key:"progress",label:"创建进度",type:"string",example:"100%"},{key:"status",label:"状态",type:"string",example:"ACCOMPLISHED"}],compile:(e,t)=>({name:"ecs_create_snapshot",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`创建快照: ${e.snapshotName||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.create_snapshot",actionName:"创建云盘快照",instanceId:e.instanceId,snapshotName:e.snapshotName,retentionDays:Number(e.retentionDays??7)}}),decompile:e=>e.inputParameters?._actionId==="ecs.create_snapshot"?{instanceId:e.inputParameters.instanceId??"",snapshotName:e.inputParameters.snapshotName??"backup-auto-snapshot",retentionDays:e.inputParameters.retentionDays??7}:null,mockOutput:e=>({snapshotId:`s-bp1${Math.random().toString(36).substring(2,8)}`,snapshotName:e.snapshotName||"backup-auto-snapshot",progress:"100%",status:"ACCOMPLISHED",sizeGb:100})},{id:"ecs.run_command",name:"执行远程运维脚本",category:"compute",icon:"💻",description:"免登录直接在云主机内部运行 Shell/Python 脚本并捕获返回日志",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"commandType",label:"脚本语言",type:"select",defaultValue:"RunShellScript",options:[{label:"Shell 脚本 (Linux)",value:"RunShellScript"},{label:"Python 脚本",value:"RunPythonScript"}]},{key:"commandContent",label:"执行脚本命令",type:"textarea",placeholder:"例如: df -h && free -m && systemctl status nginx",defaultValue:"uptime && free -m",required:!0,acceptsPills:!0},{key:"timeoutSeconds",label:"超时时间 (秒)",type:"number",defaultValue:60}],outputs:[{key:"commandId",label:"调用批次ID",type:"string",example:"cmd-0992384"},{key:"exitCode",label:"进程退出码",type:"number",example:0},{key:"output",label:"标准输出日志",type:"string",example:"Linux 5.10.134-13.al8.x86_64"},{key:"status",label:"执行状态",type:"string",example:"SUCCESS"}],compile:(e,t)=>({name:"ecs_run_command",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`主机下发命令: ${t.taskReferenceName}`,inputParameters:{_actionId:"ecs.run_command",actionName:"执行远程运维脚本",instanceId:e.instanceId,commandType:e.commandType??"RunShellScript",commandContent:e.commandContent,timeoutSeconds:Number(e.timeoutSeconds??60)}}),decompile:e=>e.inputParameters?._actionId==="ecs.run_command"?{instanceId:e.inputParameters.instanceId??"",commandType:e.inputParameters.commandType??"RunShellScript",commandContent:e.inputParameters.commandContent??"",timeoutSeconds:e.inputParameters.timeoutSeconds??60}:null,mockOutput:e=>({commandId:`cmd-${Date.now().toString(36)}`,exitCode:0,output:`[2026-10-20 22:30:00 UTC] Command executed on ${e.instanceId||"i-bp18a9z3j42m09a"}
263
+ `,qN={string:"var(--cm-data)",number:"var(--cm-ai)",boolean:"var(--cm-cat-human)",object:"var(--cm-status-warning)",array:"var(--cm-status-success)",any:"var(--text-muted)"},FN=({isOpen:e,onClose:t,onSelect:r,suggestions:n,wlspItems:s=[],anchorRect:a,onRequestAiHint:i,aiLoading:l=!1})=>{const c=re(L=>L.theme),d=re(L=>L.themeColor),[u,p]=T.useState("all"),[f,m]=T.useState(""),[h,y]=T.useState(0),x=T.useRef(null);T.useEffect(()=>{e&&(m(""),y(0),setTimeout(()=>x.current?.focus(),30))},[e]);const g=T.useMemo(()=>{const L=s.map(F=>({label:F.label,value:F.value,description:F.description,category:F.category,valueType:F.valueType,sourceLabel:F.sourceLabel,sampleValue:F.sampleValue,isConditional:F.isConditional})),H=new Set(L.map(F=>F.value));for(const F of n)H.has(F.value)||(H.add(F.value),L.push({...F,category:F.category||"ai"}));return L},[s,n]),v=T.useMemo(()=>g.filter(L=>{if(u!=="all"&&L.category!==u&&L.category!=="ai")return!1;if(!f.trim())return!0;const H=f.toLowerCase();return L.label.toLowerCase().includes(H)||L.value.toLowerCase().includes(H)||L.description.toLowerCase().includes(H)||L.sourceLabel&&L.sourceLabel.toLowerCase().includes(H)}),[g,u,f]);if(T.useEffect(()=>{y(0)},[u,f]),!e||!a||typeof document>"u")return null;const k=typeof window<"u"?window.innerHeight:800,b=typeof window<"u"?window.innerWidth:1280,S=Math.min(380,b-32),j=a.width>=160?a.left:a.right-S,_=Math.min(Math.max(16,j),b-S-16),w=k-a.bottom-16,I=a.top-16,C=w<260&&I>w,N=C?Math.min(400,Math.max(200,I)):Math.min(400,Math.max(200,w)),O=c==="light",E={position:"fixed",...C?{bottom:`${k-a.top+6}px`}:{top:`${a.bottom+6}px`},left:`${_}px`,width:`${S}px`,maxHeight:`${N}px`,zIndex:9999,background:"color-mix(in srgb, var(--cm-surface-1) 97%, transparent)",color:"var(--text-primary)",borderColor:"color-mix(in srgb, var(--cm-data) 28%, transparent)"},R=L=>{L.key==="ArrowDown"?(L.preventDefault(),y(H=>v.length>0?(H+1)%v.length:0)):L.key==="ArrowUp"?(L.preventDefault(),y(H=>v.length>0?(H-1+v.length)%v.length:0)):L.key==="Enter"&&v[h]?(L.preventDefault(),r(v[h].value),t()):L.key==="Escape"&&(L.preventDefault(),t())};return kt.createPortal(o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"suggester-overlay",onClick:t}),o.jsxs("div",{className:`parameter-suggester-popover glass-panel ${O?"theme-light":"theme-dark"}`,"data-mode":c,"data-brand":d,style:E,onKeyDown:R,children:[o.jsxs("div",{className:"suggester-header",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{className:"sparkle-icon",children:o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:"W-LSP 上下文变量补全"}),o.jsxs("span",{style:{fontSize:10,opacity:.65,fontWeight:500},children:["(",v.length,")"]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i&&o.jsx("button",{type:"button",className:"suggester-ai-btn",onClick:i,disabled:l,title:"调用 AI 推理更多上下文表达式",children:l?"AI 思考中...":"AI 推荐"}),o.jsx("button",{type:"button",onClick:t,title:"关闭 (Esc)",style:{background:"none",border:"none",color:"inherit",opacity:.55,cursor:"pointer",padding:"2px 4px",fontSize:12,lineHeight:1},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]})]}),o.jsx("div",{className:"suggester-search-bar",children:o.jsx("input",{ref:x,type:"text",className:"suggester-search-input",placeholder:"搜索上游任务、输出字段或输入参数 (↑↓选择, Enter插入)...",value:f,onChange:L=>m(L.target.value)})}),o.jsx("div",{className:"suggester-tabs",children:[{id:"all",label:"全部"},{id:"upstream",label:"上游输出"},{id:"workflow_input",label:"工作流输入"},{id:"variable",label:"全局变量"},{id:"system",label:"系统"}].map(L=>o.jsx("button",{type:"button",className:`suggester-tab ${u===L.id?"active":""}`,onClick:()=>p(L.id),children:L.label},L.id))}),o.jsx("div",{className:"suggester-list",children:v.length===0?o.jsx("div",{className:"suggester-empty",children:"没有匹配的上下文变量"}):v.map((L,H)=>{const F=qN[L.valueType||"any"]||"var(--text-muted)";return o.jsxs("div",{className:`suggestion-item ${H===h?"active":""}`,onMouseEnter:()=>y(H),onClick:()=>{r(L.value),t()},children:[o.jsxs("div",{className:"suggestion-top-row",children:[o.jsx("span",{className:"suggestion-label",children:L.label}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[L.isConditional&&o.jsx("span",{className:"suggestion-cond-badge",title:"来自条件分支,可能未执行",children:"条件分支"}),L.valueType&&o.jsx("span",{className:"suggestion-type-badge",style:{color:F,borderColor:`${F}44`,background:`${F}15`},children:L.valueType})]})]}),o.jsxs("div",{className:"suggestion-value-row",children:[o.jsx("code",{className:"suggestion-value",children:L.value}),L.sampleValue!==void 0&&o.jsxs("span",{className:"suggestion-sample",title:`真实样本值: ${L.sampleValue}`,children:["= ",L.sampleValue]})]}),o.jsxs("div",{className:"suggestion-desc",children:[L.sourceLabel?`[${L.sourceLabel}] `:"",L.description]})]},`${L.value}-${H}`)})})]})]}),document.body)},BN=({title:e,value:t,language:r="text",placeholder:n="",onSave:s,onClose:a})=>{const{theme:i,themeColor:l}=re($e(m=>({theme:m.theme,themeColor:m.themeColor}))),[c,d]=T.useState(t),u=T.useRef(null);T.useEffect(()=>{u.current?.focus();const m=h=>{h.key==="Escape"&&(h.stopPropagation(),a()),(h.ctrlKey||h.metaKey)&&h.key==="s"&&(h.preventDefault(),h.stopPropagation(),s(c))};return window.addEventListener("keydown",m,!0),()=>window.removeEventListener("keydown",m,!0)},[c,s,a]);const f={javascript:"var(--cm-status-warning)",js:"var(--cm-status-warning)",json:"var(--cm-data)",jq:"var(--cm-status-success)",groovy:"var(--cm-status-success)",python:"var(--cm-ai)",text:"var(--text-secondary)"}[r.toLowerCase()]??"var(--text-secondary)";return kt.createPortal(o.jsxs("div",{"data-mode":i,"data-brand":l,style:{position:"fixed",inset:0,zIndex:3e3,display:"flex",flexDirection:"column",background:"var(--bg-primary)"},onClick:m=>m.stopPropagation(),children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",padding:"10px 20px",background:"var(--bg-secondary)",borderBottom:"1px solid var(--glass-border)",flexShrink:0},children:[o.jsx("span",{style:{fontSize:"11px",fontWeight:700,color:f,background:`${f}18`,border:`1px solid ${f}44`,padding:"2px 8px",borderRadius:"4px",fontFamily:"monospace",letterSpacing:"0.5px",textTransform:"uppercase",flexShrink:0},children:r}),o.jsx("span",{style:{fontSize:"13px",fontWeight:600,color:"var(--text-primary)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),o.jsx("span",{style:{fontSize:"11px",color:"var(--text-secondary)",flexShrink:0},children:"Ctrl+S 保存 · Esc 取消"}),o.jsx("button",{onClick:a,style:{padding:"6px 14px",background:"var(--bg-tertiary)",border:"1px solid var(--glass-border)",borderRadius:"6px",color:"var(--text-primary)",cursor:"pointer",fontSize:"12px",fontWeight:500,flexShrink:0},children:"取消"}),o.jsx("button",{onClick:()=>s(c),style:{padding:"6px 16px",background:"var(--color-accent)",border:"none",borderRadius:"6px",color:"var(--color-on-accent)",cursor:"pointer",fontSize:"12px",fontWeight:600,flexShrink:0},children:"应用"})]}),o.jsx("textarea",{ref:u,value:c,placeholder:n,onChange:m=>d(m.target.value),onKeyDown:m=>m.stopPropagation(),spellCheck:!1,style:{flex:1,width:"100%",padding:"20px 24px",background:"var(--bg-primary)",color:r==="javascript"||r==="js"||r==="groovy"?"var(--color-accent)":"var(--text-primary)",border:"none",outline:"none",resize:"none",fontFamily:'var(--font-mono, "Fira Code", "Cascadia Code", Consolas, monospace)',fontSize:"14px",lineHeight:"1.7",boxSizing:"border-box",caretColor:"var(--color-accent)"}}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",padding:"5px 20px",background:"var(--bg-secondary)",borderTop:"1px solid var(--glass-border)",flexShrink:0,fontSize:"11px",color:"var(--text-secondary)"},children:[o.jsxs("span",{children:[c.split(`
264
+ `).length," 行"]}),o.jsxs("span",{children:[c.length," 字符"]}),c!==t&&o.jsx("span",{style:{color:"var(--cm-status-warning)",fontWeight:600},children:"● 未保存"})]})]}),document.body)},HN=({label:e,value:t,onCommit:r,editable:n,rows:s=5,placeholder:a,style:i,dataField:l,secondaryTextColor:c="var(--text-secondary)",onOpenFullscreen:d,onTextareaFocus:u,onTyping:p,registerApply:f})=>{const[m,h]=T.useState(t),[y,x]=T.useState(!1),[g,v]=T.useState(null);T.useEffect(()=>{!y&&!g&&h(t)},[t,y,g]);const k=S=>{if(S===t){v(null);return}v(r(S))},b=S=>{h(S),k(S)};return T.useEffect(()=>{if(f)return f(b),()=>f(null)}),o.jsxs("div",{style:{marginBottom:"8px"},children:[(e||n&&d)&&o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"4px"},children:[o.jsx("label",{style:{fontSize:"10px",color:c},children:e}),n&&d&&o.jsx("button",{type:"button",onClick:()=>d(m,b),title:"全屏编辑",style:{background:"none",border:"none",cursor:"pointer",padding:"2px 4px",color:"var(--text-secondary)",opacity:.7,lineHeight:1},children:o.jsx(ab,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("textarea",{value:m,placeholder:a,disabled:!n,rows:s,"data-field":l,"aria-invalid":g?!0:void 0,onChange:S=>{const j=S.target.value;h(j),p?.(S.target,j,b)},onFocus:S=>{x(!0),u?.(S.currentTarget)},onBlur:S=>{x(!1),k(S.target.value)},style:{width:"100%",padding:"12px",borderRadius:"8px",border:`1px solid ${g?"var(--cm-status-failed)":"var(--glass-border)"}`,background:"var(--bg-tertiary)",color:"var(--text-primary)",fontSize:"12px",fontFamily:"var(--font-mono, monospace)",lineHeight:"1.5",resize:"vertical",...i,...g?{borderColor:"var(--cm-status-failed)"}:{}}}),g&&o.jsxs("div",{role:"alert",style:{display:"flex",alignItems:"flex-start",gap:"6px",marginTop:"4px",fontSize:"11px",color:"var(--cm-status-failed)",lineHeight:1.5},children:[o.jsx(zt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{flexShrink:0,marginTop:1}}),o.jsx("span",{children:g})]})]})},JN=[{label:"工作流输入",value:"${workflow.input.fieldName}",desc:"引用工作流启动时传入的参数"},{label:"上游任务输出",value:"${taskRef.output.result}",desc:"引用上游任务的输出字段"},{label:"工作流变量",value:"${workflow.variables.varName}",desc:"引用 SET_VARIABLE 设置的变量"},{label:"工作流 ID",value:"${workflow.workflowId}",desc:"当前工作流实例 ID"},{label:"关联 ID",value:"${workflow.correlationId}",desc:"工作流关联 ID"},{label:"工作流状态",value:"${workflow.status}",desc:"当前工作流状态"}],jt=(e,t)=>e?.inputParameters?.[t]??e?.[t];function h1(e){return!e||e.type!=="FORK_JOIN_DYNAMIC"?"classic":jt(e,"forkTaskWorkflow")?"workflow":jt(e,"forkTaskType")||jt(e,"forkTaskName")?"task":"classic"}const UN=({task:e,isOpen:t=!0,onClose:r,aiConfig:n})=>{const{mode:s,updateTask:a,workflowDef:i,executionData:l,workflowInstance:c,lastRefactorNotice:d,clearRefactorNotice:u}=re($e(M=>({mode:M.mode,updateTask:M.updateTask,workflowDef:M.workflowDef,executionData:M.executionData,workflowInstance:M.workflowInstance,lastRefactorNotice:M.lastRefactorNotice,clearRefactorNotice:M.clearRefactorNotice}))),[p,f]=T.useState(e),[m,h]=T.useState(e?.taskReferenceName??null),[y,x]=T.useState(null),[g,v]=T.useState(!1),[k,b]=T.useState(null),[S,j]=T.useState(()=>e?.type==="WAIT"&&e.inputParameters?.until?"until":"duration"),[_,w]=T.useState(()=>e?.type==="DO_WHILE"&&e.inputParameters?.items?"items":"condition"),[I,C]=T.useState(()=>h1(e)),[N,O]=T.useState(!1),[E,R]=T.useState(),[L,H]=T.useState([]),[F,q]=T.useState(()=>()=>{}),A=e?.taskReferenceName||p?.taskReferenceName||"",W=T.useMemo(()=>!i||!A?[]:gv(i,A,l,c?.input),[i,A,l,c?.input]),P=T.useRef({}),[$,X]=T.useState(null),[D,B]=T.useState(null),[U,G]=T.useState(!1),[ne,ye]=T.useState(null),[Q,_e]=T.useState(null),ve=(M,ae,ce,ue)=>{B({title:M,value:ae,language:ce,onSave:ue})},je=M=>[{label:"示例 · 引用工作流输入",value:"${workflow.input.data}",description:`${M},以下为通用示例:引用工作流启动时传入的数据`},{label:"示例 · 引用前序任务输出",value:"${previous_task.output.result}",description:"通用示例:引用上一个节点的输出(请替换为实际任务引用名)"},{label:"示例 · 工作流变量",value:"${workflow.variables.api_key}",description:"通用示例:引用 SET_VARIABLE 设置的变量"}],fe=async()=>{if(!Cn(n)){_e(Nn);return}if(ee){_e(null),G(!0);try{const{workflowDef:M}=re.getState(),ae=Ct(M?.inputParameters,M).map(Pe=>Pe.name),ce=ms(M,ee.taskReferenceName).map(Pe=>({ref:Pe.taskReferenceName,type:Pe.type,name:Pe.name})).slice(0,10),ue={...n},be=await RN(ee.type,ee.taskReferenceName,ae,ce,ee.inputParameters??{},ue);ye({generated:be,original:ee.inputParameters??{}})}catch(M){_e(`AI 填充失败:${M?.message||"AI 服务返回了无法识别的错误,请重试"}`)}finally{G(!1)}}},V=async(M,ae)=>{const ce=M.currentTarget.getBoundingClientRect();if(R(ce),q(()=>ae),O(!0),!(W.length>0)){if(H([]),!Cn(n)){H(je("未配置 AI 服务"));return}try{const ue={...n},{workflowDef:be}=re.getState(),Pe=zN(ee,be),at=(await u1([{role:"system",content:"You are a Conductor workflow expert. Return only valid JSON."},{role:"user",content:Pe}],ue)).match(/\[[\s\S]*\]/);if(at){const Je=JSON.parse(at[0]);H(Je)}else H(je("AI 没有返回可用的建议"))}catch{H(je("AI 建议获取失败"))}}};if(T.useEffect(()=>{e&&(f(e),h(e.taskReferenceName),x(null),X(null),e.type==="WAIT"&&j(e.inputParameters?.until?"until":"duration"),e.type==="DO_WHILE"&&w(e.inputParameters?.items?"items":"condition"),e.type==="FORK_JOIN_DYNAMIC"&&C(h1(e)))},[e]),!e&&!p)return null;const ee=e||p,z=p&&e&&m===e.taskReferenceName?p:ee,Ie=t&&e?"panel-enter-active":"panel-exit",ke=s==="edit",Ne="var(--text-primary)",Te="var(--glass-border)",Se="var(--bg-tertiary)",le="var(--text-secondary)",Ce=(M,ae)=>{const ce={...z,[M]:ae};f(ce),a(z.taskReferenceName,{[M]:ae})},Me=(M,ae,ce)=>{const be={...z[M]||{},[ae]:ce},Pe={...z,[M]:be};f(Pe),a(z.taskReferenceName,{[M]:be})},Ve=(M,ae)=>{const ce=z.inputParameters||{},be={...ce.http_request||z.httpRequest||{},[M]:ae},Fe={inputParameters:{...ce,http_request:be}};z.httpRequest&&(Fe.httpRequest=be);const at={...z,...Fe};f(at),a(z.taskReferenceName,Fe)},Z=(M,ae)=>{const ue={inputParameters:{...z.inputParameters,[M]:ae}},be={...z,...ue};f(be),a(z.taskReferenceName,ue)},oe=M=>{const ae={...z,...M};f(ae),a(z.taskReferenceName,M)},ie=(M,ae,ce)=>{const ue=z.inputParameters||{},be=ue[M]&&typeof ue[M]=="object"?ue[M]:{};Z(M,{...be,[ae]:ce})},ge=(M,ae)=>{const ce={...z.inputParameters||{},[M]:ae};(ae===void 0||ae==="")&&delete ce[M];const ue={inputParameters:ce};z[M]!==void 0&&(ue[M]=void 0),oe(ue)},te=(M,ae)=>{oe(ej(z,M,ae,i?.ownerEmail))},me=M=>{j(M);const ae={...z.inputParameters||{}},ce=M==="duration"?"until":"duration";ae[ce]!==void 0&&(delete ae[ce],oe({inputParameters:ae}))},Re=(M,ae={allowEmpty:!0,requireObject:!0})=>ce=>{const ue=bv(ce,ae);return ue.ok?(M(ue.value),null):ue.error},we=M=>ae=>{const ce=ae.trim();if(ce.startsWith("{")||ce.startsWith("[")){const ue=bv(ce,{allowEmpty:!0});return ue.ok?(M(ue.value),null):ue.error}return M(ae),null},ze=(M,ae="{}")=>M==null?ae:typeof M=="object"?JSON.stringify(M,null,2):String(M),Oe=(M,ae,ce,ue,be={})=>o.jsx(HN,{label:M,value:ce,onCommit:ue,editable:ke,rows:be.rows??5,placeholder:be.placeholder,style:be.style,dataField:be.dataField,secondaryTextColor:le,onOpenFullscreen:(Pe,Fe)=>ve(M||ae,Pe,be.language||"json",at=>{Fe(at),B(null)}),onTextareaFocus:Pe=>b(Pe),registerApply:be.dataField?Pe=>{Pe?P.current[be.dataField]=Pe:delete P.current[be.dataField]}:void 0,onTyping:(Pe,Fe,at)=>{const Je=Pe.selectionStart??0;Je>=2&&Fe.slice(Je-2,Je)==="${"&&(R(Pe.getBoundingClientRect()),q(()=>Qe=>{at(Fe.slice(0,Je-2)+Qe+Fe.slice(Je))}),O(!0))}},`${z.taskReferenceName}:${ae}`),Ee=M=>{if(!k)return;const ae=k.selectionStart??0,ce=k.selectionEnd??0,ue=k.value,be=ue.substring(0,ae)+M+ue.substring(ce),Pe=k.getAttribute("data-field"),Fe=Pe?P.current[Pe]:void 0;Fe?Fe(be):Pe&&Ce(Pe,be),v(!1)},De=(M,ae,ce,ue)=>o.jsxs("div",{style:{marginBottom:"24px",padding:"16px",borderRadius:"12px",background:`color-mix(in srgb, ${ce} 6%, transparent)`,border:`1px solid color-mix(in srgb, ${ce} 19%, transparent)`,boxShadow:"var(--cm-shadow-card)"},children:[o.jsxs("div",{style:{fontSize:"12px",fontWeight:"bold",marginBottom:"16px",color:ce,display:"flex",alignItems:"center",gap:"8px"},children:[o.jsx(ae,{size:14,strokeWidth:1.75,"aria-hidden":"true"})," ",M]}),ue]}),ct=(M,ae,ce="text",ue)=>{const be=ae==="taskReferenceName",Pe=be&&y!==null?y:z[ae]??"",Fe=be&&y!==null?gs(i,String(Pe),z.taskReferenceName):be?$:null,at=!!Fe;return o.jsxs("div",{style:{marginBottom:"16px"},children:[o.jsxs("label",{style:{display:"block",fontSize:"11px",color:le,marginBottom:"6px",fontWeight:"600",textTransform:"uppercase"},children:[M,be&&Fe&&o.jsxs("span",{role:"alert",style:{color:"var(--cm-status-failed)",marginLeft:"8px",textTransform:"none",display:"inline-block",fontWeight:"normal"},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),Fe]})]}),o.jsxs("div",{style:{position:"relative",display:"flex",alignItems:"center"},children:[o.jsx("input",{type:ce,value:Pe,placeholder:ue,onChange:Je=>{const Qe=Je.target.value;if(be)x(Qe);else{Ce(ae,ce==="number"?Qe===""?void 0:Number(Qe):Qe);const ot=Je.target.selectionStart??0;if(ce==="text"&&ot>=2&&Qe.slice(ot-2,ot)==="${"){const dr=Je.target.getBoundingClientRect();R(dr),q(()=>Ir=>{const Pp=Qe.slice(0,ot-2),Ap=Qe.slice(ot);Ce(ae,Pp+Ir+Ap)}),O(!0)}}},onFocus:be?()=>{y===null&&x(z.taskReferenceName??"")}:void 0,onBlur:be?Je=>{const Qe=Je.target.value.trim();if(Qe===z.taskReferenceName){x(null),X(null);return}const ot=gs(i,Qe,z.taskReferenceName);if(ot){X(ot);return}x(null),X(null),Ce("taskReferenceName",Qe)}:void 0,onKeyDown:be?Je=>{Je.key==="Enter"&&Je.currentTarget.blur(),Je.stopPropagation()}:void 0,disabled:!ke,style:{width:"100%",padding:`8px ${ke&&!be?"32px":"12px"} 8px 12px`,borderRadius:"6px",border:`1px solid ${at?"var(--cm-status-failed)":Te}`,background:Se,color:Ne,fontSize:"13px",outline:"none",opacity:ke?1:.8,fontFamily:be?"monospace":"inherit"}}),ke&&!be&&o.jsx("button",{className:"ai-hint-trigger",onClick:Je=>V(Je,Qe=>Ce(ae,Qe)),title:"AI 智能提示",style:{position:"absolute",right:"8px",background:"none",border:"none",cursor:"pointer",fontSize:"14px",padding:"4px",opacity:.6,display:"flex",alignItems:"center",justifyContent:"center"},children:o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]})]})},st=(M,ae,ce,ue={})=>{const{rows:be=5,language:Pe="text",style:Fe,placeholder:at,"data-field":Je}=ue,Qe={width:"100%",padding:"12px",borderRadius:"8px",border:`1px solid ${Te}`,background:Se,color:Ne,fontSize:"12px",fontFamily:"monospace",lineHeight:"1.5",resize:"vertical",...Fe};return o.jsxs("div",{style:{marginBottom:"8px"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"4px"},children:[o.jsx("label",{style:{fontSize:"10px",color:le},children:M}),ke&&o.jsx("button",{onClick:()=>ve(M,ae,Pe,ot=>{ce(ot),B(null)}),title:"全屏编辑",style:{background:"none",border:"none",cursor:"pointer",fontSize:"14px",padding:"2px 4px",color:"var(--text-secondary)",opacity:.7,lineHeight:1},children:o.jsx(ab,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("textarea",{value:ae,placeholder:at,onChange:ot=>{const dr=ot.target.value;ce(dr);const Ir=ot.target.selectionStart??0;if(Ir>=2&&dr.slice(Ir-2,Ir)==="${"){const Pp=ot.target.getBoundingClientRect();R(Pp),q(()=>Ap=>{const yE=dr.slice(0,Ir-2),gE=dr.slice(Ir);ce(yE+Ap+gE)}),O(!0)}},disabled:!ke,rows:be,"data-field":Je,onFocus:ot=>b(ot.currentTarget),style:Qe})]})},de=(M,ae,ce,ue="text",be)=>o.jsxs("div",{style:{marginBottom:"12px"},children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:M}),o.jsx("input",{type:ue,value:ae??"",placeholder:be,onChange:Pe=>{const Fe=Pe.target.value;ce(ue==="number"?Fe===""?void 0:Number(Fe):Fe);const at=Pe.target.selectionStart??0;if(ue==="text"&&at>=2&&Fe.slice(at-2,at)==="${"){const Je=Pe.target.getBoundingClientRect();R(Je),q(()=>Qe=>{const ot=Fe.slice(0,at-2),dr=Fe.slice(at);ce(ot+Qe+dr)}),O(!0)}},disabled:!ke,style:{width:"100%",padding:"8px 10px",borderRadius:"6px",border:`1px solid ${Te}`,background:Se,color:Ne,fontSize:"12px",outline:"none"}})]}),Ye=(M,ae,ce,ue)=>o.jsxs("div",{style:{marginBottom:"12px"},children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:M}),o.jsx("select",{value:ce,onChange:be=>ue(be.target.value),disabled:!ke,style:{width:"100%",padding:"8px 10px",borderRadius:"6px",border:`1px solid ${Te}`,background:Se,color:Ne,fontSize:"12px",outline:"none",cursor:"pointer"},children:ae.map(be=>o.jsx("option",{value:be,children:be},be))})]}),se=(M,ae,ce)=>o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"12px"},children:[o.jsx("span",{style:{fontSize:"11px",color:le},children:M}),o.jsx("button",{onClick:()=>ce(!ae),disabled:!ke,style:{width:"36px",height:"20px",borderRadius:"10px",border:"none",cursor:"pointer",background:ae?"var(--color-accent)":Te,position:"relative",transition:"background 0.2s"},children:o.jsx("span",{style:{position:"absolute",top:"2px",left:ae?"18px":"2px",width:"16px",height:"16px",borderRadius:"50%",background:"var(--cm-surface-1)",transition:"left 0.2s"}})})]}),Ae=(M,ae,ce)=>o.jsx("div",{style:{display:"flex",gap:"6px",marginBottom:"12px"},children:M.map(ue=>o.jsx("button",{onClick:()=>ce(ue.key),disabled:!ke,style:{flex:1,padding:"6px",borderRadius:"6px",border:`1px solid ${Te}`,cursor:"pointer",fontSize:"11px",fontWeight:ae===ue.key?"bold":"normal",background:ae===ue.key?"var(--color-accent)":Se,color:ae===ue.key?"var(--color-on-accent)":Ne},children:ue.label},ue.key))}),qe=z.inputParameters?.http_request||z.httpRequest||{},cr=z.inputParameters?.evaluatorType||z.evaluatorType||"graaljs",ht=z.inputParameters?.kafka_request||{},Tr=M=>ht[M]??z.inputParameters?.[M],ca=z.evaluatorType||"value-param",p0=z.expression??(ca==="value-param"?z.caseValueParam:z.caseExpression)??"",f0=M=>({expression:M,...z.caseValueParam!==void 0&&ca==="value-param"?{caseValueParam:M}:{},...z.caseExpression!==void 0?{caseExpression:void 0}:{}});return o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:`detail-panel-container ${Ie}`,style:{position:"absolute",right:0,top:0,bottom:0,width:"450px",zIndex:1200,display:"flex",flexDirection:"column",background:"var(--bg-primary)",borderLeft:`1px solid ${Te}`,boxShadow:"var(--cm-shadow-float)",overflowY:"hidden"},children:[o.jsxs("div",{style:{padding:"24px",borderBottom:`1px solid ${Te}`,background:"var(--bg-secondary)",flexShrink:0},children:[o.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"},children:[o.jsx("div",{style:{background:"var(--color-accent)",color:"var(--color-on-accent)",padding:"2px 8px",borderRadius:"4px",fontSize:"10px",fontWeight:"bold",letterSpacing:"1px"},children:z.type||"TASK"}),o.jsx("button",{onClick:r,style:{background:"none",border:"none",color:Ne,cursor:"pointer",fontSize:"20px"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),ke?o.jsx("input",{value:z.name||"",onChange:M=>Ce("name",M.target.value),placeholder:"任务名称",style:{display:"block",width:"100%",fontSize:"22px",fontWeight:"bold",background:"transparent",border:"none",color:Ne,outline:"none",borderBottom:"2px dashed var(--color-accent)"}}):o.jsx("div",{style:{fontSize:"22px",fontWeight:"bold"},children:z.name}),o.jsxs("div",{style:{fontSize:"12px",color:le,marginTop:"8px",fontFamily:"monospace",opacity:.8},children:["REF: ",z.taskReferenceName]})]}),o.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"24px",background:"var(--bg-primary)"},children:[z.type==="HTTP"&&De("HTTP 请求配置",Ts,"var(--color-accent)",o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{display:"flex",gap:"8px",marginBottom:"12px"},children:[o.jsx("select",{value:qe.method||"GET",onChange:M=>Ve("method",M.target.value),disabled:!ke,style:{width:"90px",padding:"10px",borderRadius:"8px",background:Se,color:Ne,border:`1px solid ${Te}`,cursor:"pointer"},children:["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].map(M=>o.jsx("option",{value:M,children:M},M))}),o.jsx("input",{placeholder:"URI (支持 ${workflow.input.uri})",value:qe.uri||"",onChange:M=>Ve("uri",M.target.value),disabled:!ke,style:{flex:1,padding:"10px",borderRadius:"8px",background:Se,color:Ne,border:`1px solid ${Te}`}})]}),o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px",marginBottom:"12px"},children:[o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"CONTENT-TYPE"}),o.jsx("input",{placeholder:"application/json",value:qe.contentType||"",onChange:M=>Ve("contentType",M.target.value),disabled:!ke,style:{width:"100%",padding:"8px",borderRadius:"6px",background:Se,color:Ne,border:`1px solid ${Te}`,fontSize:"12px"}})]}),o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"ACCEPT"}),o.jsx("input",{placeholder:"application/json",value:qe.accept||"",onChange:M=>Ve("accept",M.target.value),disabled:!ke,style:{width:"100%",padding:"8px",borderRadius:"6px",background:Se,color:Ne,border:`1px solid ${Te}`,fontSize:"12px"}})]})]}),o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px",marginBottom:"12px"},children:[o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"连接超时 (ms)"}),o.jsx("input",{type:"number",placeholder:"3000",value:qe.connectionTimeOut??"",onChange:M=>Ve("connectionTimeOut",M.target.value===""?void 0:Number(M.target.value)),disabled:!ke,style:{width:"100%",padding:"8px",borderRadius:"6px",background:Se,color:Ne,border:`1px solid ${Te}`,fontSize:"12px"}})]}),o.jsxs("div",{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"读取超时 (ms)"}),o.jsx("input",{type:"number",placeholder:"3000",value:qe.readTimeOut??"",onChange:M=>Ve("readTimeOut",M.target.value===""?void 0:Number(M.target.value)),disabled:!ke,style:{width:"100%",padding:"8px",borderRadius:"6px",background:Se,color:Ne,border:`1px solid ${Te}`,fontSize:"12px"}})]})]}),Oe("HEADERS (JSON)","http_headers",ze(qe.headers),Re(M=>Ve("headers",M)),{rows:3}),Oe("BODY (RAW/JSON)","http_body",ze(qe.body,""),we(M=>Ve("body",M===""?void 0:M)),{rows:4})]})),(z.type==="INLINE"||z.type==="LAMBDA")&&De("内联脚本配置 (Inline)",TT,"var(--color-accent)",o.jsxs(o.Fragment,{children:[z.type==="INLINE"&&Ye("脚本引擎 (inputParameters.evaluatorType)",["graaljs","javascript","value-param","python"],cr,M=>ge("evaluatorType",M)),st(`EXPRESSION ${cr==="value-param"?"(值引用)":"(脚本)"}`,z.inputParameters?.expression||z.inputParameters?.scriptExpression||"",M=>{const ae=z.inputParameters?.scriptExpression!==void 0?"scriptExpression":"expression";Z(ae,M)},{rows:10,language:cr==="value-param"?"text":"javascript",style:{background:"var(--cm-overlay)",color:"var(--color-accent)",border:"1px solid var(--color-accent)"}}),o.jsx("div",{style:{marginTop:"8px",fontSize:"10px",color:le,fontStyle:"italic"},children:"提示: 使用 $.input.key 访问输入参数,返回值作为任务输出。"})]})),z.type==="JSON_JQ_TRANSFORM"&&De("JQ 数据转换",Iu,"var(--color-accent)",o.jsxs(o.Fragment,{children:[st("JQ QUERY EXPRESSION",z.inputParameters?.queryExpression||"",M=>Z("queryExpression",M),{rows:6,language:"jq",style:{color:"var(--color-accent)"}}),o.jsx("div",{style:{marginTop:"8px",fontSize:"10px",color:le},children:"输出字段: result(首个结果)、resultList(完整列表)"})]})),z.type==="SUB_WORKFLOW"&&De("子工作流配置",AT,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("WORKFLOW NAME *",z.subWorkflowParam?.name||"",M=>Me("subWorkflowParam","name",M),"text","e.g. my_workflow"),de("VERSION",z.subWorkflowParam?.version??"",M=>Me("subWorkflowParam","version",M?parseInt(M):void 0),"number","1"),Oe("INPUT PARAMETERS MAPPING (JSON)","sub_inputs",ze(z.inputParameters),Re(M=>Ce("inputParameters",M)),{rows:5}),o.jsxs("div",{style:{fontSize:"10px",color:le,marginTop:"4px"},children:["传递给子工作流的参数,支持 ","${workflow.input.xxx}"," 表达式"]})]})),z.type==="START_WORKFLOW"&&De("启动工作流配置",fn,"var(--color-accent)",o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{fontSize:"11px",color:le,marginBottom:"12px",padding:"8px",borderRadius:"6px",background:"var(--cm-warning-tint)",border:"1px solid color-mix(in srgb, var(--cm-status-warning) 35%, transparent)"},children:[o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"注意:此任务启动目标工作流后立即继续,",o.jsx("b",{children:"不等待"}),"目标工作流完成。"]}),de("WORKFLOW NAME *",z.inputParameters?.startWorkflow?.name||"",M=>{const ae={...z.inputParameters?.startWorkflow||{},name:M};Z("startWorkflow",ae)},"text","e.g. target_workflow"),de("VERSION",z.inputParameters?.startWorkflow?.version??"",M=>{const ae={...z.inputParameters?.startWorkflow||{},version:M?parseInt(M):void 0};Z("startWorkflow",ae)},"number","1"),de("CORRELATION ID",z.inputParameters?.startWorkflow?.correlationId||"",M=>{const ae={...z.inputParameters?.startWorkflow||{},correlationId:M};Z("startWorkflow",ae)},"text","${workflow.correlationId}"),Oe("WORKFLOW INPUT (JSON)","start_input",ze(z.inputParameters?.startWorkflow?.input),Re(M=>Z("startWorkflow",{...z.inputParameters?.startWorkflow||{},input:M})),{rows:4})]})),z.type==="TERMINATE"&&De("终止状态配置",Nu,"var(--color-accent)",o.jsxs(o.Fragment,{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"TERMINATION STATUS"}),o.jsx("div",{style:{display:"flex",gap:"8px",marginBottom:"16px"},children:["COMPLETED","FAILED","TERMINATED"].map(M=>o.jsx("button",{onClick:()=>Z("terminationStatus",M),disabled:!ke,style:{flex:1,padding:"8px",borderRadius:"6px",cursor:"pointer",background:(z.inputParameters?.terminationStatus||"COMPLETED")===M?"var(--color-accent)":Se,color:(z.inputParameters?.terminationStatus||"COMPLETED")===M?"var(--color-on-accent)":Ne,border:`1px solid ${Te}`,fontWeight:"bold",fontSize:"11px"},children:M},M))}),de("TERMINATION REASON",z.inputParameters?.terminationReason||"",M=>Z("terminationReason",M),"text","终止原因..."),Oe("WORKFLOW OUTPUT (JSON)","terminate_output",ze(z.inputParameters?.workflowOutput),Re(M=>Z("workflowOutput",M)),{rows:3})]})),z.type==="EVENT"&&De("事件发送配置",sb,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("EVENT SINK *",z.sink||"",M=>Ce("sink",M),"text","e.g. sqs:queue_name 或 conductor"),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"4px",marginBottom:"8px"},children:"支持前缀: conductor | sqs | kafka | amqp | nats"}),se("异步完成 (asyncComplete)",!!z.asyncComplete,M=>Ce("asyncComplete",M))]})),z.type==="WAIT"&&De("等待状态配置",Su,"var(--color-accent)",o.jsxs(o.Fragment,{children:[Ae([{key:"duration",label:"等待时长"},{key:"until",label:"等待到指定时间"}],S,M=>me(M)),S==="duration"?de("DURATION",z.inputParameters?.duration||"",M=>Z("duration",M),"text","e.g. 30s, 10m, 2 hours"):de("UNTIL (时间点)",z.inputParameters?.until||"",M=>Z("until",M),"text","e.g. 2025-06-15 09:00 GMT+00:00"),o.jsxs("div",{style:{fontSize:"11px",color:le,lineHeight:"1.6",marginTop:"8px"},children:["此任务会使工作流进入 ",o.jsx("b",{children:"IN_PROGRESS"})," 状态,直到时间满足或外部 API 触发完成。"]})]})),z.type==="SWITCH"&&De("条件分支配置",Tu,"var(--color-accent)",o.jsxs(o.Fragment,{children:[Ye("评估模式 (evaluatorType)",["value-param","javascript","graaljs"],ca,M=>Ce("evaluatorType",M)),ca==="value-param"?o.jsxs(o.Fragment,{children:[de("EXPRESSION (inputParameters 中的参数名) *",p0,M=>oe(f0(M)),"text","e.g. switchCaseValue"),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"-4px",marginBottom:"8px"},children:"运行时取 inputParameters 中该参数的值,与分支名匹配"})]}):st("EXPRESSION (脚本) *",p0,M=>oe(f0(M)),{rows:4,language:"javascript",style:{color:"var(--color-accent)"}}),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"8px"},children:'分支可在图中通过右键节点→"添加分支"进行管理'})]})),z.type==="DECISION"&&De("条件分支配置(DECISION)",Tu,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("CASE VALUE PARAM (参数名)",z.caseValueParam||"",M=>Ce("caseValueParam",M),"text","e.g. status"),st("CASE EXPRESSION (JS,可选)",z.caseExpression||"",M=>Ce("caseExpression",M),{rows:4,language:"javascript",style:{color:"var(--color-accent)"}}),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"8px"},children:'分支可在图中通过右键节点→"添加分支"进行管理'})]})),z.type==="DO_WHILE"&&De("循环逻辑配置",Dr,"var(--color-accent)",o.jsxs(o.Fragment,{children:[Ae([{key:"condition",label:"条件循环"},{key:"items",label:"列表迭代"}],_,M=>w(M)),_==="condition"?o.jsxs(o.Fragment,{children:[st("LOOP CONDITION (JS) *",z.loopCondition||"",M=>Ce("loopCondition",M),{rows:4,language:"javascript",style:{color:"var(--color-accent)"}}),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"4px"},children:"条件为 true 时继续循环,false 时退出"})]}):o.jsxs(o.Fragment,{children:[o.jsx("label",{style:{display:"block",fontSize:"10px",color:le,marginBottom:"4px"},children:"ITEMS (列表表达式)"}),o.jsx("input",{value:z.inputParameters?.items||"",onChange:M=>Z("items",M.target.value),disabled:!ke,placeholder:"${workflow.input.myList}",style:{width:"100%",padding:"8px",borderRadius:"6px",border:`1px solid ${Te}`,background:Se,color:Ne,fontSize:"12px",outline:"none"}}),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"4px"},children:"引用一个数组,对每个元素执行一次循环体"})]}),o.jsx("div",{style:{marginTop:"12px"},children:de("KEEP LAST N 次迭代",z.keepLastN??"",M=>Ce("keepLastN",M?parseInt(M):void 0),"number","0 = 保留全部")})]})),z.type==="FORK_JOIN_DYNAMIC"&&De("动态并行配置",Ot,"var(--color-accent)",o.jsxs(o.Fragment,{children:[Ae([{key:"classic",label:"经典模式"},{key:"task",label:"任务简化"},{key:"workflow",label:"工作流简化"}],I,M=>C(M)),I==="classic"&&o.jsxs(o.Fragment,{children:[de("DYNAMIC_FORK_TASKS_PARAM",z.dynamicForkTasksParam||"",M=>Ce("dynamicForkTasksParam",M),"text","e.g. dynamic_tasks"),de("DYNAMIC_FORK_TASKS_INPUT_PARAM",z.dynamicForkTasksInputParamName||"",M=>Ce("dynamicForkTasksInputParamName",M),"text","e.g. input"),o.jsx("div",{style:{fontSize:"10px",color:le},children:"经典模式:通过 inputParameters 传入 dynamicTasks 数组和 dynamicTasksInput 映射"})]}),I==="task"&&o.jsxs(o.Fragment,{children:[de("FORK TASK TYPE *",jt(z,"forkTaskType")||"",M=>ge("forkTaskType",M),"text","e.g. HTTP"),de("FORK TASK NAME (仅 SIMPLE 任务)",jt(z,"forkTaskName")||"",M=>ge("forkTaskName",M),"text","e.g. my_task"),de("FORK TASK INPUTS",typeof jt(z,"forkTaskInputs")=="string"?jt(z,"forkTaskInputs"):"",M=>ge("forkTaskInputs",M),"text","${workflow.input.items}"),o.jsx("div",{style:{fontSize:"10px",color:le},children:"所有分支执行相同任务类型,每个元素作为一个分支输入;以上字段写入 inputParameters"})]}),I==="workflow"&&o.jsxs(o.Fragment,{children:[de("FORK WORKFLOW NAME *",jt(z,"forkTaskWorkflow")||"",M=>ge("forkTaskWorkflow",M),"text","e.g. sub_workflow"),de("WORKFLOW VERSION",jt(z,"forkTaskWorkflowVersion")??"",M=>ge("forkTaskWorkflowVersion",M),"text","1"),de("FORK TASK INPUTS",typeof jt(z,"forkTaskInputs")=="string"?jt(z,"forkTaskInputs"):"",M=>ge("forkTaskInputs",M),"text","${workflow.input.items}"),o.jsx("div",{style:{fontSize:"10px",color:le},children:"所有分支执行相同子工作流,每个元素作为一个子工作流输入;以上字段写入 inputParameters"})]})]})),z.type==="DYNAMIC"&&De("动态任务配置",RT,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("DYNAMIC TASK NAME PARAM *",z.dynamicTaskNameParam||"",M=>Ce("dynamicTaskNameParam",M),"text","e.g. taskToExecute"),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"4px"},children:'运行时从 inputParameters 的指定键中读取实际任务类型名(如 "HTTP"、"SIMPLE")'})]})),z.type==="HUMAN"&&De("人工审批配置",Eu,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("表单模板名 (userFormTemplate)",z.humanTaskDef?.userFormTemplate||"",M=>Me("humanTaskDef","userFormTemplate",M),"text","e.g. approval_form"),Ye("分配策略 (assignmentCompletionStrategy)",["LEAVE_OPEN","TERMINATE"],z.humanTaskDef?.assignmentCompletionStrategy||"LEAVE_OPEN",M=>Me("humanTaskDef","assignmentCompletionStrategy",M)),de("显示名称 (displayName)",z.humanTaskDef?.displayName||"",M=>Me("humanTaskDef","displayName",M),"text","审批任务")]})),z.type==="KAFKA_PUBLISH"&&De("Kafka 推送配置",ub,"var(--color-accent)",o.jsxs(o.Fragment,{children:[de("BOOTSTRAP SERVERS *",Tr("bootStrapServers")||"",M=>ie("kafka_request","bootStrapServers",M),"text","localhost:9092"),de("TOPIC *",Tr("topic")||"",M=>ie("kafka_request","topic",M),"text","my_topic"),de("KEY (消息分区键)",Tr("key")||"",M=>ie("kafka_request","key",M),"text",""),Oe("VALUE (消息内容)","kafka_value",ze(Tr("value"),""),we(M=>ie("kafka_request","value",M)),{rows:4}),Oe("HEADERS (JSON)","kafka_headers",ze(Tr("headers")),Re(M=>ie("kafka_request","headers",M)),{rows:3}),o.jsx("div",{style:{fontSize:"10px",color:le,marginTop:"4px"},children:"以上字段写入 inputParameters.kafka_request"})]})),z.type==="SET_VARIABLE"&&De("变量配置",lb,"var(--color-accent)",o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{fontSize:"11px",color:le,marginBottom:"12px"},children:["在 inputParameters 中定义要设置的变量名和值,后续任务通过 ","${workflow.variables.varName}"," 访问。"]}),Oe("VARIABLES (JSON)","set_variables",ze(z.inputParameters),Re(M=>Ce("inputParameters",M)),{rows:6})]})),o.jsxs("div",{style:{marginTop:"32px",borderTop:`1px solid ${Te}`,paddingTop:"24px"},children:[o.jsx("div",{style:{fontSize:"11px",fontWeight:"bold",marginBottom:"16px",opacity:.6,textTransform:"uppercase",letterSpacing:"1px"},children:"通用参数与属性"}),ct("任务唯一引用名 (Reference Name)","taskReferenceName"),d&&d.newRef===z.taskReferenceName&&o.jsxs("div",{style:{marginBottom:"16px",padding:"10px 12px",borderRadius:"8px",background:"color-mix(in srgb, var(--cm-status-success) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-success) 35%, transparent)",display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"8px"},children:[o.jsxs("div",{style:{fontSize:"11px",color:"var(--cm-status-success)",lineHeight:1.5},children:[o.jsxs("b",{children:[o.jsx(_u,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"W-LSP 全图级联重构已生效"]}),o.jsx("br",{}),"引用名 ",o.jsx("code",{children:d.oldRef})," → ",o.jsx("code",{children:d.newRef}),",已自动同步 ",o.jsx("b",{children:d.replacedCount})," 处下游表达式(涉及节点:",d.affectedTasks.join(", "),")"]}),o.jsx("button",{onClick:u,style:{background:"none",border:"none",color:"var(--cm-status-success)",cursor:"pointer",fontSize:"12px",padding:"2px"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),ct("任务描述","description"),o.jsxs("div",{style:{marginBottom:"16px"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"6px",gap:"6px"},children:[o.jsxs("label",{style:{fontSize:"11px",color:le,fontWeight:"600",textTransform:"uppercase",flex:1},children:["输入参数 (inputParameters) ",o.jsxs("span",{style:{opacity:.5,fontWeight:"normal"},children:["(JSON / 输入 $","{"," 自动补全)"]})]}),ke&&o.jsxs("div",{style:{display:"flex",gap:"6px"},children:[o.jsxs("button",{onClick:M=>{const ae=M.currentTarget.getBoundingClientRect();R(ae),q(()=>ce=>{if(k)Ee(ce);else{const ue=typeof z.inputParameters=="object"&&z.inputParameters!==null?{...z.inputParameters}:{};ue[`param_${Object.keys(ue).length+1}`]=ce,Ce("inputParameters",ue)}}),O(!0)},title:"打开 W-LSP 上游变量与 Schema 零延迟补全器",style:{fontSize:"11px",background:"color-mix(in srgb, var(--cm-data) 14%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-data) 35%, transparent)",borderRadius:"4px",padding:"2px 8px",cursor:"pointer",color:"var(--cm-data)",fontWeight:600,display:"flex",alignItems:"center",gap:"4px"},children:[o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"变量补全"]}),o.jsxs("button",{onClick:fe,disabled:U,title:"AI 根据上下文自动生成 inputParameters",style:{fontSize:"11px",background:"var(--cm-ai)",border:"none",borderRadius:"4px",padding:"2px 8px",cursor:U?"not-allowed":"pointer",color:"var(--cm-surface-0)",fontWeight:600,display:"flex",alignItems:"center",gap:"4px",opacity:U?.7:1},children:[U?o.jsx(Su,{size:12,strokeWidth:1.75,"aria-hidden":"true"}):o.jsx(Rt,{size:12,strokeWidth:1.75,"aria-hidden":"true"})," AI 填充"]}),o.jsxs("button",{onClick:()=>v(!g),title:"快捷表达式",style:{fontSize:"11px",background:g?"var(--color-accent)":"none",border:`1px solid ${Te}`,borderRadius:"4px",padding:"2px 6px",cursor:"pointer",color:g?"var(--color-on-accent)":le},children:["{}"," 片段"]})]})]}),g&&o.jsx("div",{style:{marginBottom:"8px",padding:"8px",borderRadius:"6px",border:`1px solid ${Te}`,background:"var(--bg-secondary)",display:"flex",flexWrap:"wrap",gap:"6px"},children:JN.map(M=>o.jsx("button",{onClick:()=>Ee(M.value),title:M.desc,style:{fontSize:"10px",padding:"3px 8px",borderRadius:"4px",border:`1px solid ${Te}`,background:Se,color:Ne,cursor:"pointer",fontFamily:"monospace"},children:M.label},M.value))}),Q&&o.jsxs("div",{role:"alert",style:{marginBottom:"8px",padding:"6px 10px",borderRadius:"6px",fontSize:"11px",lineHeight:1.5,display:"flex",alignItems:"flex-start",gap:"6px",color:"var(--text-secondary)",border:"1px solid color-mix(in srgb, var(--cm-status-warning) 35%, transparent)",background:"color-mix(in srgb, var(--cm-status-warning) 8%, transparent)"},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{flexShrink:0,marginTop:1,color:"var(--cm-status-warning)"}}),o.jsx("span",{style:{flex:1},children:Q}),o.jsx("button",{onClick:()=>_e(null),"aria-label":"关闭提示",style:{background:"none",border:"none",cursor:"pointer",color:"var(--text-muted)",padding:0},children:o.jsx(Le,{size:12,strokeWidth:1.75,"aria-hidden":"true"})})]}),ne&&o.jsxs("div",{style:{marginBottom:"8px",borderRadius:"8px",border:"1px solid color-mix(in srgb, var(--cm-ai) 19%, transparent)",background:"color-mix(in srgb, var(--cm-ai) 3%, transparent)",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"8px 12px",background:"color-mix(in srgb, var(--cm-ai) 9%, transparent)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("span",{style:{fontSize:"11px",fontWeight:700,color:"var(--cm-ai)"},children:[o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"AI 建议的 inputParameters"]}),o.jsxs("div",{style:{display:"flex",gap:"6px"},children:[o.jsx("button",{onClick:()=>{Ce("inputParameters",ne.generated),ye(null)},style:{fontSize:"11px",background:"var(--cm-ai)",color:"var(--cm-surface-0)",border:"none",borderRadius:"4px",padding:"3px 10px",cursor:"pointer",fontWeight:600,fontFamily:"inherit"},children:"应用"}),o.jsx("button",{onClick:()=>ye(null),style:{fontSize:"11px",background:"none",color:le,border:`1px solid ${Te}`,borderRadius:"4px",padding:"3px 8px",cursor:"pointer",fontFamily:"inherit"},children:"取消"})]})]}),o.jsx("pre",{style:{margin:0,padding:"10px 12px",fontSize:"12px",fontFamily:"var(--font-mono)",overflowX:"auto",color:Ne,maxHeight:"180px",overflowY:"auto"},children:JSON.stringify(ne.generated,null,2)})]}),Oe("","inputParameters",ze(z.inputParameters),Re(M=>Ce("inputParameters",M)),{rows:5,dataField:"inputParameters",style:{outline:"none"}})]}),o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"12px"},children:[ct("重试次数","retryCount","number"),de("超时限制 (秒,taskDefinition)",vs(z,"timeoutSeconds")??"",M=>te("timeoutSeconds",M),"number","0 表示不限制")]}),o.jsxs("details",{style:{marginTop:"16px"},children:[o.jsx("summary",{style:{fontSize:"11px",cursor:"pointer",color:le,userSelect:"none",fontWeight:"600"},children:"▸ 执行控制(高级)"}),o.jsxs("div",{style:{marginTop:"12px"},children:[o.jsxs("div",{style:{fontSize:"11px",color:le,marginBottom:"12px",padding:"8px",borderRadius:"6px",background:"var(--cm-warning-tint)",border:"1px solid color-mix(in srgb, var(--cm-status-warning) 35%, transparent)",lineHeight:1.6},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"超时、重试策略、重试延迟写入任务内嵌定义 ",o.jsx("code",{children:"taskDefinition"}),"。设置后 Conductor 会用这份内嵌定义代替同名的已注册任务定义;如需沿用注册中心的配置,请在任务定义中修改。"]}),Ye("重试策略 (taskDefinition.retryLogic)",["FIXED","EXPONENTIAL_BACKOFF","LINEAR_BACKOFF"],vs(z,"retryLogic")||"FIXED",M=>te("retryLogic",M)),de("重试延迟 (秒,taskDefinition)",vs(z,"retryDelaySeconds")??"",M=>te("retryDelaySeconds",M),"number","0"),Ye("超时策略 (taskDefinition.timeoutPolicy)",["TIME_OUT_WF","ALERT_ONLY","RETRY"],vs(z,"timeoutPolicy")||"TIME_OUT_WF",M=>te("timeoutPolicy",M)),de("启动延迟 (秒)",z.startDelay??"",M=>Ce("startDelay",M?parseInt(M):void 0),"number","0"),se("可选任务 (optional) — 失败不影响工作流",!!z.optional,M=>Ce("optional",M)),se("异步完成 (asyncComplete)",!!z.asyncComplete,M=>Ce("asyncComplete",M))]})]})]}),o.jsx("div",{style:{marginTop:"48px",opacity:.6},children:o.jsxs("details",{children:[o.jsx("summary",{style:{fontSize:"11px",cursor:"pointer",marginBottom:"8px"},children:"查看完整 JSON (只读)"}),o.jsx("pre",{style:{background:"var(--cm-surface-0)",padding:"16px",borderRadius:"8px",fontSize:"10px",overflow:"auto",border:`1px solid ${Te}`,color:le},children:JSON.stringify(z,null,2)})]})})]}),ke&&o.jsxs("div",{style:{padding:"24px",borderTop:`1px solid ${Te}`,background:"var(--bg-secondary)",display:"flex",gap:"12px",flexShrink:0},children:[o.jsxs("div",{style:{flex:1,fontSize:"11px",color:le,display:"flex",alignItems:"center"},children:[o.jsx(gu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"所有修改已实时同步"]}),o.jsx("button",{onClick:r,style:{padding:"10px 24px",background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",borderRadius:"8px",fontWeight:"bold",cursor:"pointer",boxShadow:"0 4px 12px var(--color-accent-bg)"},children:"完成退出"})]}),o.jsx(FN,{isOpen:N,onClose:()=>O(!1),onSelect:F,suggestions:L,wlspItems:W,anchorRect:E})]}),D&&o.jsx(BN,{title:D.title,value:D.value,language:D.language,onSave:D.onSave,onClose:()=>B(null)})]})},VN=T.memo(UN),y1=({keyName:e,value:t,path:r,depth:n,defaultExpanded:s,forceExpandAll:a,searchQuery:i,onCopyExpr:l,copiedPath:c,buildExpr:d})=>{const u=t!==null&&typeof t=="object",p=Array.isArray(t),[f,m]=T.useState(s),h=a!==null?a:f,y=d(r);if(!T.useMemo(()=>{if(!i.trim())return!0;const S=i.toLowerCase();if(e!==void 0&&String(e).toLowerCase().includes(S))return!0;try{return JSON.stringify(t).toLowerCase().includes(S)}catch{return!1}},[e,t,i]))return null;if(!u){let S="var(--text-primary)",j=String(t);return typeof t=="string"?(S="var(--cm-status-success)",j=`"${t}"`):typeof t=="number"?S="var(--cm-status-warning)":typeof t=="boolean"?S="var(--cm-cat-human)":t==null&&(S="var(--text-muted)",j="null"),o.jsxs("div",{className:"sjson-row",style:{paddingLeft:`${n*14}px`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",paddingTop:"2px",paddingBottom:"2px",borderRadius:"4px",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:[o.jsxs("div",{style:{wordBreak:"break-all",lineHeight:1.45},children:[e!==void 0&&o.jsxs("span",{style:{color:"var(--color-accent)"},children:[typeof e=="number"?`[${e}]`:`"${e}"`,o.jsx("span",{style:{color:"var(--text-muted)"},children:": "})]}),o.jsx("span",{style:{color:S},children:j})]}),y&&o.jsx("button",{type:"button",onClick:_=>{_.stopPropagation(),l(y)},title:`复制表达式 ${y}`,style:{flexShrink:0,fontSize:"10px",padding:"1px 6px",borderRadius:"4px",border:"1px solid color-mix(in srgb, var(--cm-data) 30%, transparent)",background:c===y?"color-mix(in srgb, var(--cm-status-success) 20%, transparent)":"color-mix(in srgb, var(--cm-data) 8%, transparent)",color:c===y?"var(--cm-status-success)":"var(--cm-data)",cursor:"pointer",opacity:.85,fontFamily:"inherit"},children:c===y?"已复制":"${} 引用"})]})}const g=p?t.map((S,j)=>[j,S]):Object.entries(t),v=p?"[":"{",k=p?"]":"}",b=p?`${g.length} items`:`${g.length} keys`;return o.jsxs("div",{children:[o.jsxs("div",{onClick:()=>m(!h),style:{paddingLeft:`${n*14}px`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",paddingTop:"2px",paddingBottom:"2px",cursor:"pointer",userSelect:"none",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[o.jsx("span",{style:{color:"var(--text-muted)",width:"10px",display:"inline-flex"},children:h?o.jsx(Gv,{size:10,strokeWidth:1.75,"aria-hidden":"true"}):o.jsx(Yj,{size:10,strokeWidth:1.75,"aria-hidden":"true"})}),e!==void 0&&o.jsxs("span",{style:{color:"var(--color-accent)"},children:[typeof e=="number"?`[${e}]`:`"${e}"`,o.jsx("span",{style:{color:"var(--text-muted)"},children:": "})]}),o.jsxs("span",{style:{color:"var(--text-muted)"},children:[v,!h&&o.jsx("span",{style:{fontSize:"10px",color:"var(--text-muted)",margin:"0 4px"},children:b}),!h&&k]})]}),y&&r&&o.jsx("button",{type:"button",onClick:S=>{S.stopPropagation(),l(y)},title:`复制对象引用 ${y}`,style:{flexShrink:0,fontSize:"10px",padding:"1px 6px",borderRadius:"4px",border:"1px solid color-mix(in srgb, var(--cm-data) 25%, transparent)",background:c===y?"color-mix(in srgb, var(--cm-status-success) 20%, transparent)":"color-mix(in srgb, var(--cm-data) 6%, transparent)",color:c===y?"var(--cm-status-success)":"var(--cm-data)",cursor:"pointer",opacity:.75,fontFamily:"inherit"},children:c===y?"已复制":"${} 引用"})]}),h&&o.jsxs("div",{children:[g.map(([S,j])=>{const _=typeof S=="number"?`${r}[${S}]`:r?`${r}.${S}`:String(S);return o.jsx(y1,{keyName:S,value:j,path:_,depth:n+1,defaultExpanded:n<1,forceExpandAll:a,searchQuery:i,onCopyExpr:l,copiedPath:c,buildExpr:d},String(S))}),o.jsx("div",{style:{paddingLeft:`${n*14+14}px`,color:"var(--text-muted)",fontSize:"12px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace"},children:k})]})]})},g1=({data:e,taskReferenceName:t,expressionScope:r="output",maxHeight:n="420px"})=>{const[s,a]=T.useState(""),[i,l]=T.useState(null),[c,d]=T.useState(null),[u,p]=T.useState(!1),f=y=>y?r==="workflow.input"?`\${workflow.input.${y}}`:t?`\${${t}.${r}.${y}}`:null:null,m=y=>{navigator.clipboard.writeText(y),d(y),setTimeout(()=>d(null),1600)};return e==null||typeof e=="object"&&Object.keys(e).length===0?o.jsx("div",{style:{padding:"20px",textAlign:"center",color:"var(--text-secondary)",fontSize:"12px",background:"color-mix(in srgb, var(--cm-surface-1) 35%, transparent)",borderRadius:"8px",border:"1px solid var(--border-primary)"},children:"暂无数据 (Empty Payload)"}):o.jsxs("div",{style:{borderRadius:"8px",border:"1px solid var(--border-primary)",background:"var(--cm-overlay)",overflow:"hidden"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",padding:"6px 10px",borderBottom:"1px solid var(--border-primary)",background:"var(--cm-overlay)"},children:[o.jsx("input",{type:"text",value:s,onChange:y=>a(y.target.value),placeholder:"检索字段名或值...",style:{flex:1,padding:"4px 8px",borderRadius:"5px",border:"1px solid var(--border-primary)",background:"var(--cm-overlay)",color:"var(--text-primary)",fontSize:"11px",outline:"none"}}),o.jsx("button",{type:"button",onClick:()=>l(!0),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid var(--border-primary)",background:"transparent",color:"var(--text-secondary)",cursor:"pointer"},children:"全部展开"}),o.jsx("button",{type:"button",onClick:()=>l(!1),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid var(--border-primary)",background:"transparent",color:"var(--text-secondary)",cursor:"pointer"},children:"折叠"}),o.jsx("button",{type:"button",onClick:()=>p(!u),style:{fontSize:"10px",padding:"3px 7px",borderRadius:"4px",border:"1px solid var(--border-primary)",background:u?"color-mix(in srgb, var(--cm-data) 18%, transparent)":"transparent",color:u?"var(--cm-data)":"var(--text-secondary)",cursor:"pointer"},children:u?"树形视图":"RAW"})]}),o.jsx("div",{style:{padding:"10px 12px",maxHeight:n,overflowY:"auto",overflowX:"auto"},children:u?o.jsx("pre",{style:{margin:0,fontSize:"11px",fontFamily:"'JetBrains Mono', 'Fira Code', monospace",color:"var(--text-primary)",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(e,null,2)}):o.jsx(y1,{value:e,path:"",depth:0,defaultExpanded:!0,forceExpandAll:i,searchQuery:s,onCopyExpr:m,copiedPath:c,buildExpr:f})})]})},En=e=>e?rt(e).color:"var(--text-secondary)",Vu=(e,t)=>`color-mix(in srgb, ${e} ${t}%, transparent)`,KN=(e,t)=>{if(!e)return"-";const r=(t??Date.now())-e;return r<1e3?`${r}ms`:`${(r/1e3).toFixed(2)}s`},x1=e=>e?new Date(e).toLocaleTimeString():"-",GN=({executionActions:e})=>{const{selectedTask:t,selectedTaskInstance:r,setSelectedTask:n,setSelectedTaskInstance:s,executionData:a,workflowInstance:i}=re($e(D=>({selectedTask:D.selectedTask,selectedTaskInstance:D.selectedTaskInstance,setSelectedTask:D.setSelectedTask,setSelectedTaskInstance:D.setSelectedTaskInstance,executionData:D.executionData,workflowInstance:D.workflowInstance}))),[l,c]=T.useState("summary"),d=T.useRef(null);T.useEffect(()=>{d.current?.scrollTo({top:0})},[l,t?.taskReferenceName]),T.useEffect(()=>{c("summary")},[t?.taskReferenceName]);const u=t?.taskReferenceName==="__workflow_global__",p=t?a?.[t.taskReferenceName]:null;if(!t||!p&&!u)return null;const f=p?.attempts??[],m=(r&&f.some(D=>D.taskId===r.taskId)?r:void 0)??f[f.length-1],h=uu(f),y=Wv(f),x=i?.workflowId??"",g=i?.status,v=p?.status,k=u?g:m?.status??v,b=k?rt(k):null,S=b?.icon,j=u?i?.startTime:m?.startTime,_=u?i?.endTime:m?.endTime,w=u?i?.reasonForIncompletion:m?.reasonForIncompletion,I=u?i?.workflowId:m?.taskId,C=u?i?.input:m?.inputData,N=u?i?.output:m?.outputData,O=i?.isSandbox===!0,E={executed:"真实执行",mocked:"模拟数据",not_executed:"未执行"},R=u?void 0:m?.sandboxExecution,L=u?[]:m?.sandboxWarnings??[],H=!u&&!O&&e?.onSkipTask&&(v==="SCHEDULED"||v==="IN_PROGRESS")&&(g==="RUNNING"||g==="PAUSED"),F=!u&&!O&&e?.onRerunFromTask&&(g==="FAILED"||g==="TERMINATED"||g==="COMPLETED"||g==="TIMED_OUT"),q=H||F,A=e?.allowOperations!==!1,W=()=>{n(null),s(null)},P="var(--glass-border)",$="var(--text-secondary)",X="var(--bg-tertiary)";return o.jsxs("div",{className:"detail-panel-container panel-enter-active",style:{position:"absolute",right:0,top:0,bottom:0,width:450,zIndex:1200,display:"flex",flexDirection:"column",background:"var(--bg-primary)",borderLeft:`1px solid ${P}`,boxShadow:"var(--cm-shadow-float)",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"20px 24px",borderBottom:`1px solid ${P}`,background:"var(--bg-secondary)",flexShrink:0},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[o.jsx("div",{style:{background:"var(--color-accent)",color:"var(--color-on-accent)",padding:"2px 8px",borderRadius:4,fontSize:10,fontWeight:"bold",letterSpacing:"1px",flexShrink:0},children:u?"WORKFLOW":t.type||"TASK"}),k&&b&&S&&o.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:5,padding:"2px 8px",borderRadius:4,fontSize:10,fontWeight:700,background:Vu(En(k),10),color:En(k),letterSpacing:"0.5px",flexShrink:0},children:[o.jsx(S,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{title:k,children:b?.label})]}),o.jsx("div",{style:{flex:1}}),o.jsx("button",{onClick:W,style:{background:"none",border:"none",color:$,cursor:"pointer",fontSize:20,lineHeight:1,padding:4},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{fontSize:20,fontWeight:700,color:"var(--text-primary)",lineHeight:1.3},children:u?"工作流全局数据":t.name}),o.jsxs("div",{style:{fontSize:12,color:$,marginTop:6,fontFamily:"monospace",opacity:.8},children:["REF: ",t.taskReferenceName]}),O&&R&&o.jsxs("div",{style:{marginTop:10,display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("span",{title:R==="executed"?"在浏览器沙箱里按 Conductor 语义真实执行":R==="mocked"?"调用外部系统的任务,返回的是模拟数据(可在模拟数据配置台修改)":"同步接口不执行脚本,本任务没有运行",style:{alignSelf:"flex-start",display:"inline-flex",alignItems:"center",gap:5,padding:"2px 8px",borderRadius:"var(--cm-radius-sm)",fontSize:11,fontWeight:600,color:R==="executed"?"var(--cm-data)":"var(--text-secondary)",background:R==="executed"?"var(--cm-data-tint)":"var(--bg-tertiary)",border:`1px solid ${P}`},children:[R==="executed"?o.jsx(fn,{size:12,strokeWidth:1.75,"aria-hidden":"true"}):R==="mocked"?o.jsx(js,{size:12,strokeWidth:1.75,"aria-hidden":"true"}):o.jsx(Zj,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),"沙箱 · ",E[R]]}),L.map((D,B)=>o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"flex-start",fontSize:12,color:"var(--cm-status-warning)",lineHeight:1.5},children:[o.jsx(tt,{size:13,strokeWidth:1.75,"aria-hidden":"true",style:{flexShrink:0,marginTop:2}}),o.jsx("span",{style:{color:"var(--text-secondary)"},children:D})]},B))]})]}),f.length>1&&o.jsxs("div",{style:{padding:"12px 24px",borderBottom:`1px solid ${P}`,background:"var(--bg-secondary)",flexShrink:0},children:[o.jsxs("div",{style:{fontSize:11,fontWeight:600,color:$,marginBottom:8,textTransform:"uppercase",letterSpacing:"0.5px"},children:["执行记录(",f.length," 次",y>0?`,${y} 轮迭代`:"尝试",h>0?`,重试 ${h} 次`:"",")"]}),o.jsx("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:f.map((D,B)=>{const U=m?.taskId===D.taskId;return o.jsx("button",{onClick:()=>s(D),style:{padding:"4px 12px",borderRadius:20,fontSize:12,cursor:"pointer",border:`1px solid ${U?"var(--color-accent)":P}`,background:U?"var(--color-accent)":"var(--bg-tertiary)",color:U?"var(--color-on-accent)":"var(--text-primary)",fontFamily:"inherit",transition:"all 0.15s"},children:D.iteration?`迭代 ${D.iteration}${D.retryCount?` · 重试 ${D.retryCount}`:""}`:`尝试 ${B+1}`},D.taskId)})})]}),o.jsx("div",{style:{display:"flex",borderBottom:`1px solid ${P}`,background:"var(--bg-secondary)",flexShrink:0},children:["summary","input","output"].map(D=>{const B={summary:"概览",input:"输入 JSON",output:"输出 JSON"},U=l===D;return o.jsx("button",{onClick:()=>c(D),style:{padding:"10px 20px",background:"none",border:"none",borderBottom:`2px solid ${U?"var(--color-accent)":"transparent"}`,color:U?"var(--color-accent)":$,cursor:"pointer",fontSize:13,fontWeight:U?600:400,fontFamily:"inherit",transition:"all 0.15s"},children:B[D]},D)})}),o.jsxs("div",{ref:d,style:{flex:1,overflowY:"auto",padding:24,background:"var(--bg-primary)"},children:[l==="summary"&&o.jsxs(o.Fragment,{children:[o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16,marginBottom:24},children:[{label:"总耗时",value:KN(j,_)},{label:"开始时间",value:x1(j)},{label:"结束时间",value:x1(_)},{label:u?"Workflow ID":"Task ID",value:o.jsx("span",{style:{fontSize:10,fontFamily:"monospace",opacity:.7,wordBreak:"break-all"},children:I??"-"})}].map(({label:D,value:B})=>o.jsxs("div",{style:{padding:"12px 14px",background:X,borderRadius:10,border:`1px solid ${P}`},children:[o.jsx("div",{style:{fontSize:10,color:$,textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:6,fontWeight:600},children:D}),o.jsx("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:13},children:B})]},D))}),h>0&&o.jsxs("div",{style:{marginBottom:20,padding:"10px 14px",background:Vu(En(v),6),border:`1px solid ${Vu(En(v),20)}`,borderRadius:8,fontSize:12,color:En(v),display:"flex",alignItems:"center",gap:8},children:[o.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("path",{d:"M13 2v4h-4"}),o.jsx("path",{d:"M13 6A7 7 0 1 1 9.5 2.5"})]}),"已重试 ",h," 次,共 ",f.length," 次尝试",y>0?`(${y} 轮迭代)`:""]}),!u&&m?.workerId&&o.jsxs("div",{style:{marginBottom:20},children:[o.jsx("div",{style:{fontSize:10,color:$,textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:4,fontWeight:600},children:"Worker"}),o.jsx("div",{style:{fontSize:12,fontFamily:"monospace",color:"var(--text-primary)",opacity:.8},children:m.workerId})]}),w&&o.jsxs("div",{style:{padding:14,background:"color-mix(in srgb, var(--cm-status-failed) 8%, transparent)",borderLeft:"3px solid var(--status-failed)",borderRadius:"0 8px 8px 0",fontSize:12,color:"var(--status-failed)",lineHeight:1.6},children:[o.jsx("strong",{children:"异常信息"}),o.jsx("div",{style:{marginTop:6,opacity:.9},children:w})]}),q&&o.jsxs("div",{style:{marginTop:24,paddingTop:20,borderTop:`1px solid ${P}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[o.jsx("div",{style:{fontSize:11,fontWeight:600,color:$,textTransform:"uppercase",letterSpacing:"0.5px"},children:"任务操作"}),!A&&o.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--cm-status-failed) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-failed) 25%, transparent)",color:"var(--status-failed)",fontSize:10,fontWeight:600},children:[o.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[o.jsx("circle",{cx:"8",cy:"8",r:"6"}),o.jsx("path",{d:"M8 5v3M8 11v.5"})]}),"操作权限受限"]})]}),o.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[F&&o.jsxs("button",{disabled:!A,onClick:()=>A&&e.onRerunFromTask(x,t.taskReferenceName,m?.taskId),title:A?`从任务 ${t.taskReferenceName} 处重新运行工作流`:"操作权限受限",style:A?kr:v1,onMouseEnter:D=>!A||Object.assign(D.currentTarget.style,YN),onMouseLeave:D=>!A||Object.assign(D.currentTarget.style,kr),children:[o.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("path",{d:"M3 14v-4h4"}),o.jsx("path",{d:"M3 10A7 7 0 1 1 6.5 13.5"})]}),"从此处重新运行"]}),H&&o.jsxs("button",{disabled:!A,onClick:()=>A&&e.onSkipTask(x,t.taskReferenceName,m?.taskId),title:A?`跳过任务 ${t.taskReferenceName}`:"操作权限受限",style:A?kr:v1,onMouseEnter:D=>!A||Object.assign(D.currentTarget.style,XN),onMouseLeave:D=>!A||Object.assign(D.currentTarget.style,kr),children:[o.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:o.jsx("path",{d:"M4 4l8 8M12 4l-8 8"})}),"跳过此任务"]})]})]})]}),l==="input"&&o.jsx(g1,{data:C,taskReferenceName:u?void 0:t.taskReferenceName,expressionScope:u?"workflow.input":"input",maxHeight:"calc(100vh - 280px)"}),l==="output"&&o.jsx(g1,{data:N,taskReferenceName:u?void 0:t.taskReferenceName,expressionScope:"output",maxHeight:"calc(100vh - 280px)"})]})]})},kr={display:"inline-flex",alignItems:"center",gap:6,padding:"7px 14px",borderRadius:8,fontSize:12,fontWeight:500,cursor:"pointer",border:"1px solid var(--border-primary)",background:"var(--bg-secondary)",color:"var(--text-primary)",fontFamily:"inherit",transition:"all 0.15s"},YN={...kr,borderColor:"var(--color-accent)",color:"var(--color-accent)",background:"var(--bg-primary)"},XN={...kr,borderColor:"var(--status-failed)",color:"var(--status-failed)",background:"color-mix(in srgb, var(--cm-status-failed) 8%, transparent)"},v1={...kr,opacity:.45,cursor:"not-allowed",border:"1px solid var(--border-primary)",background:"var(--bg-secondary)",color:"var(--text-secondary)"},ZN={add:"新增",mod:"修改",del:"删除",replace:"替换"},QN={add:"+",mod:"~",del:"−"};function e2({diff:e,applied:t,onApply:r,onUndo:n}){const s=e.kind==="replace"?"add":e.kind;return o.jsxs("div",{className:"diff-card",children:[o.jsxs("div",{className:"diff-head",children:[o.jsx("span",{className:`diff-badge ${s}`,children:ZN[e.kind]??e.kind}),o.jsx("span",{className:"diff-summary",children:e.summary})]}),e.rows&&e.rows.length>0&&o.jsx("div",{className:"diff-list",children:e.rows.map((a,i)=>o.jsxs("div",{className:`diff-row ${a.kind}`,children:[o.jsx("div",{className:"diff-marker",children:QN[a.kind]??"·"}),o.jsx("div",{className:"diff-desc",children:a.desc})]},i))}),o.jsx("div",{className:"diff-actions",children:t?o.jsxs(o.Fragment,{children:[o.jsxs("button",{className:"diff-btn applied",disabled:!0,children:[o.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:o.jsx("path",{d:"M3 8l3.5 3.5L13 5",strokeLinecap:"round",strokeLinejoin:"round"})}),"已应用"]}),o.jsxs("button",{className:"diff-btn undo",onClick:n,children:[o.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[o.jsx("path",{d:"M3.5 8a4.5 4.5 0 1 1 1.4 3.3",strokeLinecap:"round"}),o.jsx("path",{d:"M3 4.5L4.5 8L7 6.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),"撤销"]})]}):o.jsxs("button",{className:"diff-btn apply",onClick:r,children:[o.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",children:o.jsx("path",{d:"M3 8l3.5 3.5L13 5",strokeLinecap:"round",strokeLinejoin:"round"})}),"应用更改"]})})]})}function b1(e,t){const r=JSON.parse(JSON.stringify(e));if(t.kind==="replace"&&t.payload)return{next:JSON.parse(JSON.stringify(t.payload)),inverse:{kind:"replace",summary:"撤销替换",rows:[],payload:e}};if(t.kind==="add"&&t.payload)return{next:JSON.parse(JSON.stringify(t.payload)),inverse:{kind:"replace",summary:"撤销生成",rows:[],payload:e}};if(!t.patch)return{next:r,inverse:{kind:t.kind,summary:"(无变更)",rows:[]}};const n=[],s=[];for(const a of t.patch)if(a.op==="patchTask"){const i=r.tasks.find(c=>c.taskReferenceName===a.ref);if(!i)continue;const l={};for(const c of Object.keys(a.set))l[c]=i[c];Object.assign(i,a.set),n.push({op:"patchTask",ref:a.ref,set:l}),s.push({kind:"mod",desc:`还原 ${a.ref} 属性`})}else if(a.op==="addEdge")r.edges=r.edges??[],r.edges.push({from:a.from,to:a.to,label:a.label}),n.push({op:"removeEdge",from:a.from,to:a.to}),s.push({kind:"del",desc:`移除边 ${a.from} → ${a.to}`});else if(a.op==="removeEdge")r.edges=(r.edges??[]).filter(i=>!(i.from===a.from&&i.to===a.to)),n.push({op:"addEdge",from:a.from,to:a.to}),s.push({kind:"add",desc:`恢复边 ${a.from} → ${a.to}`});else if(a.op==="addTask")r.tasks.push(a.task),r.edges=r.edges??[],a.removeEdges&&a.removeEdges.forEach(i=>{r.edges=r.edges.filter(l=>!(l.from===i.from&&l.to===i.to))}),a.extraEdges&&a.extraEdges.forEach(i=>r.edges.push(i)),n.push({op:"removeTask",ref:a.task.taskReferenceName}),s.push({kind:"del",desc:`移除 ${a.task.taskReferenceName}`});else if(a.op==="removeTask"){const i=r.tasks.findIndex(d=>d.taskReferenceName===a.ref);if(i<0)continue;const[l]=r.tasks.splice(i,1),c=(r.edges??[]).filter(d=>d.from===a.ref||d.to===a.ref);r.edges=(r.edges??[]).filter(d=>d.from!==a.ref&&d.to!==a.ref),n.push({op:"addTask",task:l,extraEdges:c}),s.push({kind:"add",desc:`恢复 ${a.ref}`})}else if(a.op==="insertAfter"){r.tasks.push(a.task),r.edges=r.edges??[];const i=r.edges.findIndex(l=>l.from===a.after&&l.to===a.edgeTo);i>=0&&r.edges.splice(i,1),r.edges.push({from:a.after,to:a.task.taskReferenceName}),r.edges.push({from:a.task.taskReferenceName,to:a.edgeTo}),n.push({op:"removeTask",ref:a.task.taskReferenceName}),s.push({kind:"del",desc:`移除 ${a.task.taskReferenceName}(恢复直连边)`})}else if(a.op==="insertBefore"){r.tasks.push(a.task),r.edges=r.edges??[];const i=r.edges.filter(l=>l.to===a.before);r.edges=r.edges.filter(l=>l.to!==a.before),i.forEach(l=>r.edges.push({from:l.from,to:a.task.taskReferenceName,label:l.label})),r.edges.push({from:a.task.taskReferenceName,to:a.before}),n.push({op:"removeTask",ref:a.task.taskReferenceName}),s.push({kind:"del",desc:`移除 ${a.task.taskReferenceName}(恢复原有入边)`})}return{next:r,inverse:{kind:t.kind,summary:`撤销:${t.summary}`,rows:s,patch:n.reverse()}}}function t2(e){const t=e.match(/```diff-json\n([\s\S]*?)\n```/);if(!t)return null;try{const r=JSON.parse(t[1]);return!r.kind||!r.summary?null:r}catch{return null}}const k1={id:"1",role:"ai",content:"你好!我是您的流程助手。我可以帮你生成工作流框架、优化逻辑或提供参数配置建议。你想实现什么样的流程?"},w1=e=>e.split(/(```[\s\S]*?```)/).map((r,n)=>{if(r.startsWith("```")&&r.endsWith("```")){const s=r.slice(3,-3),a=s.indexOf(`
265
+ `),i=a>=0?s.slice(a+1):s;return o.jsx("pre",{children:o.jsx("code",{children:i})},n)}return o.jsx("span",{children:r2(r)},n)}),r2=e=>{const t=[],r=/(\*\*[^*]+\*\*|`[^`]+`|\n)/g;let n=0,s;for(;(s=r.exec(e))!==null;){s.index>n&&t.push(e.slice(n,s.index));const a=s[0];a.startsWith("**")&&a.endsWith("**")?t.push(o.jsx("strong",{children:a.slice(2,-2)},s.index)):a.startsWith("`")&&a.endsWith("`")?t.push(o.jsx("code",{children:a.slice(1,-1)},s.index)):a===`
266
+ `&&t.push(o.jsx("br",{},s.index)),n=s.index+a.length}return n<e.length&&t.push(e.slice(n)),t},n2=({aiConfig:e})=>{const{workflowDef:t,setWorkflow:r,mode:n}=re($e(R=>({workflowDef:R.workflowDef,setWorkflow:R.setWorkflow,mode:R.mode}))),[s,a]=T.useState(!1),[i,l]=T.useState(""),[c,d]=T.useState(!1),[u,p]=T.useState([k1]),[f,m]=T.useState(""),[h,y]=T.useState(null),x=T.useRef(null),g=T.useRef(null),v=T.useRef(null),k=T.useCallback(R=>{if(!R.diff||R.applied||!t)return;const{next:L,inverse:H}=b1(t,R.diff);r(L),p(F=>F.map(q=>q.id===R.id?{...q,applied:!0,inverse:H}:q))},[t,r]),b=T.useCallback(R=>{if(!R.inverse||!R.applied||!t)return;const{next:L}=b1(t,R.inverse);r(L),p(H=>H.map(F=>F.id===R.id?{...F,applied:!1,inverse:void 0}:F))},[t,r]),S=()=>{const R=g.current;R&&(R.style.height="auto",R.style.height=Math.min(R.scrollHeight,120)+"px")},j=()=>{const R=g.current;R&&(R.style.height="auto")};T.useEffect(()=>()=>{v.current?.abort()},[]),T.useEffect(()=>{const R=()=>a(!0);return window.addEventListener("open-ai-chat",R),()=>window.removeEventListener("open-ai-chat",R)},[]);const _=()=>{x.current?.scrollIntoView({behavior:"smooth"})};T.useEffect(()=>{s&&_()},[u,s,f]);const w=T.useCallback(R=>{const L=[{role:"system",content:ON}];for(const F of u)F.role==="user"&&F.content?L.push({role:"user",content:F.content}):F.role==="ai"&&F.content&&!F.thinking&&L.push({role:"assistant",content:F.content});const H=WN(R,t);return L.push({role:"user",content:H}),L},[u,t]),I=async R=>{const L=i.trim();if(!L||c)return;v.current?.abort();const H=new AbortController;v.current=H;const F={id:Date.now().toString(),role:"user",content:L};p(q=>[...q,F]),l(""),j(),d(!0),m("");try{const q={...e??{}};if(!Cn(q)){setTimeout(()=>{if(H.signal.aborted)return;const D=!t||(t.tasks??[]).length===0,B={name:"demo_approval_workflow",description:"演示审批流程",tasks:[{name:"submit_request",taskReferenceName:"submit_request",type:"SIMPLE",inputParameters:{}},{name:"human_approval",taskReferenceName:"human_approval",type:"HUMAN",inputParameters:{}},{name:"process_result",taskReferenceName:"process_result",type:"SIMPLE",inputParameters:{}}]},U="未配置 AI 服务,AI 助手暂时只能演示。请由集成方通过 `aiConfig` 传入 API Key 或代理服务(演示站点可点击标题栏的「AI 配置」按钮填写)后重试。",G=D?{id:(Date.now()+1).toString(),role:"ai",content:`**演示模式**:${U}
267
+
268
+ 下面是一个示例审批流程,可应用到空白画布上体验。`,diff:{kind:"replace",summary:"生成三步审批流程(演示)",rows:[{kind:"add",desc:"submit_request — 提交申请任务"},{kind:"add",desc:"human_approval — 人工审批任务"},{kind:"add",desc:"process_result — 处理审批结果"}],payload:B}}:{id:(Date.now()+1).toString(),role:"ai",content:`**演示模式**:${U}
269
+
270
+ 当前画布已有工作流,演示模式不会改动它。`};p(ne=>[...ne,G]),d(!1)},800);return}const A=w(L),W=await CN(A,q,D=>{m(B=>B+D)},()=>{},H.signal);let $=t2(W);if(!$){const D=W.match(/```json\n([\s\S]*?)\n```/);if(D)try{const B=JSON.parse(D[1]);$={kind:"replace",summary:"应用 AI 生成的工作流",rows:[{kind:"add",desc:"全量替换为 AI 生成的工作流定义"}],payload:B}}catch{}}const X={id:(Date.now()+1).toString(),role:"ai",content:W,diff:$??void 0,applied:!1};p(D=>[...D,X]),m("")}catch(q){if(q.name==="AbortError")m(A=>{if(A){const W={id:(Date.now()+1).toString(),role:"ai",content:A};p(P=>[...P,W])}return""});else{const A={id:Date.now().toString(),role:"ai",content:`**出错了**:${q?.message||"AI 服务返回了无法识别的错误。请重试;如持续出现,请联系管理员。"}`};p(W=>[...W,A]),m("")}}finally{d(!1)}},C=()=>{v.current?.abort()},N=()=>{v.current?.abort(),p([k1]),m(""),d(!1)},O=R=>{navigator.clipboard.writeText(R.content??""),y(R.id),setTimeout(()=>y(null),1500)},E=R=>{R.nativeEvent.isComposing||R.keyCode===229||R.key==="Enter"&&!R.shiftKey&&(R.preventDefault(),I())};return n!=="edit"?null:s?o.jsxs("div",{className:"ai-chat-panel",children:[o.jsxs("div",{className:"ai-header",children:[o.jsxs("div",{className:"ai-title",children:[o.jsx("span",{className:"ai-sparkles",children:o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),"AI 助手"]}),o.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[o.jsx("button",{className:"ai-close",onClick:N,title:"清空对话",children:o.jsx(Es,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("button",{className:"ai-close",onClick:()=>a(!1),children:"×"})]})]}),o.jsxs("div",{className:"ai-messages",children:[u.map(R=>o.jsxs("div",{className:`message ${R.role}`,children:[o.jsx("div",{className:"message-content",children:R.thinking?o.jsxs("div",{className:"thinking-skeleton",children:[o.jsx("div",{className:"skeleton-line",style:{width:"80%"}}),o.jsx("div",{className:"skeleton-line",style:{width:"60%"}})]}):R.role==="ai"?w1(R.content??""):R.content}),R.diff&&!R.thinking&&o.jsx(e2,{diff:R.diff,applied:R.applied??!1,onApply:()=>k(R),onUndo:()=>b(R)}),R.role==="ai"&&R.content&&o.jsx("button",{className:"copy-btn",onClick:()=>O(R),title:"复制",children:h===R.id?o.jsx(Wt,{size:14,strokeWidth:1.75,"aria-hidden":"true"}):o.jsx(tT,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]},R.id)),c&&f&&o.jsxs("div",{className:"message ai",style:{opacity:.9},children:[o.jsx("div",{className:"message-content",children:w1(f)}),o.jsx("span",{className:"streaming-cursor",children:"▊"})]}),c&&!f&&o.jsxs("div",{className:"message ai thinking-skeleton",children:[o.jsx("div",{className:"skeleton-line",style:{width:"80%"}}),o.jsx("div",{className:"skeleton-line",style:{width:"60%"}}),o.jsx("div",{className:"skeleton-line",style:{width:"70%"}})]}),o.jsx("div",{ref:x})]}),o.jsx("div",{className:"ai-input-area",children:o.jsxs("div",{className:"ai-input-container",children:[o.jsx("textarea",{ref:g,className:"ai-input",placeholder:c?"AI 正在响应...":"描述您的需求…(Shift+Enter 换行)",value:i,onChange:R=>l(R.target.value),onInput:S,onKeyDown:E,disabled:c,rows:2}),c?o.jsx("button",{className:"ai-send stop",onClick:C,title:"停止生成","aria-label":"停止生成",children:o.jsx(Nu,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}):o.jsx("button",{className:"ai-send",onClick:()=>I(),title:"发送",children:o.jsx(mn,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]})})]}):o.jsx("div",{className:"ai-chat-panel collapsed",onClick:()=>a(!0),children:o.jsx("div",{className:"ai-header",style:{borderBottom:"none"},children:o.jsxs("div",{className:"ai-title",children:[o.jsx("span",{className:"ai-sparkles",children:o.jsx(Rt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),"AI 助手"]})})})},s2=new Set(["COMPLETED","FAILED","TIMED_OUT","TERMINATED"]);function a2(e){const{workflowId:t,poll:r,onInstance:n,onDone:s,onGiveUp:a,shouldContinue:i=()=>!0,maxInterval:l=15e3,maxFailures:c=5,setTimer:d=(b,S)=>setTimeout(b,S),clearTimer:u=b=>clearTimeout(b)}=e;let p=e.interval??3e3,f=0,m=null,h=!1;const y=new AbortController,x=()=>{h||(h=!0,m!==null&&u(m),m=null,y.abort())};e.signal&&(e.signal.aborted?x():e.signal.addEventListener("abort",x,{once:!0}));const g=()=>{h||(m=d(k,p),p=Math.min(p*1.5,l))},v=b=>{if(f+=1,f>=c){x(),a?.(`连续 ${f} 次没有拿到运行 ${t} 的状态(${b}),已停止刷新。请检查 Conductor 服务与网络后重新运行,或在 Conductor 控制台查看这次运行。`);return}g()};async function k(){if(m=null,h)return;if(!i()){x();return}let b;try{b=await r(t,y.signal)}catch(S){if(h)return;v(S instanceof Error&&S.message?S.message:"请求失败");return}if(!h){if(!i()){x();return}if(!b){v("接口返回为空");return}if(f=0,n(b),s2.has(b.status)){x(),s?.(b);return}g()}}return g(),{cancel:x,get cancelled(){return h}}}const o2=({onTriggerExecution:e,onPollExecution:t,executionPollInterval:r=3e3})=>{const{workflowDef:n,showRunPanel:s,setShowRunPanel:a,setRunState:i,importExecutionJSON:l,setMode:c}=re($e(O=>({workflowDef:O.workflowDef,showRunPanel:O.showRunPanel,setShowRunPanel:O.setShowRunPanel,setRunState:O.setRunState,importExecutionJSON:O.importExecutionJSON,setMode:O.setMode}))),[d,u]=T.useState("form"),[p,f]=T.useState({}),[m,h]=T.useState("{}"),[y,x]=T.useState(""),[g,v]=T.useState(!1),[k,b]=T.useState(""),S=Ct(n?.inputParameters,n),j=T.useRef(null);T.useEffect(()=>{const O=re.subscribe((E,R)=>{R.mode==="run"&&E.mode!=="run"&&j.current&&(j.current.cancel(),j.current=null,E.runState==="polling"&&E.setRunState("idle"))});return()=>{O(),j.current?.cancel(),j.current=null}},[]),T.useEffect(()=>{s&&(f({}),h("{}"),x(""),b(""),v(!1))},[s]);const _=T.useCallback(()=>{try{const O={};S.forEach(E=>{const R=p[E.name];if(R!==void 0&&R!=="")if(E.type==="number")O[E.name]=Number(R);else if(E.type==="boolean")O[E.name]=R==="true";else if(E.type==="object"||E.type==="array")try{O[E.name]=JSON.parse(R)}catch{O[E.name]=R}else O[E.name]=R;else E.defaultValue!==void 0&&(O[E.name]=E.defaultValue)}),h(JSON.stringify(O,null,2))}catch{}u("json")},[p,S]),w=T.useCallback(()=>{try{const O=JSON.parse(m),E={};S.forEach(R=>{const L=O[R.name];L!==void 0&&(E[R.name]=typeof L=="object"?JSON.stringify(L,null,2):String(L))}),f(E),x("")}catch{x("JSON 格式有误,无法切换为表单模式")}u("form")},[m,S]),I=T.useCallback(()=>{if(d==="json")try{return JSON.parse(m)}catch{return x("JSON 格式有误,请检查后重试"),null}const O={};return S.forEach(E=>{const R=p[E.name]??(E.defaultValue!==void 0?String(E.defaultValue):"");if(!(R===""&&!E.required))if(E.type==="number")O[E.name]=Number(R);else if(E.type==="boolean")O[E.name]=R==="true";else if(E.type==="object"||E.type==="array")try{O[E.name]=JSON.parse(R)}catch{O[E.name]=R}else O[E.name]=R}),O},[d,m,p,S]),C=T.useCallback(async()=>{if(!e||!n)return;const O=I();if(O===null)return;const E=S.filter(R=>R.required&&(O[R.name]===void 0||O[R.name]===""));if(E.length>0){b(`必填参数未填写:${E.map(R=>R.name).join(", ")}`);return}v(!0),b(""),i("triggering",null,null);try{const{workflowId:R}=await e(n.name,n.version??1,O);if(i("polling",R),a(!1),c("run"),!t)return;j.current?.cancel(),j.current=a2({workflowId:R,poll:L=>t(L),interval:r,maxInterval:15e3,maxFailures:5,shouldContinue:()=>re.getState().mode==="run",onInstance:L=>l(L),onDone:()=>i("done",R,null),onGiveUp:L=>i("error",R,L)})}catch(R){const L=R?.message||"执行触发失败,请检查配置后重试";i("error",null,L),b(L),v(!1)}},[e,t,n,I,S,i,a,l,c,r]);if(!s||!n)return null;const N=S.length>0;return o.jsx("div",{className:"wrp-overlay",onClick:()=>a(!1),children:o.jsxs("div",{className:"wrp-panel",onClick:O=>O.stopPropagation(),children:[o.jsxs("div",{className:"wrp-header",children:[o.jsxs("div",{className:"wrp-header-title",children:[o.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor",style:{color:"var(--status-completed)"},children:o.jsx("path",{d:"M4 3l9 5-9 5z"})}),"执行验证"]}),o.jsxs("div",{className:"wrp-workflow-name",children:[n.name," ",o.jsxs("span",{className:"wrp-version",children:["v",n.version??1]})]}),o.jsx("button",{className:"wrp-close",onClick:()=>a(!1),children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{className:"wrp-content",children:[o.jsxs("div",{className:"wrp-section-label",children:["工作流输入参数",N&&o.jsxs("div",{className:"wrp-mode-toggle",children:[o.jsx("button",{className:d==="form"?"active":"",onClick:d==="json"?w:void 0,children:"表单模式"}),o.jsx("button",{className:d==="json"?"active":"",onClick:d==="form"?_:void 0,children:"JSON 编辑器"})]})]}),!N&&d==="form"&&o.jsxs("p",{className:"wrp-hint",children:["该工作流未声明输入参数。你可以在 ",o.jsx("strong",{children:"工作流设置 → 参数配置"})," 中添加,也可以直接在 JSON 编辑器中手动填写。"]}),d==="form"?o.jsxs("div",{className:"wrp-form",children:[S.map(O=>o.jsxs("div",{className:"wrp-field",children:[o.jsxs("label",{className:"wrp-field-label",children:[O.name,O.required&&o.jsx("span",{className:"wrp-required",children:"*"}),O.type&&o.jsx("span",{className:"wrp-type",children:O.type})]}),O.description&&o.jsx("p",{className:"wrp-field-desc",children:O.description}),O.type==="object"||O.type==="array"?o.jsx("textarea",{className:"wrp-input",rows:3,placeholder:O.example?JSON.stringify(O.example,null,2):"{}",value:p[O.name]??"",onChange:E=>f(R=>({...R,[O.name]:E.target.value}))}):O.type==="boolean"?o.jsxs("select",{className:"wrp-input",value:p[O.name]??(O.defaultValue!==void 0?String(O.defaultValue):""),onChange:E=>f(R=>({...R,[O.name]:E.target.value})),children:[o.jsx("option",{value:"",children:"请选择"}),o.jsx("option",{value:"true",children:"true"}),o.jsx("option",{value:"false",children:"false"})]}):o.jsx("input",{className:"wrp-input",type:O.type==="number"?"number":"text",placeholder:O.example!==void 0?String(O.example):O.defaultValue!==void 0?String(O.defaultValue):"",value:p[O.name]??"",onChange:E=>f(R=>({...R,[O.name]:E.target.value}))})]},O.name)),!N&&o.jsx("button",{className:"wrp-switch-json",onClick:_,children:"切换为 JSON 编辑器手动填写"})]}):o.jsxs("div",{className:"wrp-json-editor",children:[o.jsx("textarea",{className:"wrp-input wrp-json",rows:12,value:m,onChange:O=>{h(O.target.value),x("")},spellCheck:!1,placeholder:'{\\n "key": "value"\\n}'}),y&&o.jsx("p",{className:"wrp-error",children:y})]}),k&&o.jsx("p",{className:"wrp-error wrp-submit-error",children:k})]}),o.jsxs("div",{className:"wrp-footer",children:[o.jsx("button",{className:"wrp-btn wrp-btn-cancel",onClick:()=>a(!1),children:"取消"}),e?o.jsx("button",{className:"wrp-btn wrp-btn-execute",onClick:C,disabled:g,children:g?o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"wrp-spinner"}),"执行中..."]}):o.jsxs(o.Fragment,{children:[o.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("path",{d:"M4 3l9 5-9 5z"})}),"发起执行"]})}):o.jsx("span",{className:"wrp-hint-inline",children:"未配置 onTriggerExecution 回调"})]})]})})},S1={activity:hu,alert:tt,book:Kj,flag:oT,flame:wu,library:nb,lightbulb:Is,lock:fT,map:mT,pause:cb,undo:xb,wrench:bb,approval:Wt,clipboard:bu,mail:sb,pointer:xT,x:Le,ban:yu,bell:Vj,"bell-ring":Uj,braces:Vv,chart:Kv,circle:vu,clock:Xv,cloud:Qj,code:ku,database:Zv,"file-text":Qv,folder:eb,branch:vr,merge:un,globe:Ts,"hard-drive":iT,hourglass:Su,key:rb,megaphone:hT,message:ob,monitor:yT,moon:gT,package:lb,pencil:pn,play:fn,plug:db,puzzle:bT,radio:kT,refresh:Ns,repeat:Dr,rocket:mn,save:jT,scale:Tu,search:Iu,send:ub,server:IT,settings:pb,shield:fb,shuffle:Mr,smartphone:CT,sparkles:Rt,stop:Nu,"stop-circle":xu,sunrise:ET,terminal:gb,trash:Es,upload:vb,user:Eu,zap:Ot},i2={"📢":"megaphone","📣":"megaphone","👤":"user","⏳":"hourglass","⌛":"hourglass","🔀":"shuffle","⚡":"zap","🔁":"repeat","🔄":"refresh","🖥":"server","💻":"terminal","🔍":"search","🔎":"search","▶":"play","⏹":"stop","💾":"save","📊":"chart","📈":"chart","🗑":"trash","🚀":"rocket","🛡":"shield","🌙":"moon","🌅":"sunrise","💽":"hard-drive","🚨":"bell-ring","⚙":"settings","🌐":"globe","📦":"package","📡":"radio","🛑":"stop-circle","📝":"pencil","📨":"send","🔗":"merge","🧩":"puzzle","📱":"smartphone","💬":"message","📸":"save","⚖":"scale","🗂":"folder","🔑":"key","📤":"upload","🔢":"braces","✅":"approval","🔌":"plug","📁":"folder","☁":"cloud","🗄":"database","📄":"file-text","🔔":"bell","✨":"sparkles","🤖":"sparkles","🧪":"sparkles","⏰":"clock","🕐":"clock","📧":"mail","✉":"mail","📋":"clipboard","👆":"pointer","⚠":"alert","❌":"x","✓":"approval","✔":"approval","🎉":"sparkles","✦":"sparkles","🔥":"flame","💡":"lightbulb","📖":"book","🏁":"flag","🔒":"lock","⏸":"pause","↩":"undo","🔧":"wrench","📚":"library","🗺":"map","✏":"pencil","🔴":"x","🔵":"activity"};function l2(e){if(!e)return null;const t=e.trim();return t in S1?t:i2[t.replace(/️/g,"")]??null}function We({name:e,size:t=16,fallback:r="settings",style:n,className:s}){const a=S1[l2(e)??r];return o.jsx(a,{size:t,strokeWidth:1.75,"aria-hidden":"true",style:n,className:s})}const c2=[{pattern:/NullPointerException|null.*inputData|inputData.*null/i,category:"parameter",title:"参数引用为空",explanation:"某个 inputParameters 字段引用的上游任务输出为 null。请检查 JSONPath 表达式,确认前序任务确实返回了对应字段。",suggestEditParam:"inputParameters"},{pattern:/PathNotFoundException|No results for path|path not found/i,category:"parameter",title:"JSONPath 路径不存在",explanation:"参数中的 JSONPath 表达式(如 ${task.output.field})在实际执行数据中找不到对应路径。请核查前序任务的实际输出结构。",suggestEditParam:"inputParameters"},{pattern:/ClassCastException|cannot cast|type mismatch/i,category:"parameter",title:"参数类型不匹配",explanation:"输入参数的数据类型与任务期望不符(如将字符串传给了数字类型参数)。请检查参数值的类型。",suggestEditParam:"inputParameters"},{pattern:/Connection refused|connect.*timeout|SocketException/i,category:"network",title:"网络连接失败",explanation:"无法连接到目标服务器。请检查 HTTP 任务的 uri 是否正确,以及目标服务是否可访问。",suggestEditParam:"uri"},{pattern:/HTTP.*4\d\d|status.*4\d\d|4\d\d.*status/i,category:"network",title:"HTTP 客户端错误",explanation:"HTTP 请求返回 4xx 错误,通常由请求参数、认证或权限问题引起。请检查 uri、headers、body 配置。",suggestEditParam:"inputParameters"},{pattern:/HTTP.*5\d\d|status.*5\d\d|5\d\d.*status/i,category:"network",title:"HTTP 服务端错误",explanation:"目标服务返回 5xx 错误,服务端发生异常。可尝试重试,或检查传入的请求体是否符合服务端期望。",suggestEditParam:"inputParameters"},{pattern:/Unauthorized|401|authentication|auth.*failed/i,category:"auth",title:"认证失败",explanation:"请求被拒绝,认证信息无效或缺失。请检查 headers 中的 Authorization 或 token 参数配置。",suggestEditParam:"inputParameters"},{pattern:/timeout|timed.?out|TIMED_OUT/i,category:"timeout",title:"任务超时",explanation:"任务执行时间超过配置的超时阈值。可考虑增大 timeoutSeconds,或优化被调用服务的响应速度。",suggestEditParam:"timeoutSeconds"},{pattern:/loopCondition|loop.*condition|condition.*false/i,category:"logic",title:"循环条件配置问题",explanation:"DO_WHILE 的 loopCondition 表达式可能无法正常求值。请检查条件表达式引用的变量是否正确。",suggestEditParam:"loopCondition"},{pattern:/expression.*error|script.*error|evaluator.*failed/i,category:"logic",title:"脚本表达式错误",explanation:"INLINE/LAMBDA 任务的脚本表达式执行时出错。请检查 expression 或 scriptExpression 的语法和逻辑。",suggestEditParam:"inputParameters"}];function d2(e,t){const r=t[e];if(!r)return[];const n=r.reasonForIncompletion||"";if(!n)return[];const s=[];for(const a of c2)a.pattern.test(n)&&s.push({category:a.category,title:a.title,explanation:a.explanation,suggestEditParam:a.suggestEditParam});return s.length===0&&n.length>0&&s.push({category:"logic",title:"执行异常",explanation:`任务执行失败,原因:${n.slice(0,200)}${n.length>200?"...":""}`}),s}function u2(e,t){const r=Object.values(e).map(f=>{const m=f.startTime&&f.endTime?f.endTime-f.startTime:void 0,h=uu(f.attempts),y=Wv(f.attempts);return{taskRef:f.taskReferenceName,status:f.status,startTime:f.startTime,endTime:f.endTime,durationMs:m,retryCount:h,iterationCount:y,reasonForIncompletion:f.reasonForIncompletion,diagnostics:d2(f.taskReferenceName,e)}}).sort((f,m)=>(f.startTime??0)-(m.startTime??0)),n=r.filter(f=>f.status==="COMPLETED"||f.status==="COMPLETED_WITH_ERRORS").length,s=r.filter(f=>rt(f.status).isFailure).length,a=r.filter(f=>f.status==="SKIPPED").length,i=r.flatMap(f=>[f.startTime,f.endTime]).filter(f=>!!f),l=i.length?Math.min(...i):0,d=(i.length?Math.max(...i):0)-l,u=t?.status,p=u==="FAILED"||u==="TIMED_OUT"||u==="TERMINATED"||s>0;return{totalTasks:r.length,completedTasks:n,failedTasks:s,skippedTasks:a,totalDurationMs:d,steps:r,hasFailed:p}}function _1(e){return e===void 0||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.round(e%6e4/1e3)}s`}function p2(e){return{parameter:"settings",timeout:"clock",auth:"lock",network:"globe",logic:"wrench"}[e]??"alert"}function f2(e){return{parameter:"var(--cm-status-warning)",timeout:"var(--cm-status-warning)",auth:"var(--cm-status-failed)",network:"var(--cm-status-failed)",logic:"var(--cm-status-failed)"}[e]??"var(--cm-status-warning)"}const ar={CREDENTIAL_KEY:/(token|secret|password|passwd|authorization|apikey|api_key|webhook|access_key|private_key|auth)/i,PRIVATE_IP:/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/,PHONE:/\b1[3-9]\d{9}\b/,EMAIL:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,CLOUD_RESOURCE_ID:/\b(i|d|s|vpc|vsw|sg|disk|snap)-[a-z0-9]{8,24}\b/i};function zs(e,t,r,n=[]){if(!e||typeof e!="object")return n;for(const[s,a]of Object.entries(e)){if(s==="_actionId"||s==="actionName")continue;const i=`${r}.${s}`;if(a!=null)if(typeof a=="string"){if(ar.CREDENTIAL_KEY.test(s)&&a.length>5){n.push({id:`finding_${n.length+1}`,kind:"credential",path:i,taskRef:t,keyName:s,rawValue:a,maskedValue:"",suggestedVarName:`${s}_凭证密钥`,action:"variable"});continue}if(ar.PRIVATE_IP.test(a)){n.push({id:`finding_${n.length+1}`,kind:"network",path:i,taskRef:t,keyName:s,rawValue:a,maskedValue:a.replace(ar.PRIVATE_IP,"172.16.0.42"),suggestedVarName:`${s}_内网IP`,action:"mask"});continue}if(ar.PHONE.test(a)){n.push({id:`finding_${n.length+1}`,kind:"pii",path:i,taskRef:t,keyName:s,rawValue:a,maskedValue:a.replace(ar.PHONE,"13800138000"),suggestedVarName:"通知联系手机",action:"mask"});continue}if(ar.EMAIL.test(a)){n.push({id:`finding_${n.length+1}`,kind:"pii",path:i,taskRef:t,keyName:s,rawValue:a,maskedValue:a.replace(ar.EMAIL,"ops-notify@example.com"),suggestedVarName:"接收人邮箱",action:"mask"});continue}if(ar.CLOUD_RESOURCE_ID.test(a)&&!a.includes("${")){n.push({id:`finding_${n.length+1}`,kind:"resourceId",path:i,taskRef:t,keyName:s,rawValue:a,maskedValue:"i-bp18a9z3j42m09a",suggestedVarName:`${s}_云资源ID`,action:"variable"});continue}}else typeof a=="object"&&zs(a,t,i,n)}return n}function j1(e){const t=[];return(e.tasks||[]).forEach((r,n)=>{const s=`tasks[${n}].inputParameters`;r.inputParameters&&zs(r.inputParameters,r.taskReferenceName,s,t),r.httpRequest&&zs(r.httpRequest,r.taskReferenceName,`tasks[${n}].httpRequest`,t)}),t}const T1=/(debug|fallback|compensate|retry|temporary|temp|log_dump|tracer)/i;function I1(e,t){const r=[],n=e.tasks||[];for(const s of n){if(T1.test(s.name)||T1.test(s.taskReferenceName)){r.push({taskReferenceName:s.taskReferenceName,taskName:s.name,taskType:s.type,reason:"检测到任务名称含调试/单次补偿/临时特征,建议从公共通用模板中剔除。",selected:!0});continue}if(t){const a=t.tasks.find(i=>i.referenceTaskName===s.taskReferenceName);a&&a.status==="SKIPPED"&&r.push({taskReferenceName:s.taskReferenceName,taskName:s.name,taskType:s.type,reason:"该任务在生产历史执行中被判定跳过 (SKIPPED),通常属于特殊条件下的低频补偿分支。",selected:!1})}}return r}function N1(e,t){const r=structuredClone(e);return r.tasks=(r.tasks||[]).filter(n=>!t.has(n.taskReferenceName)),r}function qs(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(qs);const t={};for(const[r,n]of Object.entries(e))typeof n=="string"?/(token|secret|password|authorization|apikey)/i.test(r)&&n.length>5?t[r]="":/\b1[3-9]\d{9}\b/.test(n)?t[r]=n.replace(/\b1[3-9]\d{9}\b/,"13800138000"):/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/.test(n)?t[r]=n.replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,"ops-notify@example.com"):/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/.test(n)?t[r]=n.replace(/\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b/,"172.16.0.42"):t[r]=n:typeof n=="object"&&n!==null?t[r]=qs(n):t[r]=n;return t}function C1(e){const{instance:t,title:r,category:n,valueProposition:s,author:a}=e,i=t.workflowDefinition?structuredClone(t.workflowDefinition):{name:t.workflowName||"extracted_workflow",tasks:t.tasks.map(b=>b.workflowTask||{name:b.taskDefName||b.referenceTaskName,taskReferenceName:b.referenceTaskName,type:b.taskType||"SIMPLE",inputParameters:b.inputData})},l=j1(i),c=I1(i,t),d=new Set(c.filter(b=>b.selected).map(b=>b.taskReferenceName)),u=N1(i,d),p=[],f=structuredClone(u);for(const b of l)if(b.action==="variable"){const S=`var_${b.keyName}_${Date.now().toString(36).slice(-3)}`;p.push({key:S,label:b.suggestedVarName||b.keyName,type:typeof b.rawValue=="number"?"number":"text",defaultValue:b.maskedValue||b.rawValue,required:!0,bindings:[b.path]})}const m={};for(const b of t.tasks)b.outputData&&!d.has(b.referenceTaskName)&&(m[b.referenceTaskName]=qs(b.outputData));const h={name:"生产真实运行数据脱敏样本",description:`基于实例 ${t.workflowId} 真实执行产物自动生成的高保真无害化数据集`,workflowInput:qs(t.input||{}),taskOutputs:m},y=`tpl_extracted_${Date.now().toString(36)}`,x=r||`${i.name||"业务流"} (实战萃取模板)`,g=n||"ops",v=s||`源于真实执行实例 ${t.workflowId},已完成自动化脱敏与参数提取。`;return{template:{id:y,version:"1.0.0",title:x,category:g,icon:"package",valueProposition:v,description:i.description||"由管理员从高频成功的生产运行记录中提炼而成的标准化黄金模板。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:25,typicalRunsPerWeek:10,popularityCount:1},difficulty:"intermediate",variables:p,definition:f,mockDataset:{scenarios:[h]},provenance:{source:"extracted",author:a||"Platform Admin",publishedAt:new Date().toISOString(),extractedFromWorkflowId:t.workflowId}},findings:l,prunedTasks:c,report:{extractedAt:new Date().toISOString(),totalTasksScanned:i.tasks?.length??0,sensitiveItemsCount:l.length,credentialsRedactedCount:l.filter(b=>b.kind==="credential").length,variablesCreatedCount:p.length}}}const E1=[{id:"tpl_ecs_auto_provision",version:"1.0.0",title:"云主机自动化交付与环境配置",category:"compute",icon:"rocket",valueProposition:"一键完成主机创建、运行时环境自动化部署、基线快照与交付群通知,单次节省 35 分钟手工操作。",description:"面向新业务系统上线场景,自动根据指定规格在云平台创建云主机,通过远程免密脚本自动安装 Docker 与运行时依赖,并在验证就绪后自动归档基线快照向运维协同群发送交付卡片。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:35,typicalRunsPerWeek:12},difficulty:"starter",variables:[{key:"instanceName",label:"新主机名称",type:"text",defaultValue:"app-service-prod",required:!0,placeholder:"例如: app-service-prod",bindings:["tasks[0].inputParameters.instanceName"]},{key:"regionId",label:"目标地域",type:"select",defaultValue:"cn-hangzhou",required:!0,options:[{label:"华东 1 (杭州)",value:"cn-hangzhou"},{label:"华北 2 (北京)",value:"cn-beijing"},{label:"华南 1 (深圳)",value:"cn-shenzhen"}],bindings:["tasks[0].inputParameters.regionId"]},{key:"notifyChannel",label:"交付通知渠道",type:"select",defaultValue:"webhook_dingtalk",required:!0,options:[{label:"钉钉运维机器人 (DingTalk)",value:"webhook_dingtalk"},{label:"企业微信机器人 (WeCom)",value:"webhook_wecom"},{label:"飞书群机器人 (Feishu/Lark)",value:"webhook_feishu"}],bindings:["tasks[4].inputParameters.channel"]}],definition:{name:"ecs_auto_provision_flow",description:"云主机全自动交付与运行时环境部署",version:1,tasks:[{name:"ecs_create_instance",taskReferenceName:"create_node",type:"HTTP",description:"创建计算型云主机",inputParameters:{_actionId:"ecs.create_instance",instanceName:"app-service-prod",regionId:"cn-hangzhou",instanceType:"ecs.c7.xlarge",imageId:"image-alilinux-3",systemDiskSize:120}},{name:"wait_for_network",taskReferenceName:"wait_network_ready",type:"WAIT",description:"等待网络与底层系统完成自检",inputParameters:{_actionId:"control.wait",duration:"10s"}},{name:"ecs_run_command",taskReferenceName:"install_runtime",type:"HTTP",description:"免密下发初始化命令: 安装 Docker 与守护进程",inputParameters:{_actionId:"ecs.run_command",instanceId:"${create_node.output.instanceId}",commandContent:"yum update -y && systemctl start docker && docker info",commandType:"RunShellScript",timeoutSeconds:60}},{name:"ecs_create_snapshot",taskReferenceName:"create_baseline_snap",type:"HTTP",description:"创建系统盘基线快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"${create_node.output.instanceId}",snapshotName:"baseline-init-snapshot",retentionDays:30}},{name:"send_operation_notification",taskReferenceName:"notify_devops",type:"EVENT",description:"向运维协同群发送交付卡片",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【交付就绪】新云主机已部署完成",content:"云主机 ${create_node.output.instanceId} 已创建并完成 Docker 运行时初始化与安全基线快照,内网IP: ${create_node.output.privateIp}。"}}]},mockDataset:{scenarios:[{name:"标准交付场景",description:"模拟一次完整的 4C8G 主机自动交付与脚本安装过程",workflowInput:{},taskOutputs:{create_node:{instanceId:"i-bp18a9z3j42m09a",instanceName:"app-service-prod",privateIp:"172.16.0.42",status:"RUNNING",createdAt:"2026-10-20T14:00:00Z"},wait_network_ready:{waited:!0,duration:"10s"},install_runtime:{exitCode:0,status:"SUCCESS",output:"Docker version 24.0.5 installed and running"},create_baseline_snap:{snapshotId:"s-bp199042",status:"ACCOMPLISHED"},notify_devops:{messageId:"msg-9921",sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_daily_snapshot_backup",version:"1.0.0",title:"核心云主机每日定时快照备份",category:"security",icon:"save",valueProposition:"每日自动化创建增量快照并自动清理超期备份,防勒索防误删,单次节省 15 分钟人工检查。",description:"自动对生产数据库或核心应用所在的云主机创建带时间戳的增量快照,保留 14 天自动循环轮转,并在完成备份后发送健康汇报。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:15,typicalRunsPerWeek:7},difficulty:"starter",variables:[{key:"instanceId",label:"目标云主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,placeholder:"例如: i-bp18a9z3j42m09a",bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]},{key:"retentionDays",label:"快照保留天数",type:"number",defaultValue:14,required:!0,bindings:["tasks[1].inputParameters.retentionDays"]}],definition:{name:"ecs_daily_snapshot_backup_flow",description:"核心云主机每日定时增量备份",version:1,tasks:[{name:"ecs_query_instance",taskReferenceName:"check_host",type:"HTTP",description:"检查主机运行健康状态",inputParameters:{_actionId:"ecs.query_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"ecs_create_snapshot",taskReferenceName:"create_daily_snap",type:"HTTP",description:"执行云盘增量备份快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"auto-daily-backup",retentionDays:14}},{name:"send_operation_notification",taskReferenceName:"notify_result",type:"EVENT",description:"发送备份执行简报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【快照备份成功】每日例行备份完成",content:"云主机 ${check_host.output.instanceId} (${check_host.output.status}) 增量快照已生成,快照ID: ${create_daily_snap.output.snapshotId}。"}}]},mockDataset:{scenarios:[{name:"定时备份成功场景",workflowInput:{},taskOutputs:{check_host:{instanceId:"i-bp18a9z3j42m09a",status:"RUNNING",osName:"Alibaba Cloud Linux 3"},create_daily_snap:{snapshotId:"s-bp188201",snapshotName:"auto-daily-backup",status:"ACCOMPLISHED"},notify_result:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_high_load_autoscale",version:"1.0.0",title:"主机高负载告警与在线自动升配",category:"ops",icon:"zap",valueProposition:"检测到 CPU 利用率超标时自动发起升配流程,内置人工审批安全网,秒级在线完成 4C8G -> 8C16G 弹性扩容。",description:"自动轮询主机性能指标,一旦触发瓶颈阈值,系统即刻生成规格变更提案并向架构师推送一键审批卡片,审批后自动在线变配,保障大促不卡顿。",connectors:["cloud_host","dingtalk","approval"],roi:{minutesSavedPerRun:40,typicalRunsPerWeek:5},difficulty:"intermediate",variables:[{key:"instanceId",label:"监控主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]},{key:"targetSpec",label:"目标扩容规格",type:"select",defaultValue:"ecs.c7.2xlarge",required:!0,options:[{label:"提升至 计算型 8C16G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"},{label:"提升至 内存型 8C32G (ecs.r7.2xlarge)",value:"ecs.r7.2xlarge"}],bindings:["tasks[2].inputParameters.targetSpec"]}],definition:{name:"ecs_high_load_autoscale_flow",description:"云主机高负载自动熔断与在线变配",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"fetch_metrics",type:"HTTP",description:"采集 CPU 与内存利用率",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:60}},{name:"human_operation_approval",taskReferenceName:"approve_spec_upgrade",type:"HUMAN",description:"高危硬件配置变更审批",inputParameters:{_actionId:"human.approval",assigneeRole:"architect",promptMessage:"云主机 ${fetch_metrics.output.instanceId} 当前 CPU 利用率达到 ${fetch_metrics.output.cpuUsagePercent}%,申请在线升配。",timeoutMinutes:30}},{name:"ecs_modify_spec",taskReferenceName:"apply_spec_change",type:"HTTP",description:"执行在线规格扩容变更",inputParameters:{_actionId:"ecs.modify_spec",instanceId:"i-bp18a9z3j42m09a",targetSpec:"ecs.c7.2xlarge"}},{name:"send_operation_notification",taskReferenceName:"notify_upgrade_done",type:"EVENT",description:"发送变配完成汇报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【升配成功】云主机硬件规格已在线提升",content:"云主机 ${fetch_metrics.output.instanceId} 已成功从 ${apply_spec_change.output.oldSpec} 变更为 ${apply_spec_change.output.newSpec}。"}}]},mockDataset:{scenarios:[{name:"高负载升配成功场景",workflowInput:{},taskOutputs:{fetch_metrics:{instanceId:"i-bp18a9z3j42m09a",cpuUsagePercent:88.5,isOverloaded:!0},approve_spec_upgrade:{approved:!0,reviewer:"architect@internal.cloud"},apply_spec_change:{oldSpec:"ecs.c7.xlarge",newSpec:"ecs.c7.2xlarge",status:"SUCCESS"},notify_upgrade_done:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_vulnerability_patch",version:"1.0.0",title:"生产主机一键漏洞巡检与修复",category:"security",icon:"shield",valueProposition:"修补前自动创建保护快照,免密下发 OS 补丁脚本,带审批确认软重启,消除系统 CVE 高危隐患。",description:"解决企业 Linux 主机补丁升级流程繁琐、缺少回滚预案的问题。流程自动先对磁盘建立防护快照,执行补丁更新后通知责任人确认软重启。",connectors:["cloud_host","dingtalk","approval"],roi:{minutesSavedPerRun:45,typicalRunsPerWeek:4},difficulty:"intermediate",variables:[{key:"instanceId",label:"目标主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId","tasks[3].inputParameters.instanceId"]}],definition:{name:"ecs_vulnerability_patch_flow",description:"带快照防护的操作系统漏洞巡检与修复流程",version:1,tasks:[{name:"ecs_create_snapshot",taskReferenceName:"patch_safeguard_snap",type:"HTTP",description:"建立补丁前安全还原快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"pre-patch-safeguard",retentionDays:7}},{name:"ecs_run_command",taskReferenceName:"apply_cve_patches",type:"HTTP",description:"下发漏洞热补丁脚本",inputParameters:{_actionId:"ecs.run_command",instanceId:"i-bp18a9z3j42m09a",commandContent:"yum update-minimal --security -y",commandType:"RunShellScript",timeoutSeconds:120}},{name:"human_operation_approval",taskReferenceName:"confirm_soft_reboot",type:"HUMAN",description:"责任人确认重启",inputParameters:{_actionId:"human.approval",assigneeRole:"devops_lead",promptMessage:"补丁更新已完成,请确认是否即刻安排主机软重启以使内核生效。",timeoutMinutes:60}},{name:"ecs_restart_instance",taskReferenceName:"reboot_host",type:"HTTP",description:"软重启生效补丁",inputParameters:{_actionId:"ecs.restart_instance",instanceId:"i-bp18a9z3j42m09a",forceRestart:!1}},{name:"send_operation_notification",taskReferenceName:"report_patch_result",type:"EVENT",description:"发送合规汇报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【补丁更新成功】系统漏洞修复完成",content:"云主机 ${patch_safeguard_snap.output.instanceId} 补丁更新完成,主机已完成重启并恢复在线。"}}]},mockDataset:{scenarios:[{name:"补丁升级全流程演示",workflowInput:{},taskOutputs:{patch_safeguard_snap:{snapshotId:"s-bp1904",status:"ACCOMPLISHED"},apply_cve_patches:{exitCode:0,output:"3 security packages updated",status:"SUCCESS"},confirm_soft_reboot:{approved:!0,reviewer:"devops_lead@internal.cloud"},reboot_host:{status:"RUNNING"},report_patch_result:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_night_idle_shutdown",version:"1.0.0",title:"非生产环境夜间定时关机降本",category:"cost",icon:"moon",valueProposition:"工作日 21:00 自动停止闲置研发测试主机,次日晨自动开机,降低约 65% 计算资源账单。",description:"自动在夜间巡检开发测试集群,若无活跃计算任务,则下发优雅安全关机指令,并在协同群汇报当晚关机台数与预计节约的算力金额。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:20,typicalRunsPerWeek:5},difficulty:"starter",variables:[{key:"instanceId",label:"测试环境主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]},{key:"forceStop",label:"超时是否强制关机",type:"boolean",defaultValue:!1,bindings:["tasks[1].inputParameters.forceStop"]}],definition:{name:"ecs_night_idle_shutdown_flow",description:"测试环境夜间自动关机降本",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"check_idle_state",type:"HTTP",description:"核实主机是否处于闲置低负载",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:300}},{name:"ecs_stop_instance",taskReferenceName:"shutdown_host",type:"HTTP",description:"执行优雅关机",inputParameters:{_actionId:"ecs.stop_instance",instanceId:"i-bp18a9z3j42m09a",forceStop:!1}},{name:"send_operation_notification",taskReferenceName:"notify_cost_saving",type:"EVENT",description:"发送夜间节能降本简报",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【夜间节能】测试主机已自动进入休眠",content:"测试主机 ${check_idle_state.output.instanceId} (CPU ${check_idle_state.output.cpuUsagePercent}%) 已于 21:00 完成关机,预计今夜节约 11 小时按量费用。"}}]},mockDataset:{scenarios:[{name:"闲置关机场景",workflowInput:{},taskOutputs:{check_idle_state:{instanceId:"i-bp18a9z3j42m09a",cpuUsagePercent:2.1,isOverloaded:!1},shutdown_host:{status:"STOPPED"},notify_cost_saving:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_morning_boot",version:"1.0.0",title:"测试环境工作日早晨定时自动开机",category:"cost",icon:"sunrise",valueProposition:"工作日 08:30 自动唤醒测试主机,自检网络并广播就绪通知,研发开工即可联调无需等待。",description:"与夜间关机模板形成完整的节能闭环,在工作日上班前 30 分钟定时批量启动主机,校验网络联通性后发送早报。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:15,typicalRunsPerWeek:5},difficulty:"starter",variables:[{key:"instanceId",label:"测试环境主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]}],definition:{name:"ecs_morning_boot_flow",description:"测试环境早间自动唤醒开机",version:1,tasks:[{name:"ecs_start_instance",taskReferenceName:"boot_host",type:"HTTP",description:"执行主机开机启动",inputParameters:{_actionId:"ecs.start_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"wait_boot_ready",taskReferenceName:"wait_boot",type:"WAIT",description:"等待操作系统内核引导就绪",inputParameters:{_actionId:"control.wait",duration:"10s"}},{name:"ecs_query_instance",taskReferenceName:"verify_network",type:"HTTP",description:"核实网络与运行状态",inputParameters:{_actionId:"ecs.query_instance",instanceId:"i-bp18a9z3j42m09a"}},{name:"send_operation_notification",taskReferenceName:"notify_team_ready",type:"EVENT",description:"向研发测试群发送环境就绪广播",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【环境就绪】测试云主机已唤醒开机",content:"测试主机 ${verify_network.output.instanceId} 已启动 (${verify_network.output.status}),内网IP: ${verify_network.output.privateIp},开发人员可正常开始联调。"}}]},mockDataset:{scenarios:[{name:"晨间开机唤醒演示",workflowInput:{},taskOutputs:{boot_host:{instanceId:"i-bp18a9z3j42m09a",currentStatus:"STARTING"},wait_boot:{waited:!0},verify_network:{instanceId:"i-bp18a9z3j42m09a",status:"RUNNING",privateIp:"172.16.0.42"},notify_team_ready:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_disk_expansion",version:"1.0.0",title:"磁盘容量告警与在线自动扩容",category:"ops",icon:"hard-drive",valueProposition:"磁盘利用率超 85% 自动快照并在线扩充云盘容量,免停机扩展文件系统,杜绝业务写爆宕机。",description:"自动对磁盘快满的主机执行保护性快照,随后免停机远程下发 growpart 与 resize2fs 脚本刷新空间,最后在运维群反馈扩容结果。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:30,typicalRunsPerWeek:6},difficulty:"intermediate",variables:[{key:"instanceId",label:"目标主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId","tasks[2].inputParameters.instanceId"]}],definition:{name:"ecs_disk_expansion_flow",description:"云主机磁盘在线自动扩容与自愈",version:1,tasks:[{name:"ecs_get_monitor_metrics",taskReferenceName:"check_disk_usage",type:"HTTP",description:"检测磁盘利用率",inputParameters:{_actionId:"ecs.get_monitor_metrics",instanceId:"i-bp18a9z3j42m09a",periodSeconds:60}},{name:"ecs_create_snapshot",taskReferenceName:"pre_expand_snap",type:"HTTP",description:"扩容前创建磁盘保护快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"pre-disk-expansion",retentionDays:7}},{name:"ecs_run_command",taskReferenceName:"grow_filesystem",type:"HTTP",description:"在线扩展分区与文件系统",inputParameters:{_actionId:"ecs.run_command",instanceId:"i-bp18a9z3j42m09a",commandContent:"growpart /dev/vda 1 && resize2fs /dev/vda1 && df -h",commandType:"RunShellScript",timeoutSeconds:60}},{name:"send_operation_notification",taskReferenceName:"notify_expand_done",type:"EVENT",description:"发送扩容完成通知",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【自愈成功】云盘空间已在线扩容",content:"云主机 ${check_disk_usage.output.instanceId} 磁盘扩容完毕,当前文件系统状态正常。"}}]},mockDataset:{scenarios:[{name:"磁盘扩容自愈演示",workflowInput:{},taskOutputs:{check_disk_usage:{instanceId:"i-bp18a9z3j42m09a",diskUsagePercent:89.2},pre_expand_snap:{snapshotId:"s-bp1449",status:"ACCOMPLISHED"},grow_filesystem:{exitCode:0,output:"CHANGED: partition=1, size expanded to 200GB"},notify_expand_done:{sentStatus:"DELIVERED"}}}]}},{id:"tpl_ecs_emergency_isolation",version:"1.0.0",title:"突发入侵应急响应与快照取证",category:"security",icon:"bell-ring",valueProposition:"发生高危网络入侵威胁时,秒级冻结证据快照并强制关机隔离,将安全暴露面降至最低。",description:"面对勒索病毒、WebShell 或异常爆破入侵时,自动对受害主机创建取证快照保存现场内存与日志,随后强制关机切断危害,并向 SecOps 安全小组发送紧急红色通知。",connectors:["cloud_host","dingtalk"],roi:{minutesSavedPerRun:60,typicalRunsPerWeek:1},difficulty:"advanced",variables:[{key:"instanceId",label:"受害云主机 ID",type:"text",defaultValue:"i-bp18a9z3j42m09a",required:!0,bindings:["tasks[0].inputParameters.instanceId","tasks[1].inputParameters.instanceId"]}],definition:{name:"ecs_emergency_isolation_flow",description:"安全事件突发应急取证与快速隔离",version:1,tasks:[{name:"ecs_create_snapshot",taskReferenceName:"forensics_snapshot",type:"HTTP",description:"紧急创建现场取证快照",inputParameters:{_actionId:"ecs.create_snapshot",instanceId:"i-bp18a9z3j42m09a",snapshotName:"security-forensics-evidence",retentionDays:90}},{name:"ecs_stop_instance",taskReferenceName:"isolate_victim_node",type:"HTTP",description:"强制切断关机隔离",inputParameters:{_actionId:"ecs.stop_instance",instanceId:"i-bp18a9z3j42m09a",forceStop:!0}},{name:"send_operation_notification",taskReferenceName:"alert_secops_incident",type:"EVENT",description:"发送安全应急处置最高级别预警",inputParameters:{_actionId:"notify.send_message",channel:"webhook_dingtalk",title:"【紧急安全通报】入侵主机已隔离取证",content:"受害主机 ${forensics_snapshot.output.instanceId} 已完成现场留证快照 (${forensics_snapshot.output.snapshotId}) 并被强制关机隔离,请 SecOps 立即启动应急调查。"}}]},mockDataset:{scenarios:[{name:"应急阻断演示",workflowInput:{},taskOutputs:{forensics_snapshot:{snapshotId:"s-forensics-911",status:"ACCOMPLISHED"},isolate_victim_node:{status:"STOPPED",forceStop:!0},alert_secops_incident:{sentStatus:"DELIVERED"}}}]}}];class R1{templates=new Map;version=0;listeners=new Set;constructor(t=[]){this.registerAll(t)}register(t){this.templates.set(t.id,t),this.version+=1,this.listeners.forEach(r=>r())}getVersion=()=>this.version;subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});registerAll(t){for(const r of t)this.register(r)}getAllTemplates(){return Array.from(this.templates.values())}getTemplateById(t){return this.templates.get(t)}search(t,r="all"){let n=this.getAllTemplates();if(r&&r!=="all"&&(n=n.filter(s=>s.category===r)),t&&t.trim()){const s=t.toLowerCase().trim();n=n.filter(a=>a.title.toLowerCase().includes(s)||a.valueProposition.toLowerCase().includes(s)||a.description.toLowerCase().includes(s))}return n}}const Ku=new R1(E1),O1=({isOpen:e,instance:t,onClose:r,onPublished:n})=>{const{theme:s,themeColor:a}=re($e(w=>({theme:w.theme,themeColor:w.themeColor}))),i=T.useMemo(()=>C1({instance:t,title:`${t.workflowName||"云平台工作流"} (实战提炼)`,category:"ops",valueProposition:`基于实例 ${t.workflowId} 的成功运行萃取,已通过自动化脱敏与参数提取。`,author:"系统管理员"}),[t]),[l,c]=T.useState(i.template.title),[d,u]=T.useState(i.template.category),[p,f]=T.useState(i.template.valueProposition),[m,h]=T.useState(i.template.roi.minutesSavedPerRun),[y,x]=T.useState(()=>{const w={};for(const I of i.prunedTasks)w[I.taskReferenceName]=I.selected;return w}),[g,v]=T.useState(!1),[k,b]=T.useState(!1);if(!e||typeof document>"u")return null;const S=w=>{x(I=>({...I,[w]:!I[w]}))},j=()=>{v(!0);try{const w={...i.template,title:l,category:d,valueProposition:p,roi:{...i.template.roi,minutesSavedPerRun:m}};Ku.register(w),n&&n(w),b(!0),setTimeout(()=>{r()},1500)}catch(w){alert(`发布模板出错: ${w.message}`)}finally{v(!1)}},_=i.findings;return kt.createPortal(o.jsx("div",{"data-mode":s,"data-brand":a,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"var(--cm-overlay)",backdropFilter:"blur(6px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit"},onClick:r,children:o.jsxs("div",{onClick:w=>w.stopPropagation(),style:{width:980,maxWidth:"calc(100vw - 48px)",height:720,maxHeight:"calc(100vh - 48px)",background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:14,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"14px 20px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary)"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx("span",{style:{fontSize:22},children:o.jsx(tb,{size:22,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,fontSize:15,color:"var(--text-primary)"},children:"生产工作流一键提炼与脱敏工作台 (管理员)"}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)"},children:["基于执行实例 #",t.workflowId," 自动识别敏感信息并生成高保真模板"]})]})]}),o.jsx("button",{onClick:r,style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"18px 20px",display:"grid",gridTemplateColumns:"1fr 1.2fr 1fr",gap:16},children:[o.jsxs("div",{style:{background:"var(--bg-primary)",borderRadius:10,border:"1px solid var(--border-primary)",padding:14,display:"flex",flexDirection:"column",gap:10},children:[o.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary)"},children:"1. 骨架拓扑剪枝建议"}),o.jsx("div",{style:{fontSize:11,color:"var(--text-muted)"},children:"自动识别并建议剔除特定的临时调试、重试与低频孤立分支:"}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginTop:4},children:i.template.definition.tasks?.map((w,I)=>{const C=!!y[w.taskReferenceName];return o.jsxs("div",{style:{padding:"8px 10px",borderRadius:6,background:C?"color-mix(in srgb, var(--cm-status-failed) 8%, transparent)":"var(--bg-highlight)",border:`1px solid ${C?"color-mix(in srgb, var(--cm-status-failed) 25%, transparent)":"var(--cm-border-subtle)"}`,display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:12,opacity:C?.6:1},children:[o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[o.jsxs("span",{style:{color:"var(--color-accent)",fontWeight:600},children:["#",I+1]}),o.jsx("span",{style:{color:C?"var(--cm-status-failed)":"var(--text-primary)"},children:w.description||w.name})]}),o.jsx("div",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace"},children:w.taskReferenceName})]}),o.jsx("button",{onClick:()=>S(w.taskReferenceName),style:{padding:"2px 6px",borderRadius:4,background:C?"color-mix(in srgb, var(--cm-status-failed) 20%, transparent)":"var(--bg-highlight)",border:"none",color:C?"var(--cm-status-failed)":"var(--text-muted)",fontSize:11,cursor:"pointer"},children:C?"已剪枝剔除":"保留"})]},w.taskReferenceName)})})]}),o.jsxs("div",{style:{background:"var(--bg-primary)",borderRadius:10,border:"1px solid var(--border-primary)",padding:14,display:"flex",flexDirection:"column",gap:10},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary)"},children:"2. 敏感项扫描与变量提取"}),o.jsxs("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"color-mix(in srgb, var(--cm-status-success) 15%, transparent)",color:"var(--cm-status-success)",fontWeight:600},children:["已扫描 ",_.length," 项"]})]}),o.jsx("div",{style:{fontSize:11,color:"var(--text-muted)"},children:"命中规则的生产密钥已强制置空,真实 IP/ID 推荐转为填空变量:"}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginTop:4},children:_.length===0?o.jsxs("div",{style:{padding:"24px 12px",textAlign:"center",color:"var(--text-muted)",fontSize:12},children:[o.jsx(Wt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"未发现任何硬编码的高危凭据或敏感信息"]}):_.map(w=>o.jsxs("div",{style:{padding:"8px 10px",borderRadius:6,background:"var(--bg-highlight)",border:"1px solid var(--border-primary)",display:"flex",flexDirection:"column",gap:4,fontSize:11},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsx("span",{style:{padding:"1px 5px",borderRadius:3,fontSize:10,fontWeight:600,background:w.kind==="credential"?"color-mix(in srgb, var(--cm-status-failed) 20%, transparent)":w.kind==="network"?"color-mix(in srgb, var(--color-accent) 20%, transparent)":"color-mix(in srgb, var(--cm-status-warning) 20%, transparent)",color:w.kind==="credential"?"var(--cm-status-failed)":w.kind==="network"?"var(--color-accent)":"var(--cm-status-warning)"},children:w.kind==="credential"?"密钥凭据":w.kind==="network"?"内网地址":w.kind==="pii"?"个人隐私":"云资源ID"}),o.jsxs("span",{style:{color:"var(--text-muted)"},children:["建议处理: ",w.action==="variable"?"提取为向导变量":"自动掩码脱敏"]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginTop:2},children:[o.jsx("span",{style:{color:"var(--text-secondary)"},children:"字段:"}),o.jsx("span",{style:{color:"var(--text-primary)",fontFamily:"monospace"},children:w.keyName})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{color:"var(--text-secondary)"},children:"脱敏后:"}),o.jsx("span",{style:{color:"var(--cm-status-success)",fontFamily:"monospace"},children:w.maskedValue?String(w.maskedValue):"(强制置空并由用户填入)"})]})]},w.id))})]}),o.jsxs("div",{style:{background:"var(--bg-primary)",borderRadius:10,border:"1px solid var(--border-primary)",padding:14,display:"flex",flexDirection:"column",gap:12},children:[o.jsx("div",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary)"},children:"3. 模板货架信息配置"}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{style:{fontSize:12,color:"var(--text-secondary)"},children:"模板中文标题"}),o.jsx("input",{type:"text",value:l,onChange:w=>c(w.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}})]}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{style:{fontSize:12,color:"var(--text-secondary)"},children:"业务分类"}),o.jsxs("select",{value:d,onChange:w=>u(w.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"},children:[o.jsx("option",{value:"compute",children:"交付与计算"}),o.jsx("option",{value:"security",children:"安全与容灾"}),o.jsx("option",{value:"ops",children:"运维与自愈"}),o.jsx("option",{value:"cost",children:"节能与降本"})]})]}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{style:{fontSize:12,color:"var(--text-secondary)"},children:"一句话业务价值"}),o.jsx("textarea",{rows:2,value:p,onChange:w=>f(w.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none",resize:"none"}})]}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{style:{fontSize:12,color:"var(--text-secondary)"},children:"单次预估节省 (分钟)"}),o.jsx("input",{type:"number",value:m,onChange:w=>h(Number(w.target.value)),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}})]}),o.jsxs("div",{style:{marginTop:6,padding:"8px 10px",borderRadius:6,background:"color-mix(in srgb, var(--cm-status-success) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-success) 20%, transparent)",fontSize:11,color:"var(--cm-status-success)"},children:[o.jsx(Wt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"已从这次运行生成脱敏后的试跑数据。发布后可在本页的模板中心一键试跑;模板只保存在当前页面,刷新后不保留,如需给其他人使用,请联系管理员接入模板库。"]})]})]}),o.jsxs("div",{style:{padding:"12px 20px",borderTop:"1px solid var(--border-primary)",background:"var(--bg-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)"},children:["审计报告: 扫描 ",i.report.totalTasksScanned," 个任务 · 脱敏凭证"," ",i.report.credentialsRedactedCount," 项 · 生成模板变量"," ",i.report.variablesCreatedCount," 项"]}),o.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[k&&o.jsxs("span",{style:{fontSize:12,color:"var(--cm-status-success)",fontWeight:600},children:[o.jsx(Wt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"已发布到本页模板中心"]}),o.jsx("button",{onClick:r,style:{padding:"6px 14px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary)",color:"var(--text-secondary)",fontSize:12,cursor:"pointer"},children:"取消"}),o.jsxs("button",{onClick:j,disabled:g||k,style:{padding:"6px 18px",borderRadius:6,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontSize:12,fontWeight:600,cursor:g||k?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[o.jsx("span",{children:o.jsx(mn,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:g?"发布中…":"发布到本页模板中心"})]})]})]})]})}),document.body)},m2=e=>!!e&&e.startsWith("sandbox-dryrun-"),h2=()=>{const[e,t]=T.useState(!1),{executionData:r,workflowInstance:n,showAnalysisPanel:s,setShowAnalysisPanel:a,switchToEditAndFocusParam:i,selectTaskAction:l,taskMap:c}=re($e(b=>({executionData:b.executionData,workflowInstance:b.workflowInstance,showAnalysisPanel:b.showAnalysisPanel,setShowAnalysisPanel:b.setShowAnalysisPanel,switchToEditAndFocusParam:b.switchToEditAndFocusParam,selectTaskAction:b.selectTaskAction,taskMap:b.taskMap}))),d=T.useMemo(()=>r?u2(r,n??null):null,[r,n]);if(!s||!d)return null;const{totalTasks:u,completedTasks:p,failedTasks:f,skippedTasks:m,totalDurationMs:h,steps:y}=d,x=u>0?Math.round(p/u*100):0,g=n?.status,v=g?rt(g):null,k=v?.icon;return o.jsxs("div",{className:"esp-panel glass-panel",children:[o.jsxs("div",{className:"esp-header",children:[o.jsxs("div",{className:"esp-title",children:[o.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),o.jsx("path",{d:"M5 8h6M5 5h3M5 11h4"})]}),"执行分析"]}),v&&k&&o.jsxs("span",{className:"esp-wf-status",style:{color:v.color,display:"inline-flex",alignItems:"center",gap:4},title:g,children:[o.jsx(k,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),v.label]}),n&&!m2(n.workflowId)&&o.jsxs("button",{onClick:()=>t(!0),style:{padding:"3px 8px",borderRadius:5,background:"color-mix(in srgb, var(--color-brand-blue) 18%, transparent)",border:"1px solid color-mix(in srgb, var(--color-brand-blue) 40%, transparent)",color:"var(--color-brand-blue)",fontSize:11,cursor:"pointer",fontWeight:600,display:"inline-flex",alignItems:"center",gap:4,marginLeft:"auto",marginRight:6},title:"将本次执行实例脱敏并提炼为公共标准化模板",children:[o.jsx("span",{children:o.jsx(tb,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:"提取为模板"})]}),o.jsx("button",{className:"esp-close",onClick:()=>a(!1),children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{className:"esp-content",children:[o.jsxs("div",{className:"esp-overview",children:[o.jsxs("div",{className:"esp-card",children:[o.jsx("span",{className:"esp-card-value",children:u}),o.jsx("span",{className:"esp-card-label",children:"总任务数"})]}),o.jsxs("div",{className:"esp-card esp-card-success",children:[o.jsx("span",{className:"esp-card-value",style:{color:"var(--status-completed)"},children:p}),o.jsx("span",{className:"esp-card-label",children:"已完成"})]}),o.jsxs("div",{className:"esp-card esp-card-failed",children:[o.jsx("span",{className:"esp-card-value",style:{color:f>0?"var(--status-failed)":"var(--text-secondary)"},children:f}),o.jsx("span",{className:"esp-card-label",children:"失败"})]}),o.jsxs("div",{className:"esp-card",children:[o.jsx("span",{className:"esp-card-value",children:_1(h)}),o.jsx("span",{className:"esp-card-label",children:"总耗时"})]})]}),o.jsx("div",{className:"esp-progress-bar",children:o.jsx("div",{className:"esp-progress-fill",style:{width:`${x}%`,background:f>0?"var(--status-failed)":"var(--status-completed)"},title:`成功率 ${x}%`})}),o.jsxs("div",{className:"esp-progress-label",children:[x,"% 成功率",m>0?`,${m} 个任务已跳过`:""]}),y.filter(b=>b.diagnostics.length>0).map(b=>o.jsxs("div",{className:"esp-diagnostic-card",children:[o.jsxs("div",{className:"esp-diag-task-ref",children:[o.jsx("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",style:{color:"var(--status-failed)",flexShrink:0},children:o.jsx("path",{d:"M8 1a7 7 0 100 14A7 7 0 008 1zm-.75 4a.75.75 0 011.5 0v3.5a.75.75 0 01-1.5 0V5zm.75 7a1 1 0 110-2 1 1 0 010 2z"})}),b.taskRef]}),b.diagnostics.map((S,j)=>o.jsxs("div",{className:"esp-diag-item",style:{borderLeftColor:f2(S.category)},children:[o.jsxs("div",{className:"esp-diag-title",children:[o.jsx("span",{style:{display:"inline-flex"},children:o.jsx(We,{name:p2(S.category),size:14})}),S.title]}),o.jsx("p",{className:"esp-diag-explanation",children:S.explanation}),o.jsxs("button",{className:"esp-fix-btn",onClick:()=>i(b.taskRef,S.suggestEditParam),children:["去修复",o.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:o.jsx("path",{d:"M5 8h6M9 5l3 3-3 3"})})]})]},j))]},b.taskRef)),o.jsx("div",{className:"esp-section-label",children:"步骤执行时序"}),o.jsxs("div",{className:"esp-steps-table",children:[o.jsxs("div",{className:"esp-steps-header",children:[o.jsx("span",{children:"#"}),o.jsx("span",{children:"任务引用名"}),o.jsx("span",{children:"状态"}),o.jsx("span",{children:"耗时"}),o.jsx("span",{children:"重试"})]}),y.map((b,S)=>{const j=rt(b.status),_=j.icon,w=c[b.taskRef];return o.jsxs("button",{className:"esp-step-row",onClick:()=>w&&l(w,!0),title:b.reasonForIncompletion||b.taskRef,children:[o.jsx("span",{className:"esp-step-idx",children:S+1}),o.jsx("span",{className:"esp-step-ref",children:b.taskRef}),o.jsxs("span",{className:"esp-step-status",style:{color:j.color},title:b.status,children:[o.jsx(_,{size:12,strokeWidth:1.75,"aria-hidden":"true"}),j.label]}),o.jsx("span",{className:"esp-step-duration",children:_1(b.durationMs)}),o.jsx("span",{className:"esp-step-retry",style:{color:b.retryCount>0?"var(--status-failed)":"var(--text-secondary)"},title:b.iterationCount>0?`${b.iterationCount} 轮迭代`:void 0,children:b.retryCount>0?`${b.retryCount} 次`:"-"})]},b.taskRef)})]})]}),e&&n&&o.jsx(O1,{isOpen:e,instance:n,onClose:()=>t(!1),onPublished:()=>{console.log("[ExecutionSummaryPanel] 模板已发布到本页模板中心")}})]})},y2=e=>typeof e=="string"&&e.includes("${");function Jt(e,t){if(e==null||e==="")return t;if(typeof e=="number")return Number.isFinite(e)?e:t;if(typeof e=="string"){if(y2(e))return e;const r=Number(e.trim());return e.trim()!==""&&Number.isFinite(r)?r:e}return t}const P1=[{id:"ecs.create_instance",name:"创建云主机",category:"compute",icon:"server",description:"在指定可用区根据镜像与规格创建并初始化一台新的云主机实例",connector:"cloud_host",riskLevel:"safe",fields:[{key:"regionId",label:"所属地域",type:"select",required:!0,defaultValue:"cn-hangzhou",options:[{label:"华东 1 (杭州)",value:"cn-hangzhou"},{label:"华北 2 (北京)",value:"cn-beijing"},{label:"华南 1 (深圳)",value:"cn-shenzhen"},{label:"亚太东南 1 (新加坡)",value:"ap-southeast-1"}],acceptsPills:!0},{key:"instanceType",label:"计算规格",type:"select",required:!0,defaultValue:"ecs.c7.xlarge",options:[{label:"通用型 2C4G (ecs.g7.large)",value:"ecs.g7.large"},{label:"计算型 4C8G (ecs.c7.xlarge)",value:"ecs.c7.xlarge"},{label:"内存型 4C16G (ecs.r7.xlarge)",value:"ecs.r7.xlarge"},{label:"高性能 8C32G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"}],acceptsPills:!0},{key:"imageId",label:"操作系统镜像",type:"select",required:!0,defaultValue:"image-alilinux-3",options:[{label:"Alibaba Cloud Linux 3.2104 LTS 64位",value:"image-alilinux-3"},{label:"Ubuntu 22.04 LTS 64位",value:"image-ubuntu-22"},{label:"CentOS 7.9 64位",value:"image-centos-7"},{label:"Debian 12 64位",value:"image-debian-12"}],acceptsPills:!0},{key:"instanceName",label:"主机名称",type:"text",placeholder:"例如: web-prod-01",required:!0,defaultValue:"app-server-node",acceptsPills:!0},{key:"systemDiskSize",label:"系统盘容量 (GB)",type:"number",defaultValue:100,required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"instanceName",label:"主机名称",type:"string",example:"app-server-node"},{key:"privateIp",label:"内网IP",type:"string",example:"172.16.0.42"},{key:"status",label:"实例状态",type:"string",example:"RUNNING"},{key:"createdAt",label:"创建时间",type:"string",example:"2026-10-20T14:00:00Z"}],compile:(e,t)=>({name:"ecs_create_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`创建云主机: ${e.instanceName||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.create_instance",actionName:"创建云主机",regionId:e.regionId??"cn-hangzhou",instanceType:e.instanceType??"ecs.c7.xlarge",imageId:e.imageId??"image-alilinux-3",instanceName:e.instanceName??"app-node",systemDiskSize:Jt(e.systemDiskSize,100),http_request:{uri:"https://ecs.internal.cloud/api/v2/instances",method:"POST",body:{regionId:e.regionId,instanceType:e.instanceType,imageId:e.imageId,instanceName:e.instanceName,systemDiskSize:Jt(e.systemDiskSize,100)}}}}),decompile:e=>{if(e.inputParameters?._actionId==="ecs.create_instance"){const t=e.inputParameters;return{regionId:t.regionId??"cn-hangzhou",instanceType:t.instanceType??"ecs.c7.xlarge",imageId:t.imageId??"image-alilinux-3",instanceName:t.instanceName??e.taskReferenceName,systemDiskSize:t.systemDiskSize??100}}return null},mockOutput:e=>({instanceId:`i-bp1${Math.random().toString(36).substring(2,9)}`,instanceName:e.instanceName||"app-server-node",privateIp:"172.16.0."+Math.floor(10+Math.random()*200),status:"RUNNING",regionId:e.regionId||"cn-hangzhou",instanceType:e.instanceType||"ecs.c7.xlarge",createdAt:new Date().toISOString()})},{id:"ecs.query_instance",name:"查询云主机详情",category:"compute",icon:"search",description:"根据主机实例 ID 查询其实时运行状态、配置规格与网络 IP",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"例如: i-bp18a9z3j42m09a 或绑定上游胶囊",required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"运行状态",type:"string",example:"RUNNING"},{key:"cpu",label:"CPU核心数",type:"number",example:4},{key:"memoryGb",label:"内存(GB)",type:"number",example:8},{key:"privateIp",label:"内网IP",type:"string",example:"172.16.0.42"},{key:"publicIp",label:"公网IP",type:"string",example:"47.98.112.23"},{key:"osName",label:"操作系统",type:"string",example:"Alibaba Cloud Linux 3"}],compile:(e,t)=>({name:"ecs_query_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`查询云主机状态: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.query_instance",actionName:"查询云主机详情",instanceId:e.instanceId,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}`,method:"GET"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.query_instance"?{instanceId:e.inputParameters.instanceId??""}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RUNNING",cpu:4,memoryGb:8,privateIp:"172.16.0.42",publicIp:"47.98.112.23",osName:"Alibaba Cloud Linux 3.2104",uptimeHours:360})},{id:"ecs.start_instance",name:"启动云主机",category:"compute",icon:"play",description:"将处于关机/停止状态的云主机实例开机启动",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"选择或填入要开机的主机 ID",required:!0,acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"previousStatus",label:"变更前状态",type:"string",example:"STOPPED"},{key:"currentStatus",label:"当前状态",type:"string",example:"STARTING"},{key:"startedAt",label:"开机时间",type:"string",example:"2026-10-20T14:15:00Z"}],compile:(e,t)=>({name:"ecs_start_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`开机启动云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.start_instance",actionName:"启动云主机",instanceId:e.instanceId,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/start`,method:"POST"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.start_instance"?{instanceId:e.inputParameters.instanceId??""}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",previousStatus:"STOPPED",currentStatus:"RUNNING",startedAt:new Date().toISOString()})},{id:"ecs.stop_instance",name:"停止云主机",category:"compute",icon:"stop",description:"安全关机或强制关机运行中的云主机实例",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"选择或填入要关机的主机 ID",required:!0,acceptsPills:!0},{key:"forceStop",label:"是否强制关机",type:"boolean",defaultValue:!1,help:"默认安全优雅关机,开启后若超时将直接切断电源"}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"当前状态",type:"string",example:"STOPPED"},{key:"stoppedAt",label:"关机完成时间",type:"string",example:"2026-10-20T14:20:00Z"}],compile:(e,t)=>({name:"ecs_stop_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`停止云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.stop_instance",actionName:"停止云主机",instanceId:e.instanceId,forceStop:!!e.forceStop,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/stop`,method:"POST",body:{forceStop:e.forceStop}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.stop_instance"?{instanceId:e.inputParameters.instanceId??"",forceStop:!!e.inputParameters.forceStop}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"STOPPED",forceStop:!!e.forceStop,stoppedAt:new Date().toISOString()})},{id:"ecs.restart_instance",name:"重启云主机",category:"compute",icon:"refresh",description:"重新启动运行中的云主机(支持软重启与强制硬重启)",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",placeholder:"例如: i-bp18a9z3j42m09a",required:!0,acceptsPills:!0},{key:"forceRestart",label:"强制重启 (硬重启)",type:"boolean",defaultValue:!1}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"状态",type:"string",example:"REBOOTING"},{key:"restartedAt",label:"重启时间",type:"string",example:"2026-10-20T14:22:00Z"}],compile:(e,t)=>({name:"ecs_restart_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`重启云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.restart_instance",actionName:"重启云主机",instanceId:e.instanceId,forceRestart:!!e.forceRestart,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/restart`,method:"POST",body:{forceRestart:!!e.forceRestart}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.restart_instance"?{instanceId:e.inputParameters.instanceId??"",forceRestart:!!e.inputParameters.forceRestart}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RUNNING",restartedAt:new Date().toISOString()})},{id:"ecs.modify_spec",name:"变更实例规格 (升降配)",category:"compute",icon:"zap",description:"在线或离线升级/降低云主机 CPU 与内存硬件配置",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"targetSpec",label:"目标规格配置",type:"select",required:!0,defaultValue:"ecs.c7.2xlarge",options:[{label:"提升至 计算型 8C16G (ecs.c7.2xlarge)",value:"ecs.c7.2xlarge"},{label:"提升至 内存型 8C32G (ecs.r7.2xlarge)",value:"ecs.r7.2xlarge"},{label:"降低至 通用型 2C4G (ecs.g7.large)",value:"ecs.g7.large"}],acceptsPills:!0}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"oldSpec",label:"变更前规格",type:"string",example:"ecs.c7.xlarge"},{key:"newSpec",label:"新规格",type:"string",example:"ecs.c7.2xlarge"},{key:"status",label:"变配状态",type:"string",example:"SUCCESS"}],compile:(e,t)=>({name:"ecs_modify_spec",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`云主机变配为 ${e.targetSpec||""}`,inputParameters:{_actionId:"ecs.modify_spec",actionName:"变更实例规格",instanceId:e.instanceId,targetSpec:e.targetSpec,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/spec`,method:"PUT",body:{instanceType:e.targetSpec}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.modify_spec"?{instanceId:e.inputParameters.instanceId??"",targetSpec:e.inputParameters.targetSpec??"ecs.c7.2xlarge"}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",oldSpec:"ecs.c7.xlarge",newSpec:e.targetSpec||"ecs.c7.2xlarge",status:"SUCCESS",effectiveImmediately:!0})},{id:"ecs.create_snapshot",name:"创建云盘快照",category:"storage",icon:"save",description:"为云主机的系统盘或数据盘创建实时快照,用于容灾备份或回滚",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"snapshotName",label:"快照名称/备注",type:"text",defaultValue:"backup-auto-snapshot",acceptsPills:!0},{key:"retentionDays",label:"自动保留天数",type:"number",defaultValue:7,help:"过期后自动清理释放,0 为永久保留"}],outputs:[{key:"snapshotId",label:"快照ID",type:"string",example:"s-bp14209938"},{key:"snapshotName",label:"快照名称",type:"string",example:"backup-auto-snapshot"},{key:"progress",label:"创建进度",type:"string",example:"100%"},{key:"status",label:"状态",type:"string",example:"ACCOMPLISHED"}],compile:(e,t)=>({name:"ecs_create_snapshot",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`创建快照: ${e.snapshotName||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.create_snapshot",actionName:"创建云盘快照",instanceId:e.instanceId,snapshotName:e.snapshotName,retentionDays:Jt(e.retentionDays,7),http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/snapshots`,method:"POST",body:{snapshotName:e.snapshotName,retentionDays:Jt(e.retentionDays,7)}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.create_snapshot"?{instanceId:e.inputParameters.instanceId??"",snapshotName:e.inputParameters.snapshotName??"backup-auto-snapshot",retentionDays:e.inputParameters.retentionDays??7}:null,mockOutput:e=>({snapshotId:`s-bp1${Math.random().toString(36).substring(2,8)}`,snapshotName:e.snapshotName||"backup-auto-snapshot",progress:"100%",status:"ACCOMPLISHED",sizeGb:100})},{id:"ecs.run_command",name:"执行远程运维脚本",category:"compute",icon:"terminal",description:"免登录直接在云主机内部运行 Shell/Python 脚本并捕获返回日志",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"commandType",label:"脚本语言",type:"select",defaultValue:"RunShellScript",options:[{label:"Shell 脚本 (Linux)",value:"RunShellScript"},{label:"Python 脚本",value:"RunPythonScript"}]},{key:"commandContent",label:"执行脚本命令",type:"textarea",placeholder:"例如: df -h && free -m && systemctl status nginx",defaultValue:"uptime && free -m",required:!0,acceptsPills:!0},{key:"timeoutSeconds",label:"超时时间 (秒)",type:"number",defaultValue:60}],outputs:[{key:"commandId",label:"调用批次ID",type:"string",example:"cmd-0992384"},{key:"exitCode",label:"进程退出码",type:"number",example:0},{key:"output",label:"标准输出日志",type:"string",example:"Linux 5.10.134-13.al8.x86_64"},{key:"status",label:"执行状态",type:"string",example:"SUCCESS"}],compile:(e,t)=>({name:"ecs_run_command",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`主机下发命令: ${t.taskReferenceName}`,inputParameters:{_actionId:"ecs.run_command",actionName:"执行远程运维脚本",instanceId:e.instanceId,commandType:e.commandType??"RunShellScript",commandContent:e.commandContent,timeoutSeconds:Jt(e.timeoutSeconds,60),http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/commands`,method:"POST",body:{commandType:e.commandType??"RunShellScript",commandContent:e.commandContent,timeoutSeconds:Jt(e.timeoutSeconds,60)}}}}),decompile:e=>e.inputParameters?._actionId==="ecs.run_command"?{instanceId:e.inputParameters.instanceId??"",commandType:e.inputParameters.commandType??"RunShellScript",commandContent:e.inputParameters.commandContent??"",timeoutSeconds:e.inputParameters.timeoutSeconds??60}:null,mockOutput:e=>({commandId:`cmd-${Date.now().toString(36)}`,exitCode:0,output:`[2026-10-20 22:30:00 UTC] Command executed on ${e.instanceId||"i-bp18a9z3j42m09a"}
131
271
  Total Memory: 8192 MB, Free: 5410 MB
132
272
  Load Average: 0.12, 0.08, 0.05
133
- Result: OK`,status:"SUCCESS"})},{id:"ecs.get_monitor_metrics",name:"获取运行监控指标",category:"monitor",icon:"📊",description:"采集云主机的实时 CPU 利用率、内存消耗与磁盘使用率",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"periodSeconds",label:"聚合统计周期",type:"select",defaultValue:60,options:[{label:"最近 1 分钟平均",value:60},{label:"最近 5 分钟平均",value:300},{label:"最近 15 分钟平均",value:900}]}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"cpuUsagePercent",label:"CPU使用率(%)",type:"number",example:45.2},{key:"memoryUsagePercent",label:"内存使用率(%)",type:"number",example:62.8},{key:"diskUsagePercent",label:"磁盘使用率(%)",type:"number",example:38.5},{key:"isOverloaded",label:"是否高负载告警",type:"boolean",example:!1}],compile:(e,t)=>({name:"ecs_get_monitor_metrics",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`采集监控指标: ${e.instanceId||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.get_monitor_metrics",actionName:"获取运行监控指标",instanceId:e.instanceId,periodSeconds:Number(e.periodSeconds??60)}}),decompile:e=>e.inputParameters?._actionId==="ecs.get_monitor_metrics"?{instanceId:e.inputParameters.instanceId??"",periodSeconds:e.inputParameters.periodSeconds??60}:null,mockOutput:e=>{const t=32.4+Math.round(Math.random()*40*10)/10;return{instanceId:e.instanceId||"i-bp18a9z3j42m09a",cpuUsagePercent:t,memoryUsagePercent:58.6,diskUsagePercent:42.1,isOverloaded:t>80,collectedAt:new Date().toISOString()}}},{id:"ecs.release_instance",name:"释放下线云主机",category:"compute",icon:"🗑️",description:"彻底销毁并下线按量付费云主机,不可恢复",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"forceRelease",label:"是否强制释放 (即刻关机并清理)",type:"boolean",defaultValue:!1}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"最终状态",type:"string",example:"RELEASED"},{key:"releasedAt",label:"释放时间",type:"string",example:"2026-10-20T14:30:00Z"}],compile:(e,t)=>({name:"ecs_release_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`释放云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.release_instance",actionName:"释放下线云主机",instanceId:e.instanceId,forceRelease:!!e.forceRelease}}),decompile:e=>e.inputParameters?._actionId==="ecs.release_instance"?{instanceId:e.inputParameters.instanceId??"",forceRelease:!!e.inputParameters.forceRelease}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RELEASED",releasedAt:new Date().toISOString()})}],zg=[{id:"notify.send_message",name:"发送运维通知",category:"notify",icon:"📢",description:"向指定运维协同群(钉钉/企微/飞书)或负责人发送通知卡片",riskLevel:"safe",fields:[{key:"channel",label:"通知渠道",type:"select",required:!0,defaultValue:"webhook_dingtalk",options:[{label:"钉钉运维机器人 (DingTalk)",value:"webhook_dingtalk"},{label:"企业微信机器人 (WeCom)",value:"webhook_wecom"},{label:"飞书群机器人 (Lark/Feishu)",value:"webhook_feishu"},{label:"运维邮件 (Email)",value:"email"}]},{key:"title",label:"通知标题",type:"text",placeholder:"例如: 【生产告警】云主机 CPU 负载过高",defaultValue:"【云平台通知】运维自动化工作流执行汇报",required:!0,acceptsPills:!0},{key:"content",label:"消息正文内容",type:"textarea",placeholder:"支持输入文字,或键入 @ 插入上游实例 ID / IP 等数据胶囊",defaultValue:"主机实例已成功处理完成,请相关人员知悉。",required:!0,acceptsPills:!0}],outputs:[{key:"messageId",label:"消息追踪ID",type:"string",example:"msg_994200"},{key:"sentStatus",label:"发送状态",type:"string",example:"DELIVERED"},{key:"sentAt",label:"送达时间",type:"string",example:"2026-10-20T14:35:00Z"}],compile:(e,t)=>({name:"send_operation_notification",taskReferenceName:t.taskReferenceName,type:"EVENT",description:`发送通知: ${e.title||t.taskReferenceName}`,inputParameters:{_actionId:"notify.send_message",actionName:"发送运维通知",channel:e.channel??"webhook_dingtalk",title:e.title,content:e.content}}),decompile:e=>e.inputParameters?._actionId==="notify.send_message"?{channel:e.inputParameters.channel??"webhook_dingtalk",title:e.inputParameters.title??"",content:e.inputParameters.content??""}:null,mockOutput:e=>({messageId:`msg-${Date.now().toString(36)}`,channel:e.channel,sentStatus:"DELIVERED",sentAt:new Date().toISOString()})},{id:"human.approval",name:"人工确认 / 审批",category:"human",icon:"👤",description:"在执行高危变动或财务扣费前,暂停流程并等待指定责任人点击确认",riskLevel:"safe",fields:[{key:"assigneeRole",label:"审批责任角色",type:"select",required:!0,defaultValue:"devops_lead",options:[{label:"运维负责人 (DevOps Lead)",value:"devops_lead"},{label:"架构师 (Architect)",value:"architect"},{label:"安全管理员 (SecOps)",value:"secops"},{label:"项目经理 (PM)",value:"pm"}]},{key:"promptMessage",label:"审批确认说明",type:"textarea",placeholder:"请输入需要审批人重点核对的信息(支持 @ 插入参数)",defaultValue:"请核实即将执行的高危变更操作,确认无误后点击批准。",required:!0,acceptsPills:!0},{key:"timeoutMinutes",label:"超时自动处理",type:"select",defaultValue:60,options:[{label:"30 分钟无响应自动拒绝",value:30},{label:"60 分钟无响应自动拒绝",value:60},{label:"24 小时等待",value:1440}]}],outputs:[{key:"approved",label:"审批结果",type:"boolean",example:!0},{key:"reviewer",label:"审批人",type:"string",example:"zhangsan@cloud.com"},{key:"comment",label:"审批意见",type:"string",example:"已核实变更方案,同意执行"},{key:"decisionTime",label:"审批时间",type:"string",example:"2026-10-20T14:40:00Z"}],compile:(e,t)=>({name:"human_operation_approval",taskReferenceName:t.taskReferenceName,type:"HUMAN",description:`人工审批: ${e.promptMessage||t.taskReferenceName}`,inputParameters:{_actionId:"human.approval",actionName:"人工确认 / 审批",assigneeRole:e.assigneeRole??"devops_lead",promptMessage:e.promptMessage,timeoutMinutes:Number(e.timeoutMinutes??60)}}),decompile:e=>e.inputParameters?._actionId==="human.approval"?{assigneeRole:e.inputParameters.assigneeRole??"devops_lead",promptMessage:e.inputParameters.promptMessage??"",timeoutMinutes:e.inputParameters.timeoutMinutes??60}:null,mockOutput:e=>({approved:!0,reviewer:"devops_lead@internal.cloud",comment:"沙盒模拟快速通过",decisionTime:new Date().toISOString()})},{id:"control.wait",name:"等待缓冲",category:"logic",icon:"⏳",description:"在两个步骤之间暂停等待一段时间(等待系统自检、镜像就绪等)",riskLevel:"safe",fields:[{key:"duration",label:"等待时长",type:"select",required:!0,defaultValue:"10s",options:[{label:"等待 5 秒 (5s)",value:"5s"},{label:"等待 10 秒 (10s)",value:"10s"},{label:"等待 30 秒 (30s)",value:"30s"},{label:"等待 1 分钟 (1m)",value:"1m"},{label:"等待 5 分钟 (5m)",value:"5m"}]}],outputs:[{key:"waited",label:"是否已就绪",type:"boolean",example:!0},{key:"duration",label:"实际等待时长",type:"string",example:"10s"}],compile:(e,t)=>({name:"wait_step",taskReferenceName:t.taskReferenceName,type:"WAIT",description:`等待 ${e.duration||"10s"}`,inputParameters:{_actionId:"control.wait",actionName:"等待缓冲",duration:e.duration??"10s"}}),decompile:e=>e.inputParameters?._actionId==="control.wait"?{duration:e.inputParameters.duration??"10s"}:e.type==="WAIT"?{duration:e.inputParameters?.duration??"10s"}:null,mockOutput:e=>({waited:!0,duration:e.duration||"10s"})},{id:"control.decision",name:"条件分支",category:"logic",icon:"🔀",description:"根据输入参数或上下文表达式,精准分流执行不同业务分支",riskLevel:"safe",fields:[{key:"caseParam",label:"分支判断参数",type:"text",required:!0,defaultValue:"status",placeholder:"例如 status 或 userType",acceptsPills:!0}],outputs:[{key:"selectedCase",label:"命中的分支名称",type:"string",example:"premium"}],compile:(e,t)=>({name:"decision_router",taskReferenceName:t.taskReferenceName,type:"DECISION",caseValueParam:e.caseParam||"status",decisionCases:{},defaultCase:[],inputParameters:{_actionId:"control.decision",actionName:"条件分支",[e.caseParam||"status"]:e[e.caseParam||"status"]??"${workflow.input.status}"}}),decompile:e=>e.type==="DECISION"||e.type==="SWITCH"?{caseParam:e.caseValueParam||"status"}:null,mockOutput:()=>({selectedCase:"SUCCESS"})},{id:"control.fork",name:"并行并发组",category:"logic",icon:"⚡",description:"同时并发执行多条独立业务泳道,并在全部完成后汇聚向下流转",riskLevel:"safe",fields:[],outputs:[{key:"lanesCompleted",label:"已完成泳道数",type:"number",example:2}],compile:(e,t)=>({name:"fork_parallel",taskReferenceName:t.taskReferenceName,type:"FORK_JOIN",forkTasks:[],inputParameters:{_actionId:"control.fork",actionName:"并行并发组"}}),decompile:e=>e.type==="FORK_JOIN"||e.type==="FORK_JOIN_DYNAMIC"?{}:null,mockOutput:()=>({lanesCompleted:2})},{id:"control.loop",name:"循环迭代",category:"logic",icon:"🔁",description:"重复循环执行内部步骤,直到满足退出条件或达到最大轮次",riskLevel:"safe",fields:[{key:"loopCondition",label:"循环继续条件表达式",type:"text",required:!0,defaultValue:'$.status == "PENDING"',placeholder:'例如 $.status == "PENDING"',acceptsPills:!0}],outputs:[{key:"iterationCount",label:"实际迭代轮次",type:"number",example:3}],compile:(e,t)=>({name:"do_while_loop",taskReferenceName:t.taskReferenceName,type:"DO_WHILE",loopCondition:e.loopCondition||"false",loopOver:[],inputParameters:{_actionId:"control.loop",actionName:"循环迭代",loopCondition:e.loopCondition||"false"}}),decompile:e=>e.type==="DO_WHILE"?{loopCondition:e.loopCondition||""}:null,mockOutput:()=>({iterationCount:3})}];class Fl{actions=new Map;constructor(t=[]){this.registerAll(t)}register(t){this.actions.set(t.id,t)}registerAll(t){for(const r of t)this.register(r)}unregister(t){this.actions.delete(t)}getAction(t){return this.actions.get(t)}getAllActions(){return Array.from(this.actions.values())}getActionsByCategory(t){const r=this.getAllActions();return t?r.filter(n=>n.category===t):r}findActionForTask(t){const r=t.inputParameters?._actionId;if(r&&typeof r=="string"){const n=this.getAction(r);if(n&&n.decompile){const o=n.decompile(t);if(o)return{action:n,values:o}}}for(const n of this.actions.values())if(n.decompile){const o=n.decompile(t);if(o)return{action:n,values:o}}return null}}const Pe=new Fl([...qg,...zg]);function Ut(e){if(e==null||e==="")return{version:1,lossy:!1};if(typeof e=="number"){if(Number.isInteger(e))return{version:e,lossy:!1};const o=Math.floor(e);return{version:Number.isFinite(o)&&o>0?o:1,label:String(e),lossy:!0}}const t=String(e).trim();if(/^\d+$/.test(t))return{version:parseInt(t,10),label:t,lossy:!1};const r=t.match(/\d+/),n=r?parseInt(r[0],10):NaN;return{version:Number.isNaN(n)?1:n,label:t,lossy:!0}}const Nr=["std","proxy","tmp","custom"],Wg=["L1","L2","L3"];function Fg(e){if(typeof e!="string")return null;const t=e.split("-");if(t.length<5)return null;const r=t[0],n=t[1];return!Nr.includes(r)||!Wg.includes(n)?null:{type:r,level:n,domain:t[2],product:t[3],func:t.slice(4).join("-")}}function v0(e,t){const r=[];if(typeof e!="string"||e.trim()==="")return["流程名称不能为空"];const n=e.split("-");return n.length<5&&r.push("流程名称需为「类型-层级-业务域-产品-功能」5 段,以 - 分隔"),Nr.includes(n[0])||r.push(`类型「${n[0]}」不合法,应为 ${Nr.join(" / ")} 之一`),n.length>1&&!Wg.includes(n[1])&&r.push(`层级「${n[1]}」不合法,应为 L1 / L2 / L3 之一`),n.length>=5&&(n[2]===""?r.push("业务域不能为空"):t&&!t.includes(n[2])&&r.push(`业务域「${n[2]}」不在允许的列表中(${t.join("、")})`),n[3]===""&&r.push("产品不能为空"),n.slice(4).join("-")===""&&r.push("功能不能为空")),r}function Rr(e,t,r){const n=Ut(e.def.version),o=e.versionLabel??n.label;n.lossy&&r&&r(e.def.name,n.label??String(e.def.version));const s=Fg(e.def.name),i=e.extension?.domain||s?.domain||void 0;return{name:e.def.name,version:n.version,versionLabel:o,description:e.def.description,level:e.extension?.level??s?.level,...i?{domain:i}:{},tags:e.extension?.tags??[],deprecated:e.deprecated??e.extension?.deprecated??!1,record:e,source:t}}function k0(e){const t=Ut(e.version);return{record:{def:{name:e.workflowName,description:e.description,version:t.version,tasks:[]},extension:{level:e.workflowLevel,tags:e.tags??[],...e.domain?{domain:e.domain}:{}},versionLabel:t.label},lossyLabel:t.lossy?t.label:void 0}}function Bl(e){const t=new Map;for(const r of e){const n=t.get(r.name);(!n||r.version>=n.version)&&t.set(r.name,r)}return Array.from(t.values())}class Bg{provider;staticItems=[];staticSchemas=[];providerEntries=[];providerTasks=[];merged=new Map;versionCache=new Map;warned=new Set;listeners=new Set;generation=0;controller=null;snapshot={status:"idle",revision:0};constructor(t,r={}){this.provider=t,this.staticItems=r.staticItems??[],this.staticSchemas=r.staticTaskSchemas??[],this.rebuild()}setProvider(t){t!==this.provider&&(this.provider=t,this.generation++,this.controller?.abort(),this.controller=null,this.providerEntries=[],this.providerTasks=[],this.versionCache.clear(),this.rebuild(),this.setState({status:"idle",error:void 0}))}setStatic(t){t.staticItems!==void 0&&(this.staticItems=t.staticItems),t.staticTaskSchemas!==void 0&&(this.staticSchemas=t.staticTaskSchemas),this.rebuild(),this.setState({})}hasProvider(){return!!this.provider}hasServerSearch(){return typeof this.provider?.search=="function"}async load(t){const r=this.provider;if(!r)return;const n=++this.generation;this.controller?.abort();const o=new AbortController;this.controller=o;const s=()=>o.abort();t&&(t.aborted?o.abort():t.addEventListener("abort",s,{once:!0})),this.setState({status:"loading",error:void 0});try{const i=await r.list(o.signal);if(n!==this.generation)return;if(o.signal.aborted){this.setState({status:"idle"});return}this.providerEntries=Bl(i.workflows.map(l=>Rr(l,"provider",this.warnLossy))),this.providerTasks=i.tasks??[],this.rebuild(),this.setState({status:"ready",error:void 0})}catch(i){if(n!==this.generation)return;if(o.signal.aborted){this.setState({status:"idle"});return}this.setState({status:"error",error:i instanceof Error?i:new Error(String(i))})}finally{t?.removeEventListener("abort",s),this.controller===o&&(this.controller=null)}}reload(){return this.load()}abort(){this.controller&&(this.generation++,this.controller.abort(),this.controller=null,this.snapshot.status==="loading"&&this.setState({status:"idle"}))}latest(t){return this.merged.get(t)}entries(){return Array.from(this.merged.values())}tasks(){return this.providerTasks}staticTaskSchemas(){return this.staticSchemas}async getVersion(t,r,n){const o=`${t}@${r}`,s=this.versionCache.get(o);if(s)return s;const i=this.merged.get(t);if(i?.source==="static"&&i.version===r)return i.record;const l=this.provider;if(!l)return null;const c=this.generation,u=await l.get(t,r,n);return u&&c===this.generation&&this.versionCache.set(o,u),u}async search(t,r,n){const o=this.provider;if(!o?.search)return null;const s=await o.search(t,r,n);return Bl(s.map(i=>Rr(i,"provider",this.warnLossy)))}getSnapshot=()=>this.snapshot;subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});warnLossy=(t,r)=>{const n=`${t}@${r}`;this.warned.has(n)||(this.warned.add(n),console.warn(`[LibraryCatalog] 流程库「${t}」的版本号「${r}」不是整数,已按主版本号规范化。`))};rebuild(){const t=new Map;for(const n of this.providerEntries)t.set(n.name,n);const r=Bl(this.staticItems.map(n=>{const{record:o,lossyLabel:s}=k0(n);return s&&this.warnLossy(n.workflowName,s),Rr(o,"static")}));for(const n of r)t.has(n.name)||t.set(n.name,n);this.merged=t}setState(t){this.snapshot={...this.snapshot,...t,revision:this.snapshot.revision+1};for(const r of Array.from(this.listeners))r()}}function Hl(e){return(Array.isArray(e.type)?e.type.find(r=>r!=="null"):e.type)||"string"}function Ul(e){if(!e||e.type&&e.type!=="JSON")return null;const t=e.data;if(!t||typeof t!="object")return null;const r=t.properties;return!r||typeof r!="object"?null:{properties:r,required:Array.isArray(t.required)?t.required:[]}}function S0(e,t,r,n){const o=Hl(t),s={key:e,label:t.title||e,type:"text",help:t.description,required:r,defaultValue:t.default!==void 0?t.default:n,placeholder:Array.isArray(t.examples)&&t.examples.length>0?String(t.examples[0]):void 0,acceptsPills:!0};return Array.isArray(t.enum)&&t.enum.length>0?{...s,type:"select",options:t.enum.map(i=>({label:String(i),value:i})),acceptsPills:!0}:o==="boolean"?{...s,type:"boolean",acceptsPills:!1}:o==="number"||o==="integer"?{...s,type:"number"}:o==="object"||o==="array"?{...s,type:"textarea",help:[t.description,"JSON 格式"].filter(Boolean).join(";")}:t.format==="textarea"||typeof t.maxLength=="number"&&t.maxLength>200?{...s,type:"textarea"}:s}function Jl(e,t,r){const n=Ul(e);return n?Object.entries(n.properties).map(([s,i])=>S0(s,i||{},n.required.includes(s),r?.[s])):Array.from(new Set([...t,...Object.keys(r||{})])).map(s=>({key:s,label:s,type:"text",defaultValue:r?.[s],acceptsPills:!0}))}function _0(e){return Array.isArray(e)?"array":typeof e=="number"?"number":typeof e=="boolean"?"boolean":e&&typeof e=="object"?"object":"string"}function Kl(e){switch(e){case"number":return 0;case"boolean":return!0;case"array":return[];case"object":return{};default:return"sample"}}function Vl(e,t,r){const n=Ul(e);return n?Object.entries(n.properties).map(([s,i])=>{const l=Hl(i||{}),c=l==="integer"?"number":["string","number","boolean","object","array"].includes(l)?l:"string";return{key:s,label:i?.title||s,type:c,description:i?.description,example:Array.isArray(i?.examples)&&i.examples.length>0?i.examples[0]:Kl(c)}}):Array.from(new Set([...t,...Object.keys(r||{})])).map(s=>{const i=r?.[s],l=typeof i=="string"&&i.includes("${"),c=l||i===void 0?"string":_0(i);return{key:s,label:s,type:c,example:l||i===void 0?Kl(c):i}})}function Er(e,t){return t?e.map(r=>t[r.key]?{...r,...t[r.key],key:r.key}:r):e}function Hg(e,t,r){const n={},o=new Set(t.map(s=>s.key));for(const[s,i]of Object.entries(e||{})){if(!o.has(s)||typeof i!="string"||i.includes("${")){n[s]=i;continue}const l=r[s];if(l==="number"||l==="integer")n[s]=i.trim()!==""&&!Number.isNaN(Number(i))?Number(i):i;else if(l==="object"||l==="array")try{n[s]=JSON.parse(i)}catch{n[s]=i}else n[s]=i}return n}function Ug(e){const t=Ul(e),r={};if(t)for(const[n,o]of Object.entries(t.properties))r[n]=Hl(o||{});return r}function Jg(e){const t={};for(const r of e)t[r.key]=r.example!==void 0?r.example:Kl(r.type);return t}function Gl(e,t={}){if(t.hidden)return null;const r=at(e.inputParameters).map(l=>l.name),n=Er(Jl(e.inputSchema,r,e.inputTemplate),t.fieldOverrides),o=Er(Vl(e.outputSchema,[],e.outputParameters),t.outputOverrides),s=Ug(e.inputSchema),i=e.version??1;return{id:`wf.${e.name}`,name:t.label||e.name,category:t.category||"custom",icon:t.icon||"🧩",description:t.description||e.description||"",connector:t.connector,kind:"workflow",workflowRef:{name:e.name,version:i},level:t.level,...t.domain?{domain:t.domain}:{},tags:t.tags,ownerEmail:e.ownerEmail,riskLevel:t.riskLevel||"safe",fields:n,outputs:o,compile:(l,c)=>{const u=c.libraryRef?.name===e.name?c.libraryRef.version:void 0;return{name:e.name,taskReferenceName:c.taskReferenceName,type:"SUB_WORKFLOW",description:t.label||e.description,inputParameters:Hg(l,n,s),subWorkflowParam:{name:e.name,...u!==void 0?{version:u}:{}}}},decompile:l=>l.type==="SUB_WORKFLOW"&&l.subWorkflowParam?.name===e.name?{...l.inputParameters||{}}:null,mockOutput:()=>Jg(o)}}function Yl(e,t={}){if(t.hidden)return null;const r=Er(Jl(e.inputSchema,e.inputKeys||[],e.inputTemplate),t.fieldOverrides),n=Er(Vl(e.outputSchema,e.outputKeys||[]),t.outputOverrides),o=Ug(e.inputSchema);return{id:`task.${e.name}`,name:t.label||e.name,category:t.category||"custom",icon:t.icon||"⚙️",description:t.description||e.description||"",connector:t.connector,kind:"task",level:t.level,...t.domain?{domain:t.domain}:{},tags:t.tags,ownerEmail:e.ownerEmail,riskLevel:t.riskLevel||"safe",fields:r,outputs:n,compile:(s,i)=>({name:e.name,taskReferenceName:i.taskReferenceName,type:"SIMPLE",description:t.label||e.description,inputParameters:Hg(s,r,o)}),decompile:s=>s.type==="SIMPLE"&&s.name===e.name?{...s.inputParameters||{}}:null,mockOutput:()=>Jg(n)}}function w0(e){return e.map(t=>Gl(t.workflowDef,t.extension)).filter(t=>t!==null)}function T0(e){return e.map(t=>Yl(t.taskDef,t.extension)).filter(t=>t!==null)}const Kg={L1:1,L2:2,L3:3};function Vg(e,t){return!e||!t?!0:Kg[t]<=Kg[e]}const j0=["compute","storage","network","monitor","notify","logic","human","custom"];function Xl(e){if(!e)return{};const t=j0.includes(e.category)?e.category:void 0;return{...e.displayName?{label:e.displayName}:{},...t?{category:t}:{},...e.icon?{icon:e.icon}:{},...e.level?{level:e.level}:{},...e.domain?{domain:e.domain}:{},...e.tags?{tags:e.tags}:{},...e.action??{}}}function Gg(e){const t=[];for(const r of e.entries()){if(r.source!=="provider")continue;const n={...r.record.def,version:r.version},o=Gl(n,{...r.level?{level:r.level}:{},...r.domain?{domain:r.domain}:{},...Xl(r.record.extension)});o&&t.push(r.deprecated?{...o,deprecated:!0}:o)}for(const r of e.tasks()){const n=Yl(r.def,Xl(r.extension));n&&t.push(n)}return t}function Yg(e){if(!e||typeof e!="object")return"string";if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(r=>String(r)).join("|");const t=Array.isArray(e.type)?e.type.find(r=>r!=="null"):e.type;return t==="array"?`${e.items&&typeof e.items=="object"?Yg(e.items):"any"}[]`:t||"string"}function Jt(e){if(!e||e.type&&e.type!=="JSON")return;const t=e.data&&typeof e.data=="object"?e.data.properties:void 0;if(!t||typeof t!="object")return;const r={};for(const[n,o]of Object.entries(t))r[n]=Yg(o);return Object.keys(r).length>0?r:void 0}function Pr(e){const t=Array.from(new Set(e));if(t.length!==0)return Object.fromEntries(t.map(r=>[r,"string"]))}function I0(e){const t=[];for(const o of e.tasks()){const s=o.def;t.push({taskName:s.name,taskType:"SIMPLE",description:s.description,inputSchema:Jt(s.inputSchema)??Pr([...s.inputKeys??[],...Object.keys(s.inputTemplate??{})]),outputSchema:Jt(s.outputSchema)??Pr(s.outputKeys??[])})}for(const o of e.entries()){if(o.source!=="provider"||o.deprecated)continue;const s=o.record.def;t.push({taskName:o.name,taskType:"SUB_WORKFLOW",description:s.description,inputSchema:Jt(s.inputSchema)??Pr(at(s.inputParameters).map(i=>i.name)),outputSchema:Jt(s.outputSchema)??Pr(Object.keys(s.outputParameters??{}))})}const r=new Set(t.map(o=>o.taskName));return[...e.staticTaskSchemas().filter(o=>!r.has(o.taskName)),...t]}function C0(e){return Xg(e.entries())}function Xg(e){return e.filter(t=>!t.deprecated).map(t=>({workflowName:t.name,workflowLevel:t.level??"L1",version:t.source==="static"?t.versionLabel??String(t.version):String(t.version),...t.domain?{domain:t.domain}:{},description:t.description??"",tags:t.tags}))}function Zg(e,t={}){return e.filter(r=>!(r.deprecated||t.currentLevel&&r.kind==="workflow"&&!Vg(t.currentLevel,r.level)))}const Or="其他";function Dr(e){return e.domain?e.domain:e.kind==="workflow"?Or:null}function Qg(e){if(!e.some(n=>!!n.domain))return[];const t=[];let r=!1;for(const n of e){const o=Dr(n);o!==null&&(o===Or?r=!0:t.includes(o)||t.push(o))}return r?[...t,Or]:t}const N0=()=>{},ey={status:"idle",revision:0};function Ar(e){return I.useSyncExternalStore(e?e.subscribe:()=>N0,e?e.getSnapshot:()=>ey,e?e.getSnapshot:()=>ey)}function ty(e,t){I.useEffect(()=>(e.setProvider(t),t&&e.load(),()=>{e.abort()}),[e,t])}function ry(e,t,r,n=Pe){if(e.controlType==="decision"){const s=e.rawTaskDef?structuredClone(e.rawTaskDef):{},i={};let l;for(const c of e.branches||[])c.caseKey==="__default__"?l=Kt(c.steps,r,n):i[c.caseKey]=Kt(c.steps,r,n);return{...s,name:e.name||s.name||e.taskReferenceName,taskReferenceName:e.taskReferenceName,type:s.type==="SWITCH"?"SWITCH":"DECISION",description:e.description??s.description,caseValueParam:e.caseParam||s.caseValueParam,caseExpression:e.caseExpression||s.caseExpression,decisionCases:i,defaultCase:l||s.defaultCase||[],inputParameters:{...s.inputParameters||{},...e.values||{}}}}if(e.controlType==="fork"){const s=e.rawTaskDef?structuredClone(e.rawTaskDef):{},i=(e.forkLanes||[]).map(l=>Kt(l.steps,r,n));return{...s,name:e.name||s.name||e.taskReferenceName,taskReferenceName:e.taskReferenceName,type:s.type==="FORK_JOIN_DYNAMIC"?"FORK_JOIN_DYNAMIC":"FORK_JOIN",description:e.description??s.description,forkTasks:i,inputParameters:{...s.inputParameters||{},...e.values||{}}}}if(e.controlType==="loop"){const s=e.rawTaskDef?structuredClone(e.rawTaskDef):{},i=Kt(e.loopSteps||[],r,n);return{...s,name:e.name||s.name||e.taskReferenceName,taskReferenceName:e.taskReferenceName,type:"DO_WHILE",description:e.description??s.description,loopCondition:e.loopCondition||s.loopCondition||"false",loopOver:i,inputParameters:{...s.inputParameters||{},...e.values||{}}}}if(e.isProFallback&&e.rawTaskDef)return{...e.rawTaskDef,taskReferenceName:e.taskReferenceName||e.rawTaskDef.taskReferenceName,name:e.name||e.rawTaskDef.name,description:e.description??e.rawTaskDef.description};const o=n.getAction(e.actionId);return o?o.compile(e.values,{taskReferenceName:e.taskReferenceName,stepIndex:t,workflowName:r,libraryRef:e.libraryRef}):{name:e.name||e.taskReferenceName,taskReferenceName:e.taskReferenceName,type:"SIMPLE",description:e.description,inputParameters:{_actionId:e.actionId,...e.values}}}function Kt(e,t,r=Pe){const n=[];for(let o=0;o<e.length;o++){const s=e[o],i=ry(s,o,t,r);if(n.push(i),s.controlType==="fork"){const l=s.pairedJoinTaskRef||`join_${s.taskReferenceName}`,c=[];if(i.forkTasks)for(const u of i.forkTasks)u&&u.length>0&&c.push(u[u.length-1].taskReferenceName);n.push({name:`${s.taskReferenceName}_join`,taskReferenceName:l,type:"JOIN",description:`Join task for ${s.taskReferenceName}`,joinOn:c.length>0?c:void 0})}}return n}function ny(e,t=Pe){const r=e.rawWorkflowDef?structuredClone(e.rawWorkflowDef):{},n=Kt(e.steps,e.name,t);return{...r,name:e.name||"cloud_host_automation",description:e.description||"云平台自动化工作流",version:e.version??1,schemaVersion:2,tasks:n,inputParameters:e.inputParameters||r.inputParameters}}function ay(e,t,r=Pe){const n=`step_${e.taskReferenceName||`idx${t}`}`;if(e.type==="DECISION"||e.type==="SWITCH"){const s=[];if(e.decisionCases)for(const[i,l]of Object.entries(e.decisionCases))s.push({caseKey:i,caseLabel:`分支: ${i}`,steps:Vt(l||[],r)});return e.defaultCase&&e.defaultCase.length>0&&s.push({caseKey:"__default__",caseLabel:"默认分支 (Default)",steps:Vt(e.defaultCase,r)}),{id:n,actionId:"control_decision",taskReferenceName:e.taskReferenceName,name:e.description||e.name||"条件分支路由 (Decision / Switch)",description:e.description||`根据 ${e.caseValueParam||e.caseExpression||"条件"} 进行分支路由`,values:e.inputParameters||{},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"decision",caseParam:e.caseValueParam,caseExpression:e.caseExpression,branches:s}}if(e.type==="FORK_JOIN"||e.type==="FORK_JOIN_DYNAMIC"){const s=(e.forkTasks||[]).map((i,l)=>({laneId:`lane_${l}`,laneLabel:`并发泳道 #${l+1}`,steps:Vt(i||[],r)}));return{id:n,actionId:"control_fork",taskReferenceName:e.taskReferenceName,name:e.description||e.name||"并行并发任务组 (Fork / Join)",description:e.description||`同时并发执行 ${s.length} 条独立业务泳道`,values:e.inputParameters||{},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"fork",forkLanes:s}}if(e.type==="DO_WHILE"){const s=Vt(e.loopOver||[],r);return{id:n,actionId:"control_loop",taskReferenceName:e.taskReferenceName,name:e.description||e.name||"循环迭代处理 (Do-While Loop)",description:e.description||`循环执行内部步骤,跳出条件: ${e.loopCondition||""}`,values:e.inputParameters||{},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"loop",loopCondition:e.loopCondition,loopSteps:s}}const o=r.findActionForTask(e);return o?{id:n,actionId:o.action.id,taskReferenceName:e.taskReferenceName,name:o.action.name,description:e.description,values:o.values,isProFallback:!1,...e.type==="SUB_WORKFLOW"&&e.subWorkflowParam?.name?{libraryRef:{name:e.subWorkflowParam.name,version:e.subWorkflowParam.version}}:{}}:{id:n,actionId:"pro_custom_task",taskReferenceName:e.taskReferenceName,name:e.name||e.taskReferenceName,description:e.description||`底层 ${e.type} 技术任务`,values:e.inputParameters||{},isProFallback:!0,rawTaskDef:structuredClone(e)}}function Vt(e,t=Pe){const r=new Set;for(let o=0;o<e.length;o++)if(e[o].type==="FORK_JOIN"){for(let s=o+1;s<e.length;s++)if(e[s].type==="JOIN"){r.add(e[s].taskReferenceName);break}}const n=[];for(let o=0;o<e.length;o++){const s=e[o];if(s.type==="JOIN"&&r.has(s.taskReferenceName))continue;const i=ay(s,o,t);if(i.controlType==="fork"){for(let l=o+1;l<e.length;l++)if(e[l].type==="JOIN"){i.pairedJoinTaskRef=e[l].taskReferenceName;break}}n.push(i)}return n}function oy(e,t=Pe){if(!e)return{name:"new_cloud_automation",description:"新建云平台运维自动化流程",version:1,steps:[]};const r=Vt(e.tasks||[],t);return{name:e.name||"unnamed_workflow",description:e.description||"",version:e.version||1,steps:r,inputParameters:e.inputParameters,rawWorkflowDef:structuredClone(e)}}const R0=({upstreamSteps:e,onSelect:t,onClose:r,registry:n=Pe,workflowInputParams:o})=>{const[s,i]=I.useState(""),l=I.useMemo(()=>{const u=[];o&&o.length>0&&u.push({stepTitle:"工作流全局入参",stepIcon:"🌐",stepRef:"workflow.input",items:o.map(d=>{const p=typeof d=="string"?d:d.name;return{rawRef:`workflow.input.${p}`,label:typeof d=="object"&&d.description?d.description:p,type:typeof d=="object"&&d.type?d.type:"string",example:typeof d=="object"?d.example??d.defaultValue:void 0,stepLabel:"全局入参"}})});for(let d=0;d<e.length;d++){const p=e[d],h=n.getAction(p.actionId),f=`#${d+1} ${p.name||h?.name||p.taskReferenceName}`,m=h?.icon||"⚙️",y=[];if(h&&h.outputs.length>0)for(const g of h.outputs)y.push({rawRef:`${p.taskReferenceName}.output.${g.key}`,label:g.label,type:g.type,example:g.example,stepLabel:p.name||h.name});else y.push({rawRef:`${p.taskReferenceName}.output`,label:"完整输出对象",type:"object",example:"{ ... }",stepLabel:p.name});u.push({stepTitle:f,stepIcon:m,stepRef:p.taskReferenceName,items:y})}return u},[e,n,o]),c=I.useMemo(()=>{if(!s.trim())return l;const u=s.toLowerCase();return l.map(d=>({...d,items:d.items.filter(p=>p.label.toLowerCase().includes(u)||p.rawRef.toLowerCase().includes(u))})).filter(d=>d.items.length>0)},[l,s]);return a.jsxs("div",{style:{position:"absolute",top:"100%",left:0,zIndex:1100,width:340,maxHeight:380,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:8,boxShadow:"0 12px 32px rgba(0,0,0,0.35)",display:"flex",flexDirection:"column",overflow:"hidden",marginTop:4,fontFamily:"inherit"},children:[a.jsxs("div",{style:{padding:"8px 10px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:8,background:"var(--bg-tertiary)"},children:[a.jsx("span",{style:{fontSize:13},children:"🏷️"}),a.jsx("input",{autoFocus:!0,type:"text",placeholder:"搜索上游输出字段...",value:s,onChange:u=>i(u.target.value),style:{flex:1,background:"transparent",border:"none",outline:"none",color:"var(--text-primary)",fontSize:12}}),a.jsx("button",{onClick:r,style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:14,padding:"2px 4px"},title:"关闭",children:"✕"})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",padding:"6px 4px"},children:c.length===0?a.jsx("div",{style:{padding:"24px 12px",textAlign:"center",color:"var(--text-muted, #94a3b8)",fontSize:12},children:e.length===0?"当前步骤是第 1 步,前面暂无可引用的上游步骤输出":"未找到匹配的字段"}):c.map(u=>a.jsxs("div",{style:{marginBottom:8},children:[a.jsxs("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted, #94a3b8)",padding:"4px 8px",display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:u.stepIcon}),a.jsx("span",{children:u.stepTitle})]}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2},children:u.items.map(d=>a.jsxs("div",{onClick:()=>{t({rawRef:d.rawRef,label:d.label,stepLabel:d.stepLabel}),r()},style:{padding:"6px 10px",borderRadius:6,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between",transition:"background 0.15s ease",fontSize:12},onMouseEnter:p=>{p.currentTarget.style.background="var(--bg-highlight)"},onMouseLeave:p=>{p.currentTarget.style.background="transparent"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden"},children:[a.jsx("span",{style:{fontWeight:500,color:"var(--text-primary)",whiteSpace:"nowrap"},children:d.label}),a.jsx("span",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.rawRef})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[d.example!==void 0&&a.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",color:"var(--color-accent-text, #1e40af)",fontFamily:"monospace",maxWidth:90,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:`样例值: ${String(d.example)}`,children:String(d.example)}),a.jsx("span",{style:{fontSize:10,padding:"1px 4px",borderRadius:3,background:"var(--bg-tertiary)",color:"var(--text-muted)"},children:d.type})]})]},d.rawRef))})]},u.stepRef))}),a.jsx("div",{style:{padding:"4px 8px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:10,color:"var(--text-muted)",textAlign:"right"},children:"点击将变量以数据胶囊形式插入"})]})},Zl=({value:e,onChange:t,placeholder:r,multiline:n=!1,upstreamSteps:o,registry:s=Pe,workflowInputParams:i,disabled:l=!1,defaultShowPicker:c=!1})=>{const[u,d]=I.useState(c),p=I.useRef(null),h=I.useRef(null),f=e!=null?String(e):"",m=I.useMemo(()=>{const b=f.matchAll(/\$\{([^}]+)\}/g),x=[];for(const v of b){const k=v[0],S=v[1].trim();let j=S;for(const w of o)if(S.startsWith(`${w.taskReferenceName}.output`)){const N=s.getAction(w.actionId),L=S.replace(`${w.taskReferenceName}.output.`,""),_=N?.outputs.find(T=>T.key===L);_?j=`${w.name||N?.name||w.taskReferenceName} · ${_.label}`:j=`${w.name||w.taskReferenceName} 输出`;break}S.startsWith("workflow.input.")&&(j=`全局入参 · ${S.slice(15)}`),x.push({raw:k,ref:S,label:j})}return x},[f,o,s]),y=b=>{const x=`\${${b.rawRef}}`,v=h.current;if(v){const k=v.selectionStart??f.length,S=v.selectionEnd??f.length,j=f.substring(0,k)+x+f.substring(S);t(j),setTimeout(()=>{v.focus(),v.setSelectionRange(k+x.length,k+x.length)},0)}else t(f?`${f} ${x}`:x)},g=b=>{b.key==="@"&&d(!0)};return a.jsxs("div",{ref:p,style:{position:"relative",display:"flex",flexDirection:"column",gap:4,width:"100%"},children:[a.jsxs("div",{style:{display:"flex",alignItems:n?"flex-start":"center",gap:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,padding:"4px 8px",transition:"border-color 0.15s ease"},children:[n?a.jsx("textarea",{ref:h,disabled:l,value:f,placeholder:r||"输入内容,或按 @ 插入上游数据胶囊...",rows:3,onChange:b=>t(b.target.value),onKeyDown:g,style:{flex:1,background:"transparent",border:"none",outline:"none",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit",resize:"vertical",lineHeight:1.5}}):a.jsx("input",{ref:h,type:"text",disabled:l,value:f,placeholder:r||"输入内容,或按 @ 插入数据胶囊...",onChange:b=>t(b.target.value),onKeyDown:g,style:{flex:1,background:"transparent",border:"none",outline:"none",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit"}}),a.jsxs("button",{type:"button",disabled:l,onClick:()=>d(!u),title:"点击选择并插入上游数据胶囊 (@)",style:{background:u?"var(--color-accent-bg, rgba(59, 130, 246, 0.15))":"var(--bg-tertiary)",color:u?"var(--color-accent, #3b82f6)":"var(--text-secondary)",border:`1px solid ${u?"var(--color-accent, #3b82f6)":"var(--border-primary)"}`,borderRadius:4,padding:"2px 8px",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,flexShrink:0,transition:"all 0.15s ease"},children:[a.jsx("span",{children:"🏷️"}),a.jsx("span",{children:"插入数据"})]})]}),m.length>0&&a.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:4,alignItems:"center",padding:"2px 2px"},children:[a.jsx("span",{style:{fontSize:10,color:"var(--text-muted)"},children:"已引用胶囊:"}),m.map((b,x)=>a.jsxs("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:12,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",color:"var(--color-accent-text, #1e40af)",border:"1px solid color-mix(in srgb, var(--color-accent, #3b82f6) 35%, transparent)",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500},title:`原始引用表达式: ${b.raw}`,children:[a.jsx("span",{children:"🔗"}),a.jsx("span",{children:b.label})]},`${b.ref}_${x}`))]}),u&&a.jsx(R0,{upstreamSteps:o,workflowInputParams:i,registry:s,onSelect:y,onClose:()=>d(!1)})]})},Ql=({step:e,upstreamSteps:t,workflowInputParams:r,registry:n=Pe,onChange:o,disabled:s=!1})=>{const i=n.getAction(e.actionId);if(e.isProFallback||!i)return a.jsxs("div",{style:{padding:16,background:"rgba(255, 255, 255, 0.03)",borderRadius:8,border:"1px dashed var(--border-secondary, rgba(255, 255, 255, 0.2))",display:"flex",flexDirection:"column",gap:12},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontSize:20},children:"🔧"}),a.jsxs("div",{children:[a.jsxs("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:14},children:[e.name||e.taskReferenceName," (底层技术步骤)"]}),a.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)"},children:["任务类型: ",e.rawTaskDef?.type||"CUSTOM"]})]})]}),a.jsx("p",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.6,margin:0},children:"该步骤属于底层控制流或未映射的 Conductor 任务。在业务模式下已为您无损保留其参数与依赖关系。如需深度修改其底层 JQ 脚本或 JSON Schema,请切换至右上方「全景画布模式」。"})]});const l=(c,u)=>{const d={...e.values,[c]:u};o({...e,values:d})};return a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[i.riskLevel==="sensitive"&&a.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"color-mix(in srgb, var(--color-error) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--color-error) 25%, transparent)",fontSize:12,color:"var(--color-error)",lineHeight:1.5},children:["💡 ",a.jsx("strong",{children:"操作安全网"}),":此步骤会直接影响真实云主机的运行状态(关机、重启、变配或下线)。建议在流程设计中,于本步骤之前放置一个「人工确认/审批」步骤,确保生产稳定性。"]}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:14},children:i.fields.map(c=>{const u=e.values[c.key]??c.defaultValue;return a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("label",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"center",gap:4},children:[c.label,c.required&&a.jsx("span",{style:{color:"#ef4444"},children:"*"})]}),c.help&&a.jsx("span",{style:{fontSize:11,color:"var(--text-muted)"},children:c.help})]}),c.type==="select"?a.jsx(E0,{value:u,options:c.options??[],allowDynamic:c.acceptsPills!==!1,disabled:s,placeholder:c.placeholder,upstreamSteps:t,workflowInputParams:r,registry:n,onChange:d=>l(c.key,d)}):c.type==="boolean"?a.jsxs("label",{style:{display:"inline-flex",alignItems:"center",gap:8,cursor:"pointer",fontSize:13,color:"var(--text-secondary)"},children:[a.jsx("input",{type:"checkbox",disabled:s,checked:!!u,onChange:d=>l(c.key,d.target.checked),style:{width:16,height:16,cursor:"pointer"}}),a.jsx("span",{children:"开启 / 启用"})]}):c.acceptsPills?a.jsx(Zl,{disabled:s,value:u,placeholder:c.placeholder,multiline:c.type==="textarea",upstreamSteps:t,workflowInputParams:r,registry:n,onChange:d=>l(c.key,d)}):c.type==="textarea"?a.jsx("textarea",{disabled:s,rows:3,value:u??"",placeholder:c.placeholder,onChange:d=>l(c.key,d.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none",fontFamily:"inherit"}}):a.jsx("input",{disabled:s,type:c.type==="number"?"number":"text",value:u??"",placeholder:c.placeholder,onChange:d=>l(c.key,c.type==="number"?Number(d.target.value):d.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none",fontFamily:"inherit"}})]},c.key)})}),i.outputs.length>0&&a.jsxs("div",{style:{marginTop:8,padding:"10px 12px",background:"var(--bg-tertiary)",borderRadius:6,border:"1px solid var(--border-primary)"},children:[a.jsx("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)",marginBottom:6},children:"📋 本步骤产生的数据(可被后续步骤引用):"}),a.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:i.outputs.map(c=>a.jsxs("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:4,background:"var(--bg-secondary)",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{children:"🏷️"}),a.jsx("span",{children:c.label}),a.jsxs("span",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace"},children:["(",c.key,")"]})]},c.key))})]})]})},Lr=e=>typeof e=="string"&&e.includes("${"),E0=({value:e,options:t,allowDynamic:r,disabled:n,placeholder:o,upstreamSteps:s,workflowInputParams:i,registry:l,onChange:c})=>{const[u,d]=I.useState(()=>Lr(e)),[p,h]=I.useState(!1),f={flexShrink:0,background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:n?"not-allowed":"pointer",whiteSpace:"nowrap"};return r&&u?a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[a.jsx(Zl,{disabled:n,value:Lr(e)?e:"",placeholder:o||"插入上游数据,运行时取值",upstreamSteps:s,workflowInputParams:i,registry:l,defaultShowPicker:p,onChange:c}),a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[a.jsxs("span",{style:{fontSize:11,color:"var(--text-muted)"},children:["动态取值:运行时的值需为可选项之一(",t.map(m=>m.label).join(" / "),")"]}),a.jsx("button",{type:"button",disabled:n,style:f,onClick:()=>{d(!1),h(!1),Lr(e)&&c(t[0]?.value??"")},children:"改为选择"})]})]}):a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("select",{disabled:n,value:Lr(e)?"":e??"",onChange:m=>c(m.target.value),style:{flex:1,minWidth:0,padding:"7px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none",cursor:"pointer"},children:t.map(m=>a.jsx("option",{value:m.value,children:m.label},String(m.value)))}),r&&a.jsx("button",{type:"button",disabled:n,title:"改为引用上游步骤输出或全局入参,运行时取值",style:f,onClick:()=>{d(!0),h(!0)},children:"🏷️ 插入数据"})]})};function Gt(e){const t=`${Date.now().toString(36).slice(-4)}${Math.random().toString(36).slice(2,4)}`,r=`${e.id.replace(/\./g,"_")}_${t}`;if(e.id==="control.decision")return{id:`step_${r}`,actionId:"control_decision",taskReferenceName:r,name:"条件分支路由",description:"根据输入参数或上下文表达式分流执行",values:{caseParam:"status"},controlType:"decision",caseParam:"status",branches:[{caseKey:"SUCCESS",caseLabel:"分支: SUCCESS",steps:[]},{caseKey:"__default__",caseLabel:"默认分支 (Default)",steps:[]}],isProFallback:!1};if(e.id==="control.fork")return{id:`step_${r}`,actionId:"control_fork",taskReferenceName:r,name:"并行并发组",description:"同时并发执行多条独立业务泳道",values:{},controlType:"fork",forkLanes:[{laneId:"lane_0",laneLabel:"并发泳道 #1",steps:[]},{laneId:"lane_1",laneLabel:"并发泳道 #2",steps:[]}],isProFallback:!1};if(e.id==="control.loop")return{id:`step_${r}`,actionId:"control_loop",taskReferenceName:r,name:"循环迭代处理",description:"重复循环执行内部步骤,直到满足退出条件",values:{loopCondition:'$.status == "PENDING"'},controlType:"loop",loopCondition:'$.status == "PENDING"',loopSteps:[],isProFallback:!1};const n={};for(const o of e.fields)o.defaultValue!==void 0&&(n[o.key]=o.defaultValue);return{id:`step_${r}`,actionId:e.id,taskReferenceName:r,name:e.name,description:e.description,values:n,isProFallback:!1,...e.kind==="workflow"&&e.workflowRef?{libraryRef:{name:e.workflowRef.name,version:e.workflowRef.version}}:{}}}function sy(e){return e!=null&&e!==""}function iy(e){let t;switch(e.type){case"select":t=`可选值 ${(e.options??[]).map(r=>String(r.value)).join("|")}`;break;case"number":t="数字";break;case"boolean":t="布尔";break;default:t="文本"}return e.required?`${t},必填`:t}function ly(e){const t=at(e.inputParameters).map(r=>r.name);return Jl(e.inputSchema,t,e.inputTemplate)}function cy(e){return Vl(e.outputSchema,[],e.outputParameters).map(t=>t.key)}function dy(e,t,r={},n={}){const o=new Map(ly(e).map(m=>[m.key,m])),s=new Map(ly(t).map(m=>[m.key,m])),i=[],l=[],c=[];for(const[m,y]of s){const g=o.get(m);if(!g){i.push(y);continue}const b=iy(g),x=iy(y);b!==x&&c.push({key:m,from:b,to:x,valueFilled:sy(r[m])})}for(const[m,y]of o)s.has(m)||l.push(y);const u=cy(e),d=cy(t),p=d.filter(m=>!u.includes(m)),h=u.filter(m=>!d.includes(m)),f=new Set(n.referencedOutputs??[]);return{addedInputs:i,removedInputs:l,changedInputs:c,addedOutputs:p,removedOutputs:h,lostValueKeys:l.filter(m=>sy(r[m.key])).map(m=>m.key),brokenOutputRefs:h.filter(m=>f.has(m))}}function uy(e){return e.addedInputs.length===0&&e.removedInputs.length===0&&e.changedInputs.length===0&&e.addedOutputs.length===0&&e.removedOutputs.length===0}function py(e,t){const r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(`\\$\\{\\s*${r}\\.output\\.([^.\\s}\\[\\]]+)`,"g"),o=new Set,s=new Set,i=l=>{if(typeof l=="string"){n.lastIndex=0;let c;for(;(c=n.exec(l))!==null;)o.add(c[1]);return}if(!(!l||typeof l!="object"||s.has(l))){s.add(l);for(const c of Array.isArray(l)?l:Object.values(l))i(c)}};for(const l of t)i(l);return o}function Mr(e){return e.label&&e.label!==e.key?`${e.label}(${e.key})`:e.key}function fy(e){const t=[],r=[];for(const n of e.removedInputs)e.lostValueKeys.includes(n.key)?t.push(`入参「${Mr(n)}」已删除,已填写的值将丢失`):r.push(`入参「${Mr(n)}」已删除`);for(const n of e.removedOutputs)e.brokenOutputRefs.includes(n)?t.push(`出参「${n}」已删除,下游步骤对它的引用将失效`):r.push(`出参「${n}」已删除`);for(const n of e.changedInputs){const o=`入参「${n.key}」由「${n.from}」变为「${n.to}」`;n.valueFilled?t.push(`${o},已填写的值可能不再有效`):r.push(o)}for(const n of e.addedInputs)n.required?t.push(`新增必填入参「${Mr(n)}」,需要补充填写`):r.push(`新增入参「${Mr(n)}」`);for(const n of e.addedOutputs)r.push(`新增出参「${n}」`);return{impacts:t,changes:r}}function hy(e,t,r,n){const o=`流程库「${e}」已有新版本 v${r}(当前引用 v${t??"?"})。`;if(uy(n))return`${o}
134
- 入参出参未变化。确定升级吗?`;const{impacts:s,changes:i}=fy(n),l=[o,"升级差异:"];return s.length>0&&l.push("【会影响已填内容】",...s.map(c=>`· ${c}`)),i.length>0&&l.push("【其它变化】",...i.map(c=>`· ${c}`)),l.push("确定升级吗?"),l.join(`
135
- `)}function my(e,t){const r={...e};for(const n of t.removedInputs)delete r[n.key];for(const n of t.addedInputs)n.defaultValue!==void 0&&r[n.key]===void 0&&(r[n.key]=n.defaultValue);return r}function gy(e){const{pinned:t,catalogStatus:r,latest:n,pinnedExists:o}=e;return t===void 0?{kind:"unpinned"}:r===void 0?n&&n.version>t?{kind:"upgradable",pinned:t,latest:n.version}:{kind:"pinned",pinned:t}:r!=="ready"?{kind:"pinned",pinned:t}:n?n.deprecated?{kind:"unavailable",pinned:t,reason:"deprecated"}:t>n.version?{kind:"unavailable",pinned:t,reason:"missing-version"}:t<n.version?o===!1?{kind:"unavailable",pinned:t,reason:"missing-version"}:{kind:"upgradable",pinned:t,latest:n.version}:o===!1?{kind:"unavailable",pinned:t,reason:"missing-version"}:{kind:"pinned",pinned:t}:{kind:"unavailable",pinned:t,reason:"removed"}}function yy(e,t,r){switch(r){case"deprecated":return`流程库「${e}」已下线 / 不建议新引用。本步骤仍按固定的 v${t} 编译,不会自动改变版本。`;case"removed":return`流程库中已找不到「${e}」。本步骤仍按固定的 v${t} 编译,不会自动改变版本,请确认运行环境中该版本是否仍可用。`;default:return`流程库中不存在「${e}」的 v${t}。本步骤仍按固定版本编译,不会自动改变版本,请确认运行环境中该版本是否仍可用。`}}const P0=({step:e,action:t,disabled:r,catalog:n,getReferencedOutputs:o,onUpgrade:s})=>{const{confirm:i,confirmState:l,handleConfirm:c,handleCancel:u}=jr(),d=Ar(n),[p,h]=I.useState(!1),[f,m]=I.useState(void 0),y=e.libraryRef,g=y?.version,b=y?n?.latest(y.name):void 0,x=t?.workflowRef?.version,v=!!n&&(b!==void 0||x===void 0),k=b?{version:b.version,deprecated:b.deprecated}:x!==void 0?{version:x,deprecated:!1}:void 0,S=v&&d.status==="ready"&&g!==void 0&&!!b&&b.version>g,j=y?.name;if(I.useEffect(()=>{if(!S||!n||!j||g===void 0){m(void 0);return}const L=new AbortController;return n.getVersion(j,g,L.signal).then(_=>{L.signal.aborted||m(_!==null)}).catch(()=>{L.signal.aborted||m(void 0)}),()=>L.abort()},[S,n,j,g]),!y)return null;const w=gy({pinned:g,catalogStatus:v?d.status:void 0,latest:k,pinnedExists:S?f:void 0}),N=async L=>{if(L.stopPropagation(),w.kind!=="upgradable")return;const{pinned:_,latest:T}=w;let D;if(n&&b&&b.source==="provider"){h(!0);try{const[E,P]=await Promise.all([n.getVersion(y.name,_),n.getVersion(y.name,T)]);E&&P&&(D=dy(E.def,P.def,e.values,{referencedOutputs:o?.()}))}catch{D=void 0}finally{h(!1)}}const R=D?hy(y.name,_,T,D):`流程库「${y.name}」已有新版本 v${T}(当前引用 v${_})。升级后入参、出参可能发生变化,请升级后检查本步骤配置。确定升级吗?`;await i(R)&&s(T,D)};return a.jsxs(a.Fragment,{children:[a.jsxs("span",{title:g!==void 0?`引用流程库「${y.name}」,已固定版本 v${g},库升级后不会自动变化`:`引用流程库「${y.name}」,未固定版本,沿用原定义`,style:{fontSize:10,padding:"1px 5px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",color:"var(--color-accent-text, #1e40af)",fontWeight:600},children:["📚 流程库",g!==void 0?` v${g}`:""]}),w.kind==="upgradable"&&!r&&a.jsx("button",{onClick:N,disabled:p,title:"查看升级差异并升级到库中最新版本",style:{fontSize:10,padding:"1px 6px",borderRadius:4,border:"1px solid #f59e0b",background:"rgba(245, 158, 11, 0.12)",color:"#f59e0b",fontWeight:600,cursor:p?"wait":"pointer"},children:p?"正在比较版本…":`⬆ 有新版本 v${w.latest}`}),w.kind==="unavailable"&&a.jsx("span",{title:yy(y.name,w.pinned,w.reason),style:{fontSize:10,padding:"1px 6px",borderRadius:4,border:"1px solid #ef4444",background:"rgba(239, 68, 68, 0.12)",color:"#ef4444",fontWeight:600},children:"⚠ 版本不可用"}),l&&a.jsx("span",{onClick:L=>L.stopPropagation(),children:a.jsx(ft,{message:l.message,onConfirm:c,onCancel:u})})]})},O0=200,D0=({registry:e,stepNumber:t,onClose:r,onSelect:n,currentWorkflowLevel:o,libraryCatalog:s})=>{const i=Ar(s),{theme:l,themeColor:c}=ie(we(S=>({theme:S.theme,themeColor:S.themeColor}))),[u,d]=I.useState("all"),[p,h]=I.useState(null),[f,m]=I.useState(""),y=I.useMemo(()=>Zg(e.getAllActions(),{currentLevel:o}),[e,o]),g=I.useMemo(()=>Qg(y),[y]),b=g.length>0,x=I.useMemo(()=>{const S=f.trim().toLowerCase();return y.filter(j=>{const w=b?Dr(j):null;let N;p!==null?N=w===p:u==="all"?N=!0:N=w===null&&j.category===u;const L=!S||j.name.toLowerCase().includes(S)||j.description.toLowerCase().includes(S);return N&&L})},[y,b,u,p,f]),v=I.useMemo(()=>x.slice(0,O0),[x]);if(typeof document>"u")return null;const k=[{id:"all",label:"全部"},{id:"compute",label:"🖥️ 计算与主机"},{id:"storage",label:"💾 存储快照"},{id:"monitor",label:"📊 监控指标"},{id:"notify",label:"📢 通知消息"},{id:"human",label:"👤 人工审批"},{id:"logic",label:"⏳ 流程控制"},{id:"custom",label:b?"🧩 自定义":"🧩 流程库 / 自定义"}];return Qe.createPortal(a.jsx("div",{"data-mode":l,"data-brand":c,style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.5)",backdropFilter:"blur(2px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit",colorScheme:l==="light"?"light":"dark"},onClick:r,children:a.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":`选择要插入的业务动作(第 ${t} 步)`,onClick:S=>S.stopPropagation(),style:{width:760,maxWidth:"calc(100vw - 48px)",height:"min(640px, 84vh)",background:"var(--bg-primary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"0 20px 48px rgba(0, 0, 0, 0.35)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"14px 18px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:12},children:[a.jsxs("div",{style:{fontWeight:600,fontSize:15,flex:1,whiteSpace:"nowrap"},children:["选择业务动作",a.jsxs("span",{style:{marginLeft:8,fontSize:12,fontWeight:400,color:"var(--text-muted)"},children:["第 ",t," 步"]})]}),a.jsx("input",{type:"text",autoFocus:!0,placeholder:"搜索动作名称或描述…",value:f,onChange:S=>m(S.target.value),style:{width:240,padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}}),a.jsx("button",{onClick:r,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16,padding:4,lineHeight:1},children:"✕"})]}),a.jsxs("div",{style:{padding:"10px 18px",borderBottom:"1px solid var(--border-primary)",background:"var(--bg-secondary)",display:"flex",flexDirection:"column",gap:8},children:[a.jsx(xy,{label:"分类",children:k.map(S=>a.jsx(by,{active:p===null&&u===S.id,onClick:()=>{d(S.id),h(null)},children:S.label},S.id))}),b&&a.jsx(xy,{label:"业务域",children:g.map(S=>a.jsx(by,{active:p===S,onClick:()=>h(S),children:S},`domain:${S}`))})]}),i.status==="loading"&&a.jsx("div",{style:{padding:"6px 18px",fontSize:12,color:"var(--text-muted)",background:"var(--bg-secondary)"},children:"正在加载流程库…"}),i.status==="error"&&a.jsxs("div",{style:{padding:"6px 18px",fontSize:12,color:"var(--color-error)",background:"var(--bg-secondary)",display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{title:i.error?.message,children:"流程库加载失败,其它动作仍可使用"}),a.jsx("button",{onClick:()=>{s?.reload()},style:{background:"none",border:"1px solid currentColor",borderRadius:4,color:"inherit",cursor:"pointer",fontSize:11,padding:"1px 8px"},children:"点击重试"})]}),a.jsxs("div",{style:{flex:1,overflowY:"auto",padding:16,display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gap:10,alignContent:"start"},children:[v.map(S=>{const j=[S.level,Dr(S)??void 0].filter(Boolean).join(" · ");return a.jsxs("button",{type:"button",onClick:()=>n(S),onMouseEnter:w=>{w.currentTarget.style.borderColor="var(--color-accent)",w.currentTarget.style.background="var(--bg-tertiary)"},onMouseLeave:w=>{w.currentTarget.style.borderColor="var(--border-primary)",w.currentTarget.style.background="var(--bg-secondary)"},style:{textAlign:"left",font:"inherit",padding:"10px 12px",borderRadius:8,background:"var(--bg-secondary)",border:"1px solid var(--border-primary)",color:"var(--text-primary)",cursor:"pointer",display:"flex",flexDirection:"column",gap:4,transition:"border-color 0.15s ease, background 0.15s ease"},children:[a.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[a.jsx("span",{style:{fontSize:18,lineHeight:1},children:S.icon}),a.jsx("span",{style:{fontWeight:600,fontSize:13,flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S.name}),S.riskLevel==="sensitive"&&a.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"color-mix(in srgb, var(--color-warning) 16%, transparent)",color:"var(--color-warning)",fontWeight:600,flexShrink:0},children:"敏感"})]}),j&&a.jsx("span",{style:{fontSize:10,color:"var(--color-accent-text)"},children:j}),a.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.45},children:S.description})]},S.id)}),v.length===0&&a.jsxs("div",{style:{gridColumn:"1 / -1",textAlign:"center",padding:"32px 0",fontSize:12,color:"var(--text-muted)"},children:["没有符合条件的动作",f?",换个关键词试试":""]}),x.length>v.length&&a.jsxs("div",{style:{gridColumn:"1 / -1",textAlign:"center",fontSize:12,color:"var(--text-muted)"},children:["共 ",x.length," 项,仅显示前 ",v.length," 项,请用搜索缩小范围"]})]})]})}),document.body)},xy=({label:e,children:t})=>a.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:10},children:[a.jsx("span",{style:{flexShrink:0,width:40,paddingTop:4,fontSize:12,color:"var(--text-muted)"},children:e}),a.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,flex:1},children:t})]}),by=({active:e,onClick:t,children:r})=>a.jsx("button",{type:"button",onClick:t,"aria-pressed":e,style:{padding:"3px 10px",borderRadius:999,fontSize:12,lineHeight:"18px",cursor:"pointer",fontWeight:e?600:400,background:e?"var(--color-accent-bg)":"transparent",color:e?"var(--color-accent-text)":"var(--text-secondary)",border:`1px solid ${e?"var(--color-accent)":"var(--border-secondary)"}`},children:r}),ec=({step:e,upstreamSteps:t,registry:r=Pe,disabled:n=!1,onChange:o,onOpenInsertModal:s,depth:i=0})=>{const l=e.forkLanes||[],{confirm:c,confirmState:u,handleConfirm:d,handleCancel:p}=jr(),[h,f]=I.useState(l[0]?.laneId||"lane_0"),m=(v,k)=>{const S=l.map(j=>j.laneId===v?{...j,steps:k}:j);o({...e,forkLanes:S})},y=()=>{const v=l.length,k={laneId:`lane_${v}_${Date.now().toString(36).slice(-4)}`,laneLabel:`并发泳道 #${v+1}`,steps:[]},S=[...l,k];o({...e,forkLanes:S}),f(k.laneId)},g=async(v,k)=>{if(k.stopPropagation(),l.length<=1||!await c("确定要删除此条并行泳道及其内部步骤吗?"))return;const S=l.filter(j=>j.laneId!==v);o({...e,forkLanes:S}),h===v&&f(S[0]?.laneId||"")},b=v=>{const k=l.find(S=>S.laneId===v);k&&s(S=>{const j=Gt(S);m(v,[...k.steps,j])})},x=l.reduce((v,k)=>v+(k.steps?.length||0),0);return a.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"0 4px 16px rgba(0, 0, 0, 0.08)",overflow:"hidden",transition:"all 0.2s ease"},children:[a.jsxs("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"rgba(59, 130, 246, 0.15)",color:"var(--color-accent, #3b82f6)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:700},children:"⚡"}),a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary)"},children:e.name||"并行并发任务组"}),a.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",color:"var(--color-accent-text, #1e40af)",fontWeight:600,border:"1px solid color-mix(in srgb, var(--color-accent, #3b82f6) 30%, transparent)"},children:"⚡ 并行并发 (Fork / Join)"})]}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["同时并发执行 ",l.length," 条独立业务泳道 · 涵盖 ",x," 个并发步骤"]})]})]}),!n&&a.jsxs("button",{onClick:y,style:{padding:"4px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px dashed var(--border-secondary)",color:"var(--text-primary)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"新增并发泳道"})]})]}),a.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)",display:"grid",gridTemplateColumns:l.length>1?`repeat(${Math.min(l.length,3)}, minmax(240px, 1fr))`:"1fr",gap:12,overflowX:"auto"},children:l.map((v,k)=>a.jsxs("div",{style:{borderRadius:8,background:"var(--bg-secondary)",border:"1px solid var(--border-primary)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"8px 12px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{style:{fontSize:13},children:"🏊"}),a.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:v.laneLabel||`泳道 #${k+1}`}),a.jsxs("span",{style:{fontSize:10,padding:"0 5px",borderRadius:8,background:"var(--bg-secondary)",color:"var(--text-muted)"},children:[v.steps.length," 步"]})]}),!n&&l.length>1&&a.jsx("button",{onClick:S=>g(v.laneId,S),title:"删除此泳道",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:11,padding:"2px 4px"},children:"✕"})]}),a.jsxs("div",{style:{padding:10,flex:1,display:"flex",flexDirection:"column",gap:8,minHeight:80},children:[v.steps.length===0?a.jsx("div",{style:{padding:"16px 8px",textAlign:"center",color:"var(--text-muted)",fontSize:11,border:"1px dashed var(--border-secondary)",borderRadius:6},children:"此泳道暂无步骤"}):a.jsx(rc,{steps:v.steps,onStepsChange:S=>m(v.laneId,S),upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:s,variant:"compact",rowTone:"primary"}),!n&&a.jsx("button",{onClick:()=>b(v.laneId),style:{padding:"4px 8px",borderRadius:4,background:"transparent",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",marginTop:2},children:"+ 追加并发步骤"})]})]},v.laneId))}),a.jsxs("div",{style:{padding:"8px 16px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:11,color:"var(--text-secondary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"🔗"}),a.jsxs("span",{children:[a.jsx("strong",{children:"汇聚同步点 (Join)"}),":所有 ",l.length," 条并行泳道内步骤全部执行完毕后,在同步节点汇聚并继续向下执行。"]})]}),e.pairedJoinTaskRef&&a.jsx("code",{style:{fontSize:10,color:"var(--text-muted)",background:"var(--bg-secondary)",padding:"1px 6px",borderRadius:4},children:e.pairedJoinTaskRef})]}),u&&a.jsx(ft,{message:u.message,onConfirm:d,onCancel:p})]})},tc=({step:e,upstreamSteps:t,registry:r=Pe,disabled:n=!1,onChange:o,onOpenInsertModal:s,depth:i=0})=>{const l=e.loopSteps||[],c=d=>{o({...e,loopSteps:d})},u=()=>{s(d=>{const p=Gt(d);c([...l,p])})};return a.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"0 4px 16px rgba(0, 0, 0, 0.08)",overflow:"hidden",transition:"all 0.2s ease"},children:[a.jsxs("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.15))",color:"var(--color-accent, #3b82f6)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:700},children:"🔁"}),a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary)"},children:e.name||"循环迭代处理"}),a.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",color:"var(--color-accent-text, #1e40af)",fontWeight:600,border:"1px solid color-mix(in srgb, var(--color-accent, #3b82f6) 30%, transparent)"},children:"🔁 循环迭代 (Do-While Loop)"})]}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["循环体包含 ",l.length," 个步骤 · 每次迭代执行完将重新评估跳出条件"]})]})]}),!n&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{style:{fontSize:11,color:"var(--text-muted)"},children:"循环继续条件:"}),a.jsx("input",{type:"text",value:e.loopCondition||"",placeholder:"如 $.status == 'PENDING'",onChange:d=>o({...e,loopCondition:d.target.value}),style:{width:200,padding:"4px 8px",borderRadius:4,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:11,fontFamily:"monospace"}})]})]}),a.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)"},children:a.jsxs("div",{style:{borderRadius:8,border:"2px dashed color-mix(in srgb, var(--color-accent, #3b82f6) 45%, var(--border-secondary))",background:"var(--bg-secondary)",padding:12},children:[a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginBottom:10,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"🔄"}),a.jsxs("span",{children:[a.jsx("strong",{children:"循环体内部任务序列"})," (每轮迭代将依次执行以下 ",l.length," 个步骤):"]})]}),!n&&a.jsxs("button",{onClick:u,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.1))",border:"1px solid color-mix(in srgb, var(--color-accent, #3b82f6) 40%, transparent)",color:"var(--color-accent-text, #1e40af)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"追加循环步骤"})]})]}),l.length===0?a.jsx("div",{style:{padding:"20px 12px",textAlign:"center",color:"var(--text-muted)",fontSize:11},children:"循环体内暂无任务,请点击右上角「+ 追加循环步骤」添加轮询或重复执行动作"}):a.jsx(rc,{steps:l,onStepsChange:c,upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:s,rowTone:"primary",indexPrefix:"轮内 ",accentIndexBadge:!0})]})}),a.jsxs("div",{style:{padding:"8px 16px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:11,color:"var(--text-secondary)",display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"🛑"}),a.jsxs("span",{children:[a.jsx("strong",{children:"跳出与安全保护"}),":当条件表达式评估为 false 时自动跳出循环向下继续;引擎内置循环熔断保护,防止生产环境死循环。"]})]})]})},vy={decision:"#8b5cf6",fork:"#3b82f6",loop:"#10b981"},A0=({step:e,index:t,depth:r=1,upstreamSteps:n,registry:o=Pe,disabled:s=!1,onChange:i,onDelete:l,onOpenInsertModal:c})=>{const u=vy[e.controlType||"decision"]||vy.decision,d=e.controlType==="fork"?"嵌套并行":e.controlType==="loop"?"嵌套循环":"嵌套分支",p={step:e,upstreamSteps:n,registry:o,disabled:s,onChange:i,onOpenInsertModal:c};return a.jsxs("div",{style:{borderLeft:`3px solid ${u}`,paddingLeft:10,marginLeft:Math.min(r-1,3)*2,display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("span",{style:{fontSize:11,fontWeight:700,color:`color-mix(in srgb, ${u} 80%, var(--text-primary))`},children:["#",t+1," ",d,"(第 ",r," 层)"]}),!s&&a.jsx("button",{onClick:l,title:"删除此嵌套控制流及其内部所有步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:12,padding:"2px 4px"},children:"🗑️"})]}),e.controlType==="fork"?a.jsx(ec,{...p,depth:r}):e.controlType==="loop"?a.jsx(tc,{...p,depth:r}):a.jsx(nc,{...p,depth:r})]})},rc=({steps:e,onStepsChange:t,upstreamSteps:r,registry:n=Pe,disabled:o=!1,depth:s,onOpenInsertModal:i,variant:l="regular",rowTone:c="primary",indexPrefix:u="",accentIndexBadge:d=!1})=>{const[p,h]=I.useState(null),f=l==="compact",m=c==="secondary"?"var(--bg-secondary)":"var(--bg-primary)",y=c==="secondary"?"var(--bg-primary)":"var(--bg-secondary)",g=(x,v)=>{const k=[...e];k[x]=v,t(k)},b=x=>t(e.filter((v,k)=>k!==x));return a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:e.map((x,v)=>{const k=[...r,...e.slice(0,v)];if(x.controlType)return a.jsx(A0,{step:x,index:v,depth:s+1,upstreamSteps:k,registry:n,disabled:o,onChange:N=>g(v,N),onDelete:()=>b(v),onOpenInsertModal:i},x.id);const S=n.getAction(x.actionId),j=p===x.id,w=()=>h(j?null:x.id);return a.jsxs("div",{style:{borderRadius:f?6:8,background:m,border:j?"1px solid var(--color-accent, #3b82f6)":"1px solid var(--border-primary)",overflow:"hidden",transition:f?void 0:"all 0.15s ease"},children:[a.jsxs("div",{onClick:w,style:{padding:f?"6px 8px":"8px 12px",display:"flex",alignItems:"center",justifyContent:"space-between",cursor:"pointer"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:f?6:8,overflow:"hidden"},children:[!f&&a.jsxs("span",{style:{fontSize:10,fontWeight:700,padding:"1px 5px",borderRadius:4,background:d?"var(--color-accent-bg, rgba(59, 130, 246, 0.12))":"var(--bg-tertiary)",color:"var(--color-accent-text, #1e40af)"},children:[u,"#",v+1]}),a.jsx("span",{style:{fontSize:f?14:16},children:S?.icon||"⚙️"}),f?a.jsx("span",{style:{fontSize:11,fontWeight:600,color:"var(--text-primary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:x.name||S?.name}):a.jsxs("div",{children:[a.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:x.name||S?.name||x.taskReferenceName}),a.jsx("div",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace"},children:x.taskReferenceName})]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:f?4:6},onClick:N=>N.stopPropagation(),children:[!o&&a.jsx("button",{onClick:()=>b(v),title:"删除此步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:f?11:12,padding:f?"1px 3px":"2px 4px"},children:"🗑️"}),a.jsx("span",{style:{fontSize:10,color:"var(--text-muted)",transform:j?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s ease",cursor:"pointer"},onClick:w,children:"▼"})]})]}),j&&a.jsx("div",{style:{padding:f?10:"12px 14px",borderTop:"1px solid var(--border-primary)",background:y},children:a.jsx(Ql,{step:x,upstreamSteps:k,registry:n,disabled:o,onChange:N=>g(v,N)})})]},x.id)})})},nc=({step:e,upstreamSteps:t,registry:r=Pe,disabled:n=!1,onChange:o,onOpenInsertModal:s,depth:i=0})=>{const l=e.branches||[],[c,u]=I.useState(l[0]?.caseKey||"__default__"),[d,p]=I.useState(""),[h,f]=I.useState(!1),[m,y]=I.useState(""),{confirm:g,confirmState:b,handleConfirm:x,handleCancel:v}=jr(),k=l.find(_=>_.caseKey===c)||l[0],S=(_,T)=>{const D=l.map(R=>R.caseKey===_?{...R,steps:T}:R);o({...e,branches:D})},j=()=>{const _=d.trim();if(!_)return;if(l.some(D=>D.caseKey===_)){y(`分支 "${_}" 已存在`);return}const T=[...l,{caseKey:_,caseLabel:`分支: ${_}`,steps:[]}];o({...e,branches:T}),u(_),p(""),y(""),f(!1)},w=async(_,T)=>{T.stopPropagation();const D=_==="__default__"?"确定要删除默认分支吗?":`确定要删除分支 "${_}" 及其内部所有步骤吗?`;if(!await g(D))return;const R=l.filter(A=>A.caseKey!==_);o({...e,branches:R}),c===_&&u(R[0]?.caseKey||"")},N=()=>{k&&s(_=>{const T=Gt(_);S(k.caseKey,[...k.steps,T])})},L=l.reduce((_,T)=>_+(T.steps?.length||0),0);return a.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"0 4px 16px rgba(0, 0, 0, 0.08)",overflow:"hidden",transition:"all 0.2s ease"},children:[a.jsxs("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"rgba(139, 92, 246, 0.15)",color:"color-mix(in srgb, #8b5cf6 85%, var(--text-primary))",display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:700},children:"🔀"}),a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary)"},children:e.name||"条件分支路由"}),a.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"rgba(139, 92, 246, 0.12)",color:"color-mix(in srgb, #8b5cf6 85%, var(--text-primary))",fontWeight:600,border:"1px solid rgba(139, 92, 246, 0.3)"},children:"🔀 条件路由 (Decision / Switch)"})]}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["判断参数:"," ",a.jsx("code",{style:{color:"var(--color-accent-text, #1e40af)",background:"var(--bg-secondary)",padding:"1px 4px",borderRadius:4},children:e.caseParam||e.caseExpression||"未指定参数"})," ","· 共包含 ",l.length," 个分支,共 ",L," 个分支内业务步骤"]})]})]}),!n&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[a.jsx("span",{style:{fontSize:11,color:"var(--text-muted)"},children:"判断字段:"}),a.jsx("input",{type:"text",value:e.caseParam||e.caseExpression||"",placeholder:"如 userType 或 $.status",onChange:_=>o({...e,caseParam:_.target.value}),style:{width:140,padding:"4px 8px",borderRadius:4,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:11}})]})]}),a.jsx("div",{style:{padding:"8px 16px",background:"var(--bg-primary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:8},children:a.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap",alignItems:"center"},children:[a.jsx("span",{style:{fontSize:11,color:"var(--text-muted)",marginRight:4},children:"分支列表:"}),l.map(_=>{const T=_.caseKey===c,D=_.caseKey==="__default__";return a.jsxs("div",{onClick:()=>u(_.caseKey),style:{padding:"4px 10px",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:T?600:400,background:T?"var(--color-accent-bg, rgba(59, 130, 246, 0.15))":"var(--bg-secondary)",color:T?"var(--color-accent-text, #1e40af)":"var(--text-secondary)",border:`1px solid ${T?"var(--color-accent, #3b82f6)":"var(--border-primary)"}`,display:"inline-flex",alignItems:"center",gap:6,transition:"all 0.15s ease"},children:[a.jsx("span",{children:D?"🍂":"🌿"}),a.jsx("span",{children:D?"默认分支 (Default)":_.caseKey}),a.jsx("span",{style:{fontSize:10,padding:"0 4px",borderRadius:8,background:T?"var(--color-accent, #3b82f6)":"var(--bg-tertiary)",color:T?"#fff":"var(--text-muted)"},children:_.steps?.length||0}),!n&&l.length>1&&a.jsx("span",{onClick:R=>w(_.caseKey,R),title:"删除此分支",style:{fontSize:11,color:"var(--text-muted)",marginLeft:2,cursor:"pointer"},children:"✕"})]},_.caseKey)}),!n&&!h&&a.jsx("button",{onClick:()=>f(!0),style:{padding:"4px 8px",borderRadius:6,background:"transparent",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer"},children:"+ 新增分支"}),!n&&h&&a.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("input",{autoFocus:!0,type:"text",value:d,placeholder:"分支标识,如 VIP",onChange:_=>{p(_.target.value),m&&y("")},onKeyDown:_=>_.key==="Enter"&&j(),style:{padding:"3px 6px",borderRadius:4,border:"1px solid var(--color-accent, #3b82f6)",background:"var(--bg-secondary)",color:"var(--text-primary)",fontSize:11,width:110}}),m&&a.jsx("span",{style:{fontSize:11,color:"#ef4444"},children:m}),a.jsx("button",{onClick:j,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontSize:11,cursor:"pointer"},children:"确认"}),a.jsx("button",{onClick:()=>{f(!1),p(""),y("")},style:{padding:"3px 6px",background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:11},children:"取消"})]})]})}),a.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)"},children:k?a.jsxs("div",{children:[a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginBottom:10,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("span",{children:["👉 当判断命中 ",a.jsx("strong",{children:k.caseKey})," 时,将依次串行执行以下步骤:"]}),!n&&a.jsxs("button",{onClick:N,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",border:"1px solid var(--color-accent, #3b82f6)",color:"var(--color-accent-text, #1e40af)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"追加分支步骤"})]})]}),k.steps.length===0?a.jsx("div",{style:{padding:"24px 16px",borderRadius:8,border:"1px dashed var(--border-secondary)",textAlign:"center",color:"var(--text-muted)",fontSize:12,background:"var(--bg-secondary)"},children:"当前分支暂无步骤,点击右上方「+ 追加分支步骤」配置分支业务逻辑"}):a.jsx(rc,{steps:k.steps,onStepsChange:_=>S(k.caseKey,_),upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:s,rowTone:"secondary"})]}):a.jsx("div",{style:{textAlign:"center",color:"var(--text-muted)",fontSize:12},children:"请选择或新增一个分支进行配置"})}),a.jsxs("div",{style:{padding:"6px 14px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:10,color:"var(--text-muted)",display:"flex",alignItems:"center",gap:4},children:[a.jsx("span",{children:"💡"}),a.jsx("span",{children:"分支执行逻辑:运行时仅会精准执行匹配的分支路径,未命中的分支步骤将安全跳过。"})]}),b&&a.jsx(ft,{message:b.message,onConfirm:x,onCancel:v})]})};function ky(e,t,r){const n=(e||"").toLowerCase();return t===401||t===403||n.includes("401")||n.includes("403")||n.includes("unauthorized")||n.includes("forbidden")||n.includes("token expired")||n.includes("invalid api key")||n.includes("signature does not match")?{type:"auth",title:"云平台账号授权已失效或权限受限",explanation:`在调用【${r||"云服务"}】时未通过安全身份核验。通常是因为配置的账号密钥 (AccessKey/Token) 已过期失效,或该账号缺乏对应资源的操作授权。`,suggestion:"建议检查账号授权状态,重新填入有效密钥或联系企业管理员为该账号分配权限。",actionLabel:"重新授权密钥",actionKey:"reauth"}:t===504||n.includes("timeout")||n.includes("timed out")||n.includes("etimedout")||n.includes("deadline")||n.includes("connection refused")?{type:"timeout",title:"目标云主机响应超时",explanation:`向【${r||"主机"}】发送指令后,在约定的时间内未收到回应。可能是云主机刚开机系统服务尚未就绪,或所在子网的安全组策略拦截了通信端口。`,suggestion:"云服务正在进行底层引导,通常稍等片刻自动重试即可恢复。",actionLabel:"稍后自动重试",actionKey:"retry"}:n.includes("exit code")||n.includes("command failed")||n.includes("command not found")||n.includes("syntax error")?{type:"script_fail",title:"主机内部脚本执行异常退出",explanation:"下发到云主机内部的 Shell/Python 脚本在运行过程中遇到错误并提前中断。通常是因为目标环境中缺少前置依赖库,或指定的文件路径不存在。",suggestion:"可展开下方查看脚本的标准输出日志排查具体报错,修正脚本后重新执行。",actionLabel:"查看脚本输出日志",actionKey:"inspect_upstream"}:n.includes("nullpointer")||n.includes("cannot read property")||n.includes("undefined")||n.includes("field not found")||n.includes("parameter not found")||n.includes("missing required parameter")?{type:"missing_data",title:"缺少必要的上游输入数据",explanation:"本步骤引用的上游步骤没有返回预期的数据内容(例如没有获取到有效的「主机实例ID」或「内网IP」),导致后续步骤无法继续执行。",suggestion:"请点击检查上游步骤的输出结果,确认上游任务是否正常产生了所需的数据胶囊。",actionLabel:"查看上游步骤数据",actionKey:"inspect_upstream"}:n.includes("quota")||n.includes("limit exceeded")||n.includes("insufficient")||n.includes("out of stock")||n.includes("balance")?{type:"quota",title:"可用区资源库存不足或配额受限",explanation:"当前所选可用区该型号的云主机规格暂时售罄,或云平台租户的配额上限已满。",suggestion:"建议在流程中更换目标规格(如选择通用型或计算型同等配置),或申请提升账号配额。",actionLabel:"更换规格/可用区",actionKey:"change_spec"}:n.includes("network")||n.includes("dns")||n.includes("unreachable")||n.includes("failed to fetch")?{type:"network",title:"网络通信中断或无法解析",explanation:"调度服务与目标云服务之间的网络连接不稳定,或专有网络 VPC 路由未打通。",suggestion:"请检查网络连通性配置,或联系网络运维人员协助排查。",actionLabel:"重新尝试连接",actionKey:"retry"}:{type:"unknown",title:"步骤执行未达预期",explanation:e||"执行过程中底层服务报告了非成功状态,请查阅详细日志。",suggestion:"可点击重试此步骤,或将此诊断报告反馈给技术支持排查。",actionLabel:"重试此任务",actionKey:"retry"}}const Sy=({rawError:e,statusCode:t,taskName:r,onActionClick:n})=>{const[o,s]=I.useState(!1),i=ky(e,t,r);return a.jsxs("div",{style:{borderRadius:10,background:"rgba(239, 68, 68, 0.08)",border:"1px solid rgba(239, 68, 68, 0.3)",padding:"14px 16px",display:"flex",flexDirection:"column",gap:10,fontFamily:"inherit"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontSize:18},children:i.type==="auth"?"🔑":i.type==="timeout"?"⏱️":i.type==="missing_data"?"⚠️":i.type==="quota"?"💳":"❌"}),a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--status-failed, #ef4444)"},children:i.title})]}),i.actionLabel&&a.jsxs("button",{onClick:()=>n?.(i.actionKey),style:{padding:"4px 10px",borderRadius:6,background:"color-mix(in srgb, var(--status-failed, #ef4444) 15%, transparent)",border:"1px solid color-mix(in srgb, var(--status-failed, #ef4444) 30%, transparent)",color:"var(--status-failed, #ef4444)",fontSize:11,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{children:"⚡"}),a.jsx("span",{children:i.actionLabel})]})]}),a.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.6},children:i.explanation}),a.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",fontSize:11,color:"var(--color-warning, #d97706)",lineHeight:1.5},children:["💡 ",a.jsx("strong",{children:"建议做法"}),":",i.suggestion]}),e&&a.jsxs("div",{style:{marginTop:2},children:[a.jsx("button",{onClick:()=>s(!o),style:{background:"none",border:"none",color:"var(--text-muted, #94a3b8)",fontSize:10,cursor:"pointer",padding:0,display:"inline-flex",alignItems:"center",gap:4},children:a.jsx("span",{children:o?"▾ 折叠底层技术报错":"▸ 展开底层技术报错 (供研发/技术支持排查)"})}),o&&a.jsx("div",{style:{marginTop:6,padding:"8px 10px",borderRadius:4,background:"rgba(0, 0, 0, 0.35)",color:"var(--text-muted, #94a3b8)",fontFamily:"monospace",fontSize:10,lineHeight:1.4,maxHeight:120,overflowY:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:e})]})]})};function L0(e,t){const r=e.outputData||{},n=e.workflowTask?.inputParameters?._actionId,o=n?t.getAction(n):void 0;if(e.status==="FAILED"||e.status==="FAILED_WITH_TERMINAL_ERROR")return"执行中断于此步骤,已触发异常诊断自愈建议。";if(n==="ecs.create_instance"){const s=r.privateIp?` · 分配内网 IP: ${r.privateIp}`:"";return`成功在可用区初始化并启动云主机${r.instanceId?` · 实例 ID: ${r.instanceId}`:""}${s}。`}return n==="ecs.query_instance"?`已查询获取主机实时状态 (${r.status||"RUNNING"}),公网 IP: ${r.publicIp||"未绑定"}。`:n==="ecs.run_command"?`远程运维脚本已成功在主机内执行完毕,命令批次: ${r.commandId||"cmd-ok"}。`:n==="ecs.create_snapshot"?`系统盘安全增量快照已成功归档,快照 ID: ${r.snapshotId||"s-done"}。`:n==="ecs.stop_instance"?"云主机已安全关闭电源,当前状态: STOPPED。":n==="ecs.start_instance"?"云主机已开机并启动系统服务,当前状态: RUNNING。":n==="ecs.modify_spec"?`云主机硬件规格已在线变更生效 (${r.oldSpec||""} → ${r.newSpec||""})。`:n==="ecs.get_monitor_metrics"?`采集到实时负载:CPU 利用率 ${r.cpuUsagePercent??20}%,系统运行平稳。`:n==="notify.send_message"?"运维协同卡片已成功推送至指定协同通知群,状态: DELIVERED。":n==="control.wait"||e.taskType==="WAIT"?"系统安全缓冲等待完成,底层服务就绪。":n==="human.approval"||e.taskType==="HUMAN"?`责任人 (${r.reviewer||"devops_lead"}) 已完成审核批准。`:e.taskType==="DECISION"||e.taskType==="SWITCH"?`条件分支路由完成:评估参数命中分支 [${r.selectedCase||r.case||r.output||""||"主干分支"}],正向下分流执行。`:e.taskType==="FORK_JOIN"||e.taskType==="FORK_JOIN_DYNAMIC"?"并行并发已触发:多条独立业务泳道同时展开并发执行。":e.taskType==="JOIN"?"并行汇聚同步完成:所有并发泳道已全部成功执行完毕,工作流汇合向下推进。":e.taskType==="DO_WHILE"?`循环迭代处理完成:已执行 ${e.iteration||r.iteration||1} 轮循环,评估跳出条件已满足。`:`${o?.name||e.taskDefName||e.referenceTaskName} 执行完毕。`}const _y=({instance:e,registry:t=Pe,onInspectStep:r})=>{const[n,o]=I.useState({}),s=d=>{o(p=>({...p,[d]:!p[d]}))},i=e.tasks||[],l=e.status==="FAILED"||e.status==="TIMED_OUT",u=((e.endTime&&e.startTime?e.endTime-e.startTime:0)/1e3).toFixed(1);return a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16,padding:"16px 20px",background:"var(--bg-primary)",height:"100%",overflowY:"auto",fontFamily:"inherit"},children:[a.jsxs("div",{style:{padding:"12px 18px",borderRadius:10,background:l?"rgba(239, 68, 68, 0.1)":"rgba(16, 185, 129, 0.1)",border:`1px solid ${l?"rgba(239, 68, 68, 0.3)":"rgba(16, 185, 129, 0.3)"}`,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:24},children:l?"❌":"🎉"}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:700,fontSize:14,color:l?"var(--status-failed, #ef4444)":"var(--status-completed, #10b981)"},children:l?"工作流执行中断":"工作流全部步骤顺利执行完毕"}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["执行 ID: ",e.workflowId," · 共执行 ",i.length," 个步骤 · 总耗时约 ",u," 秒"]})]})]}),a.jsx("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:4,fontWeight:600,background:l?"rgba(239, 68, 68, 0.15)":"rgba(16, 185, 129, 0.15)",color:l?"var(--status-failed, #ef4444)":"var(--status-completed, #10b981)"},children:e.status})]}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12},children:i.map((d,p)=>{const h=d.workflowTask?.inputParameters?._actionId,f=h?t.getAction(h):void 0,m=f?.icon||(d.taskType==="DECISION"||d.taskType==="SWITCH"?"🔀":d.taskType==="FORK_JOIN"||d.taskType==="FORK_JOIN_DYNAMIC"?"⚡":d.taskType==="JOIN"?"🔗":d.taskType==="DO_WHILE"?"🔁":d.taskType==="WAIT"?"⏳":d.taskType==="HUMAN"?"👤":"⚙️"),y=d.status==="FAILED"||d.status==="FAILED_WITH_TERMINAL_ERROR",g=!!n[d.referenceTaskName],b=L0(d,t),x=d.startTime?new Date(d.startTime).toLocaleTimeString():"--:--:--",v=d.endTime&&d.startTime?`${((d.endTime-d.startTime)/1e3).toFixed(2)}s`:"";return a.jsxs("div",{style:{borderRadius:10,background:"var(--bg-secondary)",border:y?"1px solid var(--status-failed, #ef4444)":"1px solid var(--border-primary)",boxShadow:y?"0 4px 16px rgba(239, 68, 68, 0.12)":"none",padding:"12px 16px",display:"flex",flexDirection:"column",gap:8},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:18},children:y?"❌":m}),a.jsxs("div",{children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsxs("span",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary)"},children:["步骤 #",p+1,": ",f?.name||d.taskDefName||d.referenceTaskName]}),a.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:3,background:y?"rgba(239, 68, 68, 0.15)":"rgba(16, 185, 129, 0.15)",color:y?"var(--status-failed, #ef4444)":"var(--status-completed, #10b981)",fontWeight:600},children:y?"执行失败":"执行完成"})]}),a.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:[x," ",v&&`· 耗时 ${v}`]})]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[r&&a.jsx("button",{onClick:()=>r(d.referenceTaskName),style:{padding:"2px 8px",borderRadius:4,background:"transparent",border:"1px solid var(--border-secondary)",color:"var(--text-secondary)",fontSize:11,cursor:"pointer"},children:"定位步骤"}),a.jsx("button",{onClick:()=>s(d.referenceTaskName),style:{background:"none",border:"none",color:"var(--text-muted)",fontSize:11,cursor:"pointer"},children:g?"收起数据 ▴":"查看数据 ▾"})]})]}),a.jsx("div",{style:{fontSize:12,color:y?"var(--status-failed, #ef4444)":"var(--text-secondary)",lineHeight:1.5,padding:"4px 0"},children:b}),y&&a.jsx("div",{style:{marginTop:4},children:a.jsx(Sy,{rawError:d.reasonForIncompletion||"底层任务状态异常终止",taskName:f?.name||d.referenceTaskName})}),g&&d.outputData&&a.jsx("div",{style:{marginTop:8,padding:"10px 12px",borderRadius:8,background:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",display:"flex",flexWrap:"wrap",gap:8},children:Object.entries(d.outputData).map(([k,S])=>typeof S=="object"&&S!==null?null:a.jsxs("span",{style:{fontSize:11,padding:"3px 8px",borderRadius:6,background:"var(--color-accent-bg, rgba(59, 130, 246, 0.12))",border:"1px solid color-mix(in srgb, var(--color-accent, #3b82f6) 30%, transparent)",display:"inline-flex",alignItems:"center",gap:6,fontFamily:"monospace"},children:[a.jsxs("span",{style:{color:"var(--text-muted)"},children:[k,":"]}),a.jsx("span",{style:{color:"var(--color-accent-text, #1e40af)",fontWeight:600},children:String(S)})]},k))})]},d.taskId||d.referenceTaskName||p)})})]})},wy=({workflowDef:e,onChange:t,registry:r=Pe,readOnly:n=!1,workflowExecution:o,libraryCatalog:s,currentWorkflowLevel:i,onAskAi:l})=>{const c=I.useMemo(()=>oy(e,r),[e,r]),[u,d]=I.useState(null),[p,h]=I.useState(null),[f,m]=I.useState(null),[y,g]=I.useState(!1),[b,x]=I.useState(null),[v,k]=I.useState(o||null),[S,j]=I.useState(o?"story":"steps");I.useEffect(()=>{o&&(k(o),j("story"))},[o]);const w=c.steps,N=E=>{const P={...c,steps:E},z=ny(P,r);t(z)},L=(E,P)=>{const z=[...w];z[E]=P,N(z)},_=E=>{if(n)return;const P=w.filter((z,J)=>J!==E);u===w[E]?.id&&d(null),N(P)},T=(E,P)=>{if(n||P<0||P>=w.length)return;const z=[...w],[J]=z.splice(E,1);z.splice(P,0,J),N(z)},D=E=>{m(()=>E),h(0)},R=(E,P)=>{if(f){f(E),m(null),h(null);return}const z=Gt(E),J=[...w];J.splice(P,0,z),h(null),d(z.id),N(J)},A=()=>{if(e){g(!0);try{const E={},P=B=>{for(const $ of B){const C=r.getAction($.actionId);C&&C.mockOutput&&(E[$.taskReferenceName]=C.mockOutput($.values));for(const G of $.branches||[])P(G.steps);for(const G of $.forkLanes||[])P(G.steps);P($.loopSteps||[])}};P(w);const z=zt(e,{taskMocks:E});k(z),j("story");const J={};for(const B of z.tasks)J[B.referenceTaskName]={status:B.status,output:B.outputData};x(J)}catch(E){console.error("[StepFlowEditor] Dry run error:",E)}finally{g(!1)}}};return a.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"100%",background:"var(--bg-primary, #0f172a)",overflowY:"auto",fontFamily:"inherit"},children:[a.jsxs("div",{style:{padding:"12px 20px",borderBottom:"1px solid var(--border-primary, rgba(255,255,255,0.1))",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-secondary, #1e293b)",flexShrink:0},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:18},children:"📋"}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary, #f8fafc)"},children:c.name||"云平台业务流程"}),a.jsxs("div",{style:{fontSize:12,color:"var(--text-muted, #94a3b8)"},children:["共 ",w.length," 个业务执行步骤 · 普通用户零代码模式"]})]})]}),v&&a.jsxs("div",{style:{display:"inline-flex",background:"rgba(255, 255, 255, 0.06)",borderRadius:6,padding:2,border:"1px solid var(--border-secondary, rgba(255, 255, 255, 0.15))"},children:[a.jsx("button",{onClick:()=>j("steps"),style:{padding:"4px 10px",borderRadius:4,border:"none",background:S==="steps"?"var(--color-accent, #3b82f6)":"transparent",color:S==="steps"?"#fff":"var(--text-secondary, #b0bec5)",fontSize:11,fontWeight:600,cursor:"pointer"},children:"📋 步骤配置"}),a.jsxs("button",{onClick:()=>j("story"),style:{padding:"4px 10px",borderRadius:4,border:"none",background:S==="story"?"var(--color-accent, #3b82f6)":"transparent",color:S==="story"?"#fff":"var(--text-secondary, #b0bec5)",fontSize:11,fontWeight:600,cursor:"pointer"},children:["📖 运行故事线 (",v.tasks.length,"步)"]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[b&&a.jsx("button",{onClick:()=>x(null),style:{padding:"5px 10px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-muted, #94a3b8)",fontSize:12,cursor:"pointer"},children:"清除试跑结果"}),a.jsx("button",{onClick:A,disabled:y||w.length===0,style:{padding:"6px 14px",borderRadius:6,background:"color-mix(in srgb, var(--color-success, #10b981) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--color-success, #10b981) 45%, transparent)",color:"var(--color-success, #10b981)",fontSize:12,fontWeight:600,cursor:y||w.length===0?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6,transition:"all 0.15s ease"},children:a.jsx("span",{children:y?"⏳ 模拟中...":"▶ 浏览器本地试跑 (零风险)"})})]})]}),S==="story"&&v?a.jsx("div",{style:{flex:1,overflowY:"auto"},children:a.jsx(_y,{instance:v,registry:r,onInspectStep:E=>{j("steps");const P=w.find(z=>z.taskReferenceName===E);P&&d(P.id)}})}):a.jsxs("div",{style:{flex:1,maxWidth:820,width:"100%",margin:"0 auto",padding:"24px 20px",display:"flex",flexDirection:"column",gap:16},children:[w.length===0&&a.jsxs("div",{style:{textAlign:"center",padding:"60px 20px",background:"var(--bg-secondary, #1e293b)",borderRadius:12,border:"1px dashed var(--border-secondary, rgba(255,255,255,0.2))",display:"flex",flexDirection:"column",alignItems:"center",gap:14},children:[a.jsx("span",{style:{fontSize:42},children:"⚡"}),a.jsx("div",{style:{fontWeight:600,fontSize:16,color:"var(--text-primary, #f8fafc)"},children:"尚未添加任何业务动作"}),a.jsx("p",{style:{fontSize:13,color:"var(--text-secondary, #b0bec5)",maxWidth:420,margin:0},children:"无需编写代码或配置复杂的 JSON,点击下方按钮选择第一个云主机业务动作,即可开始自动化编排。"}),a.jsxs("button",{disabled:n,onClick:()=>h(0),style:{marginTop:8,padding:"8px 18px",borderRadius:8,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontWeight:600,fontSize:13,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"添加第一个业务动作"})]})]}),w.length>0&&!n&&a.jsx("div",{style:{display:"flex",justifyContent:"center"},children:a.jsxs("button",{onClick:()=>h(0),style:{padding:"4px 12px",borderRadius:20,background:"rgba(255,255,255,0.04)",border:"1px dashed var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-muted, #94a3b8)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"在最前插入步骤"})]})}),w.map((E,P)=>{const z=r.getAction(E.actionId),J=u===E.id,B=w.slice(0,P),$=b?.[E.taskReferenceName];return E.controlType==="decision"?a.jsxs(I.Fragment,{children:[a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 4px"},children:[a.jsxs("span",{style:{fontSize:12,fontWeight:700,color:"color-mix(in srgb, #8b5cf6 75%, var(--text-primary))"},children:["#",P+1," 控制流分支"]}),!n&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[a.jsx("button",{disabled:P===0,onClick:()=>T(P,P-1),title:"上移",style:{background:"none",border:"none",color:P===0?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===0?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↑"}),a.jsx("button",{disabled:P===w.length-1,onClick:()=>T(P,P+1),title:"下移",style:{background:"none",border:"none",color:P===w.length-1?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===w.length-1?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↓"}),a.jsx("button",{onClick:()=>_(P),title:"删除步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:13,padding:"2px 4px"},children:"🗑️"})]})]}),a.jsx(nc,{step:E,upstreamSteps:B,registry:r,disabled:n,onChange:C=>L(P,C),onOpenInsertModal:D})]}),!n&&a.jsx("div",{style:{display:"flex",justifyContent:"center",margin:"-4px 0"},children:a.jsxs("button",{onClick:()=>h(P+1),style:{padding:"4px 12px",borderRadius:16,background:"var(--bg-tertiary)",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,transition:"all 0.15s ease"},onMouseEnter:C=>{C.currentTarget.style.borderColor="var(--color-accent, #3b82f6)",C.currentTarget.style.color="var(--color-accent, #3b82f6)"},onMouseLeave:C=>{C.currentTarget.style.borderColor="var(--border-secondary)",C.currentTarget.style.color="var(--text-muted)"},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"插入业务动作"})]})})]},E.id):E.controlType==="fork"?a.jsxs(I.Fragment,{children:[a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 4px"},children:[a.jsxs("span",{style:{fontSize:12,fontWeight:700,color:"var(--color-accent, #3b82f6)"},children:["#",P+1," 并发泳道组"]}),!n&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[a.jsx("button",{disabled:P===0,onClick:()=>T(P,P-1),title:"上移",style:{background:"none",border:"none",color:P===0?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===0?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↑"}),a.jsx("button",{disabled:P===w.length-1,onClick:()=>T(P,P+1),title:"下移",style:{background:"none",border:"none",color:P===w.length-1?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===w.length-1?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↓"}),a.jsx("button",{onClick:()=>_(P),title:"删除步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:13,padding:"2px 4px"},children:"🗑️"})]})]}),a.jsx(ec,{step:E,upstreamSteps:B,registry:r,disabled:n,onChange:C=>L(P,C),onOpenInsertModal:D})]}),!n&&a.jsx("div",{style:{display:"flex",justifyContent:"center",margin:"-4px 0"},children:a.jsxs("button",{onClick:()=>h(P+1),style:{padding:"4px 12px",borderRadius:16,background:"var(--bg-tertiary)",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,transition:"all 0.15s ease"},onMouseEnter:C=>{C.currentTarget.style.borderColor="var(--color-accent, #3b82f6)",C.currentTarget.style.color="var(--color-accent, #3b82f6)"},onMouseLeave:C=>{C.currentTarget.style.borderColor="var(--border-secondary)",C.currentTarget.style.color="var(--text-muted)"},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"插入业务动作"})]})})]},E.id):E.controlType==="loop"?a.jsxs(I.Fragment,{children:[a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 4px"},children:[a.jsxs("span",{style:{fontSize:12,fontWeight:700,color:"var(--color-accent, #3b82f6)"},children:["#",P+1," 循环迭代体"]}),!n&&a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[a.jsx("button",{disabled:P===0,onClick:()=>T(P,P-1),title:"上移",style:{background:"none",border:"none",color:P===0?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===0?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↑"}),a.jsx("button",{disabled:P===w.length-1,onClick:()=>T(P,P+1),title:"下移",style:{background:"none",border:"none",color:P===w.length-1?"rgba(255,255,255,0.2)":"var(--text-secondary)",cursor:P===w.length-1?"default":"pointer",fontSize:13,padding:"2px 4px"},children:"↓"}),a.jsx("button",{onClick:()=>_(P),title:"删除步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:13,padding:"2px 4px"},children:"🗑️"})]})]}),a.jsx(tc,{step:E,upstreamSteps:B,registry:r,disabled:n,onChange:C=>L(P,C),onOpenInsertModal:D})]}),!n&&a.jsx("div",{style:{display:"flex",justifyContent:"center",margin:"-4px 0"},children:a.jsxs("button",{onClick:()=>h(P+1),style:{padding:"4px 12px",borderRadius:16,background:"var(--bg-tertiary)",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,transition:"all 0.15s ease"},onMouseEnter:C=>{C.currentTarget.style.borderColor="var(--color-accent, #3b82f6)",C.currentTarget.style.color="var(--color-accent, #3b82f6)"},onMouseLeave:C=>{C.currentTarget.style.borderColor="var(--border-secondary)",C.currentTarget.style.color="var(--text-muted)"},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"插入业务动作"})]})})]},E.id):a.jsxs(I.Fragment,{children:[a.jsxs("div",{style:{background:"var(--bg-secondary, #1e293b)",borderRadius:10,border:J?"1px solid var(--color-accent, #3b82f6)":"1px solid var(--border-primary, rgba(255,255,255,0.12))",boxShadow:J?"0 8px 24px rgba(59, 130, 246, 0.15)":"0 4px 12px rgba(0,0,0,0.15)",overflow:"hidden",transition:"all 0.2s ease"},children:[a.jsxs("div",{onClick:()=>d(J?null:E.id),style:{padding:"12px 16px",display:"flex",alignItems:"center",justifyContent:"space-between",cursor:"pointer",userSelect:"none",background:J?"rgba(59, 130, 246, 0.05)":"transparent"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,flex:1,overflow:"hidden"},children:[a.jsxs("div",{style:{width:28,height:28,borderRadius:6,background:"var(--bg-primary, #0f172a)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:12,fontWeight:700,color:"var(--color-accent, #3b82f6)",border:"1px solid var(--border-primary, rgba(255,255,255,0.1))"},children:["#",P+1]}),a.jsx("span",{style:{fontSize:20},children:z?.icon||"⚙️"}),a.jsxs("div",{style:{overflow:"hidden"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary, #f8fafc)"},children:E.name||z?.name||E.taskReferenceName}),z?.riskLevel==="sensitive"&&a.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:4,background:"rgba(239, 68, 68, 0.15)",color:"#f87171",fontWeight:600},children:"⚠️ 敏感"}),a.jsx(P0,{step:E,action:z,disabled:n,catalog:s,getReferencedOutputs:()=>py(E.taskReferenceName,w.filter(C=>C.id!==E.id)),onUpgrade:(C,G)=>L(P,{...E,libraryRef:{name:E.libraryRef.name,version:C},...G?{values:my(E.values,G)}:{}})}),$&&a.jsx("span",{style:{fontSize:11,padding:"1px 6px",borderRadius:4,background:"rgba(16, 185, 129, 0.2)",color:"#34d399",fontWeight:600},children:"✓ 试跑成功"})]}),a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z?.description||E.description||E.taskReferenceName})]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},onClick:C=>C.stopPropagation(),children:[l&&a.jsx("button",{onClick:()=>l(E),title:"让 AI 介绍这个步骤的作用与配置建议",style:{background:"none",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:14,padding:"4px"},children:"🤖"}),!n&&a.jsxs(a.Fragment,{children:[a.jsx("button",{disabled:P===0,onClick:()=>T(P,P-1),title:"上移",style:{background:"none",border:"none",color:P===0?"rgba(255,255,255,0.2)":"var(--text-secondary, #b0bec5)",cursor:P===0?"default":"pointer",fontSize:14,padding:"4px"},children:"↑"}),a.jsx("button",{disabled:P===w.length-1,onClick:()=>T(P,P+1),title:"下移",style:{background:"none",border:"none",color:P===w.length-1?"rgba(255,255,255,0.2)":"var(--text-secondary, #b0bec5)",cursor:P===w.length-1?"default":"pointer",fontSize:14,padding:"4px"},children:"↓"}),a.jsx("button",{onClick:()=>_(P),title:"删除步骤",style:{background:"none",border:"none",color:"#ef4444",cursor:"pointer",fontSize:14,padding:"4px"},children:"🗑️"})]}),a.jsx("span",{style:{fontSize:12,color:"var(--text-muted, #94a3b8)",transform:J?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s ease"},children:"▼"})]})]}),J&&a.jsx("div",{style:{padding:"14px 16px",borderTop:"1px solid var(--border-primary)",background:"var(--bg-primary)"},children:a.jsx(Ql,{step:E,upstreamSteps:B,registry:r,disabled:n,onChange:C=>L(P,C)})})]}),!n&&a.jsx("div",{style:{display:"flex",justifyContent:"center",margin:"-4px 0"},children:a.jsxs("button",{onClick:()=>h(P+1),style:{padding:"4px 12px",borderRadius:16,background:"var(--bg-tertiary)",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,transition:"all 0.15s ease"},onMouseEnter:C=>{C.currentTarget.style.borderColor="var(--color-accent, #3b82f6)",C.currentTarget.style.color="var(--color-accent, #3b82f6)"},onMouseLeave:C=>{C.currentTarget.style.borderColor="var(--border-secondary)",C.currentTarget.style.color="var(--text-muted)"},children:[a.jsx("span",{children:"+"}),a.jsx("span",{children:"插入业务动作"})]})})]},E.id)})]}),p!==null&&a.jsx(D0,{registry:r,stepNumber:p+1,onClose:()=>h(null),onSelect:E=>R(E,p),currentWorkflowLevel:i,libraryCatalog:s})]})};function M0(e,t,r){if(!e||!t)return;const n=t.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let o=e;for(let i=0;i<n.length-1;i++){const l=n[i];if(o[l]===void 0||o[l]===null){const c=n[i+1];o[l]=/^\d+$/.test(c)?[]:{}}o=o[l]}const s=n[n.length-1];o[s]=r}function ac(e,t){const r=structuredClone(e.definition);for(const n of e.variables){const o=t[n.key]??n.defaultValue;if(o!==void 0)for(const s of n.bindings)M0(r,s,o)}return r}const Ty=({template:e,onApply:t,onClose:r})=>{const{theme:n,themeColor:o}=ie(we(g=>({theme:g.theme,themeColor:g.themeColor}))),[s,i]=I.useState(1),[l,c]=I.useState(()=>{const g={};for(const b of e.variables)b.defaultValue!==void 0&&(g[b.key]=b.defaultValue);return g}),[u,d]=I.useState(!1),[p,h]=I.useState(null),f=(g,b)=>{c(x=>({...x,[g]:b}))},m=()=>{d(!0);try{const g=ac(e,l),b=e.mockDataset.scenarios[0],x=zt(g,{workflowInput:b?.workflowInput||{},taskMocks:b?.taskOutputs||{}});x.status==="COMPLETED"?h(`全部 ${x.tasks.length} 个步骤在浏览器本地顺利模拟通过,各上游数据与通知已正确串联。`):h(`模拟运行结束,状态为: ${x.status}`)}catch(g){h(`模拟试跑出错: ${g.message}`)}finally{d(!1)}},y=()=>{const g=ac(e,l);t(g),r()};return typeof document>"u"?null:Qe.createPortal(a.jsx("div",{"data-mode":n,"data-brand":o,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"rgba(0, 0, 0, 0.72)",backdropFilter:"blur(5px)",zIndex:1300,display:"flex",alignItems:"center",justifyContent:"center",padding:20,fontFamily:"inherit"},onClick:r,children:a.jsxs("div",{onClick:g=>g.stopPropagation(),style:{width:680,maxHeight:"85vh",background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255, 255, 255, 0.2))",borderRadius:14,boxShadow:"0 24px 64px rgba(0, 0, 0, 0.6)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"14px 20px",borderBottom:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary, #0f172a)"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:22},children:e.icon}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,fontSize:15,color:"var(--text-primary, #f8fafc)"},children:e.title}),a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)"},children:"3 步填空式模板快速启用向导"})]})]}),a.jsx("button",{onClick:r,style:{background:"none",border:"none",color:"var(--text-muted, #94a3b8)",cursor:"pointer",fontSize:16},children:"✕"})]}),a.jsx("div",{style:{padding:"10px 20px",background:"rgba(0,0,0,0.15)",borderBottom:"1px solid var(--border-primary, rgba(255, 255, 255, 0.08))",display:"flex",alignItems:"center",justifyContent:"center",gap:24},children:[{step:1,label:"1. 了解方案"},{step:2,label:"2. 参数填空"},{step:3,label:"3. 试跑验证与激活"}].map(g=>{const b=s===g.step,x=s>g.step;return a.jsxs("div",{onClick:()=>x&&i(g.step),style:{display:"flex",alignItems:"center",gap:6,cursor:x?"pointer":"default",opacity:b||x?1:.5},children:[a.jsx("div",{style:{width:22,height:22,borderRadius:11,background:x?"var(--color-success, #10b981)":b?"var(--color-accent, #3b82f6)":"rgba(255,255,255,0.1)",color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:700},children:x?"✓":g.step}),a.jsx("span",{style:{fontSize:12,fontWeight:b?600:400,color:b?"var(--text-primary, #f8fafc)":"var(--text-secondary, #b0bec5)"},children:g.label})]},g.step)})}),a.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"20px 24px"},children:[s===1&&a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[a.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:12},children:[a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"rgba(16, 185, 129, 0.1)",border:"1px solid rgba(16, 185, 129, 0.25)"},children:[a.jsx("div",{style:{fontSize:11,color:"#34d399"},children:"⚡ 预期单次节省人工"}),a.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"#10b981",marginTop:4},children:["约 ",e.roi.minutesSavedPerRun," 分钟"]})]}),a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"rgba(59, 130, 246, 0.1)",border:"1px solid rgba(59, 130, 246, 0.25)"},children:[a.jsx("div",{style:{fontSize:11,color:"#60a5fa"},children:"🔄 典型每周频次"}),a.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"#3b82f6",marginTop:4},children:["约 ",e.roi.typicalRunsPerWeek," 次 / 周"]})]}),a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"rgba(245, 158, 11, 0.1)",border:"1px solid rgba(245, 158, 11, 0.25)"},children:[a.jsx("div",{style:{fontSize:11,color:"#fbbf24"},children:"🔥 累计被采用"}),a.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"#f59e0b",marginTop:4},children:[e.roi.popularityCount??1200," 次"]})]})]}),a.jsxs("div",{style:{padding:"12px 16px",borderRadius:8,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-primary, rgba(255,255,255,0.1))",lineHeight:1.6},children:[a.jsx("div",{style:{fontWeight:600,color:"var(--text-primary, #f8fafc)",fontSize:13,marginBottom:4},children:"💡 解决的痛点"}),a.jsx("div",{style:{fontSize:13,color:"var(--text-secondary, #b0bec5)"},children:e.valueProposition}),a.jsx("p",{style:{fontSize:12,color:"var(--text-muted, #94a3b8)",margin:"8px 0 0 0"},children:e.description})]}),a.jsxs("div",{children:[a.jsxs("div",{style:{fontSize:12,fontWeight:600,color:"var(--text-muted, #94a3b8)",marginBottom:8},children:["包含的标准步骤流程 (",e.definition.tasks?.length??0," 个步骤):"]}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:e.definition.tasks?.map((g,b)=>a.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"rgba(255,255,255,0.03)",border:"1px solid var(--border-primary, rgba(255,255,255,0.08))",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:12},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsxs("span",{style:{color:"var(--color-accent, #3b82f6)",fontWeight:600},children:["#",b+1]}),a.jsx("span",{style:{color:"var(--text-primary, #f8fafc)"},children:g.description||g.name})]}),a.jsx("span",{style:{fontSize:10,color:"var(--text-muted, #94a3b8)",fontFamily:"monospace"},children:g.taskReferenceName})]},g.taskReferenceName))})]})]}),s===2&&a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[a.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"rgba(59, 130, 246, 0.08)",border:"1px solid rgba(59, 130, 246, 0.25)",fontSize:12,color:"#93c5fd"},children:["✏️ ",a.jsx("strong",{children:"开箱即用填空"}),":无需修改复杂的流程连线与 JSON,仅需确认以下几个业务变量即可:"]}),e.variables.map(g=>{const b=l[g.key]??g.defaultValue;return a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[a.jsxs("label",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary, #f8fafc)",display:"flex",alignItems:"center",gap:4},children:[g.label,g.required&&a.jsx("span",{style:{color:"#ef4444"},children:"*"})]}),g.type==="select"?a.jsx("select",{value:b??"",onChange:x=>f(g.key,x.target.value),style:{padding:"8px 10px",borderRadius:6,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:13,outline:"none"},children:g.options?.map(x=>a.jsx("option",{value:x.value,children:x.label},x.value))}):g.type==="boolean"?a.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,cursor:"pointer",fontSize:13,color:"var(--text-secondary, #b0bec5)"},children:[a.jsx("input",{type:"checkbox",checked:!!b,onChange:x=>f(g.key,x.target.checked),style:{width:16,height:16}}),a.jsx("span",{children:"开启启用"})]}):a.jsx("input",{type:g.type==="number"?"number":"text",value:b??"",placeholder:g.placeholder,onChange:x=>f(g.key,g.type==="number"?Number(x.target.value):x.target.value),style:{padding:"8px 10px",borderRadius:6,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-primary, #f8fafc)",fontSize:13,outline:"none"}}),g.help&&a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)"},children:g.help})]},g.key)})]}),s===3&&a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-primary, rgba(255,255,255,0.1))",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:600,color:"var(--text-primary, #f8fafc)",fontSize:13},children:"零风险浏览器沙盒试跑"}),a.jsx("div",{style:{fontSize:11,color:"var(--text-muted, #94a3b8)",marginTop:2},children:"使用内置的保真云主机 Mock 数据,无需真实生产权限即可预览完整数据流转"})]}),a.jsx("button",{onClick:m,disabled:u,style:{padding:"6px 14px",borderRadius:6,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontWeight:600,fontSize:12,cursor:u?"not-allowed":"pointer"},children:u?"⏳ 模拟试跑中...":"▶ 立即试跑验证"})]}),p&&a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"rgba(16, 185, 129, 0.1)",border:"1px solid rgba(16, 185, 129, 0.3)",color:"#34d399",fontSize:12,lineHeight:1.5},children:["🎉 ",a.jsx("strong",{children:"试跑通过"}),": ",p]}),a.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"rgba(255,255,255,0.03)",border:"1px solid var(--border-primary, rgba(255,255,255,0.08))"},children:[a.jsx("div",{style:{fontSize:12,fontWeight:600,color:"var(--text-muted, #94a3b8)",marginBottom:8},children:"已配置的业务变量参数清单:"}),a.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:e.variables.map(g=>a.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12,padding:"4px 0",borderBottom:"1px dashed rgba(255,255,255,0.06)"},children:[a.jsxs("span",{style:{color:"var(--text-secondary, #b0bec5)"},children:[g.label,":"]}),a.jsx("span",{style:{color:"var(--color-accent, #3b82f6)",fontWeight:600},children:String(l[g.key]??g.defaultValue)})]},g.key))})]})]})]}),a.jsxs("div",{style:{padding:"12px 20px",borderTop:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"var(--bg-primary, #0f172a)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[s>1?a.jsx("button",{onClick:()=>i(g=>g-1),style:{padding:"6px 14px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary, rgba(255,255,255,0.2))",color:"var(--text-secondary, #b0bec5)",fontSize:12,cursor:"pointer"},children:"← 上一步"}):a.jsx("div",{}),a.jsx("div",{style:{display:"flex",gap:10},children:s<3?a.jsx("button",{onClick:()=>i(g=>g+1),style:{padding:"6px 16px",borderRadius:6,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontSize:12,fontWeight:600,cursor:"pointer"},children:"下一步 →"}):a.jsxs("button",{onClick:y,style:{padding:"6px 18px",borderRadius:6,background:"var(--color-success, #10b981)",color:"#fff",border:"none",fontSize:12,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[a.jsx("span",{children:"⚡"}),a.jsx("span",{children:"注入参数并进入流程编辑器"})]})})]})]})}),document.body)},jy=({isOpen:e,onClose:t,onSelectTemplate:r,templateStore:n=Wl})=>{const{theme:o,themeColor:s}=ie(we(g=>({theme:g.theme,themeColor:g.themeColor}))),[i,l]=I.useState("all"),[c,u]=I.useState(""),[d,p]=I.useState(null),[h,f]=I.useState(null),m=I.useMemo(()=>n.search(c,i),[n,c,i]);if(!e||typeof document>"u")return null;const y=g=>{try{const b=g.mockDataset.scenarios[0],x=zt(g.definition,{workflowInput:b?.workflowInput||{},taskMocks:b?.taskOutputs||{}});f(`《${g.title}》在本地沙盒试跑通过!共执行 ${x.tasks.length} 个任务节点,状态: ${x.status}。点击「使用模板」即可完成填空并上屏编辑。`)}catch(b){f(`试跑出错: ${b.message}`)}};return Qe.createPortal(a.jsxs("div",{"data-mode":o,"data-brand":s,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"rgba(0, 0, 0, 0.72)",backdropFilter:"blur(5px)",zIndex:1250,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit"},onClick:t,children:[a.jsxs("div",{onClick:g=>g.stopPropagation(),style:{width:980,maxWidth:"92vw",height:"84vh",background:"var(--bg-secondary, #1e293b)",border:"1px solid var(--border-secondary, rgba(255, 255, 255, 0.2))",borderRadius:16,boxShadow:"0 28px 72px rgba(0, 0, 0, 0.65)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[a.jsxs("div",{style:{padding:"16px 24px",borderBottom:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary, #0f172a)"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[a.jsx("span",{style:{fontSize:24},children:"📁"}),a.jsxs("div",{children:[a.jsx("div",{style:{fontWeight:700,fontSize:16,color:"var(--text-primary, #f8fafc)"},children:"场景化工作流模板中心"}),a.jsx("div",{style:{fontSize:12,color:"var(--text-muted, #94a3b8)"},children:"源于真实云平台高价值运维实战萃取 · 拒绝空白画布 · 开箱即用"})]})]}),a.jsx("button",{onClick:t,style:{background:"none",border:"none",color:"var(--text-muted, #94a3b8)",cursor:"pointer",fontSize:18,padding:"4px"},children:"✕"})]}),a.jsxs("div",{style:{padding:"10px 24px",borderBottom:"1px solid var(--border-primary, rgba(255, 255, 255, 0.08))",display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,background:"rgba(0, 0, 0, 0.15)"},children:[a.jsx("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[{id:"all",label:"全部场景 (8)"},{id:"compute",label:"🖥️ 交付与计算"},{id:"security",label:"💾 安全与容灾"},{id:"ops",label:"⚡ 运维与自愈"},{id:"cost",label:"🌙 节能与降本"}].map(g=>a.jsx("button",{onClick:()=>l(g.id),style:{padding:"5px 12px",borderRadius:6,background:i===g.id?"var(--color-accent, #3b82f6)":"transparent",color:i===g.id?"#fff":"var(--text-secondary, #b0bec5)",border:"none",fontSize:12,cursor:"pointer",fontWeight:i===g.id?600:400,transition:"all 0.15s ease"},children:g.label},g.id))}),a.jsx("input",{type:"text",placeholder:"搜索模板名称、痛点或场景...",value:c,onChange:g=>u(g.target.value),style:{width:220,padding:"6px 12px",borderRadius:6,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-secondary, rgba(255, 255, 255, 0.2))",color:"var(--text-primary, #f8fafc)",fontSize:12,outline:"none"}})]}),h&&a.jsxs("div",{style:{margin:"12px 24px 0 24px",padding:"10px 14px",borderRadius:8,background:"rgba(16, 185, 129, 0.12)",border:"1px solid rgba(16, 185, 129, 0.35)",color:"#34d399",fontSize:12,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{children:["✨ ",h]}),a.jsx("button",{onClick:()=>f(null),style:{background:"none",border:"none",color:"#34d399",cursor:"pointer",fontSize:12},children:"关闭"})]}),a.jsx("div",{style:{flex:1,overflowY:"auto",padding:"20px 24px",display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:16},children:m.map(g=>a.jsxs("div",{style:{borderRadius:12,background:"var(--bg-primary, #0f172a)",border:"1px solid var(--border-primary, rgba(255, 255, 255, 0.12))",padding:"16px 18px",display:"flex",flexDirection:"column",justifyContent:"space-between",gap:12,transition:"all 0.2s ease"},onMouseEnter:b=>{b.currentTarget.style.borderColor="var(--color-accent, #3b82f6)",b.currentTarget.style.transform="translateY(-2px)",b.currentTarget.style.boxShadow="0 8px 24px rgba(0, 0, 0, 0.3)"},onMouseLeave:b=>{b.currentTarget.style.borderColor="rgba(255, 255, 255, 0.12)",b.currentTarget.style.transform="translateY(0)",b.currentTarget.style.boxShadow="none"},children:[a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[a.jsx("span",{style:{fontSize:26},children:g.icon}),a.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary, #f8fafc)"},children:g.title})]}),a.jsx("span",{style:{fontSize:10,padding:"2px 6px",borderRadius:4,background:"rgba(255, 255, 255, 0.08)",color:"var(--text-muted, #94a3b8)",fontWeight:500},children:g.difficulty==="starter"?"入门":g.difficulty==="intermediate"?"进阶":"专业"})]}),a.jsx("div",{style:{fontSize:12,color:"var(--text-secondary, #b0bec5)",lineHeight:1.5},children:g.valueProposition})]}),a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[a.jsxs("span",{style:{fontSize:11,padding:"2px 7px",borderRadius:4,background:"rgba(16, 185, 129, 0.15)",color:"#34d399",fontWeight:600},children:["⚡ 单次约省 ",g.roi.minutesSavedPerRun," 分钟"]}),a.jsxs("span",{style:{fontSize:11,padding:"2px 7px",borderRadius:4,background:"rgba(59, 130, 246, 0.15)",color:"#60a5fa"},children:["🔥 已使用 ",g.roi.popularityCount??1e3," 次"]})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:4},children:[a.jsxs("button",{onClick:()=>y(g),style:{flex:1,padding:"6px 10px",borderRadius:6,background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--border-secondary, rgba(255, 255, 255, 0.15))",color:"var(--text-secondary, #b0bec5)",fontSize:12,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4},children:[a.jsx("span",{children:"▶"}),a.jsx("span",{children:"试跑演示"})]}),a.jsxs("button",{onClick:()=>p(g),style:{flex:1.2,padding:"6px 12px",borderRadius:6,background:"var(--color-accent, #3b82f6)",color:"#fff",border:"none",fontSize:12,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4},children:[a.jsx("span",{children:"⚡"}),a.jsx("span",{children:"使用此模板"})]})]})]})]},g.id))})]}),d&&a.jsx(Ty,{template:d,onClose:()=>p(null),onApply:g=>{p(null),r(g),t()}})]}),document.body)},Iy=I.forwardRef(({workflowDef:e,readOnly:t=!1,theme:r="dark",themeColor:n="blue",layoutDirection:o="LR",searchQuery:s="",workflowExecution:i,onRequestImport:l,executionActions:c,aiConfig:u,viewMode:d="developer",uiMode:p="pro",actions:h,libraryProvider:f,currentWorkflowLevel:m,onSave:y,onWorkflowChange:g,height:b="100%",onTriggerExecution:x,onPollExecution:v,executionPollInterval:k=3e3},S)=>{const[j,w]=I.useState("card"),[N,L]=I.useState(!1),[_]=I.useState(()=>new Bg);ty(_,f);const T=Ar(_),D=I.useMemo(()=>{const se=f?Gg(_):[];if((!h||h.length===0)&&se.length===0)return Pe;const ve=new Fl(Pe.getAllActions());h&&ve.registerAll(h);for(const qe of se)ve.unregister(qe.id),ve.register(qe);return ve},[h,f,_,T.revision]),{setWorkflow:R,setWorkflowDefOnly:A,refreshGraph:E,graphStale:P,setTheme:z,setThemeColor:J,setLayoutDirection:B,setNodesLocked:$,selectedTask:C,setSelectedTask:G,edgeType:Q,importExecutionJSON:M,setMode:F,setViewMode:H,isDetailPanelOpen:U,setIsDetailPanelOpen:ee,selectTaskAction:ce,workflowDef:de,isSimRunning:Te,startSimulation:Ce,stopSimulation:W,mode:xe,setShowRunPanel:re,showAnalysisPanel:me,setShowAnalysisPanel:ae,executionData:je,workflowInstance:pe}=ie(we(se=>({setWorkflow:se.setWorkflow,setWorkflowDefOnly:se.setWorkflowDefOnly,refreshGraph:se.refreshGraph,graphStale:se.graphStale,setTheme:se.setTheme,setThemeColor:se.setThemeColor,setLayoutDirection:se.setLayoutDirection,setNodesLocked:se.setNodesLocked,selectedTask:se.selectedTask,setSelectedTask:se.setSelectedTask,edgeType:se.edgeType,importExecutionJSON:se.importExecutionJSON,setMode:se.setMode,setViewMode:se.setViewMode,isDetailPanelOpen:se.isDetailPanelOpen,setIsDetailPanelOpen:se.setIsDetailPanelOpen,selectTaskAction:se.selectTaskAction,workflowDef:se.workflowDef,isSimRunning:se.isSimRunning,startSimulation:se.startSimulation,stopSimulation:se.stopSimulation,mode:se.mode,setShowRunPanel:se.setShowRunPanel,showAnalysisPanel:se.showAnalysisPanel,setShowAnalysisPanel:se.setShowAnalysisPanel,executionData:se.executionData,workflowInstance:se.workflowInstance}))),ge=I.useCallback(()=>{if(!de)return;const se=new Blob([JSON.stringify(de,null,2)],{type:"application/json"}),ve=URL.createObjectURL(se),qe=document.createElement("a");qe.href=ve,qe.download=`${de.name||"workflow"}.json`,qe.click(),URL.revokeObjectURL(ve)},[de]),We=I.useCallback(()=>{de&&navigator.clipboard.writeText(JSON.stringify(de,null,2))},[de]);I.useEffect(()=>{z(r),J(n),B(o),$(t||!!i)},[r,n,o,t,i,z,J,B,$]),I.useEffect(()=>{H(i?"developer":d)},[d,i,H]),I.useEffect(()=>{e&&(R(e,o),ie.temporal.getState().clear())},[e,R,o]),I.useEffect(()=>{i?M(i):F(t?"view":"edit")},[i,M,F,t]),I.useImperativeHandle(S,()=>({getWorkflowDef:()=>ie.getState().workflowDef,getValidationResults:()=>ie.getState().validationResults,save:()=>{const se=ie.getState().workflowDef;se&&y&&y(se)},createBlankWorkflow:se=>{ie.getState().createBlankWorkflow(se),ie.temporal.getState().clear()}}),[y]),I.useEffect(()=>{if(!g)return;let se=!0,ve=ie.getState().workflowDef;return ie.subscribe(V=>{const X=V.workflowDef;if(X!==ve){if(ve=X,se){se=!1;return}X&&g(X)}})},[g]);const _e=p==="business"&&j==="card";I.useEffect(()=>{!_e&&P&&E()},[_e,P,E]);const be=se=>{xe!=="run"&&!i?ce(se,!0):G(se)};return a.jsxs("div",{className:`workflow-ide ${r==="light"?"light-theme":""}`,"data-mode":r,"data-brand":n,style:{width:"100%",height:b,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"},children:[a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-primary)",flexShrink:0,flexWrap:"wrap"},children:[p==="business"&&xe!=="run"&&a.jsxs("div",{style:{display:"inline-flex",background:"rgba(255, 255, 255, 0.06)",borderRadius:6,padding:2,border:"1px solid var(--border-secondary)"},children:[a.jsx("button",{onClick:()=>w("card"),style:{height:24,padding:"0 8px",borderRadius:4,border:"none",background:j==="card"?"var(--color-accent)":"transparent",color:j==="card"?"#fff":"var(--text-secondary)",cursor:"pointer",fontSize:11,fontWeight:500,display:"inline-flex",alignItems:"center",gap:4},children:"📋 业务卡片流"}),a.jsx("button",{onClick:()=>w("canvas"),style:{height:24,padding:"0 8px",borderRadius:4,border:"none",background:j==="canvas"?"var(--color-accent)":"transparent",color:j==="canvas"?"#fff":"var(--text-secondary)",cursor:"pointer",fontSize:11,fontWeight:500,display:"inline-flex",alignItems:"center",gap:4},children:"🕸️ 全景画布"})]}),a.jsx("div",{style:{flex:1}}),xe!=="run"&&a.jsxs("button",{onClick:()=>L(!0),style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--color-brand-blue) 15%, transparent)",color:"var(--color-brand-blue)",border:"1px solid color-mix(in srgb, var(--color-brand-blue) 40%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:600,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"打开场景化工作流模板中心",children:[a.jsx("span",{children:"📁"}),a.jsx("span",{children:"模板中心"})]}),xe==="edit"&&de&&a.jsxs("button",{onClick:()=>re(!0),style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--color-accent) 15%, transparent)",color:"var(--color-accent)",border:"1px solid color-mix(in srgb, var(--color-accent) 40%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:600,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"填写工作流入参并触发真实执行",children:[a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("path",{d:"M4 3l9 5-9 5z"})}),"执行验证"]}),xe==="run"&&je&&a.jsxs("button",{onClick:()=>ae(!me),style:{height:28,padding:"0 10px",background:me?"color-mix(in srgb, var(--color-accent) 20%, transparent)":"transparent",color:me?"var(--color-accent)":"var(--text-secondary)",border:`1px solid ${me?"color-mix(in srgb, var(--color-accent) 40%, transparent)":"var(--border-strong)"}`,borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"查看执行概览与异常分析",children:[a.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[a.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),a.jsx("path",{d:"M5 8h6M5 5h3M5 11h4"})]}),"分析"]}),xe!=="run"&&de&&(Te?a.jsxs("button",{onClick:W,style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--status-failed) 15%, transparent)",color:"var(--status-failed)",border:"1px solid color-mix(in srgb, var(--status-failed) 30%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"停止模拟",children:[a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("rect",{x:"4",y:"4",width:"8",height:"8",rx:"1"})}),"停止"]}):a.jsxs("button",{onClick:Ce,style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--status-completed) 15%, transparent)",color:"var(--status-completed)",border:"1px solid color-mix(in srgb, var(--status-completed) 30%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"模拟执行工作流",children:[a.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:a.jsx("path",{d:"M4 3l9 5-9 5z"})}),"模拟运行"]})),de&&a.jsxs(a.Fragment,{children:[a.jsxs("button",{onClick:ge,style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"导出工作流 JSON 文件",children:[a.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:a.jsx("path",{d:"M3 10v2.5a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5V10M5 7l3 3 3-3M8 2v8",strokeLinecap:"round",strokeLinejoin:"round"})}),"导出 JSON"]}),a.jsxs("button",{onClick:We,style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"复制 Conductor DSL 到剪贴板",children:[a.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[a.jsx("rect",{x:"4",y:"4",width:"9",height:"10",rx:"1"}),a.jsx("path",{d:"M2 10V3a1 1 0 0 1 1-1h7",strokeLinecap:"round"})]}),"复制 DSL"]})]})]}),p==="business"&&j==="card"?a.jsx("div",{style:{flex:1,position:"relative",overflow:"hidden"},children:a.jsx(wy,{workflowDef:de,workflowExecution:pe??void 0,registry:D,libraryCatalog:f?_:void 0,currentWorkflowLevel:m,readOnly:t||xe==="run",onChange:se=>{A(se)}})}):a.jsx("div",{className:"workflow-viewer",style:{flex:1,position:"relative",overflow:"hidden"},children:a.jsx(q.ReactFlowProvider,{children:a.jsx(Jk,{onNodeClick:be,edgeType:Q,theme:r,nodesLocked:t||xe==="run"||!!i,searchQuery:s,onSave:y,onRequestImport:l,executionActions:c})})}),a.jsx(e0,{task:C,isOpen:U&&xe!=="run",onClose:()=>ee(!1),theme:r,aiConfig:u}),(i||xe==="run")&&a.jsx(n0,{executionActions:c}),a.jsx(u0,{aiConfig:u}),a.jsx(f0,{onTriggerExecution:x,onPollExecution:v,executionPollInterval:k}),xe==="run"&&a.jsx(b0,{}),a.jsx(jy,{isOpen:N,onClose:()=>L(!1),onSelectTemplate:se=>{R(se,o)}})]})});Iy.displayName="WorkflowIDE";const $0={workflows:"/metadata/workflow",workflow:"/metadata/workflow",taskDefs:"/metadata/taskdefs"};function oc(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}function q0(e){const t={...$0,...e.paths??{}},r=(i,l)=>{const c=e.fetch??(typeof fetch=="function"?fetch:void 0);return c?c(i,l):Promise.reject(new Error("当前环境没有 fetch,请通过 options.fetch 传入"))};async function n(i,l){const c=e.headers?await e.headers():{};return r(i,{method:"GET",headers:{Accept:"application/json",...c},signal:l})}function o(i){const l=e.resolveExtension?.(i);return{def:i,...l?{extension:l}:{},...l?.deprecated?{deprecated:!0}:{}}}function s(i,l){const c=encodeURIComponent(i),u=t.workflow.includes("{name}")?t.workflow.replace("{name}",c):`${t.workflow.replace(/\/+$/,"")}/${c}`,d=oc(e.baseUrl,u);return l!==void 0?`${d}?version=${encodeURIComponent(String(l))}`:d}return{async list(i){const l=oc(e.baseUrl,t.workflows),c=await n(l,i);if(!c.ok)throw new Error(`获取流程库列表失败:HTTP ${c.status}(${l})`);const u=await c.json();if(!Array.isArray(u))throw new Error(`流程库列表返回格式不正确(期望数组):${l}`);const d=new Map;for(const h of u){if(!h||typeof h.name!="string"||e.filter&&!e.filter(h))continue;const f=d.get(h.name);(!f||Ut(h.version).version>=Ut(f.version).version)&&d.set(h.name,h)}const p={workflows:Array.from(d.values()).map(o)};if(e.includeTaskDefs){const h=oc(e.baseUrl,t.taskDefs),f=await n(h,i);if(!f.ok)throw new Error(`获取任务定义失败:HTTP ${f.status}(${h})`);const m=await f.json();if(!Array.isArray(m))throw new Error(`任务定义返回格式不正确(期望数组):${h}`);p.tasks=m.filter(y=>y&&typeof y.name=="string").map(y=>{const g=e.resolveTaskExtension?.(y);return{def:y,...g?{extension:g}:{}}})}return p},async get(i,l,c){const u=s(i,l),d=await n(u,c);if(d.status===404)return null;if(!d.ok)throw new Error(`获取流程库工作流「${i}」失败:HTTP ${d.status}(${u})`);const p=await d.json();return!p||typeof p.name!="string"||e.filter&&!e.filter(p)?null:o(p)}}}Z.ActionForm=Ql,Z.ActionRegistry=Fl,Z.BUILTIN_COMMON_ACTIONS=zg,Z.BUILTIN_ECS_ACTIONS=qg,Z.BUILTIN_WORKFLOW_TEMPLATES=Dg,Z.DataPillInput=Zl,Z.DecisionBranchCard=nc,Z.ForkJoinCard=ec,Z.FriendlyErrorCard=Sy,Z.LibraryCatalog=Bg,Z.LoopDoWhileCard=tc,Z.OTHER_DOMAIN=Or,Z.RunStoryTimeline=_y,Z.StepFlowEditor=wy,Z.TemplateExtractor=Lg,Z.TemplateGallery=jy,Z.TemplateSetupWizard=Ty,Z.TemplateStore=Ag,Z.WORKFLOW_NAME_TYPES=Nr,Z.WorkflowIDE=Iy,Z.analyzeTasksForPruning=Eg,Z.applyTaskPruning=Pg,Z.applyTemplateVariables=ac,Z.applyUpgradeToValues=my,Z.buildActionFromTaskDef=Yl,Z.buildActionFromWorkflowDef=Gl,Z.buildActionsFromLibrary=w0,Z.buildActionsFromTaskDefs=T0,Z.buildDataFlowGraph=Hm,Z.buildDefaultWorkflowMockInput=qt,Z.buildUpgradeConfirmMessage=hy,Z.canCallLevel=Vg,Z.collectLibraryDomains=Qg,Z.collectReferencedOutputKeys=py,Z.compileStepModelToWorkflowDef=ny,Z.compileStepToTaskDef=ry,Z.createConductorLibraryProvider=q0,Z.createStepFromAction=Gt,Z.decompileTaskDefToStep=ay,Z.decompileWorkflowDefToStepModel=oy,Z.defaultActionRegistry=Pe,Z.defaultTemplateStore=Wl,Z.describeUnavailable=yy,Z.diffWorkflowVersions=dy,Z.entriesToLibraryItems=Xg,Z.entryFromRecord=Rr,Z.executeLocalSandboxDryRun=zt,Z.extractTemplateFromInstance=Og,Z.filterPickableActions=Zg,Z.generateDefaultTaskOutputPreview=kr,Z.getCompletionItems=Bm,Z.getUpstreamAncestors=Nl,Z.inferTaskOutputSchema=Fm,Z.isDiffEmpty=uy,Z.libraryDomainOf=Dr,Z.normalizeVersion=Ut,Z.parseWorkflowInputParams=at,Z.parseWorkflowName=Fg,Z.refactorTaskReferenceName=Um,Z.resolveLibraryBadgeState=gy,Z.scanObjectForSensitiveFindings=Ir,Z.scanWorkflowDef=Ng,Z.schemaToTypeStrings=Jt,Z.summarizeDiff=fy,Z.toActionExtension=Xl,Z.toActions=Gg,Z.toLibraryItems=C0,Z.toTaskSchemas=I0,Z.translateTechnicalError=ky,Z.useLibraryCatalogLoader=ty,Z.useLibraryCatalogSnapshot=Ar,Z.validateWorkflowName=v0,Object.defineProperty(Z,Symbol.toStringTag,{value:"Module"})}));
273
+ Result: OK`,status:"SUCCESS"})},{id:"ecs.get_monitor_metrics",name:"获取运行监控指标",category:"monitor",icon:"chart",description:"采集云主机的实时 CPU 利用率、内存消耗与磁盘使用率",connector:"cloud_host",riskLevel:"safe",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"periodSeconds",label:"聚合统计周期",type:"select",defaultValue:60,options:[{label:"最近 1 分钟平均",value:60},{label:"最近 5 分钟平均",value:300},{label:"最近 15 分钟平均",value:900}]}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"cpuUsagePercent",label:"CPU使用率(%)",type:"number",example:45.2},{key:"memoryUsagePercent",label:"内存使用率(%)",type:"number",example:62.8},{key:"diskUsagePercent",label:"磁盘使用率(%)",type:"number",example:38.5},{key:"isOverloaded",label:"是否高负载告警",type:"boolean",example:!1}],compile:(e,t)=>({name:"ecs_get_monitor_metrics",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`采集监控指标: ${e.instanceId||t.taskReferenceName}`,inputParameters:{_actionId:"ecs.get_monitor_metrics",actionName:"获取运行监控指标",instanceId:e.instanceId,periodSeconds:Jt(e.periodSeconds,60),http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}/metrics?period=${Jt(e.periodSeconds,60)}`,method:"GET"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.get_monitor_metrics"?{instanceId:e.inputParameters.instanceId??"",periodSeconds:e.inputParameters.periodSeconds??60}:null,mockOutput:e=>{const t=32.4+Math.round(Math.random()*40*10)/10;return{instanceId:e.instanceId||"i-bp18a9z3j42m09a",cpuUsagePercent:t,memoryUsagePercent:58.6,diskUsagePercent:42.1,isOverloaded:t>80,collectedAt:new Date().toISOString()}}},{id:"ecs.release_instance",name:"释放下线云主机",category:"compute",icon:"trash",description:"彻底销毁并下线按量付费云主机,不可恢复",connector:"cloud_host",riskLevel:"sensitive",fields:[{key:"instanceId",label:"云主机实例 ID",type:"text",required:!0,acceptsPills:!0},{key:"forceRelease",label:"是否强制释放 (即刻关机并清理)",type:"boolean",defaultValue:!1}],outputs:[{key:"instanceId",label:"实例ID",type:"string",example:"i-bp18a9z3j42m09a"},{key:"status",label:"最终状态",type:"string",example:"RELEASED"},{key:"releasedAt",label:"释放时间",type:"string",example:"2026-10-20T14:30:00Z"}],compile:(e,t)=>({name:"ecs_release_instance",taskReferenceName:t.taskReferenceName,type:"HTTP",description:`释放云主机: ${e.instanceId||""}`,inputParameters:{_actionId:"ecs.release_instance",actionName:"释放下线云主机",instanceId:e.instanceId,forceRelease:!!e.forceRelease,http_request:{uri:`https://ecs.internal.cloud/api/v2/instances/${e.instanceId||""}${e.forceRelease?"?force=true":""}`,method:"DELETE"}}}),decompile:e=>e.inputParameters?._actionId==="ecs.release_instance"?{instanceId:e.inputParameters.instanceId??"",forceRelease:!!e.inputParameters.forceRelease}:null,mockOutput:e=>({instanceId:e.instanceId||"i-bp18a9z3j42m09a",status:"RELEASED",releasedAt:new Date().toISOString()})}],A1=[{id:"notify.send_message",name:"发送运维通知",category:"notify",icon:"megaphone",description:"向指定运维协同群(钉钉/企微/飞书)或负责人发送通知卡片",riskLevel:"safe",fields:[{key:"channel",label:"通知渠道",type:"select",required:!0,defaultValue:"webhook_dingtalk",options:[{label:"钉钉运维机器人 (DingTalk)",value:"webhook_dingtalk"},{label:"企业微信机器人 (WeCom)",value:"webhook_wecom"},{label:"飞书群机器人 (Lark/Feishu)",value:"webhook_feishu"},{label:"运维邮件 (Email)",value:"email"}]},{key:"title",label:"通知标题",type:"text",placeholder:"例如: 【生产告警】云主机 CPU 负载过高",defaultValue:"【云平台通知】运维自动化工作流执行汇报",required:!0,acceptsPills:!0},{key:"content",label:"消息正文内容",type:"textarea",placeholder:"支持输入文字,或键入 @ 插入上游实例 ID / IP 等数据胶囊",defaultValue:"主机实例已成功处理完成,请相关人员知悉。",required:!0,acceptsPills:!0}],outputs:[{key:"messageId",label:"消息追踪ID",type:"string",example:"msg_994200"},{key:"sentStatus",label:"发送状态",type:"string",example:"DELIVERED"},{key:"sentAt",label:"送达时间",type:"string",example:"2026-10-20T14:35:00Z"}],compile:(e,t)=>({name:"send_operation_notification",taskReferenceName:t.taskReferenceName,type:"EVENT",description:`发送通知: ${e.title||t.taskReferenceName}`,inputParameters:{_actionId:"notify.send_message",actionName:"发送运维通知",channel:e.channel??"webhook_dingtalk",title:e.title,content:e.content}}),decompile:e=>e.inputParameters?._actionId==="notify.send_message"?{channel:e.inputParameters.channel??"webhook_dingtalk",title:e.inputParameters.title??"",content:e.inputParameters.content??""}:null,mockOutput:e=>({messageId:`msg-${Date.now().toString(36)}`,channel:e.channel,sentStatus:"DELIVERED",sentAt:new Date().toISOString()})},{id:"human.approval",name:"人工确认 / 审批",category:"human",icon:"user",description:"在执行高危变动或财务扣费前,暂停流程并等待指定责任人点击确认",riskLevel:"safe",fields:[{key:"assigneeRole",label:"审批责任角色",type:"select",required:!0,defaultValue:"devops_lead",options:[{label:"运维负责人 (DevOps Lead)",value:"devops_lead"},{label:"架构师 (Architect)",value:"architect"},{label:"安全管理员 (SecOps)",value:"secops"},{label:"项目经理 (PM)",value:"pm"}]},{key:"promptMessage",label:"审批确认说明",type:"textarea",placeholder:"请输入需要审批人重点核对的信息(支持 @ 插入参数)",defaultValue:"请核实即将执行的高危变更操作,确认无误后点击批准。",required:!0,acceptsPills:!0},{key:"timeoutMinutes",label:"无人审批时",type:"select",defaultValue:60,help:'超时后流程以"已超时"结束,不会继续执行后续步骤',options:[{label:"30 分钟后超时结束流程",value:30},{label:"60 分钟后超时结束流程",value:60},{label:"24 小时后超时结束流程",value:1440}]}],outputs:[{key:"approved",label:"审批结果",type:"boolean",example:!0},{key:"reviewer",label:"审批人",type:"string",example:"zhangsan@cloud.com"},{key:"comment",label:"审批意见",type:"string",example:"已核实变更方案,同意执行"},{key:"decisionTime",label:"审批时间",type:"string",example:"2026-10-20T14:40:00Z"}],compile:(e,t)=>{const r=Jt(e.timeoutMinutes,60);return{name:"human_operation_approval",taskReferenceName:t.taskReferenceName,type:"HUMAN",description:`人工审批: ${e.promptMessage||t.taskReferenceName}`,...typeof r=="number"&&r>0?{timeoutSeconds:r*60,timeoutPolicy:"TIME_OUT_WF"}:{},inputParameters:{_actionId:"human.approval",actionName:"人工确认 / 审批",assigneeRole:e.assigneeRole??"devops_lead",promptMessage:e.promptMessage,timeoutMinutes:r}}},decompile:e=>e.inputParameters?._actionId==="human.approval"?{assigneeRole:e.inputParameters.assigneeRole??"devops_lead",promptMessage:e.inputParameters.promptMessage??"",timeoutMinutes:e.inputParameters.timeoutMinutes??60}:null,mockOutput:e=>({approved:!0,reviewer:"devops_lead@internal.cloud",comment:"沙盒模拟快速通过",decisionTime:new Date().toISOString()})},{id:"control.wait",name:"等待缓冲",category:"logic",icon:"hourglass",description:"在两个步骤之间暂停等待一段时间(等待系统自检、镜像就绪等)",riskLevel:"safe",fields:[{key:"duration",label:"等待时长",type:"select",required:!0,defaultValue:"10s",options:[{label:"等待 5 秒 (5s)",value:"5s"},{label:"等待 10 秒 (10s)",value:"10s"},{label:"等待 30 秒 (30s)",value:"30s"},{label:"等待 1 分钟 (1m)",value:"1m"},{label:"等待 5 分钟 (5m)",value:"5m"}]}],outputs:[{key:"waited",label:"是否已就绪",type:"boolean",example:!0},{key:"duration",label:"实际等待时长",type:"string",example:"10s"}],compile:(e,t)=>({name:"wait_step",taskReferenceName:t.taskReferenceName,type:"WAIT",description:`等待 ${e.duration||"10s"}`,inputParameters:{_actionId:"control.wait",actionName:"等待缓冲",duration:e.duration??"10s"}}),decompile:e=>{if(e.inputParameters?._actionId==="control.wait")return{duration:e.inputParameters.duration??"10s"};if(e.type==="WAIT"){const t=Object.keys(e.inputParameters||{}),r=e.inputParameters?.duration;if(t.length===1&&t[0]==="duration"&&typeof r=="string"&&r.trim()!=="")return{duration:r}}return null},mockOutput:e=>({waited:!0,duration:e.duration||"10s"})},{id:"control.decision",name:"条件分支",category:"logic",icon:"shuffle",description:"根据输入参数或上下文表达式,精准分流执行不同业务分支",riskLevel:"safe",fields:[{key:"caseParam",label:"分支判断参数",type:"text",required:!0,defaultValue:"status",placeholder:"例如 status 或 userType",acceptsPills:!0}],outputs:[{key:"selectedCase",label:"命中的分支名称",type:"string",example:"premium"}],compile:(e,t)=>({name:"decision_router",taskReferenceName:t.taskReferenceName,type:"DECISION",caseValueParam:e.caseParam||"status",decisionCases:{},defaultCase:[],inputParameters:{_actionId:"control.decision",actionName:"条件分支",[e.caseParam||"status"]:e[e.caseParam||"status"]??"${workflow.input.status}"}}),decompile:e=>e.type==="DECISION"||e.type==="SWITCH"?{caseParam:e.caseValueParam||"status"}:null,mockOutput:()=>({selectedCase:"SUCCESS"})},{id:"control.fork",name:"并行并发组",category:"logic",icon:"zap",description:"同时并发执行多条独立业务泳道,并在全部完成后汇聚向下流转",riskLevel:"safe",fields:[],outputs:[{key:"lanesCompleted",label:"已完成泳道数",type:"number",example:2}],compile:(e,t)=>({name:"fork_parallel",taskReferenceName:t.taskReferenceName,type:"FORK_JOIN",forkTasks:[],inputParameters:{_actionId:"control.fork",actionName:"并行并发组"}}),decompile:e=>e.type==="FORK_JOIN"||e.type==="FORK_JOIN_DYNAMIC"?{}:null,mockOutput:()=>({lanesCompleted:2})},{id:"control.loop",name:"循环迭代",category:"logic",icon:"repeat",description:"重复循环执行内部步骤,直到满足退出条件或达到最大轮次",riskLevel:"safe",fields:[{key:"loopCondition",label:"循环继续条件表达式",type:"text",required:!0,defaultValue:"if ($.loop_ref['iteration'] < 3) { true; } else { false; }",placeholder:"例如 if ($.loop_ref['iteration'] < 3) { true; } else { false; }",acceptsPills:!0}],outputs:[{key:"iterationCount",label:"实际迭代轮次",type:"number",example:3}],compile:(e,t)=>({name:"do_while_loop",taskReferenceName:t.taskReferenceName,type:"DO_WHILE",loopCondition:e.loopCondition||"false",loopOver:[],inputParameters:{_actionId:"control.loop",actionName:"循环迭代",loopCondition:e.loopCondition||"false"}}),decompile:e=>e.type==="DO_WHILE"?{loopCondition:e.loopCondition||""}:null,mockOutput:()=>({iterationCount:3})}];class Fs{actions=new Map;constructor(t=[]){this.registerAll(t)}register(t){this.actions.set(t.id,t)}registerAll(t){for(const r of t)this.register(r)}unregister(t){this.actions.delete(t)}getAction(t){return this.actions.get(t)}getAllActions(){return Array.from(this.actions.values())}getActionsByCategory(t){const r=this.getAllActions();return t?r.filter(n=>n.category===t):r}findActionForTask(t){const r=t.inputParameters?._actionId;if(r&&typeof r=="string"){const n=this.getAction(r);if(n&&n.decompile){const s=n.decompile(t);if(s)return{action:n,values:s}}}for(const n of this.actions.values())if(n.decompile){const s=n.decompile(t);if(s)return{action:n,values:s}}return null}}const Ze=new Fs([...P1,...A1]);function Rn(e){if(e==null||e==="")return{version:1,lossy:!1};if(typeof e=="number"){if(Number.isInteger(e))return{version:e,lossy:!1};const s=Math.floor(e);return{version:Number.isFinite(s)&&s>0?s:1,label:String(e),lossy:!0}}const t=String(e).trim();if(/^\d+$/.test(t))return{version:parseInt(t,10),label:t,lossy:!1};const r=t.match(/\d+/),n=r?parseInt(r[0],10):NaN;return{version:Number.isNaN(n)?1:n,label:t,lossy:!0}}const Bs=["std","proxy","tmp","custom"],$1=["L1","L2","L3"];function Hs(e){if(typeof e!="string")return null;const t=e.split("-");if(t.length<5)return null;const r=t[0],n=t[1];return!Bs.includes(r)||!$1.includes(n)?null:{type:r,level:n,domain:t[2],product:t[3],func:t.slice(4).join("-")}}function Gu(e,t){const r=[];if(typeof e!="string"||e.trim()==="")return["流程名称不能为空"];const n=e.split("-");return n.length<5&&r.push("流程名称需为「类型-层级-业务域-产品-功能」5 段,以 - 分隔"),Bs.includes(n[0])||r.push(`类型「${n[0]}」不合法,应为 ${Bs.join(" / ")} 之一`),n.length>1&&!$1.includes(n[1])&&r.push(`层级「${n[1]}」不合法,应为 L1 / L2 / L3 之一`),n.length>=5&&(n[2]===""?r.push("业务域不能为空"):t&&!t.includes(n[2])&&r.push(`业务域「${n[2]}」不在允许的列表中(${t.join("、")})`),n[3]===""&&r.push("产品不能为空"),n.slice(4).join("-")===""&&r.push("功能不能为空")),r}function Js(e,t,r){const n=Rn(e.def.version),s=e.versionLabel??n.label;n.lossy&&r&&r(e.def.name,n.label??String(e.def.version));const a=Hs(e.def.name),i=e.extension?.domain||a?.domain||void 0;return{name:e.def.name,version:n.version,versionLabel:s,description:e.def.description,level:e.extension?.level??a?.level,...i?{domain:i}:{},tags:e.extension?.tags??[],deprecated:e.deprecated??e.extension?.deprecated??!1,record:e,source:t}}function g2(e){const t=Rn(e.version);return{record:{def:{name:e.workflowName,description:e.description,version:t.version,tasks:[]},extension:{level:e.workflowLevel,tags:e.tags??[],...e.domain?{domain:e.domain}:{}},versionLabel:t.label},lossyLabel:t.lossy?t.label:void 0}}function Yu(e){const t=new Map;for(const r of e){const n=t.get(r.name);(!n||r.version>=n.version)&&t.set(r.name,r)}return Array.from(t.values())}class L1{provider;staticItems=[];staticSchemas=[];providerEntries=[];providerTasks=[];merged=new Map;versionCache=new Map;warned=new Set;listeners=new Set;generation=0;controller=null;snapshot={status:"idle",revision:0};constructor(t,r={}){this.provider=t,this.staticItems=r.staticItems??[],this.staticSchemas=r.staticTaskSchemas??[],this.rebuild()}setProvider(t){t!==this.provider&&(this.provider=t,this.generation++,this.controller?.abort(),this.controller=null,this.providerEntries=[],this.providerTasks=[],this.versionCache.clear(),this.rebuild(),this.setState({status:"idle",error:void 0}))}setStatic(t){t.staticItems!==void 0&&(this.staticItems=t.staticItems),t.staticTaskSchemas!==void 0&&(this.staticSchemas=t.staticTaskSchemas),this.rebuild(),this.setState({})}hasProvider(){return!!this.provider}hasServerSearch(){return typeof this.provider?.search=="function"}async load(t){const r=this.provider;if(!r)return;const n=++this.generation;this.controller?.abort();const s=new AbortController;this.controller=s;const a=()=>s.abort();t&&(t.aborted?s.abort():t.addEventListener("abort",a,{once:!0})),this.setState({status:"loading",error:void 0});try{const i=await r.list(s.signal);if(n!==this.generation)return;if(s.signal.aborted){this.setState({status:"idle"});return}this.providerEntries=Yu(i.workflows.map(l=>Js(l,"provider",this.warnLossy))),this.providerTasks=i.tasks??[],this.rebuild(),this.setState({status:"ready",error:void 0})}catch(i){if(n!==this.generation)return;if(s.signal.aborted){this.setState({status:"idle"});return}this.setState({status:"error",error:i instanceof Error?i:new Error(String(i))})}finally{t?.removeEventListener("abort",a),this.controller===s&&(this.controller=null)}}reload(){return this.load()}abort(){this.controller&&(this.generation++,this.controller.abort(),this.controller=null,this.snapshot.status==="loading"&&this.setState({status:"idle"}))}latest(t){return this.merged.get(t)}entries(){return Array.from(this.merged.values())}tasks(){return this.providerTasks}staticTaskSchemas(){return this.staticSchemas}async getVersion(t,r,n){const s=`${t}@${r}`,a=this.versionCache.get(s);if(a)return a;const i=this.merged.get(t);if(i?.source==="static"&&i.version===r)return i.record;const l=this.provider;if(!l)return null;const c=this.generation,d=await l.get(t,r,n);return d&&c===this.generation&&this.versionCache.set(s,d),d}async search(t,r,n){const s=this.provider;if(!s?.search)return null;const a=await s.search(t,r,n);return Yu(a.map(i=>Js(i,"provider",this.warnLossy)))}getSnapshot=()=>this.snapshot;subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});warnLossy=(t,r)=>{const n=`${t}@${r}`;this.warned.has(n)||(this.warned.add(n),console.warn(`[LibraryCatalog] 流程库「${t}」的版本号「${r}」不是整数,已按主版本号规范化。`))};rebuild(){const t=new Map;for(const n of this.providerEntries)t.set(n.name,n);const r=Yu(this.staticItems.map(n=>{const{record:s,lossyLabel:a}=g2(n);return a&&this.warnLossy(n.workflowName,a),Js(s,"static")}));for(const n of r)t.has(n.name)||t.set(n.name,n);this.merged=t}setState(t){this.snapshot={...this.snapshot,...t,revision:this.snapshot.revision+1};for(const r of Array.from(this.listeners))r()}}const x2=()=>{},D1={status:"idle",revision:0};function Us(e){return T.useSyncExternalStore(e?e.subscribe:()=>x2,e?e.getSnapshot:()=>D1,e?e.getSnapshot:()=>D1)}function M1(e,t){T.useEffect(()=>(e.setProvider(t),t&&e.load(),()=>{e.abort()}),[e,t])}const W1=["library","onboarding","telemetry"];function Xu(e={}){const t=[e.override,e.component,e.context],r={};for(const n of W1)for(const s of t){const a=s?.[n];if(a!=null){r[n]=a;break}}return r}function z1(e,t){return e&&W1.every(r=>e[r]===t[r])?e:t}const v2=Object.freeze({}),Zu=T.createContext(v2);function q1(e){const t=T.useRef(void 0),r=z1(t.current,e);return t.current=r,r}function b2({providers:e,children:t}){const r=q1(Xu({component:e}));return o.jsx(Zu.Provider,{value:r,children:t})}function k2(){return T.useContext(Zu)}function w2(e,t){const r=T.useContext(Zu);return q1(Xu({override:t,component:e,context:r}))}const S2=5e3,_2=20,j2={set:(e,t)=>setTimeout(e,t),clear:e=>clearTimeout(e)};function F1(e,t={}){if(!e)return{push(){},flush(){},dispose(){}};const r=t.flushIntervalMs??S2,n=Math.max(1,t.maxBatchSize??_2),s=t.timers??j2,a=t.document!==void 0?t.document:typeof document<"u"?document:null,i=t.window!==void 0?t.window:typeof window<"u"?window:null;let l=[],c=null,d=!1,u=!1;const p=x=>{u||(u=!0,console.warn("[reactflow-ui] 埋点 sink 调用失败,已忽略(后续同类错误不再提示):",x))},f=()=>{c!==null&&(s.clear(c),c=null)},m=()=>{if(f(),l.length===0)return;const x=l;l=[];try{const g=e.track(x);g&&typeof g.then=="function"&&g.then(void 0,p)}catch(g){p(g)}},h=()=>{a&&a.visibilityState==="hidden"&&m()},y=()=>m();try{a?.addEventListener("visibilitychange",h),i?.addEventListener("pagehide",y)}catch(x){p(x)}return{push(x){d||(l.push(x),l.length>=n?m():c===null&&(c=s.set(m,r)))},flush:m,dispose(){if(!d){m(),d=!0;try{a?.removeEventListener("visibilitychange",h),i?.removeEventListener("pagehide",y)}catch{}}}}}function T2(e){if(!e||typeof e!="object")return;const t={};let r=0;for(const n of Object.keys(e)){const s=e[n];(typeof s=="string"||typeof s=="boolean"||typeof s=="number"&&Number.isFinite(s))&&(t[n]=s,r++)}return r>0?t:void 0}function I2(e){const t=e.now??Date.now;return(r,n)=>{try{const s={name:r,at:t(),ide:e.ide},a=e.getWorkflowName();a&&(s.workflowName=a);const i=T2(n);i&&(s.props=i),e.push(s)}catch(s){console.warn("[reactflow-ui] 埋点失败,已忽略:",s)}}}function N2(){let e=!1;return{take(){return e?!1:(e=!0,!0)}}}function C2(e,t){const r=T.useRef(null);return T.useEffect(()=>{const n=F1(t);return r.current=n,()=>{n.dispose(),r.current===n&&(r.current=null)}},[t]),T.useMemo(()=>I2({ide:e,getWorkflowName:()=>re.getState().workflowDef?.name||void 0,push:n=>r.current?.push(n)}),[e])}function E2(e){const t=T.useRef(null);t.current===null&&(t.current=N2()),T.useEffect(()=>{t.current?.take()&&e("ide_opened")},[e])}function R2(e){T.useEffect(()=>{const t=wj(n=>e("sandbox_run",{result:n,entry:"pro"})),r=Sj(n=>e("step_added",{source:n}));return()=>{t(),r()}},[e])}const B1=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);function Ut(e){for(const t of Object.keys(e))e[t]===void 0&&delete e[t];return e}function Qu(e){const t=e.rawTaskDef?structuredClone(e.rawTaskDef):{};t.name=e.name||t.name||e.taskReferenceName,t.taskReferenceName=e.taskReferenceName,e.description!==void 0&&(t.description=e.description||void 0);const r=e.values||{};return Object.keys(r).length>0||e.rawTaskDef?.inputParameters!==void 0||!e.rawTaskDef?t.inputParameters={...r}:delete t.inputParameters,t}function O2(e,t,r){const n=Qu(e),s={};let a=[];for(const l of e.branches||[])l.caseKey==="__default__"?a=On(l.steps,t,r):s[l.caseKey]=On(l.steps,t,r);const i=e.caseExpression!==void 0;return n.type==="SWITCH"?i?(n.evaluatorType=n.evaluatorType&&n.evaluatorType!=="value-param"?n.evaluatorType:"javascript",n.expression=e.caseExpression):(n.evaluatorType="value-param",n.expression=e.caseParam??""):(n.type="DECISION",i?(n.caseExpression=e.caseExpression,delete n.caseValueParam):(n.caseValueParam=e.caseParam??"",delete n.caseExpression)),n.decisionCases=s,n.defaultCase=a,Ut(n)}function P2(e,t,r){const n=Qu(e);return n.type="FORK_JOIN",n.forkTasks=(e.forkLanes||[]).map(s=>On(s.steps,t,r)),Ut(n)}function A2(e,t,r){const n=Qu(e);return n.type="DO_WHILE",n.loopCondition=e.loopCondition??n.loopCondition??"false",n.loopOver=On(e.loopSteps||[],t,r),Ut(n)}function $2(e,t,r,n){const s=t.compile(e.values,{taskReferenceName:e.taskReferenceName,stepIndex:r,workflowName:n,libraryRef:e.libraryRef}),a=e.rawTaskDef?structuredClone(e.rawTaskDef):{},i=new Set(t.fields.map(f=>f.key)),l=a.inputParameters||{},c=s.inputParameters||{},d={...l};for(const[f,m]of Object.entries(c))d[f]=!i.has(f)&&B1(m)&&B1(l[f])?{...l[f],...m}:m;for(const f of i)f in l&&!(f in c)&&delete d[f];const u={...a,...s,name:a.name||s.name,taskReferenceName:e.taskReferenceName,inputParameters:d};(a.subWorkflowParam||s.subWorkflowParam)&&(u.subWorkflowParam={...a.subWorkflowParam||{},...s.subWorkflowParam||{}});const p=e.name&&e.name!==t.name?e.name:void 0;return u.description=p??a.description??s.description,Ut(u)}function ep(e,t,r,n=Ze){if(e.controlType==="decision")return O2(e,r,n);if(e.controlType==="fork")return P2(e,r,n);if(e.controlType==="loop")return A2(e,r,n);if(e.isProFallback&&e.rawTaskDef)return Ut({...e.rawTaskDef,taskReferenceName:e.taskReferenceName||e.rawTaskDef.taskReferenceName,name:e.name||e.rawTaskDef.name,description:e.description??e.rawTaskDef.description});const s=n.getAction(e.actionId);return s?$2(e,s,t,r):e.rawTaskDef?Ut({...e.rawTaskDef,taskReferenceName:e.taskReferenceName,inputParameters:{...e.rawTaskDef.inputParameters||{},...e.values}}):Ut({name:e.name||e.taskReferenceName,taskReferenceName:e.taskReferenceName,type:"SIMPLE",description:e.description,inputParameters:{_actionId:e.actionId,...e.values}})}function L2(e,t){const r=e.pairedJoinTaskRef||`join_${e.taskReferenceName}`,n=e.pairedJoinTaskDef?structuredClone(e.pairedJoinTaskDef):{};if(t.type==="FORK_JOIN_DYNAMIC")return Ut({name:`${e.taskReferenceName}_join`,...n,taskReferenceName:r,type:"JOIN"});const s=[];for(const a of t.forkTasks||[])a&&a.length>0&&s.push(a[a.length-1].taskReferenceName);return Ut({name:`${e.taskReferenceName}_join`,...e.pairedJoinTaskDef?{}:{description:`Join task for ${e.taskReferenceName}`},...n,taskReferenceName:r,type:"JOIN",joinOn:s.length>0?s:void 0})}function On(e,t,r=Ze){const n=[];for(let s=0;s<e.length;s++){const a=e[s],i=ep(a,s,t,r);n.push(i);const l=a.isProFallback&&i.type==="FORK_JOIN_DYNAMIC"&&!!a.pairedJoinTaskRef;(a.controlType==="fork"||l)&&n.push(L2(a,i))}return n}function H1(e,t=Ze){const r=e.rawWorkflowDef?structuredClone(e.rawWorkflowDef):{},n=On(e.steps,e.name,t);return{...r,name:e.name||"cloud_host_automation",description:e.rawWorkflowDef?e.description??r.description:e.description||"云平台自动化工作流",version:e.version??1,schemaVersion:2,tasks:n,inputParameters:e.inputParameters||r.inputParameters}}function J1(e,t,r=Ze){const n=`step_${e.taskReferenceName||`idx${t}`}`;if(e.type==="DECISION"||e.type==="SWITCH"){const a=[];if(e.decisionCases)for(const[c,d]of Object.entries(e.decisionCases))a.push({caseKey:c,caseLabel:`分支: ${c}`,steps:Pn(d||[],r)});a.push({caseKey:"__default__",caseLabel:"默认分支 (Default)",steps:Pn(e.defaultCase||[],r)});let i,l;return e.type==="SWITCH"?!e.evaluatorType||e.evaluatorType==="value-param"?i=e.expression??"":l=e.expression??"":e.caseExpression!==void 0&&!e.caseValueParam?l=e.caseExpression:i=e.caseValueParam??"",{id:n,actionId:"control_decision",taskReferenceName:e.taskReferenceName,name:e.name||e.taskReferenceName,description:e.description,values:{...e.inputParameters||{}},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"decision",caseParam:i,caseExpression:l,branches:a}}if(e.type==="FORK_JOIN"){const a=(e.forkTasks||[]).map((i,l)=>({laneId:`lane_${l}`,laneLabel:`并发泳道 #${l+1}`,steps:Pn(i||[],r)}));return{id:n,actionId:"control_fork",taskReferenceName:e.taskReferenceName,name:e.name||e.taskReferenceName,description:e.description,values:{...e.inputParameters||{}},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"fork",forkLanes:a}}if(e.type==="DO_WHILE"){const a=Pn(e.loopOver||[],r);return{id:n,actionId:"control_loop",taskReferenceName:e.taskReferenceName,name:e.name||e.taskReferenceName,description:e.description,values:{...e.inputParameters||{}},isProFallback:!1,rawTaskDef:structuredClone(e),controlType:"loop",loopCondition:e.loopCondition??"",loopSteps:a}}const s=e.type==="FORK_JOIN_DYNAMIC"?null:r.findActionForTask(e);if(s){let a;try{a=s.action.compile(s.values,{taskReferenceName:e.taskReferenceName,stepIndex:t}).description}catch{a=void 0}const i=e.description&&e.description!==a?e.description:void 0;return{id:n,actionId:s.action.id,taskReferenceName:e.taskReferenceName,name:i??s.action.name,description:e.description,values:s.values,isProFallback:!1,rawTaskDef:structuredClone(e),...e.type==="SUB_WORKFLOW"&&e.subWorkflowParam?.name?{libraryRef:{name:e.subWorkflowParam.name,version:e.subWorkflowParam.version}}:{}}}return{id:n,actionId:"pro_custom_task",taskReferenceName:e.taskReferenceName,name:e.name||e.taskReferenceName,description:e.description,values:e.inputParameters||{},isProFallback:!0,rawTaskDef:structuredClone(e)}}function Pn(e,t=Ze){const r=i=>i.type==="FORK_JOIN"||i.type==="FORK_JOIN_DYNAMIC",n=new Map,s=new Set;for(let i=0;i<e.length;i++)if(r(e[i])){for(let l=i+1;l<e.length;l++)if(e[l].type==="JOIN"&&!s.has(l)){n.set(i,l),s.add(l);break}}const a=[];for(let i=0;i<e.length;i++){const l=e[i];if(s.has(i))continue;const c=J1(l,i,t),d=n.get(i);d!==void 0&&(c.pairedJoinTaskRef=e[d].taskReferenceName,c.pairedJoinTaskDef=structuredClone(e[d])),a.push(c)}return a}function U1(e,t=Ze){if(!e)return{name:"new_cloud_automation",description:"新建云平台运维自动化流程",version:1,steps:[]};const r=Pn(e.tasks||[],t);return{name:e.name||"unnamed_workflow",description:e.description||"",version:e.version||1,steps:r,inputParameters:e.inputParameters,rawWorkflowDef:structuredClone(e)}}const Br=e=>e==null||typeof e=="string"&&e.trim()==="",D2=e=>typeof e=="string"&&e.includes("${");function Vt(e,t,r){(e[t]||=[]).push(r)}function wr(e,t,r={}){for(const n of e){const s=n.taskReferenceName;if(n.controlType==="decision"){n.caseExpression!==void 0?Br(n.caseExpression)&&Vt(r,s,{level:"error",message:"判断表达式为空:请填写用于选择分支的表达式"}):Br(n.caseParam)?Vt(r,s,{level:"error",message:"判断参数名为空:请填写参数名并绑定判断取值"}):Br(n.values?.[n.caseParam])&&Vt(r,s,{field:n.caseParam,level:"error",message:"判断取值未绑定:请插入用于判断的数据,否则运行时总是走默认分支"}),(n.branches||[]).some(i=>i.caseKey!=="__default__")||Vt(r,s,{level:"warning",message:"还没有条件分支:所有情况都会走默认分支,请新增分支"});for(const i of n.branches||[])wr(i.steps,t,r);continue}if(n.controlType==="fork"){(n.forkLanes||[]).forEach((i,l)=>{i.steps.length===0&&Vt(r,s,{level:"error",message:`泳道 ${l+1} 没有步骤:请添加步骤或删除该泳道`}),wr(i.steps,t,r)});continue}if(n.controlType==="loop"){Br(n.loopCondition)&&Vt(r,s,{level:"error",message:"循环继续条件为空:请填写何时继续下一轮"}),(n.loopSteps||[]).length===0&&Vt(r,s,{level:"warning",message:"循环体内没有步骤:请添加需要重复执行的步骤"}),wr(n.loopSteps||[],t,r);continue}if(n.isProFallback)continue;const a=t.getAction(n.actionId);if(a)for(const i of a.fields){const l=n.values?.[i.key]??i.defaultValue;if(i.required&&Br(l)){Vt(r,s,{field:i.key,level:"error",message:`「${i.label}」为必填项:请填写或插入数据`});continue}i.type==="number"&&!Br(l)&&!D2(l)&&!Number.isFinite(Number(l))&&Vt(r,s,{field:i.key,level:"error",message:`「${i.label}」需要填写数字`})}}return r}function M2(e,t){if(!t)return e;const r=(n,s)=>{for(const a of n||[]){if(a.type!=="TASK"||!a.ref)continue;const i=e[a.ref]||=[];i.some(l=>l.message===a.message)||i.push({level:s,message:a.message})}};return r(t.errors,"error"),r(t.warnings,"warning"),e}function Vs(e,t){const r=[...t[e.taskReferenceName]||[]],n=[...(e.branches||[]).flatMap(s=>s.steps),...(e.forkLanes||[]).flatMap(s=>s.steps),...e.loopSteps||[]];for(const s of n)r.push(...Vs(s,t));return r}const tp=e=>e.pairedJoinTaskRef||`join_${e.taskReferenceName}`;function V1(e,t,r){const n=[],s=(r||[]).map(i=>typeof i=="string"?{name:i}:i).filter(i=>!!i&&typeof i.name=="string"&&i.name!=="");s.length>0&&n.push({key:"workflow.input",title:"工作流全局入参",icon:"globe",items:s.map(i=>({rawRef:`workflow.input.${i.name}`,label:i.description||i.name,type:i.type||"string",example:i.example??i.defaultValue,stepLabel:"全局入参"}))});const a=(i,l,c)=>{const d=t.getAction(i.actionId),u=i.name||d?.name||i.taskReferenceName;if(i.controlType==="decision"){for(const f of i.branches||[]){const m=f.caseKey==="__default__"?"默认分支":`分支 ${f.caseKey}`;for(const h of f.steps)a(h,`${u} › ${m} › ${h.name||h.taskReferenceName}`,`仅在${m}被执行时有值`)}return}if(i.controlType==="fork"){n.push({key:tp(i),title:`${l}(并行汇聚)`,icon:"zap",note:c,items:[{rawRef:`${tp(i)}.output`,label:"各泳道最后一步的输出",type:"object",stepLabel:u}]}),(i.forkLanes||[]).forEach((f,m)=>{for(const h of f.steps)a(h,`${u} › 泳道 ${m+1} › ${h.name||h.taskReferenceName}`,c)});return}if(i.controlType==="loop"){n.push({key:i.taskReferenceName,title:l,icon:"repeat",note:c,items:[{rawRef:`${i.taskReferenceName}.output.iteration`,label:"已执行轮次",type:"number",stepLabel:u}]});for(const f of i.loopSteps||[])a(f,`${u} › 循环体 › ${f.name||f.taskReferenceName}`,"循环体内的步骤,取最后一轮的值");return}const p=d&&d.outputs.length>0?d.outputs.map(f=>({rawRef:`${i.taskReferenceName}.output.${f.key}`,label:f.label,type:f.type,example:f.example,stepLabel:u})):[{rawRef:`${i.taskReferenceName}.output`,label:"完整输出对象",type:"object",stepLabel:u}];n.push({key:i.taskReferenceName,title:l,icon:d?.icon||"settings",note:c,items:p})};return e.forEach((i,l)=>{const c=t.getAction(i.actionId);a(i,`#${l+1} ${i.name||c?.name||i.taskReferenceName}`)}),n}function W2(e,t){for(const r of t){const n=r.items.find(s=>s.rawRef===e);if(n)return r.key==="workflow.input"?`全局入参 · ${n.label}`:`${n.stepLabel} · ${n.label}`}if(e.startsWith("workflow.input."))return`全局入参 · ${e.slice(15)}`;for(const r of t){const n=r.items[0],s=n?.rawRef.split(".output")[0];if(n&&s&&e.startsWith(`${s}.output`))return`${n.stepLabel} 输出`}return e}const z2=({upstreamSteps:e,onSelect:t,onClose:r,registry:n=Ze,workflowInputParams:s})=>{const[a,i]=T.useState(""),l=T.useRef(null),c=T.useMemo(()=>V1(e,n,s),[e,n,s]);T.useEffect(()=>{const u=l.current;if(!u)return;const p=f=>{f.key==="Escape"&&(f.stopPropagation(),r())};return u.addEventListener("keydown",p),()=>u.removeEventListener("keydown",p)},[r]);const d=T.useMemo(()=>{if(!a.trim())return c;const u=a.toLowerCase();return c.map(p=>({...p,items:p.items.filter(f=>f.label.toLowerCase().includes(u)||f.rawRef.toLowerCase().includes(u))})).filter(p=>p.items.length>0)},[c,a]);return o.jsxs("div",{ref:l,role:"dialog","aria-label":"插入数据",style:{position:"absolute",top:"100%",left:0,zIndex:1100,width:340,maxHeight:380,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:8,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden",marginTop:4,fontFamily:"inherit"},children:[o.jsxs("div",{style:{padding:"8px 10px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:8,background:"var(--bg-tertiary)"},children:[o.jsx("span",{style:{fontSize:13},children:o.jsx(Cs,{size:13,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("input",{autoFocus:!0,type:"text","aria-label":"搜索可插入的数据",placeholder:"搜索上游输出或全局入参…",value:a,onChange:u=>i(u.target.value),style:{flex:1,background:"transparent",border:"none",outline:"none",color:"var(--text-primary)",fontSize:12}}),o.jsx("button",{type:"button",onClick:r,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:14,padding:"2px 4px"},title:"关闭",children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",padding:"6px 4px"},children:d.length===0?o.jsx("div",{style:{padding:"24px 12px",textAlign:"center",color:"var(--text-muted)",fontSize:12},children:c.length===0?"前面还没有可引用的步骤输出,也没有声明工作流全局入参":"没有匹配的字段,换个关键字试试"}):d.map(u=>o.jsxs("div",{role:"group","aria-label":u.title,style:{marginBottom:8},children:[o.jsxs("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)",padding:"4px 8px",display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{style:{display:"inline-flex"},children:o.jsx(We,{name:u.icon,size:13})}),o.jsx("span",{children:u.title})]}),u.note&&o.jsx("div",{style:{fontSize:10,color:"var(--text-muted)",padding:"0 8px 2px 27px"},children:u.note}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:2},children:u.items.map(p=>o.jsxs("button",{type:"button",onClick:()=>{t({rawRef:p.rawRef,label:p.label,stepLabel:p.stepLabel}),r()},style:{width:"100%",border:"none",background:"transparent",color:"inherit",fontFamily:"inherit",textAlign:"left",padding:"6px 10px",borderRadius:6,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between",transition:"background 0.15s ease",fontSize:12},onMouseEnter:f=>{f.currentTarget.style.background="var(--bg-highlight)"},onMouseLeave:f=>{f.currentTarget.style.background="transparent"},onFocus:f=>{f.currentTarget.style.background="var(--bg-highlight)"},onBlur:f=>{f.currentTarget.style.background="transparent"},children:[o.jsxs("span",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden"},children:[o.jsx("span",{style:{fontWeight:500,color:"var(--text-primary)",whiteSpace:"nowrap"},children:p.label}),o.jsx("span",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:p.rawRef})]}),o.jsxs("span",{style:{display:"flex",alignItems:"center",gap:6},children:[p.example!==void 0&&o.jsx("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:4,background:"var(--cm-data-tint)",color:"var(--cm-data)",fontFamily:"monospace",maxWidth:90,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:`样例值: ${String(p.example)}`,children:String(p.example)}),o.jsx("span",{style:{fontSize:10,padding:"1px 4px",borderRadius:3,background:"var(--bg-tertiary)",color:"var(--text-muted)"},children:p.type})]})]},p.rawRef))})]},u.key))}),o.jsx("div",{style:{padding:"4px 8px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:10,color:"var(--text-muted)",textAlign:"right"},children:"选择一项,以数据胶囊插入到光标处;Esc 关闭"})]})},K1=T.createContext({issues:{},allSteps:[]}),Sr=()=>T.useContext(K1),or=e=>`cm-step-${e}`;function An(e,t){return e.some(r=>r.taskReferenceName===t||An(r.loopSteps||[],t)||(r.branches||[]).some(n=>An(n.steps,t))||(r.forkLanes||[]).some(n=>An(n.steps,t)))}const Ks=e=>e!==null&&typeof e=="object";function G1(e){try{return{ok:!0,value:JSON.parse(e)}}catch(t){return{ok:!1,error:t instanceof Error?t.message:String(t)}}}const Gs=({value:e,onChange:t,placeholder:r,multiline:n=!1,upstreamSteps:s,registry:a=Ze,workflowInputParams:i,disabled:l=!1,defaultShowPicker:c=!1,id:d,ariaLabel:u,invalid:p=!1,describedBy:f,mono:m=!1})=>{const h=Sr(),y=i??h.workflowInputParams,[x,g]=T.useState(c),v=T.useRef(null),[k]=T.useState(()=>Ks(e)),[b,S]=T.useState(()=>Ks(e)?JSON.stringify(e,null,2):""),[j,_]=T.useState(null);T.useEffect(()=>{if(!k)return;const q=G1(b),A=q.ok?q.value:b;JSON.stringify(A)!==JSON.stringify(e)&&(S(Ks(e)?JSON.stringify(e,null,2):String(e??"")),_(null))},[e,k]);const w=k?b:e!=null?String(e):"",I=q=>{if(!k){t(q);return}S(q);const A=G1(q);A.ok&&Ks(A.value)?(_(null),t(A.value)):(_(A.ok?"需要是 JSON 对象或数组":A.error),t(q))},C=T.useMemo(()=>V1(s,a,y),[s,a,y]),N=T.useMemo(()=>{const q=[];for(const A of w.matchAll(/\$\{([^}]+)\}/g)){const W=A[1].trim();q.push({raw:A[0],ref:W,label:W2(W,C)})}return q},[w,C]),O=q=>{const A=`\${${q.rawRef}}`,W=v.current;if(W){const P=W.selectionStart??w.length,$=W.selectionEnd??w.length;I(w.substring(0,P)+A+w.substring($)),setTimeout(()=>{W.focus(),W.setSelectionRange(P+A.length,P+A.length)},0)}else I(w?`${w} ${A}`:A)},E=q=>{q.key==="@"&&!l&&(q.preventDefault(),g(!0))},R=d?`${d}-json-error`:void 0,L=[f,j?R:void 0].filter(Boolean).join(" ")||void 0,H={flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",color:"var(--text-primary)",fontSize:13,fontFamily:m||k?"var(--cm-font-mono, monospace)":"inherit"},F=n||k;return o.jsxs("div",{style:{position:"relative",display:"flex",flexDirection:"column",gap:4,width:"100%"},children:[o.jsxs("div",{style:{display:"flex",alignItems:F?"flex-start":"center",gap:6,background:"var(--bg-secondary)",border:`1px solid ${p||j?"var(--cm-status-failed)":"var(--border-secondary)"}`,borderRadius:6,padding:"4px 8px",transition:"border-color 0.15s ease"},children:[F?o.jsx("textarea",{ref:v,id:d,"aria-label":u,"aria-invalid":p||!!j||void 0,"aria-describedby":L,disabled:l,value:w,placeholder:r||"输入内容,或按 @ 插入上游数据胶囊…",rows:k?Math.min(8,Math.max(3,w.split(`
274
+ `).length)):3,onChange:q=>I(q.target.value),onKeyDown:E,style:{...H,resize:"vertical",lineHeight:1.5}}):o.jsx("input",{ref:v,id:d,"aria-label":u,"aria-invalid":p||void 0,"aria-describedby":L,type:"text",disabled:l,value:w,placeholder:r||"输入内容,或按 @ 插入数据胶囊…",onChange:q=>I(q.target.value),onKeyDown:E,style:H}),o.jsxs("button",{type:"button",disabled:l,onClick:()=>g(!x),"aria-expanded":x,title:"选择并插入上游数据胶囊(也可按 @)",style:{background:x?"var(--cm-data-tint)":"var(--bg-tertiary)",color:x?"var(--cm-data)":"var(--text-secondary)",border:`1px solid ${x?"var(--cm-data)":"var(--border-primary)"}`,borderRadius:4,padding:"2px 8px",fontSize:11,cursor:l?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:4,flexShrink:0,transition:"all 0.15s ease"},children:[o.jsx(Cs,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"插入数据"})]})]}),j&&o.jsxs("div",{id:R,style:{fontSize:11,color:"var(--cm-status-failed)",display:"flex",alignItems:"center",gap:4},children:[o.jsx(zt,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),"JSON 格式有误(",j,"):修正后按对象保存,否则按文本保存"]}),N.length>0&&o.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:4,alignItems:"center",padding:"2px 2px"},children:[o.jsx("span",{style:{fontSize:10,color:"var(--text-muted)"},children:"已引用数据:"}),N.map((q,A)=>o.jsxs("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:12,background:"var(--cm-data-tint)",color:"var(--cm-data)",border:"1px solid color-mix(in srgb, var(--cm-data) 35%, transparent)",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500},title:`原始引用表达式: ${q.raw}`,children:[o.jsx(_u,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:q.label})]},`${q.ref}_${A}`))]}),x&&o.jsx(z2,{upstreamSteps:s,workflowInputParams:y,registry:a,onSelect:O,onClose:()=>{g(!1),v.current?.focus()}})]})},q2={COMPLETED:{label:"成功",color:"var(--cm-status-success)",icon:"check"},COMPLETED_WITH_ERRORS:{label:"带错完成",color:"var(--cm-status-warning)",icon:"alert"},FAILED:{label:"失败",color:"var(--cm-status-failed)",icon:"x"},FAILED_WITH_TERMINAL_ERROR:{label:"失败",color:"var(--cm-status-failed)",icon:"x"},TIMED_OUT:{label:"已超时",color:"var(--cm-status-failed)",icon:"timer"},SKIPPED:{label:"已跳过",color:"var(--cm-status-skipped)",icon:"skip"},IN_PROGRESS:{label:"运行中",color:"var(--cm-status-running)",icon:"loader"},SCHEDULED:{label:"等待中",color:"var(--cm-status-pending)",icon:"circle"},CANCELED:{label:"已取消",color:"var(--cm-status-skipped)",icon:"ban"}};function F2(e){return e&&q2[e]||{label:"等待中",color:"var(--cm-status-pending)",icon:"circle"}}const At={size:14,strokeWidth:1.75,"aria-hidden":!0},B2={check:Wt,x:Le,timer:Cu,skip:mb,loader:ju,circle:vu,ban:yu,alert:tt},rp=e=>({fontSize:11,padding:"1px 6px",borderRadius:4,background:`color-mix(in srgb, ${e} 15%, transparent)`,color:e,fontWeight:600,display:"inline-flex",alignItems:"center",gap:4,whiteSpace:"nowrap"}),$n=({issues:e})=>{if(e.length===0)return null;const t=e.filter(a=>a.level==="error").length,r=t>0?"var(--cm-status-failed)":"var(--cm-status-warning)",n=t>0?zt:tt,s=t>0?`${t} 项待修正`:`${e.length} 项提醒`;return o.jsxs("span",{style:rp(r),title:e.map(a=>a.message).join(`
275
+ `),children:[o.jsx(n,{...At}),s]})},np=({status:e})=>{if(!e)return null;const t=F2(e),r=B2[t.icon];return o.jsxs("span",{style:rp(t.color),title:`试跑结果:${t.label}(${e})`,children:[o.jsx(r,{...At}),"试跑",t.label]})},Y1=()=>o.jsxs("span",{style:{...rp("var(--cm-status-failed)"),fontSize:10},title:"此步骤会直接改动真实资源",children:[o.jsx(We,{name:"alert",size:14}),"敏感"]}),Ys=({issues:e})=>e.length===0?null:o.jsx("ul",{role:"list",style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:4},children:e.map((t,r)=>{const n=t.level==="error"?"var(--cm-status-failed)":"var(--cm-status-warning)",s=t.level==="error"?zt:tt;return o.jsxs("li",{style:{fontSize:11,color:n,display:"flex",alignItems:"flex-start",gap:4,lineHeight:1.5},children:[o.jsx(s,{...At,style:{flexShrink:0,marginTop:2}}),o.jsx("span",{children:t.message})]},r)})}),Kt=({label:e,onClick:t,disabled:r,danger:n,children:s})=>o.jsx("button",{type:"button","aria-label":e,title:e,disabled:r,onClick:a=>{a.stopPropagation(),t()},style:{background:"none",border:"none",borderRadius:4,color:r?"var(--cm-text-disabled)":n?"var(--cm-status-failed)":"var(--text-secondary)",cursor:r?"default":"pointer",padding:4,display:"inline-flex",alignItems:"center"},children:s}),Xs=({index:e,count:t,onMove:r,onDelete:n})=>o.jsxs(o.Fragment,{children:[o.jsx(Kt,{label:"上移",disabled:e===0,onClick:()=>r(e-1),children:o.jsx(Jj,{...At})}),o.jsx(Kt,{label:"下移",disabled:e>=t-1,onClick:()=>r(e+1),children:o.jsx(Bj,{...At})}),o.jsx(Kt,{label:"删除步骤",danger:!0,onClick:n,children:o.jsx(Es,{...At})})]}),sp=({onClick:e,label:t="插入步骤",compact:r})=>o.jsx("div",{style:{display:"flex",justifyContent:"center",margin:r?"-2px 0":"-4px 0"},children:o.jsxs("button",{type:"button",onClick:e,style:{padding:r?"1px 8px":"4px 12px",borderRadius:16,background:"var(--bg-tertiary)",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:r?10:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},onMouseEnter:n=>{n.currentTarget.style.borderColor="var(--color-accent)",n.currentTarget.style.color="var(--color-accent)"},onMouseLeave:n=>{n.currentTarget.style.borderColor="var(--border-secondary)",n.currentTarget.style.color="var(--text-muted)"},children:[o.jsx(tr,{...At,size:r?12:14}),o.jsx("span",{children:t})]})}),X1=({initial:e,fallback:t,onDone:r,fontSize:n})=>{const[s,a]=T.useState(e),i=l=>r(l?s.trim()||t:null);return o.jsx("input",{autoFocus:!0,"aria-label":"步骤名称",value:s,placeholder:t,onChange:l=>a(l.target.value),onClick:l=>l.stopPropagation(),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"&&i(!0),l.key==="Escape"&&i(!1)},onBlur:()=>i(!0),style:{flex:1,minWidth:120,padding:"3px 8px",borderRadius:4,border:"1px solid var(--color-accent)",background:"var(--bg-secondary)",color:"var(--text-primary)",fontSize:n,fontWeight:600,outline:"none",fontFamily:"inherit"}})},ap=({value:e,fallback:t,disabled:r,onRename:n,fontSize:s=14})=>{const[a,i]=T.useState(!1);return a?o.jsx(X1,{initial:e,fallback:t,fontSize:s,onDone:l=>{i(!1),l!==null&&l!==e&&n(l)}}):o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:2,minWidth:0},children:[o.jsx("span",{style:{fontWeight:600,fontSize:s,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e||t}),!r&&o.jsx(Kt,{label:"重命名步骤",onClick:()=>i(!0),children:o.jsx(pn,{...At,size:12})})]})},Z1=({bodyId:e,indexLabel:t,icon:r,title:n,subtitle:s,defaultTitle:a,expanded:i,onToggle:l,disabled:c,compact:d,accentIndex:u,onRename:p,badges:f,actions:m})=>{const[h,y]=T.useState(!1),x=d?11:14;return o.jsxs("div",{style:{padding:d?"4px 6px":"8px 12px",display:"flex",alignItems:"center",gap:d?4:8,background:i?"color-mix(in srgb, var(--color-accent) 5%, transparent)":"transparent",flexWrap:d?"wrap":"nowrap"},children:[h?o.jsx(X1,{initial:n,fallback:a,fontSize:x,onDone:g=>{y(!1),g!==null&&g!==n&&p?.(g)}}):o.jsxs("button",{type:"button","aria-expanded":i,"aria-controls":e,onClick:l,style:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:d?6:10,background:"none",border:"none",padding:d?"2px 0":"4px 0",cursor:"pointer",textAlign:"left",color:"inherit",fontFamily:"inherit"},children:[!d&&o.jsx("span",{style:{minWidth:28,height:24,padding:"0 6px",borderRadius:6,background:u?"color-mix(in srgb, var(--color-accent) 12%, transparent)":"var(--bg-primary)",display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:700,color:"var(--color-accent-text)",border:"1px solid var(--border-primary)",flexShrink:0},children:t}),o.jsx(We,{name:r,size:d?14:18}),o.jsxs("span",{style:{minWidth:0,display:"flex",flexDirection:"column"},children:[o.jsx("span",{style:{fontWeight:600,fontSize:x,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n}),s&&!d&&o.jsx("span",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s})]}),o.jsx(Gv,{...At,size:d?12:14,style:{marginLeft:"auto",flexShrink:0,color:"var(--text-muted)",transform:i?"rotate(180deg)":"none",transition:"transform 0.15s ease"}})]}),f&&o.jsx("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:f}),o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:2,flexShrink:0},children:[!c&&p&&!h&&o.jsx(Kt,{label:"重命名步骤",onClick:()=>y(!0),children:o.jsx(pn,{...At})}),m]})]})},op=({step:e,upstreamSteps:t,workflowInputParams:r,registry:n=Ze,onChange:s,disabled:a=!1})=>{const i=n.getAction(e.actionId),l=Sr(),c=r??l.workflowInputParams,d=T.useMemo(()=>wr([e],n)[e.taskReferenceName]||[],[e,n]),u=(l.issues[e.taskReferenceName]||[]).filter(f=>!f.field&&!d.some(m=>m.message===f.message));if(e.isProFallback||!i)return o.jsxs("div",{style:{padding:16,background:"var(--bg-highlight)",borderRadius:8,border:"1px dashed var(--border-secondary)",display:"flex",flexDirection:"column",gap:12},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{style:{fontSize:20},children:o.jsx(bb,{size:20,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("div",{children:[o.jsxs("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:14},children:[e.name||e.taskReferenceName," (底层技术步骤)"]}),o.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)"},children:["任务类型: ",e.rawTaskDef?.type||"CUSTOM"]})]})]}),o.jsx("p",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.6,margin:0},children:"该步骤属于底层控制流或未映射的 Conductor 任务。在业务模式下已为您无损保留其参数与依赖关系。如需深度修改其底层 JQ 脚本或 JSON Schema,请切换至右上方「全景画布模式」。"}),o.jsx(Ys,{issues:u})]});const p=(f,m)=>{const h={...e.values,[f]:m};s({...e,values:h})};return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[i.riskLevel==="sensitive"&&o.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"color-mix(in srgb, var(--color-error) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--color-error) 25%, transparent)",fontSize:12,color:"var(--color-error)",lineHeight:1.5},children:[o.jsx(Is,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),o.jsx("strong",{children:"操作安全网"}),":此步骤会直接影响真实云主机的运行状态(关机、重启、变配或下线)。建议在流程设计中,于本步骤之前放置一个「人工确认/审批」步骤,确保生产稳定性。"]}),o.jsx(Ys,{issues:u}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:14},children:i.fields.map(f=>{const m=e.values[f.key]??f.defaultValue,h=`cm-field-${e.taskReferenceName}-${f.key}`,y=d.find(b=>b.field===f.key),x=y?`${h}-error`:void 0,g=f.help?`${h}-help`:void 0,v=[x,g].filter(Boolean).join(" ")||void 0,k=y?"1px solid var(--cm-status-failed)":"1px solid var(--border-secondary)";return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("label",{htmlFor:f.type==="boolean"?void 0:h,id:`${h}-label`,style:{fontSize:12,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"center",gap:4},children:[f.label,f.required&&o.jsx("span",{style:{color:"var(--cm-status-failed)"},"aria-label":"必填",children:"*"})]}),f.help&&o.jsx("span",{id:g,style:{fontSize:11,color:"var(--text-muted)"},children:f.help})]}),f.type==="select"?o.jsx(H2,{id:h,invalid:!!y,describedBy:v,value:m,options:f.options??[],allowDynamic:f.acceptsPills!==!1,disabled:a,placeholder:f.placeholder,upstreamSteps:t,workflowInputParams:c,registry:n,onChange:b=>p(f.key,b)}):f.type==="boolean"?o.jsxs("label",{style:{display:"inline-flex",alignItems:"center",gap:8,cursor:"pointer",fontSize:13,color:"var(--text-secondary)"},children:[o.jsx("input",{type:"checkbox","aria-labelledby":`${h}-label`,disabled:a,checked:!!m,onChange:b=>p(f.key,b.target.checked),style:{width:16,height:16,cursor:"pointer"}}),o.jsx("span",{children:"开启 / 启用"})]}):f.acceptsPills||m!==null&&typeof m=="object"?o.jsx(Gs,{id:h,invalid:!!y,describedBy:v,disabled:a,value:m,placeholder:f.placeholder,multiline:f.type==="textarea",upstreamSteps:t,workflowInputParams:c,registry:n,onChange:b=>p(f.key,b)}):f.type==="textarea"?o.jsx("textarea",{id:h,"aria-invalid":!!y||void 0,"aria-describedby":v,disabled:a,rows:3,value:m??"",placeholder:f.placeholder,onChange:b=>p(f.key,b.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:k,color:"var(--text-primary)",fontSize:13,outline:"none",fontFamily:"inherit"}}):o.jsx("input",{id:h,"aria-invalid":!!y||void 0,"aria-describedby":v,disabled:a,type:f.type==="number"?"number":"text",value:m??"",placeholder:f.placeholder,onChange:b=>p(f.key,f.type==="number"?b.target.value===""?"":Number(b.target.value):b.target.value),style:{padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:k,color:"var(--text-primary)",fontSize:13,outline:"none",fontFamily:"inherit"}}),y&&o.jsxs("div",{id:x,style:{fontSize:11,color:"var(--cm-status-failed)",display:"flex",alignItems:"center",gap:4},children:[o.jsx(zt,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),y.message]})]},f.key)})}),i.outputs.length>0&&o.jsxs("div",{style:{marginTop:8,padding:"10px 12px",background:"var(--bg-tertiary)",borderRadius:6,border:"1px solid var(--border-primary)"},children:[o.jsxs("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-muted)",marginBottom:6},children:[o.jsx(bu,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"本步骤产生的数据(可被后续步骤引用):"]}),o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:i.outputs.map(f=>o.jsxs("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:4,background:"var(--bg-secondary)",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx("span",{children:o.jsx(Cs,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:f.label}),o.jsxs("span",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace"},children:["(",f.key,")"]})]},f.key))})]})]})},ip=e=>typeof e=="string"&&e.includes("${"),H2=({id:e,invalid:t,describedBy:r,value:n,options:s,allowDynamic:a,disabled:i,placeholder:l,upstreamSteps:c,workflowInputParams:d,registry:u,onChange:p})=>{const[f,m]=T.useState(()=>ip(n)),[h,y]=T.useState(!1),x={flexShrink:0,background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-primary)",borderRadius:4,padding:"2px 8px",fontSize:11,cursor:i?"not-allowed":"pointer",whiteSpace:"nowrap"};if(a&&f)return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx(Gs,{id:e,invalid:t,describedBy:r,disabled:i,value:ip(n)?n:"",placeholder:l||"插入上游数据,运行时取值",upstreamSteps:c,workflowInputParams:d,registry:u,defaultShowPicker:h,onChange:p}),o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[o.jsxs("span",{style:{fontSize:11,color:"var(--text-muted)"},children:["动态取值:运行时的值需为可选项之一(",s.map(b=>b.label).join(" / "),")"]}),o.jsx("button",{type:"button",disabled:i,style:x,onClick:()=>{m(!1),y(!1),ip(n)&&p(s[0]?.value??"")},children:"改为选择"})]})]});const g=n!=null&&n!=="",v=s.some(b=>String(b.value)===String(n)),k=g?String(n):"";return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsxs("select",{id:e,"aria-invalid":t||void 0,"aria-describedby":r,disabled:i,value:k,onChange:b=>{const S=s.find(j=>String(j.value)===b.target.value);p(S?S.value:b.target.value)},style:{flex:1,minWidth:0,padding:"7px 10px",borderRadius:6,background:"var(--bg-secondary)",border:t?"1px solid var(--cm-status-failed)":"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none",cursor:"pointer"},children:[!g&&o.jsx("option",{value:"",disabled:!0,children:"请选择"}),g&&!v&&o.jsxs("option",{value:k,children:["当前值:",k]}),s.map(b=>o.jsx("option",{value:String(b.value),children:b.label},String(b.value)))]}),a&&o.jsxs("button",{type:"button",disabled:i,title:"改为引用上游步骤输出或全局入参,运行时取值",style:x,onClick:()=>{m(!0),y(!0)},children:[o.jsx(Cs,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"插入数据"]})]})},lp="caseValue",J2=3;function cp(e,t=J2){return`if ($.${e}['iteration'] < ${t}) { true; } else { false; }`}function ir(e){const t=`${Date.now().toString(36).slice(-4)}${Math.random().toString(36).slice(2,4)}`,r=`${e.id.replace(/\./g,"_")}_${t}`;if(e.id==="control.decision")return{id:`step_${r}`,actionId:"control_decision",taskReferenceName:r,name:"条件分支路由",values:{[lp]:""},controlType:"decision",caseParam:lp,branches:[{caseKey:"SUCCESS",caseLabel:"分支: SUCCESS",steps:[]},{caseKey:"__default__",caseLabel:"默认分支 (Default)",steps:[]}],isProFallback:!1};if(e.id==="control.fork")return{id:`step_${r}`,actionId:"control_fork",taskReferenceName:r,name:"并行并发组",values:{},controlType:"fork",forkLanes:[{laneId:"lane_0",laneLabel:"并发泳道 #1",steps:[]},{laneId:"lane_1",laneLabel:"并发泳道 #2",steps:[]}],isProFallback:!1};if(e.id==="control.loop")return{id:`step_${r}`,actionId:"control_loop",taskReferenceName:r,name:"循环迭代处理",values:{},controlType:"loop",loopCondition:cp(r),loopSteps:[],isProFallback:!1};const n={};for(const s of e.fields)s.defaultValue!==void 0&&(n[s.key]=s.defaultValue);return{id:`step_${r}`,actionId:e.id,taskReferenceName:r,name:e.name,description:e.description,values:n,isProFallback:!1,...e.kind==="workflow"&&e.workflowRef?{libraryRef:{name:e.workflowRef.name,version:e.workflowRef.version}}:{}}}function Q1(e){return e!=null&&e!==""}function ek(e){let t;switch(e.type){case"select":t=`可选值 ${(e.options??[]).map(r=>String(r.value)).join("|")}`;break;case"number":t="数字";break;case"boolean":t="布尔";break;default:t="文本"}return e.required?`${t},必填`:t}function tk(e){const t=Ct(e.inputParameters).map(r=>r.name);return As(e.inputSchema,t,e.inputTemplate)}function rk(e){return vn(e.outputSchema,[],e.outputParameters).map(t=>t.key)}function nk(e,t,r={},n={}){const s=new Map(tk(e).map(h=>[h.key,h])),a=new Map(tk(t).map(h=>[h.key,h])),i=[],l=[],c=[];for(const[h,y]of a){const x=s.get(h);if(!x){i.push(y);continue}const g=ek(x),v=ek(y);g!==v&&c.push({key:h,from:g,to:v,valueFilled:Q1(r[h])})}for(const[h,y]of s)a.has(h)||l.push(y);const d=rk(e),u=rk(t),p=u.filter(h=>!d.includes(h)),f=d.filter(h=>!u.includes(h)),m=new Set(n.referencedOutputs??[]);return{addedInputs:i,removedInputs:l,changedInputs:c,addedOutputs:p,removedOutputs:f,lostValueKeys:l.filter(h=>Q1(r[h.key])).map(h=>h.key),brokenOutputRefs:f.filter(h=>m.has(h))}}function sk(e){return e.addedInputs.length===0&&e.removedInputs.length===0&&e.changedInputs.length===0&&e.addedOutputs.length===0&&e.removedOutputs.length===0}function dp(e,t){const r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(`\\$\\{\\s*${r}\\.output\\.([^.\\s}\\[\\]]+)`,"g"),s=new Set,a=new Set,i=l=>{if(typeof l=="string"){n.lastIndex=0;let c;for(;(c=n.exec(l))!==null;)s.add(c[1]);return}if(!(!l||typeof l!="object"||a.has(l))){a.add(l);for(const c of Array.isArray(l)?l:Object.values(l))i(c)}};for(const l of t)i(l);return s}function Zs(e){return e.label&&e.label!==e.key?`${e.label}(${e.key})`:e.key}function ak(e){const t=[],r=[];for(const n of e.removedInputs)e.lostValueKeys.includes(n.key)?t.push(`入参「${Zs(n)}」已删除,已填写的值将丢失`):r.push(`入参「${Zs(n)}」已删除`);for(const n of e.removedOutputs)e.brokenOutputRefs.includes(n)?t.push(`出参「${n}」已删除,下游步骤对它的引用将失效`):r.push(`出参「${n}」已删除`);for(const n of e.changedInputs){const s=`入参「${n.key}」由「${n.from}」变为「${n.to}」`;n.valueFilled?t.push(`${s},已填写的值可能不再有效`):r.push(s)}for(const n of e.addedInputs)n.required?t.push(`新增必填入参「${Zs(n)}」,需要补充填写`):r.push(`新增入参「${Zs(n)}」`);for(const n of e.addedOutputs)r.push(`新增出参「${n}」`);return{impacts:t,changes:r}}function ok(e,t,r,n){const s=`流程库「${e}」已有新版本 v${r}(当前引用 v${t??"?"})。`;if(sk(n))return`${s}
276
+ 入参出参未变化。确定升级吗?`;const{impacts:a,changes:i}=ak(n),l=[s,"升级差异:"];return a.length>0&&l.push("【会影响已填内容】",...a.map(c=>`· ${c}`)),i.length>0&&l.push("【其它变化】",...i.map(c=>`· ${c}`)),l.push("确定升级吗?"),l.join(`
277
+ `)}function up(e,t){const r={...e};for(const n of t.removedInputs)delete r[n.key];for(const n of t.addedInputs)n.defaultValue!==void 0&&r[n.key]===void 0&&(r[n.key]=n.defaultValue);return r}function ik(e){const{pinned:t,catalogStatus:r,latest:n,pinnedExists:s}=e;return t===void 0?{kind:"unpinned"}:r===void 0?n&&n.version>t?{kind:"upgradable",pinned:t,latest:n.version}:{kind:"pinned",pinned:t}:r!=="ready"?{kind:"pinned",pinned:t}:n?n.deprecated?{kind:"unavailable",pinned:t,reason:"deprecated"}:t>n.version?{kind:"unavailable",pinned:t,reason:"missing-version"}:t<n.version?s===!1?{kind:"unavailable",pinned:t,reason:"missing-version"}:{kind:"upgradable",pinned:t,latest:n.version}:s===!1?{kind:"unavailable",pinned:t,reason:"missing-version"}:{kind:"pinned",pinned:t}:{kind:"unavailable",pinned:t,reason:"removed"}}function lk(e,t,r){switch(r){case"deprecated":return`流程库「${e}」已下线 / 不建议新引用。本步骤仍按固定的 v${t} 编译,不会自动改变版本。`;case"removed":return`流程库中已找不到「${e}」。本步骤仍按固定的 v${t} 编译,不会自动改变版本,请确认运行环境中该版本是否仍可用。`;default:return`流程库中不存在「${e}」的 v${t}。本步骤仍按固定版本编译,不会自动改变版本,请确认运行环境中该版本是否仍可用。`}}const ck=({step:e,action:t,disabled:r,catalog:n,getReferencedOutputs:s,onUpgrade:a})=>{const{confirm:i,confirmState:l,handleConfirm:c,handleCancel:d}=gn(),u=Us(n),[p,f]=T.useState(!1),[m,h]=T.useState(void 0),y=e.libraryRef,x=y?.version,g=y?n?.latest(y.name):void 0,v=t?.workflowRef?.version,k=!!n&&(g!==void 0||v===void 0),b=g?{version:g.version,deprecated:g.deprecated}:v!==void 0?{version:v,deprecated:!1}:void 0,S=k&&u.status==="ready"&&x!==void 0&&!!g&&g.version>x,j=y?.name;if(T.useEffect(()=>{if(!S||!n||!j||x===void 0){h(void 0);return}const I=new AbortController;return n.getVersion(j,x,I.signal).then(C=>{I.signal.aborted||h(C!==null)}).catch(()=>{I.signal.aborted||h(void 0)}),()=>I.abort()},[S,n,j,x]),!y)return null;const _=ik({pinned:x,catalogStatus:k?u.status:void 0,latest:b,pinnedExists:S?m:void 0}),w=async I=>{if(I.stopPropagation(),_.kind!=="upgradable")return;const{pinned:C,latest:N}=_;let O;if(n&&g&&g.source==="provider"){f(!0);try{const[L,H]=await Promise.all([n.getVersion(y.name,C),n.getVersion(y.name,N)]);L&&H&&(O=nk(L.def,H.def,e.values,{referencedOutputs:s?.()}))}catch{O=void 0}finally{f(!1)}}const E=O?ok(y.name,C,N,O):`流程库「${y.name}」已有新版本 v${N}(当前引用 v${C})。升级后入参、出参可能发生变化,请升级后检查本步骤配置。确定升级吗?`;await i(E,`升级到 v${N}`)&&a(N,O)};return o.jsxs(o.Fragment,{children:[o.jsxs("span",{title:x!==void 0?`引用流程库「${y.name}」,已固定版本 v${x},库升级后不会自动变化`:`引用流程库「${y.name}」,未固定版本,沿用原定义`,style:{fontSize:10,padding:"1px 5px",borderRadius:4,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 12%, transparent))",color:"var(--color-accent-text)",fontWeight:600},children:[o.jsx(nb,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"流程库",x!==void 0?` v${x}`:""]}),_.kind==="upgradable"&&!r&&o.jsx("button",{onClick:w,disabled:p,title:"查看升级差异并升级到库中最新版本",style:{fontSize:10,padding:"1px 6px",borderRadius:4,border:"1px solid var(--cm-status-warning)",background:"color-mix(in srgb, var(--cm-status-warning) 12%, transparent)",color:"var(--cm-status-warning)",fontWeight:600,cursor:p?"wait":"pointer"},children:p?"正在比较版本…":`有新版本 v${_.latest}`}),_.kind==="unavailable"&&o.jsxs("span",{title:lk(y.name,_.pinned,_.reason),style:{fontSize:10,padding:"1px 6px",borderRadius:4,border:"1px solid var(--cm-status-failed)",background:"color-mix(in srgb, var(--cm-status-failed) 12%, transparent)",color:"var(--cm-status-failed)",fontWeight:600},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"版本不可用"]}),l&&o.jsx("span",{onClick:I=>I.stopPropagation(),children:o.jsx(qt,{message:l.message,confirmLabel:l.confirmLabel,onConfirm:c,onCancel:d})})]})},U2=200,V2=({registry:e,stepNumber:t,positionLabel:r,onClose:n,onSelect:s,currentWorkflowLevel:a,libraryCatalog:i})=>{const l=Us(i),{theme:c,themeColor:d}=re($e(_=>({theme:_.theme,themeColor:_.themeColor}))),[u,p]=T.useState("all"),[f,m]=T.useState(null),[h,y]=T.useState(""),x=T.useMemo(()=>Jb(e.getAllActions(),{currentLevel:a}),[e,a]),g=T.useMemo(()=>Ub(x),[x]),v=g.length>0,k=T.useMemo(()=>{const _=h.trim().toLowerCase();return x.filter(w=>{const I=v?Ms(w):null;let C;f!==null?C=I===f:u==="all"?C=!0:C=I===null&&w.category===u;const N=!_||w.name.toLowerCase().includes(_)||w.description.toLowerCase().includes(_);return C&&N})},[x,v,u,f,h]),b=T.useMemo(()=>k.slice(0,U2),[k]);T.useEffect(()=>{const _=w=>{w.key==="Escape"&&(w.stopPropagation(),n())};return window.addEventListener("keydown",_),()=>window.removeEventListener("keydown",_)},[n]);const S=r||`第 ${t} 步`;if(typeof document>"u")return null;const j=[{id:"all",label:"全部"},{id:"compute",label:"计算与主机"},{id:"storage",label:"存储快照"},{id:"monitor",label:"监控指标"},{id:"notify",label:"通知消息"},{id:"human",label:"人工审批"},{id:"logic",label:"流程控制"},{id:"custom",label:v?"自定义":"流程库 / 自定义"}];return kt.createPortal(o.jsx("div",{"data-mode":c,"data-brand":d,style:{position:"fixed",inset:0,background:"var(--cm-overlay)",backdropFilter:"blur(2px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit",colorScheme:c==="light"?"light":"dark"},onClick:n,children:o.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":`选择要插入的业务动作(${S})`,onClick:_=>_.stopPropagation(),style:{width:760,maxWidth:"calc(100vw - 48px)",height:"min(640px, 84vh)",background:"var(--bg-primary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"14px 18px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:12},children:[o.jsxs("div",{style:{fontWeight:600,fontSize:15,flex:1,whiteSpace:"nowrap"},children:["选择业务动作",o.jsx("span",{style:{marginLeft:8,fontSize:12,fontWeight:400,color:"var(--text-muted)"},children:S})]}),o.jsx("input",{type:"text",autoFocus:!0,placeholder:"搜索动作名称或描述…",value:h,onChange:_=>y(_.target.value),style:{width:240,padding:"6px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}}),o.jsx("button",{onClick:n,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16,padding:4,lineHeight:1},children:o.jsx(Le,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{padding:"10px 18px",borderBottom:"1px solid var(--border-primary)",background:"var(--bg-secondary)",display:"flex",flexDirection:"column",gap:8},children:[o.jsx(dk,{label:"分类",children:j.map(_=>o.jsx(uk,{active:f===null&&u===_.id,onClick:()=>{p(_.id),m(null)},children:_.label},_.id))}),v&&o.jsx(dk,{label:"业务域",children:g.map(_=>o.jsx(uk,{active:f===_,onClick:()=>m(_),children:_},`domain:${_}`))})]}),l.status==="loading"&&o.jsx("div",{style:{padding:"6px 18px",fontSize:12,color:"var(--text-muted)",background:"var(--bg-secondary)"},children:"正在加载流程库…"}),l.status==="error"&&o.jsxs("div",{style:{padding:"6px 18px",fontSize:12,color:"var(--color-error)",background:"var(--bg-secondary)",display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{title:l.error?.message,children:"流程库加载失败,其它动作仍可使用"}),o.jsx("button",{onClick:()=>{i?.reload()},style:{background:"none",border:"1px solid currentColor",borderRadius:4,color:"inherit",cursor:"pointer",fontSize:11,padding:"1px 8px"},children:"点击重试"})]}),o.jsxs("div",{style:{flex:1,overflowY:"auto",padding:16,display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gap:10,alignContent:"start"},children:[b.map(_=>{const w=[_.level,Ms(_)??void 0].filter(Boolean).join(" · ");return o.jsxs("button",{type:"button",onClick:()=>s(_),onMouseEnter:I=>{I.currentTarget.style.borderColor="var(--color-accent)",I.currentTarget.style.background="var(--bg-tertiary)"},onMouseLeave:I=>{I.currentTarget.style.borderColor="var(--border-primary)",I.currentTarget.style.background="var(--bg-secondary)"},style:{textAlign:"left",font:"inherit",padding:"10px 12px",borderRadius:8,background:"var(--bg-secondary)",border:"1px solid var(--border-primary)",color:"var(--text-primary)",cursor:"pointer",display:"flex",flexDirection:"column",gap:4,transition:"border-color 0.15s ease, background 0.15s ease"},children:[o.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[o.jsx(We,{name:_.icon,size:18}),o.jsx("span",{style:{fontWeight:600,fontSize:13,flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:_.name}),_.riskLevel==="sensitive"&&o.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"color-mix(in srgb, var(--color-warning) 16%, transparent)",color:"var(--color-warning)",fontWeight:600,flexShrink:0},children:"敏感"})]}),w&&o.jsx("span",{style:{fontSize:10,color:"var(--color-accent-text)"},children:w}),o.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.45},children:_.description})]},_.id)}),b.length===0&&o.jsxs("div",{style:{gridColumn:"1 / -1",textAlign:"center",padding:"32px 0",fontSize:12,color:"var(--text-muted)"},children:["没有符合条件的动作",h?",换个关键词试试":""]}),k.length>b.length&&o.jsxs("div",{style:{gridColumn:"1 / -1",textAlign:"center",fontSize:12,color:"var(--text-muted)"},children:["共 ",k.length," 项,仅显示前 ",b.length," 项,请用搜索缩小范围"]})]})]})}),document.body)},dk=({label:e,children:t})=>o.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:10},children:[o.jsx("span",{style:{flexShrink:0,width:40,paddingTop:4,fontSize:12,color:"var(--text-muted)"},children:e}),o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,flex:1},children:t})]}),uk=({active:e,onClick:t,children:r})=>o.jsx("button",{type:"button",onClick:t,"aria-pressed":e,style:{padding:"3px 10px",borderRadius:999,fontSize:12,lineHeight:"18px",cursor:"pointer",fontWeight:e?600:400,background:e?"var(--color-accent-bg)":"transparent",color:e?"var(--color-accent-text)":"var(--text-secondary)",border:`1px solid ${e?"var(--color-accent)":"var(--border-secondary)"}`},children:r});function Qs(e){return[...(e.branches||[]).flatMap(r=>r.steps),...(e.forkLanes||[]).flatMap(r=>r.steps),...e.loopSteps||[]].reduce((r,n)=>r+1+Qs(n),0)}function pk(e,t){const r=e.name||t.getAction(e.actionId)?.name||e.taskReferenceName,n=Qs(e),s=n>0?`,连同其中的 ${n} 个步骤`:"";return`删除步骤「${r}」${s}?删除后可按 Ctrl+Z(Mac 为 Cmd+Z)撤销。`}const pp=({step:e,upstreamSteps:t,registry:r=Ze,disabled:n=!1,onChange:s,onOpenInsertModal:a,depth:i=0})=>{const l=e.forkLanes||[],c=Sr(),{confirm:d,confirmState:u,handleConfirm:p,handleCancel:f}=gn(),m=c.confirm??d,[h,y]=T.useState(l[0]?.laneId||"lane_0"),x=(S,j)=>{const _=l.map(w=>w.laneId===S?{...w,steps:j}:w);s({...e,forkLanes:_})},g=()=>{const S=l.length,j={laneId:`lane_${S}_${Date.now().toString(36).slice(-4)}`,laneLabel:`并发泳道 #${S+1}`,steps:[]},_=[...l,j];s({...e,forkLanes:_}),y(j.laneId)},v=async S=>{if(l.length<=1)return;const j=l.findIndex(N=>N.laneId===S),_=l[j],w=_?_.steps.reduce((N,O)=>N+1+Qs(O),0):0,I=`删除泳道 ${j+1}${w>0?`及其中的 ${w} 个步骤`:""}?删除后可按 Ctrl+Z 撤销。`;if(!await m(I,"删除泳道"))return;const C=l.filter(N=>N.laneId!==S);s({...e,forkLanes:C}),h===S&&y(C[0]?.laneId||"")},k=S=>{const j=l.find(w=>w.laneId===S);if(!j)return;const _=l.findIndex(w=>w.laneId===S)+1;a(w=>{const I=ir(w);x(S,[...j.steps,I])},{label:`泳道 ${_} · 第 ${j.steps.length+1} 步`})},b=l.reduce((S,j)=>S+(j.steps?.length||0),0);return o.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"var(--cm-shadow-float)",overflow:"hidden",transition:"all 0.2s ease"},children:[o.jsxs("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"color-mix(in srgb, var(--color-accent) 15%, transparent)",color:"var(--color-accent)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:700},children:o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsx(ap,{value:e.name,fallback:"并行并发组",disabled:n,onRename:S=>s({...e,name:S})}),o.jsxs("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 12%, transparent))",color:"var(--color-accent-text)",fontWeight:600,border:"1px solid color-mix(in srgb, var(--color-accent) 30%, transparent)"},children:[o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"并行并发 (Fork / Join)"]})]}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["同时并发执行 ",l.length," 条独立业务泳道 · 涵盖 ",b," 个并发步骤"]})]})]}),!n&&o.jsxs("button",{type:"button",onClick:g,style:{padding:"4px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px dashed var(--border-secondary)",color:"var(--text-primary)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(tr,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"新增并发泳道"})]})]}),o.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)",display:"grid",gridTemplateColumns:l.length>1?`repeat(${Math.min(l.length,3)}, minmax(240px, 1fr))`:"1fr",gap:12,overflowX:"auto"},children:l.map((S,j)=>o.jsxs("div",{style:{borderRadius:8,background:"var(--bg-secondary)",border:"1px solid var(--border-primary)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"8px 12px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{style:{fontSize:13},children:o.jsx(OT,{size:13,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:S.laneLabel||`泳道 #${j+1}`}),o.jsxs("span",{style:{fontSize:10,padding:"0 5px",borderRadius:8,background:"var(--bg-secondary)",color:"var(--text-muted)"},children:[S.steps.length," 步"]})]}),!n&&l.length>1&&o.jsx(Kt,{label:`删除泳道 ${j+1}`,onClick:()=>v(S.laneId),children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{padding:10,flex:1,display:"flex",flexDirection:"column",gap:8,minHeight:80},children:[S.steps.length===0?o.jsx("div",{style:{padding:"16px 8px",textAlign:"center",color:"var(--text-muted)",fontSize:11,border:"1px dashed var(--border-secondary)",borderRadius:6},children:"此泳道暂无步骤"}):o.jsx(mp,{steps:S.steps,onStepsChange:_=>x(S.laneId,_),upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:a,variant:"compact",rowTone:"primary",insertLabel:`泳道 ${j+1}`}),!n&&o.jsxs("button",{type:"button",onClick:()=>k(S.laneId),style:{padding:"4px 8px",borderRadius:4,background:"transparent",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",marginTop:2},children:[o.jsx(tr,{size:12,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:2}}),"追加并发步骤"]})]})]},S.laneId))}),o.jsxs("div",{style:{padding:"8px 16px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:11,color:"var(--text-secondary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{children:o.jsx(_u,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("span",{children:[o.jsx("strong",{children:"汇聚同步点 (Join)"}),":所有 ",l.length," 条泳道执行完毕后再继续向下;后续步骤可通过「插入数据」引用汇聚结果或泳道内步骤的输出。"]})]}),o.jsx("code",{style:{fontSize:10,color:"var(--text-muted)",background:"var(--bg-secondary)",padding:"1px 6px",borderRadius:4},children:tp(e)})]}),u&&o.jsx(qt,{message:u.message,confirmLabel:u.confirmLabel,onConfirm:p,onCancel:f})]})},fp=({step:e,upstreamSteps:t,registry:r=Ze,disabled:n=!1,onChange:s,onOpenInsertModal:a,depth:i=0})=>{const l=e.loopSteps||[],c=Sr(),d=`cm-loop-${e.taskReferenceName}-condition`,u=T.useMemo(()=>{const m=wr([{...e,loopSteps:[]}],r)[e.taskReferenceName]||[],h=l.length>0?m.filter(x=>!x.message.startsWith("循环体内没有步骤")):m,y=(c.issues[e.taskReferenceName]||[]).filter(x=>!h.some(g=>g.message===x.message));return[...h,...y]},[e,l.length,r,c.issues]),p=m=>{s({...e,loopSteps:m})},f=()=>{a(m=>{const h=ir(m);p([...l,h])},{label:`循环体 · 第 ${l.length+1} 步`})};return o.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"var(--cm-shadow-float)",overflow:"hidden",transition:"all 0.2s ease"},children:[o.jsx("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 15%, transparent))",color:"var(--color-accent)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:700},children:o.jsx(Dr,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsx(ap,{value:e.name,fallback:"循环迭代处理",disabled:n,onRename:m=>s({...e,name:m})}),o.jsxs("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 12%, transparent))",color:"var(--color-accent-text)",fontWeight:600,border:"1px solid color-mix(in srgb, var(--color-accent) 30%, transparent)"},children:[o.jsx(Dr,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),"循环迭代 (Do-While Loop)"]})]}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["循环体包含 ",l.length," 个步骤 · 每次迭代执行完将重新评估跳出条件"]})]})]})}),o.jsxs("div",{style:{padding:"10px 16px",background:"var(--bg-primary)",borderBottom:"1px solid var(--border-primary)",display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[o.jsx("label",{htmlFor:d,style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:"循环继续条件"}),o.jsx("span",{style:{fontSize:11,color:"var(--text-muted)"},children:"JavaScript,每轮结束后计算,为 true 继续下一轮,为 false 结束循环"}),!n&&o.jsx("button",{type:"button",onClick:()=>s({...e,loopCondition:cp(e.taskReferenceName)}),style:{marginLeft:"auto",padding:"2px 8px",borderRadius:4,background:"transparent",border:"1px solid var(--border-primary)",color:"var(--text-secondary)",fontSize:11,cursor:"pointer"},children:"改为最多执行 3 轮"})]}),o.jsx("div",{children:o.jsx("input",{id:d,type:"text",disabled:n,value:e.loopCondition??"",placeholder:cp(e.taskReferenceName),onChange:m=>s({...e,loopCondition:m.target.value}),style:{width:"100%",boxSizing:"border-box",padding:"4px 8px",borderRadius:4,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:11,fontFamily:"var(--cm-font-mono, monospace)"}})}),o.jsx(Ys,{issues:u})]}),o.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)"},children:o.jsxs("div",{style:{borderRadius:8,border:"2px dashed color-mix(in srgb, var(--color-accent) 45%, var(--border-secondary))",background:"var(--bg-secondary)",padding:12},children:[o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginBottom:10,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{children:o.jsx(Ns,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("span",{children:[o.jsx("strong",{children:"循环体内部任务序列"})," (每轮迭代将依次执行以下 ",l.length," 个步骤):"]})]}),!n&&o.jsxs("button",{type:"button",onClick:f,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 10%, transparent))",border:"1px solid color-mix(in srgb, var(--color-accent) 40%, transparent)",color:"var(--color-accent-text)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500},children:[o.jsx(tr,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"追加循环步骤"})]})]}),l.length===0?o.jsx("div",{style:{padding:"20px 12px",textAlign:"center",color:"var(--text-muted)",fontSize:11},children:"循环体内暂无步骤,点击「追加循环步骤」添加需要重复执行的动作"}):o.jsx(mp,{steps:l,onStepsChange:p,upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:a,rowTone:"primary",indexPrefix:"轮内 ",accentIndexBadge:!0,insertLabel:"循环体"})]})}),o.jsxs("div",{style:{padding:"8px 16px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:11,color:"var(--text-secondary)",display:"flex",alignItems:"center",gap:6},children:[o.jsx(cT,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"循环至少执行一轮;条件为 false 时结束并继续向下。请确保条件最终会变为 false,例如用已执行轮次限定最大轮数。"})]})]})},fk={decision:"var(--cm-ai)",fork:"var(--color-accent)",loop:"var(--cm-status-success)"},K2=({step:e,index:t,count:r=1,depth:n=1,upstreamSteps:s,registry:a=Ze,disabled:i=!1,onChange:l,onDelete:c,onMove:d,onOpenInsertModal:u})=>{const p=Sr(),f=fk[e.controlType||"decision"]||fk.decision,m=e.controlType==="fork"?"嵌套并行":e.controlType==="loop"?"嵌套循环":"嵌套分支",h={step:e,upstreamSteps:s,registry:a,disabled:i,onChange:l,onOpenInsertModal:u};return o.jsxs("div",{id:or(e.taskReferenceName),style:{borderLeft:`3px solid ${f}`,paddingLeft:10,marginLeft:Math.min(n-1,3)*2,display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:6},children:[o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[o.jsxs("span",{style:{fontSize:11,fontWeight:700,color:`color-mix(in srgb, ${f} 80%, var(--text-primary))`},children:["#",t+1," ",m,"(第 ",n," 层)"]}),o.jsx($n,{issues:Vs(e,p.issues)})]}),!i&&o.jsx("span",{style:{display:"inline-flex",alignItems:"center"},children:d?o.jsx(Xs,{index:t,count:r,onMove:d,onDelete:c}):o.jsx(Kt,{label:"删除此嵌套控制流及其内部所有步骤",danger:!0,onClick:c,children:o.jsx(Es,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})})]}),e.controlType==="fork"?o.jsx(pp,{...h,depth:n}):e.controlType==="loop"?o.jsx(fp,{...h,depth:n}):o.jsx(yp,{...h,depth:n})]})},mp=({steps:e,onStepsChange:t,upstreamSteps:r,registry:n=Ze,disabled:s=!1,depth:a,onOpenInsertModal:i,variant:l="regular",rowTone:c="primary",indexPrefix:d="",accentIndexBadge:u=!1,insertLabel:p})=>{const f=Sr(),[m,h]=T.useState(null),y=l==="compact",x=c==="secondary"?"var(--bg-secondary)":"var(--bg-primary)",g=c==="secondary"?"var(--bg-primary)":"var(--bg-secondary)",v=f.focusRequest;T.useEffect(()=>{if(!v)return;const _=e.find(w=>w.taskReferenceName===v.ref&&!w.controlType);_&&(h(_.id),requestAnimationFrame(()=>document.getElementById(or(_.taskReferenceName))?.scrollIntoView({behavior:"smooth",block:"center"})))},[v?.nonce]);const k=(_,w)=>{const I=[...e];I[_]=w,t(I)},b=async _=>{const w=e[_];(!f.confirm||await f.confirm(pk(w,n),"删除"))&&(m===w.id&&h(null),t(e.filter((C,N)=>N!==_)))},S=(_,w)=>{if(w<0||w>=e.length)return;const I=[...e],[C]=I.splice(_,1);I.splice(w,0,C),t(I)},j=_=>i(w=>{const I=ir(w),C=[...e];C.splice(_,0,I),t(C),I.controlType||h(I.id)},{label:`${p?`${p} · `:""}第 ${_+1} 步`});return o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:e.map((_,w)=>{const I=[...r,...e.slice(0,w)],C=!s&&w>0&&o.jsx(sp,{compact:!0,onClick:()=>j(w),label:"在此插入"});if(_.controlType)return o.jsxs(T.Fragment,{children:[C,o.jsx(K2,{step:_,index:w,count:e.length,depth:a+1,upstreamSteps:I,registry:n,disabled:s,onChange:q=>k(w,q),onDelete:()=>b(w),onMove:q=>S(w,q),onOpenInsertModal:i})]},_.id);const N=n.getAction(_.actionId),O=m===_.id,E=()=>h(O?null:_.id),R=`${or(_.taskReferenceName)}-body`,L=N?.name||_.taskReferenceName,H=_.name||L,F=!!N&&H!==N.name;return o.jsxs(T.Fragment,{children:[C,o.jsxs("div",{id:or(_.taskReferenceName),style:{borderRadius:y?6:8,background:x,border:O?"1px solid var(--color-accent)":"1px solid var(--border-primary)",overflow:"hidden",transition:y?void 0:"all 0.15s ease"},children:[o.jsx(Z1,{bodyId:R,indexLabel:`${d}#${w+1}`,icon:N?.icon,title:H,subtitle:F?N?.name:_.taskReferenceName,defaultTitle:L,expanded:O,onToggle:E,disabled:s,compact:y,accentIndex:u,onRename:_.isProFallback?void 0:q=>k(w,{..._,name:q}),badges:o.jsxs(o.Fragment,{children:[N?.riskLevel==="sensitive"&&o.jsx(Y1,{}),o.jsx(ck,{step:_,action:N,disabled:s,catalog:f.libraryCatalog,getReferencedOutputs:()=>dp(_.taskReferenceName,f.allSteps),onUpgrade:(q,A)=>k(w,{..._,libraryRef:{name:_.libraryRef.name,version:q},...A?{values:up(_.values,A)}:{}})}),o.jsx($n,{issues:Vs(_,f.issues)}),o.jsx(np,{status:f.runStatus?.[_.taskReferenceName]})]}),actions:!s&&o.jsx(Xs,{index:w,count:e.length,onMove:q=>S(w,q),onDelete:()=>b(w)})}),O&&o.jsx("div",{id:R,style:{padding:y?10:"12px 14px",borderTop:"1px solid var(--border-primary)",background:g},children:o.jsx(op,{step:_,upstreamSteps:I,registry:n,disabled:s,onChange:q=>k(w,q)})})]})]},_.id)})})},Gt="__default__",mk=e=>e===Gt?"默认分支":`分支 ${e}`,hp={padding:"4px 8px",borderRadius:4,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,fontFamily:"var(--cm-font-mono, monospace)",outline:"none"},yp=({step:e,upstreamSteps:t,registry:r=Ze,disabled:n=!1,onChange:s,onOpenInsertModal:a,depth:i=0})=>{const l=Sr(),c=e.branches||[],[d,u]=T.useState(c[0]?.caseKey||Gt),[p,f]=T.useState(""),[m,h]=T.useState(!1),[y,x]=T.useState(""),g=gn(),v=l.confirm??g.confirm,k=c.find(W=>W.caseKey===d)||c[0],b=e.rawTaskDef?.type==="SWITCH",S=e.caseExpression!==void 0,j=e.caseParam??"",_=`cm-decision-${e.taskReferenceName}`,w=T.useMemo(()=>{const W=wr([{...e,branches:c.map($=>({...$,steps:[]}))}],r)[e.taskReferenceName]||[],P=(l.issues[e.taskReferenceName]||[]).filter($=>!W.some(X=>X.message===$.message));return[...W,...P]},[e,c,r,l.issues]),I=w.find(W=>W.field&&W.field===j),C=l.focusRequest;T.useEffect(()=>{if(!C)return;const W=c.find(P=>An(P.steps,C.ref));W&&u(W.caseKey)},[C?.nonce]);const N=(W,P)=>{s({...e,branches:c.map($=>$.caseKey===W?{...$,steps:P}:$)})},O=()=>{const W=p.trim();if(!W){x("请填写分支标识,例如 VIP");return}if(W===Gt||c.some(X=>X.caseKey===W)){x(`分支「${W}」已存在,请换一个标识`);return}const P=c.filter(X=>X.caseKey!==Gt),$=c.filter(X=>X.caseKey===Gt);s({...e,branches:[...P,{caseKey:W,caseLabel:`分支: ${W}`,steps:[]},...$]}),u(W),f(""),x(""),h(!1)},E=()=>{h(!1),f(""),x("")},R=async W=>{const P=W.steps.reduce((D,B)=>D+1+Qs(B),0),$=`删除分支「${W.caseKey}」${P>0?`及其中的 ${P} 个步骤`:""}?删除后可按 Ctrl+Z 撤销。`;if(!await v($,"删除分支"))return;const X=c.filter(D=>D.caseKey!==W.caseKey);s({...e,branches:X}),d===W.caseKey&&u(X[0]?.caseKey||Gt)},L=()=>{if(!k)return;const W=k;a(P=>N(W.caseKey,[...W.steps,ir(P)]),{label:`${mk(W.caseKey)} · 第 ${W.steps.length+1} 步`})},H=W=>{if(W==="expression"&&!S)s({...e,caseExpression:""});else if(W==="param"&&S){const P=e.caseParam||lp;s({...e,caseExpression:void 0,caseParam:P,values:{[P]:"",...e.values}})}},F=W=>{const P={...e.values},$=j?P[j]:void 0;j&&delete P[j],W&&(P[W]=$??""),s({...e,caseParam:W,values:P})},q=c.reduce((W,P)=>W+(P.steps?.length||0),0),A=(W,P)=>{const $=W==="expression"===S;return o.jsx("button",{type:"button","aria-pressed":$,disabled:n,onClick:()=>H(W),style:{padding:"3px 10px",borderRadius:4,border:"none",background:$?"var(--color-accent)":"transparent",color:$?"var(--color-on-accent)":"var(--text-secondary)",fontSize:11,fontWeight:600,cursor:n?"default":"pointer"},children:P})};return o.jsxs("div",{style:{borderRadius:12,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",boxShadow:"var(--cm-shadow-float)",overflow:"hidden",transition:"all 0.2s ease"},children:[o.jsxs("div",{style:{padding:"12px 16px",background:"var(--bg-tertiary)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:10},children:[o.jsx("div",{style:{width:32,height:32,borderRadius:8,background:"color-mix(in srgb, var(--cm-ai) 15%, transparent)",color:"color-mix(in srgb, var(--cm-ai) 85%, var(--text-primary))",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:o.jsx(Mr,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsxs("div",{style:{minWidth:0,flex:1},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[o.jsx(ap,{value:e.name,fallback:"条件分支路由",disabled:n,onRename:W=>s({...e,name:W})}),o.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:4,background:"color-mix(in srgb, var(--cm-ai) 12%, transparent)",color:"color-mix(in srgb, var(--cm-ai) 85%, var(--text-primary))",fontWeight:600,border:"1px solid color-mix(in srgb, var(--cm-ai) 30%, transparent)",fontFamily:"var(--cm-font-mono, monospace)"},children:b?"SWITCH":"DECISION"})]}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["共 ",c.length," 个分支(含默认分支),分支内共 ",q," 个步骤"]})]})]}),o.jsxs("div",{style:{padding:"10px 16px",background:"var(--bg-primary)",borderBottom:"1px solid var(--border-primary)",display:"flex",flexDirection:"column",gap:8},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[o.jsx("span",{style:{fontSize:12,fontWeight:600,color:"var(--text-primary)"},children:"判断依据"}),o.jsxs("span",{role:"group","aria-label":"判断方式",style:{display:"inline-flex",background:"var(--bg-highlight)",borderRadius:6,padding:2,border:"1px solid var(--border-secondary)"},children:[A("param","按数据取值"),A("expression","按表达式")]})]}),S?o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{htmlFor:`${_}-expr`,style:{fontSize:11,color:"var(--text-muted)"},children:"判断表达式(JavaScript,结果与各分支标识比较,相同则执行该分支)"}),o.jsx("textarea",{id:`${_}-expr`,disabled:n,rows:2,value:e.caseExpression??"",placeholder:b?'例如 $.amount > 100 ? "big" : "small"':'例如 $.env == "prod" ? "prod" : "test"',onChange:W=>s({...e,caseExpression:W.target.value}),style:{...hp,resize:"vertical",width:"100%",boxSizing:"border-box"}})]}):o.jsxs("div",{style:{display:"flex",gap:10,alignItems:"flex-start",flexWrap:"wrap"},children:[o.jsxs("div",{style:{flex:1,minWidth:220,display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{htmlFor:`${_}-value`,style:{fontSize:11,color:"var(--text-muted)"},children:"判断取值(运行时与各分支标识比较,都不相同时执行默认分支)"}),o.jsx(Gs,{id:`${_}-value`,disabled:n||!j,invalid:!!I,value:j?e.values?.[j]??"":"",placeholder:"插入要判断的数据,例如上游步骤的状态或全局入参",upstreamSteps:t,registry:r,onChange:W=>s({...e,values:{...e.values,[j]:W}})})]}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsx("label",{htmlFor:`${_}-param`,style:{fontSize:11,color:"var(--text-muted)"},children:"参数名"}),o.jsx("input",{id:`${_}-param`,type:"text",disabled:n,value:j,placeholder:"如 userType",onChange:W=>F(W.target.value.trim()),style:{...hp,width:120}})]})]}),o.jsx(Ys,{issues:w})]}),o.jsxs("div",{style:{padding:"8px 16px",background:"var(--bg-primary)",borderBottom:"1px solid var(--border-primary)",display:"flex",gap:6,flexWrap:"wrap",alignItems:"center"},children:[o.jsx("span",{style:{fontSize:11,color:"var(--text-muted)",marginRight:4},children:"分支列表:"}),c.map(W=>{const P=W.caseKey===d,$=W.caseKey===Gt;return o.jsxs("span",{style:{borderRadius:6,background:P?"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 15%, transparent))":"var(--bg-secondary)",border:`1px solid ${P?"var(--color-accent)":"var(--border-primary)"}`,display:"inline-flex",alignItems:"center"},children:[o.jsxs("button",{type:"button","aria-pressed":P,onClick:()=>u(W.caseKey),style:{padding:"4px 10px",background:"none",border:"none",cursor:"pointer",fontSize:12,fontWeight:P?600:400,color:P?"var(--color-accent-text)":"var(--text-secondary)",display:"inline-flex",alignItems:"center",gap:6,fontFamily:"inherit"},children:[$?o.jsx(nT,{size:14,strokeWidth:1.75,"aria-hidden":"true"}):o.jsx(vr,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:$?"默认分支":W.caseKey}),o.jsx("span",{style:{fontSize:10,padding:"0 4px",borderRadius:8,background:P?"var(--color-accent)":"var(--bg-tertiary)",color:P?"var(--color-on-accent)":"var(--text-muted)"},"aria-label":`${W.steps?.length||0} 个步骤`,children:W.steps?.length||0})]}),!n&&!$&&o.jsx(Kt,{label:`删除分支 ${W.caseKey}`,onClick:()=>R(W),children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]},W.caseKey)}),!n&&!m&&o.jsxs("button",{type:"button",onClick:()=>h(!0),style:{padding:"4px 8px",borderRadius:6,background:"transparent",border:"1px dashed var(--border-secondary)",color:"var(--text-muted)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(tr,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),"新增分支"]}),!n&&m&&o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4,flexWrap:"wrap"},children:[o.jsx("input",{autoFocus:!0,type:"text","aria-label":"分支标识",value:p,placeholder:"分支标识,如 VIP",onChange:W=>{f(W.target.value),y&&x("")},onKeyDown:W=>{W.key==="Enter"&&O(),W.key==="Escape"&&E()},style:{...hp,border:"1px solid var(--color-accent)",width:120}}),o.jsx("button",{type:"button",onClick:O,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontSize:11,cursor:"pointer"},children:"添加分支"}),o.jsx("button",{type:"button",onClick:E,style:{padding:"3px 6px",background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:11},children:"取消"}),y&&o.jsx("span",{role:"alert",style:{fontSize:11,color:"var(--cm-status-failed)"},children:y})]})]}),o.jsx("div",{style:{padding:"14px 16px",background:"var(--bg-primary)"},children:k?o.jsxs("div",{children:[o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginBottom:10,display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[o.jsxs("span",{children:[o.jsx(Hj,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),k.caseKey===Gt?o.jsx(o.Fragment,{children:"判断取值与所有分支标识都不相同时,依次执行以下步骤:"}):o.jsxs(o.Fragment,{children:["判断结果为 ",o.jsx("strong",{children:k.caseKey})," 时,依次执行以下步骤:"]})]}),!n&&o.jsxs("button",{type:"button",onClick:L,style:{padding:"3px 8px",borderRadius:4,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 12%, transparent))",border:"1px solid var(--color-accent)",color:"var(--color-accent-text)",fontSize:11,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4,fontWeight:500,flexShrink:0},children:[o.jsx(tr,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"追加分支步骤"})]})]}),k.steps.length===0?o.jsx("div",{style:{padding:"24px 16px",borderRadius:8,border:"1px dashed var(--border-secondary)",textAlign:"center",color:"var(--text-muted)",fontSize:12,background:"var(--bg-secondary)"},children:k.caseKey===Gt?"默认分支暂无步骤:未命中任何分支时直接跳过,继续执行后续步骤":"当前分支暂无步骤,点击「追加分支步骤」配置"}):o.jsx(mp,{steps:k.steps,onStepsChange:W=>N(k.caseKey,W),upstreamSteps:t,registry:r,disabled:n,depth:i,onOpenInsertModal:a,rowTone:"secondary",insertLabel:mk(k.caseKey)})]}):o.jsx("div",{style:{textAlign:"center",color:"var(--text-muted)",fontSize:12},children:"请选择或新增一个分支进行配置"})}),o.jsxs("div",{style:{padding:"6px 14px",background:"var(--bg-tertiary)",borderTop:"1px solid var(--border-primary)",fontSize:10,color:"var(--text-muted)",display:"flex",alignItems:"center",gap:4},children:[o.jsx(Is,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"运行时只执行命中的一个分支,其余分支的步骤会被跳过。"})]}),g.confirmState&&o.jsx(qt,{message:g.confirmState.message,confirmLabel:g.confirmState.confirmLabel,onConfirm:g.handleConfirm,onCancel:g.handleCancel})]})};function gp(e,t,r){const n=(e||"").toLowerCase();return t===401||t===403||n.includes("401")||n.includes("403")||n.includes("unauthorized")||n.includes("forbidden")||n.includes("token expired")||n.includes("invalid api key")||n.includes("signature does not match")?{type:"auth",title:"云平台账号授权已失效或权限受限",explanation:`在调用【${r||"云服务"}】时未通过安全身份核验。通常是因为配置的账号密钥 (AccessKey/Token) 已过期失效,或该账号缺乏对应资源的操作授权。`,suggestion:"建议检查账号授权状态,重新填入有效密钥或联系企业管理员为该账号分配权限。",actionLabel:"重新授权密钥",actionKey:"reauth"}:t===504||n.includes("timeout")||n.includes("timed out")||n.includes("etimedout")||n.includes("deadline")||n.includes("connection refused")?{type:"timeout",title:"目标云主机响应超时",explanation:`向【${r||"主机"}】发送指令后,在约定的时间内未收到回应。可能是云主机刚开机系统服务尚未就绪,或所在子网的安全组策略拦截了通信端口。`,suggestion:"云服务正在进行底层引导,通常稍等片刻自动重试即可恢复。",actionLabel:"稍后自动重试",actionKey:"retry"}:n.includes("exit code")||n.includes("command failed")||n.includes("command not found")||n.includes("syntax error")?{type:"script_fail",title:"主机内部脚本执行异常退出",explanation:"下发到云主机内部的 Shell/Python 脚本在运行过程中遇到错误并提前中断。通常是因为目标环境中缺少前置依赖库,或指定的文件路径不存在。",suggestion:"可展开下方查看脚本的标准输出日志排查具体报错,修正脚本后重新执行。",actionLabel:"查看脚本输出日志",actionKey:"inspect_upstream"}:n.includes("nullpointer")||n.includes("cannot read property")||n.includes("undefined")||n.includes("field not found")||n.includes("parameter not found")||n.includes("missing required parameter")?{type:"missing_data",title:"缺少必要的上游输入数据",explanation:"本步骤引用的上游步骤没有返回预期的数据内容(例如没有获取到有效的「主机实例ID」或「内网IP」),导致后续步骤无法继续执行。",suggestion:"请点击检查上游步骤的输出结果,确认上游任务是否正常产生了所需的数据胶囊。",actionLabel:"查看上游步骤数据",actionKey:"inspect_upstream"}:n.includes("quota")||n.includes("limit exceeded")||n.includes("insufficient")||n.includes("out of stock")||n.includes("balance")?{type:"quota",title:"可用区资源库存不足或配额受限",explanation:"当前所选可用区该型号的云主机规格暂时售罄,或云平台租户的配额上限已满。",suggestion:"建议在流程中更换目标规格(如选择通用型或计算型同等配置),或申请提升账号配额。",actionLabel:"更换规格/可用区",actionKey:"change_spec"}:n.includes("network")||n.includes("dns")||n.includes("unreachable")||n.includes("failed to fetch")?{type:"network",title:"网络通信中断或无法解析",explanation:"调度服务与目标云服务之间的网络连接不稳定,或专有网络 VPC 路由未打通。",suggestion:"请检查网络连通性配置,或联系网络运维人员协助排查。",actionLabel:"重新尝试连接",actionKey:"retry"}:{type:"unknown",title:"步骤执行未达预期",explanation:e||"执行过程中底层服务报告了非成功状态,请查阅详细日志。",suggestion:"可点击重试此步骤,或将此诊断报告反馈给技术支持排查。",actionLabel:"重试此任务",actionKey:"retry"}}const hk=({rawError:e,statusCode:t,taskName:r,onActionClick:n})=>{const[s,a]=T.useState(!1),i=gp(e,t,r);return o.jsxs("div",{style:{borderRadius:10,background:"color-mix(in srgb, var(--cm-status-failed) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-failed) 30%, transparent)",padding:"14px 16px",display:"flex",flexDirection:"column",gap:10,fontFamily:"inherit"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{style:{display:"inline-flex",color:"var(--status-failed)"},children:T.createElement(i.type==="auth"?rb:i.type==="timeout"?Cu:i.type==="missing_data"?tt:i.type==="quota"?sT:Yv,{size:18,strokeWidth:1.75,"aria-hidden":!0})}),o.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--status-failed)"},children:i.title})]}),i.actionLabel&&n&&o.jsxs("button",{onClick:()=>n(i.actionKey),style:{padding:"4px 10px",borderRadius:6,background:"color-mix(in srgb, var(--status-failed) 15%, transparent)",border:"1px solid color-mix(in srgb, var(--status-failed) 30%, transparent)",color:"var(--status-failed)",fontSize:11,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx("span",{children:o.jsx(Ot,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:i.actionLabel})]})]}),o.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.6},children:i.explanation}),o.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",fontSize:11,color:"var(--color-warning)",lineHeight:1.5},children:[o.jsx(Is,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginRight:4}}),o.jsx("strong",{children:"建议做法"}),":",i.suggestion]}),e&&o.jsxs("div",{style:{marginTop:2},children:[o.jsx("button",{onClick:()=>a(!s),style:{background:"none",border:"none",color:"var(--text-muted)",fontSize:10,cursor:"pointer",padding:0,display:"inline-flex",alignItems:"center",gap:4},children:o.jsx("span",{children:s?"▾ 折叠底层技术报错":"▸ 展开底层技术报错 (供研发/技术支持排查)"})}),s&&o.jsx("div",{style:{marginTop:6,padding:"8px 10px",borderRadius:4,background:"var(--cm-surface-0)",color:"var(--text-muted)",fontFamily:"monospace",fontSize:10,lineHeight:1.4,maxHeight:120,overflowY:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:e})]})]})},Yt=e=>e!=null&&e!=="",Ge=e=>typeof e=="object"?JSON.stringify(e):String(e);function G2(e){switch(e){case"COMPLETED":return null;case"COMPLETED_WITH_ERRORS":return"已完成,但有部分错误,请查看数据。";case"FAILED":case"FAILED_WITH_TERMINAL_ERROR":return"运行在此步骤中断,原因见下方诊断。";case"TIMED_OUT":return"此步骤已超时,原因见下方诊断。";case"IN_PROGRESS":return"正在执行。";case"SCHEDULED":return"等待执行。";case"SKIPPED":return"已跳过此步骤。";case"CANCELED":return"此步骤已取消。";default:return`状态:${rt(e).label}。`}}function Y2(e,t){const r=e.inputData?.joinOn;if(!Array.isArray(r)||r.length===0)return"并行分支已汇合。";const n=d=>{const u=t.filter(p=>p.referenceTaskName===d);return u[u.length-1]},a=r.map(d=>n(d)?.status).filter(d=>!!d),i=a.filter(d=>rt(d).isFailure).length,l=a.filter(d=>d==="COMPLETED").length;let c="";return a.length===r.length&&l===r.length?c=",全部成功":i>0?c=`,其中 ${i} 个失败`:a.length<r.length&&(c=`,${r.length-a.length} 个没有运行记录`),`${r.length} 个并行分支已汇合${c}。`}function X2(e,t={}){const r=G2(e.status);if(r)return r;const n=e.outputData??{},{actionId:s}=t,a=t.actionName||e.taskDefName||e.referenceTaskName,i=(l,c)=>l+c.filter(([d])=>Yt(d)).map(([d,u])=>u(d)).join("")+"。";switch(s){case"ecs.create_instance":return i("已创建云主机",[[n.instanceId,l=>`,实例 ID ${Ge(l)}`],[n.privateIp,l=>`,内网 IP ${Ge(l)}`]]);case"ecs.query_instance":return i("已查询主机状态",[[n.status,l=>`:${Ge(l)}`],[n.publicIp,l=>`,公网 IP ${Ge(l)}`]]);case"ecs.run_command":{const l=n.exitCode;return i("远程命令已执行",[[n.commandId,c=>`,命令批次 ${Ge(c)}`],[l,c=>Number(c)===0?",退出码 0":`,退出码 ${Ge(c)}(非 0,请查看输出)`]])}case"ecs.create_snapshot":return i("已创建快照",[[n.snapshotId,l=>`,快照 ID ${Ge(l)}`]]);case"ecs.stop_instance":return i("已关闭云主机",[[n.status,l=>`,当前状态 ${Ge(l)}`]]);case"ecs.start_instance":return i("已启动云主机",[[n.status,l=>`,当前状态 ${Ge(l)}`]]);case"ecs.modify_spec":return Yt(n.oldSpec)&&Yt(n.newSpec)?`已变更规格(${Ge(n.oldSpec)} → ${Ge(n.newSpec)})。`:i("已变更规格",[[n.newSpec,l=>`为 ${Ge(l)}`]]);case"ecs.get_monitor_metrics":{const c=[[n.cpuUsagePercent,d=>`CPU 利用率 ${Ge(d)}%`],[n.memoryUsagePercent,d=>`内存利用率 ${Ge(d)}%`]].filter(([d])=>Yt(d)).map(([d,u])=>u(d));return c.length?`采集到负载:${c.join(",")}。`:"已采集监控指标。"}case"notify.send_message":return i("已发送通知",[[n.status,l=>`,状态 ${Ge(l)}`]])}if(s==="control.wait"||e.taskType==="WAIT")return"等待结束。";if(s==="human.approval"||e.taskType==="HUMAN"){const l=Yt(n.reviewer)?`${Ge(n.reviewer)} `:"";return n.approved===!1?`${l}已驳回${Yt(n.comment)?`:${Ge(n.comment)}`:""}。`:n.approved===!0?`${l}已批准${Yt(n.comment)?`:${Ge(n.comment)}`:""}。`:`${l?`${l}已处理`:"人工步骤已完成"}。`}if(e.taskType==="DECISION"||e.taskType==="SWITCH"){const l=Array.isArray(n.evaluationResult)?n.evaluationResult[0]:void 0,c=n.selectedCase??l??n.caseOutput??n.case;return Yt(c)?`条件判断命中分支 ${Ge(c)}。`:"已完成条件判断。"}if(e.taskType==="FORK_JOIN"||e.taskType==="FORK_JOIN_DYNAMIC"||e.taskType==="FORK"){const l=e.inputData?.forkedTasks,c=Array.isArray(l)?l.length:void 0;return c?`已启动 ${c} 个并行分支。`:"已启动并行分支。"}if(e.taskType==="JOIN")return Y2(e,t.allTasks??[]);if(e.taskType==="DO_WHILE"){const l=e.iteration??n.iteration;return Yt(l)?`循环结束,共执行 ${Ge(l)} 轮。`:"循环已结束。"}return`${a} 已完成。`}function Z2(e){const t=rt(e.status),r={COMPLETED:"全部步骤已完成",FAILED:"运行失败",TIMED_OUT:"运行已超时",TERMINATED:"运行已终止",RUNNING:"正在运行",PAUSED:"运行已暂停"},n=e.startTime,s=e.endTime;return{title:r[t.status]??`运行状态:${t.label}`,tone:t.tone,durationSec:n&&s&&s>=n?((s-n)/1e3).toFixed(1):void 0}}const yk=({instance:e,registry:t=Ze,onInspectStep:r,onErrorAction:n})=>{const[s,a]=T.useState({}),i=f=>{a(m=>({...m,[f]:!m[f]}))},l=e.tasks||[],c=Z2(e),d=rt(e.status),u=d.color,p=(f,m,h)=>{if(h){if(h==="inspect_upstream"){const y=l.slice(0,m).reverse().find(x=>x.referenceTaskName);return!r||!y?void 0:()=>r(y.referenceTaskName)}if(n)return()=>n(h,f.referenceTaskName)}};return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16,padding:"16px 20px",background:"var(--bg-primary)",height:"100%",overflowY:"auto",fontFamily:"inherit"},children:[o.jsxs("div",{style:{padding:"12px 18px",borderRadius:10,background:`color-mix(in srgb, ${u} 10%, transparent)`,border:`1px solid color-mix(in srgb, ${u} 30%, transparent)`,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[T.createElement(d.icon,{size:22,strokeWidth:1.75,"aria-hidden":!0,style:{color:u}}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:700,fontSize:14,color:u},children:c.title}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:["执行 ID: ",o.jsx("span",{style:{fontFamily:"var(--cm-font-mono)"},children:e.workflowId})," · 共 ",l.length," 个步骤",c.durationSec!==void 0&&` · 总耗时约 ${c.durationSec} 秒`]})]})]}),o.jsx("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:4,fontWeight:600,background:`color-mix(in srgb, ${u} 15%, transparent)`,color:u},title:e.status,children:d.label})]}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12},children:l.map((f,m)=>{const h=f.workflowTask?.inputParameters?._actionId,y=h?t.getAction(h):void 0,x=y?.icon||(f.taskType==="DECISION"||f.taskType==="SWITCH"?"shuffle":f.taskType==="FORK_JOIN"||f.taskType==="FORK_JOIN_DYNAMIC"?"zap":f.taskType==="JOIN"?"merge":f.taskType==="DO_WHILE"?"repeat":f.taskType==="WAIT"?"hourglass":f.taskType==="HUMAN"?"user":"settings"),g=rt(f.status),v=g.isFailure,k=!!s[f.referenceTaskName],b=y?.name||f.taskDefName||f.referenceTaskName,S=X2(f,{actionId:h,actionName:y?.name,allTasks:l}),j=f.reasonForIncompletion||(v?`步骤状态为 ${f.status},没有返回失败原因`:void 0),_=v?gp(j,void 0,b).actionKey:void 0,w=p(f,m,_),I=f.startTime?new Date(f.startTime).toLocaleTimeString():"--:--:--",C=f.endTime&&f.startTime?`${((f.endTime-f.startTime)/1e3).toFixed(2)}s`:"";return o.jsxs("div",{style:{borderRadius:10,background:"var(--bg-secondary)",border:v?"1px solid var(--status-failed)":"1px solid var(--border-primary)",boxShadow:v?"0 4px 16px color-mix(in srgb, var(--cm-status-failed) 12%, transparent)":"none",padding:"12px 16px",display:"flex",flexDirection:"column",gap:8},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[g.status==="COMPLETED"?o.jsx(We,{name:x,size:18}):T.createElement(g.icon,{size:18,strokeWidth:1.75,"aria-hidden":!0,style:{color:g.color}}),o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsxs("span",{style:{fontWeight:600,fontSize:13,color:"var(--text-primary)"},children:["步骤 #",m+1,": ",b]}),o.jsxs("span",{style:{fontSize:10,padding:"1px 5px",borderRadius:3,background:`color-mix(in srgb, ${g.color} 15%, transparent)`,color:g.color,fontWeight:600,display:"inline-flex",alignItems:"center",gap:3},title:f.status,children:[T.createElement(g.icon,{size:10,strokeWidth:1.75,"aria-hidden":!0}),g.label]})]}),o.jsxs("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:[I," ",C&&`· 耗时 ${C}`]})]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[r&&o.jsx("button",{onClick:()=>r(f.referenceTaskName),style:{padding:"2px 8px",borderRadius:4,background:"transparent",border:"1px solid var(--border-secondary)",color:"var(--text-secondary)",fontSize:11,cursor:"pointer"},children:"定位步骤"}),o.jsx("button",{onClick:()=>i(f.referenceTaskName),style:{background:"none",border:"none",color:"var(--text-muted)",fontSize:11,cursor:"pointer"},children:k?"收起数据 ▴":"查看数据 ▾"})]})]}),o.jsx("div",{style:{fontSize:12,color:v?"var(--status-failed)":"var(--text-secondary)",lineHeight:1.5,padding:"4px 0"},children:S}),v&&o.jsx("div",{style:{marginTop:4},children:o.jsx(hk,{rawError:j,taskName:b,onActionClick:w})}),k&&f.outputData&&o.jsx("div",{style:{marginTop:8,padding:"10px 12px",borderRadius:8,background:"var(--bg-tertiary)",border:"1px solid var(--border-primary)",display:"flex",flexWrap:"wrap",gap:8},children:Object.entries(f.outputData).map(([N,O])=>typeof O=="object"&&O!==null?null:o.jsxs("span",{style:{fontSize:11,padding:"3px 8px",borderRadius:6,background:"var(--color-accent-bg, color-mix(in srgb, var(--color-accent) 12%, transparent))",border:"1px solid color-mix(in srgb, var(--color-accent) 30%, transparent)",display:"inline-flex",alignItems:"center",gap:6,fontFamily:"monospace"},children:[o.jsxs("span",{style:{color:"var(--text-muted)"},children:[N,":"]}),o.jsx("span",{style:{color:"var(--color-accent-text)",fontWeight:600},children:String(O)})]},N))})]},f.taskId||f.referenceTaskName||m)})})]})},Q2=100,eC=e=>{const t=e;return!!t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT"||t.isContentEditable)},gk={decision:{text:"控制流分支",color:"color-mix(in srgb, var(--cm-ai) 75%, var(--text-primary))"},fork:{text:"并发泳道组",color:"var(--color-accent-text)"},loop:{text:"循环迭代体",color:"var(--color-accent-text)"}},xk=({workflowDef:e,onChange:t,registry:r=Ze,readOnly:n=!1,workflowExecution:s,libraryCatalog:a,currentWorkflowLevel:i,onAskAi:l,onStepAdded:c,onSandboxRun:d,onSave:u,onUndo:p,onRedo:f,validationResults:m})=>{const h=T.useMemo(()=>U1(e,r),[e,r]),[y,x]=T.useState(null),[g,v]=T.useState(null),[k,b]=T.useState(null),{confirm:S,confirmState:j,handleConfirm:_,handleCancel:w}=gn(),[I,C]=T.useState(!1),[N,O]=T.useState(null),[E,R]=T.useState(s||null),[L,H]=T.useState(s?"story":"steps");T.useEffect(()=>{s&&(R(s),H("story"))},[s]);const F=h.steps,q=T.useMemo(()=>{const V=wr(F,r);return M2(V,m??(e?Et(e):null))},[F,r,m,e]),A=T.useMemo(()=>{if(!N)return;const V={};for(const[ee,z]of Object.entries(N))V[ee]=z.status;return V},[N]),W=T.useRef({past:[],future:[]}),P=V=>{if(e){const ee=W.current;ee.past.push(e),ee.past.length>Q2&&ee.past.shift(),ee.future=[]}t(V)},$=T.useCallback(()=>{if(p)return p();const V=W.current,ee=V.past.pop();ee&&(e&&V.future.push(e),t(ee))},[p,t,e]),X=T.useCallback(()=>{if(f)return f();const V=W.current,ee=V.future.pop();ee&&(e&&V.past.push(e),t(ee))},[f,t,e]);T.useEffect(()=>{const V=ee=>{if(!(ee.metaKey||ee.ctrlKey))return;const Ie=ee.key.toLowerCase();if(Ie==="s"){if(!u||!e)return;ee.preventDefault(),u(e);return}n||eC(ee.target)||g||j||(Ie==="z"&&!ee.shiftKey?(ee.preventDefault(),$()):(Ie==="z"&&ee.shiftKey||Ie==="y")&&(ee.preventDefault(),X()))};return window.addEventListener("keydown",V),()=>window.removeEventListener("keydown",V)},[u,e,n,$,X,g,j]);const D=V=>{P(H1({...h,steps:V},r))},B=(V,ee)=>{const z=[...F];z[V]=ee,D(z)},U=async V=>{if(n)return;const ee=F[V];ee&&await S(pk(ee,r),"删除")&&(y===ee.id&&x(null),D(F.filter((z,Ie)=>Ie!==V)))},G=(V,ee)=>{if(n||ee<0||ee>=F.length)return;const z=[...F],[Ie]=z.splice(V,1);z.splice(ee,0,Ie),D(z)},ne=(V,ee)=>{v({index:0,label:ee?.label,callback:V})},ye=V=>{if(!g)return;c?.({source:V.kind==="workflow"?"library":"builtin"});const{callback:ee,index:z}=g;if(v(null),ee){ee(V);return}const Ie=ir(V),ke=[...F];ke.splice(z,0,Ie),x(Ie.id),D(ke)},Q=V=>{H("steps");const ee=F.find(z=>z.taskReferenceName===V);if(ee)ee.controlType||x(ee.id);else if(!F.some(z=>An([z],V)))return;b(z=>({ref:V,nonce:(z?.nonce??0)+1})),requestAnimationFrame(()=>document.getElementById(or(V))?.scrollIntoView({behavior:"smooth",block:"center"}))},_e=async()=>{if(e){C(!0);try{const V={},ee=ke=>{for(const Ne of ke){const Te=r.getAction(Ne.actionId);Te&&Te.mockOutput&&(V[Ne.taskReferenceName]=Te.mockOutput(Ne.values));for(const Se of Ne.branches||[])ee(Se.steps);for(const Se of Ne.forkLanes||[])ee(Se.steps);ee(Ne.loopSteps||[])}};ee(F);const z=await cn(e,{taskMocks:V});R(z),H("story");const Ie={};for(const ke of z.tasks)Ie[ke.referenceTaskName]={status:ke.status,output:ke.outputData};O(Ie),d?.(String(z.status))}catch(V){console.error("[StepFlowEditor] Dry run error:",V),d?.("error")}finally{C(!1)}}},ve={workflowInputParams:h.inputParameters,issues:q,runStatus:A,confirm:S,libraryCatalog:a,allSteps:F,focusRequest:k},je=Object.values(q).flat().filter(V=>V.level==="error").length,fe=V=>!n&&o.jsx(sp,{onClick:()=>v({index:V}),label:"插入业务动作"});return o.jsx(K1.Provider,{value:ve,children:o.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",width:"100%",background:"var(--bg-primary)",overflowY:"auto",fontFamily:"inherit"},children:[o.jsxs("div",{style:{padding:"12px 20px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-secondary)",flexShrink:0,gap:10,flexWrap:"wrap"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx("span",{style:{fontSize:18},children:o.jsx(We,{name:"clipboard",size:16})}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary)"},children:h.name||"云平台业务流程"}),o.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)",display:"flex",alignItems:"center",gap:8},children:[o.jsxs("span",{children:["共 ",F.length," 个业务执行步骤 · 普通用户零代码模式"]}),je>0&&o.jsx($n,{issues:Object.values(q).flat()})]})]})]}),E&&o.jsxs("div",{role:"group","aria-label":"视图",style:{display:"inline-flex",background:"var(--bg-highlight)",borderRadius:6,padding:2,border:"1px solid var(--border-secondary)"},children:[o.jsxs("button",{type:"button","aria-pressed":L==="steps",onClick:()=>H("steps"),style:{padding:"4px 10px",borderRadius:4,border:"none",background:L==="steps"?"var(--color-accent)":"transparent",color:L==="steps"?"var(--color-on-accent)":"var(--text-secondary)",fontSize:11,fontWeight:600,cursor:"pointer"},children:[o.jsx(We,{name:"clipboard",size:14,style:{verticalAlign:-2,marginRight:4}}),"步骤配置"]}),o.jsxs("button",{type:"button","aria-pressed":L==="story",onClick:()=>H("story"),style:{padding:"4px 10px",borderRadius:4,border:"none",background:L==="story"?"var(--color-accent)":"transparent",color:L==="story"?"var(--color-on-accent)":"var(--text-secondary)",fontSize:11,fontWeight:600,cursor:"pointer"},children:[o.jsx(We,{name:"book",size:14,style:{verticalAlign:-2,marginRight:4}}),"运行故事线 (",E.tasks.length," 步)"]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[N&&o.jsx("button",{type:"button",onClick:()=>O(null),style:{padding:"5px 10px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary)",color:"var(--text-muted)",fontSize:12,cursor:"pointer"},children:"清除试跑结果"}),o.jsx("button",{type:"button",onClick:()=>{_e()},disabled:I||F.length===0,title:je>0?`还有 ${je} 项待修正,试跑结果可能与真实运行不同`:void 0,style:{padding:"6px 14px",borderRadius:6,background:"color-mix(in srgb, var(--color-success) 20%, transparent)",border:"1px solid color-mix(in srgb, var(--color-success) 45%, transparent)",color:"var(--color-success)",fontSize:12,fontWeight:600,cursor:I||F.length===0?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6,transition:"all 0.15s ease"},children:o.jsx("span",{children:I?"模拟中...":"浏览器本地试跑 (零风险)"})})]})]}),L==="story"&&E?o.jsx("div",{style:{flex:1,overflowY:"auto"},children:o.jsx(yk,{instance:E,registry:r,onInspectStep:Q})}):o.jsxs("div",{style:{flex:1,maxWidth:820,width:"100%",margin:"0 auto",padding:"24px 20px",display:"flex",flexDirection:"column",gap:16,boxSizing:"border-box"},children:[F.length===0&&o.jsxs("div",{style:{textAlign:"center",padding:"60px 20px",background:"var(--bg-secondary)",borderRadius:12,border:"1px dashed var(--border-secondary)",display:"flex",flexDirection:"column",alignItems:"center",gap:14},children:[o.jsx("span",{style:{display:"inline-flex",color:"var(--color-accent)"},children:o.jsx(We,{name:"zap",size:36})}),o.jsx("div",{style:{fontWeight:600,fontSize:16,color:"var(--text-primary)"},children:"尚未添加任何业务动作"}),o.jsx("p",{style:{fontSize:13,color:"var(--text-secondary)",maxWidth:420,margin:0},children:"无需编写代码或配置复杂的 JSON,点击下方按钮选择第一个云主机业务动作,即可开始自动化编排。"}),o.jsxs("button",{type:"button",disabled:n,onClick:()=>v({index:0}),style:{marginTop:8,padding:"8px 18px",borderRadius:8,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontWeight:600,fontSize:13,cursor:n?"not-allowed":"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[o.jsx("span",{children:"+"}),o.jsx("span",{children:"添加第一个业务动作"})]})]}),F.length>0&&!n&&o.jsx(sp,{onClick:()=>v({index:0}),label:"在最前插入步骤"}),F.map((V,ee)=>{const z=r.getAction(V.actionId),Ie=y===V.id,ke=F.slice(0,ee),Ne=Vs(V,q);if(V.controlType){const Me=gk[V.controlType]??gk.decision,Ve={step:V,upstreamSteps:ke,registry:r,disabled:n,onChange:Z=>B(ee,Z),onOpenInsertModal:ne};return o.jsxs(T.Fragment,{children:[o.jsxs("div",{id:or(V.taskReferenceName),style:{display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 4px",gap:8},children:[o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:8},children:[o.jsxs("span",{style:{fontSize:12,fontWeight:700,color:Me.color},children:["#",ee+1," ",Me.text]}),o.jsx($n,{issues:Ne}),o.jsx(np,{status:A?.[V.taskReferenceName]})]}),!n&&o.jsx("span",{style:{display:"inline-flex",alignItems:"center"},children:o.jsx(Xs,{index:ee,count:F.length,onMove:Z=>G(ee,Z),onDelete:()=>U(ee)})})]}),V.controlType==="fork"?o.jsx(pp,{...Ve}):V.controlType==="loop"?o.jsx(fp,{...Ve}):o.jsx(yp,{...Ve})]}),fe(ee+1)]},V.id)}const Te=`${or(V.taskReferenceName)}-body`,Se=z?.name||V.taskReferenceName,le=V.name||Se,Ce=!!z&&le!==z.name;return o.jsxs(T.Fragment,{children:[o.jsxs("div",{id:or(V.taskReferenceName),style:{background:"var(--bg-secondary)",borderRadius:10,border:Ie?"1px solid var(--color-accent)":"1px solid var(--border-primary)",boxShadow:Ie?"0 8px 24px color-mix(in srgb, var(--color-accent) 15%, transparent)":"var(--cm-shadow-card)",overflow:"hidden",transition:"all 0.2s ease"},children:[o.jsx(Z1,{bodyId:Te,indexLabel:`#${ee+1}`,icon:z?.icon,title:le,subtitle:Ce?z?.name:z?.description||V.description||V.taskReferenceName,defaultTitle:Se,expanded:Ie,onToggle:()=>x(Ie?null:V.id),disabled:n,onRename:V.isProFallback?void 0:Me=>B(ee,{...V,name:Me}),badges:o.jsxs(o.Fragment,{children:[z?.riskLevel==="sensitive"&&o.jsx(Y1,{}),o.jsx(ck,{step:V,action:z,disabled:n,catalog:a,getReferencedOutputs:()=>dp(V.taskReferenceName,F.filter(Me=>Me.id!==V.id)),onUpgrade:(Me,Ve)=>B(ee,{...V,libraryRef:{name:V.libraryRef.name,version:Me},...Ve?{values:up(V.values,Ve)}:{}})}),o.jsx($n,{issues:Ne}),o.jsx(np,{status:A?.[V.taskReferenceName]})]}),actions:o.jsxs(o.Fragment,{children:[l&&o.jsx(Kt,{label:"让 AI 介绍这个步骤的作用与配置建议",onClick:()=>l(V),children:o.jsx(Rt,{size:16,strokeWidth:1.75,"aria-hidden":"true"})}),!n&&o.jsx(Xs,{index:ee,count:F.length,onMove:Me=>G(ee,Me),onDelete:()=>U(ee)})]})}),Ie&&o.jsx("div",{id:Te,style:{padding:"14px 16px",borderTop:"1px solid var(--border-primary)",background:"var(--bg-primary)"},children:o.jsx(op,{step:V,upstreamSteps:ke,workflowInputParams:h.inputParameters,registry:r,disabled:n,onChange:Me=>B(ee,Me)})})]}),fe(ee+1)]},V.id)})]}),g&&o.jsx(V2,{registry:r,stepNumber:g.index+1,positionLabel:g.label,onClose:()=>v(null),onSelect:ye,currentWorkflowLevel:i,libraryCatalog:a}),j&&o.jsx(qt,{message:j.message,confirmLabel:j.confirmLabel,onConfirm:_,onCancel:w})]})})};function tC(e,t,r){if(!e||!t)return;const n=t.replace(/\[(\d+)\]/g,".$1").split(".").filter(Boolean);let s=e;for(let i=0;i<n.length-1;i++){const l=n[i];if(s[l]===void 0||s[l]===null){const c=n[i+1];s[l]=/^\d+$/.test(c)?[]:{}}s=s[l]}const a=n[n.length-1];s[a]=r}function xp(e,t){const r=structuredClone(e.definition);for(const n of e.variables){const s=t[n.key]??n.defaultValue;if(s!==void 0)for(const a of n.bindings)tC(r,a,s)}return r}const vk=({template:e,onApply:t,onClose:r,onSandboxRun:n})=>{const{theme:s,themeColor:a}=re($e(g=>({theme:g.theme,themeColor:g.themeColor}))),[i,l]=T.useState(1),[c,d]=T.useState(()=>{const g={};for(const v of e.variables)v.defaultValue!==void 0&&(g[v.key]=v.defaultValue);return g}),[u,p]=T.useState(!1),[f,m]=T.useState(null),h=(g,v)=>{d(k=>({...k,[g]:v}))},y=async()=>{p(!0);try{const g=xp(e,c),v=e.mockDataset.scenarios[0],k=await cn(g,{workflowInput:v?.workflowInput||{},taskMocks:v?.taskOutputs||{}});n?.(String(k.status)),k.status==="COMPLETED"?m(`全部 ${k.tasks.length} 个步骤在浏览器本地顺利模拟通过,各上游数据与通知已正确串联。`):m(`沙箱试运行结束,状态:${WT(k.status)}`)}catch(g){n?.("error"),m(`模拟试跑出错: ${g.message}`)}finally{p(!1)}},x=()=>{const g=xp(e,c);t(g),r()};return typeof document>"u"?null:kt.createPortal(o.jsx("div",{"data-mode":s,"data-brand":a,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"var(--cm-overlay)",backdropFilter:"blur(5px)",zIndex:1300,display:"flex",alignItems:"center",justifyContent:"center",padding:20,fontFamily:"inherit"},onClick:r,children:o.jsxs("div",{onClick:g=>g.stopPropagation(),style:{width:680,maxHeight:"85vh",background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:14,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"14px 20px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary)"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx(We,{name:e.icon,size:20}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,fontSize:15,color:"var(--text-primary)"},children:e.title}),o.jsx("div",{style:{fontSize:11,color:"var(--text-muted)"},children:"3 步填空式模板快速启用向导"})]})]}),o.jsx("button",{onClick:r,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16},children:o.jsx(Le,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{padding:"10px 20px",background:"var(--cm-surface-0)",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"center",gap:24},children:[{step:1,label:"1. 了解方案"},{step:2,label:"2. 参数填空"},{step:3,label:"3. 试跑验证与激活"}].map(g=>{const v=i===g.step,k=i>g.step;return o.jsxs("div",{onClick:()=>k&&l(g.step),style:{display:"flex",alignItems:"center",gap:6,cursor:k?"pointer":"default",opacity:v||k?1:.5},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:11,background:k?"var(--color-success)":v?"var(--color-accent)":"var(--bg-tertiary)",color:k?"var(--cm-on-danger)":v?"var(--color-on-accent)":"var(--text-muted)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:700},children:k?o.jsx(We,{name:"approval",size:12}):g.step}),o.jsx("span",{style:{fontSize:12,fontWeight:v?600:400,color:v?"var(--text-primary)":"var(--text-secondary)"},children:g.label})]},g.step)})}),o.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"20px 24px"},children:[i===1&&o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[o.jsxs("div",{style:{display:"grid",gridTemplateColumns:`repeat(${e.roi.popularityCount!==void 0?3:2}, 1fr)`,gap:12},children:[o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-success) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-success) 25%, transparent)"},children:[o.jsxs("div",{style:{fontSize:11,color:"var(--cm-status-success)"},children:[o.jsx(We,{name:"zap",size:14,style:{verticalAlign:-2,marginRight:4}}),"预期单次节省人工"]}),o.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"var(--cm-status-success)",marginTop:4},children:["约 ",e.roi.minutesSavedPerRun," 分钟"]})]}),o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"color-mix(in srgb, var(--color-accent) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--color-accent) 25%, transparent)"},children:[o.jsxs("div",{style:{fontSize:11,color:"var(--color-accent)"},children:[o.jsx(We,{name:"refresh",size:14,style:{verticalAlign:-2,marginRight:4}}),"典型每周频次"]}),o.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"var(--color-accent)",marginTop:4},children:["约 ",e.roi.typicalRunsPerWeek," 次 / 周"]})]}),e.roi.popularityCount!==void 0&&o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-warning) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-warning) 25%, transparent)"},children:[o.jsxs("div",{style:{fontSize:11,color:"var(--cm-status-warning)"},children:[o.jsx(We,{name:"flame",size:14,style:{verticalAlign:-2,marginRight:4}}),"累计被采用"]}),o.jsxs("div",{style:{fontSize:20,fontWeight:700,color:"var(--cm-status-warning)",marginTop:4},children:[e.roi.popularityCount," 次"]})]})]}),o.jsxs("div",{style:{padding:"12px 16px",borderRadius:8,background:"var(--bg-primary)",border:"1px solid var(--border-primary)",lineHeight:1.6},children:[o.jsxs("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:13,marginBottom:4},children:[o.jsx(We,{name:"lightbulb",size:14,style:{verticalAlign:-2,marginRight:4}}),"解决的痛点"]}),o.jsx("div",{style:{fontSize:13,color:"var(--text-secondary)"},children:e.valueProposition}),o.jsx("p",{style:{fontSize:12,color:"var(--text-muted)",margin:"8px 0 0 0"},children:e.description})]}),o.jsxs("div",{children:[o.jsxs("div",{style:{fontSize:12,fontWeight:600,color:"var(--text-muted)",marginBottom:8},children:["包含的标准步骤流程 (",e.definition.tasks?.length??0," 个步骤):"]}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:e.definition.tasks?.map((g,v)=>o.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"var(--bg-highlight)",border:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:12},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[o.jsxs("span",{style:{color:"var(--color-accent)",fontWeight:600},children:["#",v+1]}),o.jsx("span",{style:{color:"var(--text-primary)"},children:g.description||g.name})]}),o.jsx("span",{style:{fontSize:10,color:"var(--text-muted)",fontFamily:"monospace"},children:g.taskReferenceName})]},g.taskReferenceName))})]})]}),i===2&&o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[o.jsxs("div",{style:{padding:"8px 12px",borderRadius:6,background:"color-mix(in srgb, var(--color-accent) 8%, transparent)",border:"1px solid color-mix(in srgb, var(--color-accent) 25%, transparent)",fontSize:12,color:"var(--color-accent)"},children:[o.jsx(We,{name:"pencil",size:14,style:{verticalAlign:-2,marginRight:4}}),o.jsx("strong",{children:"开箱即用填空"}),":无需修改复杂的流程连线与 JSON,仅需确认以下几个业务变量即可:"]}),e.variables.map(g=>{const v=c[g.key]??g.defaultValue;return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:6},children:[o.jsxs("label",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)",display:"flex",alignItems:"center",gap:4},children:[g.label,g.required&&o.jsx("span",{style:{color:"var(--cm-status-failed)"},children:"*"})]}),g.type==="select"?o.jsx("select",{value:v??"",onChange:k=>h(g.key,k.target.value),style:{padding:"8px 10px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none"},children:g.options?.map(k=>o.jsx("option",{value:k.value,children:k.label},k.value))}):g.type==="boolean"?o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8,cursor:"pointer",fontSize:13,color:"var(--text-secondary)"},children:[o.jsx("input",{type:"checkbox",checked:!!v,onChange:k=>h(g.key,k.target.checked),style:{width:16,height:16}}),o.jsx("span",{children:"开启启用"})]}):o.jsx("input",{type:g.type==="number"?"number":"text",value:v??"",placeholder:g.placeholder,onChange:k=>h(g.key,g.type==="number"?Number(k.target.value):k.target.value),style:{padding:"8px 10px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:13,outline:"none"}}),g.help&&o.jsx("div",{style:{fontSize:11,color:"var(--text-muted)"},children:g.help})]},g.key)})]}),i===3&&o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"var(--bg-primary)",border:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:600,color:"var(--text-primary)",fontSize:13},children:"零风险浏览器沙盒试跑"}),o.jsx("div",{style:{fontSize:11,color:"var(--text-muted)",marginTop:2},children:"使用内置的保真云主机 Mock 数据,无需真实生产权限即可预览完整数据流转"})]}),o.jsx("button",{onClick:()=>{y()},disabled:u,style:{padding:"6px 14px",borderRadius:6,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontWeight:600,fontSize:12,cursor:u?"not-allowed":"pointer"},children:u?"模拟试跑中...":"立即试跑验证"})]}),f&&o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-success) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-success) 30%, transparent)",color:"var(--cm-status-success)",fontSize:12,lineHeight:1.5},children:[o.jsx(We,{name:"sparkles",size:14,style:{verticalAlign:-2,marginRight:4}}),o.jsx("strong",{children:"试跑通过"}),": ",f]}),o.jsxs("div",{style:{padding:"12px 14px",borderRadius:8,background:"var(--bg-highlight)",border:"1px solid var(--border-primary)"},children:[o.jsx("div",{style:{fontSize:12,fontWeight:600,color:"var(--text-muted)",marginBottom:8},children:"已配置的业务变量参数清单:"}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:e.variables.map(g=>o.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12,padding:"4px 0",borderBottom:"1px dashed var(--cm-border-subtle)"},children:[o.jsxs("span",{style:{color:"var(--text-secondary)"},children:[g.label,":"]}),o.jsx("span",{style:{color:"var(--color-accent)",fontWeight:600},children:String(c[g.key]??g.defaultValue)})]},g.key))})]})]})]}),o.jsxs("div",{style:{padding:"12px 20px",borderTop:"1px solid var(--border-primary)",background:"var(--bg-primary)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[i>1?o.jsx("button",{onClick:()=>l(g=>g-1),style:{padding:"6px 14px",borderRadius:6,background:"transparent",border:"1px solid var(--border-secondary)",color:"var(--text-secondary)",fontSize:12,cursor:"pointer"},children:"← 上一步"}):o.jsx("div",{}),o.jsx("div",{style:{display:"flex",gap:10},children:i<3?o.jsx("button",{onClick:()=>l(g=>g+1),style:{padding:"6px 16px",borderRadius:6,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontSize:12,fontWeight:600,cursor:"pointer"},children:"下一步 →"}):o.jsxs("button",{onClick:x,style:{padding:"6px 18px",borderRadius:6,background:"var(--color-success)",color:"var(--cm-on-danger)",border:"none",fontSize:12,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:6},children:[o.jsx("span",{children:o.jsx(We,{name:"zap",size:16})}),o.jsx("span",{children:"注入参数并进入流程编辑器"})]})})]})]})}),document.body)},rC=()=>()=>{},nC=()=>0,bk=({isOpen:e,onClose:t,onSelectTemplate:r,templateStore:n=Ku,onSandboxRun:s})=>{const{theme:a,themeColor:i}=re($e(b=>({theme:b.theme,themeColor:b.themeColor}))),[l,c]=T.useState("all"),[d,u]=T.useState(""),[p,f]=T.useState(null),[m,h]=T.useState(null),y=n.subscribe??rC,x=n.getVersion??nC,g=T.useSyncExternalStore(y,x,x),v=T.useMemo(()=>n.search(d,l),[n,d,l,g]);if(!e||typeof document>"u")return null;const k=async b=>{try{const S=b.mockDataset.scenarios[0],j=await cn(b.definition,{workflowInput:S?.workflowInput||{},taskMocks:S?.taskOutputs||{}});s?.(String(j.status)),h(`《${b.title}》在本地沙盒试跑通过!共执行 ${j.tasks.length} 个任务节点,状态: ${j.status}。点击「使用模板」即可完成填空并上屏编辑。`)}catch(S){s?.("error"),h(`试跑出错: ${S.message}`)}};return kt.createPortal(o.jsxs("div",{"data-mode":a,"data-brand":i,style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"var(--cm-overlay)",backdropFilter:"blur(5px)",zIndex:1250,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit"},onClick:t,children:[o.jsxs("div",{onClick:b=>b.stopPropagation(),style:{width:980,maxWidth:"92vw",height:"84vh",background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",borderRadius:16,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"16px 24px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",background:"var(--bg-primary)"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[o.jsx("span",{style:{display:"inline-flex"},children:o.jsx(We,{name:"folder",size:22})}),o.jsxs("div",{children:[o.jsx("div",{style:{fontWeight:700,fontSize:16,color:"var(--text-primary)"},children:"场景化工作流模板中心"}),o.jsx("div",{style:{fontSize:12,color:"var(--text-muted)"},children:"源于真实云平台高价值运维实战萃取 · 拒绝空白画布 · 开箱即用"})]})]}),o.jsx("button",{onClick:t,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:18,padding:"4px"},children:o.jsx(Le,{size:16,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{padding:"10px 24px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,background:"var(--cm-surface-0)"},children:[o.jsx("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[{id:"all",label:"全部场景 (8)"},{id:"compute",label:"交付与计算"},{id:"security",label:"安全与容灾"},{id:"ops",label:"运维与自愈"},{id:"cost",label:"节能与降本"}].map(b=>o.jsx("button",{onClick:()=>c(b.id),style:{padding:"5px 12px",borderRadius:6,background:l===b.id?"var(--color-accent)":"transparent",color:l===b.id?"var(--color-on-accent)":"var(--text-secondary)",border:"none",fontSize:12,cursor:"pointer",fontWeight:l===b.id?600:400,transition:"all 0.15s ease"},children:b.label},b.id))}),o.jsx("input",{type:"text",placeholder:"搜索模板名称、痛点或场景...",value:d,onChange:b=>u(b.target.value),style:{width:220,padding:"6px 12px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}})]}),m&&o.jsxs("div",{style:{margin:"12px 24px 0 24px",padding:"10px 14px",borderRadius:8,background:"color-mix(in srgb, var(--cm-status-success) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--cm-status-success) 35%, transparent)",color:"var(--cm-status-success)",fontSize:12,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{children:[o.jsx(We,{name:"sparkles",size:14,style:{verticalAlign:-2,marginRight:4}}),m]}),o.jsx("button",{onClick:()=>h(null),style:{background:"none",border:"none",color:"var(--cm-status-success)",cursor:"pointer",fontSize:12},children:"关闭"})]}),o.jsx("div",{style:{flex:1,overflowY:"auto",padding:"20px 24px",display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:16},children:v.map(b=>o.jsxs("div",{style:{borderRadius:12,background:"var(--bg-primary)",border:"1px solid var(--border-primary)",padding:"16px 18px",display:"flex",flexDirection:"column",justifyContent:"space-between",gap:12,transition:"all 0.2s ease"},onMouseEnter:S=>{S.currentTarget.style.borderColor="var(--color-accent)",S.currentTarget.style.transform="translateY(-2px)",S.currentTarget.style.boxShadow="var(--cm-shadow-float)"},onMouseLeave:S=>{S.currentTarget.style.borderColor="var(--border-primary)",S.currentTarget.style.transform="translateY(0)",S.currentTarget.style.boxShadow="none"},children:[o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[o.jsx(We,{name:b.icon,size:24}),o.jsx("span",{style:{fontWeight:600,fontSize:14,color:"var(--text-primary)"},children:b.title})]}),o.jsx("span",{style:{fontSize:10,padding:"2px 6px",borderRadius:4,background:"var(--bg-highlight)",color:"var(--text-muted)",fontWeight:500},children:b.difficulty==="starter"?"入门":b.difficulty==="intermediate"?"进阶":"专业"})]}),o.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)",lineHeight:1.5},children:b.valueProposition})]}),o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[o.jsxs("span",{style:{fontSize:11,padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--cm-status-success) 15%, transparent)",color:"var(--cm-status-success)",fontWeight:600},children:[o.jsx(We,{name:"zap",size:14,style:{verticalAlign:-2,marginRight:4}}),"单次约省 ",b.roi.minutesSavedPerRun," 分钟"]}),b.roi.popularityCount!==void 0&&o.jsxs("span",{style:{fontSize:11,padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--color-accent) 15%, transparent)",color:"var(--color-accent)"},children:[o.jsx(We,{name:"flame",size:14,style:{verticalAlign:-2,marginRight:4}}),"已使用 ",b.roi.popularityCount," 次"]})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:4},children:[o.jsxs("button",{onClick:()=>{k(b)},style:{flex:1,padding:"6px 10px",borderRadius:6,background:"var(--bg-highlight)",border:"1px solid var(--border-secondary)",color:"var(--text-secondary)",fontSize:12,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4},children:[o.jsx("span",{children:o.jsx(We,{name:"play",size:16})}),o.jsx("span",{children:"试跑演示"})]}),o.jsxs("button",{onClick:()=>f(b),style:{flex:1.2,padding:"6px 12px",borderRadius:6,background:"var(--color-accent)",color:"var(--color-on-accent)",border:"none",fontSize:12,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4},children:[o.jsx("span",{children:o.jsx(We,{name:"zap",size:16})}),o.jsx("span",{children:"使用此模板"})]})]})]})]},b.id))})]}),p&&o.jsx(vk,{template:p,onSandboxRun:s,onClose:()=>f(null),onApply:b=>{f(null),r(b),t()}})]}),document.body)},sC="YAML 请先转为 JSON 后再导入",aC=["get","post","put","delete","patch","head","options"];function he(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function vp(e){return String(e??"").replace(/^/,"").trim()}function ea(e,t=48){return(e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[^A-Za-z0-9]+/g,"_").replace(/^_+|_+$/g,"").toLowerCase()||"api").slice(0,t).replace(/_+$/g,"")||"api"}function oC(e){const t=e.split(/[^A-Za-z0-9]+/).filter(Boolean);if(t.length===0)return"value";const r=t.map((n,s)=>{const a=n===n.toUpperCase()?n.toLowerCase():n;return s===0?a.charAt(0).toLowerCase()+a.slice(1):a.charAt(0).toUpperCase()+a.slice(1)}).join("");return/^[0-9]/.test(r)?`v${r}`:r}function ta(e,t){let r=e,n=2;for(;t.has(r);)r=`${e}_${n}`,n+=1;return t.add(r),r}function Ln(e,t=0){if(e==null)return{type:"string"};if(Array.isArray(e))return t>=4||e.length===0?{type:"array"}:{type:"array",items:Ln(e[0],t+1)};switch(typeof e){case"number":return{type:Number.isInteger(e)?"integer":"number"};case"boolean":return{type:"boolean"};case"object":{if(t>=4)return{type:"object"};const r={};for(const[n,s]of Object.entries(e))r[n]=Ln(s,t+1);return{type:"object",properties:r}}default:return{type:"string"}}}function _r(e){if(!e)return"string";const t=Array.isArray(e.type)?e.type.find(r=>r!=="null"):e.type;return t||(e.properties?"object":e.items?"array":"string")}function kk(e){let t=e.trim();const r=t.indexOf("#");r>=0&&(t=t.slice(0,r));let n="";const s=t.indexOf("?");s>=0&&(n=t.slice(s+1),t=t.slice(0,s));let a="";const i=/^([a-z][a-z0-9+.-]*:\/\/[^/]*)/i.exec(t)||/^(\$\{[^}]*\})/.exec(t);return i&&(a=i[1],t=t.slice(i[1].length)),{baseUrl:a,path:t||"/",query:n}}function bp(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return e}}const iC=/^(authorization|cookie|set-cookie|proxy-authorization|x-api-key)$/i,wk=/token|secret|api[-_]?key|passw(or)?d|access[-_]?key|signature|subscription[-_]?key|credential|session(?:[-_]?(?:id|token|key))?$/i;function Sk(e){return iC.test(e.trim())||wk.test(e)}function Dn(e){return wk.test(e)}function mt(e){return"${workflow.input."+oC(e)+"}"}function lC(e){return`请求头 ${e} 含敏感信息,已替换为 ${mt(e)};请在流程入参中提供(值需包含完整头内容,如 Bearer xxx),或改用凭据管理,不会写入流程定义`}function kp(e){const t={},r=[];for(const[n,s]of Object.entries(e))Sk(n)&&!String(s).includes("${")?(t[n]=mt(n),r.push(lC(n))):t[n]=s;return{headers:t,warnings:r}}function wp(e){const{headers:t,warnings:r}=kp(e.headers);return{...e,headers:t,warnings:Array.from(new Set([...e.warnings,...r]))}}function cC(e){return`${e.method} ${e.path}`}function Sp(e,t=[]){const r=[...t],n=new Set(r);for(const s of e)for(const a of s.warnings){const i=`${cC(s)}:${a}`;n.has(i)||(n.add(i),r.push(i))}return r}function _k(e,t){const r=Ln(e);if(he(e)&&r.properties)for(const[n,s]of Object.entries(e))r.properties[n].default=_p(s,[n],Dn(n),t);return r}function _p(e,t,r,n){const s=t[t.length-1]??"",a=r||Dn(s);if(Array.isArray(e))return e.map((i,l)=>_p(i,[...t,String(l)],a,n));if(he(e)){const i={};for(const[l,c]of Object.entries(e))i[l]=_p(c,[...t,l],a,n);return i}if(a&&(typeof e=="string"||typeof e=="number")&&!String(e).includes("${")){const i=t.filter(c=>!/^\d+$/.test(c)).join("_"),l=mt(i);return n.push(`请求体字段 ${t.join(".")} 疑似敏感信息,默认值已替换为 ${l}`),l}return e}function jp(e,t){const r=[];if(!e)return r;for(const n of e.split("&")){if(!n)continue;const s=n.indexOf("="),a=bp(s>=0?n.slice(0,s):n),i=s>=0?bp(n.slice(s+1)):"";if(!a)continue;let l=i;Dn(a)&&!i.includes("${")&&(l=mt(a),t.push(`查询参数 ${a} 疑似敏感信息,默认值已替换为 ${l},请在流程入参中提供`)),r.push({name:a,in:"query",required:!1,schema:{type:"string"},defaultValue:l||void 0})}return r}function Tp(e){const t={};for(const[r,n]of Object.entries(e))/^(content-type|accept)$/i.test(r)||(t[r]=n);return t}function ra(e,t){const r=Object.keys(e).find(n=>n.toLowerCase()===t.toLowerCase());return r===void 0?void 0:e[r]}const dC=6;function jk(e,t){if(!t.startsWith("#/"))return;let r=e;for(const n of t.slice(2).split("/")){const s=decodeURIComponent(n).replace(/~1/g,"/").replace(/~0/g,"~");if(r===null||typeof r!="object")return;r=r[s]}return r}function Mn(e,t){let r=e;for(let n=0;n<10&&(he(r)&&typeof r.$ref=="string");n++)r=jk(t,r.$ref);return he(r)&&typeof r.$ref!="string"?r:void 0}const Tk=["type","title","description","enum","default","format","example","examples","maxLength","minLength","minimum","maximum","pattern","nullable"];function na(e,t,r=[],n=dC){let s=!1;const a=(i,l,c)=>{if(!he(i))return{};if(typeof i.$ref=="string"){const m=i.$ref,h=m.split("/").pop()||m;if(c.includes(m))return s||(s=!0,r.push(`存在循环引用(${h}),循环处已截断`)),{type:"object",description:`循环引用:${h}`};const y=jk(t,m);return y===void 0?(r.push(`无法解析引用 ${m},已忽略`),{}):a(y,l,[...c,m])}if(l>n)return{type:_r(i),...typeof i.description=="string"?{description:i.description}:{}};const d={};for(const m of Tk)i[m]!==void 0&&(d[m]=i[m]);const u=[];Array.isArray(i.allOf)&&u.push(...i.allOf);for(const m of["oneOf","anyOf"]){const h=i[m];if(Array.isArray(h)&&h.length>0){const y=h.find(x=>!(he(x)&&x.type==="null"))??h[0];u.push(y)}}let p,f=Array.isArray(i.required)?[...i.required]:[];for(const m of u){const h=a(m,l,c);for(const y of Tk)d[y]===void 0&&h[y]!==void 0&&(d[y]=h[y]);h.properties&&(p={...p||{},...h.properties}),Array.isArray(h.required)&&(f=f.concat(h.required)),h.items&&!d.items&&(d.items=h.items)}if(he(i.properties)){p={...p||{}};for(const[m,h]of Object.entries(i.properties))p[m]=a(h,l+1,c)}return p&&(d.properties=p,d.type||(d.type="object")),f.length>0&&(d.required=Array.from(new Set(f))),i.items!==void 0&&(d.items=a(i.items,l+1,c)),d};return a(e,0,[])}const uC=/^(content-type|accept)$/i;function Ip(e){return/json/i.test(e)}function pC(e,t){if(!Array.isArray(e)||!he(e[0])||typeof e[0].url!="string")return t.push("文档未声明 servers,URL 仅含路径,请在步骤里补充完整服务地址"),"";const r=e[0],n=e.slice(1).filter(l=>he(l)&&typeof l.url=="string");if(n.length>0){const l=c=>typeof c.description=="string"&&c.description.trim()?`${c.url}(${c.description.trim()})`:c.url;t.push(`文档声明了 ${n.length+1} 个服务地址,已使用第一个 ${l(r)};其他地址:${n.map(l).join("、")}。如需换用,请在步骤里修改服务地址`)}const s=he(r.variables)?r.variables:{},i=r.url.replace(/\{([^}]+)\}/g,(l,c)=>{const d=s[c];if(he(d)){if(d.default!==void 0)return String(d.default);if(Array.isArray(d.enum)&&d.enum.length>0)return String(d.enum[0])}return t.push(`服务地址变量 {${c}} 没有默认值,请手动替换`),l}).replace(/\/+$/,"");return i&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(i)&&!i.startsWith("${")&&t.push(`服务地址 ${i} 是相对路径,请在步骤里补充完整地址`),i}function fC(e,t){const r=typeof e.basePath=="string"?e.basePath.replace(/\/+$/,""):"";return typeof e.host!="string"||!e.host?(t.push("文档未声明 host,URL 仅含路径,请在步骤里补充完整服务地址"),r):`${Array.isArray(e.schemes)&&typeof e.schemes[0]=="string"?e.schemes[0]:"https"}://${e.host}${r}`}function mC(e){const t={};for(const r of["type","format","enum","default","items","minimum","maximum","maxLength","pattern"])e[r]!==void 0&&(t[r]=e[r]);return t.type||(t.type="string"),t}function Ik(e){if(!he(e))return;const t=Object.keys(e),r=t.find(n=>n.toLowerCase()==="application/json")??t.find(Ip);return r&&he(e[r])?{type:r,media:e[r]}:void 0}function Nk(e,t,r){let n=na(e.schema,t,r);if(Object.keys(n).length===0){const s=e.example??(he(e.examples)?Object.values(e.examples).map(a=>he(a)?a.value:void 0).find(a=>a!==void 0):void 0);s!==void 0&&(n=Ln(s))}return n}function hC(e,t,r,n){const s=he(e.responses)?e.responses:{},a=Object.keys(s),l=a.filter(u=>/^2\d\d$/.test(u)).sort()[0]??a.find(u=>/^2xx$/i.test(u))??(a.includes("default")?"default":void 0);if(!l)return;const c=Mn(s[l],t);if(!c)return;let d;if(r===3){const u=Ik(c.content);u&&(d=Nk(u.media,t,n))}else c.schema!==void 0&&(d=na(c.schema,t,n));return d&&Object.keys(d).length>0?d:void 0}function yC(e,t,r,n){const s={headers:{},queryParams:[]};if(!Array.isArray(e)||!he(e[0])||!he(t))return s;for(const a of Object.keys(e[0])){const i=Mn(t[a],r);if(!i)continue;const l=String(i.type||"");if(l==="apiKey"){const c=typeof i.name=="string"?i.name:"X-Api-Key";i.in==="header"?s.headers[c]="":i.in==="query"?(s.queryParams.push({name:c,in:"query",required:!0,schema:{type:"string"},description:`认证参数(${a})`,defaultValue:mt(c)}),n.push(`查询参数 ${c} 是认证密钥,已默认取自 ${mt(c)},请在流程入参中提供`)):n.push(`认证方式 ${a}(${String(i.in)})暂不支持,已忽略`)}else(l==="http"||l==="basic"||l==="oauth2"||l==="openIdConnect")&&(s.headers.Authorization="")}return s}function Ck(e,t){const r=t===3?"openapi3":"swagger2";if(!he(e.paths))return{ok:!1,format:r,error:"缺少 paths 字段,找不到接口定义"};const n=[],s=t===2?fC(e,n):"",a=t===3?e.components?.securitySchemes:e.securityDefinitions,i=new Set,l=[],c=new Map;for(const[d,u]of Object.entries(e.paths)){const p=Mn(u,e);if(p)for(const f of aC){const m=p[f];if(!he(m))continue;const h=[];let y;if(t===3){const w=m.servers??p.servers??e.servers;let I=c.get(w);if(!I){const C=[];I={url:pC(w,C),warnings:C},c.set(w,I),n.push(...C)}y=I.url}else y=s;const x=[],g={},v=new Map;for(const w of[...Array.isArray(p.parameters)?p.parameters:[],...Array.isArray(m.parameters)?m.parameters:[]]){const I=Mn(w,e);I&&typeof I.name=="string"&&typeof I.in=="string"&&v.set(`${I.in}:${I.name}`,I)}let k;for(const w of v.values()){const I=w.in;if(I==="path"||I==="query"||I==="header"){if(I==="header"&&uC.test(w.name))continue;if(I==="header"&&Sk(w.name)){g[w.name]="";continue}const C=na(t===3?w.schema??{type:"string"}:mC(w),e,h),N=Dn(w.name);let O;N?(C.default!==void 0&&!String(C.default).includes("${")&&delete C.default,O=mt(w.name),h.push(`参数 ${w.name} 疑似敏感信息,不使用文档示例值,已默认取自 ${O},请在流程入参中提供`)):C.default===void 0&&w.example!==void 0&&t===3&&(C.default=w.example),x.push({name:w.name,in:I,required:I==="path"?!0:w.required===!0,schema:Object.keys(C).length>0?C:{type:"string"},description:typeof w.description=="string"?w.description:void 0,...O!==void 0?{defaultValue:O}:{}})}else if(I==="body"&&t===2){const C=m.consumes??e.consumes,N=Array.isArray(C)&&C.length>0?String(C.find(O=>Ip(String(O)))??C[0]):"application/json";Ip(N)?k={contentType:N,schema:na(w.schema,e,h)}:h.push(`请求体类型 ${N} 暂不支持,已忽略(仅支持 JSON)`)}else I==="formData"?h.push("表单(formData)参数暂不支持,已忽略"):I==="cookie"&&h.push(`Cookie 参数 ${w.name} 暂不支持,已忽略`)}if(t===3&&m.requestBody!==void 0){const w=Mn(m.requestBody,e),I=w?Ik(w.content):void 0;I?k={contentType:I.type,schema:Nk(I.media,e,h)}:w&&he(w.content)&&Object.keys(w.content).length>0&&h.push(`请求体类型 ${Object.keys(w.content)[0]} 暂不支持,已忽略(仅支持 JSON)`)}const b=yC(m.security??e.security,a,e,h);for(const w of Object.keys(b.headers))w in g||(g[w]="");for(const w of b.queryParams)x.some(I=>I.in==="query"&&I.name===w.name)||x.push(w);const S=typeof m.operationId=="string"&&m.operationId?ea(m.operationId):ea(d.replace(/[{}]/g,"")),j=S.startsWith(`${f}_`)&&S.length>f.length+1?S.slice(f.length+1):S,_=ta(`${f}_${j}`,i);l.push(wp({id:_,method:f.toUpperCase(),baseUrl:y,path:d,summary:typeof m.summary=="string"&&m.summary.trim()?m.summary.trim():void 0,description:typeof m.description=="string"?m.description:void 0,operationId:typeof m.operationId=="string"?m.operationId:void 0,tags:Array.isArray(m.tags)?m.tags.filter(w=>typeof w=="string"):[],params:x,headers:g,body:k,responseSchema:hC(m,e,t,h),warnings:h}))}}return l.length===0?{ok:!1,format:r,error:"paths 中没有找到任何接口(get / post / put / delete / patch …)"}:{ok:!0,format:r,operations:l,warnings:Sp(l,n)}}function Ek(e){if(!he(e))return{ok:!1,format:"openapi3",error:"OpenAPI 文档必须是 JSON 对象"};try{return Ck(e,3)}catch(t){return{ok:!1,format:"openapi3",error:`OpenAPI 解析失败:${t instanceof Error?t.message:String(t)}`}}}function Rk(e){if(!he(e))return{ok:!1,format:"swagger2",error:"Swagger 文档必须是 JSON 对象"};try{return Ck(e,2)}catch(t){return{ok:!1,format:"swagger2",error:`Swagger 解析失败:${t instanceof Error?t.message:String(t)}`}}}function Wn(e,t){return e.replace(/\{\{\s*([^{}\s]+)\s*\}\}/g,(r,n)=>{const s=n.replace(/[^\w]/g,"_");return t?.add(s),"${workflow.input."+s+"}"})}function gC(e){if(typeof e.raw=="string"&&e.raw)return e.raw;const t=Array.isArray(e.host)?e.host.join("."):typeof e.host=="string"?e.host:"",r=Array.isArray(e.path)?e.path.join("/"):typeof e.path=="string"?e.path:"",n=typeof e.protocol=="string"&&e.protocol?`${e.protocol}://`:"",s=e.port?`:${e.port}`:"",a=Array.isArray(e.query)?e.query.filter(i=>he(i)&&!i.disabled&&i.key).map(i=>`${i.key}=${i.value??""}`).join("&"):"";return`${n}${t}${s}/${r}${a?`?${a}`:""}`}function xC(e){if(typeof e=="string")return e;if(he(e)&&typeof e.content=="string")return e.content}function vC(e,t,r,n){if(!(!e||typeof e.type!="string"||e.type==="noauth"))if(e.type==="apikey"){const s=Array.isArray(e.apikey)?e.apikey:[],a=String(s.find(l=>l?.key==="key")?.value||"X-Api-Key");String(s.find(l=>l?.key==="in")?.value||"header")==="query"?(r.some(l=>l.in==="query"&&l.name===a)||r.push({name:a,in:"query",required:!0,schema:{type:"string"},defaultValue:mt(a)}),n.push(`查询参数 ${a} 是认证密钥,已默认取自 ${mt(a)},请在流程入参中提供`)):t[a]=""}else["bearer","basic","oauth2","digest","hawk","awsv4","ntlm","oauth1"].includes(e.type)&&(t.Authorization="")}function Ok(e,t,r,n){if(Array.isArray(e))for(const s of e){if(!he(s))continue;const a=he(s.auth)?s.auth:n;if(Array.isArray(s.item)){const c=typeof s.name=="string"&&s.name?[...r,s.name]:r;Ok(s.item,t,c,a);continue}const i=s.request;if(!he(i)&&typeof i!="string")continue;const l=bC(s,he(i)?i:{method:"GET",url:i},t,r,a);l&&t.ops.push(l)}}function bC(e,t,r,n,s){const a=[],i=typeof t.url=="string"?t.url:he(t.url)?gC(t.url):"";if(!i)return;const{baseUrl:l,path:c,query:d}=kk(Wn(i,r.vars)),u=c.replace(/\/:([A-Za-z_]\w*)/g,"/{$1}"),p=[],f={};if(he(t.url)&&Array.isArray(t.url.variable))for(const b of t.url.variable)he(b)&&typeof b.key=="string"&&typeof b.value=="string"&&b.value&&(f[b.key]=Wn(b.value,r.vars));for(const b of u.matchAll(/\{([^}/]+)\}/g))p.push({name:b[1],in:"path",required:!0,schema:{type:"string"},defaultValue:f[b[1]]});p.push(...jp(d,a));const m={};if(Array.isArray(t.header))for(const b of t.header)he(b)&&!b.disabled&&typeof b.key=="string"&&b.key&&(m[b.key]=Wn(String(b.value??""),r.vars));vC(he(t.auth)?t.auth:s,m,p,a);let h;const y=t.body;if(he(y)&&typeof y.mode=="string")if(y.mode==="raw"){const b=Wn(String(y.raw??""),r.vars),S=he(y.options)&&he(y.options.raw)?String(y.options.raw.language||""):"",j=Object.keys(m).find(w=>w.toLowerCase()==="content-type"),_=S==="json"||j&&/json/i.test(m[j])||/^[[{]/.test(b.trim());if(b.trim()){let w,I=!1;if(_)try{w=JSON.parse(b),I=!0}catch{I=!1}I?h={contentType:"application/json",schema:_k(w,a)}:(h={contentType:j?m[j]:"text/plain",schema:{type:"string",default:b}},_&&a.push("请求体不是合法 JSON(可能含未加引号的变量),已作为文本整体导入"))}}else y.mode!=="none"&&a.push(`请求体类型 ${y.mode} 暂不支持,已忽略(仅支持 JSON / 文本)`);let x;if(Array.isArray(e.response))for(const b of e.response){if(!he(b)||typeof b.body!="string")continue;const S=Number(b.code);if(S>=200&&S<300)try{const j=JSON.parse(Wn(b.body,r.vars));if(j!==null&&typeof j=="object"){x=Ln(j);break}}catch{}}const g=typeof e.name=="string"?e.name.trim():"",v=String(t.method||"GET").toUpperCase(),k=ta(`${v.toLowerCase()}_${ea(u.replace(/[{}]/g,""))}`,r.used);return wp({id:k,method:v,baseUrl:l,path:u,summary:g||void 0,description:xC(t.description),tags:[...n],params:p,headers:Tp(m),body:h,responseSchema:x,warnings:a})}function Pk(e){if(!he(e)||!Array.isArray(e.item))return{ok:!1,format:"postman21",error:"Postman Collection 缺少 item 列表"};try{const t={used:new Set,vars:new Set,ops:[]},r=[];return Ok(e.item,t,[],he(e.auth)?e.auth:void 0),t.ops.length===0?{ok:!1,format:"postman21",error:"Collection 中没有找到任何请求"}:(t.vars.size>0&&r.push(`用到了 Postman 变量:${Array.from(t.vars).join("、")},已转为 \${workflow.input.xxx},请在流程入参中提供`),{ok:!0,format:"postman21",operations:t.ops,warnings:Sp(t.ops,r)})}catch(t){return{ok:!1,format:"postman21",error:`Postman 解析失败:${t instanceof Error?t.message:String(t)}`}}}function kC(e){const t=e.replace(/\\\r?\n/g," "),r=[];let n="",s=!1,a=0;const i=()=>{s&&r.push(n),n="",s=!1};for(;a<t.length;){const l=t[a];if(/\s/.test(l))i(),a++;else if(l==="'"){s=!0;const c=t.indexOf("'",a+1),d=c<0?t.length:c;n+=t.slice(a+1,d),a=d+1}else if(l==="$"&&t[a+1]==="'"){for(s=!0,a+=2;a<t.length&&t[a]!=="'";)if(t[a]==="\\"&&a+1<t.length){const c=t[a+1],d={n:`
278
+ `,t:" ",r:"\r","\\":"\\","'":"'",'"':'"'};if(c==="u"&&/^[0-9a-fA-F]{4}$/.test(t.slice(a+2,a+6))){n+=String.fromCharCode(parseInt(t.slice(a+2,a+6),16)),a+=6;continue}if(c==="x"&&/^[0-9a-fA-F]{2}$/.test(t.slice(a+2,a+4))){n+=String.fromCharCode(parseInt(t.slice(a+2,a+4),16)),a+=4;continue}n+=d[c]??c,a+=2}else n+=t[a],a++;a++}else if(l==='"'){for(s=!0,a++;a<t.length&&t[a]!=='"';)t[a]==="\\"&&a+1<t.length&&'"\\$`'.includes(t[a+1])?(n+=t[a+1],a+=2):(n+=t[a],a++);a++}else l==="\\"&&a+1<t.length?(s=!0,n+=t[a+1],a+=2):(s=!0,n+=l,a++)}return i(),r}const wC=new Set(["--request","--header","--data","--data-raw","--data-binary","--data-ascii","--data-urlencode","--json","--user","--url","--cookie","--user-agent","--output","--max-time","--connect-timeout","--referer","--proxy","--form","--cert","--key","--cacert","--retry","--write-out","--upload-file","--resolve","--cookie-jar","--dump-header","--range","--config","--proxy-user","--limit-rate","--max-filesize","--interface","--retry-delay","--retry-max-time","--cert-type","--key-type","--pass","--oauth2-bearer","--aws-sigv4","--unix-socket","--abstract-unix-socket","--form-string","--continue-at","--speed-limit","--speed-time","--time-cond","--local-port","--keepalive-time","--capath","--ciphers","--connect-to","--expect100-timeout","--variable","--proto","--proto-redir","--request-target","--max-redirs"]),SC=new Set(["X","H","d","u","b","A","e","F","o","m","x","w","E","T","c","D","r","C","K","U","Y","y","z","t","P","Q"]),_C=`curl -X POST 'https://api.example.com/v1/tickets' \\
279
+ -H 'Content-Type: application/json' \\
280
+ -H 'Authorization: Bearer <token>' \\
281
+ -d '{"title":"磁盘告警","priority":"high"}'`;function Ak(e){try{let t=kC(String(e??""));for(;t.length>0&&(t[0]==="$"||t[0]==="sudo");)t=t.slice(1);if(t.length===0||t[0]!=="curl")return{ok:!1,format:"curl",error:"不是 curl 命令(应以 curl 开头)"};const r=[],n={},s=[],a={method:void 0,url:void 0,useGet:!1,head:!1,basicAuth:!1,bearer:!1,cookie:!1,unsupportedBody:void 0},i=(x,g)=>{if(g==="--data-urlencode"){a.unsupportedBody="--data-urlencode";return}if(x.startsWith("@")){a.unsupportedBody=`${g} ${x}(读取本地文件)`;return}s.push(x)},l=(x,g)=>{switch(x){case"-X":case"--request":g&&(a.method=g.toUpperCase());break;case"-H":case"--header":{if(!g)break;const v=g.indexOf(":");v>0&&(n[g.slice(0,v).trim()]=g.slice(v+1).trim());break}case"-d":case"--data":case"--data-raw":case"--data-binary":case"--data-ascii":case"--data-urlencode":g!==void 0&&i(g,x.length===2?"-d":x);break;case"--json":g!==void 0&&i(g,"--json"),ra(n,"content-type")||(n["Content-Type"]="application/json");break;case"-u":case"--user":a.basicAuth=!0;break;case"--oauth2-bearer":a.bearer=!0;break;case"-b":case"--cookie":a.cookie=!0;break;case"--url":g&&(a.url=g);break;case"-F":case"--form":a.unsupportedBody="表单上传(-F)";break;default:break}};for(let x=1;x<t.length;x++){const g=t[x];if(g==="-G"||g==="--get")a.useGet=!0;else if(g==="-I"||g==="--head")a.head=!0;else if(g.startsWith("--")){const v=g.indexOf("="),k=v>0?g.slice(0,v):g;if(wC.has(k)){const b=v>0?g.slice(v+1):t[++x];l(k,b)}}else if(g.startsWith("-")&&g.length>1)for(let v=1;v<g.length;v++){const k=g[v];if(SC.has(k)){const b=g.slice(v+1),S=b.length>0?b:t[++x];l(`-${k}`,S);break}k==="G"?a.useGet=!0:k==="I"&&(a.head=!0)}else a.url===void 0&&(a.url=g)}let c=a.url;if(!c)return{ok:!1,format:"curl",error:"curl 命令里没有找到 URL"};!/^[a-z][a-z0-9+.-]*:\/\//i.test(c)&&!c.startsWith("${")&&(c=`http://${c}`,r.push("URL 没有协议,已按 http:// 处理,请核对"));const d=/^([a-z][a-z0-9+.-]*:\/\/)([^/@\s]*)@/i.exec(c);d&&(c=c.replace(d[0],d[1]),a.basicAuth=!0),(a.basicAuth||a.bearer&&!ra(n,"authorization"))&&(n.Authorization=""),a.cookie&&!ra(n,"cookie")&&(n.Cookie="");const u=kk(c),p=jp(u.query,r);let f;const m=s.join("&");if(a.unsupportedBody&&r.push(`${a.unsupportedBody} 暂不支持,请求体已忽略`),a.useGet&&m)p.push(...jp(m,r));else if(m.trim()){const x=ra(n,"content-type");let g,v=!1;try{g=JSON.parse(m),v=g!==null&&typeof g=="object"}catch{v=!1}if(v)f={contentType:x||"application/json",schema:_k(g,r)};else{const k=x||"application/x-www-form-urlencoded";f={contentType:k,schema:{type:"string",default:jC(m,k,r)}}}}const h=a.method??(a.head?"HEAD":f&&!a.useGet?"POST":"GET"),y=wp({id:`${h.toLowerCase()}_${ea(u.path)}`,method:h,baseUrl:u.baseUrl,path:u.path,tags:[],params:p,headers:Tp(n),body:f,warnings:r});return{ok:!0,format:"curl",operations:[y],warnings:Sp([y])}}catch(t){return{ok:!1,format:"curl",error:`curl 解析失败:${t instanceof Error?t.message:String(t)}`}}}function jC(e,t,r){return/x-www-form-urlencoded/i.test(t)?e.split("&").map(n=>{const s=n.indexOf("=");if(s<=0)return n;const a=bp(n.slice(0,s));return Dn(a)&&!n.slice(s+1).includes("${")?(r.push(`请求体字段 ${a} 疑似敏感信息,已替换为 ${mt(a)}`),`${n.slice(0,s)}=${mt(a)}`):n}).join("&"):e}function TC(e){return/^---\s*$/m.test(e.split(`
282
+ `)[0]??"")||/^\s*(openapi|swagger)\s*:/m.test(e)?!0:/^[A-Za-z_][\w-]*\s*:(\s|$)/.test(e)}function $k(e){const t=vp(e);if(!t)return{format:"unknown"};if(/^(\$\s+)?curl(\s|$)/i.test(t))return{format:"curl"};if(t.startsWith("{")||t.startsWith("[")){let r;try{r=JSON.parse(t)}catch(n){return{format:"unknown",error:`JSON 格式不正确:${n instanceof Error?n.message:String(n)}`}}if(he(r)){if(typeof r.openapi=="string"&&/^3\./.test(r.openapi))return{format:"openapi3",doc:r};if(typeof r.swagger=="string"&&/^2\./.test(r.swagger))return{format:"swagger2",doc:r};const n=he(r.info)?String(r.info.schema??""):"";if(Array.isArray(r.item)&&he(r.info)&&(/collection\/v2/.test(n)||r.info._postman_id))return{format:"postman21",doc:r}}return{format:"unknown",doc:r}}return TC(t)?{format:"yaml"}:{format:"unknown"}}function IC(e){return $k(e).format}const NC="无法识别的格式:支持 OpenAPI 3 / Swagger 2 / Postman Collection v2.1(JSON)和 curl 命令";function Lk(e){try{const t=$k(e);switch(t.format){case"openapi3":return Ek(t.doc);case"swagger2":return Rk(t.doc);case"postman21":return Pk(t.doc);case"curl":return Ak(vp(e));case"yaml":return{ok:!1,format:"yaml",error:sC};default:return{ok:!1,format:"unknown",error:t.error??(vp(e)?NC:"请粘贴接口文档或 curl 命令")}}}catch(t){return{ok:!1,error:`解析失败:${t instanceof Error?t.message:String(t)}`}}}const CC=["_actionId","actionName","http_request"];function zn(e){return e==null||e===""}function sa(e,t={}){const r={...e};return!r.description&&t.description&&(r.description=t.description),t.defaultValue!==void 0&&(r.default=t.defaultValue),r.example!==void 0&&r.examples===void 0&&(r.examples=[typeof r.example=="object"?JSON.stringify(r.example):r.example]),delete r.example,r}function Np(e,t){if(!zn(e)){if(typeof e!="string")return e;if(t==="object"||t==="array")try{return JSON.parse(e)}catch{return e}if(e.includes("${"))return e;if(t==="number"||t==="integer")return e.trim()!==""&&!Number.isNaN(Number(e))?Number(e):e;if(t==="boolean"){if(e==="true")return!0;if(e==="false")return!1}return e}}function EC(e){return e.includes("${")?e:encodeURIComponent(e)}function RC(e,t,r){const n=t.split(".");let s=e;for(let i=0;i<n.length-1;i++)he(s[n[i]])||(s[n[i]]={}),s=s[n[i]];const a=n[n.length-1];he(s[a])&&he(r)||(s[a]=r)}function OC(e){const t=_r(e);return t==="integer"||t==="number"?"number":t==="boolean"||t==="array"||t==="object"?t:"string"}function Dk(e){const t={};for(const[r,n]of Object.entries(e))t[r]=sa(n);return t}function PC(e){if(e&&_r(e)==="object"&&he(e.properties)&&Object.keys(e.properties).length>0){const n=e.properties,s=vn({type:"JSON",data:{type:"object",properties:Dk(n)}},[]),a=[];for(const i of s){a.push({...i,key:`response.body.${i.key}`});const l=n[i.key];if(l&&_r(l)==="object"&&he(l.properties)&&Object.keys(l.properties).length>0){const c=vn({type:"JSON",data:{type:"object",properties:Dk(l.properties)}},[]);for(const d of c)a.push({...d,key:`response.body.${i.key}.${d.key}`,label:`${i.label}.${d.label}`})}}return a}const t=e?OC(e):"object";return[{key:"response.body",label:"响应体",type:t,example:t==="array"?[]:t==="object"?{}:t==="number"?0:t==="boolean"?!0:"sample"}]}function AC(e){const t=(e.summary||"").trim();return t?t.length>40?`${t.slice(0,40)}…`:t:`${e.method} ${e.path}`}function Mk(e,t={}){const r=t.idPrefix||"import",n=new Set(t.existingIds||[]),s=ta(e.id,new Set(Array.from(n).filter(I=>I.startsWith(`${r}.`)).map(I=>I.slice(r.length+1)))),a=`${r}.${s}`,i=AC(e),l=new Set(CC),c=(I,C)=>{let N=I;return l.has(N)&&(N=`${I}_${C}`),ta(N,l)},d=[],u={},p=[],f=new Set(e.params.filter(I=>I.in==="path").map(I=>I.name)),m=e.params.filter(I=>I.in==="path");for(const I of e.path.matchAll(/\{([^}/]+)\}/g))f.has(I[1])||(f.add(I[1]),m.push({name:I[1],in:"path",required:!0,schema:{type:"string"}}));const h=[...m,...e.params.filter(I=>I.in==="query"),...e.params.filter(I=>I.in==="header")];for(const I of h){const C=c(I.name,I.in),N=_r(I.schema);d.push({key:C,name:I.name,source:I.in,type:N});const O=I.defaultValue!==void 0?I.defaultValue:I.in==="path"&&I.schema.default===void 0?mt(I.name):void 0;u[C]=sa(I.schema,{description:I.description,defaultValue:O}),(I.required||I.in==="path")&&p.push(C)}let y="none",x="object";if(e.body){const I=e.body.schema;if(x=_r(I),x==="object"&&he(I.properties)&&Object.keys(I.properties).length>0){y="props";const C=Array.isArray(I.required)?I.required:[];for(const[N,O]of Object.entries(I.properties)){const E=c(N,"body");d.push({key:E,name:N,source:"body",type:_r(O)}),u[E]=sa(O),C.includes(N)&&p.push(E)}}else{y="whole";const C=c("body","body");d.push({key:C,name:"body",source:"body",type:x}),u[C]=sa({...I,title:I.title||"请求体"})}}const g=As({type:"JSON",data:{type:"object",properties:u,required:p}},[]).map(I=>I.defaultValue!==void 0&&I.defaultValue!==null&&typeof I.defaultValue=="object"?{...I,defaultValue:JSON.stringify(I.defaultValue)}:I),v=[{key:"response.statusCode",label:"HTTP 状态码",type:"number",example:200},...PC(e.responseSchema)],k=Tp(kp(e.headers).headers),b=e.baseUrl.replace(/\/+$/,""),S=e.path.startsWith("/")?e.path:`/${e.path}`,j=I=>d.filter(C=>C.source===I),_=(I,C)=>{const N=I||{},O=S.replace(/\{([^}/]+)\}/g,(q,A)=>{const W=j("path").find(X=>X.name===A),P=W?N[W.key]:void 0,$=zn(P)?mt(A):String(P);return $.includes("${")?$:encodeURIComponent($)}),E=[];for(const q of j("query")){const A=Np(N[q.key],q.type);if(A===void 0)continue;const W=Array.isArray(A)?A:[A];for(const P of W)E.push(`${encodeURIComponent(q.name)}=${EC(typeof P=="object"?JSON.stringify(P):String(P))}`)}const R=`${b}${O}${E.length>0?`${O.includes("?")?"&":"?"}${E.join("&")}`:""}`,L={...k};for(const q of j("header"))zn(N[q.key])||(L[q.name]=String(N[q.key]));let H;if(y==="props"){const q={};for(const A of j("body")){const W=Np(N[A.key],A.type);W!==void 0&&(q[A.name]=W)}H=q}else if(y==="whole"){const q=j("body")[0];H=q?x==="object"||x==="array"?Np(N[q.key],x):zn(N[q.key])?void 0:String(N[q.key]):void 0}const F={};for(const q of g)zn(N[q.key])||(F[q.key]=N[q.key]);return{name:`http_${e.id}`,taskReferenceName:C.taskReferenceName,type:"HTTP",description:`调用接口:${i}`,inputParameters:{_actionId:a,actionName:i,...F,http_request:{uri:R,method:e.method,...Object.keys(L).length>0?{headers:L}:{},accept:"application/json",...e.body&&H!==void 0?{contentType:e.body.contentType,body:H}:{}}}}},w=(e.description||e.summary||"").split(`
283
+ `)[0].trim();return{id:a,name:i,category:"network",icon:"plug",description:`${e.method} ${b}${S}${w?`:${w.slice(0,80)}`:""}`,kind:"task",tags:["导入",...e.tags],riskLevel:["GET","HEAD","OPTIONS"].includes(e.method)?"safe":"sensitive",fields:g,outputs:v,compile:_,decompile:I=>{if(I.type!=="HTTP"||I.inputParameters?._actionId!==a)return null;const C={};for(const N of g){const O=I.inputParameters[N.key];O!==void 0&&(C[N.key]=O)}return C},mockOutput:()=>{const I={};for(const C of v)RC(I,C.key,C.example);return I}}}function $C(e,t){return new Set(e.length<=t?e.map(r=>r.id):[])}function LC(e,t){const r=e.slice(0,t);return{visible:r,hiddenCount:e.length-r.length}}function DC(e,t,r){const n=new Set(e);for(const s of t)r?n.add(s.id):n.delete(s.id);return n}const Wk=200,zk=5*1024*1024,MC={openapi3:"OpenAPI 3",swagger2:"Swagger 2",postman21:"Postman Collection",curl:"curl 命令"},WC=`粘贴 OpenAPI 3 / Swagger 2 / Postman Collection v2.1(JSON)或 curl 命令,也可点击右侧「选择文件」。
284
+
285
+ 示例 curl:
286
+ ${_C}
287
+
288
+ 注意:仅支持 JSON,YAML 请先转为 JSON 后再导入。`;function qk(e){switch(e){case"GET":return"var(--color-info)";case"POST":return"var(--color-success)";case"PUT":case"PATCH":return"var(--color-warning)";case"DELETE":return"var(--color-error)";default:return"var(--text-secondary)"}}const zC='button:not([disabled]), input:not([disabled]), textarea:not([disabled]), [href], [tabindex]:not([tabindex="-1"])',Fk=e=>!e.open||typeof document>"u"?null:o.jsx(qC,{...e}),qC=({onClose:e,onInsert:t,existingActionIds:r})=>{const{theme:n,themeColor:s}=re($e(A=>({theme:A.theme,themeColor:A.themeColor}))),[a,i]=T.useState(""),[l,c]=T.useState(null),[d,u]=T.useState(null),[p,f]=T.useState(""),[m,h]=T.useState(new Set),[y,x]=T.useState(!1),g=T.useRef(null),v=T.useRef(null),k=T.useRef(null),b=T.useMemo(()=>a.trim()?Lk(a):null,[a]),S=T.useMemo(()=>b&&b.ok?b.operations:[],[b]);T.useEffect(()=>{h($C(S,Wk)),f(""),x(!1)},[S]),T.useEffect(()=>{const A=document.activeElement;return v.current?.focus(),()=>{A&&typeof A.focus=="function"&&A.focus()}},[]);const j=p.trim().toLowerCase(),_=T.useMemo(()=>S.filter(A=>!j||`${A.method} ${A.path} ${A.summary||""} ${A.operationId||""} ${A.tags.join(" ")}`.toLowerCase().includes(j)),[S,j]),{visible:w,hiddenCount:I}=LC(_,Wk),C=S.filter(A=>m.has(A.id)).length,N=A=>h(W=>{const P=new Set(W);return P.has(A)?P.delete(A):P.add(A),P}),O=A=>h(W=>DC(W,w,A)),E=async A=>{if(A){if(u(null),A.size>zk){u(`文件超过 ${zk/1024/1024} MB,请精简后再导入`);return}try{const W=await A.text();c(A.name),i(W)}catch{u("读取文件失败,请重试或直接粘贴内容")}}},R=()=>{if(!b||!b.ok||C===0)return;const A=new Set(r||[]),W=[];for(const P of S){if(!m.has(P.id))continue;const $=Mk(P,{existingIds:A});A.add($.id),W.push($)}t(W,{format:b.format,count:W.length,warnings:b.warnings}),e()},L=A=>{if(A.key==="Escape"){A.stopPropagation(),e();return}if(A.key==="Tab"&&g.current){const W=Array.from(g.current.querySelectorAll(zC));if(W.length===0)return;const P=W[0],$=W[W.length-1],X=document.activeElement;A.shiftKey&&X===P?(A.preventDefault(),$.focus()):!A.shiftKey&&X===$&&(A.preventDefault(),P.focus())}},H=b&&b.ok?b.warnings:[],F=y?H:H.slice(0,5),q={height:28,padding:"0 12px",borderRadius:6,fontSize:12,fontFamily:"inherit",cursor:"pointer",border:"1px solid var(--border-secondary)",background:"transparent",color:"var(--text-secondary)"};return kt.createPortal(o.jsx("div",{"data-mode":n,"data-brand":s,style:{position:"fixed",inset:0,background:"var(--cm-overlay)",backdropFilter:"blur(2px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit",colorScheme:n==="light"?"light":"dark"},onClick:e,children:o.jsxs("div",{ref:g,role:"dialog","aria-modal":"true","aria-labelledby":"api-import-title",onClick:A=>A.stopPropagation(),onKeyDown:L,style:{width:820,maxWidth:"calc(100vw - 48px)",height:"min(700px, 90vh)",background:"var(--bg-primary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"var(--cm-shadow-float)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[o.jsxs("div",{style:{padding:"14px 18px",borderBottom:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:12},children:[o.jsxs("div",{id:"api-import-title",style:{fontWeight:600,fontSize:15,flex:1},children:["导入接口",o.jsx("span",{style:{marginLeft:8,fontSize:12,fontWeight:400,color:"var(--text-muted)"},children:"把已有接口变成可复用的 HTTP 步骤"})]}),o.jsx("button",{type:"button",onClick:e,"aria-label":"关闭",style:{background:"none",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16,padding:4,lineHeight:1},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsxs("div",{style:{padding:"12px 18px",borderBottom:"1px solid var(--border-primary)",background:"var(--bg-secondary)",display:"flex",flexDirection:"column",gap:8},children:[o.jsx("textarea",{ref:v,"aria-label":"接口文档或 curl 命令",value:a,onChange:A=>{i(A.target.value),c(null)},placeholder:WC,spellCheck:!1,style:{width:"100%",boxSizing:"border-box",height:S.length>0?72:150,resize:"vertical",padding:"8px 10px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontFamily:"var(--font-mono)",fontSize:12,lineHeight:1.5,outline:"none"}}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,minHeight:28},children:[o.jsx("input",{ref:k,type:"file",accept:".json,.txt,.curl,.sh,application/json,text/plain","aria-label":"选择接口文档文件",style:{display:"none"},onChange:A=>{E(A.target.files?.[0]),A.target.value=""}}),o.jsx("button",{type:"button",style:q,onClick:()=>k.current?.click(),children:"选择文件"}),l&&o.jsx("span",{style:{fontSize:12,color:"var(--text-muted)"},children:l}),o.jsx("div",{style:{flex:1}}),b&&b.ok&&o.jsxs("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:999,background:"var(--color-accent-bg)",color:"var(--color-accent-text)",border:"1px solid var(--color-accent)"},children:["已识别:",MC[b.format]," · ",S.length," 个接口"]})]}),d&&o.jsx("div",{role:"alert",style:{fontSize:12,color:"var(--color-error)"},children:d}),b&&!b.ok&&o.jsx("div",{role:"alert",style:{fontSize:12,lineHeight:1.5,padding:"6px 10px",borderRadius:6,color:b.format==="yaml"?"var(--color-warning)":"var(--color-error)",background:`color-mix(in srgb, ${b.format==="yaml"?"var(--color-warning)":"var(--color-error)"} 12%, transparent)`},children:b.error}),H.length>0&&o.jsxs("div",{role:"status",style:{fontSize:12,lineHeight:1.5,padding:"6px 10px",borderRadius:6,color:"var(--text-primary)",background:"color-mix(in srgb, var(--color-warning) 12%, transparent)",border:"1px solid color-mix(in srgb, var(--color-warning) 40%, transparent)",maxHeight:y?120:void 0,overflowY:y?"auto":void 0},children:[o.jsxs("div",{style:{fontWeight:600,color:"var(--color-warning)"},children:["提示(",H.length,")"]}),o.jsx("ul",{style:{margin:"2px 0 0",paddingLeft:18},children:F.map(A=>o.jsx("li",{children:A},A))}),H.length>5&&o.jsx("button",{type:"button",onClick:()=>x(A=>!A),style:{background:"none",border:"none",padding:0,marginTop:2,color:"var(--color-accent-text)",cursor:"pointer",fontSize:12},children:y?"收起":`展开全部 ${H.length} 条`})]})]}),o.jsx("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:S.length>0?o.jsxs(o.Fragment,{children:[o.jsxs("div",{style:{padding:"8px 18px",display:"flex",alignItems:"center",gap:10,borderBottom:"1px solid var(--border-primary)"},children:[o.jsx("input",{type:"search","aria-label":"搜索接口",placeholder:"搜索方法、路径、摘要、标签…",value:p,onChange:A=>f(A.target.value),style:{flex:1,padding:"5px 10px",borderRadius:6,background:"var(--bg-secondary)",border:"1px solid var(--border-secondary)",color:"var(--text-primary)",fontSize:12,outline:"none"}}),o.jsx("button",{type:"button",style:q,onClick:()=>O(!0),children:I>0?`全选显示的 ${w.length} 项`:`全选${j?"结果":""}`}),o.jsx("button",{type:"button",style:q,onClick:()=>O(!1),children:"全不选"})]}),o.jsxs("ul",{style:{flex:1,overflowY:"auto",listStyle:"none",margin:0,padding:"6px 12px"},"aria-label":"接口列表",children:[w.map(A=>{const W=m.has(A.id);return o.jsx("li",{children:o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:10,padding:"7px 8px",borderRadius:6,cursor:"pointer",background:W?"var(--color-accent-bg)":"transparent"},children:[o.jsx("input",{type:"checkbox",checked:W,onChange:()=>N(A.id),style:{accentColor:"var(--color-accent)"}}),o.jsx("span",{style:{flexShrink:0,minWidth:52,textAlign:"center",fontSize:11,fontWeight:700,padding:"1px 6px",borderRadius:4,color:qk(A.method),background:`color-mix(in srgb, ${qk(A.method)} 15%, transparent)`},children:A.method}),o.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,flexShrink:0,maxWidth:"45%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:A.path,children:A.path}),o.jsx("span",{style:{fontSize:12,color:"var(--text-secondary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:A.summary||"",children:A.summary||""}),A.warnings.length>0&&o.jsx("span",{title:A.warnings.join(`
289
+ `),"aria-label":`${A.warnings.length} 条提示`,style:{color:"var(--color-warning)",fontSize:12,flexShrink:0},children:o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]})},A.id)}),_.length===0&&o.jsx("li",{style:{textAlign:"center",padding:"28px 0",fontSize:12,color:"var(--text-muted)"},children:"没有符合条件的接口"}),I>0&&o.jsxs("li",{style:{textAlign:"center",padding:"8px 0",fontSize:12,color:"var(--text-muted)"},children:["另有 ",I," 个未显示,请用搜索缩小范围"]})]})]}):o.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:24,textAlign:"center",fontSize:12,lineHeight:1.7,color:"var(--text-muted)"},children:b?"":"粘贴内容后会在这里列出可导入的接口"})}),o.jsxs("div",{style:{padding:"12px 18px",borderTop:"1px solid var(--border-primary)",display:"flex",alignItems:"center",gap:10},children:[o.jsx("span",{style:{fontSize:12,color:"var(--text-muted)",flex:1},children:"认证信息不会写入流程定义;导入结果仅保存在当前流程与本次会话的动作库中"}),o.jsx("button",{type:"button",style:q,onClick:e,children:"取消"}),o.jsxs("button",{type:"button",disabled:C===0,onClick:R,style:{...q,border:"1px solid var(--color-accent)",background:"var(--color-accent)",color:"var(--text-inverse)",fontWeight:600,opacity:C===0?.5:1,cursor:C===0?"not-allowed":"pointer"},children:["插入 ",C," 个步骤"]})]})]})}),document.body)};function FC(e="imported_api_workflow"){return{name:e,description:"由接口导入生成",version:1,schemaVersion:2,tasks:[],inputParameters:[]}}function qn(e,t){for(const r of e){r.taskReferenceName&&t.add(r.taskReferenceName);for(const n of r.forkTasks||[])qn(n,t);for(const n of Object.values(r.decisionCases||{}))qn(n,t);r.defaultCase&&qn(r.defaultCase,t),r.loopOver&&qn(r.loopOver,t)}}function BC(e){const t=new Set,r=JSON.stringify(e);for(const n of r.matchAll(/\$\{workflow\.input\.([A-Za-z_][\w-]*)/g))t.add(n[1]);return Array.from(t)}function Bk(e,t){const r=e??FC(),n=new Fs(t),s=new Set;qn(r.tasks||[],s);const a=[],i=(r.tasks||[]).length;t.forEach((u,p)=>{let f=ir(u);for(;s.has(f.taskReferenceName);)f=ir(u);s.add(f.taskReferenceName),a.push(ep(f,i+p,r.name,n))});const l=Ct(r.inputParameters).map(u=>u.name),c=BC(a).filter(u=>!l.includes(u));let d=r.inputParameters;if(c.length>0)if(Array.isArray(d)&&d.length>0&&typeof d[0]=="string")d=[...d,...c];else{const u=c.map(p=>({name:p,type:"string",description:"接口导入引入的入参"}));d=[...d||[],...u]}return{...r,tasks:[...r.tasks||[],...a],...d?{inputParameters:d}:{}}}function Hk(e){return(e??"").replace(/-/g,"").trim()}function Fn(e){return[e.type,e.level,Hk(e.domain),Hk(e.product),(e.func??"").trim()].join("-")}function Cp(e,t){return Gu(Fn(e),t)}const HC=/[㐀-鿿]/;function Jk(e){const t=(e??"").trim();return t?HC.test(t)?t.replace(/-/g,"").replace(/\s+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,""):t.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,""):""}function Uk(e,t){if(!Hs(e))return null;const n=e.indexOf("-");return`${t}${e.slice(n)}`}function Vk(e){return e?Hs(e)?.type==="tmp":!1}function Kk(e){const t={name:e.name,description:(e.description??"").trim(),version:1,schemaVersion:2,tasks:[],inputParameters:[],outputParameters:{}};return e.ownerEmail&&(t.ownerEmail=e.ownerEmail),t}function JC(e,t){const r=Gu(e??"",t&&t.length>0?t:void 0);return r.length===0?null:`已保存。${e&&e.trim()?`流程名称「${e}」`:"流程名称"}不符合命名规范:${r.join(";")}。申请上线前请在流程设置里改名。`}const jr=["product","naming","start"],UC={product:"产品",naming:"命名",start:"起点"};function VC(e,t="L2"){const r=e.products[0];return{productMode:r?"existing":"new",productName:r?.name??"",domain:r?.domain??"",systemCode:"",type:e.trial?"tmp":"custom",level:t,func:"",description:"",source:"blank"}}function KC(e){const t=(e??"").trim();return t?/-/.test(t)?"产品名称不能包含「-」":/\s/.test(t)?"产品名称不能包含空白字符":null:"请填写产品名称"}function Gk(e,t,r){if(e.productMode==="existing")return t.products.some(s=>s.name===e.productName)?null:"请选择一个所属产品";if(!t.trial)return"当前环境不开放自助试用,请选择已有产品";const n=KC(e.productName);return n||(e.domain?r.length>0&&r.indexOf(e.domain)<0?`业务域「${e.domain}」不在允许的列表中`:null:"请选择业务域")}function aa(e,t){return{type:t?"tmp":e.type,level:e.level,domain:e.domain,product:e.productName,func:e.func}}function GC(e,t,r){return Cp(aa(e,t),r.length>0?r:void 0)}function YC(e,t,r,n){return e==="product"?Gk(t,r,n)===null:e==="naming"?GC(t,r.trial,n).length===0:!0}function XC(e){const t=jr.indexOf(e);return jr[Math.min(t+1,jr.length-1)]}function ZC(e){const t=jr.indexOf(e);return jr[Math.max(t-1,0)]}function QC(e){const t=["blank"];return e.hasTemplate&&t.push("template"),e.hasImport&&t.push("import"),t}const Yk='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function Xk({titleId:e,title:t,onClose:r,children:n,footer:s,width:a=560}){const{theme:i,themeColor:l}=re($e(u=>({theme:u.theme,themeColor:u.themeColor}))),c=T.useRef(null),d=T.useRef(r);return d.current=r,T.useEffect(()=>{const u=document.activeElement,p=c.current;p&&(p.querySelector(Yk)??p).focus({preventScroll:!0});const f=m=>{if(m.key==="Escape"){m.stopPropagation(),d.current();return}if(m.key!=="Tab"||!c.current)return;const h=Array.from(c.current.querySelectorAll(Yk));if(h.length===0)return;const y=h[0],x=h[h.length-1],g=document.activeElement;m.shiftKey&&(g===y||!c.current.contains(g))?(m.preventDefault(),x.focus()):!m.shiftKey&&(g===x||!c.current.contains(g))&&(m.preventDefault(),y.focus())};return window.addEventListener("keydown",f),()=>{window.removeEventListener("keydown",f),u&&typeof u.focus=="function"&&document.contains(u)&&u.focus({preventScroll:!0})}},[]),typeof document>"u"?null:kt.createPortal(o.jsx("div",{"data-mode":i,"data-brand":l,onClick:r,style:{position:"fixed",inset:0,background:"var(--cm-overlay)",backdropFilter:"blur(2px)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",padding:24,fontFamily:"inherit",colorScheme:i==="light"?"light":"dark"},children:o.jsxs("div",{ref:c,role:"dialog","aria-modal":"true","aria-labelledby":e,tabIndex:-1,onClick:u=>u.stopPropagation(),style:{width:a,maxWidth:"100%",maxHeight:"100%",display:"flex",flexDirection:"column",background:"var(--bg-secondary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:10,boxShadow:"var(--cm-shadow-float)",outline:"none"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"14px 18px",borderBottom:"1px solid var(--border-primary)"},children:[o.jsx("h2",{id:e,style:{margin:0,flex:1,fontSize:15,fontWeight:700,color:"var(--text-primary)"},children:t}),o.jsx("button",{type:"button",onClick:r,"aria-label":"关闭",title:"关闭 (Esc)",style:{background:"transparent",border:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:16,lineHeight:1,padding:4},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),o.jsx("div",{style:{padding:18,overflowY:"auto",flex:1},children:n}),s&&o.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,justifyContent:"flex-end",padding:"12px 18px",borderTop:"1px solid var(--border-primary)"},children:s})]})}),document.body)}const lt={display:"block",fontSize:12,fontWeight:600,color:"var(--text-secondary)",marginBottom:4},Tt={width:"100%",boxSizing:"border-box",height:32,padding:"0 8px",background:"var(--bg-primary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:6,fontSize:13,fontFamily:"inherit"},lr={fontSize:11,color:"var(--text-muted)",marginTop:4},Ep={fontSize:12,color:"var(--color-error)",margin:"4px 0 0"},Zk={height:32,padding:"0 14px",borderRadius:6,fontSize:13,fontWeight:600,fontFamily:"inherit",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:6},Bn={...Zk,background:"var(--color-accent)",color:"var(--color-accent-text)",border:"1px solid var(--color-accent)"},Hr={...Zk,background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-primary)"};function Hn(e,t){return t?{...e,opacity:.5,cursor:"not-allowed"}:e}const oa=e=>({padding:"8px 10px",borderRadius:6,fontSize:12,lineHeight:1.5,color:"var(--text-primary)",background:"var(--bg-primary)",border:`1px solid var(--color-${e})`}),eE=["L1","L2","L3"],tE={L1:"L1 最上层,可调用 L2 / L3",L2:"L2 中间层,可调用 L3",L3:"L3 最底层,原子能力"},rE=["custom","std"];function Qk({products:e,domains:t,trial:r,value:n,onChange:s,disabled:a}){const i=T.useId(),[l,c]=T.useState(!1),d=T.useMemo(()=>({...n,type:r?"tmp":n.type==="std"?"std":"custom"}),[n,r]),u=Fn(d),f=T.useMemo(()=>Cp(d,t&&t.length>0?t:void 0),[d,t]).filter(k=>l||n.func.trim()!==""||k.indexOf("功能不能为空")<0),m=Jk(n.func),h=n.func.trim()!==""&&m!==""&&m!==n.func.trim(),y=k=>s({...d,...k}),x=e.find(k=>k.name===n.product),g=k=>`${i}-${k}`,v={minWidth:0};return o.jsxs("div",{children:[o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(150px, 1fr))",gap:12},children:[o.jsxs("div",{style:v,children:[o.jsx("label",{htmlFor:g("type"),style:lt,children:"类型"}),r?o.jsx("select",{id:g("type"),value:"tmp",disabled:!0,style:{...Tt,opacity:.7},"aria-describedby":g("type-hint"),children:o.jsx("option",{value:"tmp",children:"tmp(临时)"})}):o.jsx("select",{id:g("type"),value:d.type,disabled:a,onChange:k=>y({type:k.target.value}),style:Tt,"aria-describedby":g("type-hint"),children:rE.map(k=>o.jsx("option",{value:k,children:k==="custom"?"custom(自定义)":"std(通用)"},k))}),o.jsx("div",{id:g("type-hint"),style:lr,children:r?"试用环境固定为临时流程,会被定期清理":"生产环境可选自定义或通用"})]}),o.jsxs("div",{style:v,children:[o.jsx("label",{htmlFor:g("level"),style:lt,children:"层级"}),o.jsx("select",{id:g("level"),value:d.level,disabled:a,onChange:k=>y({level:k.target.value}),style:Tt,"aria-describedby":g("level-hint"),children:eE.map(k=>o.jsx("option",{value:k,children:k},k))}),o.jsx("div",{id:g("level-hint"),style:lr,children:tE[d.level]})]}),o.jsxs("div",{style:v,children:[o.jsx("label",{htmlFor:g("product"),style:lt,children:"产品"}),o.jsxs("select",{id:g("product"),value:x?x.name:"",disabled:a||e.length===0,onChange:k=>{const b=e.find(S=>S.name===k.target.value);y({product:b?.name??"",domain:b?.domain??""})},style:Tt,"aria-describedby":g("product-hint"),children:[o.jsx("option",{value:"",children:e.length===0?"暂无产品":"请选择产品"}),e.map(k=>o.jsxs("option",{value:k.name,children:[k.name,k.status==="PENDING"?"(待生效)":""]},k.name))]}),o.jsx("div",{id:g("product-hint"),style:lr,children:"来自「我的产品」"})]}),o.jsxs("div",{style:v,children:[o.jsx("label",{htmlFor:g("domain"),style:lt,children:"业务域"}),o.jsx("input",{id:g("domain"),value:x?x.domain:n.domain,readOnly:!0,style:{...Tt,opacity:.8},placeholder:"随产品带出","aria-describedby":g("domain-hint")}),o.jsx("div",{id:g("domain-hint"),style:lr,children:"由所选产品决定"})]}),o.jsxs("div",{style:{...v,gridColumn:"1 / -1"},children:[o.jsx("label",{htmlFor:g("func"),style:lt,children:"功能"}),o.jsx("input",{id:g("func"),value:n.func,disabled:a,onChange:k=>y({func:k.target.value}),onBlur:()=>c(!0),placeholder:"例如 create_vm(推荐小写 snake_case)",style:Tt,"aria-describedby":g("func-hint"),"aria-invalid":l&&n.func.trim()===""}),o.jsxs("div",{id:g("func-hint"),style:lr,children:["说明这个流程做什么,用 snake_case 更易检索",h&&o.jsxs(o.Fragment,{children:[" · 建议:",o.jsx("button",{type:"button",disabled:a,onClick:()=>y({func:m}),style:{background:"none",border:"none",padding:0,color:"var(--color-accent)",cursor:"pointer",fontSize:11,fontFamily:"inherit",textDecoration:"underline"},children:m})]})]})]})]}),o.jsxs("div",{style:{marginTop:14},children:[o.jsx("div",{style:lt,children:"完整名称预览"}),o.jsx("code",{"aria-live":"polite","data-testid":"name-preview",style:{display:"block",padding:"8px 10px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-primary)",color:"var(--text-primary)",fontSize:13,wordBreak:"break-all"},children:u}),f.length>0&&o.jsx("ul",{role:"alert",style:{margin:"6px 0 0",paddingLeft:18},children:f.map(k=>o.jsx("li",{style:Ep,children:k},k))})]})]})}const e0={blank:{title:"空白流程",desc:"从一个空画布开始,自己添加步骤"},template:{title:"从模板中心开始",desc:"选择场景模板,按向导填空即可得到可用流程"},import:{title:"从接口导入",desc:"粘贴 OpenAPI / Postman / curl,把已有接口变成步骤"}};function nE(e){return e instanceof Error&&e.message?e.message:"请求失败,请稍后重试"}function t0({provider:e,trialEnabled:t,products:r,domains:n,defaultLevel:s="L2",ownerEmail:a,onClose:i,onCreate:l,onTrialStarted:c,onPickTemplate:d,onImportApi:u}){const p=T.useId(),f=T.useId(),[m,h]=T.useState("product"),[y,x]=T.useState([]),g=T.useMemo(()=>{const $=y.filter(X=>!r.some(D=>D.name===X.name));return[...r,...$]},[r,y]),v=T.useMemo(()=>({trial:t,products:g}),[t,g]),[k,b]=T.useState(()=>VC({trial:t,products:r},s)),[S,j]=T.useState(!1),[_,w]=T.useState(null),[I,C]=T.useState(null),N=T.useCallback($=>{b(X=>({...X,...$})),w(null),C(null)},[]),O=QC({hasTemplate:!!d,hasImport:!!u}),E=Gk(k,v,n),R=YC(m,k,v,n),L=jr.indexOf(m),H=T.useCallback(async()=>{if(k.productMode==="existing"){h("naming");return}j(!0),w(null),C(null);try{const $=await e.startTrial({productName:k.productName.trim(),domain:k.domain,systemCode:k.systemCode.trim()||void 0});if($.status==="conflict"){C($.owners);return}x(X=>[...X.filter(D=>D.name!==$.product.name),$.product]),b(X=>({...X,productMode:"existing",productName:$.product.name,domain:$.product.domain})),c?.($.product),h("naming")}catch($){w(nE($))}finally{j(!1)}},[k.productMode,k.productName,k.domain,k.systemCode,e,c]),F=T.useCallback(()=>{const $=Fn(aa(k,t)),X=Kk({name:$,description:k.description,ownerEmail:a});l({def:X,level:k.level,source:k.source}),i(),k.source==="template"?d?.():k.source==="import"&&u?.()},[k,t,a,l,i,d,u]),q=()=>{S||!R||(m==="product"?H():h(XC(m)))},A=m==="start",W=m==="product"&&k.productMode==="new"?"登记并继续":"下一步",P=o.jsxs(o.Fragment,{children:[L>0&&o.jsx("button",{type:"button",style:Hn(Hr,S),disabled:S,onClick:()=>h(ZC(m)),children:"上一步"}),o.jsx("span",{style:{flex:1}}),o.jsx("button",{type:"button",style:Hr,onClick:i,children:"取消"}),A?o.jsx("button",{type:"button",style:Bn,onClick:F,children:"创建流程"}):o.jsx("button",{type:"button",style:Hn(Bn,S||!R),disabled:S||!R,onClick:q,children:S?"处理中…":W})]});return o.jsxs(Xk,{titleId:p,title:"新建流程",onClose:i,footer:P,width:600,children:[o.jsx("ol",{"aria-label":"步骤",style:{display:"flex",gap:8,listStyle:"none",padding:0,margin:"0 0 16px"},children:jr.map(($,X)=>{const D=$===m,B=X<L;return o.jsxs("li",{"aria-current":D?"step":void 0,style:{flex:1,textAlign:"center",padding:"6px 0",fontSize:12,fontWeight:D?700:500,borderRadius:6,color:D?"var(--color-accent-text)":B?"var(--color-success)":"var(--text-muted)",background:D?"var(--color-accent)":"var(--bg-primary)",border:"1px solid var(--border-primary)"},children:[X+1,". ",UC[$],B?o.jsx(Wt,{size:12,strokeWidth:1.75,"aria-hidden":"true",style:{verticalAlign:-2,marginLeft:4}}):null]},$)})}),m==="product"&&o.jsxs("div",{children:[o.jsxs("div",{style:{marginBottom:12},children:[o.jsx("label",{htmlFor:`${f}-pm`,style:lt,children:"所属产品"}),o.jsxs("select",{id:`${f}-pm`,value:k.productMode==="new"?"__new__":k.productName,disabled:S,onChange:$=>{const X=$.target.value;if(X==="__new__")N({productMode:"new",productName:"",domain:""});else{const D=g.find(B=>B.name===X);N({productMode:"existing",productName:X,domain:D?.domain??""})}},style:Tt,children:[g.length===0&&k.productMode==="existing"&&o.jsx("option",{value:"",children:"暂无产品"}),g.map($=>o.jsxs("option",{value:$.name,children:[$.name,"(",$.domain,")"]},$.name)),t&&o.jsx("option",{value:"__new__",children:"+ 登记新产品(开始试用)"})]}),!t&&g.length===0&&o.jsx("p",{style:{...Ep,marginTop:6},children:"当前环境不开放自助试用,且你还没有所属产品,请联系平台管理员。"})]}),k.productMode==="new"&&o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:12},children:[o.jsxs("div",{children:[o.jsx("label",{htmlFor:`${f}-pn`,style:lt,children:"产品名称"}),o.jsx("input",{id:`${f}-pn`,value:k.productName,disabled:S,onChange:$=>N({productName:$.target.value}),placeholder:"例如 ecs(不含 -)",style:Tt})]}),o.jsxs("div",{children:[o.jsx("label",{htmlFor:`${f}-pd`,style:lt,children:"业务域"}),o.jsxs("select",{id:`${f}-pd`,value:k.domain,disabled:S,onChange:$=>N({domain:$.target.value}),style:Tt,children:[o.jsx("option",{value:"",children:"请选择业务域"}),n.map($=>o.jsx("option",{value:$,children:$},$))]})]}),o.jsxs("div",{style:{gridColumn:"1 / -1"},children:[o.jsx("label",{htmlFor:`${f}-ps`,style:lt,children:"系统编码(可选)"}),o.jsx("input",{id:`${f}-ps`,value:k.systemCode,disabled:S,onChange:$=>N({systemCode:$.target.value}),style:Tt}),o.jsx("div",{style:lr,children:"登记后你自动成为该产品的负责人,可以马上开始试用。"})]})]}),k.productMode==="new"&&k.productName!==""&&E&&o.jsx("p",{style:Ep,children:E}),I&&o.jsxs("div",{role:"alert",style:{...oa("warning"),marginTop:12},children:["产品「",k.productName.trim(),"」已存在,请联系负责人把你加入该产品:",o.jsx("ul",{style:{margin:"4px 0 0",paddingLeft:18},children:I.map($=>o.jsx("li",{children:$.name},$.id))})]})]}),m==="naming"&&o.jsxs("div",{children:[o.jsx(Qk,{products:g,domains:n,trial:t,value:aa(k,t),onChange:$=>N({type:$.type,level:$.level,domain:$.domain,productName:$.product,func:$.func})}),o.jsxs("div",{style:{marginTop:14},children:[o.jsx("label",{htmlFor:`${f}-desc`,style:lt,children:"流程说明(可选)"}),o.jsx("textarea",{id:`${f}-desc`,value:k.description,onChange:$=>N({description:$.target.value}),rows:3,placeholder:"一句话说明这个流程做什么,会写入流程描述",style:{...Tt,height:"auto",padding:8,resize:"vertical"}})]})]}),m==="start"&&o.jsxs("fieldset",{style:{border:"none",padding:0,margin:0},children:[o.jsx("legend",{style:lt,children:"选择起点"}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:O.map($=>{const X=k.source===$;return o.jsxs("label",{style:{display:"flex",gap:10,alignItems:"flex-start",padding:"10px 12px",borderRadius:8,cursor:"pointer",background:X?"var(--color-accent-bg)":"var(--bg-primary)",border:`1px solid ${X?"var(--color-accent)":"var(--border-primary)"}`},children:[o.jsx("input",{type:"radio",name:`${f}-src`,checked:X,onChange:()=>N({source:$}),style:{marginTop:3}}),o.jsxs("span",{children:[o.jsx("span",{style:{display:"block",fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:e0[$].title}),o.jsx("span",{style:{display:"block",fontSize:12,color:"var(--text-secondary)"},children:e0[$].desc})]})]},$)})}),o.jsxs("div",{style:{marginTop:12,fontSize:12,color:"var(--text-secondary)"},children:["将创建:",o.jsx("code",{style:{color:"var(--text-primary)"},children:Fn(aa(k,t))})]})]}),_&&o.jsxs("div",{role:"alert",style:{...oa("error"),marginTop:12,display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{style:{flex:1},children:_}),o.jsx("button",{type:"button",style:Hn(Hr,S),disabled:S,onClick:q,children:"重试"})]})]})}const sE=2e3,aE=3e4;function r0(e){const t=Number.isFinite(e)&&e>0?Math.floor(e):0;return Math.min(aE,sE*Math.pow(2,Math.min(t,10)))}function ia(e){return e==="REJECTED"||e==="SYNCED"}const n0={SUBMITTED:"已提交",REVIEWING:"审批中",APPROVED:"审批通过",REJECTED:"已驳回",SYNCED:"已同步到生产"};function oE(e){return n0[e]}function s0(e){const t=e==="REJECTED"?["SUBMITTED","REVIEWING","REJECTED"]:["SUBMITTED","REVIEWING","APPROVED","SYNCED"],r=e?t.indexOf(e):-1;return t.map((n,s)=>{let a;return n==="REJECTED"&&e==="REJECTED"?a="failed":r===s?a=ia(n)||n==="APPROVED"?"done":"current":e==="APPROVED"&&n==="SYNCED"?a="current":s<r?a="done":a="pending",{state:n,label:n0[n],status:a}})}function la(){const e=new Error("已取消");return e.name="AbortError",e}function a0(e){return!!e&&typeof e=="object"&&e.name==="AbortError"}function iE(e,t){return t?.aborted?Promise.reject(la()):new Promise((r,n)=>{const s=()=>{clearTimeout(a),n(la())},a=setTimeout(()=>{t?.removeEventListener("abort",s),r()},e);t?.addEventListener("abort",s,{once:!0})})}async function o0(e){const t=e.sleep??iE;let r=0;for(;;){if(e.signal?.aborted)throw la();const n=await e.provider.getPromotion(e.requestId,e.signal);if(e.signal?.aborted)throw la();if(e.onUpdate?.(n),ia(n.state))return n;await t(r0(r),e.signal),r+=1}}const lE=[{value:"custom",title:"custom(自定义)",desc:"仅本产品使用的流程"},{value:"std",title:"std(通用)",desc:"面向多个产品复用的通用能力,审批更严格"}];function i0(e){return e instanceof Error&&e.message?e.message:"请求失败,请稍后重试"}const l0={done:"var(--color-success)",current:"var(--color-accent)",failed:"var(--color-error)",pending:"var(--text-muted)"};function c0({provider:e,workflowName:t,version:r,onClose:n,onRequested:s,onStateChange:a,resumeRequest:i,onRequestChange:l}){const c=T.useId(),[d,u]=T.useState(i?.targetType??"custom"),[p,f]=T.useState(i?.requestId??null),[m,h]=T.useState(null),[y,x]=T.useState(!1),[g,v]=T.useState(!1),[k,b]=T.useState(null),S=T.useRef(null),j=T.useRef(null),_=T.useRef({onRequested:s,onStateChange:a,onRequestChange:l});_.current={onRequested:s,onStateChange:a,onRequestChange:l};const w=Uk(t,d);T.useEffect(()=>()=>S.current?.abort(),[]);const I=T.useCallback(async L=>{S.current?.abort();const H=new AbortController;S.current=H,v(!0),b(null);try{await o0({provider:e,requestId:L,signal:H.signal,onUpdate:F=>{h(F),j.current!==F.state&&(j.current=F.state,_.current.onStateChange?.(F.state)),ia(F.state)&&_.current.onRequestChange?.(null)}})}catch(F){a0(F)||b(i0(F))}finally{S.current===H&&v(!1)}},[e]),C=async()=>{if(!(y||!w)){x(!0),b(null);try{const{requestId:L}=await e.requestPromotion({workflowName:t,version:r,targetType:d});f(L),_.current.onRequestChange?.({requestId:L,targetType:d}),_.current.onRequested?.(d),I(L)}catch(L){b(i0(L))}finally{x(!1)}}},N=T.useRef(i?.requestId??null);T.useEffect(()=>{N.current&&I(N.current)},[I]);const O=p!==null,E=s0(m?m.state:O?"SUBMITTED":null),R=O?o.jsx("button",{type:"button",style:Bn,onClick:n,children:"关闭"}):o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",style:Hr,onClick:n,children:"取消"}),o.jsx("button",{type:"button",style:Hn(Bn,y||!w),disabled:y||!w,onClick:()=>{C()},children:y?"提交中…":"提交申请"})]});return o.jsxs(Xk,{titleId:c,title:"申请上线",onClose:n,footer:R,width:520,children:[o.jsxs("div",{style:{fontSize:12,color:"var(--text-secondary)",marginBottom:12},children:["当前流程:",o.jsx("code",{style:{color:"var(--text-primary)"},children:t}),"(版本 ",r,")"]}),!O&&o.jsxs("fieldset",{style:{border:"none",padding:0,margin:0},children:[o.jsx("legend",{style:lt,children:"上线为"}),o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:lE.map(L=>{const H=d===L.value;return o.jsxs("label",{style:{display:"flex",gap:10,alignItems:"flex-start",padding:"10px 12px",borderRadius:8,cursor:"pointer",background:H?"var(--color-accent-bg)":"var(--bg-primary)",border:`1px solid ${H?"var(--color-accent)":"var(--border-primary)"}`},children:[o.jsx("input",{type:"radio",name:"promotion-target",checked:H,onChange:()=>u(L.value),style:{marginTop:3}}),o.jsxs("span",{children:[o.jsx("span",{style:{display:"block",fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:L.title}),o.jsx("span",{style:{display:"block",fontSize:12,color:"var(--text-secondary)"},children:L.desc})]})]},L.value)})})]}),o.jsxs("div",{style:{marginTop:14},children:[o.jsx("div",{style:lt,children:"正式名称预览"}),o.jsx("code",{style:{display:"block",padding:"8px 10px",borderRadius:6,background:"var(--bg-primary)",border:"1px solid var(--border-primary)",color:"var(--text-primary)",fontSize:13,wordBreak:"break-all"},children:m?.targetName??w??"(流程名称不符合规范,无法申请)"}),!O&&o.jsx("div",{style:lr,children:"审批通过后,临时流程会以正式名称同步到生产环境。"})]}),O&&o.jsxs("div",{style:{marginTop:16},children:[o.jsx("div",{style:lt,children:"审批进度"}),o.jsx("ol",{"aria-label":"审批进度",style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:8},children:E.map(L=>o.jsxs("li",{"aria-current":L.status==="current"?"step":void 0,style:{display:"flex",alignItems:"center",gap:8,fontSize:13,color:L.status==="pending"?"var(--text-muted)":"var(--text-primary)"},children:[o.jsx("span",{"aria-hidden":"true",style:{width:10,height:10,borderRadius:"50%",background:L.status==="pending"?"transparent":l0[L.status],border:`2px solid ${l0[L.status]}`,flexShrink:0}}),o.jsx("span",{children:L.label}),L.status==="current"&&g&&o.jsx("span",{style:{fontSize:11,color:"var(--text-muted)"},children:"进行中…"}),L.status==="failed"&&o.jsx("span",{style:{fontSize:11,color:"var(--color-error)"},children:"未通过"})]},L.state))}),m?.comment&&o.jsxs("div",{role:"status",style:{...oa(m.state==="REJECTED"?"error":"success"),marginTop:12},children:["审批意见:",m.comment]}),m?.state==="REJECTED"&&o.jsx("div",{style:lr,children:"修改流程后可重新申请上线。"})]}),k&&o.jsxs("div",{role:"alert",style:{...oa("error"),marginTop:12,display:"flex",alignItems:"center",gap:8},children:[o.jsx("span",{style:{flex:1},children:k}),o.jsx("button",{type:"button",style:Hn(Hr,y||g),disabled:y||g,onClick:()=>p?void I(p):void C(),children:"重试"})]})]})}function d0({onStart:e,onDismiss:t}){return o.jsxs("div",{role:"region","aria-label":"开始试用引导",style:{maxWidth:420,padding:"24px 28px",textAlign:"center",background:"var(--bg-secondary)",color:"var(--text-primary)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"var(--cm-shadow-float)"},children:[o.jsx("div",{"aria-hidden":"true",style:{fontSize:32,marginBottom:8},children:o.jsx(mn,{size:32,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("h3",{style:{margin:"0 0 6px",fontSize:16,fontWeight:700},children:"开始试用编排平台"}),o.jsx("p",{style:{margin:"0 0 16px",fontSize:13,lineHeight:1.6,color:"var(--text-secondary)"},children:"登记你的产品、按规范命名,几分钟内就能在测试环境建出第一个流程,试跑通过后再申请上线。"}),o.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"center"},children:[o.jsx("button",{type:"button",style:Bn,onClick:e,children:"开始试用"}),t&&o.jsx("button",{type:"button",style:Hr,onClick:t,children:"暂不使用"})]})]})}function cE(e){const[t,r]=T.useState({status:"idle",context:null,domains:[],products:[],error:null}),[n,s]=T.useState(0);T.useEffect(()=>{if(!e){r({status:"idle",context:null,domains:[],products:[],error:null});return}const l=new AbortController;return r(c=>({...c,status:"loading",error:null})),Promise.all([e.getContext(l.signal),e.listDomains(l.signal),e.listMyProducts(l.signal)]).then(([c,d,u])=>{l.signal.aborted||r({status:"ready",context:c,domains:d,products:u,error:null})},c=>{l.signal.aborted||a0(c)||r(d=>({...d,status:"error",error:c instanceof Error&&c.message?c.message:"加载自助接入信息失败"}))}),()=>l.abort()},[e,n]);const a=T.useCallback(()=>s(l=>l+1),[]),i=T.useCallback(l=>{r(c=>c.products.some(d=>d.name===l.name)?c:{...c,products:[...c.products,l]})},[]);return{...t,reload:a,addProduct:i}}function dE(e){const{provider:t,track:r,disabled:n,onPickTemplate:s,onImportApi:a,ownerEmail:i}=e,l=cE(t),{addProduct:c}=l,[d,u]=T.useState(!1),[p,f]=T.useState(!1),[m,h]=T.useState(void 0),[y,x]=T.useState(!1),[g,v]=T.useState(!1),k=T.useRef(null),b=T.useRef({}),S=re(E=>E.workflowDef?.name),j=re(E=>!!E.workflowDef);T.useEffect(()=>{u(!1),f(!1),h(void 0),x(!1),k.current=null,b.current={}},[t]);const _=!!t&&!n,w=i??l.context?.user?.email,I=T.useCallback(E=>{const R=re.getState(),L=(R.workflowDef?.tasks?.length??0)>0;R.setWorkflow(E.def),R.setMode("edit"),L||re.temporal.getState().clear(),h(E.level),k.current=E.source==="blank"?null:{name:E.def.name,description:E.def.description??"",ownerEmail:E.def.ownerEmail},r("workflow_created",{level:E.level,source:E.source})},[r]),C=T.useCallback(E=>{c(E),r("trial_started",{domain:E.domain})},[c,r]),N=l.context?.trialEnabled===!0,O=_&&l.status==="ready"&&N&&l.products.length===0&&!j&&!y&&!d;return{enabled:_,data:l,level:m,wizardOpen:d,promoOpen:p,openWizard:()=>{if((re.getState().workflowDef?.tasks?.length??0)>0){v(!0);return}k.current=null,u(!0)},confirmReplace:g,resolveConfirmReplace:E=>{v(!1),E&&(k.current=null,u(!0))},openPromotion:()=>f(!0),canPromote:_&&j&&Vk(S),showGuide:O,dismissGuide:()=>x(!0),takePendingIdentity:()=>{const E=k.current;return k.current=null,E},provider:t,close:()=>{u(!1),f(!1)},handleCreate:I,handleTrialStarted:C,onPickTemplate:s,onImportApi:a,ownerEmail:w,track:r,getPendingPromotion:(E,R)=>b.current[`${E}@${R}`]??null,setPendingPromotion:(E,R,L)=>{const H=`${E}@${R}`;L?b.current[H]=L:delete b.current[H]}}}const Rp=(e,t)=>({height:28,padding:"0 10px",background:e?"var(--color-accent-bg)":"transparent",color:e?"var(--color-accent)":"var(--text-secondary)",border:`1px solid ${e?"var(--color-accent)":"var(--border-primary)"}`,borderRadius:6,cursor:t?"not-allowed":"pointer",opacity:t?.55:1,fontSize:12,fontWeight:600,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"});function uE({c:e}){if(!e.enabled)return null;const{status:t}=e.data,r=t==="ready";return o.jsxs(o.Fragment,{children:[t==="error"&&o.jsx("button",{type:"button",style:Rp(!1,!1),onClick:e.data.reload,title:e.data.error??"加载自助接入信息失败",children:"自助接入加载失败 · 重试"}),o.jsxs("button",{type:"button",style:Rp(!0,!r),disabled:!r,onClick:e.openWizard,title:r?"按命名规范新建流程(选择产品 → 命名 → 起点)":t==="loading"?"正在加载自助接入信息…":"自助接入暂不可用",children:[o.jsx("span",{"aria-hidden":"true",children:"+"}),o.jsx("span",{children:"新建流程"})]}),o.jsxs("button",{type:"button",style:Rp(!1,!e.canPromote),disabled:!e.canPromote,onClick:e.openPromotion,title:e.canPromote?"把当前临时流程申请上线到生产":"仅类型为 tmp 的临时流程可以申请上线",children:[o.jsx("span",{"aria-hidden":"true",children:o.jsx(mn,{size:14,strokeWidth:1.75,"aria-hidden":"true"})}),o.jsx("span",{children:"申请上线"})]})]})}function pE({c:e}){const t=re(a=>a.workflowDef?.name),r=re(a=>a.workflowDef?.version),{provider:n,data:s}=e;return!n||!e.enabled?null:o.jsxs(o.Fragment,{children:[e.confirmReplace&&o.jsx(qt,{message:"新建流程会替换当前画布上的流程。替换后可以用撤销(⌘Z / Ctrl+Z)找回。继续新建吗?",onConfirm:()=>e.resolveConfirmReplace(!0),onCancel:()=>e.resolveConfirmReplace(!1)}),e.wizardOpen&&s.context&&o.jsx(t0,{provider:n,trialEnabled:s.context.trialEnabled,products:s.products,domains:s.domains,defaultLevel:e.level,ownerEmail:e.ownerEmail,onClose:e.close,onCreate:e.handleCreate,onTrialStarted:e.handleTrialStarted,onPickTemplate:e.onPickTemplate,onImportApi:e.onImportApi}),e.promoOpen&&t&&o.jsx(c0,{provider:n,workflowName:t,version:r??1,onClose:e.close,onRequested:a=>e.track("promotion_requested",{targetType:a}),onStateChange:a=>e.track("promotion_state",{state:a}),resumeRequest:e.getPendingPromotion(t,r??1),onRequestChange:a=>e.setPendingPromotion(t,r??1,a)})]})}function fE({c:e}){return e.showGuide?o.jsx("div",{style:{position:"absolute",inset:0,zIndex:20,display:"flex",alignItems:"center",justifyContent:"center",padding:24,pointerEvents:"none",background:"color-mix(in srgb, var(--bg-primary) 82%, transparent)"},children:o.jsx("div",{style:{pointerEvents:"auto"},children:o.jsx(d0,{onStart:e.openWizard,onDismiss:e.dismissGuide})})}):null}const u0=T.forwardRef(({workflowDef:e,readOnly:t=!1,theme:r="dark",themeColor:n="blue",layoutDirection:s="LR",searchQuery:a="",workflowExecution:i,onRequestImport:l,executionActions:c,aiConfig:d,viewMode:u="developer",uiMode:p="pro",actions:f,libraryProvider:m,providers:h,currentWorkflowLevel:y,onSave:x,onWorkflowChange:g,height:v="100%",onTriggerExecution:k,onPollExecution:b,executionPollInterval:S=3e3},j)=>{const _=w2(h,{library:m}),w=_.library,I=C2("workflow",_.telemetry);E2(I),R2(I);const C=T.useCallback(se=>{I("step_added",{source:se.source})},[I]),N=T.useCallback(se=>{I("sandbox_run",{result:se,entry:"business"})},[I]),O=T.useCallback(se=>{I("sandbox_run",{result:se,entry:"template"})},[I]),[E,R]=T.useState("card"),[L,H]=T.useState(!1),[F,q]=T.useState(!1),[A,W]=T.useState([]),P=dE({provider:_.onboarding,track:I,disabled:t||!!i,onPickTemplate:()=>H(!0),onImportApi:()=>q(!0)}),[$,X]=T.useState(null),D=!!_.onboarding,B=P.data.domains,U=T.useMemo(()=>{if(x)return se=>{X(D?JC(se.name,B):null),I("workflow_saved"),x(se)}},[x,I,D,B]),G=y??P.level,[ne]=T.useState(()=>new L1);M1(ne,w);const ye=Us(ne),Q=T.useMemo(()=>{const se=w?Bb(ne):[];if((!f||f.length===0)&&se.length===0&&A.length===0)return Ze;const Ae=new Fs(Ze.getAllActions());f&&Ae.registerAll(f),Ae.registerAll(A);for(const qe of se)Ae.unregister(qe.id),Ae.register(qe);return Ae},[f,A,w,ne,ye.revision]),{setWorkflow:_e,setWorkflowDefOnly:ve,refreshGraph:je,graphStale:fe,setTheme:V,setThemeColor:ee,setLayoutDirection:z,setNodesLocked:Ie,selectedTask:ke,setSelectedTask:Ne,edgeType:Te,importExecutionJSON:Se,setMode:le,setViewMode:Ce,isDetailPanelOpen:Me,setIsDetailPanelOpen:Ve,selectTaskAction:Z,workflowDef:oe,isSimRunning:ie,startSimulation:ge,stopSimulation:te,mode:me,setShowRunPanel:Re,showAnalysisPanel:we,setShowAnalysisPanel:ze,executionData:Oe,workflowInstance:Ee}=re($e(se=>({setWorkflow:se.setWorkflow,setWorkflowDefOnly:se.setWorkflowDefOnly,refreshGraph:se.refreshGraph,graphStale:se.graphStale,setTheme:se.setTheme,setThemeColor:se.setThemeColor,setLayoutDirection:se.setLayoutDirection,setNodesLocked:se.setNodesLocked,selectedTask:se.selectedTask,setSelectedTask:se.setSelectedTask,edgeType:se.edgeType,importExecutionJSON:se.importExecutionJSON,setMode:se.setMode,setViewMode:se.setViewMode,isDetailPanelOpen:se.isDetailPanelOpen,setIsDetailPanelOpen:se.setIsDetailPanelOpen,selectTaskAction:se.selectTaskAction,workflowDef:se.workflowDef,isSimRunning:se.isSimRunning,startSimulation:se.startSimulation,stopSimulation:se.stopSimulation,mode:se.mode,setShowRunPanel:se.setShowRunPanel,showAnalysisPanel:se.showAnalysisPanel,setShowAnalysisPanel:se.setShowAnalysisPanel,executionData:se.executionData,workflowInstance:se.workflowInstance}))),De=T.useCallback(()=>{if(!oe)return;const se=new Blob([JSON.stringify(oe,null,2)],{type:"application/json"}),Ae=URL.createObjectURL(se),qe=document.createElement("a");qe.href=Ae,qe.download=`${oe.name||"workflow"}.json`,qe.click(),URL.revokeObjectURL(Ae)},[oe]),ct=T.useCallback(()=>{oe&&navigator.clipboard.writeText(JSON.stringify(oe,null,2))},[oe]);T.useEffect(()=>{V(r),ee(n),z(s),Ie(t||!!i)},[r,n,s,t,i,V,ee,z,Ie]),T.useEffect(()=>{Ce(i?"developer":u)},[u,i,Ce]),T.useEffect(()=>{e&&(_e(e,s),re.temporal.getState().clear())},[e,_e,s]),T.useEffect(()=>{i?Se(i):le(t?"view":"edit")},[i,Se,le,t]),T.useImperativeHandle(j,()=>({getWorkflowDef:()=>re.getState().workflowDef,getValidationResults:()=>re.getState().validationResults,save:()=>{const se=re.getState().workflowDef;se&&U&&U(se)},createBlankWorkflow:se=>{re.getState().createBlankWorkflow(se),re.temporal.getState().clear()},openApiImport:()=>q(!0)}),[U]),T.useEffect(()=>{if(!g)return;let se=!0,Ae=re.getState().workflowDef;return re.subscribe(cr=>{const ht=cr.workflowDef;if(ht!==Ae){if(Ae=ht,se){se=!1;return}ht&&g(ht)}})},[g]);const st=p==="business"&&E==="card";T.useEffect(()=>{!st&&fe&&je()},[st,fe,je]);const de=T.useCallback((se,Ae)=>{if(se.length===0)return;const qe=new Set(se.map(ht=>ht.id));W(ht=>[...ht.filter(Tr=>!qe.has(Tr.id)),...se]);const cr=Bk(re.getState().workflowDef,se);st?ve(cr):_e(cr,s),I("api_imported",{format:Ae.format,count:Ae.count});for(let ht=0;ht<se.length;ht++)I("step_added",{source:"import"})},[st,ve,_e,s,I]),Ye=se=>{me!=="run"&&!i?Z(se,!0):Ne(se)};return o.jsxs("div",{className:`workflow-ide ${r==="light"?"light-theme":""}`,"data-mode":r,"data-brand":n,style:{width:"100%",height:v,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-primary)",flexShrink:0,flexWrap:"wrap"},children:[p==="business"&&me!=="run"&&o.jsxs("div",{style:{display:"inline-flex",background:"var(--bg-highlight)",borderRadius:6,padding:2,border:"1px solid var(--border-secondary)"},children:[o.jsxs("button",{onClick:()=>R("card"),style:{height:24,padding:"0 8px",borderRadius:4,border:"none",background:E==="card"?"var(--color-accent)":"transparent",color:E==="card"?"var(--color-on-accent)":"var(--text-secondary)",cursor:"pointer",fontSize:11,fontWeight:500,display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(dT,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),"业务卡片流"]}),o.jsxs("button",{onClick:()=>R("canvas"),style:{height:24,padding:"0 8px",borderRadius:4,border:"none",background:E==="canvas"?"var(--color-accent)":"transparent",color:E==="canvas"?"var(--color-on-accent)":"var(--text-secondary)",cursor:"pointer",fontSize:11,fontWeight:500,display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(vT,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),"全景画布"]})]}),o.jsx("div",{style:{flex:1}}),me==="edit"&&!t&&o.jsxs("button",{onClick:()=>q(!0),style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"从 OpenAPI / Swagger / Postman / curl 导入接口,生成 HTTP 步骤",children:[o.jsx(db,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"导入接口"})]}),me!=="run"&&o.jsx(uE,{c:P}),me!=="run"&&o.jsxs("button",{onClick:()=>H(!0),style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:600,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"打开场景化工作流模板中心",children:[o.jsx(uT,{size:14,strokeWidth:1.75,"aria-hidden":"true"}),o.jsx("span",{children:"模板中心"})]}),me==="edit"&&oe&&o.jsxs("button",{onClick:()=>Re(!0),style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--color-accent) 15%, transparent)",color:"var(--color-accent)",border:"1px solid color-mix(in srgb, var(--color-accent) 40%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:600,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"填写工作流入参并触发真实执行",children:[o.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("path",{d:"M4 3l9 5-9 5z"})}),"执行验证"]}),me==="run"&&Oe&&o.jsxs("button",{onClick:()=>ze(!we),style:{height:28,padding:"0 10px",background:we?"color-mix(in srgb, var(--color-accent) 20%, transparent)":"transparent",color:we?"var(--color-accent)":"var(--text-secondary)",border:`1px solid ${we?"color-mix(in srgb, var(--color-accent) 40%, transparent)":"var(--border-strong)"}`,borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"查看执行概览与异常分析",children:[o.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",children:[o.jsx("rect",{x:"2",y:"2",width:"12",height:"12",rx:"2"}),o.jsx("path",{d:"M5 8h6M5 5h3M5 11h4"})]}),"分析"]}),me!=="run"&&oe&&(ie?o.jsxs("button",{onClick:te,style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--status-failed) 15%, transparent)",color:"var(--status-failed)",border:"1px solid color-mix(in srgb, var(--status-failed) 30%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"停止流转预览",children:[o.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("rect",{x:"4",y:"4",width:"8",height:"8",rx:"1"})}),"停止"]}):o.jsxs("button",{onClick:ge,style:{height:28,padding:"0 10px",background:"color-mix(in srgb, var(--status-completed) 15%, transparent)",color:"var(--status-completed)",border:"1px solid color-mix(in srgb, var(--status-completed) 30%, transparent)",borderRadius:6,cursor:"pointer",fontSize:12,fontWeight:500,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"按连线顺序播放步骤流转动画(不执行任何步骤)",children:[o.jsx("svg",{width:"10",height:"10",viewBox:"0 0 16 16",fill:"currentColor",children:o.jsx("path",{d:"M4 3l9 5-9 5z"})}),"流转预览"]})),oe&&o.jsxs(o.Fragment,{children:[o.jsxs("button",{onClick:De,style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"导出工作流 JSON 文件",children:[o.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:o.jsx("path",{d:"M3 10v2.5a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5V10M5 7l3 3 3-3M8 2v8",strokeLinecap:"round",strokeLinejoin:"round"})}),"导出 JSON"]}),o.jsxs("button",{onClick:ct,style:{height:28,padding:"0 10px",background:"transparent",color:"var(--text-secondary)",border:"1px solid var(--border-secondary)",borderRadius:6,cursor:"pointer",fontSize:12,display:"inline-flex",alignItems:"center",gap:5,fontFamily:"inherit"},title:"复制 Conductor DSL 到剪贴板",children:[o.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[o.jsx("rect",{x:"4",y:"4",width:"9",height:"10",rx:"1"}),o.jsx("path",{d:"M2 10V3a1 1 0 0 1 1-1h7",strokeLinecap:"round"})]}),"复制 DSL"]})]})]}),$&&o.jsxs("div",{role:"status",style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",fontSize:12,color:"var(--cm-status-warning)",background:"var(--cm-warning-tint)",borderBottom:"1px solid var(--border)",flexShrink:0},children:[o.jsx(tt,{size:14,strokeWidth:1.75,"aria-hidden":"true",style:{flexShrink:0}}),o.jsx("span",{style:{flex:1,color:"var(--text-primary)"},children:$}),o.jsx("button",{type:"button",onClick:()=>X(null),"aria-label":"关闭命名提示",style:{background:"none",border:"none",color:"var(--text-secondary)",cursor:"pointer",padding:2,display:"inline-flex"},children:o.jsx(Le,{size:14,strokeWidth:1.75,"aria-hidden":"true"})})]}),p==="business"&&E==="card"?o.jsx("div",{style:{flex:1,position:"relative",overflow:"hidden"},children:o.jsx(xk,{workflowDef:oe,workflowExecution:Ee??void 0,registry:Q,libraryCatalog:w?ne:void 0,currentWorkflowLevel:G,onStepAdded:C,onSandboxRun:N,readOnly:t||me==="run",onSave:U,onUndo:()=>re.temporal.getState().undo(),onRedo:()=>re.temporal.getState().redo(),onChange:se=>{ve(se)}})}):o.jsx("div",{className:"workflow-viewer",style:{flex:1,position:"relative",overflow:"hidden"},children:o.jsx(J.ReactFlowProvider,{children:o.jsx(MN,{onNodeClick:Ye,edgeType:Te,theme:r,nodesLocked:t||me==="run"||!!i,searchQuery:a,onSave:U,onRequestImport:l,executionActions:c})})}),o.jsx(VN,{task:ke,isOpen:Me&&me!=="run",onClose:()=>Ve(!1),theme:r,aiConfig:d}),(i||me==="run")&&o.jsx(GN,{executionActions:c}),o.jsx(n2,{aiConfig:d}),o.jsx(o2,{onTriggerExecution:k,onPollExecution:b,executionPollInterval:S}),me==="run"&&o.jsx(h2,{}),o.jsx(Fk,{open:F,onClose:()=>q(!1),onInsert:de,existingActionIds:F?Q.getAllActions().map(se=>se.id):void 0}),o.jsx(bk,{isOpen:L,onClose:()=>{H(!1),P.takePendingIdentity()},onSandboxRun:O,onSelectTemplate:se=>{for(let qe=0;qe<(se.tasks?.length??0);qe++)I("step_added",{source:"template"});const Ae=P.takePendingIdentity();_e(Ae?{...se,name:Ae.name,description:Ae.description||se.description,...Ae.ownerEmail?{ownerEmail:Ae.ownerEmail}:{}}:se,s)}}),o.jsx(pE,{c:P}),o.jsx(fE,{c:P})]})});u0.displayName="WorkflowIDE";const mE={workflows:"/metadata/workflow",workflow:"/metadata/workflow",taskDefs:"/metadata/taskdefs"};function Op(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}function hE(e){const t={...mE,...e.paths??{}},r=(i,l)=>{const c=e.fetch??(typeof fetch=="function"?fetch:void 0);return c?c(i,l):Promise.reject(new Error("当前环境没有 fetch,请通过 options.fetch 传入"))};async function n(i,l){const c=e.headers?await e.headers():{};return r(i,{method:"GET",headers:{Accept:"application/json",...c},signal:l})}function s(i){const l=e.resolveExtension?.(i);return{def:i,...l?{extension:l}:{},...l?.deprecated?{deprecated:!0}:{}}}function a(i,l){const c=encodeURIComponent(i),d=t.workflow.includes("{name}")?t.workflow.replace("{name}",c):`${t.workflow.replace(/\/+$/,"")}/${c}`,u=Op(e.baseUrl,d);return l!==void 0?`${u}?version=${encodeURIComponent(String(l))}`:u}return{async list(i){const l=Op(e.baseUrl,t.workflows),c=await n(l,i);if(!c.ok)throw new Error(`获取流程库列表失败:HTTP ${c.status}(${l})`);const d=await c.json();if(!Array.isArray(d))throw new Error(`流程库列表返回格式不正确(期望数组):${l}`);const u=new Map;for(const f of d){if(!f||typeof f.name!="string"||e.filter&&!e.filter(f))continue;const m=u.get(f.name);(!m||Rn(f.version).version>=Rn(m.version).version)&&u.set(f.name,f)}const p={workflows:Array.from(u.values()).map(s)};if(e.includeTaskDefs){const f=Op(e.baseUrl,t.taskDefs),m=await n(f,i);if(!m.ok)throw new Error(`获取任务定义失败:HTTP ${m.status}(${f})`);const h=await m.json();if(!Array.isArray(h))throw new Error(`任务定义返回格式不正确(期望数组):${f}`);p.tasks=h.filter(y=>y&&typeof y.name=="string").map(y=>{const x=e.resolveTaskExtension?.(y);return{def:y,...x?{extension:x}:{}}})}return p},async get(i,l,c){const d=a(i,l),u=await n(d,c);if(u.status===404)return null;if(!u.ok)throw new Error(`获取流程库工作流「${i}」失败:HTTP ${u.status}(${d})`);const p=await u.json();return!p||typeof p.name!="string"||e.filter&&!e.filter(p)?null:s(p)}}}K.ActionForm=op,K.ActionRegistry=Fs,K.ApiImportDialog=Fk,K.BUILTIN_COMMON_ACTIONS=A1,K.BUILTIN_ECS_ACTIONS=P1,K.BUILTIN_WORKFLOW_TEMPLATES=E1,K.DataPillInput=Gs,K.DecisionBranchCard=yp,K.ForkJoinCard=pp,K.FriendlyErrorCard=hk,K.JqError=xe,K.LibraryCatalog=L1,K.LoopDoWhileCard=fp,K.OTHER_DOMAIN=Ds,K.OnboardingGuideCard=d0,K.OnboardingWizard=t0,K.PromotionPanel=c0,K.RunStoryTimeline=yk,K.StepFlowEditor=xk,K.TemplateExtractor=O1,K.TemplateGallery=bk,K.TemplateSetupWizard=vk,K.TemplateStore=R1,K.WORKFLOW_NAME_TYPES=Bs,K.WorkflowIDE=u0,K.WorkflowIdeProvider=b2,K.WorkflowNameBuilder=Qk,K.analyzeTasksForPruning=I1,K.appendImportedActions=Bk,K.applyTaskPruning=N1,K.applyTemplateVariables=xp,K.applyUpgradeToValues=up,K.buildActionFromTaskDef=qu,K.buildActionFromWorkflowDef=zu,K.buildActionsFromLibrary=FI,K.buildActionsFromTaskDefs=BI,K.buildDataFlowGraph=tu,K.buildDefaultWorkflowMockInput=ln,K.buildHttpAction=Mk,K.buildPromotionTimeline=s0,K.buildSkeletonWorkflow=Kk,K.buildUpgradeConfirmMessage=ok,K.buildWorkflowName=Fn,K.canCallLevel=Fb,K.collectLibraryDomains=Ub,K.collectReferencedOutputKeys=dp,K.compileStepModelToWorkflowDef=H1,K.compileStepToTaskDef=ep,K.createConductorLibraryProvider=hE,K.createStepFromAction=ir,K.createTelemetryBuffer=F1,K.createWorkerScriptEvaluator=Cv,K.decompileTaskDefToStep=J1,K.decompileWorkflowDefToStepModel=U1,K.defaultActionRegistry=Ze,K.defaultTemplateStore=Ku,K.describeUnavailable=lk,K.detectFormat=IC,K.diffWorkflowVersions=nk,K.entriesToLibraryItems=Bu,K.entryFromRecord=Js,K.executeLocalSandboxDryRun=kj,K.executeLocalSandboxDryRunAsync=cn,K.extractTemplateFromInstance=C1,K.filterPickableActions=Jb,K.generateDefaultTaskOutputPreview=_s,K.getCompletionItems=gv,K.getUpstreamAncestors=ms,K.inferTaskOutputSchema=yv,K.isDiffEmpty=sk,K.isPromotableName=Vk,K.isTerminalPromotionState=ia,K.libraryDomainOf=Ms,K.nextPollDelay=r0,K.normalizeVersion=Rn,K.parseApiText=Lk,K.parseCurl=Ak,K.parseOpenApi3=Ek,K.parsePostman21=Pk,K.parseSwagger2=Rk,K.parseWorkflowInputParams=Ct,K.parseWorkflowName=Hs,K.pollPromotion=o0,K.promotionStateLabel=oE,K.promotionTargetName=Uk,K.refactorTaskReferenceName=ys,K.resolveLibraryBadgeState=ik,K.resolveProviders=Xu,K.runJq=Iv,K.sanitizeHeaders=kp,K.scanObjectForSensitiveFindings=zs,K.scanWorkflowDef=j1,K.schemaToTypeStrings=bn,K.stabilizeProviders=z1,K.suggestFuncSlug=Jk,K.summarizeDiff=ak,K.toActionExtension=Fu,K.toActions=Bb,K.toLibraryItems=UI,K.toTaskSchemas=JI,K.translateTechnicalError=gp,K.useIdeProviders=k2,K.useLibraryCatalogLoader=M1,K.useLibraryCatalogSnapshot=Us,K.validateNameParts=Cp,K.validateWorkflowName=Gu,Object.defineProperty(K,Symbol.toStringTag,{value:"Module"})}));